diff --git a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/adaptor/core/BundleFile.java b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/adaptor/core/BundleFile.java
index 33c6bf7..4f90560 100644
--- a/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/adaptor/core/BundleFile.java
+++ b/bundles/org.eclipse.osgi/defaultAdaptor/src/org/eclipse/osgi/framework/adaptor/core/BundleFile.java
@@ -126,7 +126,7 @@
 		protected ZipFile zipFile;
 		protected boolean closed = false;
 
-		protected ZipBundleFile(File basefile, BundleData bundledata) throws IOException {
+		public ZipBundleFile(File basefile, BundleData bundledata) throws IOException {
 			super(basefile);
 			this.bundledata = bundledata;
 			this.closed = true;
@@ -321,7 +321,7 @@
 	 */
 	public static class DirBundleFile extends BundleFile {
 
-		protected DirBundleFile(File basefile) throws IOException {
+		public DirBundleFile(File basefile) throws IOException {
 			super(basefile);
 			if (!basefile.exists() || !basefile.isDirectory()) {
 				throw new IOException(AdaptorMsg.formatter.getString("ADAPTOR_DIRECTORY_EXCEPTION", basefile)); //$NON-NLS-1$
@@ -471,4 +471,8 @@
 			// do nothing
 		}
 	}
+	
+	public File getBaseFile() {
+		return basefile;
+	}
 }
\ No newline at end of file
diff --git a/bundles/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseClassLoader.java b/bundles/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseClassLoader.java
index 6a858fc..3d4b283 100644
--- a/bundles/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseClassLoader.java
+++ b/bundles/org.eclipse.osgi/eclipseAdaptor/src/org/eclipse/core/runtime/adaptor/EclipseClassLoader.java
@@ -44,7 +44,6 @@
 	}
 
 	public Class findLocalClass(String className) throws ClassNotFoundException {
-
 		if (StatsManager.MONITOR_CLASSES) //Suport for performance analysis
 			ClassloaderStats.startLoadingClass(getClassloaderId(), className);
 		boolean found = true;
@@ -54,11 +53,11 @@
 			// If the bundle is active, uninstalled or stopping then the bundle has already
 			// been initialized (though it may have been destroyed) so just return the class.
 			if ((bundle.getState() & (AbstractBundle.ACTIVE | AbstractBundle.UNINSTALLED | AbstractBundle.STOPPING)) != 0)
-				return super.findLocalClass(className);
+				return basicFindLocalClass(className);
 
 			// The bundle is not active and does not require activation, just return the class
 			if (!shouldActivateFor(className))
-				return super.findLocalClass(className);
+				return basicFindLocalClass(className);
 
 			// The bundle is starting.  Note that if the state changed between the tests 
 			// above and this test (e.g., it was not ACTIVE but now is), that's ok, we will 
@@ -68,7 +67,7 @@
 			if (bundle.getState() == AbstractBundle.STARTING) {
 				// If the thread trying to load the class is the one trying to activate the bundle, then return the class 
 				if (bundle.testStateChanging(Thread.currentThread()) || bundle.testStateChanging(null))
-					return super.findLocalClass(className);
+					return basicFindLocalClass(className);
 
 				// If it's another thread, we wait and try again. In any case the class is returned. 
 				// The difference is that an exception can be logged.
@@ -99,7 +98,7 @@
 						String message = EclipseAdaptorMsg.formatter.getString("ECLIPSE_CLASSLOADER_CONCURRENT_STARTUP", new Object[] {Thread.currentThread().getName(), className, threadChangingState.getName(), bundleName, Long.toString(delay)}); //$NON-NLS-1$ 
 						EclipseAdaptor.getDefault().getFrameworkLog().log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, message, 0, new Exception(EclipseAdaptorMsg.formatter.getString("ECLIPSE_CLASSLOADER_GENERATED_EXCEPTION")), null)); //$NON-NLS-1$
 					}
-					return super.findLocalClass(className);
+					return basicFindLocalClass(className);
 				}
 			}
 
@@ -110,7 +109,7 @@
 				String message = EclipseAdaptorMsg.formatter.getString("ECLIPSE_CLASSLOADER_ACTIVATION", bundle.getSymbolicName(), Long.toString(bundle.getBundleId())); //$NON-NLS-1$
 				EclipseAdaptor.getDefault().getFrameworkLog().log(new FrameworkLogEntry(FrameworkAdaptor.FRAMEWORK_SYMBOLICNAME, message, 0, e, null));
 			}
-			return super.findLocalClass(className);
+			return basicFindLocalClass(className);
 		} catch (ClassNotFoundException e) {
 			found = false;
 			throw e;
@@ -121,6 +120,18 @@
 	}
 
 	/**
+	 * Do the basic work for finding a class. This avoids the activation detection etc
+	 * and can be used by subclasses to override the default (from the superclass) 
+	 * way of finding classes.
+	 * @param name the class to look for
+	 * @return the found class
+	 * @throws ClassNotFoundException if the requested class cannot be found
+	 */
+	protected Class basicFindLocalClass(String name) throws ClassNotFoundException {
+		return super.findLocalClass(name);
+	}
+
+	/**
 	 * Determines if for loading the given class we should activate the bundle. 
 	 */
 	private boolean shouldActivateFor(String className) {
