diff --git a/bundles/org.eclipse.core.runtime.compatibility/src-runtime/org/eclipse/core/internal/compatibility/PluginActivator.java b/bundles/org.eclipse.core.runtime.compatibility/src-runtime/org/eclipse/core/internal/compatibility/PluginActivator.java
index 3ae9a03..896993d 100644
--- a/bundles/org.eclipse.core.runtime.compatibility/src-runtime/org/eclipse/core/internal/compatibility/PluginActivator.java
+++ b/bundles/org.eclipse.core.runtime.compatibility/src-runtime/org/eclipse/core/internal/compatibility/PluginActivator.java
@@ -11,44 +11,19 @@
 package org.eclipse.core.internal.compatibility;
 
 import org.eclipse.core.internal.plugins.PluginDescriptor;
-import org.eclipse.core.internal.runtime.InternalPlatform;
-import org.eclipse.core.runtime.*;
-import org.osgi.framework.*;
-import org.osgi.service.startlevel.StartLevel;
-import org.osgi.util.tracker.ServiceTracker;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.Plugin;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
 
 public class PluginActivator implements BundleActivator {
-	private BundleContext context;
 	private Plugin plugin;
 
-	private static ServiceTracker startLevelTracker = null;
-
-	public static void closeStartLevelTracker() {
-		if (startLevelTracker == null)
-			return;
-		startLevelTracker.close();
-		startLevelTracker = null;
-	}
-	public static StartLevel getStartLevel(BundleContext context) {
-		if (startLevelTracker == null) {
-			startLevelTracker = new ServiceTracker(context, StartLevel.class.getName(), null);
-			startLevelTracker.open();
-		}
-		return (StartLevel) startLevelTracker.getService();
-	}
-
-	public BundleContext getBundleContext() {
-		return context;
-	}
-
 	public PluginActivator() {
 		super();
 	}
 
-	public void start(BundleContext ctx) throws Exception {
-		// will bail if it is not time to start
-		ensureNormalStartup(ctx);
-		this.context = ctx;
+	public void start(BundleContext context) throws Exception {
 		PluginDescriptor pd = (PluginDescriptor) Platform.getPluginRegistry().getPluginDescriptor(context.getBundle().getSymbolicName());
 		plugin = pd.getPlugin();
 		try {
@@ -62,26 +37,9 @@
 		}
 	}
 
-	private void ensureNormalStartup(BundleContext context) throws BundleException {
-		// TODO look at other ways of doing this to make it faster (getService is not as fast 
-		// as we might like but it is not horrible.  Also, we never close the tracker.
-		StartLevel startLevel = getStartLevel(InternalPlatform.getDefault().getBundleContext());
-		if (startLevel == null)
-			return;
-		if (startLevel.getStartLevel() <= startLevel.getBundleStartLevel(context.getBundle())) {
-			IStatus status = new Status(IStatus.WARNING, Platform.PI_RUNTIME, 0, org.eclipse.core.internal.plugins.Policy.bind("activator.applicationNotStarted", context.getBundle().getSymbolicName()), null); //$NON-NLS-1$
-			InternalPlatform.getDefault().log(status);
-			throw new BundleException(status.getMessage());
-		}
-	}
-
 	public void stop(BundleContext context) throws Exception {
-		try {
-			plugin.shutdown();
-			plugin.stop(context);
-			((PluginDescriptor) plugin.getDescriptor()).doPluginDeactivation();
-		} finally {
-			this.context = null;
-		}
+		plugin.shutdown();
+		plugin.stop(context);
+		((PluginDescriptor) plugin.getDescriptor()).doPluginDeactivation();
 	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.core.runtime.compatibility/src-runtime/org/eclipse/core/internal/plugins/CompatibilityActivator.java b/bundles/org.eclipse.core.runtime.compatibility/src-runtime/org/eclipse/core/internal/plugins/CompatibilityActivator.java
index df56825..753b968 100644
--- a/bundles/org.eclipse.core.runtime.compatibility/src-runtime/org/eclipse/core/internal/plugins/CompatibilityActivator.java
+++ b/bundles/org.eclipse.core.runtime.compatibility/src-runtime/org/eclipse/core/internal/plugins/CompatibilityActivator.java
@@ -10,7 +10,6 @@
  *******************************************************************************/
 package org.eclipse.core.internal.plugins;
 
-import org.eclipse.core.internal.compatibility.PluginActivator;
 import org.eclipse.core.internal.runtime.CompatibilityHelper;
 import org.eclipse.core.internal.runtime.InternalPlatform;
 import org.eclipse.core.runtime.IPluginDescriptor;
@@ -29,7 +28,6 @@
 		IPluginDescriptor descriptor = CompatibilityHelper.getPluginDescriptor(Platform.PI_RUNTIME);
 		CompatibilityHelper.setPlugin(descriptor, null);
 		((PluginRegistry) org.eclipse.core.internal.plugins.InternalPlatform.getPluginRegistry()).close();
-		PluginActivator.closeStartLevelTracker();
 		CompatibilityHelper.nullCompatibility();
 	}
 
