diff --git a/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy b/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
index a9e82e9..fd2114e 100644
--- a/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
+++ b/camel-k-loader-groovy/src/main/groovy/org/apache/camel/k/loader/groovy/dsl/RestConfiguration.groovy
@@ -30,12 +30,6 @@
         callable.call()
     }
 
-    def configuration(String component, @DelegatesTo(RestConfigurationDefinition) Closure<?> callable) {
-        callable.resolveStrategy = Closure.DELEGATE_FIRST
-        callable.delegate = builder.restConfiguration(component)
-        callable.call()
-    }
-
     def path(String path, @DelegatesTo(RestVerbConfiguration) Closure<?> callable) {
         callable.resolveStrategy = Closure.DELEGATE_FIRST
         callable.delegate = new RestVerbConfiguration(builder, path)
diff --git a/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/dsl/IntegrationTest.groovy b/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/dsl/IntegrationTest.groovy
index 8a53b1e..409705e 100644
--- a/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/dsl/IntegrationTest.groovy
+++ b/camel-k-loader-groovy/src/test/groovy/org/apache/camel/k/loader/groovy/dsl/IntegrationTest.groovy
@@ -62,8 +62,6 @@
         then:
             context.restConfiguration.host == 'my-host'
             context.restConfiguration.port == 9192
-            context.getRestConfiguration('undertow', false).host == 'my-undertow-host'
-            context.getRestConfiguration('undertow', false).port == 9193
 
             context.restDefinitions.size() == 2
 
diff --git a/camel-k-loader-groovy/src/test/resources/routes-with-rest.groovy b/camel-k-loader-groovy/src/test/resources/routes-with-rest.groovy
index e3c6687..8ae6cdf 100644
--- a/camel-k-loader-groovy/src/test/resources/routes-with-rest.groovy
+++ b/camel-k-loader-groovy/src/test/resources/routes-with-rest.groovy
@@ -20,11 +20,6 @@
         port '9192'
     }
 
-    configuration('undertow') {
-        host 'my-undertow-host'
-        port '9193'
-    }
-
     path('/my/path') {
         get('/get') {
             consumes 'application/json'
diff --git a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
index 737b9db..e4261c4 100644
--- a/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
+++ b/camel-k-loader-kotlin/src/main/kotlin/org/apache/camel/k/loader/kotlin/dsl/RestConfiguration.kt
@@ -27,11 +27,6 @@
         delegate.block()
     }
 
-    fun configuration(component: String, block: RestConfigurationDefinition.() -> Unit) {
-        val delegate = builder.restConfiguration(component)
-        delegate.block()
-    }
-
     fun path(path: String, block: RestVerbConfiguration.() -> Unit) {
         RestVerbConfiguration(builder, path).block()
     }
diff --git a/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt b/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
index 71c8299..95c0da7 100644
--- a/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
+++ b/camel-k-loader-kotlin/src/test/kotlin/org/apache/camel/k/loader/kotlin/dsl/IntegrationTest.kt
@@ -33,11 +33,7 @@
 import org.apache.camel.support.DefaultHeaderFilterStrategy
 import org.assertj.core.api.Assertions.assertThat
 import org.assertj.core.api.Assertions.assertThatExceptionOfType
-import org.assertj.core.api.Assertions.assertThatThrownBy
 import org.junit.jupiter.api.Test
-import org.junit.jupiter.api.assertThrows
-import java.lang.IllegalArgumentException
-import java.lang.RuntimeException
 import javax.sql.DataSource
 
 class IntegrationTest {
@@ -50,8 +46,6 @@
 
         assertThat(context.restConfiguration.host).isEqualTo("my-host")
         assertThat(context.restConfiguration.port).isEqualTo(9192)
-        assertThat(context.getRestConfiguration("undertow", false).host).isEqualTo("my-undertow-host")
-        assertThat(context.getRestConfiguration("undertow", false).port).isEqualTo(9193)
         assertThat(context.adapt(ModelCamelContext::class.java).restDefinitions.size).isEqualTo(2)
 
         with(context.adapt(ModelCamelContext::class.java).restDefinitions.find { it.path == "/my/path" }) {
@@ -164,7 +158,7 @@
 
         try {
             assertThat(context.routes).hasSize(1)
-            assertThat(context.routes[0].routeContext.getOnException("my-on-exception")).isInstanceOf(FatalFallbackErrorHandler::class.java)
+            assertThat(context.routes[0].getOnException("my-on-exception")).isInstanceOf(FatalFallbackErrorHandler::class.java)
         } finally {
             context.stop()
         }
diff --git a/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts b/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
index 37f2828..d9dd70b 100644
--- a/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
+++ b/camel-k-loader-kotlin/src/test/resources/routes-with-rest.kts
@@ -20,11 +20,6 @@
         port = "9192"
     }
 
-    configuration("undertow") {
-        host = "my-undertow-host"
-        port = "9193"
-    }
-
     path("/my/path") {
         get("/get") {
             consumes("application/json")
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/Any23DataFormatMixIn.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/Any23DataFormatMixIn.java
new file mode 100644
index 0000000..75e1ab0
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/Any23DataFormatMixIn.java
@@ -0,0 +1,28 @@
+/*
+ * 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.k.loader.yaml.support;
+
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
+
+@YAMLMixIn(org.apache.camel.model.dataformat.Any23DataFormat.class)
+public abstract class Any23DataFormatMixIn {
+    @JsonIgnore
+    public abstract void setConfiguration(Map<String, String> configuration);
+}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ExpressionNodeMixIn.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ExpressionNodeMixIn.java
new file mode 100644
index 0000000..ffb2568
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ExpressionNodeMixIn.java
@@ -0,0 +1,28 @@
+/*
+ * 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.k.loader.yaml.support;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.Predicate;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
+
+@YAMLMixIn(org.apache.camel.model.ExpressionNode.class)
+public abstract class ExpressionNodeMixIn {
+    @JsonIgnore
+    private void setExpression(Predicate predicate) {
+    }
+}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java
new file mode 100644
index 0000000..16caa38
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/ProcessorDefinitionMixIn.java
@@ -0,0 +1,34 @@
+/*
+ * 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.k.loader.yaml.support;
+
+import java.util.function.Function;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.Exchange;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
+import org.apache.camel.model.Block;
+import org.apache.camel.model.OptionalIdentifiedDefinition;
+
+@YAMLMixIn(org.apache.camel.model.ProcessorDefinition.class)
+public abstract class ProcessorDefinitionMixIn<Type extends org.apache.camel.model.ProcessorDefinition<Type>>
+    extends OptionalIdentifiedDefinition<Type>
+    implements Block {
+
+    @JsonIgnore
+    public abstract <Result> Type setBody(Function<Exchange, Result> function);
+}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/XStreamDataFormatMixIn.java b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/XStreamDataFormatMixIn.java
new file mode 100644
index 0000000..750f2cc
--- /dev/null
+++ b/camel-k-loader-yaml/camel-k-loader-yaml-common/src/main/java/org/apache/camel/k/loader/yaml/support/XStreamDataFormatMixIn.java
@@ -0,0 +1,34 @@
+/*
+ * 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.k.loader.yaml.support;
+
+import java.util.Map;
+
+import com.fasterxml.jackson.annotation.JsonIgnore;
+import org.apache.camel.k.annotation.yaml.YAMLMixIn;
+
+@YAMLMixIn(org.apache.camel.model.dataformat.XStreamDataFormat.class)
+public abstract class XStreamDataFormatMixIn {
+    @JsonIgnore
+    public abstract void setConverters(Map<String, String> converters);
+    @JsonIgnore
+    public abstract void setAliases(Map<String, String> aliases);
+    @JsonIgnore
+    public abstract void setOmitFields(Map<String, String> omitFields);
+    @JsonIgnore
+    public abstract void setImplicitCollections(Map<String, String> implicitCollections);
+}
diff --git a/camel-k-loader-yaml/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java b/camel-k-loader-yaml/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
index 1448b70..ed865c3 100644
--- a/camel-k-loader-yaml/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
+++ b/camel-k-loader-yaml/camel-k-loader-yaml/src/main/java/org/apache/camel/k/loader/yaml/YamlSourceLoader.java
@@ -22,9 +22,7 @@
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
-import java.util.function.Function;
 
-import com.fasterxml.jackson.annotation.JsonIgnore;
 import com.fasterxml.jackson.annotation.JsonInclude;
 import com.fasterxml.jackson.databind.DeserializationFeature;
 import com.fasterxml.jackson.databind.MapperFeature;
@@ -34,7 +32,6 @@
 import com.fasterxml.jackson.dataformat.yaml.YAMLFactory;
 import com.fasterxml.jackson.dataformat.yaml.YAMLGenerator;
 import org.apache.camel.CamelContext;
-import org.apache.camel.Exchange;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.k.Runtime;
 import org.apache.camel.k.Source;
@@ -43,15 +40,12 @@
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.k.loader.yaml.parser.StartStepParser;
 import org.apache.camel.k.loader.yaml.parser.StepParser;
-import org.apache.camel.model.Block;
-import org.apache.camel.model.OptionalIdentifiedDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
 import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.rest.RestsDefinition;
 
-
 @Loader("yaml")
 public class YamlSourceLoader implements SourceLoader {
     static {
@@ -70,10 +64,9 @@
             .setSerializationInclusion(JsonInclude.Include.NON_EMPTY)
             .setPropertyNamingStrategy(PropertyNamingStrategy.KEBAB_CASE)
             .enable(MapperFeature.USE_GETTERS_AS_SETTERS)
+            .disable(MapperFeature.REQUIRE_SETTERS_FOR_GETTERS)
             .disable(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES)
             .enable(SerializationFeature.INDENT_OUTPUT);
-
-        mapper.addMixIn(ProcessorDefinition.class, ProcessorDefinitionMixIn.class);
     }
 
     @Override
@@ -104,7 +97,7 @@
                 final List<RouteDefinition> routes = new ArrayList<>();
                 final List<RestDefinition> rests = new ArrayList<>();
 
-                try {
+                try (is) {
                     for (Step step : mapper.readValue(is, Step[].class)) {
                         final StepParser.Context context = new StepParser.Context(camelContext, mapper, step.node);
                         final ProcessorDefinition<?> root = StartStepParser.invoke(context, step.id);
@@ -136,23 +129,8 @@
 
                         setRestCollection(definition);
                     }
-                } finally {
-                    is.close();
                 }
             }
         };
     }
-
-    /**
-     * ProcessorDefinition declares multiple methods for setBody and Jackson get confused
-     * about what method to use so to hide such fields from the deserialization process
-     * without having to change the original class, a MixIn is required.
-     */
-    public abstract static class ProcessorDefinitionMixIn<Type extends ProcessorDefinition<Type>>
-        extends OptionalIdentifiedDefinition<Type>
-        implements Block {
-
-        @JsonIgnore
-        public abstract <Result> Type setBody(Function<Exchange, Result> function);
-    }
 }
diff --git a/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java b/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
index 2586b84..b3f3578 100644
--- a/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
+++ b/camel-k-main/camel-k-runtime-main/src/main/java/org/apache/camel/k/main/ApplicationRuntime.java
@@ -16,14 +16,12 @@
  */
 package org.apache.camel.k.main;
 
-import java.util.Collection;
 import java.util.Collections;
 import java.util.Comparator;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Properties;
 import java.util.Set;
-import java.util.stream.Collectors;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ProducerTemplate;
@@ -88,23 +86,12 @@
 
     @Override
     public void setInitialProperties(Properties properties) {
-        this.main.setInitialProperties(properties);
+        this.main.getCamelContext().getPropertiesComponent().setInitialProperties(properties);
     }
 
     @Override
     public void setProperties(Properties properties) {
-        this.main.setOverrideProperties(properties);
-    }
-
-    @Override
-    public void setPropertiesLocations(Collection<String> locations) {
-        this.main.setPropertyPlaceholderLocations(
-            locations.stream()
-                .map(location -> location.startsWith("file:") ? location : "file:" + location)
-                .distinct()
-                .sorted()
-                .collect(Collectors.joining(","))
-        );
+        this.main.getCamelContext().getPropertiesComponent().setOverrideProperties(properties);
     }
 
     public void addListeners(Iterable<Runtime.Listener> listeners) {
@@ -143,12 +130,8 @@
 
     private final class MainListenerAdapter implements org.apache.camel.main.MainListener {
         @Override
-        public void beforeStart(BaseMainSupport main) {
-            invokeListeners(Phase.Starting);
-        }
-
-        @Override
         public void beforeConfigure(BaseMainSupport main) {
+            invokeListeners(Phase.ConfigureProperties);
             invokeListeners(Phase.ConfigureRoutes);
         }
 
@@ -158,6 +141,11 @@
         }
 
         @Override
+        public void beforeStart(BaseMainSupport main) {
+            invokeListeners(Phase.Starting);
+        }
+
+        @Override
         public void afterStart(BaseMainSupport main) {
             invokeListeners(Phase.Started);
         }
@@ -185,6 +173,11 @@
 
     private final class MainAdapter extends MainSupport {
         @Override
+        public CamelContext getCamelContext() {
+            return ApplicationRuntime.this.context;
+        }
+
+        @Override
         protected CamelContext createCamelContext() {
             return ApplicationRuntime.this.context;
         }
diff --git a/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml b/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml
index dc1090d..a86d9e1 100644
--- a/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml
+++ b/camel-k-main/camel-k-runtime-main/src/test/resources/routes-with-expression.xml
@@ -21,7 +21,7 @@
   <route>
     <from uri="timer:tick"/>
     <filter>
-      <simple>in.body == {{the.body}}</simple>
+      <simple>${in.body} == {{the.body}}</simple>
       <to uri="log:info"/>
     </filter>
   </route>
diff --git a/camel-k-quarkus/camel-k-quarkus-core/runtime/src/main/java/org/apache/camel/k/core/quarkus/RuntimeListenerAdapter.java b/camel-k-quarkus/camel-k-quarkus-core/runtime/src/main/java/org/apache/camel/k/core/quarkus/RuntimeListenerAdapter.java
index 4452a4c..3d31a22 100644
--- a/camel-k-quarkus/camel-k-quarkus-core/runtime/src/main/java/org/apache/camel/k/core/quarkus/RuntimeListenerAdapter.java
+++ b/camel-k-quarkus/camel-k-quarkus-core/runtime/src/main/java/org/apache/camel/k/core/quarkus/RuntimeListenerAdapter.java
@@ -17,11 +17,9 @@
 package org.apache.camel.k.core.quarkus;
 
 import java.util.ArrayList;
-import java.util.Collection;
 import java.util.Comparator;
 import java.util.List;
 import java.util.Properties;
-import java.util.stream.Collectors;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.RoutesBuilder;
@@ -46,12 +44,8 @@
     }
 
     @Override
-    public void beforeStart(BaseMainSupport main) {
-        invokeListeners(listeners, on(main), Runtime.Phase.Starting);
-    }
-
-    @Override
     public void beforeConfigure(BaseMainSupport main) {
+        invokeListeners(listeners, on(main), Runtime.Phase.ConfigureProperties);
         invokeListeners(listeners, on(main), Runtime.Phase.ConfigureRoutes);
     }
 
@@ -61,6 +55,11 @@
     }
 
     @Override
+    public void beforeStart(BaseMainSupport main) {
+        invokeListeners(listeners, on(main), Runtime.Phase.Starting);
+    }
+
+    @Override
     public void afterStart(BaseMainSupport main) {
         invokeListeners(listeners, on(main), Runtime.Phase.Started);
     }
@@ -114,23 +113,12 @@
 
             @Override
             public void setInitialProperties(Properties properties) {
-                main.setInitialProperties(properties);
+                main.getCamelContext().getPropertiesComponent().setInitialProperties(properties);
             }
 
             @Override
             public void setProperties(Properties properties) {
-                main.setOverrideProperties(properties);
-            }
-
-            @Override
-            public void setPropertiesLocations(Collection<String> locations) {
-                main.setPropertyPlaceholderLocations(
-                    locations.stream()
-                        .map(location -> location.startsWith("file:") ? location : "file:" + location)
-                        .distinct()
-                        .sorted()
-                        .collect(Collectors.joining(","))
-                );
+                main.getCamelContext().getPropertiesComponent().setOverrideProperties(properties);
             }
         };
     }
diff --git a/camel-k-quarkus/camel-k-quarkus-knative/deployment/pom.xml b/camel-k-quarkus/camel-k-quarkus-knative/deployment/pom.xml
index 33dd66d..3c1f96d 100644
--- a/camel-k-quarkus/camel-k-quarkus-knative/deployment/pom.xml
+++ b/camel-k-quarkus/camel-k-quarkus-knative/deployment/pom.xml
@@ -57,6 +57,10 @@
             <groupId>org.apache.camel.quarkus</groupId>
             <artifactId>camel-quarkus-core-cloud-deployment</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-http-common-deployment</artifactId>
+        </dependency>
 
         <dependency>
             <groupId>io.quarkus</groupId>
diff --git a/camel-k-quarkus/camel-k-quarkus-knative/runtime/pom.xml b/camel-k-quarkus/camel-k-quarkus-knative/runtime/pom.xml
index d89f3e3..6e2da3b 100644
--- a/camel-k-quarkus/camel-k-quarkus-knative/runtime/pom.xml
+++ b/camel-k-quarkus/camel-k-quarkus-knative/runtime/pom.xml
@@ -41,10 +41,6 @@
             <artifactId>camel-k-quarkus-core</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel.quarkus</groupId>
-            <artifactId>camel-quarkus-core-cloud</artifactId>
-        </dependency>
-        <dependency>
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-knative-api</artifactId>
         </dependency>
@@ -57,8 +53,8 @@
             <artifactId>camel-knative-http</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-http-common</artifactId>
+            <groupId>org.apache.camel.quarkus</groupId>
+            <artifactId>camel-quarkus-http-common</artifactId>
         </dependency>
         <dependency>
             <groupId>org.graalvm.nativeimage</groupId>
diff --git a/camel-k-quarkus/camel-k-quarkus-loader-yaml/deployment/src/main/java/org/apache/camel/k/loader/yaml/quarkus/deployment/DeploymentProcessor.java b/camel-k-quarkus/camel-k-quarkus-loader-yaml/deployment/src/main/java/org/apache/camel/k/loader/yaml/quarkus/deployment/DeploymentProcessor.java
index bfb999e..f62abb4 100644
--- a/camel-k-quarkus/camel-k-quarkus-loader-yaml/deployment/src/main/java/org/apache/camel/k/loader/yaml/quarkus/deployment/DeploymentProcessor.java
+++ b/camel-k-quarkus/camel-k-quarkus-loader-yaml/deployment/src/main/java/org/apache/camel/k/loader/yaml/quarkus/deployment/DeploymentProcessor.java
@@ -22,12 +22,15 @@
 import io.quarkus.deployment.annotations.BuildStep;
 import io.quarkus.deployment.builditem.CombinedIndexBuildItem;
 import io.quarkus.deployment.builditem.nativeimage.ReflectiveClassBuildItem;
-import org.apache.camel.k.loader.yaml.YamlSourceLoader;
 import org.apache.camel.k.loader.yaml.model.Node;
 import org.apache.camel.k.loader.yaml.model.Step;
 import org.apache.camel.k.loader.yaml.parser.HasDataFormat;
 import org.apache.camel.k.loader.yaml.parser.HasExpression;
 import org.apache.camel.k.loader.yaml.parser.StepParser;
+import org.apache.camel.k.loader.yaml.support.Any23DataFormatMixIn;
+import org.apache.camel.k.loader.yaml.support.ExpressionNodeMixIn;
+import org.apache.camel.k.loader.yaml.support.ProcessorDefinitionMixIn;
+import org.apache.camel.k.loader.yaml.support.XStreamDataFormatMixIn;
 import org.apache.camel.model.DataFormatDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
@@ -81,9 +84,10 @@
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, HasExpression.class));
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, false, HasDataFormat.class));
         reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, Node.class));
-        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, YamlSourceLoader.ProcessorDefinitionMixIn.class));
-
-
+        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, ProcessorDefinitionMixIn.class));
+        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, ExpressionNodeMixIn.class));
+        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, Any23DataFormatMixIn.class));
+        reflectiveClass.produce(new ReflectiveClassBuildItem(true, true, XStreamDataFormatMixIn.class));
     }
 
     private static Iterable<ClassInfo> getAllKnownImplementors(IndexView view, String name) {
diff --git a/camel-k-runtime-core/pom.xml b/camel-k-runtime-core/pom.xml
index f11052a..47b76fa 100644
--- a/camel-k-runtime-core/pom.xml
+++ b/camel-k-runtime-core/pom.xml
@@ -39,6 +39,10 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-engine</artifactId>
         </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-languages</artifactId>
+        </dependency>
 
         <!-- ****************************** -->
         <!--                                -->
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
index 517d1bd..cac8eef 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/Runtime.java
@@ -21,6 +21,7 @@
 import java.util.HashMap;
 import java.util.Map;
 import java.util.Properties;
+import java.util.stream.Collectors;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Ordered;
@@ -90,7 +91,15 @@
         throw new UnsupportedOperationException();
     }
 
-    void setPropertiesLocations(Collection<String> locations);
+    default void setPropertiesLocations(Collection<String> locations) {
+        getCamelContext().getPropertiesComponent().setLocation(
+            locations.stream()
+                .map(location -> location.startsWith("file:") ? location : "file:" + location)
+                .distinct()
+                .sorted()
+                .collect(Collectors.joining(","))
+        );
+    }
 
     default void setPropertiesLocations(String... locations) {
         setPropertiesLocations(Arrays.asList(locations));
@@ -106,6 +115,7 @@
 
     enum Phase {
         Starting,
+        ConfigureProperties,
         ConfigureContext,
         ConfigureRoutes,
         Started,
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesConfigurer.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesConfigurer.java
new file mode 100644
index 0000000..45247df
--- /dev/null
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesConfigurer.java
@@ -0,0 +1,79 @@
+/*
+ * 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.k.listener;
+
+import org.apache.camel.Ordered;
+import org.apache.camel.k.Constants;
+import org.apache.camel.k.Runtime;
+import org.apache.camel.k.support.KubernetesPropertiesFunction;
+import org.apache.camel.k.support.PropertiesSupport;
+
+public class PropertiesConfigurer extends AbstractPhaseListener {
+    public PropertiesConfigurer() {
+        super(Runtime.Phase.ConfigureProperties);
+    }
+
+    @Override
+    public int getOrder() {
+        return Ordered.HIGHEST;
+    }
+
+    @Override
+    protected void accept(Runtime runtime) {
+        runtime.setInitialProperties(
+            PropertiesSupport.loadApplicationProperties()
+        );
+        runtime.setPropertiesLocations(
+            PropertiesSupport.resolveUserPropertiesLocations()
+        );
+
+        //
+        // Register properties functions to resolve k8s secrets or config maps like:
+        //
+        // {{secret:name/key}}
+        // {{configmap:name/key}}
+        //
+
+        //
+        // ConfigMap
+        //
+        String cmPath = System.getProperty(
+            Constants.PROPERTY_CAMEL_K_MOUNT_PATH_CONFIGMAPS,
+            System.getenv(Constants.ENV_CAMEL_K_MOUNT_PATH_CONFIGMAPS)
+        );
+
+        if (cmPath != null) {
+            runtime.getCamelContext().getPropertiesComponent().addPropertiesFunction(
+                new KubernetesPropertiesFunction(cmPath, "configmap")
+            );
+        }
+
+        //
+        // Secret
+        //
+        String secretPath = System.getProperty(
+            Constants.PROPERTY_CAMEL_K_MOUNT_PATH_SECRETS,
+            System.getenv(Constants.ENV_CAMEL_K_MOUNT_PATH_SECRETS)
+        );
+
+        if (secretPath != null) {
+            runtime.getCamelContext().getPropertiesComponent().addPropertiesFunction(
+                new KubernetesPropertiesFunction(secretPath, "secret")
+            );
+        }
+    }
+}
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurer.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurer.java
deleted file mode 100644
index d16002a..0000000
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurer.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*
- * 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.k.listener;
-
-import org.apache.camel.k.Constants;
-import org.apache.camel.k.Runtime;
-import org.apache.camel.k.support.KubernetesPropertiesFunction;
-import org.apache.camel.spi.PropertiesComponent;
-
-public class PropertiesFunctionsConfigurer extends AbstractPhaseListener {
-    public PropertiesFunctionsConfigurer() {
-        super(Runtime.Phase.Starting);
-    }
-
-    @Override
-    protected void accept(Runtime runtime) {
-        //
-        // Register properties functions to resolve k8s secrets or config maps like:
-        //
-        // {{secret:name/key}}
-        // {{configmap:name/key}}
-        //
-        PropertiesComponent pc = runtime.getCamelContext().getPropertiesComponent();
-        if (pc instanceof org.apache.camel.component.properties.PropertiesComponent) {
-            //
-            // ConfigMap
-            //
-            String cmPath = System.getProperty(Constants.PROPERTY_CAMEL_K_MOUNT_PATH_CONFIGMAPS);
-            if (cmPath == null) {
-                cmPath = System.getenv(Constants.ENV_CAMEL_K_MOUNT_PATH_CONFIGMAPS);
-            }
-
-            ((org.apache.camel.component.properties.PropertiesComponent)pc).addFunction(
-                new KubernetesPropertiesFunction(cmPath, "configmap")
-            );
-
-            //
-            // Secret
-            //
-            String secretPath = System.getProperty(Constants.PROPERTY_CAMEL_K_MOUNT_PATH_SECRETS);
-            if (secretPath == null) {
-                secretPath = System.getenv(Constants.ENV_CAMEL_K_MOUNT_PATH_SECRETS);
-            }
-
-            ((org.apache.camel.component.properties.PropertiesComponent)pc).addFunction(
-                new KubernetesPropertiesFunction(secretPath, "secret")
-            );
-        }
-    }
-}
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RuntimeConfigurer.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RuntimeConfigurer.java
deleted file mode 100644
index f665f42..0000000
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/listener/RuntimeConfigurer.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * 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.k.listener;
-
-import org.apache.camel.Ordered;
-import org.apache.camel.k.Runtime;
-import org.apache.camel.k.support.PropertiesSupport;
-
-public class RuntimeConfigurer extends AbstractPhaseListener {
-    public RuntimeConfigurer() {
-        super(Runtime.Phase.Starting);
-    }
-
-    @Override
-    public int getOrder() {
-        return Ordered.HIGHEST;
-    }
-
-    @Override
-    protected void accept(Runtime runtime) {
-        runtime.setInitialProperties(
-            PropertiesSupport.loadApplicationProperties()
-        );
-        runtime.setPropertiesLocations(
-            PropertiesSupport.resolveUserPropertiesLocations()
-        );
-    }
-}
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/KubernetesPropertiesFunction.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/KubernetesPropertiesFunction.java
index f89073d..3c8443f 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/KubernetesPropertiesFunction.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/KubernetesPropertiesFunction.java
@@ -22,7 +22,7 @@
 import java.nio.file.Path;
 import java.nio.file.Paths;
 
-import org.apache.camel.component.properties.PropertiesFunction;
+import org.apache.camel.spi.PropertiesFunction;
 import org.apache.camel.util.StringHelper;
 
 public class KubernetesPropertiesFunction implements PropertiesFunction {
diff --git a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
index 04a58b1..369dbff 100644
--- a/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
+++ b/camel-k-runtime-core/src/main/java/org/apache/camel/k/support/RuntimeSupport.java
@@ -30,7 +30,6 @@
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.RoutesBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.builder.RouteBuilderLifecycleStrategy;
@@ -124,16 +123,12 @@
     public static ContextCustomizer lookupCustomizerByID(CamelContext context, String customizerId) {
         ContextCustomizer customizer = context.getRegistry().lookupByNameAndType(customizerId, ContextCustomizer.class);
         if (customizer == null) {
-            try {
-                customizer = context.adapt(ExtendedCamelContext.class)
-                    .getFactoryFinder(Constants.CONTEXT_CUSTOMIZER_RESOURCE_PATH)
-                    .newInstance(customizerId, ContextCustomizer.class)
-                    .orElseThrow(() -> new RuntimeException("Error creating instance for customizer: " + customizerId));
+            customizer = context.adapt(ExtendedCamelContext.class)
+                .getFactoryFinder(Constants.CONTEXT_CUSTOMIZER_RESOURCE_PATH)
+                .newInstance(customizerId, ContextCustomizer.class)
+                .orElseThrow(() -> new RuntimeException("Error creating instance for customizer: " + customizerId));
 
-                LOGGER.info("Found customizer {} with id {} from service definition", customizer, customizerId);
-            } catch (NoFactoryAvailableException e) {
-                throw new RuntimeException(e);
-            }
+            LOGGER.info("Found customizer {} with id {} from service definition", customizer, customizerId);
         } else {
             LOGGER.info("Found customizer {} with id {} from the registry", customizer, customizerId);
         }
@@ -203,18 +198,12 @@
     }
 
     public static SourceLoader lookupLoaderFromResource(CamelContext context, String loaderId) {
-        SourceLoader loader;
+        SourceLoader loader = context.adapt(ExtendedCamelContext.class)
+            .getFactoryFinder(Constants.SOURCE_LOADER_RESOURCE_PATH)
+            .newInstance(loaderId, SourceLoader.class)
+            .orElseThrow(() -> new RuntimeException("Error creating instance of loader: " + loaderId));
 
-        try {
-            loader = context.adapt(ExtendedCamelContext.class)
-                .getFactoryFinder(Constants.SOURCE_LOADER_RESOURCE_PATH)
-                .newInstance(loaderId, SourceLoader.class)
-                .orElseThrow(() -> new RuntimeException("Error creating instance of loader: " + loaderId));
-
-            LOGGER.info("Found loader {} for language {} from service definition", loader, loaderId);
-        } catch (NoFactoryAvailableException e) {
-            throw new IllegalArgumentException("Unable to find loader for: " + loaderId, e);
-        }
+        LOGGER.info("Found loader {} for language {} from service definition", loader, loaderId);
 
         return loader;
     }
diff --git a/camel-k-runtime-core/src/main/resources/META-INF/services/org.apache.camel.k.Runtime$Listener b/camel-k-runtime-core/src/main/resources/META-INF/services/org.apache.camel.k.Runtime$Listener
index d3a93c6..40ce062 100644
--- a/camel-k-runtime-core/src/main/resources/META-INF/services/org.apache.camel.k.Runtime$Listener
+++ b/camel-k-runtime-core/src/main/resources/META-INF/services/org.apache.camel.k.Runtime$Listener
@@ -15,8 +15,7 @@
 # limitations under the License.
 #
 
-org.apache.camel.k.listener.RuntimeConfigurer
 org.apache.camel.k.listener.ContextConfigurer
 org.apache.camel.k.listener.RoutesConfigurer
 org.apache.camel.k.listener.RoutesDumper
-org.apache.camel.k.listener.PropertiesFunctionsConfigurer
+org.apache.camel.k.listener.PropertiesConfigurer
diff --git a/camel-k-runtime-core/src/test/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurerTest.java b/camel-k-runtime-core/src/test/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurerTest.java
index d8223d3..0c59dc3 100644
--- a/camel-k-runtime-core/src/test/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurerTest.java
+++ b/camel-k-runtime-core/src/test/java/org/apache/camel/k/listener/PropertiesFunctionsConfigurerTest.java
@@ -16,9 +16,6 @@
  */
 package org.apache.camel.k.listener;
 
-import java.util.Properties;
-
-import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
 import org.apache.camel.k.Runtime;
 import org.junit.jupiter.api.Test;
@@ -28,20 +25,18 @@
 public class PropertiesFunctionsConfigurerTest {
     @Test
     public void testConfigMapFunction() {
-        Properties properties = new Properties();
-        properties.setProperty("my.property", "{{secret:my-secret/my-property}}");
 
-        CamelContext context = new DefaultCamelContext();
-        context.getPropertiesComponent().setInitialProperties(properties);
+        Runtime runtime = Runtime.on(new DefaultCamelContext());
+        runtime.setProperties("my.property", "{{secret:my-secret/my-property}}");
 
-        new PropertiesFunctionsConfigurer().accept(Runtime.on(context));
+        new PropertiesConfigurer().accept(runtime);
 
-        assertThat(context.resolvePropertyPlaceholders("{{secret:my-secret/my-property}}")).isEqualTo("my-secret-property");
-        assertThat(context.resolvePropertyPlaceholders("{{secret:none/my-property}}")).isEqualTo("none/my-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{secret:my-secret/my-property}}")).isEqualTo("my-secret-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{secret:none/my-property}}")).isEqualTo("none/my-property");
 
-        assertThat(context.resolvePropertyPlaceholders("{{configmap:my-cm/my-property}}")).isEqualTo("my-cm-property");
-        assertThat(context.resolvePropertyPlaceholders("{{configmap:none/my-property}}")).isEqualTo("none/my-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{configmap:my-cm/my-property}}")).isEqualTo("my-cm-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{configmap:none/my-property}}")).isEqualTo("none/my-property");
 
-        assertThat(context.resolvePropertyPlaceholders("{{my.property}}")).isEqualTo("my-secret-property");
+        assertThat(runtime.getCamelContext().resolvePropertyPlaceholders("{{my.property}}")).isEqualTo("my-secret-property");
     }
 }
diff --git a/camel-k-runtime-http/pom.xml b/camel-k-runtime-http/pom.xml
index a581d43..9f1112e 100644
--- a/camel-k-runtime-http/pom.xml
+++ b/camel-k-runtime-http/pom.xml
@@ -40,10 +40,15 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-engine</artifactId>
         </dependency>
+
+        <!--
+        Replace this with camel-platform-http-vertx when migrating to camel 3.3
+        -->
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-platform-http</artifactId>
         </dependency>
+
         <dependency>
             <groupId>org.apache.camel.k</groupId>
             <artifactId>camel-k-runtime-core</artifactId>
diff --git a/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/PlatformHttpServiceContextCustomizer.java b/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/PlatformHttpServiceContextCustomizer.java
index 634e06e..80b3025 100644
--- a/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/PlatformHttpServiceContextCustomizer.java
+++ b/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/PlatformHttpServiceContextCustomizer.java
@@ -40,6 +40,7 @@
     @Override
     public void apply(CamelContext camelContext) {
         endpoint = new PlatformHttpServiceEndpoint(camelContext, this);
+        endpoint.start();
 
         try {
             camelContext.addService(endpoint, true, true);
@@ -47,29 +48,24 @@
             throw new RuntimeException(e);
         }
 
-        // add the platform-http component
-        PlatformHttpComponent component = new PlatformHttpComponent() {
-            @Override
-            protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-                // remove matchOnUriPrefix as it will be fixed by camel 3.2 but will cause the context
-                // to fail as the property cannot be bound to the enpoint.
-                //
-                // TODO: remove once migrating to camel 3.2
-                parameters.remove("matchOnUriPrefix");
+        camelContext.addComponent(PlatformHttpConstants.PLATFORM_HTTP_COMPONENT_NAME,  new PlatformHttpComponentWrapper());
+    }
 
-                // the PlatformHttpComponent set this value but it is not handled which cause the
-                // context to fail as the property cannot be bound to the enpoint.
-                //
-                // TODO: fix upstream
-                parameters.remove("optionsEnabled");
+    public static final class PlatformHttpComponentWrapper extends PlatformHttpComponent {
+        public PlatformHttpComponentWrapper() {
+            setEngine(new RuntimePlatformHttpEngine());
+        }
 
-                // let the original component to create the endpoint
-                return super.createEndpoint(uri, remaining, parameters);
-            }
-        };
+        @Override
+        protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
+            // the PlatformHttpComponent set this value but it is not handled which cause the
+            // context to fail as the property cannot be bound to the enpoint.
+            //
+            // TODO: fix upstream
+            parameters.remove("optionsEnabled");
 
-        component.setEngine(new RuntimePlatformHttpEngine());
-
-        camelContext.addComponent(PlatformHttpConstants.PLATFORM_HTTP_COMPONENT_NAME, component);
+            // let the original component to create the endpoint
+            return super.createEndpoint(uri, remaining, parameters);
+        }
     }
 }
diff --git a/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/engine/RuntimePlatformHttpConsumer.java b/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/engine/RuntimePlatformHttpConsumer.java
index bb44864..f325a91 100644
--- a/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/engine/RuntimePlatformHttpConsumer.java
+++ b/camel-k-runtime-http/src/main/java/org/apache/camel/k/http/engine/RuntimePlatformHttpConsumer.java
@@ -71,7 +71,7 @@
     }
 
     @Override
-    protected void doStart() throws Exception {
+    protected void doInit() throws Exception {
         super.doStart();
 
         final PlatformHttpEndpoint endpoint = getEndpoint();
diff --git a/camel-k-runtime-webhook/src/main/java/org/apache/camel/k/webhook/WebhookRoutePolicyFactory.java b/camel-k-runtime-webhook/src/main/java/org/apache/camel/k/webhook/WebhookRoutePolicyFactory.java
index 8dfb3f9..d324b8b 100644
--- a/camel-k-runtime-webhook/src/main/java/org/apache/camel/k/webhook/WebhookRoutePolicyFactory.java
+++ b/camel-k-runtime-webhook/src/main/java/org/apache/camel/k/webhook/WebhookRoutePolicyFactory.java
@@ -45,10 +45,8 @@
         return null;
     }
 
-    private class WebhookRoutePolicy extends RoutePolicySupport {
-
+    private static class WebhookRoutePolicy extends RoutePolicySupport {
         private final CamelContext context;
-
         private final WebhookAction action;
 
         public WebhookRoutePolicy(CamelContext context, WebhookAction action) {
@@ -59,7 +57,7 @@
         @Override
         public void onInit(Route route) {
             super.onInit(route);
-            route.getRouteContext().setAutoStartup(false);
+            route.setAutoStartup(false);
 
             if (route.getEndpoint() instanceof WebhookEndpoint) {
                 WebhookEndpoint webhook = (WebhookEndpoint)route.getEndpoint();
diff --git a/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/DummyWebhookComponent.java b/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/DummyWebhookComponent.java
index 979b959..0d7f061 100644
--- a/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/DummyWebhookComponent.java
+++ b/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/DummyWebhookComponent.java
@@ -20,6 +20,7 @@
 import java.util.List;
 import java.util.Map;
 
+import org.apache.camel.Component;
 import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
@@ -52,14 +53,13 @@
 
     @Override
     protected Endpoint createEndpoint(String uri, String remaining, Map<String, Object> parameters) throws Exception {
-        return new DummyWebhookComponent.DummyWebhookEndpoint();
+        parameters.clear();
+        return new DummyWebhookComponent.DummyWebhookEndpoint(uri, this);
     }
 
     class DummyWebhookEndpoint extends DefaultEndpoint implements WebhookCapableEndpoint {
-
-        @Override
-        protected String createEndpointUri() {
-            return "dummy";
+        public DummyWebhookEndpoint(String endpointUri, Component component) {
+            super(endpointUri, component);
         }
 
         @Override
diff --git a/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/WebhookTest.java b/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/WebhookTest.java
index 5c65628..768e4f6 100644
--- a/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/WebhookTest.java
+++ b/camel-k-runtime-webhook/src/test/java/org/apache/camel/k/webhook/WebhookTest.java
@@ -19,7 +19,6 @@
 import java.util.Arrays;
 import java.util.HashMap;
 import java.util.Map;
-import java.util.Properties;
 import java.util.concurrent.CountDownLatch;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -37,7 +36,6 @@
 import org.apache.camel.spi.RoutePolicyFactory;
 import org.apache.camel.support.RoutePolicySupport;
 import org.junit.jupiter.api.Assertions;
-import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 import org.junit.jupiter.params.ParameterizedTest;
 import org.junit.jupiter.params.provider.EnumSource;
@@ -45,24 +43,14 @@
 import static org.assertj.core.api.Assertions.assertThat;
 
 public class WebhookTest {
-
-    private ApplicationRuntime runtime;
-
-    @BeforeEach
-    public void setUp() {
-        this.runtime = new ApplicationRuntime();
-        this.runtime.addListener(RoutesConfigurer.forRoutes("classpath:webhook.js"));
-        this.runtime.addListener(new ContextConfigurer());
-    }
-
     @ParameterizedTest
     @EnumSource(WebhookAction.class)
     public void testWebhookRegistration(WebhookAction action) throws Exception {
-        Properties properties = new Properties();
-        properties.setProperty("camel.component.webhook.configuration.webhook-auto-register", "false");
-        properties.setProperty("camel.k.customizer.webhook.enabled", "true");
-        properties.setProperty("camel.k.customizer.webhook.action", action.name().toLowerCase());
-        runtime.setProperties(properties);
+        ApplicationRuntime runtime = new ApplicationRuntime();
+        runtime.setProperties(
+            "camel.component.webhook.configuration.webhook-auto-register", "false",
+            "camel.k.customizer.webhook.enabled", "true",
+            "camel.k.customizer.webhook.action", action.name().toLowerCase());
 
         CountDownLatch operation = new CountDownLatch(1);
         Map<WebhookAction, AtomicInteger> registerCounters = new HashMap<>();
@@ -82,6 +70,8 @@
         );
 
         AtomicBoolean routeStarted = new AtomicBoolean();
+        runtime.addListener(new ContextConfigurer());
+        runtime.addListener(RoutesConfigurer.forRoutes("classpath:webhook.js"));
         runtime.getCamelContext().addRoutePolicyFactory(new RoutePolicyFactory() {
             @Override
             public RoutePolicy createRoutePolicy(CamelContext camelContext, String routeId, NamedNode route) {
@@ -124,11 +114,11 @@
     @ParameterizedTest()
     @EnumSource(WebhookAction.class)
     public void testRegistrationFailure(WebhookAction action) throws Exception {
-        Properties properties = new Properties();
-        properties.setProperty("camel.component.webhook.configuration.webhook-auto-register", "false");
-        properties.setProperty("camel.k.customizer.webhook.enabled", "true");
-        properties.setProperty("camel.k.customizer.webhook.action", action.name());
-        runtime.setProperties(properties);
+        ApplicationRuntime runtime = new ApplicationRuntime();
+        runtime.setProperties(
+            "camel.component.webhook.configuration.webhook-auto-register", "false",
+            "camel.k.customizer.webhook.enabled", "true",
+            "camel.k.customizer.webhook.action", action.name());
 
         runtime.getCamelContext().addComponent(
             "dummy",
@@ -141,19 +131,22 @@
             })
         );
 
+        runtime.addListener(new ContextConfigurer());
+        runtime.addListener(RoutesConfigurer.forRoutes("classpath:webhook.js"));
+
         Assertions.assertThrows(FailedToCreateRouteException.class, runtime::run);
     }
 
     @Test
     public void testAutoRegistrationNotDisabled() throws Exception {
-        Properties properties = new Properties();
-        properties.setProperty("camel.k.customizer.webhook.enabled", "true");
-        properties.setProperty("camel.k.customizer.webhook.action", WebhookAction.REGISTER.name());
-        runtime.setProperties(properties);
+        ApplicationRuntime runtime = new ApplicationRuntime();
+        runtime.setProperties(
+            "camel.k.customizer.webhook.enabled", "true",
+            "camel.k.customizer.webhook.action", WebhookAction.REGISTER.name());
 
-        runtime.getCamelContext().addComponent(
-            "dummy",
-            new DummyWebhookComponent());
+        runtime.getCamelContext().addComponent("dummy", new DummyWebhookComponent());
+        runtime.addListener(new ContextConfigurer());
+        runtime.addListener(RoutesConfigurer.forRoutes("classpath:webhook.js"));
 
         Assertions.assertThrows(FailedToCreateRouteException.class, runtime::run);
     }
diff --git a/camel-k-runtime-webhook/src/test/resources/webhook.js b/camel-k-runtime-webhook/src/test/resources/webhook.js
index da42d97..150113a 100644
--- a/camel-k-runtime-webhook/src/test/resources/webhook.js
+++ b/camel-k-runtime-webhook/src/test/resources/webhook.js
@@ -15,8 +15,7 @@
  * limitations under the License.
  */
 
-from('webhook:dummy')
+from('webhook:dummy:test?foo=bar')
     .to('log:info')
-
 from('timer:tick')
     .to('log:info')
diff --git a/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java b/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
index 99f76ed..fb57da7 100644
--- a/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
+++ b/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeComponentConfigurer.java
@@ -1,38 +1,63 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.component.knative;
 
+import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class KnativeComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+public class KnativeComponentConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
         KnativeComponent target = (KnativeComponent) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
-        case "cloudeventsspecversion":
-        case "cloudEventsSpecVersion": target.setCloudEventsSpecVersion(property(camelContext, java.lang.String.class, value)); return true;
-        case "configuration": target.setConfiguration(property(camelContext, org.apache.camel.component.knative.KnativeConfiguration.class, value)); return true;
-        case "environment": target.setEnvironment(property(camelContext, org.apache.camel.component.knative.spi.KnativeEnvironment.class, value)); return true;
-        case "environmentpath":
-        case "environmentPath": target.setEnvironmentPath(property(camelContext, java.lang.String.class, value)); return true;
-        case "transport": target.setTransport(property(camelContext, org.apache.camel.component.knative.spi.KnativeTransport.class, value)); return true;
-        case "transportoptions":
-        case "transportOptions": target.setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
+        case "basicpropertybinding":
+        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
         case "bridgeerrorhandler":
         case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
-        case "basicpropertybinding":
-        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
+        case "transport": target.setTransport(property(camelContext, org.apache.camel.component.knative.spi.KnativeTransport.class, value)); return true;
+        case "transportoptions":
+        case "transportOptions": target.setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
         default: return false;
         }
     }
 
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("basicPropertyBinding", boolean.class);
+        answer.put("bridgeErrorHandler", boolean.class);
+        answer.put("lazyStartProducer", boolean.class);
+        answer.put("transport", org.apache.camel.component.knative.spi.KnativeTransport.class);
+        answer.put("transportOptions", java.util.Map.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        KnativeComponent target = (KnativeComponent) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "basicpropertybinding":
+        case "basicPropertyBinding": return target.isBasicPropertyBinding();
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "transport": return target.getTransport();
+        case "transportoptions":
+        case "transportOptions": return target.getTransportOptions();
+        default: return null;
+        }
+    }
 }
 
diff --git a/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java b/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
index 8f25832..05a9100 100644
--- a/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
+++ b/camel-knative/camel-knative/src/generated/java/org/apache/camel/component/knative/KnativeEndpointConfigurer.java
@@ -1,20 +1,30 @@
 /* Generated by camel build tools - do NOT edit this file! */
 package org.apache.camel.component.knative;
 
+import java.util.Map;
+
 import org.apache.camel.CamelContext;
 import org.apache.camel.spi.GeneratedPropertyConfigurer;
+import org.apache.camel.spi.PropertyConfigurerGetter;
+import org.apache.camel.util.CaseInsensitiveMap;
 import org.apache.camel.support.component.PropertyConfigurerSupport;
 
 /**
  * Generated by camel build tools - do NOT edit this file!
  */
 @SuppressWarnings("unchecked")
-public class KnativeEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer {
+public class KnativeEndpointConfigurer extends PropertyConfigurerSupport implements GeneratedPropertyConfigurer, PropertyConfigurerGetter {
 
     @Override
     public boolean configure(CamelContext camelContext, Object obj, String name, Object value, boolean ignoreCase) {
         KnativeEndpoint target = (KnativeEndpoint) obj;
         switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "apiVersion": target.getConfiguration().setApiVersion(property(camelContext, java.lang.String.class, value)); return true;
+        case "basicpropertybinding":
+        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
         case "ceoverride":
         case "ceOverride": target.getConfiguration().setCeOverride(property(camelContext, java.util.Map.class, value)); return true;
         case "cloudeventsspecversion":
@@ -22,30 +32,81 @@
         case "cloudeventstype":
         case "cloudEventsType": target.getConfiguration().setCloudEventsType(property(camelContext, java.lang.String.class, value)); return true;
         case "environment": target.getConfiguration().setEnvironment(property(camelContext, org.apache.camel.component.knative.spi.KnativeEnvironment.class, value)); return true;
-        case "filters": target.getConfiguration().setFilters(property(camelContext, java.util.Map.class, value)); return true;
-        case "servicename":
-        case "serviceName": target.getConfiguration().setServiceName(property(camelContext, java.lang.String.class, value)); return true;
-        case "transportoptions":
-        case "transportOptions": target.getConfiguration().setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
-        case "bridgeerrorhandler":
-        case "bridgeErrorHandler": target.setBridgeErrorHandler(property(camelContext, boolean.class, value)); return true;
-        case "replywithcloudevent":
-        case "replyWithCloudEvent": target.getConfiguration().setReplyWithCloudEvent(property(camelContext, boolean.class, value)); return true;
         case "exceptionhandler":
         case "exceptionHandler": target.setExceptionHandler(property(camelContext, org.apache.camel.spi.ExceptionHandler.class, value)); return true;
         case "exchangepattern":
         case "exchangePattern": target.setExchangePattern(property(camelContext, org.apache.camel.ExchangePattern.class, value)); return true;
+        case "filters": target.getConfiguration().setFilters(property(camelContext, java.util.Map.class, value)); return true;
+        case "kind": target.getConfiguration().setKind(property(camelContext, java.lang.String.class, value)); return true;
         case "lazystartproducer":
         case "lazyStartProducer": target.setLazyStartProducer(property(camelContext, boolean.class, value)); return true;
-        case "apiversion":
-        case "apiVersion": target.getConfiguration().setApiVersion(property(camelContext, java.lang.String.class, value)); return true;
-        case "basicpropertybinding":
-        case "basicPropertyBinding": target.setBasicPropertyBinding(property(camelContext, boolean.class, value)); return true;
-        case "kind": target.getConfiguration().setKind(property(camelContext, java.lang.String.class, value)); return true;
+        case "replywithcloudevent":
+        case "replyWithCloudEvent": target.getConfiguration().setReplyWithCloudEvent(property(camelContext, boolean.class, value)); return true;
+        case "servicename":
+        case "serviceName": target.getConfiguration().setServiceName(property(camelContext, java.lang.String.class, value)); return true;
         case "synchronous": target.setSynchronous(property(camelContext, boolean.class, value)); return true;
+        case "transportoptions":
+        case "transportOptions": target.getConfiguration().setTransportOptions(property(camelContext, java.util.Map.class, value)); return true;
         default: return false;
         }
     }
 
+    @Override
+    public Map<String, Object> getAllOptions(Object target) {
+        Map<String, Object> answer = new CaseInsensitiveMap();
+        answer.put("apiVersion", java.lang.String.class);
+        answer.put("basicPropertyBinding", boolean.class);
+        answer.put("bridgeErrorHandler", boolean.class);
+        answer.put("ceOverride", java.util.Map.class);
+        answer.put("cloudEventsSpecVersion", java.lang.String.class);
+        answer.put("cloudEventsType", java.lang.String.class);
+        answer.put("environment", org.apache.camel.component.knative.spi.KnativeEnvironment.class);
+        answer.put("exceptionHandler", org.apache.camel.spi.ExceptionHandler.class);
+        answer.put("exchangePattern", org.apache.camel.ExchangePattern.class);
+        answer.put("filters", java.util.Map.class);
+        answer.put("kind", java.lang.String.class);
+        answer.put("lazyStartProducer", boolean.class);
+        answer.put("replyWithCloudEvent", boolean.class);
+        answer.put("serviceName", java.lang.String.class);
+        answer.put("synchronous", boolean.class);
+        answer.put("transportOptions", java.util.Map.class);
+        return answer;
+    }
+
+    @Override
+    public Object getOptionValue(Object obj, String name, boolean ignoreCase) {
+        KnativeEndpoint target = (KnativeEndpoint) obj;
+        switch (ignoreCase ? name.toLowerCase() : name) {
+        case "apiversion":
+        case "apiVersion": return target.getConfiguration().getApiVersion();
+        case "basicpropertybinding":
+        case "basicPropertyBinding": return target.isBasicPropertyBinding();
+        case "bridgeerrorhandler":
+        case "bridgeErrorHandler": return target.isBridgeErrorHandler();
+        case "ceoverride":
+        case "ceOverride": return target.getConfiguration().getCeOverride();
+        case "cloudeventsspecversion":
+        case "cloudEventsSpecVersion": return target.getConfiguration().getCloudEventsSpecVersion();
+        case "cloudeventstype":
+        case "cloudEventsType": return target.getConfiguration().getCloudEventsType();
+        case "environment": return target.getConfiguration().getEnvironment();
+        case "exceptionhandler":
+        case "exceptionHandler": return target.getExceptionHandler();
+        case "exchangepattern":
+        case "exchangePattern": return target.getExchangePattern();
+        case "filters": return target.getConfiguration().getFilters();
+        case "kind": return target.getConfiguration().getKind();
+        case "lazystartproducer":
+        case "lazyStartProducer": return target.isLazyStartProducer();
+        case "replywithcloudevent":
+        case "replyWithCloudEvent": return target.getConfiguration().isReplyWithCloudEvent();
+        case "servicename":
+        case "serviceName": return target.getConfiguration().getServiceName();
+        case "synchronous": return target.isSynchronous();
+        case "transportoptions":
+        case "transportOptions": return target.getConfiguration().getTransportOptions();
+        default: return null;
+        }
+    }
 }
 
diff --git a/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json b/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
index 98a5a45..9fc04b0 100644
--- a/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
+++ b/camel-knative/camel-knative/src/generated/resources/org/apache/camel/component/knative/knative.json
@@ -1,6 +1,7 @@
 {
   "component": {
     "kind": "component",
+    "name": "knative",
     "scheme": "knative",
     "extendsScheme": "",
     "syntax": "knative:type\/name",
@@ -19,10 +20,6 @@
     "version": "1.3.0-SNAPSHOT"
   },
   "componentProperties": {
-    "cloudEventsSpecVersion": { "kind": "property", "displayName": "Cloud Events Spec Version", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "Set the version of the cloudevents spec." },
-    "configuration": { "kind": "property", "displayName": "Configuration", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.KnativeConfiguration", "deprecated": false, "secret": false, "description": "Set the configuration." },
-    "environment": { "kind": "property", "displayName": "Environment", "group": "common", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeEnvironment", "deprecated": false, "secret": false, "description": "The environment" },
-    "environmentPath": { "kind": "property", "displayName": "Environment Path", "group": "common", "required": false, "type": "string", "javaType": "java.lang.String", "deprecated": false, "secret": false, "description": "The path ot the environment definition" },
     "transport": { "kind": "property", "displayName": "Transport", "group": "common", "label": "", "required": false, "type": "object", "javaType": "org.apache.camel.component.knative.spi.KnativeTransport", "deprecated": false, "secret": false, "defaultValue": "http", "description": "The transport implementation." },
     "transportOptions": { "kind": "property", "displayName": "Transport Options", "group": "common", "label": "", "required": false, "type": "object", "javaType": "java.util.Map<java.lang.String, java.lang.Object>", "deprecated": false, "secret": false, "description": "Transport options." },
     "bridgeErrorHandler": { "kind": "property", "displayName": "Bridge Error Handler", "group": "consumer", "label": "consumer", "required": false, "type": "boolean", "javaType": "boolean", "deprecated": false, "secret": false, "defaultValue": false, "description": "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." },
diff --git a/examples/camel-k-runtime-example-quarkus-groovy/data/application.properties b/examples/camel-k-runtime-example-quarkus-groovy/data/application.properties
index b5802ce..b3c7007 100644
--- a/examples/camel-k-runtime-example-quarkus-groovy/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-groovy/data/application.properties
@@ -16,6 +16,11 @@
 ## ---------------------------------------------------------------------------
 
 #
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
 # camel - main
 #
 camel.main.name = camel-q
diff --git a/examples/camel-k-runtime-example-quarkus-java/data/application.properties b/examples/camel-k-runtime-example-quarkus-java/data/application.properties
index b5802ce..b3c7007 100644
--- a/examples/camel-k-runtime-example-quarkus-java/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-java/data/application.properties
@@ -16,6 +16,11 @@
 ## ---------------------------------------------------------------------------
 
 #
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
 # camel - main
 #
 camel.main.name = camel-q
diff --git a/examples/camel-k-runtime-example-quarkus-js/data/application.properties b/examples/camel-k-runtime-example-quarkus-js/data/application.properties
index b5802ce..b3c7007 100644
--- a/examples/camel-k-runtime-example-quarkus-js/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-js/data/application.properties
@@ -16,6 +16,11 @@
 ## ---------------------------------------------------------------------------
 
 #
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
 # camel - main
 #
 camel.main.name = camel-q
diff --git a/examples/camel-k-runtime-example-quarkus-knative/data/application.properties b/examples/camel-k-runtime-example-quarkus-knative/data/application.properties
index 111c9b6..afc8456 100644
--- a/examples/camel-k-runtime-example-quarkus-knative/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-knative/data/application.properties
@@ -14,11 +14,16 @@
 ## See the License for the specific language governing permissions and
 ## limitations under the License.
 ## ---------------------------------------------------------------------------
+
+#
+# Quarkus
+#
+quarkus.banner.enabled = false
+
 #
 # camel
 #
 camel.context.name = camel-q
 camel.main.stream-caching-enabled = true
 camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-q
-#camel.main.autowire-component-properties = false
 
diff --git a/examples/camel-k-runtime-example-quarkus-xml/data/application.properties b/examples/camel-k-runtime-example-quarkus-xml/data/application.properties
index 48757ed..15f63b0 100644
--- a/examples/camel-k-runtime-example-quarkus-xml/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-xml/data/application.properties
@@ -16,6 +16,11 @@
 ## ---------------------------------------------------------------------------
 
 #
+# Quarkus
+#
+quarkus.banner.enabled = false
+
+#
 # camel - main
 #
 camel.main.name = camel-q
diff --git a/examples/camel-k-runtime-example-quarkus-yaml/data/application.properties b/examples/camel-k-runtime-example-quarkus-yaml/data/application.properties
index 404ae13..5d62cff 100644
--- a/examples/camel-k-runtime-example-quarkus-yaml/data/application.properties
+++ b/examples/camel-k-runtime-example-quarkus-yaml/data/application.properties
@@ -19,6 +19,7 @@
 # Quarkus
 #
 quarkus.http.port = 9988
+quarkus.banner.enabled = false
 
 #
 # camel - main
@@ -28,6 +29,11 @@
 camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-q
 
 #
+# Camel - rest
+#
+camel.context.rest-configuration.component = platform-http
+
+#
 # Integration
 #
 message = test-app
diff --git a/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml b/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml
index f634446..23c82e8 100644
--- a/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml
+++ b/examples/camel-k-runtime-example-quarkus-yaml/data/routes.yaml
@@ -19,7 +19,7 @@
     id: "flow-1"
     group: "routes"
     from:
-      uri: "platform-http://hello"
+      uri: "platform-http:/hello"
       steps:
         - convert-body:
             type: "java.lang.String"
@@ -31,11 +31,11 @@
     from:
       uri: "timer:tick"
       parameters:
-        period: "5s"
+        period: "5000"
       steps:
         - set-body:
             simple: "${exchangeProperty.CamelTimerName} -> ${exchangeProperty.CamelTimerCounter}"
         - to:
             uri: "log:tick"
         - log:
-            message: "${properties:message}"
\ No newline at end of file
+            message: "{{message}}"
\ No newline at end of file
diff --git a/examples/camel-k-runtime-example-yaml/pom.xml b/examples/camel-k-runtime-example-yaml/pom.xml
index f0525a7..4040593 100644
--- a/examples/camel-k-runtime-example-yaml/pom.xml
+++ b/examples/camel-k-runtime-example-yaml/pom.xml
@@ -37,12 +37,12 @@
             <artifactId>camel-k-loader-yaml</artifactId>
         </dependency>
         <dependency>
-            <groupId>org.apache.camel</groupId>
-            <artifactId>camel-log</artifactId>
+            <groupId>org.apache.camel.k</groupId>
+            <artifactId>camel-k-runtime-http</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-undertow</artifactId>
+            <artifactId>camel-log</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
diff --git a/examples/camel-k-runtime-example-yaml/src/main/resources/conf.d/user.properties b/examples/camel-k-runtime-example-yaml/src/main/resources/conf.d/user.properties
index 86bf56f..52e3c6f 100644
--- a/examples/camel-k-runtime-example-yaml/src/main/resources/conf.d/user.properties
+++ b/examples/camel-k-runtime-example-yaml/src/main/resources/conf.d/user.properties
@@ -16,23 +16,6 @@
 ## ---------------------------------------------------------------------------
 
 #
-# Logging
-#
-logging.level.org.apache.camel.k = DEBUG
-
-#
-# camel - main
-#
-camel.main.name = camel-k
-camel.main.stream-caching-enabled = true
-camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-k
-
-#
-# Camel REST
-#
-camel.context.rest-configuration.component = undertow
-
-#
 # Integration
 #
 message = test-user
\ No newline at end of file
diff --git a/examples/camel-k-runtime-example-yaml/src/main/resources/conf/application.properties b/examples/camel-k-runtime-example-yaml/src/main/resources/conf/application.properties
index 60eb8e9..fbb9d81 100644
--- a/examples/camel-k-runtime-example-yaml/src/main/resources/conf/application.properties
+++ b/examples/camel-k-runtime-example-yaml/src/main/resources/conf/application.properties
@@ -26,11 +26,16 @@
 camel.main.name = camel-k
 camel.main.stream-caching-enabled = true
 camel.main.stream-caching-spool-directory = ${java.io.tmpdir}/camel-k
+#
+# Camel - rest
+#
+camel.context.rest-configuration.component = platform-http
 
 #
-# Camel REST
+# camel-k - platform http
 #
-camel.context.rest-configuration.component = undertow
+camel.k.customizer.platform-http.enabled = true
+camel.k.customizer.platform-http.bind-port = 8080
 
 #
 # Integration
diff --git a/examples/camel-k-runtime-example-yaml/src/main/resources/routes.yaml b/examples/camel-k-runtime-example-yaml/src/main/resources/routes.yaml
index ce5f331..11244a0 100644
--- a/examples/camel-k-runtime-example-yaml/src/main/resources/routes.yaml
+++ b/examples/camel-k-runtime-example-yaml/src/main/resources/routes.yaml
@@ -112,11 +112,11 @@
     from:
       uri: "timer:tick"
       parameters:
-        period: "5s"
+        period: "5000"
       steps:
         - set-body:
             simple: "${exchangeProperty.CamelTimerName} -> ${exchangeProperty.CamelTimerCounter}"
         - to:
             uri: "log:tick"
         - log:
-            message: "${properties:message}"
\ No newline at end of file
+            message: "{{message}}"
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
index 57ae8b6..7b59509 100644
--- a/pom.xml
+++ b/pom.xml
@@ -39,8 +39,8 @@
         <maven.compiler.target>11</maven.compiler.target>
         <kotlin.compiler.target>1.8</kotlin.compiler.target>
 
-        <camel.version>3.1.0</camel.version>
-        <camel-quarkus.version>1.0.0-M6</camel-quarkus.version>
+        <camel.version>3.2.0</camel.version>
+        <camel-quarkus.version>1.0.0-M7</camel-quarkus.version>
         <catalog.version>${camel.version}</catalog.version>
         <junit.version>5.6.2</junit.version>
         <joor.version>0.9.13</joor.version>
@@ -62,24 +62,25 @@
         <semver4j.version>3.1.0</semver4j.version>
         <vertx.version>3.8.5</vertx.version>
         <graalvm.version>19.3.1</graalvm.version>
-        <quarkus.version>1.3.2.Final</quarkus.version>
+        <quarkus.version>1.4.1.Final</quarkus.version>
         <jandex.version>2.1.3.Final</jandex.version>
         <javapoet.version>1.11.1</javapoet.version>
         <rest-assured.version>4.3.0</rest-assured.version>
+
         <gmavenplus-plugin.version>1.9.0</gmavenplus-plugin.version>
         <maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
         <maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
-        <maven-remote-resources-plugin.version>1.6.0</maven-remote-resources-plugin.version>
+        <maven-remote-resources-plugin.version>1.7.0</maven-remote-resources-plugin.version>
         <maven-failsafe-plugin.version>3.0.0-M4</maven-failsafe-plugin.version>
         <versions-maven-plugin.version>2.7</versions-maven-plugin.version>
         <directory-maven-plugin.version>0.3.1</directory-maven-plugin.version>
         <exec-maven-plugin.version>1.6.0</exec-maven-plugin.version>
         <mycila-license.version>3.0</mycila-license.version>
-        <maven-checkstyle-plugin.version>3.1.0</maven-checkstyle-plugin.version>
+        <maven-checkstyle-plugin.version>3.1.1</maven-checkstyle-plugin.version>
         <maven-checkstyle.version>8.26</maven-checkstyle.version>
         <maven-gpg-plugin.version>1.6</maven-gpg-plugin.version>
         <maven-deploy-plugin.version>3.0.0-M1</maven-deploy-plugin.version>
-        <maven-javadoc-plugin.version>3.1.1</maven-javadoc-plugin.version>
+        <maven-javadoc-plugin.version>3.2.0</maven-javadoc-plugin.version>
         <maven-source-plugin.version>3.2.1</maven-source-plugin.version>
         <maven-assembly-plugin.version>3.2.0</maven-assembly-plugin.version>
         <jandex-maven-plugin.version>1.0.8</jandex-maven-plugin.version>
@@ -171,18 +172,6 @@
                     <groupId>org.apache.maven.plugins</groupId>
                     <artifactId>maven-remote-resources-plugin</artifactId>
                     <version>${maven-remote-resources-plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>process</goal>
-                            </goals>
-                            <configuration>
-                                <resourceBundles>
-                                    <resourceBundle>org.apache:apache-jar-resource-bundle:1.4</resourceBundle>
-                                </resourceBundles>
-                            </configuration>
-                        </execution>
-                    </executions>
                 </plugin>
                 <plugin>
                     <groupId>org.apache.maven.plugins</groupId>
@@ -650,68 +639,68 @@
             <id>release</id>
             <activation>
                 <property>
-                <name>release</name>
+                    <name>release</name>
                 </property>
             </activation>
             <build>
                 <plugins>
-                <!-- We want to deploy the artifact to a staging location for perusal -->
-                <plugin>
-                    <inherited>true</inherited>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-deploy-plugin</artifactId>
-                    <version>${maven-deploy-plugin.version}</version>
-                    <configuration>
-                        <updateReleaseInfo>true</updateReleaseInfo>
-                    </configuration>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-source-plugin</artifactId>
-                    <version>${maven-source-plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <id>attach-sources</id>
-                            <goals>
-                                <goal>jar</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-javadoc-plugin</artifactId>
-                    <version>${maven-javadoc-plugin.version}</version>
-                    <executions>
-                        <execution>
-                            <id>attach-javadocs</id>
-                            <goals>
-                                <goal>jar</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                    <configuration>
-                        <additionalOptions>${javadoc.opts}</additionalOptions>
-                        <source>8</source>
-                    </configuration>
-                </plugin>
-                <!-- We want to sign the artifact, the POM, and all attached artifacts -->
-                <plugin>
-                    <groupId>org.apache.maven.plugins</groupId>
-                    <artifactId>maven-gpg-plugin</artifactId>
-                    <version>${maven-gpg-plugin.version}</version>
-                    <configuration>
-                        <passphrase>${gpg.passphrase}</passphrase>
-                        <useAgent>${gpg.useagent}</useAgent>
-                    </configuration>
-                    <executions>
-                        <execution>
-                            <goals>
-                                <goal>sign</goal>
-                            </goals>
-                        </execution>
-                    </executions>
-                </plugin>
+                    <!-- We want to deploy the artifact to a staging location for perusal -->
+                    <plugin>
+                        <inherited>true</inherited>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-deploy-plugin</artifactId>
+                        <version>${maven-deploy-plugin.version}</version>
+                        <configuration>
+                            <updateReleaseInfo>true</updateReleaseInfo>
+                        </configuration>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-source-plugin</artifactId>
+                        <version>${maven-source-plugin.version}</version>
+                        <executions>
+                            <execution>
+                                <id>attach-sources</id>
+                                <goals>
+                                    <goal>jar</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-javadoc-plugin</artifactId>
+                        <version>${maven-javadoc-plugin.version}</version>
+                        <executions>
+                            <execution>
+                                <id>attach-javadocs</id>
+                                <goals>
+                                    <goal>jar</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                        <configuration>
+                            <additionalOptions>${javadoc.opts}</additionalOptions>
+                            <source>8</source>
+                        </configuration>
+                    </plugin>
+                    <!-- We want to sign the artifact, the POM, and all attached artifacts -->
+                    <plugin>
+                        <groupId>org.apache.maven.plugins</groupId>
+                        <artifactId>maven-gpg-plugin</artifactId>
+                        <version>${maven-gpg-plugin.version}</version>
+                        <configuration>
+                            <passphrase>${gpg.passphrase}</passphrase>
+                            <useAgent>${gpg.useagent}</useAgent>
+                        </configuration>
+                        <executions>
+                            <execution>
+                                <goals>
+                                    <goal>sign</goal>
+                                </goals>
+                            </execution>
+                        </executions>
+                    </plugin>
                 </plugins>
             </build>
         </profile>
diff --git a/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLMixIn.java b/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLMixIn.java
new file mode 100644
index 0000000..fe181b8
--- /dev/null
+++ b/tooling/camel-k-annotations/src/main/java/org/apache/camel/k/annotation/yaml/YAMLMixIn.java
@@ -0,0 +1,28 @@
+/*
+ * 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.k.annotation.yaml;
+
+import java.lang.annotation.ElementType;
+import java.lang.annotation.Retention;
+import java.lang.annotation.RetentionPolicy;
+import java.lang.annotation.Target;
+
+@Target(ElementType.TYPE)
+@Retention(RetentionPolicy.RUNTIME)
+public @interface YAMLMixIn {
+    Class<?>[] value() default {};
+}
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java
index 8a4c36e..f681f60 100644
--- a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlLoaderSupportClasses.java
@@ -94,6 +94,22 @@
         definitions(LOAD_BALANCE_DEFINITION_CLASS).forEach(
             (k, v) -> mb.addStatement("context.registerSubtypes(new com.fasterxml.jackson.databind.jsontype.NamedType($T.class, $S))", v, k)
         );
+        annotated(YAML_MIXIN_ANNOTATION).forEach(i -> {
+            final AnnotationInstance annotation = i.classAnnotation(YAML_MIXIN_ANNOTATION);
+            final AnnotationValue targets = annotation.value("value");
+
+            String name = i.toString();
+            if (i.nestingType() == ClassInfo.NestingType.INNER) {
+                name = i.enclosingClass().toString() + "." + i.simpleName();
+            }
+
+            if (targets != null) {
+                for (String target: targets.asStringArray()) {
+                    mb.addStatement("context.setMixInAnnotations($L.class, $L.class);", target, name);
+                }
+            }
+        });
+
 
         type.addMethod(mb.build());
 
diff --git a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupport.java b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupport.java
index 22bb25b..337e045 100644
--- a/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupport.java
+++ b/tooling/camel-k-maven-plugin/src/main/java/org/apache/camel/k/tooling/maven/GenerateYamlSupport.java
@@ -48,6 +48,7 @@
     public static final DotName DATAFORMAT_DEFINITION_CLASS = DotName.createSimple("org.apache.camel.model.DataFormatDefinition");
     public static final DotName XMLROOTELEMENT_ANNOTATION_CLASS = DotName.createSimple("javax.xml.bind.annotation.XmlRootElement");
     public static final DotName YAML_STEP_DEFINITION_ANNOTATION = DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLNodeDefinition");
+    public static final DotName YAML_MIXIN_ANNOTATION = DotName.createSimple("org.apache.camel.k.annotation.yaml.YAMLMixIn");
     public static final DotName LOAD_BALANCE_DEFINITION_CLASS = DotName.createSimple("org.apache.camel.model.LoadBalancerDefinition");
 
     @Parameter(defaultValue = "${project}", readonly = true, required = true)
