Index: components/platform/src/main/java/org/hippoecm/hst/platform/model/HstModelImpl.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- components/platform/src/main/java/org/hippoecm/hst/platform/model/HstModelImpl.java	(revision f2eeed3b77ab1cfe2552043ef7c4a90fe623269f)
+++ components/platform/src/main/java/org/hippoecm/hst/platform/model/HstModelImpl.java	(revision )
@@ -346,6 +346,11 @@
     }
 
 
+    @Override
+    public ComponentManager getComponentManager() {
+        return websiteComponentManager;
+    }
+
     @Override
     public HstSiteMapMatcher getHstSiteMapMatcher() {
         return hstSiteMapMatcher;
Index: components/platform/src/main/java/org/hippoecm/hst/platform/model/HstModelRegistryImpl.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- components/platform/src/main/java/org/hippoecm/hst/platform/model/HstModelRegistryImpl.java	(revision f2eeed3b77ab1cfe2552043ef7c4a90fe623269f)
+++ components/platform/src/main/java/org/hippoecm/hst/platform/model/HstModelRegistryImpl.java	(revision )
@@ -16,8 +16,10 @@
 package org.hippoecm.hst.platform.model;
 
 import java.util.HashMap;
+import java.util.IdentityHashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.concurrent.atomic.AtomicBoolean;
 
 import javax.jcr.Credentials;
 import javax.jcr.LoginException;
@@ -52,6 +54,10 @@
 
     private final Map<String, HstModelImpl> models = new HashMap<>();
 
+    private final Map<ClassLoader, HstModelImpl> modelsByClassLoader = new IdentityHashMap<>();
+
+    private final Map<String, ClassLoader> contextPathClassLoaderMap = new HashMap<>();
+
     private Repository repository;
 
     public void setRepository(Repository repository) {
@@ -82,6 +88,8 @@
                                                   final boolean loadHstConfigNodes) throws ModelRegistrationException {
 
         final String contextPath = servletContext.getContextPath();
+        contextPathClassLoaderMap.put(contextPath, servletContext.getClassLoader());
+
         if (models.containsKey(contextPath)) {
             throw new IllegalStateException(String.format("There is already an HstModel registered for contextPath '%s'", contextPath));
         }
@@ -121,6 +129,7 @@
             final HstModelImpl model = new HstModelImpl(session, servletContext, websiteComponentManager,
                     hstNodeLoadingCache, hstConfigurationLoadingCache);
             models.put(contextPath, model);
+            modelsByClassLoader.put(servletContext.getClassLoader(), model);
 
             log.info("Registered HstModel for '{}'", contextPath);
             return model;
@@ -149,6 +158,8 @@
             }
             log.info("Unregistered HstModel for '{}'", contextPath);
         }
+        modelsByClassLoader.remove(contextPathClassLoaderMap.get(contextPath));
+        contextPathClassLoaderMap.remove(contextPath);
     }
 
     @Override
@@ -156,6 +167,11 @@
         return models.get(contextPath);
     }
 
+    @Override
+    public HstModel getHstModel(final ClassLoader classLoader) {
+        return modelsByClassLoader.get(classLoader);
+    }
+
     public List<HstModel> getHstModels() {
         return ImmutableList.copyOf(models.values());
     }
Index: api/src/main/java/org/hippoecm/hst/platform/model/HstModelRegistry.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- api/src/main/java/org/hippoecm/hst/platform/model/HstModelRegistry.java	(revision f2eeed3b77ab1cfe2552043ef7c4a90fe623269f)
+++ api/src/main/java/org/hippoecm/hst/platform/model/HstModelRegistry.java	(revision )
@@ -32,5 +32,7 @@
 
     HstModel getHstModel(String contextPath);
 
+    HstModel getHstModel(ClassLoader classLoader);
+
     List<HstModel> getHstModels();
 }
Index: client-modules/page-composer/src/main/java/org/hippoecm/hst/pagecomposer/jaxrs/cxf/CXFJaxrsHstConfigService.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- client-modules/page-composer/src/main/java/org/hippoecm/hst/pagecomposer/jaxrs/cxf/CXFJaxrsHstConfigService.java	(revision f2eeed3b77ab1cfe2552043ef7c4a90fe623269f)
+++ client-modules/page-composer/src/main/java/org/hippoecm/hst/pagecomposer/jaxrs/cxf/CXFJaxrsHstConfigService.java	(revision )
@@ -31,6 +31,7 @@
 
 import org.hippoecm.hst.configuration.channel.ChannelManager;
 import org.hippoecm.hst.configuration.hosting.VirtualHosts;
+import org.hippoecm.hst.core.container.ComponentManager;
 import org.hippoecm.hst.platform.api.model.EventPathsInvalidator;
 import org.hippoecm.hst.core.container.ContainerException;
 import org.hippoecm.hst.core.internal.PreviewDecorator;
@@ -248,5 +249,10 @@
         public boolean isHstConfigurationNodesLoaded() {
             return delegatee.isHstConfigurationNodesLoaded();
         }
+
+        @Override
+        public ComponentManager getComponentManager() {
+            return delegatee.getComponentManager();
+        }
     }
 }
Index: api/src/main/java/org/hippoecm/hst/platform/model/HstModel.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- api/src/main/java/org/hippoecm/hst/platform/model/HstModel.java	(revision f2eeed3b77ab1cfe2552043ef7c4a90fe623269f)
+++ api/src/main/java/org/hippoecm/hst/platform/model/HstModel.java	(revision )
@@ -16,6 +16,7 @@
 package org.hippoecm.hst.platform.model;
 
 import org.hippoecm.hst.configuration.hosting.VirtualHosts;
+import org.hippoecm.hst.core.container.ComponentManager;
 import org.hippoecm.hst.core.linking.HstLinkCreator;
 import org.hippoecm.hst.core.request.HstSiteMapMatcher;
 
@@ -28,4 +29,9 @@
     HstLinkCreator getHstLinkCreator();
 
     boolean isHstConfigurationNodesLoaded();
+
+    /**
+     * @return the {@link ComponentManager} for this specific {@link HstModel}
+     */
+    ComponentManager getComponentManager();
 }
Index: commons/src/main/java/org/hippoecm/hst/util/ParametersInfoAnnotationUtils.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- commons/src/main/java/org/hippoecm/hst/util/ParametersInfoAnnotationUtils.java	(revision f2eeed3b77ab1cfe2552043ef7c4a90fe623269f)
+++ commons/src/main/java/org/hippoecm/hst/util/ParametersInfoAnnotationUtils.java	(revision )
@@ -22,8 +22,12 @@
 
 import org.hippoecm.hst.configuration.HstNodeTypes;
 import org.hippoecm.hst.configuration.components.HstComponentConfiguration;
+import org.hippoecm.hst.core.container.ComponentManager;
 import org.hippoecm.hst.core.parameters.ParametersInfo;
 import org.hippoecm.hst.core.request.ComponentConfiguration;
+import org.hippoecm.hst.platform.model.HstModelRegistry;
+import org.hippoecm.hst.site.HstServices;
+import org.onehippo.cms7.services.HippoServiceRegistry;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -138,11 +142,20 @@
             Class<?> componentClazz = null;
             String componentClassName = null;
 
+
+            final ClassLoader classLoader = Thread.currentThread().getContextClassLoader();
             try {
                 if (componentItemNode.hasProperty(HstNodeTypes.COMPONENT_PROPERTY_COMPONENT_CLASSNAME)) {
                     componentClassName = componentItemNode
                             .getProperty(HstNodeTypes.COMPONENT_PROPERTY_COMPONENT_CLASSNAME).getString();
-                    componentClazz = Thread.currentThread().getContextClassLoader().loadClass(componentClassName);
+                    final HstModelRegistry hstModelRegistry = HippoServiceRegistry.getService(HstModelRegistry.class);
+                    final ComponentManager componentManager = hstModelRegistry.getHstModel(classLoader).getComponentManager();
+                    final Object component = componentManager.getComponent(componentClassName);
+                    if (component != null) {
+                        componentClazz = componentClazz.getClass();
+                    } else {
+                        componentClazz = classLoader.loadClass(componentClassName);
+                    }
                 }
             } catch (Exception e) {
                 log.warn("Component class not loadable, configured by {} property: {}",
@@ -192,7 +205,14 @@
 
         if (componentClazzName != null && !componentClazzName.isEmpty()) {
             try {
-                componentClazz = classLoader.loadClass(componentClazzName);
+                final HstModelRegistry hstModelRegistry = HippoServiceRegistry.getService(HstModelRegistry.class);
+                final ComponentManager componentManager = hstModelRegistry.getHstModel(classLoader).getComponentManager();
+                final Object component = componentManager.getComponent(componentClazzName);
+                if (component != null) {
+                    componentClazz = componentClazz.getClass();
+                } else {
+                    componentClazz = classLoader.loadClass(componentClazzName);
+                }
             } catch (Exception e) {
                 log.warn("Component class not loadable: {}", componentClazzName);
             }
