diff --git a/src/main/java/org/apache/sling/superimposing/SuperimposingManager.java b/src/main/java/org/apache/sling/superimposing/SuperimposingManager.java
index 43d0043..fc0c871 100644
--- a/src/main/java/org/apache/sling/superimposing/SuperimposingManager.java
+++ b/src/main/java/org/apache/sling/superimposing/SuperimposingManager.java
@@ -18,7 +18,7 @@
  */
 package org.apache.sling.superimposing;
 
-import java.util.Map;
+import java.util.Iterator;
 
 import org.apache.sling.superimposing.impl.SuperimposingResourceProviderImpl;
 
@@ -29,13 +29,15 @@
 public interface SuperimposingManager {
 
     /**
-     * @return true if superimposing mode is enabled
+     * @return true if superimposing mode is enabled.
      */
     boolean isEnabled();
 
     /**
-     * @return Immutable map with all superimposing resource providers currently registered
+     * @return Iterator with all superimposing resource providers currently registered.
+     *   Iterator is backed by a {@link java.util.concurrent.ConcurrentHashMap} and is safe to access
+     *   even if superimposing resource providers are registered or unregistered at the same time.
      */
-    Map<String, SuperimposingResourceProvider> getRegisteredProviders();
+    Iterator<SuperimposingResourceProvider> getRegisteredProviders();
 
 }
diff --git a/src/main/java/org/apache/sling/superimposing/impl/SuperimposingManagerImpl.java b/src/main/java/org/apache/sling/superimposing/impl/SuperimposingManagerImpl.java
index 51809ae..055ecfa 100644
--- a/src/main/java/org/apache/sling/superimposing/impl/SuperimposingManagerImpl.java
+++ b/src/main/java/org/apache/sling/superimposing/impl/SuperimposingManagerImpl.java
@@ -22,9 +22,9 @@
 import static org.apache.sling.superimposing.SuperimposingResourceProvider.PROP_SUPERIMPOSE_SOURCE_PATH;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.Dictionary;
 import java.util.HashMap;
+import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -413,11 +413,13 @@
     }
 
     /**
-     * @return Immutable map with all superimposing resource providers currently registered
+     * @return Iterator with all superimposing resource providers currently registered.
+     *   Iterator is backed by a {@link java.util.concurrent.ConcurrentHashMap} and is safe to access
+     *   even if superimposing resource providers are registered or unregistered at the same time.
      */
-    public Map<String, SuperimposingResourceProvider> getRegisteredProviders() {
-        Map<String, SuperimposingResourceProvider> mapcopy = new HashMap<String, SuperimposingResourceProvider>(superimposingProviders);
-        return Collections.unmodifiableMap(mapcopy);
+    @SuppressWarnings("unchecked")
+    public Iterator<SuperimposingResourceProvider> getRegisteredProviders() {
+        return IteratorUtils.unmodifiableIterator(superimposingProviders.values().iterator());
     }
 
     SuperimposingManagerImpl withResourceResolverFactory(ResourceResolverFactory resolverFactory) {
diff --git a/src/test/java/org/apache/sling/superimposing/impl/SuperimposingManagerImplTest.java b/src/test/java/org/apache/sling/superimposing/impl/SuperimposingManagerImplTest.java
index c4caea3..2ed1365 100644
--- a/src/test/java/org/apache/sling/superimposing/impl/SuperimposingManagerImplTest.java
+++ b/src/test/java/org/apache/sling/superimposing/impl/SuperimposingManagerImplTest.java
@@ -40,6 +40,7 @@
 import javax.jcr.observation.EventIterator;
 import javax.jcr.observation.EventListener;
 
+import org.apache.commons.collections.IteratorUtils;
 import org.apache.sling.api.resource.LoginException;
 import org.apache.sling.api.resource.Resource;
 import org.apache.sling.api.resource.ResourceResolver;
@@ -217,6 +218,7 @@
         verifyZeroInteractions(bundleContext);
     }
 
+    @SuppressWarnings("unchecked")
     @Test
     public void testFindAllSuperimposings() throws InterruptedException, LoginException, RepositoryException {
         // prepare a query that returns one existing superimposed resource
@@ -231,9 +233,9 @@
         initialize(true);
 
         // ensure the superimposed resource is detected and registered
-        Map<String, SuperimposingResourceProvider> providers = underTest.getRegisteredProviders();
+        List<SuperimposingResourceProvider> providers = IteratorUtils.toList(underTest.getRegisteredProviders());
         assertEquals(1, providers.size());
-        SuperimposingResourceProvider provider = providers.values().iterator().next();
+        SuperimposingResourceProvider provider = providers.iterator().next();
         assertEquals(SUPERIMPOSED_PATH, provider.getRootPath());
         assertEquals(ORIGINAL_PATH, provider.getSourcePath());
         assertFalse(provider.isOverlayable());
@@ -300,6 +302,7 @@
         return eventIterator;
     }
 
+    @SuppressWarnings("unchecked")
     @Test
     public void testSuperimposedResourceCreateUpdateRemove() throws InterruptedException, LoginException, RepositoryException {
         initialize(true);
@@ -309,9 +312,9 @@
         underTest.onEvent(prepareNodeCreateEvent(superimposedResource));
 
         // ensure the superimposed resource is detected and registered
-        Map<String, SuperimposingResourceProvider> providers = underTest.getRegisteredProviders();
+        List<SuperimposingResourceProvider> providers = IteratorUtils.toList(underTest.getRegisteredProviders());
         assertEquals(1, providers.size());
-        SuperimposingResourceProvider provider = providers.values().iterator().next();
+        SuperimposingResourceProvider provider = providers.iterator().next();
         assertEquals(SUPERIMPOSED_PATH, provider.getRootPath());
         assertEquals(ORIGINAL_PATH, provider.getSourcePath());
         assertFalse(provider.isOverlayable());
@@ -322,9 +325,9 @@
         underTest.onEvent(prepareNodeChangeEvent(superimposedResource));
 
         // ensure the superimposed resource update is detected and a new provider instance is registered
-        providers = underTest.getRegisteredProviders();
+        providers = IteratorUtils.toList(underTest.getRegisteredProviders());
         assertEquals(1, providers.size());
-        SuperimposingResourceProvider provider2 = providers.values().iterator().next();
+        SuperimposingResourceProvider provider2 = providers.iterator().next();
         assertEquals(SUPERIMPOSED_PATH, provider2.getRootPath());
         assertEquals("/other/path", provider2.getSourcePath());
         assertFalse(provider2.isOverlayable());
@@ -334,10 +337,11 @@
         underTest.onEvent(prepareNodeRemoveEvent(superimposedResource));
 
         // ensure provider is removed
-        providers = underTest.getRegisteredProviders();
+        providers = IteratorUtils.toList(underTest.getRegisteredProviders());
         assertEquals(0, providers.size());
     }
 
+    @SuppressWarnings("unchecked")
     @Test
     public void testSuperimposedResourceCreateMove() throws InterruptedException, LoginException, RepositoryException {
         when(componentContextProperties.get(SuperimposingManagerImpl.FINDALLQUERIES_PROPERTY)).thenReturn("syntax|query");
@@ -363,9 +367,9 @@
         underTest.onEvent(prepareNodeMoveEvent(superimposedResource, oldPath));
 
         // ensure the superimposed resource update is detected and a new provider instance is registered
-        Map<String, SuperimposingResourceProvider> providers = underTest.getRegisteredProviders();
+        List<SuperimposingResourceProvider> providers = IteratorUtils.toList(underTest.getRegisteredProviders());
         assertEquals(1, providers.size());
-        SuperimposingResourceProvider provider = providers.values().iterator().next();
+        SuperimposingResourceProvider provider = providers.iterator().next();
         assertEquals("/new/path", provider.getRootPath());
         assertEquals(ORIGINAL_PATH, provider.getSourcePath());
         assertFalse(provider.isOverlayable());
