- use temporary file for launcher
- send ^C to terminate remote script
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/.classpath b/rse/plugins/org.eclipse.dltk.rse.core/.classpath
index 2fbb7a2..64c5e31 100644
--- a/rse/plugins/org.eclipse.dltk.rse.core/.classpath
+++ b/rse/plugins/org.eclipse.dltk.rse.core/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.4"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/.settings/org.eclipse.jdt.core.prefs b/rse/plugins/org.eclipse.dltk.rse.core/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..0db8fa6
--- /dev/null
+++ b/rse/plugins/org.eclipse.dltk.rse.core/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,8 @@
+#Fri May 15 16:28:03 NOVST 2009
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.5
+org.eclipse.jdt.core.compiler.compliance=1.5
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.source=1.5
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/META-INF/MANIFEST.MF b/rse/plugins/org.eclipse.dltk.rse.core/META-INF/MANIFEST.MF
index 7f7c761..251e107 100644
--- a/rse/plugins/org.eclipse.dltk.rse.core/META-INF/MANIFEST.MF
+++ b/rse/plugins/org.eclipse.dltk.rse.core/META-INF/MANIFEST.MF
@@ -19,4 +19,4 @@
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.dltk.core.internal.rse,
  org.eclipse.dltk.core.internal.rse.perfomance
-Bundle-RequiredExecutionEnvironment: J2SE-1.4
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/Messages.java b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/Messages.java
index ccb1e2e..a133744 100644
--- a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/Messages.java
+++ b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/Messages.java
@@ -19,6 +19,13 @@
 	public static String RSEEnvironment_EnvironmentNameSuffix;
 	public static String RSEEnvironmentProvider_providerName;
 	public static String RSEExecEnvironment_hostNotFound;
+	public static String RSEExecEnvironment_ErrorConnecting;
+	public static String RSEExecEnvironment_ErrorRunningCommand;
+	public static String RSEExecEnvironment_ProcessCreateError;
+	public static String RSEExecEnvironment_LauncherUploadError;
+	public static String RSEExecEnvironment_NoFileServicerError;
+	public static String RSEExecEnvironment_NoShellService;
+	public static String RSEExecEnvironment_NotConnected;
 	static {
 		// initialize resource bundle
 		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/MyHostShellProcessAdapter.java b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/MyHostShellProcessAdapter.java
index 117d15d..1f750fa 100644
--- a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/MyHostShellProcessAdapter.java
+++ b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/MyHostShellProcessAdapter.java
@@ -80,12 +80,23 @@
 		}
 	}
 
+	static final String CTRL_C = "\u0003"; //$NON-NLS-1$
+
 	/**
 	 * Exits the shell.
 	 * 
 	 * @see java.lang.Process#destroy()
 	 */
 	public synchronized void destroy() {
+		if (!done && hostShell.isActive()) {
+			hostShell.writeToShell(CTRL_C);
+			// let the shell time to terminate in standard way
+			try {
+				wait(1000);
+			} catch (InterruptedException e) {
+				// ignore
+			}
+		}
 		hostShell.exit();
 		notifyAll();
 		closeStreams();
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEEnvironment.java b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEEnvironment.java
index 3b84f1f..ddb5eb2 100644
--- a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEEnvironment.java
+++ b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEEnvironment.java
@@ -33,8 +33,7 @@
 			throw new RuntimeException(
 					Messages.RSEEnvironment_EmptyFileNameError);
 		}
-		URI uri = RSEFileSystem.getURIFor(host.getHostName(), path.toString());
-		return new RSEFileHandle(this, uri);
+		return new RSEFileHandle(this, getURIFor(host, path.toString()));
 	}
 
 	public String getId() {
@@ -76,8 +75,7 @@
 	}
 
 	public URI getURI(IPath location) {
-		return RSEFileSystem.getURIFor(host.getHostName(), location
-				.toPortableString());
+		return getURIFor(host, location.toString());
 	}
 
 	public String convertPathToString(IPath path) {
@@ -103,4 +101,8 @@
 	public String getCanonicalPath(IPath path) {
 		return convertPathToString(path);
 	}
+
+	public static URI getURIFor(IHost host, String path) {
+		return RSEFileSystem.getURIFor(host.getHostName(), path);
+	}
 }
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEExecEnvironment.java b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEExecEnvironment.java
index 13e5210..ca342ae 100644
--- a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEExecEnvironment.java
+++ b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEExecEnvironment.java
@@ -1,18 +1,26 @@
 package org.eclipse.dltk.core.internal.rse;
 
+import java.io.BufferedOutputStream;
 import java.io.BufferedReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.io.Writer;
 import java.net.URI;
+import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 import java.util.Random;
 
 import org.eclipse.core.runtime.CoreException;
 import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.NullProgressMonitor;
 import org.eclipse.core.runtime.Path;
+import org.eclipse.core.runtime.Status;
 import org.eclipse.dltk.core.DLTKCore;
 import org.eclipse.dltk.core.environment.IDeployment;
 import org.eclipse.dltk.core.environment.IEnvironment;
@@ -23,26 +31,22 @@
 import org.eclipse.osgi.util.NLS;
 import org.eclipse.rse.core.model.IHost;
 import org.eclipse.rse.core.subsystems.ISubSystem;
-import org.eclipse.rse.internal.efs.RSEFileSystem;
 import org.eclipse.rse.services.clientserver.messages.SystemMessageException;
+import org.eclipse.rse.services.files.IFileService;
 import org.eclipse.rse.services.shells.IHostShell;
 import org.eclipse.rse.services.shells.IShellService;
+import org.eclipse.rse.subsystems.files.core.servicesubsystem.IFileServiceSubSystem;
 import org.eclipse.rse.subsystems.shells.core.subsystems.servicesubsystem.IShellServiceSubSystem;
 
 public class RSEExecEnvironment implements IExecutionEnvironment {
 
-	private static final String SHELL_PATH = "exec /bin/sh"; //$NON-NLS-1$
-
-	private static final String CMD_SEPARATOR = ";"; //$NON-NLS-1$
-	private static final String EXPORT_CMD = ";export "; //$NON-NLS-1$
-	private final static String EXIT_CMD = "exit"; //$NON-NLS-1$
-	private static final String SET_CMD = "set"; //$NON-NLS-1$
-	private static final String BACKSLASH = " \\"; //$NON-NLS-1$
+	private static final String EXEC_BIN_SH = "exec /bin/sh "; //$NON-NLS-1$
+	private static final String TOKEN_PREFIX = "DLTK_INITIAL_PREFIX_EXECUTION_STRING:"; //$NON-NLS-1$
 
 	private final RSEEnvironment environment;
 	private static int counter = -1;
 
-	private static final Map hostToEnvironment = new HashMap();
+	private static final Map<IHost, Map<String, String>> hostToEnvironment = new HashMap<IHost, Map<String, String>>();
 
 	public RSEExecEnvironment(RSEEnvironment env) {
 		this.environment = env;
@@ -70,14 +74,16 @@
 	}
 
 	private URI createRemoteURI(IHost host, String rootPath) {
-		return RSEFileSystem.getURIFor(host.getHostName(), rootPath);
+		return RSEEnvironment.getURIFor(host, rootPath);
 	}
 
-	private IShellServiceSubSystem getShellServiceSubSystem(IHost host) {
+	@SuppressWarnings("unchecked")
+	private <SUBSYSTEM extends ISubSystem> SUBSYSTEM getSubSystem(IHost host,
+			Class<SUBSYSTEM> clazz) {
 		ISubSystem[] subsys = host.getSubSystems();
 		for (int i = 0; i < subsys.length; i++) {
-			if (subsys[i] instanceof IShellServiceSubSystem)
-				return (IShellServiceSubSystem) subsys[i];
+			if (clazz.isInstance(subsys[i]))
+				return (SUBSYSTEM) subsys[i];
 		}
 		return null;
 	}
@@ -91,31 +97,28 @@
 	}
 
 	private String getTempDir() {
-		IHost host = environment.getHost();
-		IShellServiceSubSystem system = getShellServiceSubSystem(host);
-
+		final IHost host = environment.getHost();
+		final IShellServiceSubSystem system = getSubSystem(host,
+				IShellServiceSubSystem.class);
 		if (system == null) {
 			DLTKRSEPlugin.logWarning(NLS.bind(
 					Messages.RSEExecEnvironment_hostNotFound, host.getName()));
 			return null;
 		}
-
-		String tmpDir = null;
 		try {
 			system.connect(new NullProgressMonitor(), false);
-
-			tmpDir = system.getConnectorService().getTempDirectory();
-			if (tmpDir.length() == 0) {
-				tmpDir = "/tmp"; //$NON-NLS-1$
+			final String tmp = system.getConnectorService().getTempDirectory();
+			if (tmp != null && tmp.length() != 0) {
+				return tmp;
+			} else {
+				return "/tmp"; //$NON-NLS-1$
 			}
-
 		} catch (Exception e) {
 			if (DLTKCore.DEBUG) {
 				e.printStackTrace();
 			}
 		}
-
-		return tmpDir;
+		return null;
 	}
 
 	public Process exec(String[] cmdLine, IPath workingDir, String[] environment)
@@ -129,90 +132,183 @@
 			RSEPerfomanceStatistics
 					.inc(RSEPerfomanceStatistics.EXECUTION_COUNT);
 		}
-		long start = System.currentTimeMillis();
-		IShellServiceSubSystem shell = getShellServiceSubSystem(this.environment
-				.getHost());
+		final long start = RSEPerfomanceStatistics.PERFOMANCE_TRACING ? System
+				.currentTimeMillis() : 0;
+		final IHost host = this.environment.getHost();
+
+		// obtain IFileService
+		final IFileServiceSubSystem fileService = getSubSystem(host,
+				IFileServiceSubSystem.class);
+		if (fileService == null) {
+			throw new CoreException(newStatus(
+					RSEStatusConstants.NO_FILE_SERVICE, NLS.bind(
+							Messages.RSEExecEnvironment_NoFileServicerError,
+							host.getAliasName()), null));
+		}
 		try {
-			shell.connect(null, false);
+			fileService.connect(new NullProgressMonitor(), false);
 		} catch (Exception e) {
-			if (DLTKCore.DEBUG) {
-				e.printStackTrace();
+			throw new CoreException(newStatus(RSEStatusConstants.CONNECT_ERROR,
+					NLS.bind(Messages.RSEExecEnvironment_ErrorConnecting, host
+							.getAliasName(), e.getMessage()), e));
+		}
+
+		// remote path for launcher file
+		final String tmpLauncherDir = getTempDir();
+		final String tmpLauncher = "dltk-" + fileService.getUserId() + System.currentTimeMillis() + ".sh"; //$NON-NLS-1$ //$NON-NLS-2$
+		final String tmpLauncherPath = tmpLauncherDir
+				+ fileService.getSeparatorChar() + tmpLauncher;
+
+		// build commands
+		final List<String> commands = new ArrayList<String>();
+		if (workingDir != null) {
+			final String p = this.environment.convertPathToString(workingDir);
+			commands.add("cd " + p); //$NON-NLS-1$
+		} else {
+			commands.add("cd /"); //$NON-NLS-1$
+		}
+		/*
+		 * Sometimes environment variables aren't set by the runCommand() call,
+		 * so use export.
+		 */
+		if (environment != null) {
+			// TODO Skip environment variables which are already in shell?
+			for (int i = 0; i < environment.length; i++) {
+				commands.add(buildExportCommand(environment[i]));
 			}
-			return null;
+		}
+		final String token = TOKEN_PREFIX + System.currentTimeMillis();
+		final String echoCmd = "echo \"" + token + "\""; //$NON-NLS-1$ //$NON-NLS-2$
+		commands.add(echoCmd);
+		commands.add(buildCommand(cmdLine));
+		commands.add(echoCmd);
+		commands.add("rm -f " + tmpLauncherPath); //$NON-NLS-1$
+		if (logger != null) {
+			logger.logLine("launcher=" + tmpLauncherDir + '/' + tmpLauncher); //$NON-NLS-1$
+			for (String command : commands) {
+				logger.logLine("launcher:" + command); //$NON-NLS-1$
+			}
+			logger.logLine("launcher:END"); //$NON-NLS-1$
+		}
+
+		// save launcher to the remote location
+		try {
+			final OutputStream os = fileService.getFileService()
+					.getOutputStream(tmpLauncherDir, tmpLauncher,
+							IFileService.TEXT_MODE, new NullProgressMonitor());
+			try {
+				final Writer writer = new OutputStreamWriter(
+						new BufferedOutputStream(os, 4096), fileService
+								.getRemoteEncoding());
+				try {
+					for (String command : commands) {
+						writer.write(command);
+						writer.write('\n');
+					}
+					writer.flush();
+				} finally {
+					try {
+						writer.close();
+					} catch (IOException e) {
+						// ignore
+					}
+				}
+			} finally {
+				try {
+					os.close();
+				} catch (IOException e) {
+					// ignore
+				}
+			}
+		} catch (Exception e) {
+			final String msg = NLS.bind(
+					Messages.RSEExecEnvironment_LauncherUploadError, host
+							.getAliasName(), e.getMessage());
+			throw new CoreException(newStatus(
+					RSEStatusConstants.LAUNCHER_UPLOAD_ERROR, msg, e));
+		}
+
+		// execute uploaded launcher in remote shell
+		final IShellServiceSubSystem shell = getSubSystem(host,
+				IShellServiceSubSystem.class);
+		if (shell == null) {
+			throw new CoreException(newStatus(
+					RSEStatusConstants.NO_SHELL_SERVICE, NLS.bind(
+							Messages.RSEExecEnvironment_NoShellService, host
+									.getAliasName()), null));
+		}
+		try {
+			shell.connect(new NullProgressMonitor(), false);
+		} catch (Exception e) {
+			throw new CoreException(newStatus(RSEStatusConstants.CONNECT_ERROR,
+					NLS.bind(Messages.RSEExecEnvironment_ErrorConnecting, host
+							.getAliasName(), e.getMessage()), e));
 		}
 
 		if (!shell.isConnected()) {
-			return null;
+			throw new CoreException(newStatus(
+					RSEStatusConstants.NOT_CONNECTED_ERROR, NLS.bind(
+							Messages.RSEExecEnvironment_NotConnected, host
+									.getAliasName()), null));
 		}
-		IShellService shellService = shell.getShellService();
-		IHostShell hostShell = null;
-		String workingDirectory = null;
-		if (workingDir != null) {
-			workingDirectory = this.environment.convertPathToString(workingDir);
-		} else {
-			workingDirectory = "/"; //$NON-NLS-1$
-		}
+		// TODO try to use "exec" channel instead of "shell" one.
+		final IShellService shellService = shell.getShellService();
+		final String command = EXEC_BIN_SH + tmpLauncherPath;
+		final IHostShell hostShell;
 		try {
-			hostShell = shellService.runCommand(workingDirectory, SHELL_PATH,
-					environment, new NullProgressMonitor());
-		} catch (SystemMessageException e1) {
-			DLTKRSEPlugin.log(e1);
-			return null;
+			hostShell = shellService.runCommand(null, command, environment,
+					new NullProgressMonitor());
+		} catch (SystemMessageException e) {
+			throw new CoreException(newStatus(
+					RSEStatusConstants.COMMAND_RUN_ERROR, NLS.bind(
+							Messages.RSEExecEnvironment_ErrorRunningCommand,
+							host.getAliasName(), e.getMessage()), e));
 		}
 
-		// Sometimes environment variables aren't set, so use export.
-		if (environment != null) {
-			hostShell.writeToShell(SHELL_PATH);
-			// TODO: Skip environment variables what is already in shell.
-			for (int i = 0; i < environment.length; i++) {
-				hostShell.writeToShell(toShellArguments(environment[i])
-						+ EXPORT_CMD + extractName(environment[i]));
-			}
-		}
-		final String pattern = "DLTK_INITIAL_PREFIX_EXECUTION_STRING:" //$NON-NLS-1$
-				+ String.valueOf(System.currentTimeMillis());
-		final String echoPattern = "echo \"" + pattern + "\""; //$NON-NLS-1$ //$NON-NLS-2$
-		hostShell.writeToShell(echoPattern + CMD_SEPARATOR + BACKSLASH);
-		hostShell.writeToShell(buildCommand(cmdLine) + CMD_SEPARATOR
-				+ BACKSLASH);
-		hostShell.writeToShell(echoPattern + CMD_SEPARATOR + EXIT_CMD);
-		Process p = null;
+		// wrap shell as java.lang.Process and return
 		try {
-			p = new MyHostShellProcessAdapter(hostShell, pattern, logger);
+			return new MyHostShellProcessAdapter(hostShell, token, logger);
 		} catch (Exception e) {
-			if (p != null) {
-				p.destroy();
+			hostShell.writeToShell(MyHostShellProcessAdapter.CTRL_C);
+			hostShell.exit();
+			throw new CoreException(newStatus(
+					RSEStatusConstants.INTERNAL_ERROR, NLS.bind(
+							Messages.RSEExecEnvironment_ProcessCreateError, e
+									.getMessage()), e));
+		} finally {
+			if (RSEPerfomanceStatistics.PERFOMANCE_TRACING) {
+				RSEPerfomanceStatistics.inc(
+						RSEPerfomanceStatistics.EXECUTION_TIME, System
+								.currentTimeMillis()
+								- start);
 			}
-			throw new RuntimeException("Failed to run remote command"); //$NON-NLS-1$
 		}
-		if (RSEPerfomanceStatistics.PERFOMANCE_TRACING) {
-			final long end = System.currentTimeMillis();
-			RSEPerfomanceStatistics.inc(RSEPerfomanceStatistics.EXECUTION_TIME,
-					(end - start));
-		}
-		return p;
+	}
+
+	private static String buildExportCommand(String envEntry) {
+		return toShellArguments(envEntry) + ";export " + extractName(envEntry); //$NON-NLS-1$
+	}
+
+	private static Status newStatus(int code, String msg,
+			final Throwable exception) {
+		return new Status(IStatus.ERROR, DLTKRSEPlugin.PLUGIN_ID, code, msg,
+				exception);
 	}
 
 	/**
 	 * @param environmentEntry
 	 * @return
 	 */
-	private String extractName(String environmentEntry) {
+	private static String extractName(String environmentEntry) {
 		final int pos = environmentEntry.indexOf('=');
 		return pos > 0 ? environmentEntry.substring(0, pos) : environmentEntry;
 	}
 
-	private String toShellArguments(String cmd) {
+	private static String toShellArguments(String cmd) {
 		String replaceAll = cmd.replaceAll(" ", "\\\\ "); //$NON-NLS-1$ //$NON-NLS-2$
 		return replaceAll;
 	}
 
-	// private String createWorkingDir(IPath workingDir) {
-	// if (workingDir == null)
-	//			return "."; //$NON-NLS-1$
-	// return workingDir.toPortableString();
-	// }
-
 	private String buildCommand(String[] cmdLine) {
 		StringBuffer cmd = new StringBuffer();
 		for (int i = 0; i < cmdLine.length; i++) {
@@ -224,22 +320,22 @@
 		return cmd.toString();
 	}
 
+	@SuppressWarnings("unchecked")
 	public Map getEnvironmentVariables(boolean realyNeed) {
 		if (!realyNeed) {
-			return new HashMap();
+			return new HashMap<String, String>();
 		}
 		final long start = System.currentTimeMillis();
 		synchronized (hostToEnvironment) {
-			final Map result = (Map) hostToEnvironment.get(environment
-					.getHost());
+			final Map<String, String> result = hostToEnvironment
+					.get(environment.getHost());
 			if (result != null) {
-				return new HashMap(result);
+				return new HashMap<String, String>(result);
 			}
 		}
-		final Map result = new HashMap();
+		final Map<String, String> result = new HashMap<String, String>();
 		try {
-			Process process = this.exec(new String[] { SET_CMD }, Path.EMPTY,
-					null);
+			Process process = exec(new String[] { "set" }, Path.EMPTY, null); //$NON-NLS-1$
 			if (process != null) {
 				final BufferedReader input = new BufferedReader(
 						new InputStreamReader(process.getInputStream()));
@@ -277,7 +373,7 @@
 		}
 		if (!result.isEmpty()) {
 			synchronized (hostToEnvironment) {
-				hostToEnvironment.put(this.environment.getHost(), Collections
+				hostToEnvironment.put(environment.getHost(), Collections
 						.unmodifiableMap(result));
 			}
 		}
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEStatusConstants.java b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEStatusConstants.java
new file mode 100644
index 0000000..001d8d8
--- /dev/null
+++ b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/RSEStatusConstants.java
@@ -0,0 +1,25 @@
+/*******************************************************************************
+ * Copyright (c) 2009 xored software, Inc.  
+ *
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html  
+ *
+ * Contributors:
+ *     xored software, Inc. - initial API and Implementation (Alex Panchenko)
+ *******************************************************************************/
+package org.eclipse.dltk.core.internal.rse;
+
+public class RSEStatusConstants {
+
+	public static final int NO_SHELL_SERVICE = 200;
+	public static final int NO_FILE_SERVICE = 201;
+	public static final int CONNECT_ERROR = 210;
+	public static final int NOT_CONNECTED_ERROR = 211;
+	public static final int COMMAND_RUN_ERROR = 220;
+	public static final int LAUNCHER_UPLOAD_ERROR = 301;
+
+	public static final int INTERNAL_ERROR = 500;
+
+}
diff --git a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/messages.properties b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/messages.properties
index 544de58..b2f81fa 100644
--- a/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/messages.properties
+++ b/rse/plugins/org.eclipse.dltk.rse.core/src/org/eclipse/dltk/core/internal/rse/messages.properties
@@ -2,3 +2,10 @@
 RSEEnvironment_EnvironmentNameSuffix=\ (RSE)
 RSEEnvironmentProvider_providerName=RSE
 RSEExecEnvironment_hostNotFound=unable to find IShellServiceSubSystem host {0}
+RSEExecEnvironment_ErrorConnecting=Error connecting to {0}: {1}
+RSEExecEnvironment_ErrorRunningCommand=Error running shell on {0}: {1}
+RSEExecEnvironment_ProcessCreateError=java.lang.Process create error: {1}
+RSEExecEnvironment_LauncherUploadError=Error uploading launcher to {0}: {1}
+RSEExecEnvironment_NoFileServicerError={0} has no IFileService sub-system
+RSEExecEnvironment_NoShellService={0} has no IShellService sub-system
+RSEExecEnvironment_NotConnected=Not connected to {0}