diff --git a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
index 0a1f319..af4763f 100644
--- a/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
+++ b/org.eclipse.jdt.launching/launching/org/eclipse/jdt/launching/AbstractJavaLaunchConfigurationDelegate.java
@@ -19,6 +19,7 @@
 
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
@@ -1172,17 +1173,14 @@
 		if (moduleToLocations.isEmpty()) {
 			return moduleCLIOptions;
 		}
-		StringBuilder sb = new StringBuilder(moduleCLIOptions);
+
+		ArrayList<String> list = new ArrayList<>();
+
+		Collections.addAll(list, DebugPlugin.parseArguments(moduleCLIOptions));
 
 		for (Entry<String, String> entry : moduleToLocations.entrySet()) {
-			if (sb.length() > 0) {
-				sb.append(' ');
-			}
-			sb.append("--patch-module"); //$NON-NLS-1$
-			sb.append(' ');
-			sb.append(entry.getKey());
-			sb.append('=');
-			sb.append(entry.getValue());
+			list.add("--patch-module"); //$NON-NLS-1$
+			list.add(entry.getKey() + '=' + entry.getValue());
 		}
 
 		boolean excludeTestCode = configuration.getAttribute(IJavaLaunchConfigurationConstants.ATTR_EXCLUDE_TEST_CODE, false);
@@ -1191,18 +1189,12 @@
 			IJavaProject project = getJavaProject(configuration);
 			if (project != null) {
 				for (String moduleName : project.determineModulesOfProjectsWithNonEmptyClasspath()) {
-					if (sb.length() > 0) {
-						sb.append(' ');
-					}
-					sb.append("--add-reads"); //$NON-NLS-1$
-					sb.append(' ');
-					sb.append(moduleName);
-					sb.append('=');
-					sb.append("ALL-UNNAMED"); //$NON-NLS-1$
+					list.add("--add-reads"); //$NON-NLS-1$
+					list.add(moduleName + '=' + "ALL-UNNAMED"); //$NON-NLS-1$
 				}
 			}
 		}
-		return sb.toString();
+		return DebugPlugin.renderArguments(list.toArray(new String[list.size()]), null);
 	}
 
 	/**
