diff --git a/src/main/java/de/prob2/jupyter/CommandUtils.java b/src/main/java/de/prob2/jupyter/CommandUtils.java
index 4ed1d6b0006d44f4ced612ffe8b0b8dd20987e1f..022a31790c2e8c4a1e907431cb52d47d7a3c536a 100644
--- a/src/main/java/de/prob2/jupyter/CommandUtils.java
+++ b/src/main/java/de/prob2/jupyter/CommandUtils.java
@@ -393,57 +393,53 @@ public final class CommandUtils {
 		return result;
 	}
 	
-	public static @Nullable DisplayData inspectInBExpression(final @NotNull Trace trace, final @NotNull String code, final int at) {
-		final Matcher identifierMatcher = CommandUtils.matchBIdentifierAt(code, at);
-		if (identifierMatcher == null) {
-			return null;
-		}
-		final String identifier = identifierMatcher.group();
-		final IEvalElement formula = trace.getModel().parseFormula(identifier, FormulaExpand.TRUNCATE);
-		final TypeCheckResult type = trace.getStateSpace().typeCheck(formula);
-		final AbstractEvalResult currentValue = trace.evalCurrent(formula);
-		
-		return formatBExpressionInspectText(identifier, type, currentValue);
-	}
-	
 	public static @NotNull Inspector bExpressionInspector(final @NotNull Trace trace) {
-		return (code, at) -> inspectInBExpression(trace, code, at);
-	}
-	
-	public static @NotNull ReplacementOptions completeInBExpression(final @NotNull Trace trace, final @NotNull String code, final int at) {
-		final Matcher identifierMatcher = matchBIdentifierAt(code, at);
-		// Try to find the identifier that the cursor is in.
-		// If the cursor is not on an identifier, default to empty string, i. e. show all possible completions.
-		String prefix;
-		int start;
-		int end;
-		if (identifierMatcher == null) {
-			prefix = "";
-			start = at;
-			end = at;
-		} else {
-			prefix = code.substring(identifierMatcher.start(), at);
-			start = identifierMatcher.start();
-			end = identifierMatcher.end();
-		}
-		
-		final CompleteIdentifierCommand cmdExact = new CompleteIdentifierCommand(prefix);
-		cmdExact.setIncludeKeywords(true);
-		trace.getStateSpace().execute(cmdExact);
-		// Use LinkedHashSet to remove duplicates while maintaining order.
-		final Set<String> completions = new LinkedHashSet<>(cmdExact.getCompletions());
-		
-		final CompleteIdentifierCommand cmdIgnoreCase = new CompleteIdentifierCommand(prefix);
-		cmdIgnoreCase.setIgnoreCase(true);
-		cmdIgnoreCase.setIncludeKeywords(true);
-		trace.getStateSpace().execute(cmdIgnoreCase);
-		completions.addAll(cmdIgnoreCase.getCompletions());
-		
-		return new ReplacementOptions(new ArrayList<>(completions), start, end);
+		return (code, at) -> {
+			final Matcher identifierMatcher = CommandUtils.matchBIdentifierAt(code, at);
+			if (identifierMatcher == null) {
+				return null;
+			}
+			final String identifier = identifierMatcher.group();
+			final IEvalElement formula = trace.getModel().parseFormula(identifier, FormulaExpand.TRUNCATE);
+			final TypeCheckResult type = trace.getStateSpace().typeCheck(formula);
+			final AbstractEvalResult currentValue = trace.evalCurrent(formula);
+			
+			return formatBExpressionInspectText(identifier, type, currentValue);
+		};
 	}
 	
 	public static @NotNull Completer bExpressionCompleter(final @NotNull Trace trace) {
-		return (code, at) -> completeInBExpression(trace, code, at);
+		return (code, at) -> {
+			final Matcher identifierMatcher = matchBIdentifierAt(code, at);
+			// Try to find the identifier that the cursor is in.
+			// If the cursor is not on an identifier, default to empty string, i. e. show all possible completions.
+			String prefix;
+			int start;
+			int end;
+			if (identifierMatcher == null) {
+				prefix = "";
+				start = at;
+				end = at;
+			} else {
+				prefix = code.substring(identifierMatcher.start(), at);
+				start = identifierMatcher.start();
+				end = identifierMatcher.end();
+			}
+			
+			final CompleteIdentifierCommand cmdExact = new CompleteIdentifierCommand(prefix);
+			cmdExact.setIncludeKeywords(true);
+			trace.getStateSpace().execute(cmdExact);
+			// Use LinkedHashSet to remove duplicates while maintaining order.
+			final Set<String> completions = new LinkedHashSet<>(cmdExact.getCompletions());
+			
+			final CompleteIdentifierCommand cmdIgnoreCase = new CompleteIdentifierCommand(prefix);
+			cmdIgnoreCase.setIgnoreCase(true);
+			cmdIgnoreCase.setIncludeKeywords(true);
+			trace.getStateSpace().execute(cmdIgnoreCase);
+			completions.addAll(cmdIgnoreCase.getCompletions());
+			
+			return new ReplacementOptions(new ArrayList<>(completions), start, end);
+		};
 	}
 	
 	private static @NotNull DisplayData formatPreferenceInspectText(final String name, final String currentValue, final ProBPreference pref) {
@@ -486,44 +482,40 @@ public final class CommandUtils {
 		return result;
 	}
 	
-	public static @Nullable DisplayData inspectInPreference(final @NotNull Trace trace, final @NotNull String code, final int at) {
-		final Matcher prefNameMatcher = B_IDENTIFIER_PATTERN.matcher(code);
-		if (prefNameMatcher.lookingAt() && at <= prefNameMatcher.end()) {
-			final String name = prefNameMatcher.group();
-			final GetPreferenceCommand cmdCurrent = new GetPreferenceCommand(name);
-			final GetDefaultPreferencesCommand cmdDefaults = new GetDefaultPreferencesCommand();
-			trace.getStateSpace().execute(cmdCurrent, cmdDefaults);
-			final String currentValue = cmdCurrent.getValue();
-			final ProBPreference pref = cmdDefaults.getPreferences()
-				.stream()
-				.filter(p -> name.equals(p.name))
-				.findAny()
-				.orElseThrow(NoSuchElementException::new);
-			
-			return formatPreferenceInspectText(name, currentValue, pref);
-		} else {
-			return null;
-		}
-	}
-	
 	public static @NotNull Inspector preferenceInspector(final @NotNull Trace trace) {
-		return (code, at) -> inspectInPreference(trace, code, at);
-	}
-	
-	public static @Nullable ReplacementOptions completeInPreference(final @NotNull Trace trace, final @NotNull String code, final int at) {
-		final Matcher prefNameMatcher = B_IDENTIFIER_PATTERN.matcher(code);
-		if (prefNameMatcher.lookingAt() && at <= prefNameMatcher.end()) {
-			final String prefix = code.substring(prefNameMatcher.start(), at);
-			final GetCurrentPreferencesCommand cmd = new GetCurrentPreferencesCommand();
-			trace.getStateSpace().execute(cmd);
-			final List<String> prefs = cmd.getPreferences().keySet().stream().filter(s -> s.startsWith(prefix)).sorted().collect(Collectors.toList());
-			return new ReplacementOptions(prefs, prefNameMatcher.start(), prefNameMatcher.end());
-		} else {
-			return null;
-		}
+		return (code, at) -> {
+			final Matcher prefNameMatcher = B_IDENTIFIER_PATTERN.matcher(code);
+			if (prefNameMatcher.lookingAt() && at <= prefNameMatcher.end()) {
+				final String name = prefNameMatcher.group();
+				final GetPreferenceCommand cmdCurrent = new GetPreferenceCommand(name);
+				final GetDefaultPreferencesCommand cmdDefaults = new GetDefaultPreferencesCommand();
+				trace.getStateSpace().execute(cmdCurrent, cmdDefaults);
+				final String currentValue = cmdCurrent.getValue();
+				final ProBPreference pref = cmdDefaults.getPreferences()
+					.stream()
+					.filter(p -> name.equals(p.name))
+					.findAny()
+					.orElseThrow(NoSuchElementException::new);
+				
+				return formatPreferenceInspectText(name, currentValue, pref);
+			} else {
+				return null;
+			}
+		};
 	}
 	
 	public static @NotNull Completer preferenceCompleter(final @NotNull Trace trace) {
-		return (code, at) -> completeInPreference(trace, code, at);
+		return (code, at) -> {
+			final Matcher prefNameMatcher = B_IDENTIFIER_PATTERN.matcher(code);
+			if (prefNameMatcher.lookingAt() && at <= prefNameMatcher.end()) {
+				final String prefix = code.substring(prefNameMatcher.start(), at);
+				final GetCurrentPreferencesCommand cmd = new GetCurrentPreferencesCommand();
+				trace.getStateSpace().execute(cmd);
+				final List<String> prefs = cmd.getPreferences().keySet().stream().filter(s -> s.startsWith(prefix)).sorted().collect(Collectors.toList());
+				return new ReplacementOptions(prefs, prefNameMatcher.start(), prefNameMatcher.end());
+			} else {
+				return null;
+			}
+		};
 	}
 }