diff --git a/src/main/java/de/prob2/jupyter/CommandUtils.java b/src/main/java/de/prob2/jupyter/CommandUtils.java
index cd77b5107727d973b893a9d00c84abebb9e127cf..1078400eec1377c5d409709e286af69e1cb5e2e7 100644
--- a/src/main/java/de/prob2/jupyter/CommandUtils.java
+++ b/src/main/java/de/prob2/jupyter/CommandUtils.java
@@ -94,10 +94,10 @@ public final class CommandUtils {
 		final SplitArguments splitArgs = new SplitArguments(Collections.emptyMap());
 		PositionedString remainingArgs = new PositionedString(argString, 0);
 		if (parameters.getBodyParam().isPresent()) {
-			final Matcher bodySplitMatcher = BODY_SPLIT_PATTERN.matcher(argString);
+			final Matcher bodySplitMatcher = BODY_SPLIT_PATTERN.matcher(remainingArgs.getValue());
 			if (bodySplitMatcher.find()) {
-				remainingArgs = new PositionedString(argString.substring(0, bodySplitMatcher.start()), remainingArgs.getStartPosition());
-				final PositionedString bodyValue = new PositionedString(argString.substring(bodySplitMatcher.end()), bodySplitMatcher.end());
+				remainingArgs = remainingArgs.substring(0, bodySplitMatcher.start());
+				final PositionedString bodyValue = remainingArgs.substring(bodySplitMatcher.end());
 				splitArgs.add(parameters.getBodyParam().get(), bodyValue);
 			}
 		}
diff --git a/src/main/java/de/prob2/jupyter/Parameter.java b/src/main/java/de/prob2/jupyter/Parameter.java
index e13803e664cbbc91f11a03f1cfe612194ed94175..9ef386900195073779bd735df317c948eb2e9a46 100644
--- a/src/main/java/de/prob2/jupyter/Parameter.java
+++ b/src/main/java/de/prob2/jupyter/Parameter.java
@@ -34,15 +34,15 @@ public interface Parameter<T> {
 			final PositionedString splitArg;
 			final PositionedString remainingArgString;
 			if (argSplitMatcher.find()) {
-				splitArg = new PositionedString(argString.getValue().substring(0, argSplitMatcher.start()), argString.getStartPosition());
-				remainingArgString = new PositionedString(argString.getValue().substring(argSplitMatcher.end()), argString.getStartPosition() + argSplitMatcher.end());
+				splitArg = argString.substring(0, argSplitMatcher.start());
+				remainingArgString = argString.substring(argSplitMatcher.end());
 			} else {
 				splitArg = argString;
-				remainingArgString = new PositionedString("", argString.getStartPosition() + argString.getValue().length());
+				remainingArgString = argString.substring(argString.getValue().length());
 			}
 			return new SplitResult(splitArg, remainingArgString);
 		};
-		public static final @NotNull Parameter.Splitter REMAINDER = argString -> new SplitResult(argString, new PositionedString("", argString.getStartPosition() + argString.getValue().length()));
+		public static final @NotNull Parameter.Splitter REMAINDER = argString -> new SplitResult(argString, argString.substring(argString.getValue().length()));
 		
 		public abstract Parameter.SplitResult split(final @NotNull PositionedString argString);
 	}
diff --git a/src/main/java/de/prob2/jupyter/PositionedString.java b/src/main/java/de/prob2/jupyter/PositionedString.java
index 94c6b0dcf94b75c1bfe1a5d2f09f37de4a5eba7b..494748c7a281bbeb9ea8a7c770cca0c1e50cf2a6 100644
--- a/src/main/java/de/prob2/jupyter/PositionedString.java
+++ b/src/main/java/de/prob2/jupyter/PositionedString.java
@@ -23,6 +23,14 @@ public final class PositionedString {
 		return this.startPosition;
 	}
 	
+	public PositionedString substring(final int beginIndex, final int endIndex) {
+		return new PositionedString(this.getValue().substring(beginIndex, endIndex), this.getStartPosition() + beginIndex);
+	}
+	
+	public PositionedString substring(final int beginIndex) {
+		return this.substring(beginIndex, this.getValue().length());
+	}
+	
 	@Override
 	public String toString() {
 		return MoreObjects.toStringHelper(this)