diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index 2fc4526..3e65b10 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -85,10 +85,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core-osgi-activator</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-xml</artifactId>
         </dependency>
         <dependency>
@@ -1151,6 +1147,11 @@
     </dependency>
     <dependency>
       <groupId>org.apache.camel</groupId>
+      <artifactId>camel-osgi-activator</artifactId>
+      <version>${project.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.apache.camel</groupId>
       <artifactId>camel-paho</artifactId>
       <version>${project.version}</version>
     </dependency>
diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index 0ca818b..2cff4e0 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -36,7 +36,6 @@
         <include>org.apache.camel:camel-core</include>
         <include>org.apache.camel:camel-core-engine</include>
         <include>org.apache.camel:camel-core-osgi</include>
-        <include>org.apache.camel:camel-core-osgi-activator</include>
         <include>org.apache.camel:camel-core-xml</include>
         <include>org.apache.camel:camel-cloud</include>
         <include>org.apache.camel:camel-jaxp</include>
@@ -251,6 +250,7 @@
         <include>org.apache.camel:camel-openstack</include>
         <include>org.apache.camel:camel-opentracing</include>
         <include>org.apache.camel:camel-optaplanner</include>
+        <include>org.apache.camel:camel-osgi-activator</include>
         <include>org.apache.camel:camel-paho</include>
         <include>org.apache.camel:camel-paxlogging</include>
         <include>org.apache.camel:camel-pdf</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index a4cdbb9..25201c1 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -1934,11 +1934,6 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
-        <artifactId>camel-core-osgi-activator</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.camel</groupId>
         <artifactId>camel-core-xml</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/camel-crypto-cms/pom.xml b/components/camel-crypto-cms/pom.xml
index 6e2757b..1f9224a 100644
--- a/components/camel-crypto-cms/pom.xml
+++ b/components/camel-crypto-cms/pom.xml
@@ -28,7 +28,7 @@
 
     <artifactId>camel-crypto-cms</artifactId>
     <packaging>jar</packaging>
-    <name>Camel :: Crypto CMS</name>
+    <name>Camel :: Crypto CMS (deprecated)</name>
     <description>Camel Cryptographic Message Syntax Support</description>
 
     <dependencies>
diff --git a/components/camel-crypto-cms/src/main/docs/crypto-cms-component.adoc b/components/camel-crypto-cms/src/main/docs/crypto-cms-component.adoc
index f35fe2e..ecee9d9 100644
--- a/components/camel-crypto-cms/src/main/docs/crypto-cms-component.adoc
+++ b/components/camel-crypto-cms/src/main/docs/crypto-cms-component.adoc
@@ -1,8 +1,11 @@
 [[crypto-cms-component]]
-= Crypto CMS Component
+= Crypto CMS Component (deprecated)
 
 *Since Camel 2.20*
 
+*Since Camel 2.20*
+
+
 // HEADER START
 *Only producer is supported*
 // HEADER END
@@ -431,4 +434,4 @@
         <to uri="crypto-cms:verify://testverify?keyStoreParameters=#keyStoreParameters1&amp;signedDataHeaderBase64=true" />
         <to uri="mock:result" />
     </route>    
-----
+----
\ No newline at end of file
diff --git a/components/camel-jcache/src/main/docs/jcache-component.adoc b/components/camel-jcache/src/main/docs/jcache-component.adoc
index 946876a..0905da5 100644
--- a/components/camel-jcache/src/main/docs/jcache-component.adoc
+++ b/components/camel-jcache/src/main/docs/jcache-component.adoc
@@ -85,7 +85,7 @@
 ----
 
 
-The component supports 8 options, which are listed below.
+The component supports 9 options, which are listed below.
 
 
 
@@ -95,7 +95,8 @@
 | *camel.component.jcache.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
 | *camel.component.jcache.bridge-error-handler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | Boolean
 | *camel.component.jcache.cache-configuration* | A Configuration for the Cache. The option is a javax.cache.configuration.Configuration type. |  | String
-| *camel.component.jcache.cache-configuration-properties* | The Properties for the javax.cache.spi.CachingProvider to create the CacheManager. The option is a java.util.Properties type. |  | String
+| *camel.component.jcache.cache-configuration-properties* | Properties to configure jcache |  | Map
+| *camel.component.jcache.cache-configuration-properties-ref* | References to an existing Properties or Map to lookup in the registry to use for configuring jcache. |  | String
 | *camel.component.jcache.caching-provider* | The fully qualified class name of the javax.cache.spi.CachingProvider |  | String
 | *camel.component.jcache.configuration-uri* | An implementation specific URI for the CacheManager |  | String
 | *camel.component.jcache.enabled* | Whether to enable auto configuration of the jcache component. This is enabled by default. |  | Boolean
@@ -112,7 +113,7 @@
 
 
 // component options: START
-The JCache component supports 7 options, which are listed below.
+The JCache component supports 8 options, which are listed below.
 
 
 
@@ -121,7 +122,8 @@
 | Name | Description | Default | Type
 | *cachingProvider* (common) | The fully qualified class name of the javax.cache.spi.CachingProvider |  | String
 | *cacheConfiguration* (common) | A Configuration for the Cache |  | Configuration
-| *cacheConfiguration Properties* (common) | The Properties for the javax.cache.spi.CachingProvider to create the CacheManager |  | Properties
+| *cacheConfiguration Properties* (common) | Properties to configure jcache |  | Map
+| *cacheConfiguration PropertiesRef* (common) | References to an existing Properties or Map to lookup in the registry to use for configuring jcache. |  | String
 | *configurationUri* (common) | An implementation specific URI for the CacheManager |  | String
 | *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java
index 124ef5b..61cd4b7 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/JCacheComponent.java
@@ -26,6 +26,7 @@
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultComponent;
 
 /**
@@ -36,7 +37,8 @@
 
     private String cachingProvider;
     private Configuration cacheConfiguration;
-    private Properties cacheConfigurationProperties;
+    private String cacheConfigurationPropertiesRef;
+    private Map cacheConfigurationProperties;
     private String configurationUri;
 
     public JCacheComponent() {
@@ -53,13 +55,27 @@
 
         configuration.setCachingProvider(cachingProvider);
         configuration.setCacheConfiguration(cacheConfiguration);
-        configuration.setCacheConfigurationProperties(cacheConfigurationProperties);
+        configuration.setCacheConfigurationProperties(loadProperties());
         configuration.setConfigurationUri(configurationUri);
 
         setProperties(configuration, parameters);
         return new JCacheEndpoint(uri, this, configuration);
     }
 
+    private Properties loadProperties() {
+        Properties answer = null;
+        if (cacheConfigurationProperties != null) {
+            answer = new Properties();
+            answer.putAll(cacheConfigurationProperties);
+        }
+        if (answer == null && cacheConfigurationPropertiesRef != null) {
+            Map map = CamelContextHelper.mandatoryLookup(getCamelContext(), cacheConfigurationPropertiesRef, Map.class);
+            answer = new Properties();
+            answer.putAll(map);
+        }
+        return answer;
+    }
+
     /**
      * The fully qualified class name of the {@link javax.cache.spi.CachingProvider}
      */
@@ -83,17 +99,27 @@
     }
 
     /**
-     * The {@link Properties} for the {@link javax.cache.spi.CachingProvider} to
-     * create the {@link CacheManager}
+     * Properties to configure jcache
      */
-    public Properties getCacheConfigurationProperties() {
+    public Map getCacheConfigurationProperties() {
         return cacheConfigurationProperties;
     }
 
-    public void setCacheConfigurationProperties(Properties cacheConfigurationProperties) {
+    public void setCacheConfigurationProperties(Map cacheConfigurationProperties) {
         this.cacheConfigurationProperties = cacheConfigurationProperties;
     }
 
+    public String getCacheConfigurationPropertiesRef() {
+        return cacheConfigurationPropertiesRef;
+    }
+
+    /**
+     * References to an existing {@link Properties} or {@link Map} to lookup in the registry to use for configuring jcache.
+     */
+    public void setCacheConfigurationPropertiesRef(String cacheConfigurationPropertiesRef) {
+        this.cacheConfigurationPropertiesRef = cacheConfigurationPropertiesRef;
+    }
+
     /**
      * An implementation specific URI for the {@link CacheManager}
      */
diff --git a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
index 742375b..0717e52 100644
--- a/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
+++ b/components/camel-nats/src/main/java/org/apache/camel/component/nats/NatsConfiguration.java
@@ -27,6 +27,7 @@
 import org.apache.camel.spi.UriParams;
 import org.apache.camel.spi.UriPath;
 import org.apache.camel.support.jsse.SSLContextParameters;
+import org.apache.camel.util.ObjectHelper;
 
 @UriParams
 public class NatsConfiguration {
@@ -373,7 +374,10 @@
         StringBuilder servers = new StringBuilder();
         String prefix = "nats://";
 
-        String[] pieces = getServers().split(",");
+        String srvspec = getServers();
+        ObjectHelper.notNull(srvspec, "No servers configured");
+
+        String[] pieces = srvspec.split(",");
         for (int i = 0; i < pieces.length; i++) {
             if (i < pieces.length - 1) {
                 servers.append(prefix + pieces[i] + ",");
diff --git a/components/camel-osgi-activator/pom.xml b/components/camel-osgi-activator/pom.xml
new file mode 100644
index 0000000..41fcdd8
--- /dev/null
+++ b/components/camel-osgi-activator/pom.xml
@@ -0,0 +1,61 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+
+    Licensed to the Apache Software Foundation (ASF) under one or more
+    contributor license agreements.  See the NOTICE file distributed with
+    this work for additional information regarding copyright ownership.
+    The ASF licenses this file to You under the Apache License, Version 2.0
+    (the "License"); you may not use this file except in compliance with
+    the License.  You may obtain a copy of the License at
+
+         http://www.apache.org/licenses/LICENSE-2.0
+
+    Unless required by applicable law or agreed to in writing, software
+    distributed under the License is distributed on an "AS IS" BASIS,
+    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+    See the License for the specific language governing permissions and
+    limitations under the License.
+
+-->
+<project xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+    <modelVersion>4.0.0</modelVersion>
+
+    <parent>
+        <groupId>org.apache.camel</groupId>
+        <artifactId>components</artifactId>
+        <version>3.1.0-SNAPSHOT</version>
+    </parent>
+
+    <artifactId>camel-osgi-activator</artifactId>
+    <packaging>jar</packaging>
+
+    <name>Camel :: OSGi Activator</name>
+    <description>Camel OSGi Activator for running Camel routes from other bundles</description>
+
+    <properties>
+        <camel.osgi.activator>org.apache.camel.osgi.activator.CamelRoutesActivator</camel.osgi.activator>
+        <camel.osgi.dynamic>*</camel.osgi.dynamic>
+        <firstVersion>3.1.0</firstVersion>
+    </properties>
+
+    <dependencies>
+        <!-- osgi -->
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.cmpn</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.osgi</groupId>
+            <artifactId>osgi.core</artifactId>
+            <scope>provided</scope>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-osgi</artifactId>
+            <scope>provided</scope>
+        </dependency>
+    </dependencies>
+</project>
diff --git a/components/camel-osgi-activator/src/main/docs/osgi-activator.adoc b/components/camel-osgi-activator/src/main/docs/osgi-activator.adoc
new file mode 100644
index 0000000..f4fe423
--- /dev/null
+++ b/components/camel-osgi-activator/src/main/docs/osgi-activator.adoc
@@ -0,0 +1,56 @@
+[[OsgiActivator]]
+= OSGi Camel Routes Activator
+
+*Since Camel 3.1*
+
+A small OSGi activator for starting an OSGi Apache Camel Project.
+
+The bundle starts a shared CamelContext and registers any RouteBuilder instances
+(discovered via the OSGi Service Registry), from any other bundles that gets installed.
+And when the bundles gets uninstalled then the routes are stopped and removed from the shared CamelContext.
+
+== Important
+
+This OSGi activator is a based prototype for quickly starting up an OSGi container with a single shared
+CamelContext and then being able to use OSGi dynamism to deploy and undeploy bundlers with Camel routes.
+
+Beware that this OSGi activator is a basic implementation and has limited support for dealing with errors
+when new routes are added which may clash with existing routes (route ids).
+
+Configuration of the CamelContext is also very limited.
+
+Therefore only use this for prototyping and experiments. This is NOT recommended for production usage.
+
+== Install bundle
+
+Register an Apache Camel RouteBuilder as an OSGi service.
+
+Using OSGi annotations:
+
+[source,java]
+----
+@Component(service = RouteBuilder.class)
+public class MyRouteBuilder extends RouteBuilder {
+    @Override
+    public void configure() throws Exception {
+        from("timer:test?fixedRate=true&period=1000")
+            .log("Hello");
+    }
+}
+----
+
+Or Manually:
+
+[source,java]
+----
+public void start(BundleContext context) throws Exception {
+  context.registerService(RouteBuilder.class, new MyRouteBuilder(), null);
+}
+----
+
+And it's automatically added or removed to the context from any bundle!
+
+[source,text]
+----
+Route: route1 started and consuming from: timer://test?fixedRate=true&period=1000
+----
diff --git a/core/camel-core-osgi-activator/src/main/java/org/apache/camel/core/osgi/main/internal/Activator.java b/components/camel-osgi-activator/src/main/java/org/apache/camel/osgi/activator/CamelRoutesActivator.java
similarity index 88%
rename from core/camel-core-osgi-activator/src/main/java/org/apache/camel/core/osgi/main/internal/Activator.java
rename to components/camel-osgi-activator/src/main/java/org/apache/camel/osgi/activator/CamelRoutesActivator.java
index a82a94f..5c78c14 100644
--- a/core/camel-core-osgi-activator/src/main/java/org/apache/camel/core/osgi/main/internal/Activator.java
+++ b/components/camel-osgi-activator/src/main/java/org/apache/camel/osgi/activator/CamelRoutesActivator.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.core.osgi.main.internal;
+package org.apache.camel.osgi.activator;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -33,9 +33,9 @@
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-public class Activator implements BundleActivator, ServiceTrackerCustomizer<RouteBuilder, RouteBuilder> {
+public class CamelRoutesActivator implements BundleActivator, ServiceTrackerCustomizer<RouteBuilder, RouteBuilder> {
 
-    private static final Logger LOG = LoggerFactory.getLogger(Activator.class);
+    private static final Logger LOG = LoggerFactory.getLogger(CamelRoutesActivator.class);
     private ServiceRegistration<CamelContext> camelContextRef;
     private ModelCamelContext camelContext;
     private BundleContext bundleContext;
@@ -63,7 +63,7 @@
         }
 
         this.routeServiceTracker.open();
-        LOG.info("Camel Core OSGi Activator RouteBuilder ServiceTracker Tracker Open");
+        LOG.info("Camel OSGi Activator RouteBuilder ServiceTracker Tracker Open");
     }
 
     @Override
@@ -73,10 +73,10 @@
             // need to synchronize here since adding routes is not synchronized
             synchronized (camelContext) {
                 this.camelContext.addRoutes(builder);
-                LOG.debug("Camel Routes from RouteBuilder Class {} Added to Camel Core OSGi Activator Context", builder.getClass().getName());
+                LOG.debug("Camel Routes from RouteBuilder Class {} Added to Camel OSGi Activator Context", builder.getClass().getName());
             }
         } catch (Exception e) {
-            LOG.error("Error Adding Camel Route Builder", e);
+            LOG.error("Error Adding Camel RouteBuilder", e);
         }
 
         return builder;
@@ -103,7 +103,7 @@
         try {
             synchronized (camelContext) {
                 camelContext.removeRouteDefinitions(routesToBeRemoved);
-                LOG.debug("Camel Routes from RouteBuilder Class {} Removed from Camel Core OSGi Activator Context",
+                LOG.debug("Camel Routes from RouteBuilder Class {} Removed from Camel OSGi Activator Context",
                         service.getClass().getName());
             }
         } catch (Exception e) {
diff --git a/components/camel-quartz/src/main/docs/quartz-component.adoc b/components/camel-quartz/src/main/docs/quartz-component.adoc
index 594075a..5d09aa3 100644
--- a/components/camel-quartz/src/main/docs/quartz-component.adoc
+++ b/components/camel-quartz/src/main/docs/quartz-component.adoc
@@ -48,7 +48,7 @@
 
 
 // component options: START
-The Quartz component supports 13 options, which are listed below.
+The Quartz component supports 14 options, which are listed below.
 
 
 
@@ -59,7 +59,8 @@
 | *startDelayedSeconds* (scheduler) | Seconds to wait before starting the quartz scheduler. |  | int
 | *prefixJobNameWith EndpointId* (consumer) | Whether to prefix the quartz job with the endpoint id. This option is default false. | false | boolean
 | *enableJmx* (consumer) | Whether to enable Quartz JMX which allows to manage the Quartz scheduler from JMX. This options is default true | true | boolean
-| *properties* (consumer) | Properties to configure the Quartz scheduler. |  | Properties
+| *propertiesRef* (consumer) | References to an existing Properties or Map to lookup in the registry to use for configuring quartz. |  | String
+| *properties* (consumer) | Properties to configure the Quartz scheduler. |  | Map
 | *propertiesFile* (consumer) | File name of the properties to load from the classpath |  | String
 | *prefixInstanceName* (consumer) | Whether to prefix the Quartz Scheduler instance name with the CamelContext name. This is enabled by default, to let each CamelContext use its own Quartz scheduler instance by default. You can set this option to false to reuse Quartz scheduler instances between multiple CamelContext's. | true | boolean
 | *interruptJobsOn Shutdown* (scheduler) | Whether to interrupt jobs on shutdown which forces the scheduler to shutdown quicker and attempt to interrupt any running jobs. If this is enabled then any running jobs can fail due to being interrupted. | false | boolean
@@ -138,7 +139,7 @@
 ----
 
 
-The component supports 14 options, which are listed below.
+The component supports 15 options, which are listed below.
 
 
 
@@ -154,8 +155,9 @@
 | *camel.component.quartz.lazy-start-producer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | Boolean
 | *camel.component.quartz.prefix-instance-name* | Whether to prefix the Quartz Scheduler instance name with the CamelContext name. This is enabled by default, to let each CamelContext use its own Quartz scheduler instance by default. You can set this option to false to reuse Quartz scheduler instances between multiple CamelContext's. | true | Boolean
 | *camel.component.quartz.prefix-job-name-with-endpoint-id* | Whether to prefix the quartz job with the endpoint id. This option is default false. | false | Boolean
-| *camel.component.quartz.properties* | Properties to configure the Quartz scheduler. The option is a java.util.Properties type. |  | String
+| *camel.component.quartz.properties* | Properties to configure the Quartz scheduler. |  | Map
 | *camel.component.quartz.properties-file* | File name of the properties to load from the classpath |  | String
+| *camel.component.quartz.properties-ref* | References to an existing Properties or Map to lookup in the registry to use for configuring quartz. |  | String
 | *camel.component.quartz.scheduler* | To use the custom configured Quartz scheduler, instead of creating a new Scheduler. The option is a org.quartz.Scheduler type. |  | String
 | *camel.component.quartz.scheduler-factory* | To use the custom SchedulerFactory which is used to create the Scheduler. The option is a org.quartz.SchedulerFactory type. |  | String
 | *camel.component.quartz.start-delayed-seconds* | Seconds to wait before starting the quartz scheduler. |  | Integer
diff --git a/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java b/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
index 7969931..4796373 100644
--- a/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
+++ b/components/camel-quartz/src/main/java/org/apache/camel/component/quartz/QuartzComponent.java
@@ -19,6 +19,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.net.URI;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
 import java.util.concurrent.atomic.AtomicInteger;
@@ -28,6 +29,7 @@
 import org.apache.camel.ExtendedStartupListener;
 import org.apache.camel.spi.Metadata;
 import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.DefaultComponent;
 import org.apache.camel.support.ResourceHelper;
 import org.apache.camel.util.IOHelper;
@@ -52,7 +54,8 @@
     private Scheduler scheduler;
     @Metadata(label = "advanced")
     private SchedulerFactory schedulerFactory;
-    private Properties properties;
+    private String propertiesRef;
+    private Map properties;
     private String propertiesFile;
     @Metadata(label = "scheduler")
     private int startDelayedSeconds;
@@ -123,14 +126,25 @@
         this.enableJmx = enableJmx;
     }
 
-    public Properties getProperties() {
+    public String getPropertiesRef() {
+        return propertiesRef;
+    }
+
+    /**
+     * References to an existing {@link Properties} or {@link Map} to lookup in the registry to use for configuring quartz.
+     */
+    public void setPropertiesRef(String propertiesRef) {
+        this.propertiesRef = propertiesRef;
+    }
+
+    public Map getProperties() {
         return properties;
     }
 
     /**
      * Properties to configure the Quartz scheduler.
      */
-    public void setProperties(Properties properties) {
+    public void setProperties(Map properties) {
         this.properties = properties;
     }
 
@@ -278,7 +292,16 @@
     }
 
     private Properties loadProperties() throws SchedulerException {
-        Properties answer = getProperties();
+        Properties answer = null;
+        if (getProperties() != null) {
+            answer = new Properties();
+            answer.putAll(getProperties());
+        }
+        if (answer == null && getPropertiesRef() != null) {
+            Map map = CamelContextHelper.mandatoryLookup(getCamelContext(), getPropertiesRef(), Map.class);
+            answer = new Properties();
+            answer.putAll(map);
+        }
         if (answer == null && getPropertiesFile() != null) {
             log.info("Loading Quartz properties file from: {}", getPropertiesFile());
             InputStream is = null;
diff --git a/components/pom.xml b/components/pom.xml
index 8d7607a..a34304b 100644
--- a/components/pom.xml
+++ b/components/pom.xml
@@ -267,6 +267,7 @@
         <module>camel-openstack</module>
         <module>camel-opentracing</module>
         <module>camel-optaplanner</module>
+        <module>camel-osgi-activator</module>
         <module>camel-paho</module>
         <module>camel-paxlogging</module>
         <module>camel-pdf</module>
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java b/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java
index d3676c2..e314b77 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java
@@ -142,7 +142,7 @@
     private boolean convertIfRequired(Message message, DataType type) throws Exception {
         // TODO for better performance it may be better to add TypeConverterTransformer
         // into transformer registry automatically to avoid unnecessary scan in transformer registry
-        if (type != null && type.isJavaType() && type.getName() != null) {
+        if (type != null && type.isJavaType() && type.getName() != null && message != null && message.getBody() != null) {
             CamelContext context = message.getExchange().getContext();
             Class<?> typeJava = getClazz(type.getName(), context);
             if (!typeJava.isAssignableFrom(message.getBody().getClass())) {
diff --git a/core/camel-core-osgi-activator/pom.xml b/core/camel-core-osgi-activator/pom.xml
deleted file mode 100644
index 4b12500..0000000
--- a/core/camel-core-osgi-activator/pom.xml
+++ /dev/null
@@ -1,77 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
--->
-<project xmlns="http://maven.apache.org/POM/4.0.0"
-  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
-  <modelVersion>4.0.0</modelVersion>
-
-  <parent>
-    <groupId>org.apache.camel</groupId>
-    <artifactId>core</artifactId>
-    <version>3.1.0-SNAPSHOT</version>
-  </parent>
-
-  <artifactId>camel-core-osgi-activator</artifactId>
-  <packaging>jar</packaging>
-
-  <name>Camel :: Core OSGi Activator</name>
-  <description>Camel Core OSGi Activator</description>
-
-  <properties>
-    <maven.failsafe.version>2.22.1</maven.failsafe.version>
-    <camel.osgi.activator>org.apache.camel.core.osgi.main.internal.Activator</camel.osgi.activator>
-    <camel.osgi.dynamic>*</camel.osgi.dynamic>
-  </properties>
-
-  <dependencies>
-    <!-- osgi -->
-    <dependency>
-      <groupId>org.osgi</groupId>
-      <artifactId>osgi.cmpn</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.osgi</groupId>
-      <artifactId>osgi.core</artifactId>
-      <scope>provided</scope>
-    </dependency>
-    <dependency>
-      <groupId>org.apache.camel</groupId>
-      <artifactId>camel-core-osgi</artifactId>
-      <scope>provided</scope>
-    </dependency>
-  </dependencies>
-  <build>
-    <plugins>
-      <plugin>
-        <groupId>org.apache.servicemix.tooling</groupId>
-        <artifactId>depends-maven-plugin</artifactId>
-        <executions>
-          <execution>
-            <id>generate-depends-file</id>
-            <goals>
-              <goal>generate-depends-file</goal>
-            </goals>
-          </execution>
-        </executions>
-      </plugin>
-    </plugins>
-  </build>
-</project>
diff --git a/core/camel-core-osgi-activator/src/assembly/test-bundles.xml b/core/camel-core-osgi-activator/src/assembly/test-bundles.xml
deleted file mode 100644
index bd6fc39..0000000
--- a/core/camel-core-osgi-activator/src/assembly/test-bundles.xml
+++ /dev/null
@@ -1,37 +0,0 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<!--
-
-    Licensed to the Apache Software Foundation (ASF) under one or more
-    contributor license agreements.  See the NOTICE file distributed with
-    this work for additional information regarding copyright ownership.
-    The ASF licenses this file to You under the Apache License, Version 2.0
-    (the "License"); you may not use this file except in compliance with
-    the License.  You may obtain a copy of the License at
-
-         http://www.apache.org/licenses/LICENSE-2.0
-
-    Unless required by applicable law or agreed to in writing, software
-    distributed under the License is distributed on an "AS IS" BASIS,
-    WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-    See the License for the specific language governing permissions and
-    limitations under the License.
-
--->
-<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
-          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-          xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
-  <id>bundles</id>
-  <formats>
-    <format>dir</format>
-  </formats>
-  <includeBaseDirectory>false</includeBaseDirectory>
-  <dependencySets>
-    <dependencySet>
-      <outputDirectory/>
-      <outputFileNameMapping>${artifact.artifactId}.jar</outputFileNameMapping>
-      <includes>
-        <include>org.apache.camel:camel-core-osgi-activator</include>
-      </includes>
-    </dependencySet>
-  </dependencySets>
-</assembly>
\ No newline at end of file
diff --git a/core/camel-core-osgi-activator/src/main/docs/camel-core-osgi-activator.adoc b/core/camel-core-osgi-activator/src/main/docs/camel-core-osgi-activator.adoc
deleted file mode 100644
index f0614a6..0000000
--- a/core/camel-core-osgi-activator/src/main/docs/camel-core-osgi-activator.adoc
+++ /dev/null
@@ -1,37 +0,0 @@
-= camel-core-osgi-activator
-
-A small bundle for starting an OSGi Apache Camel Project.  The bundle starts the CamelContext and registering RouteBuilders from any bundle.
-
-Install bundle
-
-Register an Apache Camel RouteBuilder as an OSGi service.
-
-Using annotations
-
-[source,java]
-----
-@Component(service = RouteBuilder.class)
-public class MyRouteBuilder extends RouteBuilder {
-    @Override
-    public void configure() throws Exception {
-        from("timer:test?fixedRate=true&period=1000")
-            .log("Hello");
-    }
-}
-----
-
-Or Manually
-
-[source,java]
-----
-public void start(BundleContext context) throws Exception {
-  context.registerService(RouteBuilder.class, new MyRouteBuilder(), null);
-}
-----
-
-And it's automatically added or removed to the context from any bundle!
-
-[source,text]
-----
-Route: route1 started and consuming from: timer://test?fixedRate=true&period=1000
-----
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerChmodOptionTest.java b/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerChmodOptionTest.java
index 0a2d36a..b94c9cf 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerChmodOptionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/file/FileProducerChmodOptionTest.java
@@ -27,6 +27,7 @@
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.FailedToCreateRouteException;
+import org.apache.camel.PropertyBindingException;
 import org.apache.camel.ResolveEndpointFailedException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
@@ -101,7 +102,9 @@
             fail("Expected FailedToCreateRouteException");
         } catch (FailedToCreateRouteException e) {
             assertIsInstanceOf(ResolveEndpointFailedException.class, e.getCause());
-            IllegalArgumentException iae = assertIsInstanceOf(IllegalArgumentException.class, e.getCause().getCause());
+            PropertyBindingException pbe = assertIsInstanceOf(PropertyBindingException.class, e.getCause().getCause());
+            assertEquals("chmod", pbe.getPropertyName());
+            IllegalArgumentException iae = assertIsInstanceOf(IllegalArgumentException.class, pbe.getCause());
             assertEquals("chmod option [abc] is not valid", iae.getMessage());
         }
     }
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/CryptoCmsEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/CryptoCmsEndpointBuilderFactory.java
index 49e8063..1a770da 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/CryptoCmsEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/CryptoCmsEndpointBuilderFactory.java
@@ -557,6 +557,7 @@
      * different signer/verifier/encryptor/decryptor endpoints within the camel
      * context.
      */
+    @Deprecated
     default CryptoCmsEndpointBuilder cryptoCms(String path) {
         class CryptoCmsEndpointBuilderImpl extends AbstractEndpointBuilder implements CryptoCmsEndpointBuilder, AdvancedCryptoCmsEndpointBuilder {
             public CryptoCmsEndpointBuilderImpl(String path) {
diff --git a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/JCacheEndpointBuilderFactory.java b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/JCacheEndpointBuilderFactory.java
index 757152d..cd691be 100644
--- a/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/JCacheEndpointBuilderFactory.java
+++ b/core/camel-endpointdsl/src/main/java/org/apache/camel/builder/endpoint/dsl/JCacheEndpointBuilderFactory.java
@@ -17,7 +17,7 @@
 package org.apache.camel.builder.endpoint.dsl;
 
 import java.util.List;
-import java.util.Properties;
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.builder.EndpointConsumerBuilder;
@@ -74,12 +74,12 @@
          * The Properties for the javax.cache.spi.CachingProvider to create the
          * CacheManager.
          * 
-         * The option is a: <code>java.util.Properties</code> type.
+         * The option is a: <code>java.util.Map</code> type.
          * 
          * Group: common
          */
         default JCacheEndpointConsumerBuilder cacheConfigurationProperties(
-                Properties cacheConfigurationProperties) {
+                Map cacheConfigurationProperties) {
             doSetProperty("cacheConfigurationProperties", cacheConfigurationProperties);
             return this;
         }
@@ -87,8 +87,7 @@
          * The Properties for the javax.cache.spi.CachingProvider to create the
          * CacheManager.
          * 
-         * The option will be converted to a <code>java.util.Properties</code>
-         * type.
+         * The option will be converted to a <code>java.util.Map</code> type.
          * 
          * Group: common
          */
@@ -639,12 +638,12 @@
          * The Properties for the javax.cache.spi.CachingProvider to create the
          * CacheManager.
          * 
-         * The option is a: <code>java.util.Properties</code> type.
+         * The option is a: <code>java.util.Map</code> type.
          * 
          * Group: common
          */
         default JCacheEndpointProducerBuilder cacheConfigurationProperties(
-                Properties cacheConfigurationProperties) {
+                Map cacheConfigurationProperties) {
             doSetProperty("cacheConfigurationProperties", cacheConfigurationProperties);
             return this;
         }
@@ -652,8 +651,7 @@
          * The Properties for the javax.cache.spi.CachingProvider to create the
          * CacheManager.
          * 
-         * The option will be converted to a <code>java.util.Properties</code>
-         * type.
+         * The option will be converted to a <code>java.util.Map</code> type.
          * 
          * Group: common
          */
@@ -1062,12 +1060,12 @@
          * The Properties for the javax.cache.spi.CachingProvider to create the
          * CacheManager.
          * 
-         * The option is a: <code>java.util.Properties</code> type.
+         * The option is a: <code>java.util.Map</code> type.
          * 
          * Group: common
          */
         default JCacheEndpointBuilder cacheConfigurationProperties(
-                Properties cacheConfigurationProperties) {
+                Map cacheConfigurationProperties) {
             doSetProperty("cacheConfigurationProperties", cacheConfigurationProperties);
             return this;
         }
@@ -1075,8 +1073,7 @@
          * The Properties for the javax.cache.spi.CachingProvider to create the
          * CacheManager.
          * 
-         * The option will be converted to a <code>java.util.Properties</code>
-         * type.
+         * The option will be converted to a <code>java.util.Map</code> type.
          * 
          * Group: common
          */
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
index 991e6ab..7b5e8ea 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/BaseMainSupport.java
@@ -21,7 +21,6 @@
 import java.io.InputStream;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
-import java.util.Iterator;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Locale;
@@ -122,15 +121,13 @@
     }
 
     protected static boolean setPropertiesOnTarget(CamelContext context, Object target, Map<String, Object> properties,
-                                                   String optionKey, String optionPrefix, boolean failIfNotSet, boolean ignoreCase,
+                                                   String optionPrefix, boolean failIfNotSet, boolean ignoreCase,
                                                    Map<String, String> autoConfiguredProperties) throws Exception {
         ObjectHelper.notNull(context, "context");
         ObjectHelper.notNull(target, "target");
         ObjectHelper.notNull(properties, "properties");
 
         boolean rc = false;
-        Iterator it = properties.entrySet().iterator();
-
         PropertyConfigurer configurer = null;
         if (target instanceof Component) {
             // the component needs to be initialized to have the configurer ready
@@ -138,41 +135,47 @@
             configurer = ((Component) target).getComponentPropertyConfigurer();
         }
 
-        while (it.hasNext()) {
-            Map.Entry<String, Object> entry = (Map.Entry) it.next();
-            String name = entry.getKey();
-            Object value = entry.getValue();
-            String stringValue = value != null ? value.toString() : null;
-            String key = name;
-            if (optionPrefix != null && optionKey != null) {
-                key = optionPrefix + optionKey;
-            } else if (optionPrefix != null) {
-                key = optionPrefix + name;
+        try {
+            // keep a reference of the original keys
+            Map<String, Object> backup = new LinkedHashMap<>(properties);
+
+            rc = PropertyBindingSupport.build()
+                .withMandatory(failIfNotSet)
+                .withRemoveParameters(true)
+                .withConfigurer(configurer)
+                .withIgnoreCase(ignoreCase)
+                .bind(context, target, properties);
+
+            for (Map.Entry<String, Object> entry: backup.entrySet()) {
+                if (entry.getValue() != null && !properties.containsKey(entry.getKey())) {
+                    String prefix = optionPrefix;
+                    if (prefix != null && !prefix.endsWith(".")) {
+                        prefix = "." + prefix;
+                    }
+
+                    LOG.debug("Configured property: {}{}={} on bean: {}", prefix, entry.getKey(), entry.getValue(), target);
+                    autoConfiguredProperties.put(prefix + entry.getKey(), entry.getValue().toString());
+                }
+            }
+        } catch (PropertyBindingException e) {
+            String key = e.getOptionKey();
+            if (key == null) {
+                String prefix = e.getOptionPrefix();
+                if (prefix != null && !prefix.endsWith(".")) {
+                    prefix = "." + prefix;
+                }
+
+                key = prefix != null
+                    ? prefix + "." + e.getPropertyName()
+                    : e.getPropertyName();
             }
 
-            LOG.debug("Configuring property: {}={} on bean: {}", key, stringValue, target);
-            try {
-                boolean hit;
-                if (failIfNotSet) {
-                    PropertyBindingSupport.build().withMandatory(true).withConfigurer(configurer).withIgnoreCase(ignoreCase).bind(context, target, name, stringValue);
-                    hit = true;
-                } else {
-                    hit = PropertyBindingSupport.build().withConfigurer(configurer).withIgnoreCase(true).bind(context, target, name, stringValue);
-                }
-                if (hit) {
-                    it.remove();
-                    rc = true;
-                    LOG.debug("Configured property: {}={} on bean: {}", key, stringValue, target);
-                    autoConfiguredProperties.put(key, stringValue);
-                }
-            } catch (PropertyBindingException e) {
-                if (failIfNotSet) {
-                    // enrich the error with more precise details with option prefix and key
-                    throw new PropertyBindingException(e.getTarget(), e.getPropertyName(), e.getValue(), optionPrefix, optionKey, e.getCause());
-                } else {
-                    LOG.debug("Error configuring property (" + key + ") with name: " + name + ") on bean: " + target
-                            + " with value: " + stringValue + ". This exception is ignored as failIfNotSet=false.", e);
-                }
+            if (failIfNotSet) {
+                // enrich the error with more precise details with option prefix and key
+                throw new PropertyBindingException(e.getTarget(), e.getPropertyName(), e.getValue(), optionPrefix, key, e.getCause());
+            } else {
+                LOG.debug("Error configuring property (" + key + ") with name: " + e.getPropertyName() + ") on bean: " + target
+                    + " with value: " + e.getValue() + ". This exception is ignored as failIfNotSet=false.", e);
             }
         }
 
@@ -707,7 +710,7 @@
         }
         if (!contextProperties.isEmpty()) {
             LOG.debug("Auto-configuring CamelContext from loaded properties: {}", contextProperties.size());
-            setPropertiesOnTarget(camelContext, camelContext, contextProperties, null, "camel.context.",
+            setPropertiesOnTarget(camelContext, camelContext, contextProperties, "camel.context.",
                     mainConfigurationProperties.isAutoConfigurationFailFast(), true, autoConfiguredProperties);
         }
         if (!hystrixProperties.isEmpty()) {
@@ -718,7 +721,7 @@
                 hystrix = new HystrixConfigurationDefinition();
                 model.setHystrixConfiguration(hystrix);
             }
-            setPropertiesOnTarget(camelContext, hystrix, hystrixProperties, null, "camel.hystrix.",
+            setPropertiesOnTarget(camelContext, hystrix, hystrixProperties, "camel.hystrix.",
                     mainConfigurationProperties.isAutoConfigurationFailFast(), true, autoConfiguredProperties);
         }
         if (!resilience4jProperties.isEmpty()) {
@@ -729,7 +732,7 @@
                 resilience4j = new Resilience4jConfigurationDefinition();
                 model.setResilience4jConfiguration(resilience4j);
             }
-            setPropertiesOnTarget(camelContext, resilience4j, resilience4jProperties, null, "camel.resilience4j.",
+            setPropertiesOnTarget(camelContext, resilience4j, resilience4jProperties, "camel.resilience4j.",
                     mainConfigurationProperties.isAutoConfigurationFailFast(), true, autoConfiguredProperties);
         }
         if (!restProperties.isEmpty()) {
@@ -740,7 +743,7 @@
                 rest = new RestConfiguration();
                 model.setRestConfiguration(rest);
             }
-            setPropertiesOnTarget(camelContext, rest, restProperties, null, "camel.rest.",
+            setPropertiesOnTarget(camelContext, rest, restProperties, "camel.rest.",
                     mainConfigurationProperties.isAutoConfigurationFailFast(), true, autoConfiguredProperties);
         }
 
@@ -799,9 +802,8 @@
 
         if (!properties.isEmpty()) {
             LOG.debug("Auto-configuring properties component from loaded properties: {}", properties.size());
-            setPropertiesOnTarget(camelContext, camelContext.getPropertiesComponent(), properties, null,
-                    "camel.component.properties.", mainConfigurationProperties.isAutoConfigurationFailFast(),
-                    true, autoConfiguredProperties);
+            setPropertiesOnTarget(camelContext, camelContext.getPropertiesComponent(), properties, "camel.component.properties.",
+                    mainConfigurationProperties.isAutoConfigurationFailFast(), true, autoConfiguredProperties);
         }
 
         // log which options was not set
@@ -838,7 +840,7 @@
 
         if (!properties.isEmpty()) {
             LOG.debug("Auto-configuring main from loaded properties: {}", properties.size());
-            setPropertiesOnTarget(camelContext, config, properties, null, "camel.main.",
+            setPropertiesOnTarget(camelContext, config, properties, "camel.main.",
                     mainConfigurationProperties.isAutoConfigurationFailFast(), true, autoConfiguredProperties);
         }
 
@@ -923,11 +925,15 @@
             LOG.debug("Auto-configuring {} components/dataformat/languages from loaded properties: {}", properties.size(), total);
         }
 
-        for (PropertyOptionKey pok : properties.keySet()) {
-            Map<String, Object> values = properties.get(pok);
-            String optionKey = pok.getKey().substring(pok.getOptionPrefix().length());
-            setPropertiesOnTarget(camelContext, pok.getInstance(), values, optionKey, pok.getOptionPrefix(),
-                    mainConfigurationProperties.isAutoConfigurationFailFast(), true, autoConfiguredProperties);
+        for (Map.Entry<PropertyOptionKey, Map<String, Object>> entry: properties.entrySet()) {
+            setPropertiesOnTarget(
+                    camelContext,
+                    entry.getKey().getInstance(),
+                    entry.getValue(),
+                    entry.getKey().getOptionPrefix(),
+                    mainConfigurationProperties.isAutoConfigurationFailFast(),
+                    true,
+                    autoConfiguredProperties);
         }
 
         // log which options was not set
@@ -936,7 +942,7 @@
                 Map<String, Object> values = properties.get(pok);
                 values.forEach((k, v) -> {
                     String stringValue = v != null ? v.toString() : null;
-                    LOG.warn("Property ({}={}) not auto-configured with name: {} on bean: {} with value: {}", pok.getKey(), stringValue, k, pok.getInstance(), stringValue);
+                    LOG.warn("Property ({}={}) not auto-configured with name: {} on bean: {} with value: {}", pok.getOptionPrefix() +  "." + k, stringValue, k, pok.getInstance(), stringValue);
                 });
             }
         }
@@ -1010,19 +1016,12 @@
     }
 
     private static final class PropertyOptionKey {
-
-        private final String key;
         private final Object instance;
         private final String optionPrefix;
 
-        private PropertyOptionKey(String key, Object instance, String optionPrefix) {
-            this.key = key;
-            this.instance = instance;
-            this.optionPrefix = optionPrefix;
-        }
-
-        public String getKey() {
-            return key;
+        private PropertyOptionKey(Object instance, String optionPrefix) {
+            this.instance = ObjectHelper.notNull(instance, "instance");
+            this.optionPrefix = ObjectHelper.notNull(optionPrefix, "optionPrefix");
         }
 
         public Object getInstance() {
@@ -1038,16 +1037,17 @@
             if (this == o) {
                 return true;
             }
-            if (o == null || getClass() != o.getClass()) {
+            if (!(o instanceof PropertyOptionKey)) {
                 return false;
             }
-            PropertyOptionKey that = (PropertyOptionKey) o;
-            return key.equals(that.key) && instance.equals(that.instance);
+            PropertyOptionKey key = (PropertyOptionKey) o;
+            return Objects.equals(instance, key.instance)
+                && Objects.equals(optionPrefix, key.optionPrefix);
         }
 
         @Override
         public int hashCode() {
-            return Objects.hash(key, instance);
+            return Objects.hash(instance, optionPrefix);
         }
     }
 
@@ -1093,7 +1093,7 @@
 
             validateOptionAndValue(key, option, value);
 
-            PropertyOptionKey pok = new PropertyOptionKey(key, target, prefix);
+            PropertyOptionKey pok = new PropertyOptionKey(target, prefix);
             Map<String, Object> values = properties.computeIfAbsent(pok, k -> new LinkedHashMap<>());
 
             // we ignore case for property keys (so we should store them in canonical style
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/MainComponentConfigurationTest.java b/core/camel-main/src/test/java/org/apache/camel/main/MainComponentConfigurationTest.java
new file mode 100644
index 0000000..a2360ba
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/MainComponentConfigurationTest.java
@@ -0,0 +1,54 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main;
+
+import java.util.Properties;
+
+import org.apache.camel.main.support.MyDummyComponent;
+import org.junit.Assert;
+import org.junit.Test;
+
+public class MainComponentConfigurationTest extends Assert {
+    @Test
+    public void testComponentConfiguration() {
+        Properties properties = new Properties();
+        properties.setProperty("camel.component.dummy.configuration.log", "true");
+        properties.setProperty("camel.component.dummy.component-value", "component-value");
+        properties.setProperty("camel.component.dummy.configuration.nested.value", "nested-value");
+        properties.setProperty("camel.component.dummy.configuration", "#class:org.apache.camel.main.support.MyDummyConfiguration");
+
+        Main main = new Main();
+        try {
+            MyDummyComponent dummy = new MyDummyComponent(false);
+
+            main.bind("dummy", dummy);
+            main.setOverrideProperties(properties);
+            main.setDefaultPropertyPlaceholderLocation("false");
+            main.start();
+
+            assertEquals("component-value", dummy.getComponentValue());
+
+            assertNotNull(dummy.getConfiguration());
+            assertTrue(dummy.getConfiguration().isLog());
+            assertNotNull(dummy.getConfiguration().getNested());
+            assertEquals("nested-value", dummy.getConfiguration().getNested().getValue());
+        } finally {
+            main.stop();
+        }
+    }
+}
+
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyComponent.java b/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyComponent.java
new file mode 100644
index 0000000..9b3d73f
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyComponent.java
@@ -0,0 +1,67 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main.support;
+
+import java.util.Map;
+
+import org.apache.camel.Endpoint;
+import org.apache.camel.spi.PropertyConfigurer;
+import org.apache.camel.spi.annotations.Component;
+import org.apache.camel.support.DefaultComponent;
+
+@Component("dummy")
+public class MyDummyComponent extends DefaultComponent {
+    private MyDummyConfiguration configuration;
+    private boolean configurer;
+    private String componentValue;
+
+    public MyDummyComponent(boolean configurer) {
+        this.configurer = configurer;
+    }
+
+    public MyDummyConfiguration getConfiguration() {
+        return configuration;
+    }
+
+    public void setConfiguration(MyDummyConfiguration configuration) {
+        this.configuration = configuration;
+    }
+
+    // this method makes camel no able to find a suitable setter
+    public void setConfiguration(Object configuration) {
+        this.configuration = (MyDummyConfiguration)configuration;
+    }
+
+    public String getComponentValue() {
+        return componentValue;
+    }
+
+    public MyDummyComponent setComponentValue(String componentValue) {
+        this.componentValue = componentValue;
+        return this;
+    }
+
+    @Override
+    protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
+    public PropertyConfigurer getComponentPropertyConfigurer() {
+        return configurer ? new MyDummyComponentConfigurer() : null;
+    }
+}
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyComponentConfigurer.java b/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyComponentConfigurer.java
new file mode 100644
index 0000000..9751c7b
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyComponentConfigurer.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main.support;
+
+import org.apache.camel.CamelContext;
+import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.support.component.PropertyConfigurerSupport;
+
+public class MyDummyComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+    @Override
+    public boolean configure(CamelContext camelContext, Object component, String name, Object value, boolean ignoreCase) {
+        if (ignoreCase) {
+            return doConfigureIgnoreCase(camelContext, component, name, value);
+        } else {
+            return doConfigure(camelContext, component, name, value);
+        }
+    }
+
+    private static boolean doConfigure(CamelContext camelContext, Object component, String name, Object value) {
+        switch (name) {
+        case "configuration":
+            ((MyDummyComponent) component).setConfiguration(property(camelContext, MyDummyConfiguration.class, value));
+            return true;
+        default:
+            return false;
+        }
+    }
+
+    private static boolean doConfigureIgnoreCase(CamelContext camelContext, Object component, String name, Object value) {
+        switch (name.toLowerCase()) {
+        case "configuration":
+            ((MyDummyComponent) component).setConfiguration(property(camelContext, MyDummyConfiguration.class, value));
+            return true;
+        default:
+            return false;
+        }
+    }
+}
diff --git a/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyConfiguration.java b/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyConfiguration.java
new file mode 100644
index 0000000..153dadf
--- /dev/null
+++ b/core/camel-main/src/test/java/org/apache/camel/main/support/MyDummyConfiguration.java
@@ -0,0 +1,52 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.camel.main.support;
+
+public class MyDummyConfiguration {
+    private boolean log;
+    private NestedConfig nested;
+
+    public boolean isLog() {
+        return log;
+    }
+
+    public MyDummyConfiguration setLog(boolean log) {
+        this.log = log;
+        return this;
+    }
+
+    public NestedConfig getNested() {
+        return nested;
+    }
+
+    public void setNested(NestedConfig nested) {
+        this.nested = nested;
+    }
+
+    public static class NestedConfig {
+        private String value;
+
+        public String getValue() {
+            return value;
+        }
+
+        public NestedConfig setValue(String value) {
+            this.value = value;
+            return this;
+        }
+    }
+}
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
index 4d101c1..1c8205d 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/PropertyBindingSupport.java
@@ -19,6 +19,7 @@
 import java.lang.reflect.Constructor;
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.Comparator;
 import java.util.HashMap;
 import java.util.HashSet;
 import java.util.Iterator;
@@ -471,7 +472,9 @@
         org.apache.camel.util.ObjectHelper.notNull(camelContext, "camelContext");
         org.apache.camel.util.ObjectHelper.notNull(target, "target");
         org.apache.camel.util.ObjectHelper.notNull(properties, "properties");
-        boolean rc = false;
+
+        final String uOptionPrefix = ignoreCase && isNotEmpty(optionPrefix) ? optionPrefix.toUpperCase(Locale.US) : "";
+        final int size = properties.size();
 
         if (configurer instanceof GeneratedPropertyConfigurer) {
             GeneratedPropertyConfigurer gen = (GeneratedPropertyConfigurer) configurer;
@@ -480,12 +483,9 @@
                 Map.Entry<String, Object> entry = iter.next();
                 String key = entry.getKey();
                 Object value = entry.getValue();
-                boolean valid = true;
-                if (nesting) {
-                    // property configurer does not support nested names so skip if the name has a dot
-                    valid = key.indexOf('.') == -1;
-                }
-                if (valid) {
+
+                // property configurer does not support nested names so skip if the name has a dot
+                if (key.indexOf('.') != -1) {
                     try {
                         // GeneratedPropertyConfigurer works by invoking the methods directly but it does
                         // not resolve property placeholders eventually defined in the value before invoking
@@ -497,7 +497,6 @@
                         boolean hit = gen.configure(camelContext, target, key, value, ignoreCase);
                         if (removeParameter && hit) {
                             iter.remove();
-                            rc = true;
                         }
                     } catch (Exception e) {
                         throw new PropertyBindingException(target, key, value, e);
@@ -507,39 +506,44 @@
         }
 
         // must set reference parameters first before the other bindings
-        int size = properties.size();
         setReferenceProperties(camelContext, target, properties);
-        rc |= properties.size() != size;
 
-        String uOptionPrefix = "";
-        if (ignoreCase && isNotEmpty(optionPrefix)) {
-            uOptionPrefix = optionPrefix.toUpperCase(Locale.US);
-        }
+        // sort the keys by nesting level so when moving to the nest level all the
+        // propertis of the curent level are bound to the target. This allow the 
+        // properties binging engine to be indipendent to the order of properrties.
+        //
+        // As example:
+        //
+        //     configuration.my-property = myCustomValue
+        //     configuration = #class:my.custom.Config
+        //
+        // 'configuration.my-property' has lower precedence over 'configuration' as
+        // it is one level deep and will be set after all the properties of the current
+        // level are set which allow `my-property` to be set of the right instance.
+        properties.keySet().stream()
+            .sorted(Comparator.comparingInt(s -> StringHelper.countChar(s, '.')))
+            .forEach(key -> {
+                final Object value = properties.get(key);
 
-        for (Iterator<Map.Entry<String, Object>> iter = properties.entrySet().iterator(); iter.hasNext();) {
-            Map.Entry<String, Object> entry = iter.next();
-            String key = entry.getKey();
-            Object value = entry.getValue();
-
-            if (isNotEmpty(optionPrefix)) {
-                boolean match = key.startsWith(optionPrefix) || ignoreCase && key.toUpperCase(Locale.US).startsWith(uOptionPrefix);
-                if (!match) {
-                    continue;
+                if (isNotEmpty(optionPrefix)) {
+                    boolean match = key.startsWith(optionPrefix) || ignoreCase && key.toUpperCase(Locale.US).startsWith(uOptionPrefix);
+                    if (!match) {
+                        return;
+                    }
+                    key = key.substring(optionPrefix.length());
                 }
-                key = key.substring(optionPrefix.length());
-            }
 
-            boolean bound = bindProperty(camelContext, target, key, value, ignoreCase, nesting, deepNesting, fluentBuilder, allowPrivateSetter, reference, placeholder);
-            if (bound && removeParameter) {
-                iter.remove();
-                rc = true;
+                boolean bound = bindProperty(camelContext, target, key, value, ignoreCase, nesting, deepNesting, fluentBuilder, allowPrivateSetter, reference, placeholder);
+                if (bound && removeParameter) {
+                    properties.remove(key);
+                }
+                if (mandatory && !bound) {
+                    throw new PropertyBindingException(target, key, value);
+                }
             }
-            if (mandatory && !bound) {
-                throw new PropertyBindingException(target, key, value);
-            }
-        }
+        );
 
-        return rc;
+        return properties.size() != size;
     }
 
     private static boolean bindProperty(CamelContext camelContext, Object target, String name, Object value,
diff --git a/core/pom.xml b/core/pom.xml
index 9c25515..25db9fd 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -47,7 +47,6 @@
         <module>camel-core</module>
         <module>camel-endpointdsl</module>
         <module>camel-core-osgi</module>
-        <module>camel-core-osgi-activator</module>
         <module>camel-core-xml</module>
         <module>camel-cloud</module>
         <module>camel-main</module>
diff --git a/docs/components/modules/ROOT/nav.adoc b/docs/components/modules/ROOT/nav.adoc
index 8df3117..aab755b 100644
--- a/docs/components/modules/ROOT/nav.adoc
+++ b/docs/components/modules/ROOT/nav.adoc
@@ -76,7 +76,7 @@
 * xref:corda-component.adoc[Corda Component]
 * xref:couchbase-component.adoc[Couchbase Component]
 * xref:couchdb-component.adoc[CouchDB Component]
-* xref:crypto-cms-component.adoc[Crypto CMS Component]
+* xref:crypto-cms-component.adoc[Crypto CMS Component (deprecated)]
 * xref:crypto-component.adoc[Crypto (JCE) Component]
 * xref:crypto-dataformat.adoc[Crypto (Java Cryptographic Extension) DataFormat]
 * xref:pgp-dataformat.adoc[PGP DataFormat]
@@ -272,6 +272,7 @@
 * xref:openstack.adoc[Openstack Component]
 * xref:opentracing.adoc[OpenTracing Component]
 * xref:optaplanner-component.adoc[OptaPlanner Component]
+* xref:osgi-activator.adoc[OSGi Camel Routes Activator]
 * xref:paho-component.adoc[Paho Component]
 * xref:paxlogging-component.adoc[OSGi PAX Logging Component]
 * xref:pdf-component.adoc[PDF Component]
diff --git a/docs/components/modules/ROOT/pages/crypto-cms-component.adoc b/docs/components/modules/ROOT/pages/crypto-cms-component.adoc
index 589bd7a..28ad342 100644
--- a/docs/components/modules/ROOT/pages/crypto-cms-component.adoc
+++ b/docs/components/modules/ROOT/pages/crypto-cms-component.adoc
@@ -1,9 +1,12 @@
 [[crypto-cms-component]]
-= Crypto CMS Component
+= Crypto CMS Component (deprecated)
 :page-source: components/camel-crypto-cms/src/main/docs/crypto-cms-component.adoc
 
 *Since Camel 2.20*
 
+*Since Camel 2.20*
+
+
 // HEADER START
 *Only producer is supported*
 // HEADER END
@@ -432,4 +435,4 @@
         <to uri="crypto-cms:verify://testverify?keyStoreParameters=#keyStoreParameters1&amp;signedDataHeaderBase64=true" />
         <to uri="mock:result" />
     </route>    
-----
+----
\ No newline at end of file
diff --git a/docs/components/modules/ROOT/pages/index.adoc b/docs/components/modules/ROOT/pages/index.adoc
index 88df8c4..76d53d7 100644
--- a/docs/components/modules/ROOT/pages/index.adoc
+++ b/docs/components/modules/ROOT/pages/index.adoc
@@ -6,7 +6,7 @@
 == Components
 
 // components: START
-Number of Components: 306 in 244 JAR artifacts (0 deprecated)
+Number of Components: 306 in 244 JAR artifacts (1 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -136,7 +136,7 @@
 
 | xref:crypto-component.adoc[Crypto (JCE)] (camel-crypto) | 2.3 | The crypto component is used for signing and verifying exchanges using the Signature Service of the Java Cryptographic Extension (JCE).
 
-| xref:crypto-cms-component.adoc[Crypto CMS] (camel-crypto-cms) | 2.20 | The crypto cms component is used for encrypting data in CMS Enveloped Data format, decrypting CMS Enveloped Data, signing data in CMS Signed Data format, and verifying CMS Signed Data.
+| xref:crypto-cms-component.adoc[Crypto CMS] (camel-crypto-cms) | 2.20 | *deprecated* The crypto cms component is used for encrypting data in CMS Enveloped Data format, decrypting CMS Enveloped Data, signing data in CMS Signed Data format, and verifying CMS Signed Data.
 
 | xref:cxf-component.adoc[CXF] (camel-cxf) | 1.0 | The cxf component is used for SOAP WebServices using Apache CXF.
 
@@ -776,7 +776,7 @@
 == Miscellaneous Components
 
 // others: START
-Number of Miscellaneous Components: 39 in 39 JAR artifacts (0 deprecated)
+Number of Miscellaneous Components: 40 in 40 JAR artifacts (0 deprecated)
 
 [width="100%",cols="4,1,5",options="header"]
 |===
@@ -808,6 +808,8 @@
 
 | xref:opentracing.adoc[OpenTracing] (camel-opentracing) | 2.19 | Distributed tracing using OpenTracing
 
+| xref:osgi-activator.adoc[Osgi Activator] (camel-osgi-activator) |  | Camel OSGi Activator
+
 | xref:reactive-executor-vertx.adoc[Reactive Executor Vert.x] (camel-reactive-executor-vertx) | 3.0 | Reactive Executor for camel-core using Vert.x
 
 | xref:reactor.adoc[Reactor] (camel-reactor) | 2.20 | Reactor based back-end for Camel's reactive streams component
diff --git a/docs/components/modules/ROOT/pages/jcache-component.adoc b/docs/components/modules/ROOT/pages/jcache-component.adoc
index 92e87e0..fb5fe24 100644
--- a/docs/components/modules/ROOT/pages/jcache-component.adoc
+++ b/docs/components/modules/ROOT/pages/jcache-component.adoc
@@ -86,7 +86,7 @@
 ----
 
 
-The component supports 8 options, which are listed below.
+The component supports 9 options, which are listed below.
 
 
 
@@ -96,7 +96,8 @@
 | *camel.component.jcache.basic-property-binding* | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | Boolean
 | *camel.component.jcache.bridge-error-handler* | Allows for bridging the consumer to the Camel routing Error Handler, which mean any exceptions occurred while the consumer is trying to pickup incoming messages, or the likes, will now be processed as a message and handled by the routing Error Handler. By default the consumer will use the org.apache.camel.spi.ExceptionHandler to deal with exceptions, that will be logged at WARN or ERROR level and ignored. | false | Boolean
 | *camel.component.jcache.cache-configuration* | A Configuration for the Cache. The option is a javax.cache.configuration.Configuration type. |  | String
-| *camel.component.jcache.cache-configuration-properties* | The Properties for the javax.cache.spi.CachingProvider to create the CacheManager. The option is a java.util.Properties type. |  | String
+| *camel.component.jcache.cache-configuration-properties* | Properties to configure jcache |  | Map
+| *camel.component.jcache.cache-configuration-properties-ref* | References to an existing Properties or Map to lookup in the registry to use for configuring jcache. |  | String
 | *camel.component.jcache.caching-provider* | The fully qualified class name of the javax.cache.spi.CachingProvider |  | String
 | *camel.component.jcache.configuration-uri* | An implementation specific URI for the CacheManager |  | String
 | *camel.component.jcache.enabled* | Whether to enable auto configuration of the jcache component. This is enabled by default. |  | Boolean
@@ -113,7 +114,7 @@
 
 
 // component options: START
-The JCache component supports 7 options, which are listed below.
+The JCache component supports 8 options, which are listed below.
 
 
 
@@ -122,7 +123,8 @@
 | Name | Description | Default | Type
 | *cachingProvider* (common) | The fully qualified class name of the javax.cache.spi.CachingProvider |  | String
 | *cacheConfiguration* (common) | A Configuration for the Cache |  | Configuration
-| *cacheConfiguration Properties* (common) | The Properties for the javax.cache.spi.CachingProvider to create the CacheManager |  | Properties
+| *cacheConfiguration Properties* (common) | Properties to configure jcache |  | Map
+| *cacheConfiguration PropertiesRef* (common) | References to an existing Properties or Map to lookup in the registry to use for configuring jcache. |  | String
 | *configurationUri* (common) | An implementation specific URI for the CacheManager |  | String
 | *basicPropertyBinding* (advanced) | Whether the component should use basic property binding (Camel 2.x) or the newer property binding with additional capabilities | false | boolean
 | *lazyStartProducer* (producer) | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | boolean
diff --git a/docs/components/modules/ROOT/pages/osgi-activator.adoc b/docs/components/modules/ROOT/pages/osgi-activator.adoc
new file mode 100644
index 0000000..00438d2
--- /dev/null
+++ b/docs/components/modules/ROOT/pages/osgi-activator.adoc
@@ -0,0 +1,57 @@
+[[OsgiActivator]]
+= OSGi Camel Routes Activator
+:page-source: components/camel-osgi-activator/src/main/docs/osgi-activator.adoc
+
+*Since Camel 3.1*
+
+A small OSGi activator for starting an OSGi Apache Camel Project.
+
+The bundle starts a shared CamelContext and registers any RouteBuilder instances
+(discovered via the OSGi Service Registry), from any other bundles that gets installed.
+And when the bundles gets uninstalled then the routes are stopped and removed from the shared CamelContext.
+
+== Important
+
+This OSGi activator is a based prototype for quickly starting up an OSGi container with a single shared
+CamelContext and then being able to use OSGi dynamism to deploy and undeploy bundlers with Camel routes.
+
+Beware that this OSGi activator is a basic implementation and has limited support for dealing with errors
+when new routes are added which may clash with existing routes (route ids).
+
+Configuration of the CamelContext is also very limited.
+
+Therefore only use this for prototyping and experiments. This is NOT recommended for production usage.
+
+== Install bundle
+
+Register an Apache Camel RouteBuilder as an OSGi service.
+
+Using OSGi annotations:
+
+[source,java]
+----
+@Component(service = RouteBuilder.class)
+public class MyRouteBuilder extends RouteBuilder {
+    @Override
+    public void configure() throws Exception {
+        from("timer:test?fixedRate=true&period=1000")
+            .log("Hello");
+    }
+}
+----
+
+Or Manually:
+
+[source,java]
+----
+public void start(BundleContext context) throws Exception {
+  context.registerService(RouteBuilder.class, new MyRouteBuilder(), null);
+}
+----
+
+And it's automatically added or removed to the context from any bundle!
+
+[source,text]
+----
+Route: route1 started and consuming from: timer://test?fixedRate=true&period=1000
+----
diff --git a/docs/components/modules/ROOT/pages/quartz-component.adoc b/docs/components/modules/ROOT/pages/quartz-component.adoc
index 0f2bfa7..c881b41 100644
--- a/docs/components/modules/ROOT/pages/quartz-component.adoc
+++ b/docs/components/modules/ROOT/pages/quartz-component.adoc
@@ -49,7 +49,7 @@
 
 
 // component options: START
-The Quartz component supports 13 options, which are listed below.
+The Quartz component supports 14 options, which are listed below.
 
 
 
@@ -60,7 +60,8 @@
 | *startDelayedSeconds* (scheduler) | Seconds to wait before starting the quartz scheduler. |  | int
 | *prefixJobNameWith EndpointId* (consumer) | Whether to prefix the quartz job with the endpoint id. This option is default false. | false | boolean
 | *enableJmx* (consumer) | Whether to enable Quartz JMX which allows to manage the Quartz scheduler from JMX. This options is default true | true | boolean
-| *properties* (consumer) | Properties to configure the Quartz scheduler. |  | Properties
+| *propertiesRef* (consumer) | References to an existing Properties or Map to lookup in the registry to use for configuring quartz. |  | String
+| *properties* (consumer) | Properties to configure the Quartz scheduler. |  | Map
 | *propertiesFile* (consumer) | File name of the properties to load from the classpath |  | String
 | *prefixInstanceName* (consumer) | Whether to prefix the Quartz Scheduler instance name with the CamelContext name. This is enabled by default, to let each CamelContext use its own Quartz scheduler instance by default. You can set this option to false to reuse Quartz scheduler instances between multiple CamelContext's. | true | boolean
 | *interruptJobsOn Shutdown* (scheduler) | Whether to interrupt jobs on shutdown which forces the scheduler to shutdown quicker and attempt to interrupt any running jobs. If this is enabled then any running jobs can fail due to being interrupted. | false | boolean
@@ -139,7 +140,7 @@
 ----
 
 
-The component supports 14 options, which are listed below.
+The component supports 15 options, which are listed below.
 
 
 
@@ -155,8 +156,9 @@
 | *camel.component.quartz.lazy-start-producer* | Whether the producer should be started lazy (on the first message). By starting lazy you can use this to allow CamelContext and routes to startup in situations where a producer may otherwise fail during starting and cause the route to fail being started. By deferring this startup to be lazy then the startup failure can be handled during routing messages via Camel's routing error handlers. Beware that when the first message is processed then creating and starting the producer may take a little time and prolong the total processing time of the processing. | false | Boolean
 | *camel.component.quartz.prefix-instance-name* | Whether to prefix the Quartz Scheduler instance name with the CamelContext name. This is enabled by default, to let each CamelContext use its own Quartz scheduler instance by default. You can set this option to false to reuse Quartz scheduler instances between multiple CamelContext's. | true | Boolean
 | *camel.component.quartz.prefix-job-name-with-endpoint-id* | Whether to prefix the quartz job with the endpoint id. This option is default false. | false | Boolean
-| *camel.component.quartz.properties* | Properties to configure the Quartz scheduler. The option is a java.util.Properties type. |  | String
+| *camel.component.quartz.properties* | Properties to configure the Quartz scheduler. |  | Map
 | *camel.component.quartz.properties-file* | File name of the properties to load from the classpath |  | String
+| *camel.component.quartz.properties-ref* | References to an existing Properties or Map to lookup in the registry to use for configuring quartz. |  | String
 | *camel.component.quartz.scheduler* | To use the custom configured Quartz scheduler, instead of creating a new Scheduler. The option is a org.quartz.Scheduler type. |  | String
 | *camel.component.quartz.scheduler-factory* | To use the custom SchedulerFactory which is used to create the Scheduler. The option is a org.quartz.SchedulerFactory type. |  | String
 | *camel.component.quartz.start-delayed-seconds* | Seconds to wait before starting the quartz scheduler. |  | Integer
diff --git a/parent/pom.xml b/parent/pom.xml
index 700b2bd..109e96d 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -787,11 +787,6 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel</groupId>
-                <artifactId>camel-core-osgi-activator</artifactId>
-                <version>${project.version}</version>
-            </dependency>
-            <dependency>
-                <groupId>org.apache.camel</groupId>
                 <artifactId>camel-core-xml</artifactId>
                 <version>${project.version}</version>
             </dependency>
@@ -1890,6 +1885,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-osgi-activator</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-paho</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/platforms/spring-boot/components-starter/camel-jcache-starter/src/main/java/org/apache/camel/component/jcache/springboot/JCacheComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-jcache-starter/src/main/java/org/apache/camel/component/jcache/springboot/JCacheComponentConfiguration.java
index 51d281c..a8d3c53 100644
--- a/platforms/spring-boot/components-starter/camel-jcache-starter/src/main/java/org/apache/camel/component/jcache/springboot/JCacheComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-jcache-starter/src/main/java/org/apache/camel/component/jcache/springboot/JCacheComponentConfiguration.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.jcache.springboot;
 
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -47,10 +48,14 @@
      */
     private String cacheConfiguration;
     /**
-     * The Properties for the javax.cache.spi.CachingProvider to create the
-     * CacheManager. The option is a java.util.Properties type.
+     * Properties to configure jcache
      */
-    private String cacheConfigurationProperties;
+    private Map cacheConfigurationProperties;
+    /**
+     * References to an existing Properties or Map to lookup in the registry to
+     * use for configuring jcache.
+     */
+    private String cacheConfigurationPropertiesRef;
     /**
      * An implementation specific URI for the CacheManager
      */
@@ -97,15 +102,23 @@
         this.cacheConfiguration = cacheConfiguration;
     }
 
-    public String getCacheConfigurationProperties() {
+    public Map getCacheConfigurationProperties() {
         return cacheConfigurationProperties;
     }
 
-    public void setCacheConfigurationProperties(
-            String cacheConfigurationProperties) {
+    public void setCacheConfigurationProperties(Map cacheConfigurationProperties) {
         this.cacheConfigurationProperties = cacheConfigurationProperties;
     }
 
+    public String getCacheConfigurationPropertiesRef() {
+        return cacheConfigurationPropertiesRef;
+    }
+
+    public void setCacheConfigurationPropertiesRef(
+            String cacheConfigurationPropertiesRef) {
+        this.cacheConfigurationPropertiesRef = cacheConfigurationPropertiesRef;
+    }
+
     public String getConfigurationUri() {
         return configurationUri;
     }
diff --git a/platforms/spring-boot/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java b/platforms/spring-boot/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java
index 6dafec7..4c2bf0a 100644
--- a/platforms/spring-boot/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java
+++ b/platforms/spring-boot/components-starter/camel-quartz-starter/src/main/java/org/apache/camel/component/quartz/springboot/QuartzComponentConfiguration.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.component.quartz.springboot;
 
+import java.util.Map;
 import javax.annotation.Generated;
 import org.apache.camel.spring.boot.ComponentConfigurationPropertiesCommon;
 import org.springframework.boot.context.properties.ConfigurationProperties;
@@ -56,10 +57,14 @@
      */
     private Boolean enableJmx = true;
     /**
-     * Properties to configure the Quartz scheduler. The option is a
-     * java.util.Properties type.
+     * References to an existing Properties or Map to lookup in the registry to
+     * use for configuring quartz.
      */
-    private String properties;
+    private String propertiesRef;
+    /**
+     * Properties to configure the Quartz scheduler.
+     */
+    private Map properties;
     /**
      * File name of the properties to load from the classpath
      */
@@ -147,11 +152,19 @@
         this.enableJmx = enableJmx;
     }
 
-    public String getProperties() {
+    public String getPropertiesRef() {
+        return propertiesRef;
+    }
+
+    public void setPropertiesRef(String propertiesRef) {
+        this.propertiesRef = propertiesRef;
+    }
+
+    public Map getProperties() {
         return properties;
     }
 
-    public void setProperties(String properties) {
+    public void setProperties(Map properties) {
         this.properties = properties;
     }
 
diff --git a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
index b17c44c..2df5ffc 100644
--- a/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
+++ b/platforms/spring-boot/spring-boot-dm/camel-spring-boot-dependencies/pom.xml
@@ -2154,11 +2154,6 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
-        <artifactId>camel-core-osgi-activator</artifactId>
-        <version>${project.version}</version>
-      </dependency>
-      <dependency>
-        <groupId>org.apache.camel</groupId>
         <artifactId>camel-core-xml</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/tests/camel-itest-karaf/pom.xml b/tests/camel-itest-karaf/pom.xml
index a3b67ba..02c38e4 100644
--- a/tests/camel-itest-karaf/pom.xml
+++ b/tests/camel-itest-karaf/pom.xml
@@ -132,6 +132,11 @@
             <scope>test</scope>
         </dependency>
         <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-osgi-activator</artifactId>
+            <scope>test</scope>
+        </dependency>
+        <dependency>
             <groupId>org.apache.camel.karaf</groupId>
             <artifactId>apache-camel</artifactId>
             <version>${project.version}</version>
diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/main/BundleIT.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/activator/CamelOsgiActivatorTest.java
similarity index 74%
rename from tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/main/BundleIT.java
rename to tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/activator/CamelOsgiActivatorTest.java
index 429df96..5046c73 100644
--- a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/main/BundleIT.java
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/activator/CamelOsgiActivatorTest.java
@@ -14,12 +14,9 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.itest.karaf.main;
+package org.apache.camel.itest.karaf.activator;
 
 import java.io.IOException;
-import java.net.URISyntaxException;
-import java.nio.file.Files;
-import java.nio.file.Paths;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 
@@ -34,35 +31,26 @@
 import org.ops4j.pax.exam.junit.PaxExam;
 import org.ops4j.pax.exam.spi.reactors.ExamReactorStrategy;
 import org.ops4j.pax.exam.spi.reactors.PerClass;
-import org.ops4j.pax.tinybundles.core.TinyBundles;
 import org.osgi.framework.Bundle;
 import org.osgi.framework.BundleContext;
 import org.osgi.framework.ServiceRegistration;
 
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertTrue;
-import static org.ops4j.pax.exam.CoreOptions.junitBundles;
-import static org.ops4j.pax.exam.CoreOptions.streamBundle;
-import static org.ops4j.pax.exam.CoreOptions.options;
+import static org.ops4j.pax.exam.CoreOptions.*;
 
 @RunWith(PaxExam.class)
 @ExamReactorStrategy(PerClass.class)
-public class BundleIT {
+public class CamelOsgiActivatorTest {
     @Inject
     private BundleContext bc;
 
     @Configuration
-    public Option[] configuration() throws IOException, URISyntaxException, ClassNotFoundException {
+    public Option[] configuration() throws IOException {
         return options(
                 PaxExamOptions.KARAF.option(),
                 PaxExamOptions.CAMEL_CORE_OSGI.option(),
-                streamBundle(
-                    TinyBundles.bundle()
-                        .read(
-                            Files.newInputStream(
-                                Paths.get("target/test-bundles")
-                                    .resolve("camel-core-osgi-activator.jar")))
-                        .build()),
+                mavenBundle("org.apache.camel", "camel-osgi-activator").versionAsInProject(),
                 junitBundles());
     }
     
@@ -70,7 +58,7 @@
     public void testBundleLoaded() throws Exception {
         boolean hasCore = false;
         boolean hasOsgi = false;
-        boolean hasCamelCoreOsgiActivator = false;
+        boolean hasCamelOsgiActivator = false;
         for (Bundle b : bc.getBundles()) {
             if ("org.apache.camel.camel-core".equals(b.getSymbolicName())) {
                 hasCore = true;
@@ -81,14 +69,14 @@
                 assertEquals("Camel Core OSGi not activated", Bundle.ACTIVE, b.getState());
             }
             
-            if ("org.apache.camel.camel-core-osgi-activator".equals(b.getSymbolicName())) {
-                hasCamelCoreOsgiActivator = true;
-                assertEquals("Camel Core OSGi Activator not activated", Bundle.ACTIVE, b.getState());
+            if ("org.apache.camel.camel-osgi-activator".equals(b.getSymbolicName())) {
+                hasCamelOsgiActivator = true;
+                assertEquals("Camel OSGi Activator not activated", Bundle.ACTIVE, b.getState());
             }
         }
         assertTrue("Camel Core bundle not found", hasCore);
         assertTrue("Camel Core OSGi bundle not found", hasOsgi);
-        assertTrue("Camel Core OSGi Activator bundle not found", hasCamelCoreOsgiActivator);
+        assertTrue("Camel OSGi Activator bundle not found", hasCamelOsgiActivator);
     }
 
     @Test
diff --git a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/main/PaxExamOptions.java b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/activator/PaxExamOptions.java
similarity index 98%
rename from tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/main/PaxExamOptions.java
rename to tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/activator/PaxExamOptions.java
index 07b43f4..fa812ac 100644
--- a/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/main/PaxExamOptions.java
+++ b/tests/camel-itest-karaf/src/test/java/org/apache/camel/itest/karaf/activator/PaxExamOptions.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.itest.karaf.main;
+package org.apache.camel.itest.karaf.activator;
 
 import java.io.File;
 
diff --git a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
index 39fe0a8..99a5ca8 100644
--- a/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
+++ b/tooling/maven/camel-package-maven-plugin/src/main/java/org/apache/camel/maven/packaging/SpringBootStarterMojo.java
@@ -75,7 +75,7 @@
 public class SpringBootStarterMojo extends AbstractMojo {
 
     private static final String[] IGNORE_MODULES = {
-        /* OSGi -> */ "camel-blueprint", "camel-core-osgi", "camel-eventadmin", "camel-paxlogging",
+        /* OSGi -> */ "camel-blueprint", "camel-core-osgi", "camel-osgi-activator", "camel-eventadmin", "camel-paxlogging",
         /* extended core */ "camel-attachments",
         /* Java EE -> */ "camel-cdi",
         /* MicroProfile -> */ "camel-microprofile-config",
