diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
index 02cd5c0..18aead8 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/Activator.java
@@ -24,11 +24,14 @@
 import java.util.Map;
 import java.util.Observable;
 import java.util.Observer;
+import java.util.concurrent.ConcurrentHashMap;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.concurrent.ExecutorService;
 import java.util.concurrent.Executors;
 import java.util.concurrent.TimeUnit;
 
+import javax.enterprise.inject.spi.BeanManager;
+
 import org.apache.aries.cdi.container.internal.command.CDICommand;
 import org.apache.aries.cdi.container.internal.container.CDIBundle;
 import org.apache.aries.cdi.container.internal.container.ConfigurationListener;
@@ -284,6 +287,20 @@
 		return false;
 	}
 
+	public static void put(Bundle bundle, BeanManager beanManager) {
+		_cache.put(bundle, beanManager);
+	}
+
+	public static BeanManager get(Bundle bundle) {
+		return _cache.get(bundle);
+	}
+
+	public static void remove(Bundle bundle) {
+		_cache.remove(bundle);
+	}
+
+	private static final Map<Bundle, BeanManager> _cache = new ConcurrentHashMap<>();
+
 	private BundleContext _bundleContext;
 	private final ChangeCount _ccrChangeCount = new ChangeCount();
 	private ServiceRegistration<CDIComponentRuntime> _ccrRegistration;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java
index 078d842..fa19ee6 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationExtension.java
@@ -10,11 +10,15 @@
 import java.util.Set;
 import java.util.TreeMap;
 
+import javax.annotation.Priority;
 import javax.enterprise.event.Observes;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.BeforeBeanDiscovery;
+import javax.enterprise.inject.spi.BeforeShutdown;
 import javax.enterprise.inject.spi.Extension;
+import javax.interceptor.Interceptor;
 
+import org.apache.aries.cdi.container.internal.Activator;
 import org.apache.aries.cdi.spi.configuration.Configuration;
 
 public class ConfigurationExtension  extends AbstractMap<String, Object> implements Configuration, Extension {
@@ -45,10 +49,22 @@
 		return _configuration.entrySet();
 	}
 
-	void fire(@Observes BeforeBeanDiscovery bbd, BeanManager beanManager) {
+	void init(
+		@Priority(Interceptor.Priority.PLATFORM_BEFORE)
+		@Observes BeforeBeanDiscovery bbd, BeanManager beanManager) {
+
+		Activator.put(_containerState.bundle(), beanManager);
+
 		beanManager.fireEvent(this);
 	}
 
+	void destroy(
+		@Priority(Integer.MAX_VALUE - 1000)
+		@Observes BeforeShutdown bs) {
+
+		Activator.remove(_containerState.bundle());
+	}
+
 	String getSelectedApplication(Map<String, Object> configuration) {
 		if (configuration.containsKey(JAX_RS_APPLICATION_SELECT)) {
 			return String.valueOf(_configuration.get(JAX_RS_APPLICATION_SELECT));
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java
index 494de1c..bb54353 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/container/ConfigurationListener.java
@@ -73,7 +73,10 @@
 	@Override
 	public boolean close() {
 		try (Syncro open = syncro.open()) {
-			if (_listenerService != null) {
+			if (_listenerService == null) {
+				return true;
+			}
+			else {
 				_listenerService.unregister();
 				_listenerService = null;
 			}
@@ -131,6 +134,10 @@
 	@Override
 	public boolean open() {
 		try (Syncro open = syncro.open()) {
+			if (_listenerService != null) {
+				return true;
+			}
+
 			if (containerState.bundleContext() == null) {
 				// this bundle was already removed
 				return false;
diff --git a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/provider/CDIProvider.java b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/provider/CDIProvider.java
index dc3b430..53e686e 100644
--- a/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/provider/CDIProvider.java
+++ b/cdi-extender/src/main/java/org/apache/aries/cdi/container/internal/provider/CDIProvider.java
@@ -17,18 +17,19 @@
 import static java.util.Optional.ofNullable;
 
 import java.lang.annotation.Annotation;
-import java.util.Arrays;
 import java.util.Collections;
 import java.util.Iterator;
+import java.util.Set;
 
 import javax.enterprise.inject.Instance;
+import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.CDI;
 import javax.enterprise.util.TypeLiteral;
 
+import org.apache.aries.cdi.container.internal.Activator;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleReference;
-import org.osgi.framework.Constants;
 
 public class CDIProvider implements javax.enterprise.inject.spi.CDIProvider {
 
@@ -53,16 +54,8 @@
 					"No Bundle found for Thread.ContextClassLoader " + Thread.currentThread())
 			);
 
-			return Arrays.stream(bundle.getRegisteredServices()).filter(
-				sr -> ofNullable(
-					sr.getProperty(Constants.OBJECTCLASS)
-				).map(String[].class::cast).map(Arrays::asList).filter(
-					list -> list.contains(BeanManager.class.getName())
-				).isPresent()
-			).findFirst().map(
-				bundle.getBundleContext()::getService
-			).map(BeanManager.class::cast).orElseThrow(
-				() -> new IllegalStateException("No BeanManager service for bundle " + bundle)
+			return ofNullable(Activator.get(bundle)).orElseThrow(
+				() -> new IllegalStateException("No BeanManager for bundle " + bundle)
 			);
 		}
 
@@ -83,17 +76,26 @@
 
 		@Override
 		public Instance<Object> select(Annotation... qualifiers) {
-			return getBeanManager().createInstance().select(qualifiers);
+			return createInstance().select(qualifiers);
 		}
 
 		@Override
 		public <U> Instance<U> select(Class<U> subtype, Annotation... qualifiers) {
-			return getBeanManager().createInstance().select(subtype, qualifiers);
+			return createInstance().select(subtype, qualifiers);
 		}
 
 		@Override
 		public <U> Instance<U> select(TypeLiteral<U> subtype, Annotation... qualifiers) {
-			return getBeanManager().createInstance().select(subtype, qualifiers);
+			return createInstance().select(subtype, qualifiers);
+		}
+
+		private Instance<Object> createInstance() {
+			BeanManager beanManager = getBeanManager();
+			Set<Bean<?>> beans = beanManager.getBeans(Instance.class);
+			@SuppressWarnings("unchecked")
+			Bean<Instance<Object>> instanceBean = (Bean<Instance<Object>>)beanManager.resolve(beans);
+			Instance<Object> instance = instanceBean.create(beanManager.createCreationalContext(instanceBean));
+			return instance;
 		}
 
 	}
diff --git a/cdi-itests/owb-itest.bndrun b/cdi-itests/owb-itest.bndrun
index d219c54..20c12d2 100644
--- a/cdi-itests/owb-itest.bndrun
+++ b/cdi-itests/owb-itest.bndrun
@@ -65,5 +65,7 @@
 	org.apache.xbean.finder-shaded;version='[4.13.0,4.13.1)',\
 	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
 	org.osgi.service.jaxrs;version='[1.0.0,1.0.1)',\
+	org.osgi.test.common;version='[1.0.0,1.0.1)',\
+	org.osgi.test.junit4;version='[1.0.0,1.0.1)',\
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
 	org.osgi.util.promise;version='[1.1.0,1.1.1)'
diff --git a/cdi-itests/pom.xml b/cdi-itests/pom.xml
index c59681a..d186a37 100644
--- a/cdi-itests/pom.xml
+++ b/cdi-itests/pom.xml
@@ -141,6 +141,11 @@
 			<groupId>org.osgi</groupId>
 			<artifactId>osgi.core</artifactId>
 		</dependency>
+		<dependency>
+			<groupId>org.osgi</groupId>
+			<artifactId>org.osgi.test.junit4</artifactId>
+			<version>1.0.0-SNAPSHOT</version>
+		</dependency>
 
 		<!-- RUNTIME dependencies not found in BOMs -->
 		<dependency>
@@ -291,4 +296,15 @@
 			</plugin>
 		</plugins>
 	</build>
+
+	<repositories>
+		<repository>
+			<id>Sonatype OSSR</id>
+			<url>https://oss.sonatype.org/content/repositories/snapshots/</url>
+			<layout>default</layout>
+			<releases>
+				<enabled>false</enabled>
+			</releases>
+		</repository>
+	</repositories>
 </project>
diff --git a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/DisableComponentTests.java b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/DisableComponentTests.java
index e260dd9..0f019c2 100644
--- a/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/DisableComponentTests.java
+++ b/cdi-itests/src/main/java/org/apache/aries/cdi/test/cases/DisableComponentTests.java
@@ -14,7 +14,8 @@
 
 package org.apache.aries.cdi.test.cases;
 
-import static org.junit.Assert.*;
+import static org.junit.Assert.assertNotNull;
+import static org.junit.Assert.assertNull;
 
 import java.util.Dictionary;
 import java.util.Hashtable;
@@ -22,26 +23,26 @@
 import org.apache.aries.cdi.test.interfaces.Pojo;
 import org.junit.After;
 import org.junit.Before;
+import org.junit.Rule;
 import org.junit.Test;
 import org.osgi.framework.Bundle;
 import org.osgi.service.cm.Configuration;
 import org.osgi.service.cm.ConfigurationAdmin;
-import org.osgi.util.tracker.ServiceTracker;
+import org.osgi.test.junit4.service.ServiceUseRule;
 
-public class DisableComponentTests extends AbstractTestCase {
+public class DisableComponentTests	 extends AbstractTestCase {
+
+	@Rule
+	public ServiceUseRule<ConfigurationAdmin> car = new ServiceUseRule.Builder<ConfigurationAdmin>(ConfigurationAdmin.class).build();
 
 	@Before
 	@Override
 	public void setUp() throws Exception {
-		adminTracker = new ServiceTracker<>(bundleContext, ConfigurationAdmin.class, null);
-		adminTracker.open();
-		configurationAdmin = adminTracker.getService();
 	}
 
 	@After
 	@Override
 	public void tearDown() throws Exception {
-		adminTracker.close();
 	}
 
 	@Test
@@ -61,7 +62,7 @@
 			Configuration configurationA = null;
 
 			try {
-				configurationA = configurationAdmin.getConfiguration("osgi.cdi.cdi.itests.tb8", "?");
+				configurationA = car.getService().getConfiguration("osgi.cdi.cdi.itests.tb8", "?");
 
 				Dictionary<String, Object> p1 = new Hashtable<>();
 				p1.put("cdi-itests.tb8.enabled", false);
@@ -120,7 +121,7 @@
 			Configuration configurationA = null;
 
 			try {
-				configurationA = configurationAdmin.getConfiguration("osgi.cdi.cdi.itests.tb8", "?");
+				configurationA = car.getService().getConfiguration("osgi.cdi.cdi.itests.tb8", "?");
 
 				Dictionary<String, Object> p1 = new Hashtable<>();
 				p1.put("singleComponentBean.enabled", false);
@@ -162,7 +163,4 @@
 		}
 	}
 
-	private ServiceTracker<ConfigurationAdmin, ConfigurationAdmin> adminTracker;
-	private ConfigurationAdmin configurationAdmin;
-
 }
diff --git a/cdi-itests/weld-itest.bndrun b/cdi-itests/weld-itest.bndrun
index 2f42ebe..136b9c0 100644
--- a/cdi-itests/weld-itest.bndrun
+++ b/cdi-itests/weld-itest.bndrun
@@ -73,5 +73,7 @@
 	org.jboss.weld.osgi-bundle;version='[3.0.5,3.0.6)',\
 	org.osgi.service.cdi;version='[1.0.0,1.0.1)',\
 	org.osgi.service.jaxrs;version='[1.0.0,1.0.1)',\
+	org.osgi.test.common;version='[1.0.0,1.0.1)',\
+	org.osgi.test.junit4;version='[1.0.0,1.0.1)',\
 	org.osgi.util.function;version='[1.1.0,1.1.1)',\
 	org.osgi.util.promise;version='[1.1.0,1.1.1)'
