diff --git a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java
index b9deaf2..b459fdd 100644
--- a/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java
+++ b/plugins/org.eclipse.jst.server.core/sjavacore/org/eclipse/jst/server/core/internal/RuntimeBridge.java
@@ -87,7 +87,16 @@
 	}
 
 	public IStub bridge(String name) throws CoreException {
-		return new Stub(ServerCore.findRuntime(name));
+		if (name == null)
+			throw new IllegalArgumentException();
+		
+		IRuntime[] runtimes = ServerCore.getRuntimes();
+		int size = runtimes.length;
+		for (int i = 0; i < size; i++) {
+			if (runtimes[i].getName().equals(name))
+				return new Stub(runtimes[i]);
+		}
+		return null;
 	}
 
 	private static class Stub implements IStub {
@@ -99,28 +108,30 @@
 
 		public List getRuntimeComponents() {
 			List components = new ArrayList(2);
+			if (runtime == null)
+				return components;
 			
 			// define server runtime component
 			String typeId = runtime.getRuntimeType().getId();
 			IRuntimeComponentVersion mapped = (IRuntimeComponentVersion) mappings.get(typeId);
 			
 			Map properties = new HashMap();
-			properties.put("location", this.runtime.getLocation().toPortableString());
-			properties.put("name", this.runtime.getName());
-			properties.put("type", this.runtime.getRuntimeType().getName());
-			properties.put("id", this.runtime.getId());
+			properties.put("location", runtime.getLocation().toPortableString());
+			properties.put("name", runtime.getName());
+			properties.put("type", runtime.getRuntimeType().getName());
+			properties.put("id", runtime.getId());
 			
 			RuntimeClasspathProviderWrapper rcpw = JavaServerPlugin.findRuntimeClasspathProvider(runtime.getRuntimeType());
 			if (rcpw != null) {
 				IPath path = new Path(RuntimeClasspathContainer.SERVER_CONTAINER);
-				path = path.append(rcpw.getId()).append(this.runtime.getName());
+				path = path.append(rcpw.getId()).append(runtime.getName());
 				properties.put(CLASSPATH, path.toPortableString());
 			}
 			
 			components.add(RuntimeManager.createRuntimeComponent(mapped, properties));
 			
 			// define JRE component
-			IJavaRuntime javaRuntime = (IJavaRuntime) this.runtime.loadAdapter(IJavaRuntime.class, null);
+			IJavaRuntime javaRuntime = (IJavaRuntime) runtime.loadAdapter(IJavaRuntime.class, null);
 			if (javaRuntime != null) {
 				IVMInstall vmInstall = javaRuntime.getVMInstall();
 				IVMInstall2 vmInstall2 = (IVMInstall2) vmInstall;
@@ -128,12 +139,12 @@
 				String jvmver = vmInstall2.getJavaVersion();
 				IRuntimeComponentVersion rcv;
 				
-				if (jvmver.startsWith("1.4")) {
+				if (jvmver.startsWith("1.4"))
 					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("1.4");
-				} else if (jvmver.startsWith("1.5")) {
+				else if (jvmver.startsWith("1.5"))
 					rcv = RuntimeManager.getRuntimeComponentType("standard.jre").getVersion("5.0");
-				} else
-					throw new IllegalStateException(); // TODO: Handle this better.
+				else
+					throw new IllegalStateException();
 				
 				properties = new HashMap();
 				properties.put("name", vmInstall.getName());
@@ -147,6 +158,8 @@
 		}
 
 		public Map getProperties() {
+			if (runtime == null)
+				return new HashMap(0);
 			return Collections.singletonMap("id", runtime.getId());
 		}
 	}
