diff --git a/org.eclipse.ptp.rcp.sysmon/src/org/eclipse/ptp/rcp/sysmon/Activator.java b/org.eclipse.ptp.rcp.sysmon/src/org/eclipse/ptp/rcp/sysmon/Activator.java
index 98b5ae9..2245570 100644
--- a/org.eclipse.ptp.rcp.sysmon/src/org/eclipse/ptp/rcp/sysmon/Activator.java
+++ b/org.eclipse.ptp.rcp.sysmon/src/org/eclipse/ptp/rcp/sysmon/Activator.java
@@ -11,6 +11,7 @@
 import org.eclipse.ptp.core.IPTPLaunchConfigurationConstants;
 import org.eclipse.ui.plugin.AbstractUIPlugin;
 import org.osgi.framework.BundleContext;
+import org.osgi.framework.ServiceReference;
 
 /**
  * The activator class controls the plug-in life cycle
@@ -88,13 +89,27 @@
 			try {
 				ILaunchDelegate[] delegates = localCfg.getDelegates(runSet);
 				for (ILaunchDelegate delegate : delegates) {
-					if ("org.eclipse.ptp.rcp.sysmon.launch".equals(delegate.getId())) {
+					if ("org.eclipse.ptp.rcp.sysmon.launch".equals(delegate.getId())) { //$NON-NLS-1$
 						localCfg.setPreferredDelegate(runSet, delegate);
 						break;
 					}
 				}
 			} catch (CoreException e) {
+				// Ignore
 			}
 		}
 	}
+
+	/**
+	 * Return the OSGi service with the given service interface.
+	 *
+	 * @param service
+	 *            service interface
+	 * @return the specified service or null if it's not registered
+	 */
+	public static <T> T getService(Class<T> service) {
+		final BundleContext context = plugin.getBundle().getBundleContext();
+		final ServiceReference<T> ref = context.getServiceReference(service);
+		return ref != null ? context.getService(ref) : null;
+	}
 }
diff --git a/org.eclipse.ptp.rcp.sysmon/src/org/eclipse/ptp/rcp/sysmon/launch/ui/SysMonApplicationTab.java b/org.eclipse.ptp.rcp.sysmon/src/org/eclipse/ptp/rcp/sysmon/launch/ui/SysMonApplicationTab.java
index 5eedbc9..7911f2b 100644
--- a/org.eclipse.ptp.rcp.sysmon/src/org/eclipse/ptp/rcp/sysmon/launch/ui/SysMonApplicationTab.java
+++ b/org.eclipse.ptp.rcp.sysmon/src/org/eclipse/ptp/rcp/sysmon/launch/ui/SysMonApplicationTab.java
@@ -18,23 +18,18 @@
  *******************************************************************************/
 package org.eclipse.ptp.rcp.sysmon.launch.ui;
 
-import java.lang.reflect.InvocationTargetException;
-
 import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.debug.core.ILaunchConfiguration;
 import org.eclipse.debug.core.ILaunchConfigurationWorkingCopy;
 import org.eclipse.debug.ui.ILaunchConfigurationDialog;
 import org.eclipse.jface.dialogs.MessageDialog;
-import org.eclipse.jface.operation.IRunnableWithProgress;
 import org.eclipse.ptp.core.IPTPLaunchConfigurationConstants;
-import org.eclipse.ptp.launch.RMLaunchUtils;
 import org.eclipse.ptp.launch.ui.LaunchImages;
 import org.eclipse.ptp.launch.ui.tabs.LaunchConfigurationTab;
+import org.eclipse.ptp.rcp.sysmon.Activator;
 import org.eclipse.remote.core.IRemoteConnection;
-import org.eclipse.remote.ui.IRemoteUIFileManager;
-import org.eclipse.remote.ui.IRemoteUIServices;
-import org.eclipse.remote.ui.RemoteUIServices;
+import org.eclipse.remote.core.launch.IRemoteLaunchConfigService;
+import org.eclipse.remote.ui.IRemoteUIFileService;
 import org.eclipse.swt.SWT;
 import org.eclipse.swt.events.ModifyEvent;
 import org.eclipse.swt.events.ModifyListener;
@@ -218,36 +213,17 @@
 	 */
 	protected void handleApplicationButtonSelected() {
 		String initPath = appText.getText();
-
-		final IRemoteConnection[] conn = new IRemoteConnection[1];
-		try {
-			getLaunchConfigurationDialog().run(false, true, new IRunnableWithProgress() {
-				@Override
-				public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
-					try {
-						conn[0] = RMLaunchUtils.getRemoteConnection(getLaunchConfiguration(), monitor);
-					} catch (CoreException e) {
-						throw new InvocationTargetException(e.getCause());
-					}
-				}
-			});
-		} catch (InvocationTargetException e) {
-			// Ignore
-		} catch (InterruptedException e) {
-			// Ignore
-		}
-		if (conn[0] != null) {
-			IRemoteUIServices remoteUIServices = RemoteUIServices.getRemoteUIServices(conn[0].getRemoteServices());
-			if (remoteUIServices != null) {
-				IRemoteUIFileManager fileManager = remoteUIServices.getUIFileManager();
-				if (fileManager != null) {
-					fileManager.setConnection(conn[0]);
-					fileManager.showConnections(false);
-					String path = fileManager.browseFile(getShell(), Messages.SysMonApplicationTab_Select_application_to_execute,
-							initPath, 0);
-					if (path != null) {
-						appText.setText(path.toString());
-					}
+		IRemoteLaunchConfigService launchSvc = Activator.getService(IRemoteLaunchConfigService.class);
+		IRemoteConnection conn = launchSvc.getActiveConnection(getLaunchConfiguration());
+		if (conn != null) {
+			IRemoteUIFileService fileSvc = conn.getConnectionType().getService(IRemoteUIFileService.class);
+			if (fileSvc != null) {
+				fileSvc.setConnection(conn);
+				fileSvc.showConnections(false);
+				String path = fileSvc.browseFile(getShell(), Messages.SysMonApplicationTab_Select_application_to_execute, initPath,
+						0);
+				if (path != null) {
+					appText.setText(path.toString());
 				}
 			}
 		} else {
