* revert API for IInterpreterInstall's
+ created Debug runner delegate class, to delegate debugger selection code.
diff --git a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/internal/launching/DebugRunnerDelegate.java b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/internal/launching/DebugRunnerDelegate.java
new file mode 100644
index 0000000..d245731
--- /dev/null
+++ b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/internal/launching/DebugRunnerDelegate.java
@@ -0,0 +1,71 @@
+package org.eclipse.dltk.internal.launching;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.debug.core.ILaunch;
+import org.eclipse.debug.core.ILaunchConfiguration;
+import org.eclipse.debug.core.ILaunchManager;
+import org.eclipse.dltk.core.DLTKLanguageManager;
+import org.eclipse.dltk.core.IDLTKLanguageToolkit;
+import org.eclipse.dltk.core.IScriptProject;
+import org.eclipse.dltk.launching.AbstractScriptLaunchConfigurationDelegate;
+import org.eclipse.dltk.launching.IInterpreterInstall;
+import org.eclipse.dltk.launching.IInterpreterRunner;
+import org.eclipse.dltk.launching.InterpreterConfig;
+import org.eclipse.dltk.launching.LaunchingMessages;
+import org.eclipse.dltk.launching.ScriptLaunchConfigurationConstants;
+import org.eclipse.dltk.launching.debug.DebuggingEngineManager;
+import org.eclipse.dltk.launching.debug.IDebuggingEngine;
+
+import com.ibm.icu.text.MessageFormat;
+
+/**
+ * Class used to delegate debug engine discovery before run operation is
+ * executed.
+ * 
+ * @author haiodo
+ * 
+ */
+public class DebugRunnerDelegate implements IInterpreterRunner {
+	private IInterpreterInstall install;
+
+	public DebugRunnerDelegate(IInterpreterInstall install) {
+		this.install = install;
+	}
+
+	public void run(InterpreterConfig config, ILaunch launch,
+			IProgressMonitor monitor) throws CoreException {
+		ILaunchConfiguration launchConfiguration = launch
+				.getLaunchConfiguration();
+		IScriptProject scriptProject = AbstractScriptLaunchConfigurationDelegate
+				.getScriptProject(launchConfiguration);
+
+		DebuggingEngineManager manager = DebuggingEngineManager.getInstance();
+		IDLTKLanguageToolkit toolkit = DLTKLanguageManager
+				.getLanguageToolkit(scriptProject);
+		IDebuggingEngine engine = manager.getSelectedDebuggingEngine(
+				scriptProject.getProject(), toolkit.getNatureId());
+
+		if (engine != null) {
+			IInterpreterRunner runner = engine.getRunner(install);
+			if (runner != null) {
+				runner.run(config, launch, monitor);
+			} else {
+				throw new CoreException(
+						new Status(
+								IStatus.ERROR,
+								DLTKLaunchingPlugin.PLUGIN_ID,
+								ScriptLaunchConfigurationConstants.ERR_INTERPRETER_RUNNER_DOES_NOT_EXIST,
+								MessageFormat
+										.format(
+												LaunchingMessages.InterpreterRunnerDoesntExist,
+												new String[] {
+														install.getName(),
+														ILaunchManager.DEBUG_MODE }),
+								null));
+			}
+		}
+	}
+}
diff --git a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/AbstractInterpreterInstall.java b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/AbstractInterpreterInstall.java
index da44ce8..31e252f 100644
--- a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/AbstractInterpreterInstall.java
+++ b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/AbstractInterpreterInstall.java
@@ -11,14 +11,12 @@
 
 import java.io.File;
 
-import org.eclipse.core.resources.IProject;
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.debug.core.ILaunchManager;
 import org.eclipse.dltk.internal.launching.DLTKLaunchingPlugin;
-import org.eclipse.dltk.launching.debug.DebuggingEngineManager;
-import org.eclipse.dltk.launching.debug.IDebuggingEngine;
+import org.eclipse.dltk.internal.launching.DebugRunnerDelegate;
 
 /**
  * Abstract implementation of a interpreter install.
@@ -239,20 +237,13 @@
 		return null;
 	}
 
-	protected IInterpreterRunner getDebugInterpreterRunner(IProject project) {
-		DebuggingEngineManager manager = DebuggingEngineManager.getInstance();
-		IDebuggingEngine engine = manager.getSelectedDebuggingEngine(project, getNatureId());
-
-		if (engine != null) {
-			return engine.getRunner(this);
-		}
-
-		return null;
+	protected IInterpreterRunner getDebugInterpreterRunner() {
+		return new DebugRunnerDelegate(this);
 	}
 
-	public IInterpreterRunner getInterpreterRunner(String mode, IProject project) {
+	public IInterpreterRunner getInterpreterRunner(String mode) {
 		if (mode.equals(ILaunchManager.DEBUG_MODE)) {
-			return getDebugInterpreterRunner(project);
+			return getDebugInterpreterRunner();
 		}
 
 		return null;
diff --git a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/AbstractScriptLaunchConfigurationDelegate.java b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/AbstractScriptLaunchConfigurationDelegate.java
index 954dec5..29d4bd2 100644
--- a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/AbstractScriptLaunchConfigurationDelegate.java
+++ b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/AbstractScriptLaunchConfigurationDelegate.java
@@ -789,7 +789,7 @@
 			// Getting IInterpreterRunner
 			monitor.subTask("Getting interpreter runner...");
 			final IInterpreterRunner runner = getInterpreterRunner(
-					configuration, mode, project);
+					configuration, mode);
 			if (monitor.isCanceled()) {
 				return;
 			}
@@ -934,11 +934,11 @@
 	 * 
 	 */
 	public IInterpreterRunner getInterpreterRunner(
-			ILaunchConfiguration configuration, String mode, IProject project)
+			ILaunchConfiguration configuration, String mode)
 			throws CoreException {
 
 		final IInterpreterInstall install = verifyInterpreterInstall(configuration);
-		final IInterpreterRunner runner = install.getInterpreterRunner(mode, project);
+		final IInterpreterRunner runner = install.getInterpreterRunner(mode);
 
 		if (runner == null) {
 			abort(
diff --git a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/IInterpreterInstall.java b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/IInterpreterInstall.java
index 1037ed0..75aa8b1 100644
--- a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/IInterpreterInstall.java
+++ b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/IInterpreterInstall.java
@@ -11,12 +11,11 @@
 
 import java.io.File;
 
-import org.eclipse.core.resources.IProject;
 import org.eclipse.dltk.core.IBuiltinModuleProvider;
 
 public interface IInterpreterInstall extends IBuiltinModuleProvider {
 	// Runner
-	IInterpreterRunner getInterpreterRunner(String mode, IProject project);
+	IInterpreterRunner getInterpreterRunner(String mode);
 	
 	String getNatureId();
 
diff --git a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/ScriptLaunchUtil.java b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/ScriptLaunchUtil.java
index 1e6bcd1..66dbab3 100644
--- a/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/ScriptLaunchUtil.java
+++ b/core/plugins/org.eclipse.dltk.launching/src/org/eclipse/dltk/launching/ScriptLaunchUtil.java
@@ -117,7 +117,7 @@
 
 		// will use 'instance scoped' interpreter here  
 		IInterpreterRunner runner = install.getInterpreterRunner(launch
-				.getLaunchMode(), null);
+				.getLaunchMode());
 
 		runner.run(config, launch, monitor);