diff --git a/.gitignore b/.gitignore
index 1bb8669b490ece744c69e3abda15c41c7c1f00d9..aea28287072eb61d21d66786fceeb2905dad621b 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,6 +7,7 @@ build.xml
 TODO.txt
 .gradle
 .settings
+.idea
 build
 src/test/java/testing
 src/test/resources/other
diff --git a/src/main/java/de/tlc4b/TLCRunner.java b/src/main/java/de/tlc4b/TLCRunner.java
index f04f3f0ed1a94428ef7d8c209fbcf30d6f30068c..53c2eaa967df5a110bed85b80cda8d053eef53cb 100644
--- a/src/main/java/de/tlc4b/TLCRunner.java
+++ b/src/main/java/de/tlc4b/TLCRunner.java
@@ -4,22 +4,22 @@ import static de.tlc4b.util.StopWatch.Watches.MODEL_CHECKING_TIME;
 
 import java.io.BufferedReader;
 import java.io.File;
-import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
-import java.net.UnknownHostException;
 import java.nio.charset.StandardCharsets;
 import java.nio.file.FileSystems;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Locale;
 import java.util.Set;
 
 import de.tlc4b.tlc.TLCMessageListener;
 import de.tlc4b.util.StopWatch;
 import tlc2.TLCGlobals;
+import tlc2.tool.fp.FPSetFactory;
 import util.SimpleFilenameToStream;
 import util.ToolIO;
 import tlc2.TLC;
@@ -47,26 +47,28 @@ public class TLCRunner {
 		}
 	}
 
-	private static Process startJVM(final String optionsAsString,
-			final String mainClass, final String[] arguments)
+	private static Process startJVM(final String mainClass, final List<String> arguments)
 			throws IOException {
 
 		String separator = FileSystems.getDefault().getSeparator();
 
-		String jvm = System.getProperty("java.home") + separator + "bin"
-				+ separator + "java";
+		boolean isWindows = System.getProperty("os.name").toLowerCase(Locale.ROOT).startsWith("windows");
+		String jvm = System.getProperty("java.home") + separator + "bin" + separator + (isWindows ? "java" : "java.exe");
 		String classpath = System.getProperty("java.class.path");
 
-		List<String> command = new ArrayList<>(Arrays.asList(jvm, "-cp", classpath, mainClass));
-		command.addAll(Arrays.asList(arguments));
+		List<String> command = new ArrayList<>();
+		command.add(jvm);
+		command.addAll(Arrays.asList("-XX:+UseParallelGC", "-Dfile.encoding=UTF-8", "-Dtlc2.tool.fp.FPSet.impl=" + FPSetFactory.getImplementationDefault()));
+		command.add(mainClass);
+		command.addAll(arguments);
 
 		ProcessBuilder processBuilder = new ProcessBuilder(command);
+		processBuilder.environment().put("CLASSPATH", classpath);
 		return processBuilder.start();
 	}
 
-	public static ArrayList<String> runTLCInANewJVM(String machineName,
-			String path) throws IOException {
-		ArrayList<String> list = new ArrayList<>();
+	public static ArrayList<String> runTLCInANewJVM(String machineName, String path) throws IOException {
+		List<String> list = new ArrayList<>();
 		list.add(path);
 		list.add(machineName);
 		if (!TLC4BGlobals.isDeadlockCheck()) {
@@ -79,8 +81,7 @@ public class TLCRunner {
 		// list.add("-coverage");
 		// list.add("1");
 
-		String[] args = list.toArray(new String[0]);
-		final Process p = startJVM("", TLCRunner.class.getCanonicalName(), args);
+		final Process p = startJVM(TLCRunner.class.getCanonicalName(), list);
 		StreamGobbler stdOut = new StreamGobbler(p.getInputStream());
 		stdOut.start();
 		StreamGobbler errOut = new StreamGobbler(p.getErrorStream());