diff --git a/src/main/java/de/prob2/jupyter/commands/CommandUtils.java b/src/main/java/de/prob2/jupyter/commands/CommandUtils.java
index 4d87db4eec1f30380f85abbd3c198e26fc721791..05e239d7f1e144a3d21d7e777ebe9650a4cd85d5 100644
--- a/src/main/java/de/prob2/jupyter/commands/CommandUtils.java
+++ b/src/main/java/de/prob2/jupyter/commands/CommandUtils.java
@@ -6,11 +6,25 @@ import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
+import de.prob.animator.domainobjects.AbstractEvalResult;
+import de.prob.animator.domainobjects.ComputationNotCompletedResult;
+import de.prob.animator.domainobjects.EnumerationWarning;
+import de.prob.animator.domainobjects.EvalResult;
+import de.prob.animator.domainobjects.EvaluationErrorResult;
+import de.prob.unicode.UnicodeTranslator;
+
 import de.prob2.jupyter.UserErrorException;
 
+import io.github.spencerpark.jupyter.messages.DisplayData;
+
 import org.jetbrains.annotations.NotNull;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
 public final class CommandUtils {
+	private static final Logger LOGGER = LoggerFactory.getLogger(CommandUtils.class);
+	
 	public static @NotNull List<@NotNull String> splitArgs(final @NotNull String args) {
 		final String[] split = args.split("\\h+");
 		if (split.length == 1 && split[0].isEmpty()) {
@@ -31,4 +45,52 @@ public final class CommandUtils {
 		}
 		return preferences;
 	}
+	
+	public static @NotNull DisplayData displayDataForEvalResult(final @NotNull AbstractEvalResult aer) {
+		final StringBuilder sb = new StringBuilder();
+		final boolean error;
+		if (aer instanceof EvalResult) {
+			final EvalResult result = (EvalResult)aer;
+			sb.append(UnicodeTranslator.toUnicode(result.getValue()));
+			if (!result.getSolutions().isEmpty()) {
+				sb.append("\n\nSolution:");
+				result.getSolutions().forEach((k, v) -> {
+					sb.append("\n\t");
+					sb.append(UnicodeTranslator.toUnicode(k));
+					sb.append(" = ");
+					sb.append(UnicodeTranslator.toUnicode(v));
+				});
+			}
+			error = false;
+		} else if (aer instanceof ComputationNotCompletedResult) {
+			final ComputationNotCompletedResult result = (ComputationNotCompletedResult)aer;
+			sb.append("Computation not completed: ");
+			sb.append(result.getReason());
+			error = true;
+		} else if (aer instanceof EnumerationWarning) {
+			sb.append("UNKNOWN (FALSE with enumeration warning)");
+			error = true;
+		} else if (aer instanceof EvaluationErrorResult) {
+			final EvaluationErrorResult result = (EvaluationErrorResult)aer;
+			sb.append(result.getResult());
+			if (!result.getErrors().isEmpty()) {
+				sb.append(": ");
+				result.getErrors().forEach(s -> {
+					sb.append('\n');
+					sb.append(s);
+				});
+			}
+			error = true;
+		} else {
+			LOGGER.info("Unhandled eval result type, falling back to toString(): {}", aer.getClass());
+			sb.append(aer);
+			error = false;
+		}
+		
+		if (error) {
+			throw new UserErrorException(sb.toString());
+		} else {
+			return new DisplayData(sb.toString());
+		}
+	}
 }
diff --git a/src/main/java/de/prob2/jupyter/commands/EvalCommand.java b/src/main/java/de/prob2/jupyter/commands/EvalCommand.java
index 52685fa492ee999d85e48d7f61c80a9be92b6d2d..c533e69bb762d9fa324d322f79e20aa202d95d90 100644
--- a/src/main/java/de/prob2/jupyter/commands/EvalCommand.java
+++ b/src/main/java/de/prob2/jupyter/commands/EvalCommand.java
@@ -2,28 +2,16 @@ package de.prob2.jupyter.commands;
 
 import com.google.inject.Inject;
 
-import de.prob.animator.domainobjects.AbstractEvalResult;
-import de.prob.animator.domainobjects.ComputationNotCompletedResult;
-import de.prob.animator.domainobjects.EnumerationWarning;
-import de.prob.animator.domainobjects.EvalResult;
-import de.prob.animator.domainobjects.EvaluationErrorResult;
 import de.prob.animator.domainobjects.FormulaExpand;
 import de.prob.statespace.AnimationSelector;
-import de.prob.unicode.UnicodeTranslator;
 
 import de.prob2.jupyter.ProBKernel;
-import de.prob2.jupyter.UserErrorException;
 
 import io.github.spencerpark.jupyter.messages.DisplayData;
 
 import org.jetbrains.annotations.NotNull;
 
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
 public final class EvalCommand implements LineCommand {
-	private static final Logger LOGGER = LoggerFactory.getLogger(EvalCommand.class);
-	
 	private final @NotNull AnimationSelector animationSelector;
 	
 	@Inject
@@ -43,56 +31,8 @@ public final class EvalCommand implements LineCommand {
 		return "Evaluate an expression.";
 	}
 	
-	private static @NotNull DisplayData displayDataForEvalResult(final @NotNull AbstractEvalResult aer) {
-		final StringBuilder sb = new StringBuilder();
-		final boolean error;
-		if (aer instanceof EvalResult) {
-			final EvalResult result = (EvalResult)aer;
-			sb.append(UnicodeTranslator.toUnicode(result.getValue()));
-			if (!result.getSolutions().isEmpty()) {
-				sb.append("\n\nSolution:");
-				result.getSolutions().forEach((k, v) -> {
-					sb.append("\n\t");
-					sb.append(UnicodeTranslator.toUnicode(k));
-					sb.append(" = ");
-					sb.append(UnicodeTranslator.toUnicode(v));
-				});
-			}
-			error = false;
-		} else if (aer instanceof ComputationNotCompletedResult) {
-			final ComputationNotCompletedResult result = (ComputationNotCompletedResult)aer;
-			sb.append("Computation not completed: ");
-			sb.append(result.getReason());
-			error = true;
-		} else if (aer instanceof EnumerationWarning) {
-			sb.append("UNKNOWN (FALSE with enumeration warning)");
-			error = true;
-		} else if (aer instanceof EvaluationErrorResult) {
-			final EvaluationErrorResult result = (EvaluationErrorResult)aer;
-			sb.append(result.getResult());
-			if (!result.getErrors().isEmpty()) {
-				sb.append(": ");
-				result.getErrors().forEach(s -> {
-					sb.append('\n');
-					sb.append(s);
-				});
-			}
-			error = true;
-		} else {
-			LOGGER.info("Unhandled eval result type, falling back to toString(): {}", aer.getClass());
-			sb.append(aer);
-			error = false;
-		}
-		
-		if (error) {
-			throw new UserErrorException(sb.toString());
-		} else {
-			return new DisplayData(sb.toString());
-		}
-	}
-	
 	@Override
 	public @NotNull DisplayData run(final @NotNull ProBKernel kernel, final @NotNull String argString) {
-		return EvalCommand.displayDataForEvalResult(this.animationSelector.getCurrentTrace().evalCurrent(argString, FormulaExpand.EXPAND));
+		return CommandUtils.displayDataForEvalResult(this.animationSelector.getCurrentTrace().evalCurrent(argString, FormulaExpand.EXPAND));
 	}
 }