diff --git a/run.n b/run.n
index 4e278d9823..2544816fbf 100644
Binary files a/run.n and b/run.n differ
diff --git a/src/lime/tools/HXProject.hx b/src/lime/tools/HXProject.hx
index 78eab02131..a891752af6 100644
--- a/src/lime/tools/HXProject.hx
+++ b/src/lime/tools/HXProject.hx
@@ -376,38 +376,18 @@ class HXProject extends Script
 
 		var tempDirectory = System.getTemporaryDirectory();
 		var classFile = Path.combine(tempDirectory, name + ".hx");
-		var nekoOutput = Path.combine(tempDirectory, name + ".n");
 
 		System.copyFile(path, classFile);
 
-		#if lime
-		var args = [
-			name,
-			"-main",
-			"lime.tools.HXProject",
-			"-cp",
-			tempDirectory,
-			"-neko",
-			nekoOutput,
-			"-cp",
-			Path.combine(Haxelib.getPath(new Haxelib("hxp")), "src"),
-			"-lib",
-			"lime",
-			"-lib",
-			"hxp"
-		];
-		#else
 		var args = [
 			name,
-			"--interp",
-			"-main",
-			"lime.tools.HXProject",
-			"-cp",
-			tempDirectory,
-			"-cp",
-			Path.combine(Haxelib.getPath(new Haxelib("hxp")), "src")
+			#if lime
+			"-lib", "lime",
+			"-lib", "hxp",
+			#end
+			"-cp", tempDirectory,
+			"-cp", Path.combine(Haxelib.getPath(new Haxelib("hxp")), "src")
 		];
-		#end
 		var input = File.read(classFile, false);
 		var tag = "@:compiler(";
 
@@ -430,10 +410,6 @@ class HXProject extends Script
 		var cacheDryRun = System.dryRun;
 		System.dryRun = false;
 
-		#if lime
-		System.runCommand("", "haxe", args);
-		#end
-
 		var inputFile = Path.combine(tempDirectory, "input.dat");
 		var outputFile = Path.combine(tempDirectory, "output.dat");
 
@@ -457,10 +433,12 @@ class HXProject extends Script
 
 		try
 		{
-			#if lime
-			System.runCommand("", "neko", [FileSystem.fullPath(nekoOutput), inputFile, outputFile]);
+			#if (lime && !eval)
+			var nekoOutput = FileSystem.fullPath(Path.combine(tempDirectory, name + ".n"));
+			System.runCommand("", "haxe", args.concat(["--main", "lime.tools.HXProject", "-neko", nekoOutput]));
+			System.runCommand("", "neko", [nekoOutput, inputFile, outputFile]);
 			#else
-			System.runCommand("", "haxe", args.concat(["--", inputFile, outputFile]));
+			System.runCommand("", "haxe", args.concat(["--run", "lime.tools.HXProject", inputFile, outputFile]));
 			#end
 		}
 		catch (e:Dynamic)
diff --git a/tools/RunScript.hx b/tools/RunScript.hx
index 5b4663cf07..0f4243a155 100644
--- a/tools/RunScript.hx
+++ b/tools/RunScript.hx
@@ -199,6 +199,23 @@ class RunScript
 			}
 		}
 
+		if (args.indexOf("-eval") >= 0)
+		{
+			args.remove("-eval");
+			Log.info("Experimental: executing `lime " + args.slice(0, args.length - 1).join(" ")
+				+ "` using Eval (https://haxe.org/blog/eval/)");
+
+			var args = [
+				"-D", "lime",
+				"-cp", "tools",
+				"-cp", "tools/platforms",
+				"-cp", "src",
+				"-lib", "format",
+				"-lib", "hxp",
+				"--run", "CommandLineTools"].concat(args);
+			Sys.exit(runCommand("", "haxe", args));
+		}
+
 		if (!FileSystem.exists("tools/tools.n") || args.indexOf("-rebuild") > -1)
 		{
 			rebuildTools();