diff --git a/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.a/META-INF/MANIFEST.MF b/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.a/META-INF/MANIFEST.MF
index 346e725..8b80357 100644
--- a/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.a/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.osgi.tests/bundles_src/ext.framework.a/META-INF/MANIFEST.MF
@@ -5,3 +5,4 @@
 Bundle-Version: 1.0.0
 Fragment-Host: system.bundle; extension:=framework
 Export-Package: ext.framework.a
+Bundle-ClassPath: .
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
index 1433812..53880a5 100644
--- a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/AllFrameworkHookTests.java
@@ -23,6 +23,7 @@
 		suite.addTest(new TestSuite(ClassLoaderHookTests.class));
 		suite.addTest(new TestSuite(BundleFileWrapperFactoryHookTests.class));
 		suite.addTest(new TestSuite(ContextFinderTests.class));
+		suite.addTest(new TestSuite(DevClassPathWithExtensionTests.class));
 		return suite;
 	}
 }
diff --git a/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/DevClassPathWithExtensionTests.java b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/DevClassPathWithExtensionTests.java
new file mode 100644
index 0000000..dc6d1a5
--- /dev/null
+++ b/bundles/org.eclipse.osgi.tests/src/org/eclipse/osgi/tests/hooks/framework/DevClassPathWithExtensionTests.java
@@ -0,0 +1,75 @@
+/*******************************************************************************
+ * Copyright (c) 2013, 2018 IBM Corporation and others.
+ *
+ * This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License 2.0
+ * which accompanies this distribution, and is available at
+ * https://www.eclipse.org/legal/epl-2.0/
+ *
+ * SPDX-License-Identifier: EPL-2.0
+ *
+ * Contributors:
+ *     IBM Corporation - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.osgi.tests.hooks.framework;
+
+import java.io.File;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.Map;
+import org.eclipse.osgi.internal.framework.EquinoxConfiguration;
+import org.eclipse.osgi.tests.OSGiTestsActivator;
+import org.osgi.framework.Bundle;
+import org.osgi.framework.Constants;
+import org.osgi.framework.launch.Framework;
+import org.osgi.framework.wiring.FrameworkWiring;
+
+public class DevClassPathWithExtensionTests extends AbstractFrameworkHookTests {
+	private static final String TEST_BUNDLE = "ext.framework.a";
+
+	private Map<String, String> configuration;
+	private Framework framework;
+	private String location;
+
+	protected void setUp() throws Exception {
+		super.setUp();
+		location = bundleInstaller.getBundleLocation(TEST_BUNDLE);
+		File file = OSGiTestsActivator.getContext().getDataFile(getName());
+		configuration = new HashMap<String, String>();
+		configuration.put(Constants.FRAMEWORK_STORAGE, file.getAbsolutePath());
+		configuration.put(EquinoxConfiguration.PROP_DEV, "bin/");
+		framework = createFramework(configuration);
+	}
+
+	protected void tearDown() throws Exception {
+		stopQuietly(framework);
+		super.tearDown();
+	}
+
+	private void initAndStartFramework() throws Exception {
+		initAndStart(framework);
+	}
+
+	private Bundle installBundle() throws Exception {
+		return framework.getBundleContext().installBundle(location);
+	}
+
+	public void testDevClassPathWithExtension() throws Exception {
+		initAndStartFramework();
+
+		Bundle b = installBundle();
+		assertTrue("Did not resolve test extension", resolveBundles(Collections.singleton(b)));
+
+		stop(framework);
+
+		// reload the framework which uses read-only data structures
+		framework = createFramework(configuration);
+		initAndStart(framework);
+	}
+
+	private boolean resolveBundles(Collection<Bundle> bundles) {
+		return framework.adapt(FrameworkWiring.class).resolveBundles(bundles);
+	}
+
+}
