You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by gn...@apache.org on 2020/03/04 08:57:49 UTC

[camel] 04/32: [CAMEL-13440] Remove RouteContext

This is an automated email from the ASF dual-hosted git repository.

gnodet pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/camel.git

commit 028a6b8cdc86b39d3a11dfbf7f5aa4ab96b3cce0
Author: Guillaume Nodet <gn...@gmail.com>
AuthorDate: Fri Feb 21 10:29:28 2020 +0100

    [CAMEL-13440] Remove RouteContext
    
    # Conflicts:
    #	core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
---
 .../JtaTransactionErrorHandlerReifier.java         |   6 +-
 .../cdi/transaction/JtaTransactionPolicy.java      |  24 +-
 .../component/controlbus/ControlBusProducer.java   |  18 +-
 .../hystrix/processor/HystrixProcessorFactory.java |   6 +-
 .../hystrix/processor/HystrixReifier.java          |   8 +-
 .../processor/HystrixHierarchicalConfigTest.java   |  16 +-
 .../SpringHystrixRouteHierarchicalConfigTest.java  |  10 +-
 .../infinispan/policy/InfinispanRoutePolicy.java   |   2 +-
 .../component/jcache/policy/JCachePolicy.java      |  10 +-
 .../component/jms/tx/AbstractTransactionTest.java  |   4 +-
 .../camel/routepolicy/quartz/ScheduledJob.java     |   2 +-
 .../resilience4j/ResilienceProcessorFactory.java   |   6 +-
 .../component/resilience4j/ResilienceReifier.java  |   8 +-
 .../shiro/security/ShiroSecurityPolicy.java        |   8 +-
 .../SpringSecurityAuthorizationPolicy.java         |   6 +-
 .../camel/spring/spi/SpringTransactionPolicy.java  |  24 +-
 .../spring/spi/TransactionErrorHandlerBuilder.java |   7 -
 .../spring/spi/TransactionErrorHandlerReifier.java |   6 +-
 .../spring/config/CamelContextFactoryBeanTest.java |   4 +-
 .../spring/config/DummyErrorHandlerBuilder.java    |   6 +-
 .../camel/spring/config/ErrorHandlerTest.java      |   4 +-
 .../java/org/apache/camel/zipkin/ZipkinTracer.java |  14 +-
 .../src/main/java/org/apache/camel/Channel.java    |   6 +-
 .../src/main/java/org/apache/camel/Route.java      | 163 ++++++-
 .../org/apache/camel/RuntimeConfiguration.java     |   2 +-
 .../org/apache/camel/spi/LifecycleStrategy.java    |  26 +-
 .../camel/spi/ManagementObjectNameStrategy.java    |   2 +-
 .../apache/camel/spi/ManagementObjectStrategy.java |   2 +-
 .../src/main/java/org/apache/camel/spi/Policy.java |   9 +-
 .../org/apache/camel/spi/ProcessorFactory.java     |   9 +-
 .../java/org/apache/camel/spi/RouteContext.java    | 242 ----------
 .../main/java/org/apache/camel/spi/UnitOfWork.java |  22 +-
 .../camel/impl/engine/AbstractRouteContext.java    | 537 ---------------------
 .../apache/camel/impl/engine/BaseRouteService.java |  17 +-
 .../engine/DefaultAsyncProcessorAwaitManager.java  |  11 +-
 .../impl/engine/DefaultInflightRepository.java     |  11 +-
 .../camel/impl/engine/DefaultProcessorFactory.java |  14 +-
 .../org/apache/camel/impl/engine/DefaultRoute.java | 490 ++++++++++++++++++-
 .../camel/impl/engine/DefaultRouteError.java       |   4 +-
 .../engine/DefaultRuntimeEndpointRegistry.java     |  21 +-
 .../camel/impl/engine/DefaultShutdownStrategy.java |   8 +-
 .../camel/impl/engine/DefaultUnitOfWork.java       |  24 +-
 .../impl/engine/EventDrivenConsumerRoute.java      | 141 ------
 .../apache/camel/impl/engine/MDCUnitOfWork.java    |  16 +-
 .../impl/engine/SupervisingRouteController.java    |  23 +-
 .../camel/impl/engine/TypedProcessorFactory.java   |  14 +-
 .../apache/camel/impl/health/RouteHealthCheck.java |   6 +-
 .../camel/processor/CamelInternalProcessor.java    |  34 +-
 .../apache/camel/processor/MulticastProcessor.java |  36 +-
 .../camel/processor/RecipientListProcessor.java    |  20 +-
 .../org/apache/camel/processor/RoutingSlip.java    |  11 +-
 .../java/org/apache/camel/processor/Splitter.java  |   8 +-
 .../camel/processor/channel/DefaultChannel.java    |  40 +-
 .../DefaultExceptionPolicyStrategy.java            |   4 +-
 .../errorhandler/RedeliveryErrorHandler.java       |  17 +-
 .../impl/cloud/ServiceCallProcessorFactory.java    |   6 +-
 .../org/apache/camel/builder/NotifyBuilder.java    |   9 +-
 .../java/org/apache/camel/impl/DefaultModel.java   |   5 +-
 .../org/apache/camel/impl/DefaultRouteContext.java |  41 --
 .../java/org/apache/camel/impl/RouteService.java   |  10 +-
 .../camel/impl/cluster/ClusteredRoutePolicy.java   |   3 +-
 .../camel/reifier/AbstractPolicyReifier.java       |   6 +-
 .../org/apache/camel/reifier/AbstractReifier.java  |  13 +-
 .../org/apache/camel/reifier/AggregateReifier.java |   8 +-
 .../java/org/apache/camel/reifier/BeanReifier.java |   8 +-
 .../org/apache/camel/reifier/CatchReifier.java     |   6 +-
 .../org/apache/camel/reifier/ChoiceReifier.java    |   7 +-
 .../camel/reifier/CircuitBreakerReifier.java       |   6 +-
 .../apache/camel/reifier/ClaimCheckReifier.java    |   6 +-
 .../apache/camel/reifier/ConvertBodyReifier.java   |   7 +-
 .../org/apache/camel/reifier/DelayReifier.java     |   6 +-
 .../apache/camel/reifier/DynamicRouterReifier.java |   8 +-
 .../org/apache/camel/reifier/EnrichReifier.java    |   6 +-
 .../apache/camel/reifier/ExpressionReifier.java    |   6 +-
 .../org/apache/camel/reifier/FilterReifier.java    |   6 +-
 .../org/apache/camel/reifier/FinallyReifier.java   |   6 +-
 .../camel/reifier/IdempotentConsumerReifier.java   |   6 +-
 .../apache/camel/reifier/InterceptFromReifier.java |   6 +-
 .../org/apache/camel/reifier/InterceptReifier.java |  10 +-
 .../reifier/InterceptSendToEndpointReifier.java    |  12 +-
 .../apache/camel/reifier/LoadBalanceReifier.java   |   8 +-
 .../java/org/apache/camel/reifier/LogReifier.java  |  10 +-
 .../java/org/apache/camel/reifier/LoopReifier.java |   6 +-
 .../org/apache/camel/reifier/MarshalReifier.java   |   6 +-
 .../org/apache/camel/reifier/MulticastReifier.java |   6 +-
 .../apache/camel/reifier/OnCompletionReifier.java  |  12 +-
 .../apache/camel/reifier/OnExceptionReifier.java   |  16 +-
 .../apache/camel/reifier/OnFallbackReifier.java    |   6 +-
 .../org/apache/camel/reifier/OtherwiseReifier.java |   6 +-
 .../org/apache/camel/reifier/PipelineReifier.java  |   6 +-
 .../org/apache/camel/reifier/PolicyReifier.java    |  10 +-
 .../apache/camel/reifier/PollEnrichReifier.java    |   6 +-
 .../org/apache/camel/reifier/ProcessReifier.java   |   6 +-
 .../org/apache/camel/reifier/ProcessorReifier.java |  83 ++--
 .../apache/camel/reifier/RecipientListReifier.java |   6 +-
 .../apache/camel/reifier/RemoveHeaderReifier.java  |   6 +-
 .../apache/camel/reifier/RemoveHeadersReifier.java |   6 +-
 .../camel/reifier/RemovePropertiesReifier.java     |   6 +-
 .../camel/reifier/RemovePropertyReifier.java       |   6 +-
 .../apache/camel/reifier/ResequenceReifier.java    |  10 +-
 .../org/apache/camel/reifier/RollbackReifier.java  |   6 +-
 .../org/apache/camel/reifier/RouteReifier.java     | 238 ++++++---
 .../apache/camel/reifier/RoutingSlipReifier.java   |   6 +-
 .../java/org/apache/camel/reifier/SagaReifier.java |   7 +-
 .../org/apache/camel/reifier/SamplingReifier.java  |   6 +-
 .../org/apache/camel/reifier/ScriptReifier.java    |   6 +-
 .../java/org/apache/camel/reifier/SendReifier.java |   6 +-
 .../apache/camel/reifier/ServiceCallReifier.java   |   6 +-
 .../org/apache/camel/reifier/SetBodyReifier.java   |   6 +-
 .../camel/reifier/SetExchangePatternReifier.java   |   6 +-
 .../org/apache/camel/reifier/SetHeaderReifier.java |   6 +-
 .../apache/camel/reifier/SetPropertyReifier.java   |   6 +-
 .../java/org/apache/camel/reifier/SortReifier.java |   6 +-
 .../org/apache/camel/reifier/SplitReifier.java     |   6 +-
 .../java/org/apache/camel/reifier/StepReifier.java |   6 +-
 .../java/org/apache/camel/reifier/StopReifier.java |   6 +-
 .../org/apache/camel/reifier/ThreadsReifier.java   |   6 +-
 .../org/apache/camel/reifier/ThrottleReifier.java  |   6 +-
 .../camel/reifier/ThrowExceptionReifier.java       |   6 +-
 .../org/apache/camel/reifier/ToDynamicReifier.java |   6 +-
 .../apache/camel/reifier/TransactedReifier.java    |  10 +-
 .../org/apache/camel/reifier/TransformReifier.java |   6 +-
 .../java/org/apache/camel/reifier/TryReifier.java  |   6 +-
 .../org/apache/camel/reifier/UnmarshalReifier.java |   6 +-
 .../org/apache/camel/reifier/ValidateReifier.java  |   6 +-
 .../java/org/apache/camel/reifier/WhenReifier.java |   6 +-
 .../reifier/WhenSkipSendToEndpointReifier.java     |   6 +-
 .../org/apache/camel/reifier/WireTapReifier.java   |   8 +-
 .../errorhandler/DeadLetterChannelReifier.java     |   6 +-
 .../errorhandler/DefaultErrorHandlerReifier.java   |   6 +-
 .../errorhandler/ErrorHandlerRefReifier.java       |  16 +-
 .../reifier/errorhandler/ErrorHandlerReifier.java  |  42 +-
 .../errorhandler/NoErrorHandlerReifier.java        |   6 +-
 .../loadbalancer/CustomLoadBalancerReifier.java    |   6 +-
 .../loadbalancer/FailoverLoadBalancerReifier.java  |   6 +-
 .../reifier/loadbalancer/LoadBalancerReifier.java  |  16 +-
 .../loadbalancer/RandomLoadBalancerReifier.java    |   6 +-
 .../RoundRobinLoadBalancerReifier.java             |   6 +-
 .../loadbalancer/StickyLoadBalancerReifier.java    |   6 +-
 .../loadbalancer/TopicLoadBalancerReifier.java     |   6 +-
 .../loadbalancer/WeightedLoadBalancerReifier.java  |   6 +-
 .../camel/reifier/rest/RestBindingReifier.java     |   6 +-
 .../camel/builder/ContextErrorHandlerTest.java     |   6 +-
 .../org/apache/camel/builder/ErrorHandlerTest.java |  10 +-
 .../org/apache/camel/builder/RouteBuilderTest.java |  22 +-
 .../component/rest/FromRestGetPolicyTest.java      |   6 +-
 .../apache/camel/impl/DummyLifecycleStrategy.java  |  17 +-
 .../RoutePolicyAutoStartupCancelledOnInitTest.java |   2 +-
 .../apache/camel/issues/AdviceWithPolicyTest.java  |   6 +-
 .../camel/issues/AdviceWithTransactedTest.java     |   6 +-
 .../TransactedPropertyPlaceholderIssueTest.java    |   6 +-
 .../model/LoadRouteFromXmlWithPolicyTest.java      |   6 +-
 .../processor/CustomProcessorFactoryTest.java      |   6 +-
 .../camel/processor/DefaultErrorHandlerTest.java   |   4 +-
 .../DefinitionPolicyPerProcessorTest.java          |   6 +-
 .../camel/processor/PolicyPerProcessorTest.java    |   6 +-
 .../apache/camel/processor/PolicyPerRouteTest.java |   6 +-
 ...pientListContextScopedOnExceptionIssueTest.java |   4 +-
 .../apache/camel/processor/ResequencerTest.java    |   4 +-
 ...utingSlipContextScopedOnExceptionIssueTest.java |   4 +-
 .../camel/processor/SimpleMockTwoRoutesTest.java   |   6 +-
 .../camel/processor/StreamResequencerTest.java     |   4 +-
 .../processor/async/AsyncEndpointPolicyTest.java   |   6 +-
 .../errorhandler/ErrorHandlerSupportTest.java      |  18 +-
 .../DefaultExceptionPolicyStrategyTest.java        |   7 +-
 ...xtScopedOnExceptionCorrectRouteContextTest.java |   4 +-
 .../apache/camel/reifier/ProcessorReifierTest.java |   6 +-
 .../DefaultManagementObjectNameStrategy.java       |  15 +-
 .../DefaultManagementObjectStrategy.java           |  67 ++-
 .../management/JmxManagementLifecycleStrategy.java |  53 +-
 .../management/mbean/ManagedErrorHandler.java      |  16 +-
 .../camel/management/mbean/ManagedRoute.java       |  14 +-
 .../camel/management/ManagedCustomPolicyTest.java  |   6 +-
 .../org/apache/camel/support/ExchangeHelper.java   |  25 +-
 .../camel/support/LifecycleStrategySupport.java    |  17 +-
 .../org/apache/camel/support/MessageHelper.java    |  11 +-
 .../camel/support/builder/ExpressionBuilder.java   |  13 +-
 177 files changed, 1589 insertions(+), 2002 deletions(-)

diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/JtaTransactionErrorHandlerReifier.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/JtaTransactionErrorHandlerReifier.java
index 252e3ee..012d113 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/JtaTransactionErrorHandlerReifier.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/JtaTransactionErrorHandlerReifier.java
@@ -28,7 +28,7 @@ import org.apache.camel.reifier.TransactedReifier;
 import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
 import org.apache.camel.spi.ExecutorServiceManager;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.spi.ThreadPoolProfile;
 import org.apache.camel.spi.TransactedPolicy;
 import org.apache.camel.util.ObjectHelper;
@@ -44,8 +44,8 @@ public class JtaTransactionErrorHandlerReifier extends ErrorHandlerReifier<JtaTr
 
     private static final Logger LOG = LoggerFactory.getLogger(JtaTransactionErrorHandlerReifier.class);
 
-    public JtaTransactionErrorHandlerReifier(RouteContext routeContext, ErrorHandlerFactory definition) {
-        super(routeContext, (JtaTransactionErrorHandlerBuilder) definition);
+    public JtaTransactionErrorHandlerReifier(Route route, ErrorHandlerFactory definition) {
+        super(route, (JtaTransactionErrorHandlerBuilder) definition);
     }
 
     @Override
diff --git a/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/JtaTransactionPolicy.java b/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/JtaTransactionPolicy.java
index 124a483..9add464 100644
--- a/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/JtaTransactionPolicy.java
+++ b/components/camel-cdi/src/main/java/org/apache/camel/cdi/transaction/JtaTransactionPolicy.java
@@ -27,7 +27,7 @@ import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.spi.TransactedPolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -51,7 +51,7 @@ public abstract class JtaTransactionPolicy implements TransactedPolicy {
     protected TransactionManager transactionManager;
 
     @Override
-    public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+    public void beforeWrap(Route route, NamedNode definition) {
         // do not inherit since we create our own
         // (otherwise the default error handler would be used two times
         // because we inherit it on our own but only in case of a
@@ -62,7 +62,7 @@ public abstract class JtaTransactionPolicy implements TransactedPolicy {
     public abstract void run(Runnable runnable) throws Throwable;
 
     @Override
-    public Processor wrap(RouteContext routeContext, Processor processor) {
+    public Processor wrap(Route route, Processor processor) {
         JtaTransactionErrorHandler answer;
         // the goal is to configure the error handler builder on the route as a
         // transacted error handler. If the configured builder is not transacted,
@@ -74,8 +74,8 @@ public abstract class JtaTransactionPolicy implements TransactedPolicy {
         // we only need one transacted error handler
 
         // find the existing error handler builder
-        RouteDefinition route = (RouteDefinition) routeContext.getRoute();
-        ErrorHandlerBuilder builder = (ErrorHandlerBuilder) route.getErrorHandlerFactory();
+        RouteDefinition routeDefinition = (RouteDefinition) route.getRoute();
+        ErrorHandlerBuilder builder = (ErrorHandlerBuilder) routeDefinition.getErrorHandlerFactory();
 
         // check if its a ref if so then do a lookup
         if (builder instanceof ErrorHandlerBuilderRef) {
@@ -87,7 +87,7 @@ public abstract class JtaTransactionPolicy implements TransactedPolicy {
             // and if so then we can safely replace that with our transacted error handler
             if (ErrorHandlerReifier.isErrorHandlerFactoryConfigured(ref)) {
                 LOG.debug("Looking up ErrorHandlerBuilder with ref: {}", ref);
-                builder = (ErrorHandlerBuilder) ErrorHandlerReifier.lookupErrorHandlerFactory(routeContext, ref);
+                builder = (ErrorHandlerBuilder) ErrorHandlerReifier.lookupErrorHandlerFactory(route, ref);
             }
         }
 
@@ -110,23 +110,23 @@ public abstract class JtaTransactionPolicy implements TransactedPolicy {
 
         // use error handlers from the configured builder
         if (builder != null) {
-            routeContext.addErrorHandlerFactoryReference(builder, txBuilder);
+            route.addErrorHandlerFactoryReference(builder, txBuilder);
         }
 
-        answer = createTransactionErrorHandler(routeContext, processor, txBuilder);
+        answer = createTransactionErrorHandler(route, processor, txBuilder);
 
         // set the route to use our transacted error handler builder
-        route.setErrorHandlerFactory(txBuilder);
+        routeDefinition.setErrorHandlerFactory(txBuilder);
 
         // return with wrapped transacted error handler
         return answer;
     }
 
-    protected JtaTransactionErrorHandler createTransactionErrorHandler(RouteContext routeContext, Processor processor,
-            ErrorHandlerBuilder builder) {
+    protected JtaTransactionErrorHandler createTransactionErrorHandler(Route route, Processor processor,
+                                                                       ErrorHandlerBuilder builder) {
         JtaTransactionErrorHandler answer;
         try {
-            answer = (JtaTransactionErrorHandler) ErrorHandlerReifier.reifier(routeContext, builder).createErrorHandler(processor);
+            answer = (JtaTransactionErrorHandler) ErrorHandlerReifier.reifier(route, builder).createErrorHandler(processor);
         } catch (Exception e) {
             throw RuntimeCamelException.wrapRuntimeCamelException(e);
         }
diff --git a/components/camel-controlbus/src/main/java/org/apache/camel/component/controlbus/ControlBusProducer.java b/components/camel-controlbus/src/main/java/org/apache/camel/component/controlbus/ControlBusProducer.java
index 072a0e0..dc5ad47 100644
--- a/components/camel-controlbus/src/main/java/org/apache/camel/component/controlbus/ControlBusProducer.java
+++ b/components/camel-controlbus/src/main/java/org/apache/camel/component/controlbus/ControlBusProducer.java
@@ -28,8 +28,6 @@ import org.apache.camel.Route;
 import org.apache.camel.ServiceStatus;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.spi.Language;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -93,20 +91,6 @@ public class ControlBusProducer extends DefaultAsyncProducer {
         }
     }
 
-    private static String getRouteId(Exchange exchange) {
-        String answer = null;
-        UnitOfWork uow = exchange.getUnitOfWork();
-        RouteContext rc = uow != null ? uow.getRouteContext() : null;
-        if (rc != null) {
-            answer = rc.getRouteId();
-        }
-        if (answer == null) {
-            // fallback and get from route id on the exchange
-            answer = exchange.getFromRouteId();
-        }
-        return answer;
-    }
-
     /**
      * Tasks to run when processing by language.
      */
@@ -166,7 +150,7 @@ public class ControlBusProducer extends DefaultAsyncProducer {
             String id = getEndpoint().getRouteId();
 
             if (ObjectHelper.equal("current", id)) {
-                id = getRouteId(exchange);
+                id = ExchangeHelper.getRouteId(exchange);
             }
 
             Object result = null;
diff --git a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java
index bb12022..12bd23f 100644
--- a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java
+++ b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixProcessorFactory.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.hystrix.processor;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.engine.TypedProcessorFactory;
 import org.apache.camel.model.CircuitBreakerDefinition;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 
 /**
  * To integrate camel-hystrix with the Camel routes using the Hystrix EIP.
@@ -31,8 +31,8 @@ public class HystrixProcessorFactory extends TypedProcessorFactory<CircuitBreake
     }
 
     @Override
-    public Processor doCreateProcessor(RouteContext routeContext, CircuitBreakerDefinition definition) throws Exception {
-        return new HystrixReifier(routeContext, definition).createProcessor();
+    public Processor doCreateProcessor(Route route, CircuitBreakerDefinition definition) throws Exception {
+        return new HystrixReifier(route, definition).createProcessor();
     }
 
 }
diff --git a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
index 1ea7251..a67b314 100644
--- a/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
+++ b/components/camel-hystrix/src/main/java/org/apache/camel/component/hystrix/processor/HystrixReifier.java
@@ -34,14 +34,14 @@ import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.Model;
 import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.spi.BeanIntrospection;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.util.function.Suppliers;
 
 public class HystrixReifier extends ProcessorReifier<CircuitBreakerDefinition> {
 
-    public HystrixReifier(RouteContext routeContext, CircuitBreakerDefinition definition) {
-        super(routeContext, definition);
+    public HystrixReifier(Route route, CircuitBreakerDefinition definition) {
+        super(route, definition);
     }
 
     @Override
@@ -50,7 +50,7 @@ public class HystrixReifier extends ProcessorReifier<CircuitBreakerDefinition> {
         Processor processor = createChildProcessor(true);
         Processor fallback = null;
         if (definition.getOnFallback() != null) {
-            fallback = ProcessorReifier.reifier(routeContext, definition.getOnFallback()).createProcessor();
+            fallback = ProcessorReifier.reifier(route, definition.getOnFallback()).createProcessor();
         }
 
         final HystrixConfigurationDefinition config = buildHystrixConfiguration();
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
index 765360a..1d2a06f 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/HystrixHierarchicalConfigTest.java
@@ -18,11 +18,11 @@ package org.apache.camel.component.hystrix.processor;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.impl.DefaultRouteContext;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.model.CircuitBreakerDefinition;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.Model;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.SimpleRegistry;
 import org.junit.Assert;
 import org.junit.Test;
@@ -33,7 +33,7 @@ public class HystrixHierarchicalConfigTest {
     public void testRegistryConfiguration() throws Exception {
         final SimpleRegistry registry = new SimpleRegistry();
         final CamelContext context = new DefaultCamelContext(registry);
-        final RouteContext routeContext = new DefaultRouteContext(context, null, null);
+        final Route route = new DefaultRoute(context, null, null, null);
 
         HystrixConfigurationDefinition def = new HystrixConfigurationDefinition();
         def.setGroupKey("global-group-key");
@@ -47,7 +47,7 @@ public class HystrixHierarchicalConfigTest {
         registry.bind(HystrixConstants.DEFAULT_HYSTRIX_CONFIGURATION_ID, def);
         registry.bind("ref-hystrix", ref);
 
-        final HystrixReifier reifier = new HystrixReifier(routeContext,
+        final HystrixReifier reifier = new HystrixReifier(route,
                 new CircuitBreakerDefinition()
                         .configuration("ref-hystrix")
                         .hystrixConfiguration()
@@ -65,7 +65,7 @@ public class HystrixHierarchicalConfigTest {
     @Test
     public void testContextConfiguration() throws Exception {
         final CamelContext context = new DefaultCamelContext();
-        final RouteContext routeContext = new DefaultRouteContext(context, null, null);
+        final Route route = new DefaultRoute(context, null, null, null);
 
         HystrixConfigurationDefinition def = new HystrixConfigurationDefinition();
         def.setGroupKey("global-group-key");
@@ -79,7 +79,7 @@ public class HystrixHierarchicalConfigTest {
         context.getExtension(Model.class).setHystrixConfiguration(def);
         context.getExtension(Model.class).addHystrixConfiguration("ref-hystrix", ref);
 
-        final HystrixReifier reifier = new HystrixReifier(routeContext,
+        final HystrixReifier reifier = new HystrixReifier(route,
                 new CircuitBreakerDefinition()
                         .configuration("ref-hystrix")
                         .hystrixConfiguration()
@@ -98,7 +98,7 @@ public class HystrixHierarchicalConfigTest {
     public void testMixedConfiguration() throws Exception {
         final SimpleRegistry registry = new SimpleRegistry();
         final CamelContext context = new DefaultCamelContext(registry);
-        final RouteContext routeContext = new DefaultRouteContext(context, null, null);
+        final Route route = new DefaultRoute(context, null, null, null);
 
         HystrixConfigurationDefinition def = new HystrixConfigurationDefinition();
         def.setGroupKey("global-group-key");
@@ -120,7 +120,7 @@ public class HystrixHierarchicalConfigTest {
         registry.bind(HystrixConstants.DEFAULT_HYSTRIX_CONFIGURATION_ID, defReg);
         registry.bind("ref-hystrix", ref);
 
-        final HystrixReifier reifier = new HystrixReifier(routeContext,
+        final HystrixReifier reifier = new HystrixReifier(route,
                 new CircuitBreakerDefinition()
                         .configuration("ref-hystrix")
                         .hystrixConfiguration()
diff --git a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/SpringHystrixRouteHierarchicalConfigTest.java b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/SpringHystrixRouteHierarchicalConfigTest.java
index 105b3e2..bf254bd 100644
--- a/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/SpringHystrixRouteHierarchicalConfigTest.java
+++ b/components/camel-hystrix/src/test/java/org/apache/camel/component/hystrix/processor/SpringHystrixRouteHierarchicalConfigTest.java
@@ -17,11 +17,11 @@
 package org.apache.camel.component.hystrix.processor;
 
 import org.apache.camel.ExtendedCamelContext;
-import org.apache.camel.impl.DefaultRouteContext;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.model.CircuitBreakerDefinition;
 import org.apache.camel.model.HystrixConfigurationDefinition;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.test.spring.CamelSpringTestSupport;
 import org.junit.Assert;
 import org.junit.Test;
@@ -39,13 +39,13 @@ public class SpringHystrixRouteHierarchicalConfigTest extends CamelSpringTestSup
     @Test
     public void testHystrix() throws Exception {
         RouteDefinition routeDefinition = context.getRouteDefinition("hystrix-route");
-        final RouteContext routeContext = new DefaultRouteContext(context, routeDefinition,
-                routeDefinition.idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory()));
+        final Route route = new DefaultRoute(context, routeDefinition,
+                routeDefinition.idOrCreate(context.adapt(ExtendedCamelContext.class).getNodeIdFactory()), null);
         CircuitBreakerDefinition hystrixDefinition = findCircuitBreakerDefinition(routeDefinition);
 
         Assert.assertNotNull(hystrixDefinition);
 
-        HystrixReifier reifier = new HystrixReifier(routeContext, hystrixDefinition);
+        HystrixReifier reifier = new HystrixReifier(route, hystrixDefinition);
         HystrixConfigurationDefinition config = reifier.buildHystrixConfiguration();
 
         Assert.assertEquals("local-conf-group-key", config.getGroupKey());
diff --git a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java
index c3f092f..6bdc82d 100644
--- a/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java
+++ b/components/camel-infinispan/src/main/java/org/apache/camel/component/infinispan/policy/InfinispanRoutePolicy.java
@@ -112,7 +112,7 @@ public class InfinispanRoutePolicy extends RoutePolicySupport implements CamelCo
         super.onInit(route);
 
         LOGGER.info("Route managed by {}. Setting route {} AutoStartup flag to false.", getClass(), route.getId());
-        route.getRouteContext().setAutoStartup(false);
+        route.setAutoStartup(false);
 
         stoppeddRoutes.add(route);
 
diff --git a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicy.java b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicy.java
index 5fb6db2..981f20e 100644
--- a/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicy.java
+++ b/components/camel-jcache/src/main/java/org/apache/camel/component/jcache/policy/JCachePolicy.java
@@ -28,7 +28,7 @@ import org.apache.camel.Expression;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -57,12 +57,12 @@ public class JCachePolicy implements Policy {
     private boolean enabled = true;
 
     @Override
-    public void beforeWrap(RouteContext routeContext, NamedNode namedNode) {
+    public void beforeWrap(Route route, NamedNode namedNode) {
 
     }
 
     @Override
-    public Processor wrap(RouteContext routeContext, Processor processor) {
+    public Processor wrap(Route route, Processor processor) {
         //Don't add JCachePolicyProcessor if JCachePolicy is disabled. This means enable/disable has impact only during startup
         if (!isEnabled()) {
             return processor;
@@ -77,7 +77,7 @@ public class JCachePolicy implements Policy {
 
             //Lookup CacheManager from CamelContext if it's not set
             if (cacheManager == null) {
-                Set<CacheManager> lookupResult = routeContext.getCamelContext().getRegistry().findByType(CacheManager.class);
+                Set<CacheManager> lookupResult = route.getCamelContext().getRegistry().findByType(CacheManager.class);
                 if (ObjectHelper.isNotEmpty(lookupResult)) {
 
                     //Use the first cache manager found
@@ -93,7 +93,7 @@ public class JCachePolicy implements Policy {
             }
 
             //Use routeId as cacheName if it's not set
-            String cacheName = ObjectHelper.isNotEmpty(this.cacheName) ? this.cacheName : routeContext.getRouteId();
+            String cacheName = ObjectHelper.isNotEmpty(this.cacheName) ? this.cacheName : route.getRouteId();
             LOG.debug("Getting cache:{}", cacheName);
 
             //Get cache or create a new one using the cacheConfiguration
diff --git a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/AbstractTransactionTest.java b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/AbstractTransactionTest.java
index b8f97e3..99dc9d0 100644
--- a/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/AbstractTransactionTest.java
+++ b/components/camel-jms/src/test/java/org/apache/camel/component/jms/tx/AbstractTransactionTest.java
@@ -21,7 +21,7 @@ import org.apache.camel.DelegateProcessor;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.builder.NotifyBuilder;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.processor.Pipeline;
 import org.apache.camel.processor.errorhandler.DeadLetterChannel;
 import org.apache.camel.processor.errorhandler.DefaultErrorHandler;
@@ -78,7 +78,7 @@ public abstract class AbstractTransactionTest extends CamelSpringTestSupport {
     protected ConditionalExceptionProcessor getConditionalExceptionProcessor(Route route) {
         // the following is very specific (and brittle) and is not generally
         // useful outside these transaction tests (nor intended to be).
-        EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+        DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
         Processor processor = findProcessorByClass(consumerRoute.getProcessor(), ConditionalExceptionProcessor.class);
         return assertIsInstanceOf(ConditionalExceptionProcessor.class, processor);
     }
diff --git a/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java b/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java
index 63a7d12..cf5ee0e 100644
--- a/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java
+++ b/components/camel-quartz/src/main/java/org/apache/camel/routepolicy/quartz/ScheduledJob.java
@@ -43,7 +43,7 @@ public class ScheduledJob implements Job, Serializable, ScheduledRoutePolicyCons
         Action storedAction = state.getAction();
         Route storedRoute = state.getRoute();
 
-        List<RoutePolicy> policyList = storedRoute.getRouteContext().getRoutePolicyList();
+        List<RoutePolicy> policyList = storedRoute.getRoutePolicyList();
         for (RoutePolicy policy : policyList) {
             try {
                 if (policy instanceof ScheduledRoutePolicy) {
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessorFactory.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessorFactory.java
index bcf91c4..3da7d3c 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessorFactory.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceProcessorFactory.java
@@ -19,7 +19,7 @@ package org.apache.camel.component.resilience4j;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.engine.TypedProcessorFactory;
 import org.apache.camel.model.CircuitBreakerDefinition;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 
 /**
  * To integrate camel-resilience4j with the Camel routes using the Circuit
@@ -32,8 +32,8 @@ public class ResilienceProcessorFactory extends TypedProcessorFactory<CircuitBre
     }
 
     @Override
-    public Processor doCreateProcessor(RouteContext routeContext, CircuitBreakerDefinition definition) throws Exception {
-        return new ResilienceReifier(routeContext, definition).createProcessor();
+    public Processor doCreateProcessor(Route route, CircuitBreakerDefinition definition) throws Exception {
+        return new ResilienceReifier(route, definition).createProcessor();
     }
 
 }
diff --git a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
index f725db8..ec0b35c 100644
--- a/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
+++ b/components/camel-resilience4j/src/main/java/org/apache/camel/component/resilience4j/ResilienceReifier.java
@@ -34,14 +34,14 @@ import org.apache.camel.model.Resilience4jConfigurationCommon;
 import org.apache.camel.model.Resilience4jConfigurationDefinition;
 import org.apache.camel.reifier.ProcessorReifier;
 import org.apache.camel.spi.BeanIntrospection;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.PropertyBindingSupport;
 import org.apache.camel.util.function.Suppliers;
 
 public class ResilienceReifier extends ProcessorReifier<CircuitBreakerDefinition> {
 
-    public ResilienceReifier(RouteContext routeContext, CircuitBreakerDefinition definition) {
-        super(routeContext, definition);
+    public ResilienceReifier(Route route, CircuitBreakerDefinition definition) {
+        super(route, definition);
     }
 
     @Override
@@ -50,7 +50,7 @@ public class ResilienceReifier extends ProcessorReifier<CircuitBreakerDefinition
         Processor processor = createChildProcessor(true);
         Processor fallback = null;
         if (definition.getOnFallback() != null) {
-            fallback = ProcessorReifier.reifier(routeContext, definition.getOnFallback()).createProcessor();
+            fallback = ProcessorReifier.reifier(route, definition.getOnFallback()).createProcessor();
         }
         boolean fallbackViaNetwork = definition.getOnFallback() != null && parseBoolean(definition.getOnFallback().getFallbackViaNetwork(), false);
         if (fallbackViaNetwork) {
diff --git a/components/camel-shiro/src/main/java/org/apache/camel/component/shiro/security/ShiroSecurityPolicy.java b/components/camel-shiro/src/main/java/org/apache/camel/component/shiro/security/ShiroSecurityPolicy.java
index 1b342e0..568bc9b 100644
--- a/components/camel-shiro/src/main/java/org/apache/camel/component/shiro/security/ShiroSecurityPolicy.java
+++ b/components/camel-shiro/src/main/java/org/apache/camel/component/shiro/security/ShiroSecurityPolicy.java
@@ -22,7 +22,7 @@ import java.util.List;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.spi.AuthorizationPolicy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.shiro.SecurityUtils;
 import org.apache.shiro.authz.Permission;
 import org.apache.shiro.config.Ini;
@@ -99,14 +99,14 @@ public class ShiroSecurityPolicy implements AuthorizationPolicy {
     }
 
     @Override
-    public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+    public void beforeWrap(Route route, NamedNode definition) {
         // noop
     }
 
     @Override
-    public Processor wrap(RouteContext routeContext, final Processor processor) {
+    public Processor wrap(Route route, final Processor processor) {
         if (LOG.isDebugEnabled()) {
-            LOG.debug("Securing route {} using Shiro policy {}", routeContext.getRouteId(), this);
+            LOG.debug("Securing route {} using Shiro policy {}", route.getRouteId(), this);
         }
         return new ShiroSecurityProcessor(processor, this);
     }
diff --git a/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java b/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
index 339101e..143d6ab 100644
--- a/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
+++ b/components/camel-spring-security/src/main/java/org/apache/camel/component/spring/security/SpringSecurityAuthorizationPolicy.java
@@ -27,7 +27,7 @@ import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.model.IdentifiedType;
 import org.apache.camel.spi.AuthorizationPolicy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.processor.DelegateProcessor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -56,11 +56,11 @@ public class SpringSecurityAuthorizationPolicy extends IdentifiedType implements
     private boolean useThreadSecurityContext = true;
 
     @Override
-    public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+    public void beforeWrap(Route route, NamedNode definition) {
     }
 
     @Override
-    public Processor wrap(RouteContext routeContext, Processor processor) {
+    public Processor wrap(Route route, Processor processor) {
         // wrap the processor with authorizeDelegateProcessor
         return new AuthorizeDelegateProcess(processor);
     }
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java
index cf87eeb..4681af6 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/SpringTransactionPolicy.java
@@ -23,7 +23,7 @@ import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.spi.TransactedPolicy;
 import org.apache.camel.spi.annotations.JdkService;
 import org.apache.camel.util.ObjectHelper;
@@ -57,11 +57,11 @@ public class SpringTransactionPolicy implements TransactedPolicy {
     }
 
     @Override
-    public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+    public void beforeWrap(Route route, NamedNode definition) {
     }
 
     @Override
-    public Processor wrap(RouteContext routeContext, Processor processor) {
+    public Processor wrap(Route route, Processor processor) {
         TransactionErrorHandler answer;
 
         // the goal is to configure the error handler builder on the route as a transacted error handler,
@@ -71,8 +71,8 @@ public class SpringTransactionPolicy implements TransactedPolicy {
         // if we should not support this we do not need to wrap the processor as we only need one transacted error handler
 
         // find the existing error handler builder
-        RouteDefinition route = (RouteDefinition) routeContext.getRoute();
-        ErrorHandlerBuilder builder = (ErrorHandlerBuilder) route.getErrorHandlerFactory();
+        RouteDefinition routeDefinition = (RouteDefinition) route.getRoute();
+        ErrorHandlerBuilder builder = (ErrorHandlerBuilder) routeDefinition.getErrorHandlerFactory();
 
         // check if its a ref if so then do a lookup
         if (builder instanceof ErrorHandlerBuilderRef) {
@@ -84,14 +84,14 @@ public class SpringTransactionPolicy implements TransactedPolicy {
             // and if so then we can safely replace that with our transacted error handler
             if (ErrorHandlerReifier.isErrorHandlerFactoryConfigured(ref)) {
                 LOG.debug("Looking up ErrorHandlerBuilder with ref: {}", ref);
-                builder = (ErrorHandlerBuilder) ErrorHandlerReifier.lookupErrorHandlerFactory(routeContext, ref);
+                builder = (ErrorHandlerBuilder) ErrorHandlerReifier.lookupErrorHandlerFactory(route, ref);
             }
         }
 
         if (builder != null && builder.supportTransacted()) {
             // already a TX error handler then we are good to go
             LOG.debug("The ErrorHandlerBuilder configured is already a TransactionErrorHandlerBuilder: {}", builder);
-            answer = createTransactionErrorHandler(routeContext, processor, builder);
+            answer = createTransactionErrorHandler(route, processor, builder);
         } else {
             // no transaction error handler builder configure so create a temporary one as we got all
             // the needed information form the configured builder anyway this allow us to use transacted
@@ -106,22 +106,22 @@ public class SpringTransactionPolicy implements TransactedPolicy {
             txBuilder.setSpringTransactionPolicy(this);
             if (builder != null) {
                 // use error handlers from the configured builder
-                routeContext.addErrorHandlerFactoryReference(builder, txBuilder);
+                route.addErrorHandlerFactoryReference(builder, txBuilder);
             }
-            answer = createTransactionErrorHandler(routeContext, processor, txBuilder);
+            answer = createTransactionErrorHandler(route, processor, txBuilder);
 
             // set the route to use our transacted error handler builder
-            route.setErrorHandlerFactory(txBuilder);
+            routeDefinition.setErrorHandlerFactory(txBuilder);
         }
 
         // return with wrapped transacted error handler
         return answer;
     }
 
-    protected TransactionErrorHandler createTransactionErrorHandler(RouteContext routeContext, Processor processor, ErrorHandlerBuilder builder) {
+    protected TransactionErrorHandler createTransactionErrorHandler(Route route, Processor processor, ErrorHandlerBuilder builder) {
         TransactionErrorHandler answer;
         try {
-            answer = (TransactionErrorHandler) ErrorHandlerReifier.reifier(routeContext, builder).createErrorHandler(processor);
+            answer = (TransactionErrorHandler) ErrorHandlerReifier.reifier(route, builder).createErrorHandler(processor);
         } catch (Exception e) {
             throw RuntimeCamelException.wrapRuntimeCamelException(e);
         }
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java
index 3aa044a..62ad792 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerBuilder.java
@@ -16,17 +16,10 @@
  */
 package org.apache.camel.spring.spi;
 
-import java.util.Map;
-
-import org.apache.camel.CamelContext;
 import org.apache.camel.LoggingLevel;
-import org.apache.camel.Processor;
 import org.apache.camel.builder.DefaultErrorHandlerBuilder;
 import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
 import org.apache.camel.spi.CamelLogger;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.TransactedPolicy;
-import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 import org.springframework.transaction.PlatformTransactionManager;
diff --git a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerReifier.java b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerReifier.java
index 1aa68ca..82a2de7 100644
--- a/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerReifier.java
+++ b/components/camel-spring/src/main/java/org/apache/camel/spring/spi/TransactionErrorHandlerReifier.java
@@ -21,7 +21,7 @@ import java.util.Map;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Processor;
 import org.apache.camel.reifier.errorhandler.DefaultErrorHandlerReifier;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.spi.TransactedPolicy;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -35,8 +35,8 @@ public class TransactionErrorHandlerReifier extends DefaultErrorHandlerReifier<T
 
     private static final Logger LOG = LoggerFactory.getLogger(TransactionErrorHandlerReifier.class);
 
-    public TransactionErrorHandlerReifier(RouteContext routeContext, ErrorHandlerFactory definition) {
-        super(routeContext, definition);
+    public TransactionErrorHandlerReifier(Route route, ErrorHandlerFactory definition) {
+        super(route, definition);
     }
 
     @Override
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/CamelContextFactoryBeanTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/CamelContextFactoryBeanTest.java
index 6fb82ac..5de6bd6 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/CamelContextFactoryBeanTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/CamelContextFactoryBeanTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.spring.SpringCamelContext;
 import org.apache.camel.util.IOHelper;
 import org.junit.After;
@@ -103,7 +103,7 @@ public class CamelContextFactoryBeanTest extends XmlConfigTestSupport {
 
         for (Route route : routes) {
             Endpoint key = route.getEndpoint();
-            EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
             Processor processor = consumerRoute.getProcessor();
             assertNotNull(processor);
 
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
index c7d4764..614c970 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/DummyErrorHandlerBuilder.java
@@ -22,7 +22,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.ErrorHandlerBuilder;
 import org.apache.camel.builder.ErrorHandlerBuilderSupport;
 import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.processor.DelegateProcessor;
 import org.springframework.beans.factory.BeanNameAware;
 
@@ -58,8 +58,8 @@ public class DummyErrorHandlerBuilder extends ErrorHandlerBuilderSupport impleme
 
     public static class DummyErrorHandlerReifier extends ErrorHandlerReifier<DummyErrorHandlerBuilder> {
 
-        public DummyErrorHandlerReifier(RouteContext routeContext, ErrorHandlerFactory definition) {
-            super(routeContext, (DummyErrorHandlerBuilder) definition);
+        public DummyErrorHandlerReifier(Route route, ErrorHandlerFactory definition) {
+            super(route, (DummyErrorHandlerBuilder) definition);
         }
 
         @Override
diff --git a/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerTest.java b/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerTest.java
index 3b98041..e72ea39 100644
--- a/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerTest.java
+++ b/components/camel-spring/src/test/java/org/apache/camel/spring/config/ErrorHandlerTest.java
@@ -20,7 +20,7 @@ import java.util.List;
 
 import org.apache.camel.Channel;
 import org.apache.camel.Route;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.processor.errorhandler.DeadLetterChannel;
 import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
 import org.apache.camel.spring.SpringCamelContext;
@@ -42,7 +42,7 @@ public class ErrorHandlerTest extends SpringTestSupport {
         List<Route> list = context.getRoutes();
         assertEquals("Number routes created" + list, 2, list.size());
         for (Route route : list) {
-            EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumerRoute.getProcessor());
 
             DeadLetterChannel deadLetterChannel = assertIsInstanceOf(DeadLetterChannel.class, channel.getErrorHandler());
diff --git a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
index 017b8b7..19116f9 100644
--- a/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
+++ b/components/camel-zipkin/src/main/java/org/apache/camel/zipkin/ZipkinTracer.java
@@ -49,12 +49,11 @@ import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
 import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.spi.RoutePolicyFactory;
-import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.EventNotifierSupport;
+import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.PatternHelper;
 import org.apache.camel.support.RoutePolicySupport;
 import org.apache.camel.support.service.ServiceHelper;
@@ -809,16 +808,7 @@ public class ZipkinTracer extends ServiceSupport implements RoutePolicyFactory,
         return new Expression() {
             @Override
             public <T> T evaluate(Exchange exchange, Class<T> type) {
-                String answer = null;
-                UnitOfWork uow = exchange.getUnitOfWork();
-                RouteContext rc = uow != null ? uow.getRouteContext() : null;
-                if (rc != null) {
-                    answer = rc.getRouteId();
-                }
-                if (answer == null) {
-                    // fallback and get from route id on the exchange
-                    answer = exchange.getFromRouteId();
-                }
+                String answer = ExchangeHelper.getRouteId(exchange);
                 return type.cast(answer);
             }
         };
diff --git a/core/camel-api/src/main/java/org/apache/camel/Channel.java b/core/camel-api/src/main/java/org/apache/camel/Channel.java
index bdfcbfb..c425b80 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Channel.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Channel.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel;
 
-import org.apache.camel.spi.RouteContext;
-
 /**
  * Channel acts as a channel between {@link Processor}s in the route graph.
  * <p/>
@@ -47,11 +45,11 @@ public interface Channel extends AsyncProcessor, Navigate<Processor> {
     Processor getNextProcessor();
 
     /**
-     * Gets the {@link RouteContext}
+     * Gets the {@link Route}
      *
      * @return the route context
      */
-    RouteContext getRouteContext();
+    Route getRoute();
 
     /**
      * Gets the definition of the next processor
diff --git a/core/camel-api/src/main/java/org/apache/camel/Route.java b/core/camel-api/src/main/java/org/apache/camel/Route.java
index 30cb281..c596ef2 100644
--- a/core/camel-api/src/main/java/org/apache/camel/Route.java
+++ b/core/camel-api/src/main/java/org/apache/camel/Route.java
@@ -18,8 +18,13 @@ package org.apache.camel;
 
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
 
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.spi.InterceptStrategy;
+import org.apache.camel.spi.ManagementInterceptStrategy;
+import org.apache.camel.spi.RouteController;
+import org.apache.camel.spi.RouteError;
+import org.apache.camel.spi.RoutePolicy;
 
 /**
  * A <a href="http://camel.apache.org/routes.html">Route</a>
@@ -30,7 +35,7 @@ import org.apache.camel.spi.RouteContext;
  * such as starting and stopping using the {@link org.apache.camel.spi.RouteController#startRoute(String)}
  * and {@link org.apache.camel.spi.RouteController#stopRoute(String)} methods.
  */
-public interface Route extends EndpointAware {
+public interface Route extends RuntimeConfiguration {
 
     String ID_PROPERTY = "id";
     String CUSTOM_ID_PROPERTY = "customId";
@@ -105,18 +110,18 @@ public interface Route extends EndpointAware {
     String getDescription();
 
     /**
-     * Gets the route context
+     * Gets the camel context
      *
-     * @return the route context
+     * @return the camel context
      */
-    RouteContext getRouteContext();
+    CamelContext getCamelContext();
 
     /**
-     * Gets the camel context
+     * Gets the input endpoint for this route.
      *
-     * @return the camel context
+     * @return the endpoint
      */
-    CamelContext getCamelContext();
+    Endpoint getEndpoint();
 
     /**
      * A strategy callback allowing special initialization when services are starting.
@@ -160,4 +165,146 @@ public interface Route extends EndpointAware {
      */
     void warmUp();
 
+    /**
+     * Gets the last error.
+     *
+     * @return the error
+     */
+    RouteError getLastError();
+
+    /**
+     * Sets the last error.
+     *
+     * @param error the error
+     */
+    void setLastError(RouteError error);
+
+    Integer getStartupOrder();
+
+    void setStartupOrder(Integer startupOrder);
+
+    /**
+     * Gets the  {@link RouteController} for this route.
+     *
+     * @return the route controller,
+     */
+    RouteController getRouteController();
+
+    /**
+     * Sets the {@link RouteController} for this route.
+     *
+     * @param controller the RouteController
+     */
+    void setRouteController(RouteController controller);
+
+    /**
+     * Sets whether the route should automatically start when Camel starts.
+     * <p/>
+     * Default is <tt>true</tt> to always start up.
+     *
+     * @param autoStartup whether to start up automatically.
+     */
+    void setAutoStartup(Boolean autoStartup);
+
+    /**
+     * Gets whether the route should automatically start when Camel starts.
+     * <p/>
+     * Default is <tt>true</tt> to always start up.
+     *
+     * @return <tt>true</tt> if route should automatically start
+     */
+    Boolean isAutoStartup();
+
+    /**
+     * Gets the route id
+     */
+    String getRouteId();
+
+    /**
+     * Get the route type
+     *
+     * @return the route type
+     */
+    NamedNode getRoute();
+
+    //
+    // CREATION TIME
+    //
+
+    /**
+     * This method retrieves the event driven Processors on this route context.
+     * @return
+     */
+    List<Processor> getEventDrivenProcessors();
+
+    /**
+     * This method retrieves the InterceptStrategy instances this route context.
+     *
+     * @return the strategy
+     */
+    List<InterceptStrategy> getInterceptStrategies();
+
+    /**
+     * Sets a special intercept strategy for management.
+     * <p/>
+     * Is by default used to correlate managed performance counters with processors
+     * when the runtime route is being constructed
+     *
+     * @param interceptStrategy the managed intercept strategy
+     */
+    void setManagementInterceptStrategy(ManagementInterceptStrategy interceptStrategy);
+
+    /**
+     * Gets the special managed intercept strategy if any
+     *
+     * @return the managed intercept strategy, or <tt>null</tt> if not managed
+     */
+    ManagementInterceptStrategy getManagementInterceptStrategy();
+
+    /**
+     * Gets the route policy List
+     *
+     * @return the route policy list if any
+     */
+    List<RoutePolicy> getRoutePolicyList();
+
+    void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory);
+
+    ErrorHandlerFactory getErrorHandlerFactory();
+
+    Processor createErrorHandler(Processor processor) throws Exception;
+
+    // called at runtime
+    Processor getOnCompletion(String onCompletionId);
+
+    // called at completion time
+    void setOnCompletion(String onCompletionId, Processor processor);
+
+    Processor getOnException(String onExceptionId);
+
+    void setOnException(String onExceptionId, Processor processor);
+
+    /**
+     * Adds error handler for the given exception type
+     *
+     * @param factory       the error handler factory
+     * @param exception     the exception to handle
+     */
+    void addErrorHandler(ErrorHandlerFactory factory, NamedNode exception);
+
+    /**
+     * Gets the error handlers
+     *
+     * @param factory       the error handler factory
+     */
+    Set<NamedNode> getErrorHandlers(ErrorHandlerFactory factory);
+
+    /**
+     * Link the error handlers from a factory to another
+     *
+     * @param source        the source factory
+     * @param target        the target factory
+     */
+    void addErrorHandlerFactoryReference(ErrorHandlerFactory source, ErrorHandlerFactory target);
+
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/RuntimeConfiguration.java b/core/camel-api/src/main/java/org/apache/camel/RuntimeConfiguration.java
index 4edbd32..b1bca1e 100644
--- a/core/camel-api/src/main/java/org/apache/camel/RuntimeConfiguration.java
+++ b/core/camel-api/src/main/java/org/apache/camel/RuntimeConfiguration.java
@@ -17,7 +17,7 @@
 package org.apache.camel;
 
 /**
- * Various runtime configuration options used by {@link org.apache.camel.CamelContext} and {@link org.apache.camel.spi.RouteContext}
+ * Various runtime configuration options used by {@link org.apache.camel.CamelContext} and {@link Route}
  * for cross cutting functions such as tracing, delayer, stream cache and the like.
  */
 public interface RuntimeConfiguration {
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/LifecycleStrategy.java b/core/camel-api/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
index 6a3fd00..6f5349b 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/LifecycleStrategy.java
@@ -86,7 +86,7 @@ public interface LifecycleStrategy {
      * @param service the added service
      * @param route   the route the service belongs to if any possible to determine
      */
-    void onServiceAdd(CamelContext context, Service service, Route route);
+    void onServiceAdd(CamelContext context, Service service, org.apache.camel.Route route);
 
     /**
      * Notification on removing a {@link Service}.
@@ -95,46 +95,46 @@ public interface LifecycleStrategy {
      * @param service the removed service
      * @param route   the route the service belongs to if any possible to determine
      */
-    void onServiceRemove(CamelContext context, Service service, Route route);
+    void onServiceRemove(CamelContext context, Service service, org.apache.camel.Route route);
 
     /**
-     * Notification on adding {@link Route}(s).
+     * Notification on adding {@link org.apache.camel.Route}(s).
      *
      * @param routes the added routes
      */
-    void onRoutesAdd(Collection<Route> routes);
+    void onRoutesAdd(Collection<org.apache.camel.Route> routes);
 
     /**
-     * Notification on removing {@link Route}(s).
+     * Notification on removing {@link org.apache.camel.Route}(s).
      *
      * @param routes the removed routes
      */
-    void onRoutesRemove(Collection<Route> routes);
+    void onRoutesRemove(Collection<org.apache.camel.Route> routes);
 
     /**
-     * Notification on adding {@link RouteContext}(s).
+     * Notification on adding {@link Route}(s).
      *
-     * @param routeContext the added route context
+     * @param route the added route context
      */
-    void onRouteContextCreate(RouteContext routeContext);
+    void onRouteContextCreate(Route route);
 
     /**
      * Notification on adding error handler.
      *
-     * @param routeContext        the added route context
+     * @param route        the added route context
      * @param errorHandler        the error handler
      * @param errorHandlerBuilder the error handler builder
      */
-    void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder);
+    void onErrorHandlerAdd(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder);
 
     /**
      * Notification on removing error handler.
      *
-     * @param routeContext        the removed route context
+     * @param route        the removed route context
      * @param errorHandler        the error handler
      * @param errorHandlerBuilder the error handler builder
      */
-    void onErrorHandlerRemove(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder);
+    void onErrorHandlerRemove(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder);
 
     /**
      * Notification on adding a thread pool.
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ManagementObjectNameStrategy.java b/core/camel-api/src/main/java/org/apache/camel/spi/ManagementObjectNameStrategy.java
index b83ca38..1656ff8 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ManagementObjectNameStrategy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ManagementObjectNameStrategy.java
@@ -54,7 +54,7 @@ public interface ManagementObjectNameStrategy {
 
     ObjectName getObjectNameForDataFormat(CamelContext context, DataFormat endpoint) throws MalformedObjectNameException;
 
-    ObjectName getObjectNameForErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory builder) throws MalformedObjectNameException;
+    ObjectName getObjectNameForErrorHandler(Route route, Processor errorHandler, ErrorHandlerFactory builder) throws MalformedObjectNameException;
 
     ObjectName getObjectNameForProcessor(CamelContext context, Processor processor, NamedNode definition) throws MalformedObjectNameException;
 
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java b/core/camel-api/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java
index d759d6d..9649519 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ManagementObjectStrategy.java
@@ -45,7 +45,7 @@ public interface ManagementObjectStrategy {
 
     Object getManagedObjectForEndpoint(CamelContext context, Endpoint endpoint);
 
-    Object getManagedObjectForErrorHandler(CamelContext context, RouteContext routeContext,
+    Object getManagedObjectForErrorHandler(CamelContext context, Route route,
                                            Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder);
 
     Object getManagedObjectForRouteController(CamelContext context);
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/Policy.java b/core/camel-api/src/main/java/org/apache/camel/spi/Policy.java
index f235204..070ff61 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/Policy.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/Policy.java
@@ -18,6 +18,7 @@ package org.apache.camel.spi;
 
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 
 /**
  * A strategy capable of applying interceptors to a processor.
@@ -41,17 +42,17 @@ public interface Policy {
      * This allows you to do any custom logic before the processor is wrapped. For example to
      * manipulate the {@link org.apache.camel.model.ProcessorDefinition definiton}.
      *
-     * @param routeContext   the route context
+     * @param route   the route context
      * @param definition     the processor definition
      */
-    void beforeWrap(RouteContext routeContext, NamedNode definition);
+    void beforeWrap(Route route, NamedNode definition);
 
     /**
      * Wraps any applicable interceptors around the given processor.
      *
-     * @param routeContext the route context
+     * @param route the route context
      * @param processor the processor to be intercepted
      * @return either the original processor or a processor wrapped in one or more processors
      */
-    Processor wrap(RouteContext routeContext, Processor processor);
+    Processor wrap(Route route, Processor processor);
 }
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java
index b88cf57..8eaa016 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/ProcessorFactory.java
@@ -21,6 +21,7 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 
 /**
  * A factory to create {@link Processor} based on the {@link org.apache.camel.model.ProcessorDefinition definition}.
@@ -41,23 +42,23 @@ public interface ProcessorFactory {
      * <p/>
      * The child processor is an output from the given definition, for example the sub route in a splitter EIP.
      *
-     * @param routeContext  the route context
+     * @param route  the route context
      * @param definition    the definition which represents the processor
      * @param mandatory     whether or not the child is mandatory
      * @return the created processor, or <tt>null</tt> to let the default implementation in Camel create the processor.
      * @throws Exception can be thrown if error creating the processor
      */
-    Processor createChildProcessor(RouteContext routeContext, NamedNode definition, boolean mandatory) throws Exception;
+    Processor createChildProcessor(Route route, NamedNode definition, boolean mandatory) throws Exception;
 
     /**
      * Creates the processor.
      *
-     * @param routeContext  the route context
+     * @param route  the route context
      * @param definition    the definition which represents the processor
      * @return the created processor, or <tt>null</tt> to let the default implementation in Camel create the processor.
      * @throws Exception can be thrown if error creating the processor
      */
-    Processor createProcessor(RouteContext routeContext, NamedNode definition) throws Exception;
+    Processor createProcessor(Route route, NamedNode definition) throws Exception;
 
     /**
      * Creates a processor by the name of the definition. This should only be used in some special situations
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java b/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
deleted file mode 100644
index 39e9b2c..0000000
--- a/core/camel-api/src/main/java/org/apache/camel/spi/RouteContext.java
+++ /dev/null
@@ -1,242 +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.spi;
-
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.EndpointAware;
-import org.apache.camel.ErrorHandlerFactory;
-import org.apache.camel.NamedNode;
-import org.apache.camel.Processor;
-import org.apache.camel.Route;
-import org.apache.camel.RuntimeConfiguration;
-
-/**
- * The context used to activate new routing rules
- */
-public interface RouteContext extends RuntimeConfiguration, EndpointAware {
-
-    /**
-     * Gets the route id
-     */
-    String getRouteId();
-
-    /**
-     * Get the route type
-     *
-     * @return the route type
-     */
-    NamedNode getRoute();
-
-    /**
-     * Gets the camel context
-     *
-     * @return the camel context
-     */
-    CamelContext getCamelContext();
-
-    /**
-     * For completing the route creation, creating a single event driven route
-     * for the current from endpoint with any processors required
-     */
-    Route commit();
-
-    /**
-     * Adds an event driven processor
-     *
-     * @param processor the processor
-     */
-    void addEventDrivenProcessor(Processor processor);
-
-    /**
-     * This method retrieves the InterceptStrategy instances this route context.
-     *
-     * @return the strategy
-     */
-    List<InterceptStrategy> getInterceptStrategies();
-
-    /**
-     * This method sets the InterceptStrategy instances on this route context.
-     *
-     * @param interceptStrategies the strategies
-     */
-    void setInterceptStrategies(List<InterceptStrategy> interceptStrategies);
-
-    /**
-     * Adds a InterceptStrategy to this route context
-     *
-     * @param interceptStrategy the strategy
-     */
-    void addInterceptStrategy(InterceptStrategy interceptStrategy);
-
-    /**
-     * Sets a special intercept strategy for management.
-     * <p/>
-     * Is by default used to correlate managed performance counters with processors
-     * when the runtime route is being constructed
-     *
-     * @param interceptStrategy the managed intercept strategy
-     */
-    void setManagementInterceptStrategy(ManagementInterceptStrategy interceptStrategy);
-
-    /**
-     * Gets the special managed intercept strategy if any
-     *
-     * @return the managed intercept strategy, or <tt>null</tt> if not managed
-     */
-    ManagementInterceptStrategy getManagementInterceptStrategy();
-
-    /**
-     * If this flag is true, {@link org.apache.camel.reifier.ProcessorReifier#addRoutes(RouteContext)}
-     * will not add processor to addEventDrivenProcessor to the RouteContext and it
-     * will prevent from adding an EventDrivenRoute.
-     *
-     * @param value the flag
-     */
-    void setIsRouteAdded(boolean value);
-
-    void setEndpoint(Endpoint endpoint);
-
-    /**
-     * Returns the isRouteAdded flag
-     *
-     * @return the flag
-     */
-    boolean isRouteAdded();
-
-    /**
-     * Gets the route policy List
-     *
-     * @return the route policy list if any
-     */
-    List<RoutePolicy> getRoutePolicyList();
-
-    /**
-     * Sets a custom route policy List
-     *
-     * @param routePolicyList the custom route policy list
-     */
-    void setRoutePolicyList(List<RoutePolicy> routePolicyList);
-
-    /**
-     * Sets whether the route should automatically start when Camel starts.
-     * <p/>
-     * Default is <tt>true</tt> to always start up.
-     *
-     * @param autoStartup whether to start up automatically.
-     */
-    @Override
-    void setAutoStartup(Boolean autoStartup);
-
-    /**
-     * Gets whether the route should automatically start when Camel starts.
-     * <p/>
-     * Default is <tt>true</tt> to always start up.
-     *
-     * @return <tt>true</tt> if route should automatically start
-     */
-    @Override
-    Boolean isAutoStartup();
-
-    void setStartupOrder(Integer startupOrder);
-
-    Integer getStartupOrder();
-
-    void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory);
-
-    ErrorHandlerFactory getErrorHandlerFactory();
-
-    Processor createErrorHandler(Processor processor) throws Exception;
-
-    void addAdvice(CamelInternalProcessorAdvice<?> advice);
-
-    void addProperty(String key, Object value);
-
-    /**
-     * Gets the last error.
-     *
-     * @return the error
-     */
-    default RouteError getLastError() {
-        return null;
-    }
-
-    /**
-     * Sets the last error.
-     *
-     * @param error the error
-     */
-    default void setLastError(RouteError error) {
-    }
-
-    /**
-     * Gets the  {@link RouteController} for this route.
-     *
-     * @return the route controller,
-     */
-    RouteController getRouteController();
-
-    /**
-     * Sets the {@link RouteController} for this route.
-     *
-     * @param controller the RouteController
-     */
-    void setRouteController(RouteController controller);
-
-    Processor getOnCompletion(String onCompletionId);
-
-    void setOnCompletion(String onCompletionId, Processor processor);
-
-    Processor getOnException(String onExceptionId);
-
-    void setOnException(String onExceptionId, Processor processor);
-
-    /**
-     * Adds error handler for the given exception type
-     *
-     * @param factory   the error handler factory
-     * @param exception the exception to handle
-     */
-    void addErrorHandler(ErrorHandlerFactory factory, NamedNode exception);
-
-    /**
-     * Gets the error handlers
-     *
-     * @param factory the error handler factory
-     */
-    Set<NamedNode> getErrorHandlers(ErrorHandlerFactory factory);
-
-    /**
-     * Removes the error handlers
-     *
-     * @param factory the error handler factory
-     */
-    void removeErrorHandlers(ErrorHandlerFactory factory);
-
-    /**
-     * Link the error handlers from a factory to another
-     *
-     * @param source the source factory
-     * @param target the target factory
-     */
-    void addErrorHandlerFactoryReference(ErrorHandlerFactory source, ErrorHandlerFactory target);
-
-}
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWork.java b/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWork.java
index 14b20b1..f0bf408 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWork.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/UnitOfWork.java
@@ -151,32 +151,32 @@ public interface UnitOfWork extends Service {
     void endTransactedBy(Object key);
 
     /**
-     * Gets the {@link RouteContext} that this {@link UnitOfWork} currently is being routed through.
+     * Gets the {@link Route} that this {@link UnitOfWork} currently is being routed through.
      * <p/>
      * Notice that an {@link Exchange} can be routed through multiple routes and thus the
-     * {@link org.apache.camel.spi.RouteContext} can change over time.
+     * {@link org.apache.camel.Route} can change over time.
      *
-     * @return the route context, maybe be <tt>null</tt> if not routed through a route currently.
+     * @return the route, maybe be <tt>null</tt> if not routed through a route currently.
      */
-    RouteContext getRouteContext();
+    Route getRoute();
 
     /**
-     * Pushes the {@link RouteContext} that this {@link UnitOfWork} currently is being routed through.
+     * Pushes the {@link Route} that this {@link UnitOfWork} currently is being routed through.
      * <p/>
      * Notice that an {@link Exchange} can be routed through multiple routes and thus the
-     * {@link org.apache.camel.spi.RouteContext} can change over time.
+     * {@link org.apache.camel.Route} can change over time.
      *
-     * @param routeContext the route context
+     * @param route the route
      */
-    void pushRouteContext(RouteContext routeContext);
+    void pushRoute(Route route);
 
     /**
-     * When finished being routed under the current {@link org.apache.camel.spi.RouteContext}
+     * When finished being routed under the current {@link org.apache.camel.Route}
      * it should be removed.
      *
-     * @return the route context or <tt>null</tt> if none existed
+     * @return the route or <tt>null</tt> if none existed
      */
-    RouteContext popRouteContext();
+    Route popRoute();
 
     /**
      * Whether the unit of work should call the before/after process methods or not.
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractRouteContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractRouteContext.java
deleted file mode 100644
index 5bf48b0..0000000
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractRouteContext.java
+++ /dev/null
@@ -1,537 +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.impl.engine;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.LinkedHashSet;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.concurrent.ConcurrentHashMap;
-import java.util.concurrent.ConcurrentMap;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.Endpoint;
-import org.apache.camel.ErrorHandlerFactory;
-import org.apache.camel.NamedNode;
-import org.apache.camel.Processor;
-import org.apache.camel.Route;
-import org.apache.camel.RuntimeCamelException;
-import org.apache.camel.ShutdownRoute;
-import org.apache.camel.ShutdownRunningTask;
-import org.apache.camel.processor.CamelInternalProcessor;
-import org.apache.camel.processor.Pipeline;
-import org.apache.camel.spi.CamelInternalProcessorAdvice;
-import org.apache.camel.spi.InterceptStrategy;
-import org.apache.camel.spi.ManagementInterceptStrategy;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.RouteController;
-import org.apache.camel.spi.RouteError;
-import org.apache.camel.spi.RoutePolicy;
-import org.apache.camel.util.ObjectHelper;
-
-/**
- * The context used to activate new routing rules
- */
-public abstract class AbstractRouteContext implements RouteContext {
-
-    private NamedNode route;
-    private String routeId;
-    private Route runtimeRoute;
-    private Endpoint endpoint;
-    private final List<Processor> eventDrivenProcessors = new ArrayList<>();
-    private CamelContext camelContext;
-    private List<InterceptStrategy> interceptStrategies = new ArrayList<>();
-    private ManagementInterceptStrategy managementInterceptStrategy;
-    private boolean routeAdded;
-    private Boolean trace;
-    private Boolean backlogTrace;
-    private Boolean debug;
-    private Boolean messageHistory;
-    private Boolean logMask;
-    private Boolean logExhaustedMessageBody;
-    private Boolean streamCache;
-    private Long delay;
-    private Boolean autoStartup = Boolean.TRUE;
-    private List<RoutePolicy> routePolicyList = new ArrayList<>();
-    private ShutdownRoute shutdownRoute;
-    private ShutdownRunningTask shutdownRunningTask;
-    private RouteError routeError;
-    private RouteController routeController;
-    private final Map<String, Processor> onCompletions = new HashMap<>();
-    private final Map<String, Processor> onExceptions = new HashMap<>();
-    private final List<CamelInternalProcessorAdvice<?>> advices = new ArrayList<>();
-    private final Map<String, Object> properties = new HashMap<>();
-    private ErrorHandlerFactory errorHandlerFactory;
-    private Integer startupOrder;
-    // must be concurrent as error handlers can be mutated concurrently via multicast/recipientlist EIPs
-    private ConcurrentMap<ErrorHandlerFactory, Set<NamedNode>> errorHandlers = new ConcurrentHashMap<>();
-
-    public AbstractRouteContext(CamelContext camelContext, NamedNode route, String routeId) {
-        this.camelContext = camelContext;
-        this.route = route;
-        this.routeId = routeId;
-    }
-
-    @Override
-    public Endpoint getEndpoint() {
-        return endpoint;
-    }
-
-    @Override
-    public void setEndpoint(Endpoint endpoint) {
-        this.endpoint = endpoint;
-    }
-
-    @Override
-    public NamedNode getRoute() {
-        return route;
-    }
-
-    @Override
-    public String getRouteId() {
-        return routeId;
-    }
-
-    public Route getRuntimeRoute() {
-        return runtimeRoute;
-    }
-
-    @Override
-    public CamelContext getCamelContext() {
-        return camelContext;
-    }
-
-    @Override
-    public Route commit() {
-        // now lets turn all of the event driven consumer processors into a single route
-        if (!eventDrivenProcessors.isEmpty()) {
-            // always use an pipeline even if there are only 1 processor as the pipeline
-            // handles preparing the response from the exchange in regard to IN vs OUT messages etc
-            Processor target = new Pipeline(camelContext, eventDrivenProcessors);
-
-            // and wrap it in a unit of work so the UoW is on the top, so the entire route will be in the same UoW
-            CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, target);
-            internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(this, camelContext));
-
-            // and then optionally add route policy processor if a custom policy is set
-            List<RoutePolicy> routePolicyList = getRoutePolicyList();
-            if (routePolicyList != null && !routePolicyList.isEmpty()) {
-                for (RoutePolicy policy : routePolicyList) {
-                    // add policy as service if we have not already done that (eg possible if two routes have the same service)
-                    // this ensures Camel can control the lifecycle of the policy
-                    if (!camelContext.hasService(policy)) {
-                        try {
-                            camelContext.addService(policy);
-                        } catch (Exception e) {
-                            throw RuntimeCamelException.wrapRuntimeCamelException(e);
-                        }
-                    }
-                }
-
-                internal.addAdvice(new CamelInternalProcessor.RoutePolicyAdvice(routePolicyList));
-            }
-
-            // wrap in route inflight processor to track number of inflight exchanges for the route
-            internal.addAdvice(new CamelInternalProcessor.RouteInflightRepositoryAdvice(camelContext.getInflightRepository(), routeId));
-
-            // wrap in JMX instrumentation processor that is used for performance stats
-            if (managementInterceptStrategy != null) {
-                internal.addAdvice(CamelInternalProcessor.wrap(managementInterceptStrategy.createProcessor("route")));
-            }
-
-            // wrap in route lifecycle
-            internal.addAdvice(new CamelInternalProcessor.RouteLifecycleAdvice());
-
-            // add advices
-            advices.forEach(internal::addAdvice);
-
-            // and create the route that wraps all of this
-            Route edcr = new EventDrivenConsumerRoute(this, getEndpoint(), internal);
-            edcr.getProperties().putAll(properties);
-
-            // after the route is created then set the route on the policy processor so we get hold of it
-            CamelInternalProcessor.RoutePolicyAdvice task = internal.getAdvice(CamelInternalProcessor.RoutePolicyAdvice.class);
-            if (task != null) {
-                task.setRoute(edcr);
-            }
-            CamelInternalProcessor.RouteLifecycleAdvice task2 = internal.getAdvice(CamelInternalProcessor.RouteLifecycleAdvice.class);
-            if (task2 != null) {
-                task2.setRoute(edcr);
-            }
-
-            // invoke init on route policy
-            if (routePolicyList != null && !routePolicyList.isEmpty()) {
-                for (RoutePolicy policy : routePolicyList) {
-                    policy.onInit(edcr);
-                }
-            }
-
-            runtimeRoute = edcr;
-        }
-        return runtimeRoute;
-    }
-
-    @Override
-    public void addEventDrivenProcessor(Processor processor) {
-        eventDrivenProcessors.add(processor);
-    }
-
-    @Override
-    public List<InterceptStrategy> getInterceptStrategies() {
-        return interceptStrategies;
-    }
-
-    @Override
-    public void setInterceptStrategies(List<InterceptStrategy> interceptStrategies) {
-        this.interceptStrategies = interceptStrategies;
-    }
-
-    @Override
-    public void addInterceptStrategy(InterceptStrategy interceptStrategy) {
-        getInterceptStrategies().add(interceptStrategy);
-    }
-
-    @Override
-    public void setManagementInterceptStrategy(ManagementInterceptStrategy interceptStrategy) {
-        this.managementInterceptStrategy = interceptStrategy;
-    }
-
-    @Override
-    public ManagementInterceptStrategy getManagementInterceptStrategy() {
-        return managementInterceptStrategy;
-    }
-
-    @Override
-    public boolean isRouteAdded() {
-        return routeAdded;
-    }
-
-    @Override
-    public void setIsRouteAdded(boolean routeAdded) {
-        this.routeAdded = routeAdded;
-    }
-
-    @Override
-    public void setTracing(Boolean tracing) {
-        this.trace = tracing;
-    }
-
-    @Override
-    public Boolean isTracing() {
-        if (trace != null) {
-            return trace;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.isTracing();
-        }
-    }
-
-    @Override
-    public String getTracingPattern() {
-        // can only set this on context level
-        return camelContext.getTracingPattern();
-    }
-
-    @Override
-    public void setTracingPattern(String tracePattern) {
-        // can only set this on context level
-        camelContext.setTracingPattern(tracePattern);
-    }
-
-    @Override
-    public void setBacklogTracing(Boolean backlogTrace) {
-        this.backlogTrace = backlogTrace;
-    }
-
-    @Override
-    public Boolean isBacklogTracing() {
-        if (backlogTrace != null) {
-            return backlogTrace;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.isBacklogTracing();
-        }
-    }
-
-    @Override
-    public void setDebugging(Boolean debugging) {
-        this.debug = debugging;
-    }
-
-    @Override
-    public Boolean isDebugging() {
-        if (debug != null) {
-            return debug;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.isDebugging();
-        }
-    }
-
-    @Override
-    public void setMessageHistory(Boolean messageHistory) {
-        this.messageHistory = messageHistory;
-    }
-
-    @Override
-    public Boolean isMessageHistory() {
-        if (messageHistory != null) {
-            return messageHistory;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.isMessageHistory();
-        }
-    }
-
-    @Override
-    public void setLogMask(Boolean logMask) {
-        this.logMask = logMask;
-    }
-
-    @Override
-    public Boolean isLogMask() {
-        if (logMask != null) {
-            return logMask;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.isLogMask();
-        }
-    }
-
-    @Override
-    public void setLogExhaustedMessageBody(Boolean logExhaustedMessageBody) {
-        this.logExhaustedMessageBody = logExhaustedMessageBody;
-    }
-
-    @Override
-    public Boolean isLogExhaustedMessageBody() {
-        if (logExhaustedMessageBody != null) {
-            return logExhaustedMessageBody;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.isLogExhaustedMessageBody();
-        }
-    }
-
-    @Override
-    public void setStreamCaching(Boolean cache) {
-        this.streamCache = cache;
-    }
-
-    @Override
-    public Boolean isStreamCaching() {
-        if (streamCache != null) {
-            return streamCache;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.isStreamCaching();
-        }
-    }
-
-    @Override
-    public void setDelayer(Long delay) {
-        this.delay = delay;
-    }
-
-    @Override
-    public Long getDelayer() {
-        if (delay != null) {
-            return delay;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.getDelayer();
-        }
-    }
-
-    @Override
-    public void setAutoStartup(Boolean autoStartup) {
-        this.autoStartup = autoStartup;
-    }
-
-    @Override
-    public Boolean isAutoStartup() {
-        if (autoStartup != null) {
-            return autoStartup;
-        }
-        // default to true
-        return true;
-    }
-
-    @Override
-    public void setStartupOrder(Integer startupOrder) {
-        this.startupOrder = startupOrder;
-    }
-
-    @Override
-    public Integer getStartupOrder() {
-        return startupOrder;
-    }
-
-    @Override
-    public void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory) {
-        this.errorHandlerFactory = errorHandlerFactory;
-    }
-
-    @Override
-    public ErrorHandlerFactory getErrorHandlerFactory() {
-        return errorHandlerFactory;
-    }
-
-    @Override
-    public void setShutdownRoute(ShutdownRoute shutdownRoute) {
-        this.shutdownRoute = shutdownRoute;
-    }
-
-    @Override
-    public void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage) {
-        // can only be configured on CamelContext
-        camelContext.setAllowUseOriginalMessage(allowUseOriginalMessage);
-    }
-
-    @Override
-    public Boolean isAllowUseOriginalMessage() {
-        // can only be configured on CamelContext
-        return camelContext.isAllowUseOriginalMessage();
-    }
-
-    @Override
-    public Boolean isCaseInsensitiveHeaders() {
-        // can only be configured on CamelContext
-        return camelContext.isCaseInsensitiveHeaders();
-    }
-
-    @Override
-    public void setCaseInsensitiveHeaders(Boolean caseInsensitiveHeaders) {
-        // can only be configured on CamelContext
-        camelContext.setCaseInsensitiveHeaders(caseInsensitiveHeaders);
-    }
-
-    @Override
-    public ShutdownRoute getShutdownRoute() {
-        if (shutdownRoute != null) {
-            return shutdownRoute;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.getShutdownRoute();
-        }
-    }
-
-    @Override
-    public void setShutdownRunningTask(ShutdownRunningTask shutdownRunningTask) {
-        this.shutdownRunningTask = shutdownRunningTask;
-    }
-
-    @Override
-    public ShutdownRunningTask getShutdownRunningTask() {
-        if (shutdownRunningTask != null) {
-            return shutdownRunningTask;
-        } else {
-            // fallback to the option from camel context
-            return camelContext.getShutdownRunningTask();
-        }
-    }
-
-    @Override
-    public void setRoutePolicyList(List<RoutePolicy> routePolicyList) {
-        this.routePolicyList = routePolicyList;
-    }
-
-    @Override
-    public List<RoutePolicy> getRoutePolicyList() {
-        return routePolicyList;
-    }
-
-    @Override
-    public RouteError getLastError() {
-        return routeError;
-    }
-
-    @Override
-    public void setLastError(RouteError routeError) {
-        this.routeError = routeError;
-    }
-
-    @Override
-    public RouteController getRouteController() {
-        return routeController;
-    }
-
-    @Override
-    public void setRouteController(RouteController routeController) {
-        this.routeController = routeController;
-    }
-
-    @Override
-    public Processor getOnCompletion(String onCompletionId) {
-        return onCompletions.get(onCompletionId);
-    }
-
-    @Override
-    public void setOnCompletion(String onCompletionId, Processor processor) {
-        onCompletions.put(onCompletionId, processor);
-    }
-
-    @Override
-    public Processor getOnException(String onExceptionId) {
-        return onExceptions.get(onExceptionId);
-    }
-
-    @Override
-    public void setOnException(String onExceptionId, Processor processor) {
-        onExceptions.put(onExceptionId, processor);
-    }
-
-    @Override
-    public void addAdvice(CamelInternalProcessorAdvice<?> advice) {
-        advices.add(advice);
-    }
-
-    @Override
-    public void addProperty(String key, Object value) {
-        properties.put(key, value);
-    }
-
-    @Override
-    public void addErrorHandler(ErrorHandlerFactory factory, NamedNode onException) {
-        doGetErrorHandlers(factory).add(onException);
-    }
-
-    @Override
-    public Set<NamedNode> getErrorHandlers(ErrorHandlerFactory factory) {
-        return doGetErrorHandlers(factory);
-    }
-
-    public void removeErrorHandlers(ErrorHandlerFactory factory) {
-        errorHandlers.remove(factory);
-    }
-
-    @Override
-    public void addErrorHandlerFactoryReference(ErrorHandlerFactory source, ErrorHandlerFactory target) {
-        Set<NamedNode> list = doGetErrorHandlers(source);
-        Set<NamedNode> previous = errorHandlers.put(target, list);
-        if (list != previous && ObjectHelper.isNotEmpty(previous) && ObjectHelper.isNotEmpty(list)) {
-            throw new IllegalStateException("Multiple references with different handlers");
-        }
-    }
-
-    public Set<NamedNode> doGetErrorHandlers(ErrorHandlerFactory factory) {
-        return errorHandlers.computeIfAbsent(factory, f -> new LinkedHashSet<>());
-    }
-
-}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
index 27748fd..3e66d9d 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/BaseRouteService.java
@@ -40,7 +40,6 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Service;
 import org.apache.camel.processor.ErrorHandler;
 import org.apache.camel.spi.LifecycleStrategy;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.support.ChildServiceSupport;
@@ -58,7 +57,6 @@ import static org.apache.camel.spi.UnitOfWork.MDC_ROUTE_ID;
 public abstract class BaseRouteService extends ChildServiceSupport {
 
     private final AbstractCamelContext camelContext;
-    private final RouteContext routeContext;
     private final Route route;
     private boolean removingRoutes;
     private final Map<Route, Consumer> inputs = new HashMap<>();
@@ -67,8 +65,7 @@ public abstract class BaseRouteService extends ChildServiceSupport {
 
     public BaseRouteService(Route route) {
         this.route = route;
-        this.routeContext = this.route.getRouteContext();
-        this.camelContext = this.routeContext.getCamelContext().adapt(AbstractCamelContext.class);
+        this.camelContext = this.route.getCamelContext().adapt(AbstractCamelContext.class);
     }
 
     public String getId() {
@@ -79,10 +76,6 @@ public abstract class BaseRouteService extends ChildServiceSupport {
         return camelContext;
     }
 
-    public RouteContext getRouteContext() {
-        return routeContext;
-    }
-
     public Route getRoute() {
         return route;
     }
@@ -324,8 +317,8 @@ public abstract class BaseRouteService extends ChildServiceSupport {
     }
 
     private void routePolicyCallback(java.util.function.BiConsumer<RoutePolicy, Route> callback) {
-        if (routeContext.getRoutePolicyList() != null) {
-            for (RoutePolicy routePolicy : routeContext.getRoutePolicyList()) {
+        if (route.getRoutePolicyList() != null) {
+            for (RoutePolicy routePolicy : route.getRoutePolicyList()) {
                 callback.accept(routePolicy, route);
             }
         }
@@ -346,8 +339,8 @@ public abstract class BaseRouteService extends ChildServiceSupport {
             if (service instanceof ErrorHandler) {
                 // special for error handlers
                 for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-                    ErrorHandlerFactory errorHandlerFactory = routeContext.getErrorHandlerFactory();
-                    strategy.onErrorHandlerRemove(routeContext, (Processor) service, errorHandlerFactory);
+                    ErrorHandlerFactory errorHandlerFactory = route.getErrorHandlerFactory();
+                    strategy.onErrorHandlerRemove(route, (Processor) service, errorHandlerFactory);
                 }
             } else {
                 for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAsyncProcessorAwaitManager.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAsyncProcessorAwaitManager.java
index 3db01a4..f3c2ad9 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAsyncProcessorAwaitManager.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAsyncProcessorAwaitManager.java
@@ -33,8 +33,7 @@ import org.apache.camel.StaticService;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.spi.ReactiveExecutor;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.UnitOfWork;
+import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.MessageHelper;
 import org.apache.camel.support.processor.DefaultExchangeFormatter;
 import org.apache.camel.support.service.ServiceSupport;
@@ -308,13 +307,7 @@ public class DefaultAsyncProcessorAwaitManager extends ServiceSupport implements
 
         @Override
         public String getRouteId() {
-            // compute route id
-            UnitOfWork uow = exchange.getUnitOfWork();
-            RouteContext rc = uow != null ? uow.getRouteContext() : null;
-            if (rc != null) {
-                return rc.getRouteId();
-            }
-            return null;
+            return ExchangeHelper.getAtRouteId(exchange);
         }
 
         @Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java
index b1e13b8..79adbe9 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInflightRepository.java
@@ -31,8 +31,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedExchange;
 import org.apache.camel.MessageHistory;
 import org.apache.camel.spi.InflightRepository;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.UnitOfWork;
+import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.service.ServiceSupport;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -272,13 +271,7 @@ public class DefaultInflightRepository extends ServiceSupport implements Infligh
         @Override
         @SuppressWarnings("unchecked")
         public String getAtRouteId() {
-            // compute route id
-            UnitOfWork uow = exchange.getUnitOfWork();
-            RouteContext rc = uow != null ? uow.getRouteContext() : null;
-            if (rc != null) {
-                return rc.getRouteId();
-            }
-            return null;
+            return ExchangeHelper.getAtRouteId(exchange);
         }
 
         @Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProcessorFactory.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProcessorFactory.java
index d6f07fb..3fd256a 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProcessorFactory.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProcessorFactory.java
@@ -26,11 +26,11 @@ import org.apache.camel.NamedNode;
 import org.apache.camel.NoFactoryAvailableException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.Route;
 import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.processor.UnitOfWorkProducer;
 import org.apache.camel.spi.FactoryFinder;
 import org.apache.camel.spi.ProcessorFactory;
-import org.apache.camel.spi.RouteContext;
 
 /**
  * Default {@link ProcessorFactory} that supports using 3rd party Camel components to implement the EIP {@link Processor}.
@@ -48,15 +48,15 @@ public class DefaultProcessorFactory implements ProcessorFactory {
     public static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/model/";
 
     @Override
-    public Processor createChildProcessor(RouteContext routeContext, NamedNode definition, boolean mandatory) throws Exception {
+    public Processor createChildProcessor(Route route, NamedNode definition, boolean mandatory) throws Exception {
         String name = definition.getClass().getSimpleName();
-        FactoryFinder finder = routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH);
+        FactoryFinder finder = route.getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH);
         try {
             if (finder != null) {
                 Object object = finder.newInstance(name);
                 if (object instanceof ProcessorFactory) {
                     ProcessorFactory pc = (ProcessorFactory) object;
-                    return pc.createChildProcessor(routeContext, definition, mandatory);
+                    return pc.createChildProcessor(route, definition, mandatory);
                 }
             }
         } catch (NoFactoryAvailableException e) {
@@ -67,13 +67,13 @@ public class DefaultProcessorFactory implements ProcessorFactory {
     }
 
     @Override
-    public Processor createProcessor(RouteContext routeContext, NamedNode definition) throws Exception {
+    public Processor createProcessor(Route route, NamedNode definition) throws Exception {
         String name = definition.getClass().getSimpleName();
-        FactoryFinder finder = routeContext.getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH);
+        FactoryFinder finder = route.getCamelContext().adapt(ExtendedCamelContext.class).getFactoryFinder(RESOURCE_PATH);
         if (finder != null) {
             ProcessorFactory pc = finder.newInstance(name, ProcessorFactory.class).orElse(null);
             if (pc != null) {
-                return pc.createProcessor(routeContext, definition);
+                return pc.createProcessor(route, definition);
             }
         }
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java
index ee0bcf3..47f6602 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRoute.java
@@ -19,15 +19,37 @@ package org.apache.camel.impl.engine;
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
+import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Map;
+import java.util.Set;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
 
 import org.apache.camel.CamelContext;
+import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
+import org.apache.camel.ErrorHandlerFactory;
+import org.apache.camel.NamedNode;
+import org.apache.camel.Navigate;
+import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.RouteAware;
 import org.apache.camel.Service;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.ShutdownRoute;
+import org.apache.camel.ShutdownRunningTask;
+import org.apache.camel.Suspendable;
+import org.apache.camel.SuspendableService;
+import org.apache.camel.spi.IdAware;
+import org.apache.camel.spi.InterceptStrategy;
+import org.apache.camel.spi.ManagementInterceptStrategy;
+import org.apache.camel.spi.RouteController;
+import org.apache.camel.spi.RouteError;
+import org.apache.camel.spi.RouteIdAware;
+import org.apache.camel.spi.RoutePolicy;
+import org.apache.camel.support.PatternHelper;
 import org.apache.camel.support.service.ServiceSupport;
+import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.TimeUtils;
 
 /**
@@ -37,29 +59,53 @@ import org.apache.camel.util.TimeUtils;
  * such as starting and stopping using the {@link org.apache.camel.spi.RouteController#startRoute(String)}
  * and {@link org.apache.camel.spi.RouteController#stopRoute(String)} methods.
  */
-public abstract class DefaultRoute extends ServiceSupport implements Route {
+public class DefaultRoute extends ServiceSupport implements Route {
+
+    private NamedNode route;
+    private String routeId;
+    private final List<Processor> eventDrivenProcessors = new ArrayList<>();
+    private CamelContext camelContext;
+    private List<InterceptStrategy> interceptStrategies = new ArrayList<>();
+    private ManagementInterceptStrategy managementInterceptStrategy;
+    private Boolean trace;
+    private Boolean backlogTrace;
+    private Boolean debug;
+    private Boolean messageHistory;
+    private Boolean logMask;
+    private Boolean logExhaustedMessageBody;
+    private Boolean streamCache;
+    private Long delay;
+    private Boolean autoStartup = Boolean.TRUE;
+    private final List<RoutePolicy> routePolicyList = new ArrayList<>();
+    private ShutdownRoute shutdownRoute;
+    private ShutdownRunningTask shutdownRunningTask;
+    private final Map<String, Processor> onCompletions = new HashMap<>();
+    private final Map<String, Processor> onExceptions = new HashMap<>();
+    private ErrorHandlerFactory errorHandlerFactory;
+    // must be concurrent as error handlers can be mutated concurrently via multicast/recipientlist EIPs
+    private ConcurrentMap<ErrorHandlerFactory, Set<NamedNode>> errorHandlers = new ConcurrentHashMap<>();
 
     private final Endpoint endpoint;
     private final Map<String, Object> properties = new HashMap<>();
     private final List<Service> services = new ArrayList<>();
-    private final RouteContext routeContext;
     private Date startDate;
+    private RouteError routeError;
+    private Integer startupOrder;
+    private RouteController routeController;
 
-    public DefaultRoute(RouteContext routeContext, Endpoint endpoint) {
-        this.routeContext = routeContext;
-        this.endpoint = endpoint;
-    }
+    private Processor processor;
+    private Consumer consumer;
 
-    public DefaultRoute(RouteContext routeContext, Endpoint endpoint, Service... services) {
-        this(routeContext, endpoint);
-        for (Service service : services) {
-            addService(service);
-        }
+    public DefaultRoute(CamelContext camelContext, NamedNode route, String routeId, Endpoint endpoint) {
+        this.camelContext = camelContext;
+        this.route = route;
+        this.routeId = routeId;
+        this.endpoint = endpoint;
     }
 
     @Override
-    public String toString() {
-        return "Route " + getId();
+    public Processor createErrorHandler(Processor processor) throws Exception {
+        throw new UnsupportedOperationException();
     }
 
     @Override
@@ -95,13 +141,8 @@ public abstract class DefaultRoute extends ServiceSupport implements Route {
     }
 
     @Override
-    public RouteContext getRouteContext() {
-        return routeContext;
-    }
-
-    @Override
     public CamelContext getCamelContext() {
-        return routeContext.getCamelContext();
+        return camelContext;
     }
 
     @Override
@@ -153,12 +194,6 @@ public abstract class DefaultRoute extends ServiceSupport implements Route {
         super.stop();
     }
 
-    /**
-     * Strategy method to allow derived classes to lazily load services for the route
-     */
-    protected void addServices(List<Service> services) throws Exception {
-    }
-
     @Override
     protected void doStart() throws Exception {
         startDate = new Date();
@@ -177,4 +212,407 @@ public abstract class DefaultRoute extends ServiceSupport implements Route {
         // clear services when shutting down
         services.clear();
     }
+
+    @Override
+    public RouteError getLastError() {
+        return routeError;
+    }
+
+    @Override
+    public void setLastError(RouteError routeError) {
+        this.routeError = routeError;
+    }
+
+    @Override
+    public Integer getStartupOrder() {
+        return startupOrder;
+    }
+
+    @Override
+    public void setStartupOrder(Integer startupOrder) {
+        this.startupOrder = startupOrder;
+    }
+
+    public RouteController getRouteController() {
+        return routeController;
+    }
+
+    public void setRouteController(RouteController routeController) {
+        this.routeController = routeController;
+    }
+
+    public Boolean isAutoStartup() {
+        return autoStartup;
+    }
+
+    @Override
+    public void setAutoStartup(Boolean autoStartup) {
+        this.autoStartup = autoStartup;
+    }
+
+    @Override
+    public NamedNode getRoute() {
+        return route;
+    }
+
+    @Override
+    public String getRouteId() {
+        return routeId;
+    }
+
+    public List<Processor> getEventDrivenProcessors() {
+        return eventDrivenProcessors;
+    }
+
+    @Override
+    public List<InterceptStrategy> getInterceptStrategies() {
+        return interceptStrategies;
+    }
+
+    @Override
+    public void setManagementInterceptStrategy(ManagementInterceptStrategy interceptStrategy) {
+        this.managementInterceptStrategy = interceptStrategy;
+    }
+
+    @Override
+    public ManagementInterceptStrategy getManagementInterceptStrategy() {
+        return managementInterceptStrategy;
+    }
+
+    @Override
+    public void setTracing(Boolean tracing) {
+        this.trace = tracing;
+    }
+
+    @Override
+    public Boolean isTracing() {
+        if (trace != null) {
+            return trace;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.isTracing();
+        }
+    }
+
+    @Override
+    public String getTracingPattern() {
+        // can only set this on context level
+        return camelContext.getTracingPattern();
+    }
+
+    @Override
+    public void setTracingPattern(String tracePattern) {
+        // can only set this on context level
+        camelContext.setTracingPattern(tracePattern);
+    }
+
+    @Override
+    public void setBacklogTracing(Boolean backlogTrace) {
+        this.backlogTrace = backlogTrace;
+    }
+
+    @Override
+    public Boolean isBacklogTracing() {
+        if (backlogTrace != null) {
+            return backlogTrace;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.isBacklogTracing();
+        }
+    }
+
+    @Override
+    public void setDebugging(Boolean debugging) {
+        this.debug = debugging;
+    }
+
+    @Override
+    public Boolean isDebugging() {
+        if (debug != null) {
+            return debug;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.isDebugging();
+        }
+    }
+
+    @Override
+    public void setMessageHistory(Boolean messageHistory) {
+        this.messageHistory = messageHistory;
+    }
+
+    @Override
+    public Boolean isMessageHistory() {
+        if (messageHistory != null) {
+            return messageHistory;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.isMessageHistory();
+        }
+    }
+
+    @Override
+    public void setLogMask(Boolean logMask) {
+        this.logMask = logMask;
+    }
+
+    @Override
+    public Boolean isLogMask() {
+        if (logMask != null) {
+            return logMask;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.isLogMask();
+        }
+    }
+
+    @Override
+    public void setLogExhaustedMessageBody(Boolean logExhaustedMessageBody) {
+        this.logExhaustedMessageBody = logExhaustedMessageBody;
+    }
+
+    @Override
+    public Boolean isLogExhaustedMessageBody() {
+        if (logExhaustedMessageBody != null) {
+            return logExhaustedMessageBody;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.isLogExhaustedMessageBody();
+        }
+    }
+
+    @Override
+    public void setStreamCaching(Boolean cache) {
+        this.streamCache = cache;
+    }
+
+    @Override
+    public Boolean isStreamCaching() {
+        if (streamCache != null) {
+            return streamCache;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.isStreamCaching();
+        }
+    }
+
+    @Override
+    public void setDelayer(Long delay) {
+        this.delay = delay;
+    }
+
+    @Override
+    public Long getDelayer() {
+        if (delay != null) {
+            return delay;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.getDelayer();
+        }
+    }
+
+    @Override
+    public void setErrorHandlerFactory(ErrorHandlerFactory errorHandlerFactory) {
+        this.errorHandlerFactory = errorHandlerFactory;
+    }
+
+    @Override
+    public ErrorHandlerFactory getErrorHandlerFactory() {
+        return errorHandlerFactory;
+    }
+
+    @Override
+    public void setShutdownRoute(ShutdownRoute shutdownRoute) {
+        this.shutdownRoute = shutdownRoute;
+    }
+
+    @Override
+    public void setAllowUseOriginalMessage(Boolean allowUseOriginalMessage) {
+        // can only be configured on CamelContext
+        camelContext.setAllowUseOriginalMessage(allowUseOriginalMessage);
+    }
+
+    @Override
+    public Boolean isAllowUseOriginalMessage() {
+        // can only be configured on CamelContext
+        return camelContext.isAllowUseOriginalMessage();
+    }
+
+    @Override
+    public Boolean isCaseInsensitiveHeaders() {
+        // can only be configured on CamelContext
+        return camelContext.isCaseInsensitiveHeaders();
+    }
+
+    @Override
+    public void setCaseInsensitiveHeaders(Boolean caseInsensitiveHeaders) {
+        // can only be configured on CamelContext
+        camelContext.setCaseInsensitiveHeaders(caseInsensitiveHeaders);
+    }
+
+    @Override
+    public ShutdownRoute getShutdownRoute() {
+        if (shutdownRoute != null) {
+            return shutdownRoute;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.getShutdownRoute();
+        }
+    }
+
+    @Override
+    public void setShutdownRunningTask(ShutdownRunningTask shutdownRunningTask) {
+        this.shutdownRunningTask = shutdownRunningTask;
+    }
+
+    @Override
+    public ShutdownRunningTask getShutdownRunningTask() {
+        if (shutdownRunningTask != null) {
+            return shutdownRunningTask;
+        } else {
+            // fallback to the option from camel context
+            return camelContext.getShutdownRunningTask();
+        }
+    }
+
+    @Override
+    public List<RoutePolicy> getRoutePolicyList() {
+        return routePolicyList;
+    }
+
+    @Override
+    public Processor getOnCompletion(String onCompletionId) {
+        return onCompletions.get(onCompletionId);
+    }
+
+    @Override
+    public void setOnCompletion(String onCompletionId, Processor processor) {
+        onCompletions.put(onCompletionId, processor);
+    }
+
+    @Override
+    public Processor getOnException(String onExceptionId) {
+        return onExceptions.get(onExceptionId);
+    }
+
+    @Override
+    public void setOnException(String onExceptionId, Processor processor) {
+        onExceptions.put(onExceptionId, processor);
+    }
+
+    @Override
+    public Set<NamedNode> getErrorHandlers(ErrorHandlerFactory factory) {
+        return errorHandlers.computeIfAbsent(factory, f -> new LinkedHashSet<>());
+    }
+
+    @Override
+    public void addErrorHandler(ErrorHandlerFactory factory, NamedNode onException) {
+        errorHandlers.computeIfAbsent(factory, f -> new LinkedHashSet<>()).add(onException);
+    }
+
+    @Override
+    public void addErrorHandlerFactoryReference(ErrorHandlerFactory source, ErrorHandlerFactory target) {
+        Set<NamedNode> list = errorHandlers.computeIfAbsent(source, f -> new LinkedHashSet<>());
+        Set<NamedNode> previous = errorHandlers.put(target, list);
+        if (list != previous && ObjectHelper.isNotEmpty(previous) && ObjectHelper.isNotEmpty(list)) {
+            throw new IllegalStateException("Multiple references with different handlers");
+        }
+    }
+
+    @Override
+    public String toString() {
+        return "Route[" + getEndpoint() + " -> " + processor + "]";
+    }
+
+    @Override
+    public Processor getProcessor() {
+        return processor;
+    }
+
+    public void setProcessor(Processor processor) {
+        this.processor = processor;
+    }
+
+    /**
+     * Factory method to lazily create the complete list of services required for this route
+     * such as adding the processor or consumer
+     */
+    protected void addServices(List<Service> services) throws Exception {
+        Endpoint endpoint = getEndpoint();
+        consumer = endpoint.createConsumer(processor);
+        if (consumer != null) {
+            services.add(consumer);
+            if (consumer instanceof RouteAware) {
+                ((RouteAware) consumer).setRoute(this);
+            }
+            if (consumer instanceof RouteIdAware) {
+                ((RouteIdAware) consumer).setRouteId(this.getId());
+            }
+        }
+        Processor processor = getProcessor();
+        if (processor instanceof Service) {
+            services.add((Service)processor);
+        }
+    }
+
+    @Override
+    @SuppressWarnings("unchecked")
+    public Navigate<Processor> navigate() {
+        Processor answer = getProcessor();
+
+        // we want navigating routes to be easy, so skip the initial channel
+        // and navigate to its output where it all starts from end user point of view
+        if (answer instanceof Navigate) {
+            Navigate<Processor> nav = (Navigate<Processor>) answer;
+            if (nav.next().size() == 1) {
+                Object first = nav.next().get(0);
+                if (first instanceof Navigate) {
+                    return (Navigate<Processor>) first;
+                }
+            }
+            return (Navigate<Processor>) answer;
+        }
+        return null;
+    }
+
+    @Override
+    public List<Processor> filter(String pattern) {
+        List<Processor> match = new ArrayList<>();
+        doFilter(pattern, navigate(), match);
+        return match;
+    }
+
+    @SuppressWarnings("unchecked")
+    private void doFilter(String pattern, Navigate<Processor> nav, List<Processor> match) {
+        List<Processor> list = nav.next();
+        if (list != null) {
+            for (Processor proc : list) {
+                String id = null;
+                if (proc instanceof IdAware) {
+                    id = ((IdAware) proc).getId();
+                }
+                if (PatternHelper.matchPattern(id, pattern)) {
+                    match.add(proc);
+                }
+                if (proc instanceof Navigate) {
+                    Navigate<Processor> child = (Navigate<Processor>) proc;
+                    doFilter(pattern, child, match);
+                }
+            }
+        }
+    }
+
+    @Override
+    public Consumer getConsumer() {
+        return consumer;
+    }
+
+    @Override
+    public boolean supportsSuspension() {
+        return consumer instanceof Suspendable && consumer instanceof SuspendableService;
+    }
+
+    public void initialized() {
+
+    }
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteError.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteError.java
index 06c3ae7..42de2e2 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteError.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRouteError.java
@@ -54,14 +54,14 @@ public class DefaultRouteError implements RouteError {
     public static void set(CamelContext context, String routeId, RouteError.Phase phase, Throwable throwable) {
         Route route = context.getRoute(routeId);
         if (route != null) {
-            route.getRouteContext().setLastError(new DefaultRouteError(phase, throwable));
+            route.setLastError(new DefaultRouteError(phase, throwable));
         }
     }
 
     public static void reset(CamelContext context, String routeId) {
         Route route = context.getRoute(routeId);
         if (route != null) {
-            route.getRouteContext().setLastError(null);
+            route.setLastError(null);
         }
     }
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRuntimeEndpointRegistry.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRuntimeEndpointRegistry.java
index b796d8d..956c4726 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRuntimeEndpointRegistry.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultRuntimeEndpointRegistry.java
@@ -27,18 +27,15 @@ import java.util.Set;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Endpoint;
-import org.apache.camel.Exchange;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
 import org.apache.camel.spi.CamelEvent.ExchangeSendingEvent;
 import org.apache.camel.spi.CamelEvent.RouteAddedEvent;
 import org.apache.camel.spi.CamelEvent.RouteRemovedEvent;
 import org.apache.camel.spi.EndpointUtilizationStatistics;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RuntimeEndpointRegistry;
-import org.apache.camel.spi.UnitOfWork;
-import org.apache.camel.support.DefaultConsumer;
 import org.apache.camel.support.EventNotifierSupport;
+import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.LRUCacheFactory;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -261,7 +258,7 @@ public class DefaultRuntimeEndpointRegistry extends EventNotifierSupport impleme
         } else if (event instanceof ExchangeSendingEvent) {
             ExchangeSendingEvent ese = (ExchangeSendingEvent) event;
             Endpoint endpoint = ese.getEndpoint();
-            String routeId = getRouteId(ese.getExchange());
+            String routeId = ExchangeHelper.getRouteId(ese.getExchange());
             String uri = endpoint.getEndpointUri();
 
             Map<String, String> uris = outputs.get(routeId);
@@ -277,20 +274,6 @@ public class DefaultRuntimeEndpointRegistry extends EventNotifierSupport impleme
         }
     }
 
-    private String getRouteId(Exchange exchange) {
-        String answer = null;
-        UnitOfWork uow = exchange.getUnitOfWork();
-        RouteContext rc = uow != null ? uow.getRouteContext() : null;
-        if (rc != null) {
-            answer = rc.getRouteId();
-        }
-        if (answer == null) {
-            // fallback and get from route id on the exchange
-            answer = exchange.getFromRouteId();
-        }
-        return answer;
-    }
-
     @Override
     public boolean isDisabled() {
         return !enabled;
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultShutdownStrategy.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultShutdownStrategy.java
index 0c971c4..4210f28 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultShutdownStrategy.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultShutdownStrategy.java
@@ -360,11 +360,11 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
 
             // set the route to shutdown as fast as possible by stopping after
             // it has completed its current task
-            ShutdownRunningTask current = order.getRoute().getRouteContext().getShutdownRunningTask();
+            ShutdownRunningTask current = order.getRoute().getShutdownRunningTask();
             if (current != ShutdownRunningTask.CompleteCurrentTaskOnly) {
                 LOG.debug("Changing shutdownRunningTask from {} to " +  ShutdownRunningTask.CompleteCurrentTaskOnly
                     + " on route {} to shutdown faster", current, order.getRoute().getId());
-                order.getRoute().getRouteContext().setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly);
+                order.getRoute().setShutdownRunningTask(ShutdownRunningTask.CompleteCurrentTaskOnly);
             }
 
             for (Consumer consumer : order.getInputs()) {
@@ -555,8 +555,8 @@ public class DefaultShutdownStrategy extends ServiceSupport implements ShutdownS
             List<ShutdownDeferredConsumer> deferredConsumers = new ArrayList<>();
             for (RouteStartupOrder order : routes) {
 
-                ShutdownRoute shutdownRoute = order.getRoute().getRouteContext().getShutdownRoute();
-                ShutdownRunningTask shutdownRunningTask = order.getRoute().getRouteContext().getShutdownRunningTask();
+                ShutdownRoute shutdownRoute = order.getRoute().getShutdownRoute();
+                ShutdownRunningTask shutdownRunningTask = order.getRoute().getShutdownRunningTask();
 
                 if (LOG.isTraceEnabled()) {
                     LOG.trace("{}{} with options [{},{}]",
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
index 2b5167e..e404de5 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultUnitOfWork.java
@@ -24,7 +24,6 @@ import java.util.Set;
 import java.util.function.Predicate;
 
 import org.apache.camel.AsyncCallback;
-import org.apache.camel.CamelContext;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.ExtendedExchange;
@@ -33,7 +32,6 @@ import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.spi.InflightRepository;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.spi.SynchronizationVetoable;
 import org.apache.camel.spi.UnitOfWork;
@@ -62,8 +60,8 @@ public class DefaultUnitOfWork implements UnitOfWork, Service {
     private final Exchange exchange;
     private final ExtendedCamelContext context;
     private Logger log;
-    private RouteContext prevRouteContext;
-    private RouteContext routeContext;
+    private Route prevRoute;
+    private Route route;
     private List<Synchronization> synchronizations;
     private Message originalInMessage;
     private Set<Object> transactedBy;
@@ -287,21 +285,21 @@ public class DefaultUnitOfWork implements UnitOfWork, Service {
     }
 
     @Override
-    public RouteContext getRouteContext() {
-        return routeContext;
+    public Route getRoute() {
+        return route;
     }
 
     @Override
-    public void pushRouteContext(RouteContext routeContext) {
-        this.prevRouteContext = this.routeContext;
-        this.routeContext = routeContext;
+    public void pushRoute(Route route) {
+        this.prevRoute = this.route;
+        this.route = route;
     }
 
     @Override
-    public RouteContext popRouteContext() {
-        RouteContext answer = this.routeContext;
-        this.routeContext = this.prevRouteContext;
-        this.prevRouteContext = null;
+    public Route popRoute() {
+        Route answer = this.route;
+        this.route = this.prevRoute;
+        this.prevRoute = null;
         return answer;
     }
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/EventDrivenConsumerRoute.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/EventDrivenConsumerRoute.java
deleted file mode 100644
index aacf546..0000000
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/EventDrivenConsumerRoute.java
+++ /dev/null
@@ -1,141 +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.impl.engine;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import org.apache.camel.Consumer;
-import org.apache.camel.Endpoint;
-import org.apache.camel.Navigate;
-import org.apache.camel.Processor;
-import org.apache.camel.RouteAware;
-import org.apache.camel.Service;
-import org.apache.camel.Suspendable;
-import org.apache.camel.SuspendableService;
-import org.apache.camel.spi.IdAware;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.RouteIdAware;
-import org.apache.camel.support.PatternHelper;
-
-/**
- * A {@link DefaultRoute} which starts with an
- * <a href="http://camel.apache.org/event-driven-consumer.html">Event Driven Consumer</a>
- * <p/>
- * Use the API from {@link org.apache.camel.CamelContext} to control the lifecycle of a route,
- * such as starting and stopping using the {@link org.apache.camel.spi.RouteController#startRoute(String)}
- * and {@link org.apache.camel.spi.RouteController#stopRoute(String)} methods.
- */
-public class EventDrivenConsumerRoute extends DefaultRoute {
-    private final Processor processor;
-    private Consumer consumer;
-
-    public EventDrivenConsumerRoute(RouteContext routeContext, Endpoint endpoint, Processor processor) {
-        super(routeContext, endpoint);
-        this.processor = processor;
-    }
-
-    @Override
-    public String toString() {
-        return "EventDrivenConsumerRoute[" + getEndpoint() + " -> " + processor + "]";
-    }
-
-    @Override
-    public Processor getProcessor() {
-        return processor;
-    }
-
-    /**
-     * Factory method to lazily create the complete list of services required for this route
-     * such as adding the processor or consumer
-     */
-    @Override
-    protected void addServices(List<Service> services) throws Exception {
-        Endpoint endpoint = getEndpoint();
-        consumer = endpoint.createConsumer(processor);
-        if (consumer != null) {
-            services.add(consumer);
-            if (consumer instanceof RouteAware) {
-                ((RouteAware) consumer).setRoute(this);
-            }
-            if (consumer instanceof RouteIdAware) {
-                ((RouteIdAware) consumer).setRouteId(this.getId());
-            }
-        }
-        Processor processor = getProcessor();
-        if (processor instanceof Service) {
-            services.add((Service)processor);
-        }
-    }
-
-    @Override
-    @SuppressWarnings("unchecked")
-    public Navigate<Processor> navigate() {
-        Processor answer = getProcessor();
-
-        // we want navigating routes to be easy, so skip the initial channel
-        // and navigate to its output where it all starts from end user point of view
-        if (answer instanceof Navigate) {
-            Navigate<Processor> nav = (Navigate<Processor>) answer;
-            if (nav.next().size() == 1) {
-                Object first = nav.next().get(0);
-                if (first instanceof Navigate) {
-                    return (Navigate<Processor>) first;
-                }
-            }
-            return (Navigate<Processor>) answer;
-        }
-        return null;
-    }
-
-    @Override
-    public List<Processor> filter(String pattern) {
-        List<Processor> match = new ArrayList<>();
-        doFilter(pattern, navigate(), match);
-        return match;
-    }
-
-    @SuppressWarnings("unchecked")
-    private void doFilter(String pattern, Navigate<Processor> nav, List<Processor> match) {
-        List<Processor> list = nav.next();
-        if (list != null) {
-            for (Processor proc : list) {
-                String id = null;
-                if (proc instanceof IdAware) {
-                    id = ((IdAware) proc).getId();
-                }
-                if (PatternHelper.matchPattern(id, pattern)) {
-                    match.add(proc);
-                }
-                if (proc instanceof Navigate) {
-                    Navigate<Processor> child = (Navigate<Processor>) proc;
-                    doFilter(pattern, child, match);
-                }
-            }
-        }
-    }
-
-    @Override
-    public Consumer getConsumer() {
-        return consumer;
-    }
-
-    @Override
-    public boolean supportsSuspension() {
-        return consumer instanceof Suspendable && consumer instanceof SuspendableService;
-    }
-}
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/MDCUnitOfWork.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/MDCUnitOfWork.java
index 3716909..0a1f48d 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/MDCUnitOfWork.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/MDCUnitOfWork.java
@@ -22,8 +22,8 @@ import java.util.Map;
 import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.spi.InflightRepository;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.PatternHelper;
 import org.slf4j.Logger;
@@ -94,21 +94,21 @@ public class MDCUnitOfWork extends DefaultUnitOfWork {
     }
 
     @Override
-    public void pushRouteContext(RouteContext routeContext) {
-        super.pushRouteContext(routeContext);
-        if (routeContext != null) {
-            MDC.put(MDC_ROUTE_ID, routeContext.getRouteId());
+    public void pushRoute(Route route) {
+        super.pushRoute(route);
+        if (route != null) {
+            MDC.put(MDC_ROUTE_ID, route.getRouteId());
         } else {
             MDC.remove(MDC_ROUTE_ID);
         }
     }
 
     @Override
-    public RouteContext popRouteContext() {
-        RouteContext answer = super.popRouteContext();
+    public Route popRoute() {
+        Route answer = super.popRoute();
 
         // restore old route id back again after we have popped
-        RouteContext previous = getRouteContext();
+        Route previous = getRoute();
         if (previous != null) {
             // restore old route id back again
             MDC.put(MDC_ROUTE_ID, previous.getRouteId());
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SupervisingRouteController.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SupervisingRouteController.java
index 3867836..2f2df57 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SupervisingRouteController.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SupervisingRouteController.java
@@ -44,7 +44,6 @@ import org.apache.camel.StartupListener;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
 import org.apache.camel.spi.HasId;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RouteController;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.spi.RoutePolicyFactory;
@@ -344,7 +343,7 @@ public class SupervisingRouteController extends DefaultRouteController {
             LOGGER.info("Route {} has been requested to stop: stop supervising it", route.getId());
 
             // Mark the route as un-managed
-            route.getContext().setRouteController(null);
+            route.get().setRouteController(null);
 
             consumer.accept(route);
         }
@@ -354,7 +353,7 @@ public class SupervisingRouteController extends DefaultRouteController {
         synchronized (lock) {
             // If a manual start is triggered, then the controller should take
             // care that the route is started
-            route.getContext().setRouteController(this);
+            route.get().setRouteController(this);
 
             try {
                 if (checker) {
@@ -419,7 +418,7 @@ public class SupervisingRouteController extends DefaultRouteController {
         }
 
         void start(RouteHolder route) {
-            route.getContext().setRouteController(SupervisingRouteController.this);
+            route.get().setRouteController(SupervisingRouteController.this);
 
             routes.computeIfAbsent(
                 route,
@@ -452,7 +451,7 @@ public class SupervisingRouteController extends DefaultRouteController {
 
                                 if (backOffTask != null && backOffTask.getStatus() == BackOffTimer.Task.Status.Exhausted && stopped) {
                                     LOGGER.info("Back-off for route {} is exhausted, no more attempts will be made and stop supervising it", route.getId());
-                                    r.getContext().setRouteController(null);
+                                    r.get().setRouteController(null);
                                 }
                             }
                         }
@@ -505,12 +504,8 @@ public class SupervisingRouteController extends DefaultRouteController {
             return this.route;
         }
 
-        public RouteContext getContext() {
-            return this.route.getRouteContext();
-        }
-
         public ServiceStatus getStatus() {
-            return getContext().getCamelContext().getRouteController().getRouteStatus(getId());
+            return route.getCamelContext().getRouteController().getRouteStatus(getId());
         }
 
         int getInitializationOrder() {
@@ -518,7 +513,7 @@ public class SupervisingRouteController extends DefaultRouteController {
         }
 
         public int getStartupOrder() {
-            Integer order = route.getRouteContext().getStartupOrder();
+            Integer order = route.getStartupOrder();
             if (order == null) {
                 order = Integer.MAX_VALUE;
             }
@@ -583,7 +578,7 @@ public class SupervisingRouteController extends DefaultRouteController {
 
         @Override
         public void onInit(Route route) {
-            if (!route.getRouteContext().isAutoStartup()) {
+            if (!route.isAutoStartup()) {
                 LOGGER.info("Route {} won't be supervised (reason: has explicit auto-startup flag set to false)", route.getId());
                 return;
             }
@@ -599,8 +594,8 @@ public class SupervisingRouteController extends DefaultRouteController {
 
             RouteHolder holder = new RouteHolder(route, routeCount.incrementAndGet());
             if (routes.add(holder)) {
-                holder.getContext().setRouteController(SupervisingRouteController.this);
-                holder.getContext().setAutoStartup(false);
+                holder.get().setRouteController(SupervisingRouteController.this);
+                holder.get().setAutoStartup(false);
 
                 if (contextStarted.get()) {
                     LOGGER.info("Context is already started: attempt to start route {}", route.getId());
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/TypedProcessorFactory.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/TypedProcessorFactory.java
index 87ccfd1..2f53395 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/TypedProcessorFactory.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/TypedProcessorFactory.java
@@ -21,8 +21,8 @@ import java.util.Map;
 import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.spi.ProcessorFactory;
-import org.apache.camel.spi.RouteContext;
 
 public class TypedProcessorFactory<T extends NamedNode> implements ProcessorFactory {
     private final Class<T> type;
@@ -32,18 +32,18 @@ public class TypedProcessorFactory<T extends NamedNode> implements ProcessorFact
     }
 
     @Override
-    public Processor createChildProcessor(RouteContext routeContext, NamedNode definition, boolean mandatory) throws Exception {
+    public Processor createChildProcessor(Route route, NamedNode definition, boolean mandatory) throws Exception {
         if (type.isInstance(definition)) {
-            return doCreateChildProcessor(routeContext, type.cast(definition), mandatory);
+            return doCreateChildProcessor(route, type.cast(definition), mandatory);
         }
 
         return null;
     }
 
     @Override
-    public Processor createProcessor(RouteContext routeContext, NamedNode definition) throws Exception {
+    public Processor createProcessor(Route route, NamedNode definition) throws Exception {
         if (type.isInstance(definition)) {
-            return doCreateProcessor(routeContext, type.cast(definition));
+            return doCreateProcessor(route, type.cast(definition));
         }
 
         return null;
@@ -54,11 +54,11 @@ public class TypedProcessorFactory<T extends NamedNode> implements ProcessorFact
         return null;
     }
 
-    protected Processor doCreateChildProcessor(RouteContext routeContext, T definition, boolean mandatory) throws Exception {
+    protected Processor doCreateChildProcessor(Route route, T definition, boolean mandatory) throws Exception {
         return null;
     }
 
-    public Processor doCreateProcessor(RouteContext routeContext, T definition) throws Exception {
+    public Processor doCreateProcessor(Route route, T definition) throws Exception {
         return null;
     }
 }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/health/RouteHealthCheck.java b/core/camel-base/src/main/java/org/apache/camel/impl/health/RouteHealthCheck.java
index fb8713a..3336593 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/health/RouteHealthCheck.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/health/RouteHealthCheck.java
@@ -64,7 +64,7 @@ public class RouteHealthCheck extends AbstractHealthCheck {
             builder.detail("route.status", status.name());
             builder.detail("route.context.name", context.getName());
 
-            if (route.getRouteContext().getRouteController() != null || route.getRouteContext().isAutoStartup()) {
+            if (route.getRouteController() != null || route.isAutoStartup()) {
                 if (status.isStarted()) {
                     builder.up();
                 } else if (status.isStopped()) {
@@ -74,8 +74,8 @@ public class RouteHealthCheck extends AbstractHealthCheck {
             } else {
                 LOGGER.debug("Route {} marked as UP (controlled={}, auto-startup={})",
                     route.getId(),
-                    route.getRouteContext().getRouteController() != null,
-                    route.getRouteContext().isAutoStartup()
+                    route.getRouteController() != null,
+                    route.isAutoStartup()
                 );
 
                 // Assuming that if no route controller is configured or if a
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java b/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
index 1658281..1110ca7 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
@@ -44,7 +44,6 @@ import org.apache.camel.spi.InflightRepository;
 import org.apache.camel.spi.ManagementInterceptStrategy.InstrumentationProcessor;
 import org.apache.camel.spi.MessageHistoryFactory;
 import org.apache.camel.spi.ReactiveExecutor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.spi.ShutdownStrategy;
 import org.apache.camel.spi.StreamCachingStrategy;
@@ -54,6 +53,7 @@ import org.apache.camel.spi.Transformer;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.spi.UnitOfWorkFactory;
 import org.apache.camel.support.CamelContextHelper;
+import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.MessageHelper;
 import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.support.SynchronizationAdapter;
@@ -593,14 +593,14 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
      */
     public static class UnitOfWorkProcessorAdvice implements CamelInternalProcessorAdvice<UnitOfWork> {
 
-        private final RouteContext routeContext;
+        private final Route route;
         private String routeId;
         private UnitOfWorkFactory uowFactory;
 
-        public UnitOfWorkProcessorAdvice(RouteContext routeContext, CamelContext camelContext) {
-            this.routeContext = routeContext;
-            if (routeContext != null) {
-                this.routeId = routeContext.getRouteId();
+        public UnitOfWorkProcessorAdvice(Route route, CamelContext camelContext) {
+            this.route = route;
+            if (route != null) {
+                this.routeId = route.getRouteId();
             }
             this.uowFactory = camelContext.adapt(ExtendedCamelContext.class).getUnitOfWorkFactory();
             // optimize uow factory to initialize it early and once per advice
@@ -611,9 +611,9 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
         public UnitOfWork before(Exchange exchange) throws Exception {
             // if the exchange doesn't have from route id set, then set it if it originated
             // from this unit of work
-            if (routeContext != null && exchange.getFromRouteId() == null) {
+            if (route != null && exchange.getFromRouteId() == null) {
                 if (routeId == null) {
-                    this.routeId = routeContext.getRouteId();
+                    this.routeId = route.getRouteId();
                 }
                 ExtendedExchange ee = (ExtendedExchange) exchange;
                 ee.setFromRouteId(routeId);
@@ -632,10 +632,10 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
             }
 
             // for any exchange we should push/pop route context so we can keep track of which route we are routing
-            if (routeContext != null) {
+            if (route != null) {
                 UnitOfWork existing = exchange.getUnitOfWork();
                 if (existing != null) {
-                    existing.pushRouteContext(routeContext);
+                    existing.pushRoute(route);
                 }
             }
 
@@ -652,8 +652,8 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
             }
 
             // after UoW is done lets pop the route context which must be done on every existing UoW
-            if (routeContext != null && existing != null) {
-                existing.popRouteContext();
+            if (route != null && existing != null) {
+                existing.popRoute();
             }
         }
 
@@ -674,8 +674,8 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
 
         private final UnitOfWork parent;
 
-        public ChildUnitOfWorkProcessorAdvice(RouteContext routeContext, CamelContext camelContext, UnitOfWork parent) {
-            super(routeContext, camelContext);
+        public ChildUnitOfWorkProcessorAdvice(Route route, CamelContext camelContext, UnitOfWork parent) {
+            super(route, camelContext);
             this.parent = parent;
         }
 
@@ -709,11 +709,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
             // route id from the exchange UoW state
             String targetRouteId = this.routeId;
             if (targetRouteId == null) {
-                UnitOfWork uow = exchange.getUnitOfWork();
-                RouteContext rc = uow != null ? uow.getRouteContext() : null;
-                if (rc != null) {
-                    targetRouteId = rc.getRouteId();
-                }
+                targetRouteId = ExchangeHelper.getRouteId(exchange);
             }
 
             MessageHistory history = factory.newMessageHistory(targetRouteId, definition, System.currentTimeMillis(), exchange);
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/MulticastProcessor.java b/core/camel-base/src/main/java/org/apache/camel/processor/MulticastProcessor.java
index 65f1587..1a516e0 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/MulticastProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/MulticastProcessor.java
@@ -47,12 +47,12 @@ import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Navigate;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StreamCache;
 import org.apache.camel.Traceable;
 import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.ReactiveExecutor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.AsyncProcessorConverterHelper;
@@ -68,7 +68,6 @@ import org.apache.camel.util.concurrent.AsyncCompletionService;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 import static org.apache.camel.util.ObjectHelper.notNull;
 
 /**
@@ -137,9 +136,9 @@ public class MulticastProcessor extends AsyncProcessorSupport implements Navigat
      * <p/>
      * See the <tt>createProcessorExchangePair</tt> and <tt>createErrorHandler</tt> methods.
      */
-    static final class ErrorHandlerKey extends KeyValueHolder<RouteContext, Processor> {
+    static final class ErrorHandlerKey extends KeyValueHolder<Route, Processor> {
 
-        ErrorHandlerKey(RouteContext key, Processor value) {
+        ErrorHandlerKey(Route key, Processor value) {
             super(key, value);
         }
 
@@ -662,8 +661,8 @@ public class MulticastProcessor extends AsyncProcessorSupport implements Navigat
             }
 
             // and add the pair
-            RouteContext routeContext = exchange.getUnitOfWork() != null ? exchange.getUnitOfWork().getRouteContext() : null;
-            result.add(createProcessorExchangePair(index++, processor, copy, routeContext));
+            Route route = exchange.getUnitOfWork() != null ? exchange.getUnitOfWork().getRoute() : null;
+            result.add(createProcessorExchangePair(index++, processor, copy, route));
         }
 
         if (exchange.getException() != null) {
@@ -684,18 +683,18 @@ public class MulticastProcessor extends AsyncProcessorSupport implements Navigat
      * @param index        the index
      * @param processor    the processor
      * @param exchange     the exchange
-     * @param routeContext the route context
+     * @param route the route context
      * @return prepared for use
      */
     protected ProcessorExchangePair createProcessorExchangePair(int index, Processor processor, Exchange exchange,
-                                                                RouteContext routeContext) {
+                                                                Route route) {
         Processor prepared = processor;
 
         // set property which endpoint we send to
         setToEndpoint(exchange, prepared);
 
         // rework error handling to support fine grained error handling
-        prepared = createErrorHandler(routeContext, exchange, prepared);
+        prepared = createErrorHandler(route, exchange, prepared);
 
         // invoke on prepare on the exchange if specified
         if (onPrepare != null) {
@@ -708,20 +707,20 @@ public class MulticastProcessor extends AsyncProcessorSupport implements Navigat
         return new DefaultProcessorExchangePair(index, processor, prepared, exchange);
     }
 
-    protected Processor createErrorHandler(RouteContext routeContext, Exchange exchange, Processor processor) {
+    protected Processor createErrorHandler(Route route, Exchange exchange, Processor processor) {
         Processor answer;
 
         boolean tryBlock = exchange.getProperty(Exchange.TRY_ROUTE_BLOCK, false, boolean.class);
 
         // do not wrap in error handler if we are inside a try block
-        if (!tryBlock && routeContext != null) {
+        if (!tryBlock && route != null) {
             // wrap the producer in error handler so we have fine grained error handling on
             // the output side instead of the input side
             // this is needed to support redelivery on that output alone and not doing redelivery
             // for the entire multicast block again which will start from scratch again
 
             // create key for cache
-            final ErrorHandlerKey key = new ErrorHandlerKey(routeContext, processor);
+            final ErrorHandlerKey key = new ErrorHandlerKey(route, processor);
 
             // lookup cached first to reuse and preserve memory
             answer = errorHandlers.get(key);
@@ -734,10 +733,10 @@ public class MulticastProcessor extends AsyncProcessorSupport implements Navigat
             // create error handler (create error handler directly to keep it light weight,
             // instead of using ProcessorReifier.wrapInErrorHandler)
             try {
-                processor = routeContext.createErrorHandler(processor);
+                processor = route.createErrorHandler(processor);
 
                 // and wrap in unit of work processor so the copy exchange also can run under UoW
-                answer = createUnitOfWorkProcessor(routeContext, processor, exchange);
+                answer = createUnitOfWorkProcessor(route, processor, exchange);
 
                 boolean child = exchange.getProperty(Exchange.PARENT_UNIT_OF_WORK, UnitOfWork.class) != null;
 
@@ -755,7 +754,7 @@ public class MulticastProcessor extends AsyncProcessorSupport implements Navigat
             }
         } else {
             // and wrap in unit of work processor so the copy exchange also can run under UoW
-            answer = createUnitOfWorkProcessor(routeContext, processor, exchange);
+            answer = createUnitOfWorkProcessor(route, processor, exchange);
         }
 
         return answer;
@@ -764,20 +763,19 @@ public class MulticastProcessor extends AsyncProcessorSupport implements Navigat
     /**
      * Strategy to create the unit of work to be used for the sub route
      *
-     * @param routeContext the route context
      * @param processor    the processor
      * @param exchange     the exchange
      * @return the unit of work processor
      */
-    protected Processor createUnitOfWorkProcessor(RouteContext routeContext, Processor processor, Exchange exchange) {
+    protected Processor createUnitOfWorkProcessor(Route route, Processor processor, Exchange exchange) {
         CamelInternalProcessor internal = new CamelInternalProcessor(exchange.getContext(), processor);
 
         // and wrap it in a unit of work so the UoW is on the top, so the entire route will be in the same UoW
         UnitOfWork parent = exchange.getProperty(Exchange.PARENT_UNIT_OF_WORK, UnitOfWork.class);
         if (parent != null) {
-            internal.addAdvice(new CamelInternalProcessor.ChildUnitOfWorkProcessorAdvice(routeContext, exchange.getContext(), parent));
+            internal.addAdvice(new CamelInternalProcessor.ChildUnitOfWorkProcessorAdvice(route, exchange.getContext(), parent));
         } else {
-            internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext, exchange.getContext()));
+            internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, exchange.getContext()));
         }
 
         return internal;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RecipientListProcessor.java b/core/camel-base/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
index a031939..cbfbd62 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
@@ -33,8 +33,8 @@ import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
 import org.apache.camel.spi.NormalizedEndpointUri;
+import org.apache.camel.Route;
 import org.apache.camel.spi.ProducerCache;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.ExchangeHelper;
@@ -254,8 +254,8 @@ public class RecipientListProcessor extends MulticastProcessor {
         setToEndpoint(copy, producer);
 
         // rework error handling to support fine grained error handling
-        RouteContext routeContext = exchange.getUnitOfWork() != null ? exchange.getUnitOfWork().getRouteContext() : null;
-        Processor prepared = createErrorHandler(routeContext, copy, producer);
+        Route route = exchange.getUnitOfWork() != null ? exchange.getUnitOfWork().getRoute() : null;
+        Processor prepared = createErrorHandler(route, copy, producer);
 
         // invoke on prepare on the exchange if specified
         if (onPrepare != null) {
@@ -270,20 +270,6 @@ public class RecipientListProcessor extends MulticastProcessor {
         return new RecipientProcessorExchangePair(index, producerCache, endpoint, producer, prepared, copy, pattern, prototypeEndpoint);
     }
 
-    @Override
-    protected Processor createErrorHandler(RouteContext routeContext, Exchange exchange, Processor processor) {
-        Processor answer = super.createErrorHandler(routeContext, exchange, processor);
-        exchange.adapt(ExtendedExchange.class).addOnCompletion(new SynchronizationAdapter() {
-            @Override
-            public void onDone(Exchange exchange) {
-                // remove error handler builder from route context as we are done with the recipient list
-                // and we cannot reuse this and must remove it to avoid leaking the error handler on the route context
-                routeContext.removeErrorHandlers(routeContext.getErrorHandlerFactory());
-            }
-        });
-        return answer;
-    }
-
     protected static Object prepareRecipient(Exchange exchange, Object recipient) throws NoTypeConversionAvailableException {
         if (recipient instanceof Endpoint || recipient instanceof NormalizedEndpointUri) {
             return recipient;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RoutingSlip.java b/core/camel-base/src/main/java/org/apache/camel/processor/RoutingSlip.java
index d88d9c7..4098ec0 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/RoutingSlip.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/RoutingSlip.java
@@ -28,6 +28,7 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.FailedToCreateProducerException;
 import org.apache.camel.Message;
 import org.apache.camel.NoTypeConversionAvailableException;
+import org.apache.camel.Route;
 import org.apache.camel.Traceable;
 import org.apache.camel.impl.engine.DefaultProducerCache;
 import org.apache.camel.impl.engine.EmptyProducerCache;
@@ -35,7 +36,6 @@ import org.apache.camel.spi.EndpointUtilizationStatistics;
 import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.NormalizedEndpointUri;
 import org.apache.camel.spi.ProducerCache;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.support.AsyncProcessorSupport;
 import org.apache.camel.support.ExchangeHelper;
@@ -46,7 +46,6 @@ import org.apache.camel.support.service.ServiceHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-
 import static org.apache.camel.processor.PipelineHelper.continueProcessing;
 import static org.apache.camel.util.ObjectHelper.notNull;
 
@@ -388,13 +387,13 @@ public class RoutingSlip extends AsyncProcessorSupport implements Traceable, IdA
         return copy;
     }
 
-    protected AsyncProcessor createErrorHandler(RouteContext routeContext, Exchange exchange, AsyncProcessor processor, Endpoint endpoint) {
+    protected AsyncProcessor createErrorHandler(Route route, Exchange exchange, AsyncProcessor processor, Endpoint endpoint) {
         AsyncProcessor answer = processor;
 
         boolean tryBlock = exchange.getProperty(Exchange.TRY_ROUTE_BLOCK, false, boolean.class);
 
         // do not wrap in error handler if we are inside a try block
-        if (!tryBlock && routeContext != null && errorHandler != null) {
+        if (!tryBlock && route != null && errorHandler != null) {
             // wrap the producer in error handler so we have fine grained error handling on
             // the output side instead of the input side
             // this is needed to support redelivery on that output alone and not doing redelivery
@@ -425,8 +424,8 @@ public class RoutingSlip extends AsyncProcessorSupport implements Traceable, IdA
         return producerCache.doInAsyncProducer(endpoint, exchange, callback, (p, ex, cb) -> {
 
             // rework error handling to support fine grained error handling
-            RouteContext routeContext = ex.getUnitOfWork() != null ? ex.getUnitOfWork().getRouteContext() : null;
-            AsyncProcessor target = createErrorHandler(routeContext, ex, p, endpoint);
+            Route route = ex.getUnitOfWork() != null ? ex.getUnitOfWork().getRoute() : null;
+            AsyncProcessor target = createErrorHandler(route, ex, p, endpoint);
 
             // set property which endpoint we send to and the producer that can do it
             ex.setProperty(Exchange.TO_ENDPOINT, endpoint.getEndpointUri());
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-base/src/main/java/org/apache/camel/processor/Splitter.java
index 491358c..b06e602 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/Splitter.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/Splitter.java
@@ -34,11 +34,11 @@ import org.apache.camel.Expression;
 import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Traceable;
 import org.apache.camel.processor.aggregate.ShareUnitOfWorkAggregationStrategy;
 import org.apache.camel.processor.aggregate.UseOriginalAggregationStrategy;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.ObjectHelper;
 import org.apache.camel.util.IOHelper;
@@ -137,7 +137,7 @@ public class Splitter extends MulticastProcessor implements AsyncProcessor, Trac
         final Object value;
         final Iterator<?> iterator;
         private final Exchange copy;
-        private final RouteContext routeContext;
+        private final Route route;
         private final Exchange original;
 
         private SplitterIterable(Exchange exchange, Object value) {
@@ -145,7 +145,7 @@ public class Splitter extends MulticastProcessor implements AsyncProcessor, Trac
             this.value = value;
             this.iterator = ObjectHelper.createIterator(value);
             this.copy = copyAndPrepareSubExchange(exchange, true);
-            this.routeContext = exchange.getUnitOfWork() != null ? exchange.getUnitOfWork().getRouteContext() : null;
+            this.route = exchange.getUnitOfWork() != null ? exchange.getUnitOfWork().getRoute() : null;
         }
 
         @Override
@@ -197,7 +197,7 @@ public class Splitter extends MulticastProcessor implements AsyncProcessor, Trac
                             Message in = newExchange.getIn();
                             in.setBody(part);
                         }
-                        return createProcessorExchangePair(index++, getProcessors().iterator().next(), newExchange, routeContext);
+                        return createProcessorExchangePair(index++, getProcessors().iterator().next(), newExchange, route);
                     } else {
                         return null;
                     }
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java b/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java
index 5034a07..7b23d0e 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java
@@ -29,6 +29,7 @@ import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.NamedRoute;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.WrapProcessor;
 import org.apache.camel.processor.errorhandler.RedeliveryErrorHandler;
@@ -38,7 +39,6 @@ import org.apache.camel.spi.Debugger;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.ManagementInterceptStrategy;
 import org.apache.camel.spi.MessageHistoryFactory;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.Tracer;
 import org.apache.camel.support.OrderedComparator;
 import org.apache.camel.support.service.ServiceHelper;
@@ -67,7 +67,7 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
     private NamedNode definition;
     private ManagementInterceptStrategy.InstrumentationProcessor<?> instrumentationProcessor;
     private CamelContext camelContext;
-    private RouteContext routeContext;
+    private Route route;
     private boolean routeScoped = true;
 
     public DefaultChannel(CamelContext camelContext) {
@@ -131,8 +131,8 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
     }
 
     @Override
-    public RouteContext getRouteContext() {
-        return routeContext;
+    public Route getRoute() {
+        return route;
     }
 
     @Override
@@ -170,22 +170,22 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
      * If the initialized output definition contained outputs (children) then
      * the childDefinition will be set so we can leverage fine grained tracing
      *
-     * @param routeContext      the route context
+     * @param route      the route context
      * @param definition        the route definition the {@link Channel} represents
      * @param childDefinition   the child definition
      * @throws Exception is thrown if some error occurred
      */
-    public void initChannel(RouteContext routeContext,
+    public void initChannel(Route route,
                             NamedNode definition,
                             NamedNode childDefinition,
                             List<InterceptStrategy> interceptors,
                             Processor nextProcessor,
-                            NamedRoute route,
+                            NamedRoute routeDefinition,
                             boolean first,
                             boolean routeScoped) throws Exception {
-        this.routeContext = routeContext;
+        this.route = route;
         this.definition = definition;
-        this.camelContext = routeContext.getCamelContext();
+        this.camelContext = route.getCamelContext();
         this.nextProcessor = nextProcessor;
         this.routeScoped = routeScoped;
 
@@ -201,12 +201,12 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
 
         // setup instrumentation processor for management (jmx)
         // this is later used in postInitChannel as we need to setup the error handler later as well
-        ManagementInterceptStrategy managed = routeContext.getManagementInterceptStrategy();
+        ManagementInterceptStrategy managed = route.getManagementInterceptStrategy();
         if (managed != null) {
             instrumentationProcessor = managed.createProcessor(targetOutputDef, nextProcessor);
         }
 
-        if (routeContext.isMessageHistory()) {
+        if (route.isMessageHistory()) {
             // add message history advice
             MessageHistoryFactory factory = camelContext.getMessageHistoryFactory();
             addAdvice(new MessageHistoryAdvice(factory, targetOutputDef));
@@ -216,7 +216,7 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
 
         // then wrap the output with the tracer and debugger (debugger first,
         // as we do not want regular tracer to trace the debugger)
-        if (routeContext.isDebugging()) {
+        if (route.isDebugging()) {
             if (camelContext.getDebugger() != null) {
                 // use custom debugger
                 Debugger debugger = camelContext.getDebugger();
@@ -229,15 +229,15 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
             }
         }
 
-        if (routeContext.isBacklogTracing()) {
+        if (route.isBacklogTracing()) {
             // add jmx backlog tracer
             BacklogTracer backlogTracer = getOrCreateBacklogTracer();
-            addAdvice(new BacklogTracerAdvice(backlogTracer, targetOutputDef, route, first));
+            addAdvice(new BacklogTracerAdvice(backlogTracer, targetOutputDef, routeDefinition, first));
         }
-        if (routeContext.isTracing()) {
+        if (route.isTracing()) {
             // add logger tracer
             Tracer tracer = camelContext.getTracer();
-            addAdvice(new TracingAdvice(tracer, targetOutputDef, route, first));
+            addAdvice(new TracingAdvice(tracer, targetOutputDef, routeDefinition, first));
         }
 
         // sort interceptors according to ordered
@@ -249,7 +249,7 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
         for (InterceptStrategy strategy : interceptors) {
             Processor next = target == nextProcessor ? null : nextProcessor;
             // use the fine grained definition (eg the child if available). Its always possible to get back to the parent
-            Processor wrapped = strategy.wrapProcessorInInterceptors(routeContext.getCamelContext(), targetOutputDef, target, next);
+            Processor wrapped = strategy.wrapProcessorInInterceptors(route.getCamelContext(), targetOutputDef, target, next);
             if (!(wrapped instanceof AsyncProcessor)) {
                 LOG.warn("Interceptor: " + strategy + " at: " + definition + " does not return an AsyncProcessor instance."
                         + " This causes the asynchronous routing engine to not work as optimal as possible."
@@ -264,12 +264,12 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
             target = wrapped;
         }
 
-        if (routeContext.isStreamCaching()) {
+        if (route.isStreamCaching()) {
             addAdvice(new StreamCachingAdvice(camelContext.getStreamCachingStrategy()));
         }
 
-        if (routeContext.getDelayer() != null && routeContext.getDelayer() > 0) {
-            addAdvice(new DelayerAdvice(routeContext.getDelayer()));
+        if (route.getDelayer() != null && route.getDelayer() > 0) {
+            addAdvice(new DelayerAdvice(route.getDelayer()));
         }
 
         // sets the delegate to our wrapped output
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DefaultExceptionPolicyStrategy.java b/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DefaultExceptionPolicyStrategy.java
index a99fdb49f..33660bd 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DefaultExceptionPolicyStrategy.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DefaultExceptionPolicyStrategy.java
@@ -23,7 +23,7 @@ import java.util.Set;
 import java.util.TreeMap;
 
 import org.apache.camel.Exchange;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -133,7 +133,7 @@ public class DefaultExceptionPolicyStrategy implements ExceptionPolicyStrategy {
             // so we will not pick an ExceptionPolicy from another route
             String typeRoute = type.getRouteId();
             if (exchange != null && exchange.getUnitOfWork() != null && ObjectHelper.isNotEmpty(typeRoute)) {
-                RouteContext rc = exchange.getUnitOfWork().getRouteContext();
+                Route rc = exchange.getUnitOfWork().getRoute();
                 String route = rc != null ? rc.getRouteId() : null;
                 if (route != null && !route.equals(typeRoute)) {
                     if (LOG.isTraceEnabled()) {
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java b/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
index c8b0b08..807ee5a 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
+++ b/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
@@ -36,12 +36,12 @@ import org.apache.camel.Message;
 import org.apache.camel.Navigate;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.spi.ReactiveExecutor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.ShutdownPrepared;
 import org.apache.camel.spi.ShutdownStrategy;
 import org.apache.camel.spi.UnitOfWork;
@@ -486,8 +486,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport impleme
             // and put failure endpoint back as well
             ee.setProperty(Exchange.FAILURE_ENDPOINT, ee.getProperty(Exchange.TO_ENDPOINT));
             // and store the route id so we know in which route we failed
-            UnitOfWork uow = ee.getUnitOfWork();
-            RouteContext rc = uow != null ? uow.getRouteContext() : null;
+            Route rc = ExchangeHelper.getRoute(ee);
             if (rc != null) {
                 ee.setProperty(Exchange.FAILURE_ROUTE_ID, rc.getRouteId());
             }
@@ -873,8 +872,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport impleme
 
                 // route specific failure handler?
                 Processor processor = null;
-                UnitOfWork uow = exchange.getUnitOfWork();
-                RouteContext rc = uow != null ? uow.getRouteContext() : null;
+                Route rc = ExchangeHelper.getRoute(exchange);
                 if (rc != null) {
                     processor = rc.getOnException(exceptionPolicy.getId());
                 } else {
@@ -1033,7 +1031,7 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport impleme
                 exchange.setProperty(Exchange.FAILURE_ENDPOINT, exchange.getProperty(Exchange.TO_ENDPOINT));
                 // and store the route id so we know in which route we failed
                 UnitOfWork uow = exchange.getUnitOfWork();
-                RouteContext rc = uow != null ? uow.getRouteContext() : null;
+                Route rc = uow != null ? uow.getRoute() : null;
                 if (rc != null) {
                     exchange.setProperty(Exchange.FAILURE_ROUTE_ID, rc.getRouteId());
                 }
@@ -1171,10 +1169,9 @@ public abstract class RedeliveryErrorHandler extends ErrorHandlerSupport impleme
             // and put failure endpoint back as well
             ee.setProperty(Exchange.FAILURE_ENDPOINT, ee.getProperty(Exchange.TO_ENDPOINT));
             // and store the route id so we know in which route we failed
-            UnitOfWork uow = ee.getUnitOfWork();
-            RouteContext rc = uow != null ? uow.getRouteContext() : null;
-            if (rc != null) {
-                ee.setProperty(Exchange.FAILURE_ROUTE_ID, rc.getRouteId());
+            String routeId = ExchangeHelper.getAtRouteId(ee);
+            if (routeId != null) {
+                ee.setProperty(Exchange.FAILURE_ROUTE_ID, routeId);
             }
         }
 
diff --git a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
index 367f091..e8f54f1 100644
--- a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
+++ b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/ServiceCallProcessorFactory.java
@@ -39,7 +39,7 @@ import org.apache.camel.model.Model;
 import org.apache.camel.model.cloud.ServiceCallConfigurationDefinition;
 import org.apache.camel.model.cloud.ServiceCallDefinition;
 import org.apache.camel.model.cloud.ServiceCallDefinitionConstants;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.function.Suppliers;
@@ -61,10 +61,10 @@ public class ServiceCallProcessorFactory extends TypedProcessorFactory<ServiceCa
     // *****************************
 
     @Override
-    public Processor doCreateProcessor(RouteContext routeContext, ServiceCallDefinition definition) throws Exception {
+    public Processor doCreateProcessor(Route route, ServiceCallDefinition definition) throws Exception {
         this.definition = definition;
 
-        final CamelContext camelContext = routeContext.getCamelContext();
+        final CamelContext camelContext = route.getCamelContext();
         final ServiceDiscovery serviceDiscovery = retrieveServiceDiscovery(camelContext);
         final ServiceFilter serviceFilter = retrieveServiceFilter(camelContext);
         final ServiceChooser serviceChooser = retrieveServiceChooser(camelContext);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/builder/NotifyBuilder.java b/core/camel-core-engine/src/main/java/org/apache/camel/builder/NotifyBuilder.java
index ba32713..c70a64e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/builder/NotifyBuilder.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/builder/NotifyBuilder.java
@@ -38,10 +38,9 @@ import org.apache.camel.spi.CamelEvent.ExchangeCreatedEvent;
 import org.apache.camel.spi.CamelEvent.ExchangeFailedEvent;
 import org.apache.camel.spi.CamelEvent.ExchangeSentEvent;
 import org.apache.camel.spi.NotifyBuilderMatcher;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.support.EventNotifierSupport;
+import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.PatternHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.util.ObjectHelper;
@@ -211,10 +210,8 @@ public class NotifyBuilder {
 
             @Override
             public boolean onExchangeSent(Exchange exchange, Endpoint endpoint, long timeTaken) {
-                UnitOfWork uow = exchange.getUnitOfWork();
-                RouteContext rc = uow != null ? uow.getRouteContext() : null;
-                if (rc != null) {
-                    String id = rc.getRouteId();
+                String id = ExchangeHelper.getAtRouteId(exchange);
+                if (id != null) {
                     return PatternHelper.matchPattern(id, routeId);
                 } else {
                     return false;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
index 1593bb3..cb349cc 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultModel.java
@@ -45,7 +45,6 @@ import org.apache.camel.model.rest.RestDefinition;
 import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
 import org.apache.camel.reifier.RouteReifier;
-import org.apache.camel.spi.RouteContext;
 
 public class DefaultModel implements Model {
 
@@ -350,9 +349,7 @@ public class DefaultModel implements Model {
         AbstractCamelContext mcc = camelContext.adapt(AbstractCamelContext.class);
         mcc.setStartingRoutes(true);
         try {
-            String id = routeDefinition.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
-            RouteContext routeContext = new DefaultRouteContext(camelContext, routeDefinition, id);
-            Route route = new RouteReifier(routeContext, routeDefinition).createRoute();
+            Route route = new RouteReifier(camelContext, routeDefinition).createRoute();
             RouteService routeService = new RouteService(route);
             mcc.startRouteService(routeService, true);
         } finally {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultRouteContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
deleted file mode 100644
index 821f74a..0000000
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/DefaultRouteContext.java
+++ /dev/null
@@ -1,41 +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.impl;
-
-import org.apache.camel.CamelContext;
-import org.apache.camel.NamedNode;
-import org.apache.camel.Processor;
-import org.apache.camel.impl.engine.AbstractRouteContext;
-import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
-import org.apache.camel.spi.RouteContext;
-
-/**
- * The context used to activate new routing rules
- */
-public class DefaultRouteContext extends AbstractRouteContext implements RouteContext {
-
-    public DefaultRouteContext(CamelContext camelContext, NamedNode route, String routeId) {
-        super(camelContext, route, routeId);
-    }
-
-    @Override
-    public Processor createErrorHandler(Processor processor) throws Exception {
-        return ErrorHandlerReifier.reifier(this, getErrorHandlerFactory())
-                .createErrorHandler(processor);
-    }
-
-}
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/RouteService.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/RouteService.java
index 81eb623..cbc1b7e 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/RouteService.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/RouteService.java
@@ -41,7 +41,7 @@ public class RouteService extends BaseRouteService {
 
     public RouteService(Route route) {
         super(route);
-        this.routeDefinition = (RouteDefinition)route.getRouteContext().getRoute();
+        this.routeDefinition = (RouteDefinition) route.getRoute();
     }
 
     public RouteDefinition getRouteDefinition() {
@@ -63,7 +63,7 @@ public class RouteService extends BaseRouteService {
         if (!getCamelContext().isAutoStartup()) {
             return false;
         }
-        if (!getRouteContext().isAutoStartup()) {
+        if (!getRoute().isAutoStartup()) {
             return false;
         }
         if (routeDefinition.getAutoStartup() == null) {
@@ -84,7 +84,7 @@ public class RouteService extends BaseRouteService {
         // the XML DSL will configure error handlers using refs, so we need this
         // additional test
         if (routeDefinition.getErrorHandlerRef() != null) {
-            ErrorHandlerFactory routeScoped = getRouteContext().getErrorHandlerFactory();
+            ErrorHandlerFactory routeScoped = getRoute().getErrorHandlerFactory();
             ErrorHandlerFactory contextScoped = getCamelContext().adapt(ExtendedCamelContext.class).getErrorHandlerFactory();
             return routeScoped != null && contextScoped != null && routeScoped == contextScoped;
         }
@@ -103,7 +103,7 @@ public class RouteService extends BaseRouteService {
             if (output instanceof OnExceptionDefinition) {
                 OnExceptionDefinition onExceptionDefinition = (OnExceptionDefinition)output;
                 if (onExceptionDefinition.isRouteScoped()) {
-                    Processor errorHandler = getRouteContext().getOnException(onExceptionDefinition.getId());
+                    Processor errorHandler = getRoute().getOnException(onExceptionDefinition.getId());
                     if (errorHandler instanceof Service) {
                         services.add((Service)errorHandler);
                     }
@@ -111,7 +111,7 @@ public class RouteService extends BaseRouteService {
             } else if (output instanceof OnCompletionDefinition) {
                 OnCompletionDefinition onCompletionDefinition = (OnCompletionDefinition)output;
                 if (onCompletionDefinition.isRouteScoped()) {
-                    Processor onCompletionProcessor = getRouteContext().getOnCompletion(onCompletionDefinition.getId());
+                    Processor onCompletionProcessor = getRoute().getOnCompletion(onCompletionDefinition.getId());
                     if (onCompletionProcessor instanceof Service) {
                         services.add((Service)onCompletionProcessor);
                     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
index e1b179a..2d09695 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/cluster/ClusteredRoutePolicy.java
@@ -38,7 +38,6 @@ import org.apache.camel.cluster.CamelClusterService;
 import org.apache.camel.cluster.CamelClusterView;
 import org.apache.camel.spi.CamelEvent;
 import org.apache.camel.spi.CamelEvent.CamelContextStartedEvent;
-import org.apache.camel.support.DefaultConsumer;
 import org.apache.camel.support.EventNotifierSupport;
 import org.apache.camel.support.RoutePolicySupport;
 import org.apache.camel.support.cluster.ClusterServiceHelper;
@@ -171,7 +170,7 @@ public final class ClusteredRoutePolicy extends RoutePolicySupport implements Ca
         super.onInit(route);
 
         LOG.info("Route managed by {}. Setting route {} AutoStartup flag to false.", getClass(), route.getId());
-        route.getRouteContext().setAutoStartup(false);
+        route.setAutoStartup(false);
 
         this.refCount.retain();
         this.stoppedRoutes.add(route);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractPolicyReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractPolicyReifier.java
index 8f111b4..452bfc6 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractPolicyReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractPolicyReifier.java
@@ -21,10 +21,10 @@ import java.util.Map;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.NoSuchBeanException;
+import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.TransactedPolicy;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -35,8 +35,8 @@ public abstract class AbstractPolicyReifier<T extends ProcessorDefinition<?>> ex
 
     private static final Logger LOG = LoggerFactory.getLogger(TransactedReifier.class);
 
-    public AbstractPolicyReifier(RouteContext routeContext, T definition) {
-        super(routeContext, definition);
+    public AbstractPolicyReifier(Route route, T definition) {
+        super(route, definition);
     }
 
     public AbstractPolicyReifier(CamelContext camelContext, T definition) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractReifier.java
index 0d82b28..959eb5d 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AbstractReifier.java
@@ -22,29 +22,28 @@ import java.util.Set;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Expression;
-import org.apache.camel.NoSuchBeanException;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Predicate;
+import org.apache.camel.Route;
 import org.apache.camel.model.ExpressionSubElementDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.reifier.language.ExpressionReifier;
 import org.apache.camel.spi.BeanRepository;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.ObjectHelper;
 
 public abstract class AbstractReifier implements BeanRepository {
 
-    protected final RouteContext routeContext;
+    protected final org.apache.camel.Route route;
     protected final CamelContext camelContext;
 
-    public AbstractReifier(RouteContext routeContext) {
-        this.routeContext = ObjectHelper.notNull(routeContext, "RouteContext");
-        this.camelContext = routeContext.getCamelContext();
+    public AbstractReifier(Route route) {
+        this.route = ObjectHelper.notNull(route, "Route");
+        this.camelContext = route.getCamelContext();
     }
 
     public AbstractReifier(CamelContext camelContext) {
-        this.routeContext = null;
+        this.route = null;
         this.camelContext = ObjectHelper.notNull(camelContext, "CamelContext");
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AggregateReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AggregateReifier.java
index 16ea9d3..1b0cfce 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AggregateReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/AggregateReifier.java
@@ -24,6 +24,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.AggregateDefinition;
 import org.apache.camel.model.OptimisticLockRetryPolicyDefinition;
 import org.apache.camel.model.ProcessorDefinition;
@@ -33,13 +34,12 @@ import org.apache.camel.processor.aggregate.AggregateProcessor;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
 import org.apache.camel.processor.aggregate.OptimisticLockRetryPolicy;
 import org.apache.camel.spi.AggregationRepository;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.concurrent.SynchronousExecutorService;
 
 public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
 
-    public AggregateReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, AggregateDefinition.class.cast(definition));
+    public AggregateReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, AggregateDefinition.class.cast(definition));
     }
 
     @Override
@@ -52,7 +52,7 @@ public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
 
         // wrap the aggregate route in a unit of work processor
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, childProcessor);
-        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext, camelContext));
+        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
 
         Expression correlation = createExpression(definition.getExpression());
         AggregationStrategy strategy = createAggregationStrategy();
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/BeanReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/BeanReifier.java
index 1ba7589..4fa6126 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/BeanReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/BeanReifier.java
@@ -17,19 +17,17 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.BeanScope;
-import org.apache.camel.CamelContext;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.BeanDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.spi.BeanProcessorFactory;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.support.CamelContextHelper;
 
 public class BeanReifier extends ProcessorReifier<BeanDefinition> {
 
-    public BeanReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, BeanDefinition.class.cast(definition));
+    public BeanReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, BeanDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/CatchReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/CatchReifier.java
index 3a28fa3..f8d8009 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/CatchReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/CatchReifier.java
@@ -21,16 +21,16 @@ import java.util.List;
 
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.CatchDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.TryDefinition;
 import org.apache.camel.processor.CatchProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class CatchReifier extends ProcessorReifier<CatchDefinition> {
 
-    public CatchReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, CatchDefinition.class.cast(definition));
+    public CatchReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, CatchDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ChoiceReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
index baa6add..46ab340 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ChoiceReifier.java
@@ -22,20 +22,19 @@ import java.util.List;
 import org.apache.camel.ExpressionFactory;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.ExpressionClause;
 import org.apache.camel.model.ChoiceDefinition;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.WhenDefinition;
 import org.apache.camel.model.language.ExpressionDefinition;
 import org.apache.camel.processor.ChoiceProcessor;
 import org.apache.camel.processor.FilterProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class ChoiceReifier extends ProcessorReifier<ChoiceDefinition> {
 
-    public ChoiceReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, ChoiceDefinition.class.cast(definition));
+    public ChoiceReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, ChoiceDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/CircuitBreakerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/CircuitBreakerReifier.java
index 40cea74..2b454d4 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/CircuitBreakerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/CircuitBreakerReifier.java
@@ -17,14 +17,14 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.CircuitBreakerDefinition;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.spi.RouteContext;
 
 public class CircuitBreakerReifier extends ProcessorReifier<CircuitBreakerDefinition> {
 
-    public CircuitBreakerReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, CircuitBreakerDefinition.class.cast(definition));
+    public CircuitBreakerReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, CircuitBreakerDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ClaimCheckReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ClaimCheckReifier.java
index f725bc7..4d7c09f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ClaimCheckReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ClaimCheckReifier.java
@@ -19,20 +19,20 @@ package org.apache.camel.reifier;
 import org.apache.camel.AggregationStrategy;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ClaimCheckDefinition;
 import org.apache.camel.model.ClaimCheckOperation;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.ClaimCheckProcessor;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.ObjectHelper;
 
 import static org.apache.camel.util.ObjectHelper.notNull;
 
 public class ClaimCheckReifier extends ProcessorReifier<ClaimCheckDefinition> {
 
-    public ClaimCheckReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, ClaimCheckDefinition.class.cast(definition));
+    public ClaimCheckReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, ClaimCheckDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ConvertBodyReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ConvertBodyReifier.java
index 53fb78e..0c109eb 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ConvertBodyReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ConvertBodyReifier.java
@@ -20,16 +20,15 @@ import java.nio.charset.Charset;
 import java.nio.charset.UnsupportedCharsetException;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ConvertBodyDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.ConvertBodyProcessor;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.support.CamelContextHelper;
 
 public class ConvertBodyReifier extends ProcessorReifier<ConvertBodyDefinition> {
 
-    public ConvertBodyReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, ConvertBodyDefinition.class.cast(definition));
+    public ConvertBodyReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, ConvertBodyDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DelayReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DelayReifier.java
index 8f65fab..ae4db8a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DelayReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DelayReifier.java
@@ -20,15 +20,15 @@ import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.DelayDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.Delayer;
-import org.apache.camel.spi.RouteContext;
 
 public class DelayReifier extends ExpressionReifier<DelayDefinition> {
 
-    public DelayReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, DelayDefinition.class.cast(definition));
+    public DelayReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, DelayDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DynamicRouterReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DynamicRouterReifier.java
index b84af32..58c75fa 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DynamicRouterReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/DynamicRouterReifier.java
@@ -19,15 +19,15 @@ package org.apache.camel.reifier;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.DynamicRouterDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.DynamicRouter;
-import org.apache.camel.spi.RouteContext;
 
 public class DynamicRouterReifier extends ExpressionReifier<DynamicRouterDefinition<?>> {
 
-    public DynamicRouterReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, DynamicRouterDefinition.class.cast(definition));
+    public DynamicRouterReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, DynamicRouterDefinition.class.cast(definition));
     }
 
     @Override
@@ -46,7 +46,7 @@ public class DynamicRouterReifier extends ExpressionReifier<DynamicRouterDefinit
         // create error handler (create error handler directly to keep it light
         // weight,
         // instead of using ProcessorReifier.wrapInErrorHandler)
-        AsyncProcessor errorHandler = (AsyncProcessor) routeContext.createErrorHandler(dynamicRouter.newRoutingSlipProcessorForErrorHandler());
+        AsyncProcessor errorHandler = (AsyncProcessor) route.createErrorHandler(dynamicRouter.newRoutingSlipProcessorForErrorHandler());
         dynamicRouter.setErrorHandler(errorHandler);
 
         return dynamicRouter;
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/EnrichReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/EnrichReifier.java
index 7dd0d53..b1d8714 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/EnrichReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/EnrichReifier.java
@@ -20,16 +20,16 @@ import org.apache.camel.AggregationStrategy;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.EnrichDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.Enricher;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
-import org.apache.camel.spi.RouteContext;
 
 public class EnrichReifier extends ExpressionReifier<EnrichDefinition> {
 
-    public EnrichReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, EnrichDefinition.class.cast(definition));
+    public EnrichReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, EnrichDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ExpressionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ExpressionReifier.java
index 548c0e8..77667eb 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ExpressionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ExpressionReifier.java
@@ -18,14 +18,14 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ExpressionNode;
 import org.apache.camel.processor.FilterProcessor;
-import org.apache.camel.spi.RouteContext;
 
 abstract class ExpressionReifier<T extends ExpressionNode> extends ProcessorReifier<T> {
 
-    protected ExpressionReifier(RouteContext routeContext, T definition) {
-        super(routeContext, definition);
+    protected ExpressionReifier(Route route, T definition) {
+        super(route, definition);
     }
 
     /**
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/FilterReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/FilterReifier.java
index a440805..4d070ef 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/FilterReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/FilterReifier.java
@@ -17,15 +17,15 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.FilterDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.FilterProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class FilterReifier extends ExpressionReifier<FilterDefinition> {
 
-    public FilterReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, FilterDefinition.class.cast(definition));
+    public FilterReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, FilterDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/FinallyReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/FinallyReifier.java
index a97d7e2..5044ede 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/FinallyReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/FinallyReifier.java
@@ -17,16 +17,16 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.FinallyDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.TryDefinition;
 import org.apache.camel.processor.FinallyProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class FinallyReifier extends ProcessorReifier<FinallyDefinition> {
 
-    public FinallyReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, FinallyDefinition.class.cast(definition));
+    public FinallyReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, FinallyDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/IdempotentConsumerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/IdempotentConsumerReifier.java
index 95e7620..3c6cd08 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/IdempotentConsumerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/IdempotentConsumerReifier.java
@@ -18,17 +18,17 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.IdempotentConsumerDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.idempotent.IdempotentConsumer;
 import org.apache.camel.spi.IdempotentRepository;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class IdempotentConsumerReifier extends ExpressionReifier<IdempotentConsumerDefinition> {
 
-    public IdempotentConsumerReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, IdempotentConsumerDefinition.class.cast(definition));
+    public IdempotentConsumerReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, IdempotentConsumerDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptFromReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptFromReifier.java
index 181a57d..3b0798a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptFromReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptFromReifier.java
@@ -18,16 +18,16 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.InterceptFromDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetHeaderDefinition;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.ExpressionAdapter;
 
 public class InterceptFromReifier extends InterceptReifier<InterceptFromDefinition> {
 
-    public InterceptFromReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, definition);
+    public InterceptFromReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptReifier.java
index 7caa191..9f7877b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptReifier.java
@@ -19,17 +19,17 @@ package org.apache.camel.reifier;
 import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.InterceptDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.processor.Pipeline;
 import org.apache.camel.spi.InterceptStrategy;
-import org.apache.camel.spi.RouteContext;
 
 public class InterceptReifier<T extends InterceptDefinition> extends ProcessorReifier<T> {
 
-    public InterceptReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (T) definition);
+    public InterceptReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (T) definition);
     }
 
     @Override
@@ -39,7 +39,7 @@ public class InterceptReifier<T extends InterceptDefinition> extends ProcessorRe
 
         // add the output as a intercept strategy to the route context so its
         // invoked on each processing step
-        routeContext.getInterceptStrategies().add(new InterceptStrategy() {
+        route.getInterceptStrategies().add(new InterceptStrategy() {
             private Processor interceptedTarget;
 
             public Processor wrapProcessorInInterceptors(CamelContext context, NamedNode definition, Processor target, Processor nextTarget) throws Exception {
@@ -64,7 +64,7 @@ public class InterceptReifier<T extends InterceptDefinition> extends ProcessorRe
         });
 
         // remove me from the route so I am not invoked in a regular route path
-        ((RouteDefinition)routeContext.getRoute()).getOutputs().remove(definition);
+        ((RouteDefinition) route.getRoute()).getOutputs().remove(definition);
         // and return no processor to invoke next from me
         return null;
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
index 8f67c94..9a6940a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/InterceptSendToEndpointReifier.java
@@ -21,6 +21,7 @@ import java.util.List;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.impl.engine.DefaultInterceptSendToEndpoint;
 import org.apache.camel.model.InterceptSendToEndpointDefinition;
 import org.apache.camel.model.ProcessorDefinition;
@@ -28,14 +29,13 @@ import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.processor.InterceptEndpointProcessor;
 import org.apache.camel.spi.EndpointStrategy;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.util.URISupport;
 
 public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSendToEndpointDefinition> {
 
-    public InterceptSendToEndpointReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (InterceptSendToEndpointDefinition) definition);
+    public InterceptSendToEndpointReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (InterceptSendToEndpointDefinition) definition);
     }
 
     @Override
@@ -48,12 +48,12 @@ public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSe
             ToDefinition to = new ToDefinition(parseString(definition.getAfterUri()));
             // at first use custom factory
             if (camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
-                afterProcessor = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(routeContext, to);
+                afterProcessor = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(route, to);
             }
             // fallback to default implementation if factory did not create the
             // processor
             if (afterProcessor == null) {
-                afterProcessor = reifier(routeContext, to).createProcessor();
+                afterProcessor = reifier(route, to).createProcessor();
             }
         }
         final Processor after = afterProcessor;
@@ -86,7 +86,7 @@ public class InterceptSendToEndpointReifier extends ProcessorReifier<InterceptSe
         // instead we use the proxy endpoints producer do the triggering. That
         // is we trigger when someone sends
         // an exchange to the endpoint, see InterceptSendToEndpoint for details.
-        RouteDefinition route = (RouteDefinition)routeContext.getRoute();
+        RouteDefinition route = (RouteDefinition) this.route.getRoute();
         List<ProcessorDefinition<?>> outputs = route.getOutputs();
         outputs.remove(definition);
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoadBalanceReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoadBalanceReifier.java
index 72c3d03..b4f28b2 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoadBalanceReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoadBalanceReifier.java
@@ -18,17 +18,17 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Channel;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.LoadBalanceDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.reifier.loadbalancer.LoadBalancerReifier;
-import org.apache.camel.spi.RouteContext;
 
 public class LoadBalanceReifier extends ProcessorReifier<LoadBalanceDefinition> {
 
-    public LoadBalanceReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (LoadBalanceDefinition)definition);
+    public LoadBalanceReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (LoadBalanceDefinition)definition);
     }
 
     @Override
@@ -39,7 +39,7 @@ public class LoadBalanceReifier extends ProcessorReifier<LoadBalanceDefinition>
         LoadBalancer loadBalancer = definition.getLoadBalancerType().getLoadBalancer();
         if (loadBalancer == null) {
             // then create it and reuse it
-            loadBalancer = LoadBalancerReifier.reifier(routeContext, definition.getLoadBalancerType()).createLoadBalancer();
+            loadBalancer = LoadBalancerReifier.reifier(route, definition.getLoadBalancerType()).createLoadBalancer();
             definition.getLoadBalancerType().setLoadBalancer(loadBalancer);
 
             // some load balancer can only support a fixed number of outputs
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LogReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LogReifier.java
index 7aa69a8..7a3a223 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LogReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LogReifier.java
@@ -23,12 +23,12 @@ import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.LoggingLevel;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.LogDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.LogProcessor;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.spi.MaskingFormatter;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.processor.DefaultMaskingFormatter;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StringHelper;
@@ -37,8 +37,8 @@ import org.slf4j.LoggerFactory;
 
 public class LogReifier extends ProcessorReifier<LogDefinition> {
 
-    public LogReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (LogDefinition)definition);
+    public LogReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (LogDefinition)definition);
     }
 
     @Override
@@ -78,7 +78,7 @@ public class LogReifier extends ProcessorReifier<LogDefinition> {
                 }
             }
             if (name == null) {
-                name = routeContext.getRouteId();
+                name = route.getRouteId();
                 log.debug("LogName is not configured, using route id as logName: {}", name);
             }
             logger = LoggerFactory.getLogger(name);
@@ -92,7 +92,7 @@ public class LogReifier extends ProcessorReifier<LogDefinition> {
     }
 
     private MaskingFormatter getMaskingFormatter() {
-        if (routeContext.isLogMask()) {
+        if (route.isLogMask()) {
             MaskingFormatter formatter = lookup(MaskingFormatter.CUSTOM_LOG_MASK_REF, MaskingFormatter.class);
             if (formatter == null) {
                 formatter = new DefaultMaskingFormatter();
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoopReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoopReifier.java
index 70b2a6b..47b0ca0 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoopReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/LoopReifier.java
@@ -19,15 +19,15 @@ package org.apache.camel.reifier;
 import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.LoopDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.LoopProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class LoopReifier extends ExpressionReifier<LoopDefinition> {
 
-    public LoopReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (LoopDefinition)definition);
+    public LoopReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (LoopDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MarshalReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MarshalReifier.java
index b4fb614..367137b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MarshalReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MarshalReifier.java
@@ -17,17 +17,17 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.MarshalDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.reifier.dataformat.DataFormatReifier;
 import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.processor.MarshalProcessor;
 
 public class MarshalReifier extends ProcessorReifier<MarshalDefinition> {
 
-    public MarshalReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (MarshalDefinition) definition);
+    public MarshalReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (MarshalDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MulticastReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MulticastReifier.java
index c4a689d..50b0d23 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MulticastReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/MulticastReifier.java
@@ -23,18 +23,18 @@ import java.util.concurrent.ExecutorService;
 import org.apache.camel.AggregationStrategy;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.MulticastDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.MulticastProcessor;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
 import org.apache.camel.processor.aggregate.ShareUnitOfWorkAggregationStrategy;
 import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy;
-import org.apache.camel.spi.RouteContext;
 
 public class MulticastReifier extends ProcessorReifier<MulticastDefinition> {
 
-    public MulticastReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (MulticastDefinition) definition);
+    public MulticastReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (MulticastDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
index e97f67e..0221712 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
@@ -20,17 +20,17 @@ import java.util.concurrent.ExecutorService;
 
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.OnCompletionDefinition;
 import org.apache.camel.model.OnCompletionMode;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.OnCompletionProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class OnCompletionReifier extends ProcessorReifier<OnCompletionDefinition> {
 
-    public OnCompletionReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (OnCompletionDefinition)definition);
+    public OnCompletionReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (OnCompletionDefinition)definition);
     }
 
     @Override
@@ -59,16 +59,16 @@ public class OnCompletionReifier extends ProcessorReifier<OnCompletionDefinition
         }
         if (original) {
             // ensure allow original is turned on
-            routeContext.setAllowUseOriginalMessage(true);
+            route.setAllowUseOriginalMessage(true);
         }
 
         Processor childProcessor = this.createChildProcessor(true);
 
         // wrap the on completion route in a unit of work processor
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, childProcessor);
-        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext, camelContext));
+        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
 
-        routeContext.setOnCompletion(getId(definition), internal);
+        route.setOnCompletion(getId(definition), internal);
 
         Predicate when = null;
         if (definition.getOnWhen() != null) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
index 99428ca..61652aa 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnExceptionReifier.java
@@ -22,17 +22,17 @@ import java.util.List;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.CatchProcessor;
 import org.apache.camel.processor.FatalFallbackErrorHandler;
 import org.apache.camel.spi.ClassResolver;
-import org.apache.camel.spi.RouteContext;
 
 public class OnExceptionReifier extends ProcessorReifier<OnExceptionDefinition> {
 
-    public OnExceptionReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (OnExceptionDefinition)definition);
+    public OnExceptionReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (OnExceptionDefinition)definition);
     }
 
     @Override
@@ -54,7 +54,7 @@ public class OnExceptionReifier extends ProcessorReifier<OnExceptionDefinition>
 
         if (parseBoolean(definition.getUseOriginalMessage(), false)) {
             // ensure allow original is turned on
-            routeContext.setAllowUseOriginalMessage(true);
+            route.setAllowUseOriginalMessage(true);
         }
 
         // lets attach this on exception to the route error handler
@@ -64,12 +64,12 @@ public class OnExceptionReifier extends ProcessorReifier<OnExceptionDefinition>
             // have child output
             Processor errorHandler = new FatalFallbackErrorHandler(child);
             String id = getId(definition);
-            routeContext.setOnException(id, errorHandler);
+            route.setOnException(id, errorHandler);
         }
         // lookup the error handler builder
-        ErrorHandlerFactory builder = routeContext.getErrorHandlerFactory();
+        ErrorHandlerFactory builder = route.getErrorHandlerFactory();
         // and add this as error handlers
-        routeContext.addErrorHandler(builder, definition);
+        route.addErrorHandler(builder, definition);
     }
 
     @Override
@@ -82,7 +82,7 @@ public class OnExceptionReifier extends ProcessorReifier<OnExceptionDefinition>
 
         if (parseBoolean(definition.getUseOriginalMessage(), false)) {
             // ensure allow original is turned on
-            routeContext.setAllowUseOriginalMessage(true);
+            route.setAllowUseOriginalMessage(true);
         }
 
         // must validate configuration before creating processor
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnFallbackReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnFallbackReifier.java
index 3a6e2d1..80f423c 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnFallbackReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OnFallbackReifier.java
@@ -17,14 +17,14 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.OnFallbackDefinition;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.spi.RouteContext;
 
 public class OnFallbackReifier extends ProcessorReifier<OnFallbackDefinition> {
 
-    public OnFallbackReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (OnFallbackDefinition)definition);
+    public OnFallbackReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (OnFallbackDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OtherwiseReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OtherwiseReifier.java
index 2e78b4f..11c1090 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OtherwiseReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/OtherwiseReifier.java
@@ -17,14 +17,14 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.OtherwiseDefinition;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.spi.RouteContext;
 
 public class OtherwiseReifier extends ProcessorReifier<OtherwiseDefinition> {
 
-    public OtherwiseReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, OtherwiseDefinition.class.cast(definition));
+    public OtherwiseReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, OtherwiseDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PipelineReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PipelineReifier.java
index 441d83c..659e691 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PipelineReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PipelineReifier.java
@@ -17,14 +17,14 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.PipelineDefinition;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.spi.RouteContext;
 
 public class PipelineReifier extends ProcessorReifier<PipelineDefinition> {
 
-    public PipelineReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, PipelineDefinition.class.cast(definition));
+    public PipelineReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, PipelineDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PolicyReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PolicyReifier.java
index de5b2ec..8c2bd4b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PolicyReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PolicyReifier.java
@@ -17,18 +17,18 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.model.PolicyDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.WrapProcessor;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class PolicyReifier extends AbstractPolicyReifier<PolicyDefinition> {
 
-    public PolicyReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (PolicyDefinition) definition);
+    public PolicyReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (PolicyDefinition) definition);
     }
 
     @Override
@@ -37,13 +37,13 @@ public class PolicyReifier extends AbstractPolicyReifier<PolicyDefinition> {
         ObjectHelper.notNull(policy, "policy", definition);
 
         // before wrap
-        policy.beforeWrap(routeContext, definition);
+        policy.beforeWrap(route, definition);
 
         // create processor after the before wrap
         Processor childProcessor = this.createChildProcessor(true);
 
         // wrap
-        Processor target = policy.wrap(routeContext, childProcessor);
+        Processor target = policy.wrap(route, childProcessor);
 
         if (!(target instanceof Service)) {
             // wrap the target so it becomes a service and we can manage its
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PollEnrichReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PollEnrichReifier.java
index b885cfa..ec310c4 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PollEnrichReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/PollEnrichReifier.java
@@ -20,16 +20,16 @@ import org.apache.camel.AggregationStrategy;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.PollEnrichDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.processor.PollEnricher;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
-import org.apache.camel.spi.RouteContext;
 
 public class PollEnrichReifier extends ProcessorReifier<PollEnrichDefinition> {
 
-    public PollEnrichReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (PollEnrichDefinition)definition);
+    public PollEnrichReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (PollEnrichDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessReifier.java
index 9ad3c5c..ad7cf24 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessReifier.java
@@ -18,18 +18,18 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.model.ProcessDefinition;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.processor.DelegateAsyncProcessor;
 import org.apache.camel.support.processor.DelegateSyncProcessor;
 import org.apache.camel.util.ObjectHelper;
 
 public class ProcessReifier extends ProcessorReifier<ProcessDefinition> {
 
-    public ProcessReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (ProcessDefinition)definition);
+    public ProcessReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (ProcessDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
index 8012339..f41b21b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ProcessorReifier.java
@@ -30,6 +30,7 @@ import org.apache.camel.Channel;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.AggregateDefinition;
 import org.apache.camel.model.BeanDefinition;
 import org.apache.camel.model.CatchDefinition;
@@ -109,7 +110,6 @@ import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.ReifierStrategy;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.util.ObjectHelper;
 import org.slf4j.Logger;
@@ -117,11 +117,11 @@ import org.slf4j.LoggerFactory;
 
 public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends AbstractReifier {
 
-    private static final Map<Class<?>, BiFunction<RouteContext, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>>> PROCESSORS;
+    private static final Map<Class<?>, BiFunction<Route, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>>> PROCESSORS;
     static {
         // NOTE: if adding a new class then update the initial capacity of the
         // HashMap
-        Map<Class<?>, BiFunction<RouteContext, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>>> map = new HashMap<>(65);
+        Map<Class<?>, BiFunction<Route, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>>> map = new HashMap<>(65);
         map.put(AggregateDefinition.class, AggregateReifier::new);
         map.put(BeanDefinition.class, BeanReifier::new);
         map.put(CatchDefinition.class, CatchReifier::new);
@@ -160,7 +160,6 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
         map.put(RemovePropertyDefinition.class, RemovePropertyReifier::new);
         map.put(ResequenceDefinition.class, ResequenceReifier::new);
         map.put(RollbackDefinition.class, RollbackReifier::new);
-        map.put(RouteDefinition.class, RouteReifier::new);
         map.put(RoutingSlipDefinition.class, RoutingSlipReifier::new);
         map.put(SagaDefinition.class, SagaReifier::new);
         map.put(SamplingDefinition.class, SamplingReifier::new);
@@ -194,8 +193,8 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
 
     protected final T definition;
 
-    public ProcessorReifier(RouteContext routeContext, T definition) {
-        super(routeContext);
+    public ProcessorReifier(Route route, T definition) {
+        super(route);
         this.definition = definition;
     }
 
@@ -204,7 +203,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
         this.definition = definition;
     }
 
-    public static void registerReifier(Class<?> processorClass, BiFunction<RouteContext, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>> creator) {
+    public static void registerReifier(Class<?> processorClass, BiFunction<Route, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>> creator) {
         PROCESSORS.put(processorClass, creator);
     }
 
@@ -212,10 +211,10 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
         PROCESSORS.clear();
     }
 
-    public static ProcessorReifier<? extends ProcessorDefinition<?>> reifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        BiFunction<RouteContext, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>> reifier = PROCESSORS.get(definition.getClass());
+    public static ProcessorReifier<? extends ProcessorDefinition<?>> reifier(Route route, ProcessorDefinition<?> definition) {
+        BiFunction<Route, ProcessorDefinition<?>, ProcessorReifier<? extends ProcessorDefinition<?>>> reifier = PROCESSORS.get(definition.getClass());
         if (reifier != null) {
-            return reifier.apply(routeContext, definition);
+            return reifier.apply(route, definition);
         }
         throw new IllegalStateException("Unsupported definition: " + definition);
     }
@@ -494,7 +493,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
         Processor children = null;
         // at first use custom factory
         if (camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
-            children = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createChildProcessor(routeContext, definition, mandatory);
+            children = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createChildProcessor(route, definition, mandatory);
         }
         // fallback to default implementation if factory did not create the
         // child
@@ -515,19 +514,17 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
             return;
         }
 
-        if (!routeContext.isRouteAdded()) {
-            // are we routing to an endpoint interceptor, if so we should not
-            // add it as an event driven
-            // processor as we use the producer to trigger the interceptor
-            boolean endpointInterceptor = processor.getNextProcessor() instanceof InterceptEndpointProcessor;
+        // are we routing to an endpoint interceptor, if so we should not
+        // add it as an event driven
+        // processor as we use the producer to trigger the interceptor
+        boolean endpointInterceptor = processor.getNextProcessor() instanceof InterceptEndpointProcessor;
 
-            // only add regular processors as event driven
-            if (endpointInterceptor) {
-                log.debug("Endpoint interceptor should not be added as an event driven consumer route: {}", processor);
-            } else {
-                log.trace("Adding event driven processor: {}", processor);
-                routeContext.addEventDrivenProcessor(processor);
-            }
+        // only add regular processors as event driven
+        if (endpointInterceptor) {
+            log.debug("Endpoint interceptor should not be added as an event driven consumer route: {}", processor);
+        } else {
+            log.trace("Adding event driven processor: {}", processor);
+            route.getEventDrivenProcessors().add(processor);
         }
     }
 
@@ -555,9 +552,9 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
         // add interceptor strategies to the channel must be in this order:
         // camel context, route context, local
         List<InterceptStrategy> interceptors = new ArrayList<>();
-        addInterceptStrategies(interceptors, camelContext.adapt(ExtendedCamelContext.class).getInterceptStrategies());
-        addInterceptStrategies(interceptors, routeContext.getInterceptStrategies());
-        addInterceptStrategies(interceptors, definition.getInterceptStrategies());
+        interceptors.addAll(camelContext.adapt(ExtendedCamelContext.class).getInterceptStrategies());
+        interceptors.addAll(route.getInterceptStrategies());
+        interceptors.addAll(definition.getInterceptStrategies());
 
         // force the creation of an id
         RouteDefinitionHelper.forceAssignIds(camelContext, definition);
@@ -592,7 +589,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
             routeScoped = ((OnCompletionDefinition)definition).isRouteScoped();
         }
         // initialize the channel
-        channel.initChannel(routeContext, definition, child, interceptors, processor, route, first, routeScoped);
+        channel.initChannel(this.route, definition, child, interceptors, processor, route, first, routeScoped);
 
         boolean wrap = false;
         // set the error handler, must be done after init as we can set the
@@ -678,15 +675,15 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
      * @throws Exception can be thrown if failed to create error handler builder
      */
     protected Processor wrapInErrorHandler(Processor output, boolean longLived) throws Exception {
-        ErrorHandlerFactory builder = routeContext.getErrorHandlerFactory();
+        ErrorHandlerFactory builder = route.getErrorHandlerFactory();
 
         // create error handler
-        Processor errorHandler = ErrorHandlerReifier.reifier(routeContext, builder).createErrorHandler(output);
+        Processor errorHandler = ErrorHandlerReifier.reifier(route, builder).createErrorHandler(output);
 
         if (longLived) {
             // invoke lifecycles so we can manage this error handler builder
             for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-                strategy.onErrorHandlerAdd(routeContext, errorHandler, builder);
+                strategy.onErrorHandlerAdd(route, errorHandler, builder);
             }
         }
 
@@ -694,16 +691,6 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
     }
 
     /**
-     * Adds the given list of interceptors to the channel.
-     *
-     * @param interceptors the list to add strategies
-     * @param strategies list of strategies to add.
-     */
-    protected void addInterceptStrategies(List<InterceptStrategy> interceptors, List<InterceptStrategy> strategies) {
-        interceptors.addAll(strategies);
-    }
-
-    /**
      * Creates a new instance of some kind of composite processor which defaults
      * to using a {@link Pipeline} but derived classes could change the
      * behaviour
@@ -713,15 +700,11 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
     }
 
     protected Processor createOutputsProcessor(Collection<ProcessorDefinition<?>> outputs) throws Exception {
-        return createOutputsProcessorImpl(outputs);
-    }
-
-    protected Processor createOutputsProcessorImpl(Collection<ProcessorDefinition<?>> outputs) throws Exception {
         List<Processor> list = new ArrayList<>();
         for (ProcessorDefinition<?> output : outputs) {
 
             // allow any custom logic before we create the processor
-            reifier(routeContext, output).preCreateProcessor();
+            reifier(route, output).preCreateProcessor();
 
             Processor processor = createProcessor(output);
 
@@ -731,7 +714,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
                 ((IdAware)processor).setId(id);
             }
             if (processor instanceof RouteIdAware) {
-                ((RouteIdAware)processor).setRouteId(routeContext.getRouteId());
+                ((RouteIdAware)processor).setRouteId(route.getRouteId());
             }
 
             if (output instanceof Channel && processor == null) {
@@ -760,12 +743,12 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
         Processor processor = null;
         // at first use custom factory
         if (camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
-            processor = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(routeContext, output);
+            processor = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(route, output);
         }
         // fallback to default implementation if factory did not create the
         // processor
         if (processor == null) {
-            processor = reifier(routeContext, output).createProcessor();
+            processor = reifier(route, output).createProcessor();
         }
         return processor;
     }
@@ -782,7 +765,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
 
         // at first use custom factory
         if (camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory() != null) {
-            processor = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(routeContext, definition);
+            processor = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(route, definition);
         }
         // fallback to default implementation if factory did not create the
         // processor
@@ -796,7 +779,7 @@ public abstract class ProcessorReifier<T extends ProcessorDefinition<?>> extends
             ((IdAware)processor).setId(id);
         }
         if (processor instanceof RouteIdAware) {
-            ((RouteIdAware)processor).setRouteId(routeContext.getRouteId());
+            ((RouteIdAware)processor).setRouteId(route.getRouteId());
         }
 
         if (processor == null) {
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RecipientListReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
index 9ad47d8..cdb6cb5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RecipientListReifier.java
@@ -24,6 +24,7 @@ import org.apache.camel.AggregationStrategy;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RecipientListDefinition;
 import org.apache.camel.processor.EvaluateExpressionProcessor;
@@ -31,12 +32,11 @@ import org.apache.camel.processor.RecipientList;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
 import org.apache.camel.processor.aggregate.ShareUnitOfWorkAggregationStrategy;
 import org.apache.camel.processor.aggregate.UseLatestAggregationStrategy;
-import org.apache.camel.spi.RouteContext;
 
 public class RecipientListReifier extends ProcessorReifier<RecipientListDefinition<?>> {
 
-    public RecipientListReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (RecipientListDefinition<?>)definition);
+    public RecipientListReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (RecipientListDefinition<?>)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemoveHeaderReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemoveHeaderReifier.java
index 4104841..0f8678d 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemoveHeaderReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemoveHeaderReifier.java
@@ -17,16 +17,16 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RemoveHeaderDefinition;
 import org.apache.camel.processor.RemoveHeaderProcessor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class RemoveHeaderReifier extends ProcessorReifier<RemoveHeaderDefinition> {
 
-    public RemoveHeaderReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (RemoveHeaderDefinition) definition);
+    public RemoveHeaderReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (RemoveHeaderDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemoveHeadersReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemoveHeadersReifier.java
index f0e57a9..fef4d11 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemoveHeadersReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemoveHeadersReifier.java
@@ -19,16 +19,16 @@ package org.apache.camel.reifier;
 import java.util.stream.Stream;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RemoveHeadersDefinition;
 import org.apache.camel.processor.RemoveHeadersProcessor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class RemoveHeadersReifier extends ProcessorReifier<RemoveHeadersDefinition> {
 
-    public RemoveHeadersReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (RemoveHeadersDefinition) definition);
+    public RemoveHeadersReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (RemoveHeadersDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemovePropertiesReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemovePropertiesReifier.java
index b53c010..4b57788 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemovePropertiesReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemovePropertiesReifier.java
@@ -19,16 +19,16 @@ package org.apache.camel.reifier;
 import java.util.stream.Stream;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RemovePropertiesDefinition;
 import org.apache.camel.processor.RemovePropertiesProcessor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class RemovePropertiesReifier extends ProcessorReifier<RemovePropertiesDefinition> {
 
-    public RemovePropertiesReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (RemovePropertiesDefinition) definition);
+    public RemovePropertiesReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (RemovePropertiesDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemovePropertyReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemovePropertyReifier.java
index f7b4eea..4e51bd4 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemovePropertyReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RemovePropertyReifier.java
@@ -17,16 +17,16 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RemovePropertyDefinition;
 import org.apache.camel.processor.RemovePropertyProcessor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class RemovePropertyReifier extends ProcessorReifier<RemovePropertyDefinition> {
 
-    public RemovePropertyReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (RemovePropertyDefinition)definition);
+    public RemovePropertyReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (RemovePropertyDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ResequenceReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
index 74d92d9..19a401b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
@@ -18,6 +18,7 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ResequenceDefinition;
 import org.apache.camel.model.config.BatchResequencerConfig;
@@ -28,13 +29,12 @@ import org.apache.camel.processor.Resequencer;
 import org.apache.camel.processor.StreamResequencer;
 import org.apache.camel.processor.resequencer.DefaultExchangeComparator;
 import org.apache.camel.processor.resequencer.ExpressionResultComparator;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class ResequenceReifier extends ProcessorReifier<ResequenceDefinition> {
 
-    public ResequenceReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (ResequenceDefinition)definition);
+    public ResequenceReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (ResequenceDefinition)definition);
     }
 
     @Override
@@ -75,7 +75,7 @@ public class ResequenceReifier extends ProcessorReifier<ResequenceDefinition> {
 
         // and wrap in unit of work
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, processor);
-        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext, camelContext));
+        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
 
         ObjectHelper.notNull(config, "config", this);
         ObjectHelper.notNull(expression, "expression", this);
@@ -107,7 +107,7 @@ public class ResequenceReifier extends ProcessorReifier<ResequenceDefinition> {
         Expression expression = createExpression(definition.getExpression());
 
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, processor);
-        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext, camelContext));
+        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
 
         ObjectHelper.notNull(config, "config", this);
         ObjectHelper.notNull(expression, "expression", this);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RollbackReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RollbackReifier.java
index 7af8128f..2157ed9 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RollbackReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RollbackReifier.java
@@ -17,15 +17,15 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RollbackDefinition;
 import org.apache.camel.processor.RollbackProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class RollbackReifier extends ProcessorReifier<RollbackDefinition> {
 
-    public RollbackReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (RollbackDefinition)definition);
+    public RollbackReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (RollbackDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
index c403cc1..9223e51 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -17,7 +17,9 @@
 package org.apache.camel.reifier;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.List;
+import java.util.Map;
 import java.util.StringTokenizer;
 
 import org.apache.camel.CamelContext;
@@ -33,31 +35,26 @@ import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.AdviceWithTask;
 import org.apache.camel.builder.EndpointConsumerBuilder;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.PropertyDefinition;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.model.RoutesDefinition;
+import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.ContractAdvice;
+import org.apache.camel.processor.Pipeline;
+import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
 import org.apache.camel.reifier.rest.RestBindingReifier;
 import org.apache.camel.spi.Contract;
 import org.apache.camel.spi.LifecycleStrategy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.spi.ManagementInterceptStrategy;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.spi.RoutePolicyFactory;
-import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.ObjectHelper;
 
 public class RouteReifier extends ProcessorReifier<RouteDefinition> {
 
-    public RouteReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (RouteDefinition) definition);
-    }
-
-    public RouteReifier(CamelContext camelContext, ProcessorDefinition<?> definition) {
-        super(camelContext, (RouteDefinition) definition);
-    }
-
     /**
      * Advices this route with the route builder.
      * <p/>
@@ -90,7 +87,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
      * @throws Exception can be thrown from the route builder
      * @see AdviceWithRouteBuilder
      */
-    public static RouteDefinition adviceWith(RouteDefinition definition, CamelContext camelContext, RouteBuilder builder) throws Exception {
+    public static RouteDefinition adviceWith(RouteDefinition definition, CamelContext camelContext, AdviceWithRouteBuilder builder) throws Exception {
         ObjectHelper.notNull(definition, "RouteDefinition");
         ObjectHelper.notNull(camelContext, "CamelContext");
         ObjectHelper.notNull(builder, "RouteBuilder");
@@ -101,6 +98,15 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         return new RouteReifier(camelContext, definition).adviceWith(builder);
     }
 
+    private static final String[] reservedProperties = new String[] {
+            Route.ID_PROPERTY, Route.CUSTOM_ID_PROPERTY, Route.PARENT_PROPERTY,
+            Route.DESCRIPTION_PROPERTY, Route.GROUP_PROPERTY,
+            Route.REST_PROPERTY};
+
+    public RouteReifier(CamelContext camelContext, ProcessorDefinition<?> definition) {
+        super(camelContext, (RouteDefinition) definition);
+    }
+
     @Override
     public Processor createProcessor() throws Exception {
         throw new UnsupportedOperationException("Not implemented for RouteDefinition");
@@ -150,19 +156,17 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
      * @see AdviceWithRouteBuilder
      */
     @SuppressWarnings("deprecation")
-    public RouteDefinition adviceWith(RouteBuilder builder) throws Exception {
+    public RouteDefinition adviceWith(AdviceWithRouteBuilder builder) throws Exception {
         ObjectHelper.notNull(builder, "RouteBuilder");
+        Model model = camelContext.getExtension(Model.class);
+        ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class);
 
         log.debug("AdviceWith route before: {}", this);
 
         // inject this route into the advice route builder so it can access this route
         // and offer features to manipulate the route directly
-        boolean logRoutesAsXml = true;
-        if (builder instanceof AdviceWithRouteBuilder) {
-            AdviceWithRouteBuilder arb = (AdviceWithRouteBuilder)builder;
-            arb.setOriginalRoute(definition);
-            logRoutesAsXml = arb.isLogRouteAsXml();
-        }
+        boolean logRoutesAsXml = builder.isLogRouteAsXml();
+        builder.setOriginalRoute(definition);
 
         // configure and prepare the routes from the builder
         RoutesDefinition routes = builder.configureRoutes(camelContext);
@@ -180,14 +184,13 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         // context scoped error handler, in case no error handlers was
         // configured
         if (builder.getRouteCollection().getErrorHandlerFactory() != null
-            && camelContext.adapt(ExtendedCamelContext.class).getErrorHandlerFactory() != builder.getRouteCollection().getErrorHandlerFactory()) {
+            && ecc.getErrorHandlerFactory() != builder.getRouteCollection().getErrorHandlerFactory()) {
             throw new IllegalArgumentException("You can not advice with error handlers. Remove the error handlers from the route builder.");
         }
 
         String beforeAsXml = null;
         if (logRoutesAsXml && log.isInfoEnabled()) {
             try {
-                ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class);
                 beforeAsXml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, definition);
             } catch (Throwable e) {
                 // ignore, it may be due jaxb is not on classpath etc
@@ -195,14 +198,12 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         }
 
         // stop and remove this existing route
-        camelContext.getExtension(Model.class).removeRouteDefinition(definition);
+        model.removeRouteDefinition(definition);
 
         // any advice with tasks we should execute first?
-        if (builder instanceof AdviceWithRouteBuilder) {
-            List<AdviceWithTask> tasks = ((AdviceWithRouteBuilder)builder).getAdviceWithTasks();
-            for (AdviceWithTask task : tasks) {
-                task.task();
-            }
+        List<AdviceWithTask> tasks = builder.getAdviceWithTasks();
+        for (AdviceWithTask task : tasks) {
+            task.task();
         }
 
         // now merge which also ensures that interceptors and the likes get
@@ -210,7 +211,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         RouteDefinition merged = routes.route(definition);
 
         // add the new merged route
-        camelContext.getExtension(Model.class).getRouteDefinitions().add(0, merged);
+        model.getRouteDefinitions().add(0, merged);
 
         // log the merged route at info level to make it easier to end users to
         // spot any mistakes they may have made
@@ -220,7 +221,6 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
 
         if (beforeAsXml != null && logRoutesAsXml && log.isInfoEnabled()) {
             try {
-                ExtendedCamelContext ecc = camelContext.adapt(ExtendedCamelContext.class);
                 String afterAsXml = ecc.getModelToXMLDumper().dumpModelAsXml(camelContext, merged);
                 log.info("Adviced route before/after as XML:\n{}\n{}", beforeAsXml, afterAsXml);
             } catch (Throwable e) {
@@ -230,7 +230,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
 
         // If the camel context is started then we start the route
         if (camelContext.isStarted()) {
-            camelContext.getExtension(Model.class).addRouteDefinition(merged);
+            model.addRouteDefinition(merged);
         }
         return merged;
     }
@@ -238,14 +238,35 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
     // Implementation methods
     // -------------------------------------------------------------------------
     protected Route doCreateRoute() throws Exception {
+        // resolve endpoint
+        Endpoint endpoint = definition.getInput().getEndpoint();
+        if (endpoint == null) {
+            EndpointConsumerBuilder def = definition.getInput().getEndpointConsumerBuilder();
+            if (def != null) {
+                endpoint = def.resolve(camelContext);
+            } else {
+                endpoint = resolveEndpoint(definition.getInput().getEndpointUri());
+            }
+        }
+
+        // create route
+        String id = definition.idOrCreate(camelContext.adapt(ExtendedCamelContext.class).getNodeIdFactory());
+        DefaultRoute route = new DefaultRoute(camelContext, definition, id, endpoint) {
+            @Override
+            public Processor createErrorHandler(Processor processor) throws Exception {
+                return ErrorHandlerReifier.reifier(this, getErrorHandlerFactory())
+                        .createErrorHandler(processor);
+            }
+        };
+
         // configure error handler
-        routeContext.setErrorHandlerFactory(definition.getErrorHandlerFactory());
+        route.setErrorHandlerFactory(definition.getErrorHandlerFactory());
 
         // configure tracing
         if (definition.getTrace() != null) {
             Boolean isTrace = parseBoolean(definition.getTrace());
             if (isTrace != null) {
-                routeContext.setTracing(isTrace);
+                route.setTracing(isTrace);
                 if (isTrace) {
                     log.debug("Tracing is enabled on route: {}", definition.getId());
                     // tracing is added in the DefaultChannel so we can enable
@@ -258,7 +279,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         if (definition.getMessageHistory() != null) {
             Boolean isMessageHistory = parseBoolean(definition.getMessageHistory());
             if (isMessageHistory != null) {
-                routeContext.setMessageHistory(isMessageHistory);
+                route.setMessageHistory(isMessageHistory);
                 if (isMessageHistory) {
                     log.debug("Message history is enabled on route: {}", definition.getId());
                 }
@@ -269,7 +290,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         if (definition.getLogMask() != null) {
             Boolean isLogMask = parseBoolean(definition.getLogMask());
             if (isLogMask != null) {
-                routeContext.setLogMask(isLogMask);
+                route.setLogMask(isLogMask);
                 if (isLogMask) {
                     log.debug("Security mask for Logging is enabled on route: {}", definition.getId());
                 }
@@ -280,7 +301,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         if (definition.getStreamCache() != null) {
             Boolean isStreamCache = parseBoolean(definition.getStreamCache());
             if (isStreamCache != null) {
-                routeContext.setStreamCaching(isStreamCache);
+                route.setStreamCaching(isStreamCache);
                 if (isStreamCache) {
                     log.debug("StreamCaching is enabled on route: {}", definition.getId());
                 }
@@ -291,7 +312,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         if (definition.getDelayer() != null) {
             Long delayer = parseLong(definition.getDelayer());
             if (delayer != null) {
-                routeContext.setDelayer(delayer);
+                route.setDelayer(delayer);
                 if (delayer > 0) {
                     log.debug("Delayer is enabled with: {} ms. on route: {}", delayer, definition.getId());
                 } else {
@@ -304,7 +325,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         if (definition.getRoutePolicies() != null && !definition.getRoutePolicies().isEmpty()) {
             for (RoutePolicy policy : definition.getRoutePolicies()) {
                 log.debug("RoutePolicy is enabled: {} on route: {}", policy, definition.getId());
-                routeContext.getRoutePolicyList().add(policy);
+                route.getRoutePolicyList().add(policy);
             }
         }
         if (definition.getRoutePolicyRef() != null) {
@@ -313,7 +334,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
                 String ref = policyTokens.nextToken().trim();
                 RoutePolicy policy = mandatoryLookup(ref, RoutePolicy.class);
                 log.debug("RoutePolicy is enabled: {} on route: {}", policy, definition.getId());
-                routeContext.getRoutePolicyList().add(policy);
+                route.getRoutePolicyList().add(policy);
             }
         }
         if (camelContext.getRoutePolicyFactories() != null) {
@@ -321,51 +342,33 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
                 RoutePolicy policy = factory.createRoutePolicy(camelContext, definition.getId(), definition);
                 if (policy != null) {
                     log.debug("RoutePolicy is enabled: {} on route: {}", policy, definition.getId());
-                    routeContext.getRoutePolicyList().add(policy);
+                    route.getRoutePolicyList().add(policy);
                 }
             }
         }
 
         // configure auto startup
         Boolean isAutoStartup = parseBoolean(definition.getAutoStartup());
-        if (isAutoStartup != null) {
-            log.debug("Using AutoStartup {} on route: {}", isAutoStartup, definition.getId());
-            routeContext.setAutoStartup(isAutoStartup);
-        }
 
         // configure startup order
-        if (definition.getStartupOrder() != null) {
-            routeContext.setStartupOrder(definition.getStartupOrder());
-        }
+        Integer startupOrder = definition.getStartupOrder();
 
         // configure shutdown
         if (definition.getShutdownRoute() != null) {
             log.debug("Using ShutdownRoute {} on route: {}", definition.getShutdownRoute(), definition.getId());
-            routeContext.setShutdownRoute(parse(ShutdownRoute.class, definition.getShutdownRoute()));
+            route.setShutdownRoute(parse(ShutdownRoute.class, definition.getShutdownRoute()));
         }
         if (definition.getShutdownRunningTask() != null) {
             log.debug("Using ShutdownRunningTask {} on route: {}", definition.getShutdownRunningTask(), definition.getId());
-            routeContext.setShutdownRunningTask(parse(ShutdownRunningTask.class, definition.getShutdownRunningTask()));
+            route.setShutdownRunningTask(parse(ShutdownRunningTask.class, definition.getShutdownRunningTask()));
         }
 
         // should inherit the intercept strategies we have defined
-        routeContext.setInterceptStrategies(definition.getInterceptStrategies());
-
-        // resolve endpoint
-        Endpoint endpoint = definition.getInput().getEndpoint();
-        if (endpoint == null) {
-            EndpointConsumerBuilder def = definition.getInput().getEndpointConsumerBuilder();
-            if (def != null) {
-                endpoint = def.resolve(camelContext);
-            } else {
-                endpoint = resolveEndpoint(definition.getInput().getEndpointUri());
-            }
-        }
-        routeContext.setEndpoint(endpoint);
+        route.getInterceptStrategies().addAll(definition.getInterceptStrategies());
 
         // notify route context created
         for (LifecycleStrategy strategy : camelContext.getLifecycleStrategies()) {
-            strategy.onRouteContextCreate(routeContext);
+            strategy.onRouteContextCreate(route);
         }
 
         // validate route has output processors
@@ -379,15 +382,63 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         List<ProcessorDefinition<?>> list = new ArrayList<>(definition.getOutputs());
         for (ProcessorDefinition<?> output : list) {
             try {
-                ProcessorReifier.reifier(routeContext, output).addRoutes();
+                ProcessorReifier.reifier(route, output).addRoutes();
             } catch (Exception e) {
                 throw new FailedToCreateRouteException(definition.getId(), definition.toString(), output.toString(), e);
             }
         }
 
+        // now lets turn all of the event driven consumer processors into a single route
+        List<Processor> eventDrivenProcessors = route.getEventDrivenProcessors();
+        if (eventDrivenProcessors.isEmpty()) {
+            return null;
+        }
+
+        // Set route properties
+        Map<String, Object> routeProperties = computeRouteProperties();
+
+        // always use an pipeline even if there are only 1 processor as the pipeline
+        // handles preparing the response from the exchange in regard to IN vs OUT messages etc
+        Processor target = new Pipeline(camelContext, eventDrivenProcessors);
+
+        // and wrap it in a unit of work so the UoW is on the top, so the entire route will be in the same UoW
+        CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, target);
+        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
+
+        // and then optionally add route policy processor if a custom policy is set
+        List<RoutePolicy> routePolicyList = route.getRoutePolicyList();
+        if (routePolicyList != null && !routePolicyList.isEmpty()) {
+            for (RoutePolicy policy : routePolicyList) {
+                // add policy as service if we have not already done that (eg possible if two routes have the same service)
+                // this ensures Camel can control the lifecycle of the policy
+                if (!camelContext.hasService(policy)) {
+                    try {
+                        camelContext.addService(policy);
+                    } catch (Exception e) {
+                        throw RuntimeCamelException.wrapRuntimeCamelException(e);
+                    }
+                }
+            }
+
+            internal.addAdvice(new CamelInternalProcessor.RoutePolicyAdvice(routePolicyList));
+        }
+
+        // wrap in route inflight processor to track number of inflight exchanges for the route
+        internal.addAdvice(new CamelInternalProcessor.RouteInflightRepositoryAdvice(camelContext.getInflightRepository(), route.getRouteId()));
+
+        // wrap in JMX instrumentation processor that is used for performance stats
+        ManagementInterceptStrategy managementInterceptStrategy = route.getManagementInterceptStrategy();
+        if (managementInterceptStrategy != null) {
+            internal.addAdvice(CamelInternalProcessor.wrap(managementInterceptStrategy.createProcessor("route")));
+        }
+
+        // wrap in route lifecycle
+        internal.addAdvice(new CamelInternalProcessor.RouteLifecycleAdvice());
+
+        // add advices
         if (definition.getRestBindingDefinition() != null) {
             try {
-                routeContext.addAdvice(new RestBindingReifier(routeContext, definition.getRestBindingDefinition()).createRestBindingAdvice());
+                internal.addAdvice(new RestBindingReifier(route, definition.getRestBindingDefinition()).createRestBindingAdvice());
             } catch (Exception e) {
                 throw RuntimeCamelException.wrapRuntimeCamelException(e);
             }
@@ -404,47 +455,74 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
                 contract.setOutputType(parseString(definition.getOutputType().getUrn()));
                 contract.setValidateOutput(parseBoolean(definition.getOutputType().getValidate(), false));
             }
-            routeContext.addAdvice(new ContractAdvice(contract));
+            internal.addAdvice(new ContractAdvice(contract));
             // make sure to enable data type as its in use when using
             // input/output types on routes
             camelContext.setUseDataType(true);
         }
 
-        // Set route properties
-        routeContext.addProperty(Route.ID_PROPERTY, definition.getId());
-        routeContext.addProperty(Route.CUSTOM_ID_PROPERTY, Boolean.toString(definition.hasCustomIdAssigned()));
-        routeContext.addProperty(Route.PARENT_PROPERTY, Integer.toHexString(definition.hashCode()));
-        routeContext.addProperty(Route.DESCRIPTION_PROPERTY, definition.getDescriptionText());
+        // and create the route that wraps all of this
+        route.setProcessor(internal);
+        route.getProperties().putAll(routeProperties);
+        route.setStartupOrder(startupOrder);
+        if (isAutoStartup != null) {
+            log.debug("Using AutoStartup {} on route: {}", isAutoStartup, definition.getId());
+            route.setAutoStartup(isAutoStartup);
+        }
+
+        // after the route is created then set the route on the policy processor so we get hold of it
+        CamelInternalProcessor.RoutePolicyAdvice task = internal.getAdvice(CamelInternalProcessor.RoutePolicyAdvice.class);
+        if (task != null) {
+            task.setRoute(route);
+        }
+        CamelInternalProcessor.RouteLifecycleAdvice task2 = internal.getAdvice(CamelInternalProcessor.RouteLifecycleAdvice.class);
+        if (task2 != null) {
+            task2.setRoute(route);
+        }
+
+        // invoke init on route policy
+        if (routePolicyList != null && !routePolicyList.isEmpty()) {
+            for (RoutePolicy policy : routePolicyList) {
+                policy.onInit(route);
+            }
+        }
+
+        route.initialized();
+
+        return route;
+    }
+
+    protected Map<String, Object> computeRouteProperties() {
+        Map<String, Object> routeProperties = new HashMap<>();
+        routeProperties.put(Route.ID_PROPERTY, definition.getId());
+        routeProperties.put(Route.CUSTOM_ID_PROPERTY, Boolean.toString(definition.hasCustomIdAssigned()));
+        routeProperties.put(Route.PARENT_PROPERTY, Integer.toHexString(definition.hashCode()));
+        routeProperties.put(Route.DESCRIPTION_PROPERTY, definition.getDescriptionText());
         if (definition.getGroup() != null) {
-            routeContext.addProperty(Route.GROUP_PROPERTY, definition.getGroup());
+            routeProperties.put(Route.GROUP_PROPERTY, definition.getGroup());
         }
         String rest = Boolean.toString(definition.isRest() != null && definition.isRest());
-        routeContext.addProperty(Route.REST_PROPERTY, rest);
+        routeProperties.put(Route.REST_PROPERTY, rest);
 
         List<PropertyDefinition> properties = definition.getRouteProperties();
         if (properties != null) {
-            final String[] reservedProperties = new String[] {Route.ID_PROPERTY, Route.CUSTOM_ID_PROPERTY, Route.PARENT_PROPERTY, Route.DESCRIPTION_PROPERTY, Route.GROUP_PROPERTY,
-                                                              Route.REST_PROPERTY};
 
             for (PropertyDefinition prop : properties) {
                 try {
-                    final String key = CamelContextHelper.parseText(camelContext, prop.getKey());
-                    final String val = CamelContextHelper.parseText(camelContext, prop.getValue());
-
+                    final String key = parseString(prop.getKey());
+                    final String val = parseString(prop.getValue());
                     for (String property : reservedProperties) {
                         if (property.equalsIgnoreCase(key)) {
                             throw new IllegalArgumentException("Cannot set route property " + property + " as it is a reserved property");
                         }
                     }
-
-                    routeContext.addProperty(key, val);
+                    routeProperties.put(key, val);
                 } catch (Exception e) {
                     throw RuntimeCamelException.wrapRuntimeCamelException(e);
                 }
             }
         }
-
-        return routeContext.commit();
+        return routeProperties;
     }
 
 }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RoutingSlipReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RoutingSlipReifier.java
index 611392d..c7b7027 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RoutingSlipReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/RoutingSlipReifier.java
@@ -19,17 +19,17 @@ package org.apache.camel.reifier;
 import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RoutingSlipDefinition;
 import org.apache.camel.processor.RoutingSlip;
-import org.apache.camel.spi.RouteContext;
 
 import static org.apache.camel.model.RoutingSlipDefinition.DEFAULT_DELIMITER;
 
 public class RoutingSlipReifier extends ExpressionReifier<RoutingSlipDefinition<?>> {
 
-    public RoutingSlipReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (RoutingSlipDefinition) definition);
+    public RoutingSlipReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (RoutingSlipDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SagaReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SagaReifier.java
index 17f300d..fa89360 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SagaReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SagaReifier.java
@@ -23,6 +23,7 @@ import java.util.TreeMap;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SagaActionUriDefinition;
@@ -33,13 +34,11 @@ import org.apache.camel.processor.saga.SagaProcessorBuilder;
 import org.apache.camel.processor.saga.SagaPropagation;
 import org.apache.camel.saga.CamelSagaService;
 import org.apache.camel.saga.CamelSagaStep;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.support.CamelContextHelper;
 
 public class SagaReifier extends ProcessorReifier<SagaDefinition> {
 
-    public SagaReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (SagaDefinition)definition);
+    public SagaReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (SagaDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SamplingReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SamplingReifier.java
index 7951b25..75c93ae 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SamplingReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SamplingReifier.java
@@ -19,15 +19,15 @@ package org.apache.camel.reifier;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SamplingDefinition;
 import org.apache.camel.processor.SamplingThrottler;
-import org.apache.camel.spi.RouteContext;
 
 public class SamplingReifier extends ProcessorReifier<SamplingDefinition> {
 
-    public SamplingReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (SamplingDefinition)definition);
+    public SamplingReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (SamplingDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ScriptReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ScriptReifier.java
index e7f6568..e5475b3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ScriptReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ScriptReifier.java
@@ -18,15 +18,15 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ScriptDefinition;
 import org.apache.camel.processor.ScriptProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class ScriptReifier extends ExpressionReifier<ScriptDefinition> {
 
-    public ScriptReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (ScriptDefinition)definition);
+    public ScriptReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (ScriptDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SendReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SendReifier.java
index 09a9ea5..2e1a945 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SendReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SendReifier.java
@@ -19,16 +19,16 @@ package org.apache.camel.reifier;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SendDefinition;
 import org.apache.camel.processor.SendProcessor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.CamelContextHelper;
 
 public class SendReifier extends ProcessorReifier<SendDefinition<?>> {
 
-    public SendReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (SendDefinition) definition);
+    public SendReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (SendDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ServiceCallReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ServiceCallReifier.java
index 84368e6..1f256e5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ServiceCallReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ServiceCallReifier.java
@@ -17,14 +17,14 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.cloud.ServiceCallDefinition;
-import org.apache.camel.spi.RouteContext;
 
 public class ServiceCallReifier extends ProcessorReifier<ServiceCallDefinition> {
 
-    public ServiceCallReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, ServiceCallDefinition.class.cast(definition));
+    public ServiceCallReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, ServiceCallDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetBodyReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetBodyReifier.java
index 840bc37..3ace259 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetBodyReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetBodyReifier.java
@@ -18,15 +18,15 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetBodyDefinition;
 import org.apache.camel.processor.SetBodyProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class SetBodyReifier extends ExpressionReifier<SetBodyDefinition> {
 
-    public SetBodyReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (SetBodyDefinition)definition);
+    public SetBodyReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (SetBodyDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetExchangePatternReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetExchangePatternReifier.java
index af54620..6bbb379 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetExchangePatternReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetExchangePatternReifier.java
@@ -18,15 +18,15 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetExchangePatternDefinition;
 import org.apache.camel.processor.ExchangePatternProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class SetExchangePatternReifier extends ProcessorReifier<SetExchangePatternDefinition> {
 
-    public SetExchangePatternReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (SetExchangePatternDefinition)definition);
+    public SetExchangePatternReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (SetExchangePatternDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetHeaderReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetHeaderReifier.java
index 4da7bcb..2628b5a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetHeaderReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetHeaderReifier.java
@@ -18,17 +18,17 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetHeaderDefinition;
 import org.apache.camel.processor.SetHeaderProcessor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class SetHeaderReifier extends ExpressionReifier<SetHeaderDefinition> {
 
-    public SetHeaderReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (SetHeaderDefinition)definition);
+    public SetHeaderReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (SetHeaderDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetPropertyReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetPropertyReifier.java
index a077bde..9dd6a01 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetPropertyReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SetPropertyReifier.java
@@ -18,17 +18,17 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetPropertyDefinition;
 import org.apache.camel.processor.SetPropertyProcessor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class SetPropertyReifier extends ExpressionReifier<SetPropertyDefinition> {
 
-    public SetPropertyReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (SetPropertyDefinition)definition);
+    public SetPropertyReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (SetPropertyDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SortReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SortReifier.java
index dc3bc07..2a50a02 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SortReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SortReifier.java
@@ -20,10 +20,10 @@ import java.util.Comparator;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SortDefinition;
 import org.apache.camel.processor.SortProcessor;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.ObjectHelper;
 
 import static org.apache.camel.builder.ExpressionBuilder.bodyExpression;
@@ -31,8 +31,8 @@ import static org.apache.camel.util.ObjectHelper.isNotEmpty;
 
 public class SortReifier<T, U extends SortDefinition<T>> extends ExpressionReifier<U> {
 
-    public SortReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (U) definition);
+    public SortReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (U) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SplitReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SplitReifier.java
index 4c4e592..a34a2e8 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SplitReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/SplitReifier.java
@@ -22,17 +22,17 @@ import org.apache.camel.AggregationStrategy;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SplitDefinition;
 import org.apache.camel.processor.Splitter;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
 import org.apache.camel.processor.aggregate.ShareUnitOfWorkAggregationStrategy;
-import org.apache.camel.spi.RouteContext;
 
 public class SplitReifier extends ExpressionReifier<SplitDefinition> {
 
-    public SplitReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (SplitDefinition)definition);
+    public SplitReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (SplitDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/StepReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/StepReifier.java
index 40b2ebd..4b7dbd3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/StepReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/StepReifier.java
@@ -19,15 +19,15 @@ package org.apache.camel.reifier;
 import java.util.List;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.StepDefinition;
 import org.apache.camel.processor.StepProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class StepReifier extends ProcessorReifier<StepDefinition> {
 
-    public StepReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, StepDefinition.class.cast(definition));
+    public StepReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, StepDefinition.class.cast(definition));
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/StopReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/StopReifier.java
index 7e405dc..2e00eaf 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/StopReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/StopReifier.java
@@ -17,15 +17,15 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.StopDefinition;
 import org.apache.camel.processor.StopProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class StopReifier extends ProcessorReifier<StopDefinition> {
 
-    public StopReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (StopDefinition) definition);
+    public StopReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (StopDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThreadsReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThreadsReifier.java
index cd7282b..197f215 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThreadsReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThreadsReifier.java
@@ -20,19 +20,19 @@ import java.util.concurrent.ExecutorService;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.ThreadPoolProfileBuilder;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ThreadsDefinition;
 import org.apache.camel.processor.ThreadsProcessor;
 import org.apache.camel.spi.ExecutorServiceManager;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.ThreadPoolProfile;
 import org.apache.camel.util.concurrent.ThreadPoolRejectedPolicy;
 
 public class ThreadsReifier extends ProcessorReifier<ThreadsDefinition> {
 
-    public ThreadsReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (ThreadsDefinition) definition);
+    public ThreadsReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (ThreadsDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThrottleReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThrottleReifier.java
index 34c2ed0..9c9904f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThrottleReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThrottleReifier.java
@@ -20,15 +20,15 @@ import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ThrottleDefinition;
 import org.apache.camel.processor.Throttler;
-import org.apache.camel.spi.RouteContext;
 
 public class ThrottleReifier extends ExpressionReifier<ThrottleDefinition> {
 
-    public ThrottleReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (ThrottleDefinition) definition);
+    public ThrottleReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (ThrottleDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThrowExceptionReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThrowExceptionReifier.java
index efd6c35..f7959da 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThrowExceptionReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ThrowExceptionReifier.java
@@ -17,15 +17,15 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ThrowExceptionDefinition;
 import org.apache.camel.processor.ThrowExceptionProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class ThrowExceptionReifier extends ProcessorReifier<ThrowExceptionDefinition> {
 
-    public ThrowExceptionReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (ThrowExceptionDefinition) definition);
+    public ThrowExceptionReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (ThrowExceptionDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
index a323fc3..3e016e3 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ToDynamicReifier.java
@@ -23,20 +23,20 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.NoSuchLanguageException;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ToDynamicDefinition;
 import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.spi.Language;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.Pair;
 import org.apache.camel.util.StringHelper;
 import org.apache.camel.util.URISupport;
 
 public class ToDynamicReifier<T extends ToDynamicDefinition> extends ProcessorReifier<T> {
 
-    public ToDynamicReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (T) definition);
+    public ToDynamicReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (T) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TransactedReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TransactedReifier.java
index 3750a8e..d8d7c68 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TransactedReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TransactedReifier.java
@@ -18,17 +18,17 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.CamelContext;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.TransactedDefinition;
 import org.apache.camel.processor.WrapProcessor;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
 
 public class TransactedReifier extends AbstractPolicyReifier<TransactedDefinition> {
 
-    public TransactedReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (TransactedDefinition) definition);
+    public TransactedReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (TransactedDefinition) definition);
     }
 
     public TransactedReifier(CamelContext camelContext, ProcessorDefinition<?> definition) {
@@ -41,13 +41,13 @@ public class TransactedReifier extends AbstractPolicyReifier<TransactedDefinitio
         org.apache.camel.util.ObjectHelper.notNull(policy, "policy", this);
 
         // before wrap
-        policy.beforeWrap(routeContext, definition);
+        policy.beforeWrap(route, definition);
 
         // create processor after the before wrap
         Processor childProcessor = this.createChildProcessor(true);
 
         // wrap
-        Processor target = policy.wrap(routeContext, childProcessor);
+        Processor target = policy.wrap(route, childProcessor);
 
         if (!(target instanceof Service)) {
             // wrap the target so it becomes a service and we can manage its
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TransformReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TransformReifier.java
index 0532fc0..4f7c4e1 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TransformReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TransformReifier.java
@@ -18,15 +18,15 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.TransformDefinition;
 import org.apache.camel.processor.TransformProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class TransformReifier extends ExpressionReifier<TransformDefinition> {
 
-    public TransformReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (TransformDefinition) definition);
+    public TransformReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (TransformDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TryReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TryReifier.java
index b201dd0..f4aa169 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TryReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/TryReifier.java
@@ -20,17 +20,17 @@ import java.util.ArrayList;
 import java.util.List;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.CatchDefinition;
 import org.apache.camel.model.FinallyDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.TryDefinition;
 import org.apache.camel.processor.TryProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class TryReifier extends ProcessorReifier<TryDefinition> {
 
-    public TryReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (TryDefinition) definition);
+    public TryReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (TryDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/UnmarshalReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/UnmarshalReifier.java
index 7b1d1d5..cb678ca 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/UnmarshalReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/UnmarshalReifier.java
@@ -17,17 +17,17 @@
 package org.apache.camel.reifier;
 
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.UnmarshalDefinition;
 import org.apache.camel.reifier.dataformat.DataFormatReifier;
 import org.apache.camel.spi.DataFormat;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.processor.UnmarshalProcessor;
 
 public class UnmarshalReifier extends ProcessorReifier<UnmarshalDefinition> {
 
-    public UnmarshalReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (UnmarshalDefinition) definition);
+    public UnmarshalReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (UnmarshalDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ValidateReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ValidateReifier.java
index 30fbeb3..ccf71ff 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ValidateReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/ValidateReifier.java
@@ -18,15 +18,15 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ValidateDefinition;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.processor.PredicateValidatingProcessor;
 
 public class ValidateReifier extends ExpressionReifier<ValidateDefinition> {
 
-    public ValidateReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (ValidateDefinition) definition);
+    public ValidateReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (ValidateDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WhenReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WhenReifier.java
index 53009eb..1a1491f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WhenReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WhenReifier.java
@@ -16,15 +16,15 @@
  */
 package org.apache.camel.reifier;
 
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.WhenDefinition;
 import org.apache.camel.processor.FilterProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class WhenReifier extends ExpressionReifier<WhenDefinition> {
 
-    public WhenReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (WhenDefinition) definition);
+    public WhenReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (WhenDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WhenSkipSendToEndpointReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WhenSkipSendToEndpointReifier.java
index d1facb2..3497013 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WhenSkipSendToEndpointReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WhenSkipSendToEndpointReifier.java
@@ -18,15 +18,15 @@ package org.apache.camel.reifier;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Predicate;
+import org.apache.camel.Route;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.WhenSkipSendToEndpointDefinition;
 import org.apache.camel.processor.FilterProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class WhenSkipSendToEndpointReifier extends ExpressionReifier<WhenSkipSendToEndpointDefinition> {
 
-    public WhenSkipSendToEndpointReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, (WhenSkipSendToEndpointDefinition) definition);
+    public WhenSkipSendToEndpointReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, (WhenSkipSendToEndpointDefinition) definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WireTapReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WireTapReifier.java
index 063b543..b789a8b 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WireTapReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/WireTapReifier.java
@@ -21,6 +21,7 @@ import java.util.concurrent.ExecutorService;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.ExpressionBuilder;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetHeaderDefinition;
@@ -28,12 +29,11 @@ import org.apache.camel.model.WireTapDefinition;
 import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.processor.WireTapProcessor;
-import org.apache.camel.spi.RouteContext;
 
 public class WireTapReifier extends ToDynamicReifier<WireTapDefinition<?>> {
 
-    public WireTapReifier(RouteContext routeContext, ProcessorDefinition<?> definition) {
-        super(routeContext, definition);
+    public WireTapReifier(Route route, ProcessorDefinition<?> definition) {
+        super(route, definition);
     }
 
     @Override
@@ -53,7 +53,7 @@ public class WireTapReifier extends ToDynamicReifier<WireTapDefinition<?>> {
 
         // and wrap in unit of work
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, target);
-        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(routeContext, camelContext));
+        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
 
         // is true by default
         boolean isCopy = parseBoolean(definition.getCopy(), true);
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/DeadLetterChannelReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/DeadLetterChannelReifier.java
index 716a9bf..3ce447a 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/DeadLetterChannelReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/DeadLetterChannelReifier.java
@@ -20,15 +20,15 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.DeadLetterChannelBuilder;
 import org.apache.camel.processor.errorhandler.DeadLetterChannel;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.StringHelper;
 
 public class DeadLetterChannelReifier extends DefaultErrorHandlerReifier<DeadLetterChannelBuilder> {
 
-    public DeadLetterChannelReifier(RouteContext routeContext, ErrorHandlerFactory definition) {
-        super(routeContext, definition);
+    public DeadLetterChannelReifier(Route route, ErrorHandlerFactory definition) {
+        super(route, definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/DefaultErrorHandlerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/DefaultErrorHandlerReifier.java
index 88a50ea..29f0a24 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/DefaultErrorHandlerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/DefaultErrorHandlerReifier.java
@@ -21,16 +21,16 @@ import java.util.concurrent.ScheduledExecutorService;
 import org.apache.camel.CamelContext;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.DefaultErrorHandlerBuilder;
 import org.apache.camel.processor.errorhandler.DefaultErrorHandler;
 import org.apache.camel.spi.ExecutorServiceManager;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.spi.ThreadPoolProfile;
 
 public class DefaultErrorHandlerReifier<T extends DefaultErrorHandlerBuilder> extends ErrorHandlerReifier<T> {
 
-    public DefaultErrorHandlerReifier(RouteContext routeContext, ErrorHandlerFactory definition) {
-        super(routeContext, (T)definition);
+    public DefaultErrorHandlerReifier(Route route, ErrorHandlerFactory definition) {
+        super(route, (T)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerRefReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerRefReifier.java
index df793fb..33333b5 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerRefReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerRefReifier.java
@@ -18,27 +18,27 @@ package org.apache.camel.reifier.errorhandler;
 
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class ErrorHandlerRefReifier extends ErrorHandlerReifier<ErrorHandlerBuilderRef> {
 
-    public ErrorHandlerRefReifier(RouteContext routeContext, ErrorHandlerFactory definition) {
-        super(routeContext, (ErrorHandlerBuilderRef)definition);
+    public ErrorHandlerRefReifier(Route route, ErrorHandlerFactory definition) {
+        super(route, (ErrorHandlerBuilderRef)definition);
     }
 
     @Override
     public Processor createErrorHandler(Processor processor) throws Exception {
-        ErrorHandlerFactory handler = lookupErrorHandler(routeContext);
-        return ErrorHandlerReifier.reifier(routeContext, handler).createErrorHandler(processor);
+        ErrorHandlerFactory handler = lookupErrorHandler(route);
+        return ErrorHandlerReifier.reifier(route, handler).createErrorHandler(processor);
     }
 
-    private ErrorHandlerFactory lookupErrorHandler(RouteContext routeContext) {
+    private ErrorHandlerFactory lookupErrorHandler(Route route) {
         ErrorHandlerFactory handler =
-                ErrorHandlerReifier.lookupErrorHandlerFactory(routeContext, definition.getRef());
+                ErrorHandlerReifier.lookupErrorHandlerFactory(route, definition.getRef());
         ObjectHelper.notNull(handler, "error handler '" + definition.getRef() + "'");
-        routeContext.addErrorHandlerFactoryReference(definition, handler);
+        route.addErrorHandlerFactoryReference(definition, handler);
         return handler;
     }
 
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
index f58379c..6aa50e9 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
@@ -29,6 +29,7 @@ import org.apache.camel.LoggingLevel;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.DeadLetterChannelBuilder;
 import org.apache.camel.builder.DefaultErrorHandlerBuilder;
@@ -48,16 +49,15 @@ import org.apache.camel.processor.errorhandler.ExceptionPolicyKey;
 import org.apache.camel.processor.errorhandler.RedeliveryErrorHandler;
 import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
 import org.apache.camel.reifier.AbstractReifier;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.ObjectHelper;
 
 public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport> extends AbstractReifier {
 
     public static final String DEFAULT_ERROR_HANDLER_BUILDER = "CamelDefaultErrorHandlerBuilder";
-    private static final Map<Class<?>, BiFunction<RouteContext, ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>>> ERROR_HANDLERS;
+    private static final Map<Class<?>, BiFunction<Route, ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>>> ERROR_HANDLERS;
     static {
-        Map<Class<?>, BiFunction<RouteContext, ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>>> map = new HashMap<>();
+        Map<Class<?>, BiFunction<Route, ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>>> map = new HashMap<>();
         map.put(DeadLetterChannelBuilder.class, DeadLetterChannelReifier::new);
         map.put(DefaultErrorHandlerBuilder.class, DefaultErrorHandlerReifier::new);
         map.put(ErrorHandlerBuilderRef.class, ErrorHandlerRefReifier::new);
@@ -70,19 +70,19 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
     /**
      * Utility classes should not have a public constructor.
      */
-    protected ErrorHandlerReifier(RouteContext routeContext, T definition) {
-        super(routeContext);
+    protected ErrorHandlerReifier(Route route, T definition) {
+        super(route);
         this.definition = definition;
     }
 
-    public static void registerReifier(Class<?> errorHandlerClass, BiFunction<RouteContext, ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>> creator) {
+    public static void registerReifier(Class<?> errorHandlerClass, BiFunction<Route, ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>> creator) {
         ERROR_HANDLERS.put(errorHandlerClass, creator);
     }
 
-    public static ErrorHandlerReifier<? extends ErrorHandlerFactory> reifier(RouteContext routeContext, ErrorHandlerFactory definition) {
-        BiFunction<RouteContext, ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>> reifier = ERROR_HANDLERS.get(definition.getClass());
+    public static ErrorHandlerReifier<? extends ErrorHandlerFactory> reifier(Route route, ErrorHandlerFactory definition) {
+        BiFunction<Route, ErrorHandlerFactory, ErrorHandlerReifier<? extends ErrorHandlerFactory>> reifier = ERROR_HANDLERS.get(definition.getClass());
         if (reifier != null) {
-            return reifier.apply(routeContext, definition);
+            return reifier.apply(route, definition);
         }
         throw new IllegalStateException("Unsupported definition: " + definition);
     }
@@ -158,26 +158,26 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
     /**
      * Lookup the error handler by the given ref
      *
-     * @param routeContext the route context
+     * @param route the route context
      * @param ref reference id for the error handler
      * @return the error handler
      */
-    public static ErrorHandlerFactory lookupErrorHandlerFactory(RouteContext routeContext, String ref) {
-        return lookupErrorHandlerFactory(routeContext, ref, true);
+    public static ErrorHandlerFactory lookupErrorHandlerFactory(Route route, String ref) {
+        return lookupErrorHandlerFactory(route, ref, true);
     }
 
     /**
      * Lookup the error handler by the given ref
      *
-     * @param routeContext the route context
+     * @param route the route
      * @param ref reference id for the error handler
      * @param mandatory whether the error handler must exists, if not a
      *            {@link org.apache.camel.NoSuchBeanException} is thrown
      * @return the error handler
      */
-    public static ErrorHandlerFactory lookupErrorHandlerFactory(RouteContext routeContext, String ref, boolean mandatory) {
+    public static ErrorHandlerFactory lookupErrorHandlerFactory(Route route, String ref, boolean mandatory) {
         ErrorHandlerFactory answer;
-        CamelContext camelContext = routeContext.getCamelContext();
+        CamelContext camelContext = route.getCamelContext();
 
         // if the ref is the default then we do not have any explicit error
         // handler configured
@@ -188,8 +188,8 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
         if (!isErrorHandlerFactoryConfigured(ref)) {
             // see if there has been configured a error handler builder on the route
             // TODO: Avoid using RouteDefinition - tests should pass: https://issues.apache.org/jira/browse/CAMEL-13984
-            RouteDefinition route = (RouteDefinition)routeContext.getRoute();
-            answer = route.getErrorHandlerFactory();
+            RouteDefinition def = (RouteDefinition) route.getRoute();
+            answer = def.getErrorHandlerFactory();
             // check if its also a ref with no error handler configuration like me
             if (answer instanceof ErrorHandlerBuilderRef) {
                 ErrorHandlerBuilderRef other = (ErrorHandlerBuilderRef)answer;
@@ -211,7 +211,7 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
                 // shared
                 // this is needed by camel-spring when none error handler has
                 // been explicit configured
-                routeContext.addErrorHandlerFactoryReference(other, answer);
+                route.addErrorHandlerFactoryReference(other, answer);
             }
         } else {
             // use specific configured error handler
@@ -257,7 +257,7 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
 
     public void addExceptionPolicy(ErrorHandlerSupport handlerSupport, OnExceptionDefinition exceptionType) {
         // add error handler as child service so they get lifecycle handled
-        Processor errorHandler = routeContext.getOnException(exceptionType.getId());
+        Processor errorHandler = route.getOnException(exceptionType.getId());
         handlerSupport.addErrorHandler(errorHandler);
 
         // load exception classes
@@ -309,7 +309,7 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
         if (handler instanceof ErrorHandlerSupport) {
             ErrorHandlerSupport handlerSupport = (ErrorHandlerSupport)handler;
 
-            for (NamedNode exception : routeContext.getErrorHandlers(definition)) {
+            for (NamedNode exception : route.getErrorHandlers(definition)) {
                 addExceptionPolicy(handlerSupport, (OnExceptionDefinition) exception);
             }
         }
@@ -317,7 +317,7 @@ public abstract class ErrorHandlerReifier<T extends ErrorHandlerBuilderSupport>
             boolean original = ((RedeliveryErrorHandler)handler).isUseOriginalMessagePolicy() || ((RedeliveryErrorHandler)handler).isUseOriginalMessagePolicy();
             if (original) {
                 // ensure allow original is turned on
-                routeContext.setAllowUseOriginalMessage(true);
+                route.setAllowUseOriginalMessage(true);
             }
         }
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/NoErrorHandlerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/NoErrorHandlerReifier.java
index d6c6401..c2b21f9 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/NoErrorHandlerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/errorhandler/NoErrorHandlerReifier.java
@@ -21,14 +21,14 @@ import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
+import org.apache.camel.Route;
 import org.apache.camel.builder.NoErrorHandlerBuilder;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.processor.DelegateAsyncProcessor;
 
 public class NoErrorHandlerReifier extends ErrorHandlerReifier<NoErrorHandlerBuilder> {
 
-    public NoErrorHandlerReifier(RouteContext routeContext, ErrorHandlerFactory definition) {
-        super(routeContext, (NoErrorHandlerBuilder)definition);
+    public NoErrorHandlerReifier(Route route, ErrorHandlerFactory definition) {
+        super(route, (NoErrorHandlerBuilder)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/CustomLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/CustomLoadBalancerReifier.java
index fa13084..834a06f 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/CustomLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/CustomLoadBalancerReifier.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.reifier.loadbalancer;
 
+import org.apache.camel.Route;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.StringHelper;
 
 public class CustomLoadBalancerReifier extends LoadBalancerReifier<CustomLoadBalancerDefinition> {
 
-    public CustomLoadBalancerReifier(RouteContext routeContext, LoadBalancerDefinition definition) {
-        super(routeContext, (CustomLoadBalancerDefinition)definition);
+    public CustomLoadBalancerReifier(Route route, LoadBalancerDefinition definition) {
+        super(route, (CustomLoadBalancerDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/FailoverLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/FailoverLoadBalancerReifier.java
index e861200..5b87680 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/FailoverLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/FailoverLoadBalancerReifier.java
@@ -19,17 +19,17 @@ package org.apache.camel.reifier.loadbalancer;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.camel.Route;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.FailOverLoadBalancer;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.ObjectHelper;
 
 public class FailoverLoadBalancerReifier extends LoadBalancerReifier<FailoverLoadBalancerDefinition> {
 
-    public FailoverLoadBalancerReifier(RouteContext routeContext, LoadBalancerDefinition definition) {
-        super(routeContext, (FailoverLoadBalancerDefinition)definition);
+    public FailoverLoadBalancerReifier(Route route, LoadBalancerDefinition definition) {
+        super(route, (FailoverLoadBalancerDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
index cbec76a..fe049c0 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/LoadBalancerReifier.java
@@ -20,6 +20,7 @@ import java.util.HashMap;
 import java.util.Map;
 import java.util.function.BiFunction;
 
+import org.apache.camel.Route;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.FailoverLoadBalancerDefinition;
@@ -31,14 +32,13 @@ import org.apache.camel.model.loadbalancer.WeightedLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.reifier.AbstractReifier;
 import org.apache.camel.spi.ReifierStrategy;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.util.StringHelper;
 
 public class LoadBalancerReifier<T extends LoadBalancerDefinition> extends AbstractReifier {
 
-    private static final Map<Class<?>, BiFunction<RouteContext, LoadBalancerDefinition, LoadBalancerReifier<? extends LoadBalancerDefinition>>> LOAD_BALANCERS;
+    private static final Map<Class<?>, BiFunction<Route, LoadBalancerDefinition, LoadBalancerReifier<? extends LoadBalancerDefinition>>> LOAD_BALANCERS;
     static {
-        Map<Class<?>, BiFunction<RouteContext, LoadBalancerDefinition, LoadBalancerReifier<? extends LoadBalancerDefinition>>> map = new HashMap<>();
+        Map<Class<?>, BiFunction<Route, LoadBalancerDefinition, LoadBalancerReifier<? extends LoadBalancerDefinition>>> map = new HashMap<>();
         map.put(LoadBalancerDefinition.class, LoadBalancerReifier::new);
         map.put(CustomLoadBalancerDefinition.class, CustomLoadBalancerReifier::new);
         map.put(FailoverLoadBalancerDefinition.class, FailoverLoadBalancerReifier::new);
@@ -53,15 +53,15 @@ public class LoadBalancerReifier<T extends LoadBalancerDefinition> extends Abstr
 
     protected final T definition;
 
-    public LoadBalancerReifier(RouteContext routeContext, T definition) {
-        super(routeContext);
+    public LoadBalancerReifier(Route route, T definition) {
+        super(route);
         this.definition = definition;
     }
 
-    public static LoadBalancerReifier<? extends LoadBalancerDefinition> reifier(RouteContext routeContext, LoadBalancerDefinition definition) {
-        BiFunction<RouteContext, LoadBalancerDefinition, LoadBalancerReifier<? extends LoadBalancerDefinition>> reifier = LOAD_BALANCERS.get(definition.getClass());
+    public static LoadBalancerReifier<? extends LoadBalancerDefinition> reifier(Route route, LoadBalancerDefinition definition) {
+        BiFunction<Route, LoadBalancerDefinition, LoadBalancerReifier<? extends LoadBalancerDefinition>> reifier = LOAD_BALANCERS.get(definition.getClass());
         if (reifier != null) {
-            return reifier.apply(routeContext, definition);
+            return reifier.apply(route, definition);
         }
         throw new IllegalStateException("Unsupported definition: " + definition);
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/RandomLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/RandomLoadBalancerReifier.java
index 4e9922a..23cc0ab 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/RandomLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/RandomLoadBalancerReifier.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.reifier.loadbalancer;
 
+import org.apache.camel.Route;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.RandomLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.processor.loadbalancer.RandomLoadBalancer;
-import org.apache.camel.spi.RouteContext;
 
 public class RandomLoadBalancerReifier extends LoadBalancerReifier<RandomLoadBalancerDefinition> {
 
-    public RandomLoadBalancerReifier(RouteContext routeContext, LoadBalancerDefinition definition) {
-        super(routeContext, (RandomLoadBalancerDefinition)definition);
+    public RandomLoadBalancerReifier(Route route, LoadBalancerDefinition definition) {
+        super(route, (RandomLoadBalancerDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/RoundRobinLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/RoundRobinLoadBalancerReifier.java
index d5244a3..acbac02 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/RoundRobinLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/RoundRobinLoadBalancerReifier.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.reifier.loadbalancer;
 
+import org.apache.camel.Route;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.RoundRobinLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.processor.loadbalancer.RoundRobinLoadBalancer;
-import org.apache.camel.spi.RouteContext;
 
 public class RoundRobinLoadBalancerReifier extends LoadBalancerReifier<RoundRobinLoadBalancerDefinition> {
 
-    public RoundRobinLoadBalancerReifier(RouteContext routeContext, LoadBalancerDefinition definition) {
-        super(routeContext, (RoundRobinLoadBalancerDefinition)definition);
+    public RoundRobinLoadBalancerReifier(Route route, LoadBalancerDefinition definition) {
+        super(route, (RoundRobinLoadBalancerDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/StickyLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/StickyLoadBalancerReifier.java
index f908307..2e41fca 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/StickyLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/StickyLoadBalancerReifier.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.reifier.loadbalancer;
 
+import org.apache.camel.Route;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.StickyLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.processor.loadbalancer.StickyLoadBalancer;
-import org.apache.camel.spi.RouteContext;
 
 public class StickyLoadBalancerReifier extends LoadBalancerReifier<StickyLoadBalancerDefinition> {
 
-    public StickyLoadBalancerReifier(RouteContext routeContext, LoadBalancerDefinition definition) {
-        super(routeContext, (StickyLoadBalancerDefinition)definition);
+    public StickyLoadBalancerReifier(Route route, LoadBalancerDefinition definition) {
+        super(route, (StickyLoadBalancerDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/TopicLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/TopicLoadBalancerReifier.java
index 4e749c6..21aa9cb 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/TopicLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/TopicLoadBalancerReifier.java
@@ -16,16 +16,16 @@
  */
 package org.apache.camel.reifier.loadbalancer;
 
+import org.apache.camel.Route;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.TopicLoadBalancerDefinition;
 import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.processor.loadbalancer.TopicLoadBalancer;
-import org.apache.camel.spi.RouteContext;
 
 public class TopicLoadBalancerReifier extends LoadBalancerReifier<TopicLoadBalancerDefinition> {
 
-    public TopicLoadBalancerReifier(RouteContext routeContext, LoadBalancerDefinition definition) {
-        super(routeContext, (TopicLoadBalancerDefinition)definition);
+    public TopicLoadBalancerReifier(Route route, LoadBalancerDefinition definition) {
+        super(route, (TopicLoadBalancerDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/WeightedLoadBalancerReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/WeightedLoadBalancerReifier.java
index 03ea26f..3c6a2b8 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/WeightedLoadBalancerReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/loadbalancer/WeightedLoadBalancerReifier.java
@@ -19,6 +19,7 @@ package org.apache.camel.reifier.loadbalancer;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.model.LoadBalancerDefinition;
 import org.apache.camel.model.loadbalancer.WeightedLoadBalancerDefinition;
@@ -26,12 +27,11 @@ import org.apache.camel.processor.loadbalancer.LoadBalancer;
 import org.apache.camel.processor.loadbalancer.WeightedLoadBalancer;
 import org.apache.camel.processor.loadbalancer.WeightedRandomLoadBalancer;
 import org.apache.camel.processor.loadbalancer.WeightedRoundRobinLoadBalancer;
-import org.apache.camel.spi.RouteContext;
 
 public class WeightedLoadBalancerReifier extends LoadBalancerReifier<WeightedLoadBalancerDefinition> {
 
-    public WeightedLoadBalancerReifier(RouteContext routeContext, LoadBalancerDefinition definition) {
-        super(routeContext, (WeightedLoadBalancerDefinition)definition);
+    public WeightedLoadBalancerReifier(Route route, LoadBalancerDefinition definition) {
+        super(route, (WeightedLoadBalancerDefinition)definition);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
index 7c00ba8..af2b124 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/reifier/rest/RestBindingReifier.java
@@ -22,21 +22,21 @@ import java.util.Map;
 import javax.xml.bind.JAXBContext;
 
 import org.apache.camel.ExtendedCamelContext;
+import org.apache.camel.Route;
 import org.apache.camel.model.rest.RestBindingDefinition;
 import org.apache.camel.model.rest.RestBindingMode;
 import org.apache.camel.processor.RestBindingAdvice;
 import org.apache.camel.reifier.AbstractReifier;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.RestConfiguration;
-import org.apache.camel.spi.RouteContext;
 import org.apache.camel.support.PropertyBindingSupport;
 
 public class RestBindingReifier extends AbstractReifier {
 
     private final RestBindingDefinition definition;
 
-    public RestBindingReifier(RouteContext routeContext, RestBindingDefinition definition) {
-        super(routeContext);
+    public RestBindingReifier(Route route, RestBindingDefinition definition) {
+        super(route);
         this.definition = definition;
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
index 43f4849..7c7a1bc 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/ContextErrorHandlerTest.java
@@ -24,7 +24,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.processor.SendProcessor;
 import org.apache.camel.processor.errorhandler.DeadLetterChannel;
 import org.apache.camel.processor.errorhandler.RedeliveryPolicy;
@@ -80,7 +80,7 @@ public class ContextErrorHandlerTest extends ContextTestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "seda://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
             Processor processor = consumerRoute.getProcessor();
 
             Channel channel = unwrapChannel(processor);
@@ -104,7 +104,7 @@ public class ContextErrorHandlerTest extends ContextTestSupport {
         assertEquals("Number routes created" + list, 2, list.size());
         for (Route route : list) {
 
-            EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
             Processor processor = consumerRoute.getProcessor();
 
             Channel channel = unwrapChannel(processor);
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java
index 100af12..05b793f 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/ErrorHandlerTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
 import org.apache.camel.TestSupport;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.processor.FilterProcessor;
 import org.apache.camel.processor.SendProcessor;
 import org.apache.camel.processor.errorhandler.DeadLetterChannel;
@@ -67,7 +67,7 @@ public class ErrorHandlerTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "seda://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumerRoute.getProcessor());
 
             assertIsInstanceOf(DeadLetterChannel.class, channel.getErrorHandler());
@@ -121,7 +121,7 @@ public class ErrorHandlerTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "seda://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumerRoute.getProcessor());
 
             assertIsInstanceOf(SendProcessor.class, channel.getNextProcessor());
@@ -150,7 +150,7 @@ public class ErrorHandlerTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "seda://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
             Processor processor = consumerRoute.getProcessor();
             Channel channel = unwrapChannel(processor);
 
@@ -178,7 +178,7 @@ public class ErrorHandlerTest extends TestSupport {
         for (Route route : routes) {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "seda://a", key.getEndpointUri());
-            EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumerRoute.getProcessor());
 
             assertIsInstanceOf(DeadLetterChannel.class, channel.getErrorHandler());
diff --git a/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java b/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
index 5574d48..1df4d4d 100644
--- a/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/builder/RouteBuilderTest.java
@@ -31,7 +31,7 @@ import org.apache.camel.Producer;
 import org.apache.camel.Route;
 import org.apache.camel.TestSupport;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.processor.ChoiceProcessor;
 import org.apache.camel.processor.EvaluateExpressionProcessor;
 import org.apache.camel.processor.FilterProcessor;
@@ -82,7 +82,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumer.getProcessor());
 
             SendProcessor sendProcessor = assertIsInstanceOf(SendProcessor.class, channel.getNextProcessor());
@@ -114,7 +114,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumer.getProcessor());
 
             FilterProcessor filterProcessor = assertIsInstanceOf(FilterProcessor.class, channel.getNextProcessor());
@@ -147,7 +147,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumer.getProcessor());
 
             ChoiceProcessor choiceProcessor = assertIsInstanceOf(ChoiceProcessor.class, channel.getNextProcessor());
@@ -244,7 +244,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumer.getProcessor());
 
             MulticastProcessor multicastProcessor = assertIsInstanceOf(MulticastProcessor.class, channel.getNextProcessor());
@@ -284,7 +284,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
 
             Pipeline line = assertIsInstanceOf(Pipeline.class, unwrap(consumer.getProcessor()));
             assertEquals(3, line.next().size());
@@ -356,7 +356,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumer.getProcessor());
 
             Pipeline line = assertIsInstanceOf(Pipeline.class, channel.getNextProcessor());
@@ -398,7 +398,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumer.getProcessor());
             assertIsInstanceOf(Splitter.class, channel.getNextProcessor());
         }
@@ -429,7 +429,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
             Channel channel = unwrapChannel(consumer.getProcessor());
 
             IdempotentConsumer idempotentConsumer = assertIsInstanceOf(IdempotentConsumer.class, channel.getNextProcessor());
@@ -466,7 +466,7 @@ public class RouteBuilderTest extends TestSupport {
             Endpoint key = route.getEndpoint();
             assertEquals("From endpoint", "direct://a", key.getEndpointUri());
 
-            EventDrivenConsumerRoute consumer = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+            DefaultRoute consumer = assertIsInstanceOf(DefaultRoute.class, route);
 
             Pipeline line = assertIsInstanceOf(Pipeline.class, unwrap(consumer.getProcessor()));
             Iterator<Processor> it = line.next().iterator();
@@ -504,7 +504,7 @@ public class RouteBuilderTest extends TestSupport {
      * lets unwrap that and return the actual processor
      */
     protected Processor getProcessorWithoutErrorHandler(Route route) {
-        EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+        DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
         Processor processor = unwrap(consumerRoute.getProcessor());
         return unwrapErrorHandler(processor);
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetPolicyTest.java b/core/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetPolicyTest.java
index f661ef2..05f22ba 100644
--- a/core/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetPolicyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/component/rest/FromRestGetPolicyTest.java
@@ -22,7 +22,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class FromRestGetPolicyTest extends ContextTestSupport {
@@ -60,12 +60,12 @@ public class FromRestGetPolicyTest extends ContextTestSupport {
     private class MyDummyPolicy implements Policy {
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // noop
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, Processor processor) {
+        public Processor wrap(Route route, Processor processor) {
             return processor;
         }
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java b/core/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java
index 67c3986..4ecd81c 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/DummyLifecycleStrategy.java
@@ -26,10 +26,9 @@ import org.apache.camel.Component;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Processor;
-import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.VetoCamelContextStartException;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.LifecycleStrategySupport;
 
 public class DummyLifecycleStrategy extends LifecycleStrategySupport {
@@ -67,37 +66,37 @@ public class DummyLifecycleStrategy extends LifecycleStrategySupport {
     }
 
     @Override
-    public void onServiceAdd(CamelContext context, Service service, Route route) {
+    public void onServiceAdd(CamelContext context, Service service, org.apache.camel.Route route) {
         events.add("onServiceAdd");
     }
 
     @Override
-    public void onServiceRemove(CamelContext context, Service service, Route route) {
+    public void onServiceRemove(CamelContext context, Service service, org.apache.camel.Route route) {
         events.add("onServiceRemove");
     }
 
     @Override
-    public void onRoutesAdd(Collection<Route> routes) {
+    public void onRoutesAdd(Collection<org.apache.camel.Route> routes) {
         events.add("onRoutesAdd");
     }
 
     @Override
-    public void onRoutesRemove(Collection<Route> routes) {
+    public void onRoutesRemove(Collection<org.apache.camel.Route> routes) {
         events.add("onRoutesRemove");
     }
 
     @Override
-    public void onRouteContextCreate(RouteContext routeContext) {
+    public void onRouteContextCreate(Route route) {
         events.add("onRouteContextCreate");
     }
 
     @Override
-    public void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
+    public void onErrorHandlerAdd(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
         events.add("onErrorHandlerAdd");
     }
 
     @Override
-    public void onErrorHandlerRemove(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
+    public void onErrorHandlerRemove(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
         events.add("onErrorHandlerRemove");
     }
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/impl/RoutePolicyAutoStartupCancelledOnInitTest.java b/core/camel-core/src/test/java/org/apache/camel/impl/RoutePolicyAutoStartupCancelledOnInitTest.java
index bacd9e2..dcafa33 100644
--- a/core/camel-core/src/test/java/org/apache/camel/impl/RoutePolicyAutoStartupCancelledOnInitTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/impl/RoutePolicyAutoStartupCancelledOnInitTest.java
@@ -30,7 +30,7 @@ public class RoutePolicyAutoStartupCancelledOnInitTest extends ContextTestSuppor
     private RoutePolicy policy = new RoutePolicySupport() {
         @Override
         public void onInit(Route route) {
-            route.getRouteContext().setAutoStartup(false);
+            route.setAutoStartup(false);
         }
     };
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithPolicyTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithPolicyTest.java
index ad78dfd..e4a9953 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithPolicyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithPolicyTest.java
@@ -24,7 +24,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.RouteDefinition;
 import org.apache.camel.reifier.RouteReifier;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class AdviceWithPolicyTest extends ContextTestSupport {
@@ -62,12 +62,12 @@ public class AdviceWithPolicyTest extends ContextTestSupport {
     private static final class MyPolicy implements Policy {
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // noop
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, Processor processor) {
+        public Processor wrap(Route route, Processor processor) {
             return processor;
         }
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithTransactedTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithTransactedTest.java
index a830f7c..fa16993 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithTransactedTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/AdviceWithTransactedTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.reifier.RouteReifier;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class AdviceWithTransactedTest extends ContextTestSupport {
@@ -60,12 +60,12 @@ public class AdviceWithTransactedTest extends ContextTestSupport {
     private static final class MyDummyPolicy implements Policy {
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // noop
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, Processor processor) {
+        public Processor wrap(Route route, Processor processor) {
             return processor;
         }
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/issues/TransactedPropertyPlaceholderIssueTest.java b/core/camel-core/src/test/java/org/apache/camel/issues/TransactedPropertyPlaceholderIssueTest.java
index 4ce6d43..473f419 100644
--- a/core/camel-core/src/test/java/org/apache/camel/issues/TransactedPropertyPlaceholderIssueTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/issues/TransactedPropertyPlaceholderIssueTest.java
@@ -22,7 +22,7 @@ import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 /**
@@ -58,12 +58,12 @@ public class TransactedPropertyPlaceholderIssueTest extends ContextTestSupport {
     private static final class MyDummyPolicy implements Policy {
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // noop
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, Processor processor) {
+        public Processor wrap(Route route, Processor processor) {
             return processor;
         }
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java b/core/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java
index a4e227e..3e00dff 100644
--- a/core/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/model/LoadRouteFromXmlWithPolicyTest.java
@@ -25,7 +25,7 @@ import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class LoadRouteFromXmlWithPolicyTest extends ContextTestSupport {
@@ -83,12 +83,12 @@ public class LoadRouteFromXmlWithPolicyTest extends ContextTestSupport {
         }
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // no need to modify the route
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, final Processor processor) {
+        public Processor wrap(Route route, final Processor processor) {
             return new Processor() {
                 public void process(Exchange exchange) throws Exception {
                     invoked++;
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
index f19ad47..f537978 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/CustomProcessorFactoryTest.java
@@ -29,7 +29,7 @@ import org.apache.camel.model.SplitDefinition;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.model.language.ConstantExpression;
 import org.apache.camel.spi.ProcessorFactory;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class CustomProcessorFactoryTest extends ContextTestSupport {
@@ -82,12 +82,12 @@ public class CustomProcessorFactoryTest extends ContextTestSupport {
     public static class MyFactory implements ProcessorFactory {
 
         @Override
-        public Processor createChildProcessor(RouteContext routeContext, NamedNode definition, boolean mandatory) throws Exception {
+        public Processor createChildProcessor(Route route, NamedNode definition, boolean mandatory) throws Exception {
             return null;
         }
 
         @Override
-        public Processor createProcessor(RouteContext routeContext, NamedNode definition) throws Exception {
+        public Processor createProcessor(Route route, NamedNode definition) throws Exception {
             if (definition instanceof SplitDefinition) {
                 // add additional output to the splitter
                 SplitDefinition split = (SplitDefinition)definition;
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/DefaultErrorHandlerTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/DefaultErrorHandlerTest.java
index ba52941..ad5c048 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/DefaultErrorHandlerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/DefaultErrorHandlerTest.java
@@ -24,7 +24,7 @@ import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.processor.errorhandler.DefaultErrorHandler;
 import org.junit.Test;
 
@@ -36,7 +36,7 @@ public class DefaultErrorHandlerTest extends ContextTestSupport {
     @Test
     public void testRoute() {
         Route route = context.getRoutes().get(0);
-        EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+        DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
 
         Processor processor = unwrap(consumerRoute.getProcessor());
         Pipeline pipeline = assertIsInstanceOf(Pipeline.class, processor);
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java
index b7ff263..cf914ee 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/DefinitionPolicyPerProcessorTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetBodyDefinition;
 import org.apache.camel.model.language.ConstantExpression;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class DefinitionPolicyPerProcessorTest extends ContextTestSupport {
@@ -80,13 +80,13 @@ public class DefinitionPolicyPerProcessorTest extends ContextTestSupport {
         }
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             SetBodyDefinition bodyDef = (SetBodyDefinition)((ProcessorDefinition<?>)definition).getOutputs().get(0);
             bodyDef.setExpression(new ConstantExpression("body was altered"));
         }
 
         @Override
-        public Processor wrap(final RouteContext routeContext, final Processor processor) {
+        public Processor wrap(final Route route, final Processor processor) {
             return new Processor() {
                 public void process(Exchange exchange) throws Exception {
                     invoked++;
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/PolicyPerProcessorTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/PolicyPerProcessorTest.java
index 3ee39f4..9669ae9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/PolicyPerProcessorTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/PolicyPerProcessorTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class PolicyPerProcessorTest extends ContextTestSupport {
@@ -88,12 +88,12 @@ public class PolicyPerProcessorTest extends ContextTestSupport {
         }
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // no need to modify the route
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, final Processor processor) {
+        public Processor wrap(Route route, final Processor processor) {
             return new Processor() {
                 public void process(Exchange exchange) throws Exception {
                     invoked++;
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/PolicyPerRouteTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/PolicyPerRouteTest.java
index 55c646a..2979e8e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/PolicyPerRouteTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/PolicyPerRouteTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class PolicyPerRouteTest extends ContextTestSupport {
@@ -81,12 +81,12 @@ public class PolicyPerRouteTest extends ContextTestSupport {
         }
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // no need to modify the route
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, final Processor processor) {
+        public Processor wrap(Route route, final Processor processor) {
             return new Processor() {
                 public void process(Exchange exchange) throws Exception {
                     invoked++;
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/RecipientListContextScopedOnExceptionIssueTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/RecipientListContextScopedOnExceptionIssueTest.java
index dec286c..eec7885 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/RecipientListContextScopedOnExceptionIssueTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/RecipientListContextScopedOnExceptionIssueTest.java
@@ -38,7 +38,7 @@ public class RecipientListContextScopedOnExceptionIssueTest extends ContextTestS
                 onException(Exception.class).handled(true).process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                        String routeId = exchange.getUnitOfWork().getRouteContext().getRouteId();
+                        String routeId = exchange.getUnitOfWork().getRoute().getRouteId();
                         assertEquals("fail", routeId);
                     }
 
@@ -91,7 +91,7 @@ public class RecipientListContextScopedOnExceptionIssueTest extends ContextTestS
                 onException(Exception.class).handled(true).process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                        String routeId = exchange.getUnitOfWork().getRouteContext().getRouteId();
+                        String routeId = exchange.getUnitOfWork().getRoute().getRouteId();
                         assertEquals("fail", routeId);
                     }
                 }).to("mock:error");
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/ResequencerTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/ResequencerTest.java
index 1323d07..ae7fef9 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/ResequencerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/ResequencerTest.java
@@ -23,7 +23,7 @@ import org.apache.camel.Endpoint;
 import org.apache.camel.Route;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.processor.channel.DefaultChannel;
 import org.apache.camel.processor.errorhandler.DefaultErrorHandler;
 import org.junit.After;
@@ -82,7 +82,7 @@ public class ResequencerTest extends ContextTestSupport {
         assertEquals("Number of routes created: " + list, 1, list.size());
 
         Route route = list.get(0);
-        EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+        DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
 
         DefaultChannel channel = assertIsInstanceOf(DefaultChannel.class, unwrapChannel(consumerRoute.getProcessor()));
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/RoutingSlipContextScopedOnExceptionIssueTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/RoutingSlipContextScopedOnExceptionIssueTest.java
index acf34fe..4bfebd7 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/RoutingSlipContextScopedOnExceptionIssueTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/RoutingSlipContextScopedOnExceptionIssueTest.java
@@ -38,7 +38,7 @@ public class RoutingSlipContextScopedOnExceptionIssueTest extends ContextTestSup
                 onException(Exception.class).handled(true).process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                        String routeId = exchange.getUnitOfWork().getRouteContext().getRouteId();
+                        String routeId = exchange.getUnitOfWork().getRoute().getRouteId();
                         assertEquals("fail", routeId);
                     }
                 }).to("mock:error");
@@ -82,7 +82,7 @@ public class RoutingSlipContextScopedOnExceptionIssueTest extends ContextTestSup
                 onException(Exception.class).handled(true).process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                        String routeId = exchange.getUnitOfWork().getRouteContext().getRouteId();
+                        String routeId = exchange.getUnitOfWork().getRoute().getRouteId();
                         assertEquals("fail", routeId);
                     }
                 }).to("mock:error");
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/SimpleMockTwoRoutesTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/SimpleMockTwoRoutesTest.java
index 63b1efb..8deadd5 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/SimpleMockTwoRoutesTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/SimpleMockTwoRoutesTest.java
@@ -60,7 +60,7 @@ public class SimpleMockTwoRoutesTest extends ContextTestSupport {
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) throws Exception {
-                                assertEquals("foo", exchange.getUnitOfWork().getRouteContext().getRouteId());
+                                assertEquals("foo", exchange.getUnitOfWork().getRoute().getRouteId());
                             }
                         })
                         .to("mock:foo")
@@ -68,7 +68,7 @@ public class SimpleMockTwoRoutesTest extends ContextTestSupport {
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) throws Exception {
-                                assertEquals("foo", exchange.getUnitOfWork().getRouteContext().getRouteId());
+                                assertEquals("foo", exchange.getUnitOfWork().getRoute().getRouteId());
                             }
                         })
                         .to("mock:result");
@@ -78,7 +78,7 @@ public class SimpleMockTwoRoutesTest extends ContextTestSupport {
                         .process(new Processor() {
                             @Override
                             public void process(Exchange exchange) throws Exception {
-                                assertEquals("bar", exchange.getUnitOfWork().getRouteContext().getRouteId());
+                                assertEquals("bar", exchange.getUnitOfWork().getRoute().getRouteId());
                             }
                         })
                         .to("mock:bar");
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/StreamResequencerTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/StreamResequencerTest.java
index 1f79bec..8549b6e 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/StreamResequencerTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/StreamResequencerTest.java
@@ -28,7 +28,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
 import org.apache.camel.Route;
 import org.apache.camel.builder.RouteBuilder;
-import org.apache.camel.impl.engine.EventDrivenConsumerRoute;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.processor.errorhandler.DefaultErrorHandler;
 import org.apache.camel.support.service.ServiceHelper;
 import org.junit.Test;
@@ -117,7 +117,7 @@ public class StreamResequencerTest extends ContextTestSupport {
         assertEquals("Number of routes created: " + list, 1, list.size());
 
         Route route = list.get(0);
-        EventDrivenConsumerRoute consumerRoute = assertIsInstanceOf(EventDrivenConsumerRoute.class, route);
+        DefaultRoute consumerRoute = assertIsInstanceOf(DefaultRoute.class, route);
 
         Channel channel = unwrapChannel(consumerRoute.getProcessor());
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java
index fca65ac..04ce1e6 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/async/AsyncEndpointPolicyTest.java
@@ -29,7 +29,7 @@ import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.impl.JndiRegistry;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.AsyncCallbackToCompletableFutureAdapter;
 import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.junit.Test;
@@ -102,12 +102,12 @@ public class AsyncEndpointPolicyTest extends ContextTestSupport {
         }
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // no need to modify the route
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, final Processor processor) {
+        public Processor wrap(Route route, final Processor processor) {
             return new AsyncProcessor() {
                 public boolean process(final Exchange exchange, final AsyncCallback callback) {
                     invoked++;
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupportTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupportTest.java
index 9ecc356..2cccb31 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupportTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupportTest.java
@@ -25,7 +25,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.reifier.errorhandler.DefaultErrorHandlerReifier;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class ErrorHandlerSupportTest extends ContextTestSupport {
@@ -37,7 +37,7 @@ public class ErrorHandlerSupportTest extends ContextTestSupport {
         exceptions.add(ParentException.class);
 
         ErrorHandlerSupport support = new ShuntErrorHandlerSupport();
-        addExceptionPolicy(support, context.getRoute("foo").getRouteContext(), new OnExceptionDefinition(exceptions));
+        addExceptionPolicy(support, context.getRoute("foo"), new OnExceptionDefinition(exceptions));
 
         assertEquals(ChildException.class.getName(), getExceptionPolicyFor(support, new ChildException(), 0));
         assertEquals(ParentException.class.getName(), getExceptionPolicyFor(support, new ParentException(), 1));
@@ -50,7 +50,7 @@ public class ErrorHandlerSupportTest extends ContextTestSupport {
         exceptions.add(ChildException.class);
 
         ErrorHandlerSupport support = new ShuntErrorHandlerSupport();
-        addExceptionPolicy(support, context.getRoute("foo").getRouteContext(), new OnExceptionDefinition(exceptions));
+        addExceptionPolicy(support, context.getRoute("foo"), new OnExceptionDefinition(exceptions));
 
         assertEquals(ChildException.class.getName(), getExceptionPolicyFor(support, new ChildException(), 1));
         assertEquals(ParentException.class.getName(), getExceptionPolicyFor(support, new ParentException(), 0));
@@ -59,8 +59,8 @@ public class ErrorHandlerSupportTest extends ContextTestSupport {
     @Test
     public void testTwoPolicyChildFirst() {
         ErrorHandlerSupport support = new ShuntErrorHandlerSupport();
-        addExceptionPolicy(support, context.getRoute("foo").getRouteContext(), new OnExceptionDefinition(ChildException.class));
-        addExceptionPolicy(support, context.getRoute("foo").getRouteContext(), new OnExceptionDefinition(ParentException.class));
+        addExceptionPolicy(support, context.getRoute("foo"), new OnExceptionDefinition(ChildException.class));
+        addExceptionPolicy(support, context.getRoute("foo"), new OnExceptionDefinition(ParentException.class));
 
         assertEquals(ChildException.class.getName(), getExceptionPolicyFor(support, new ChildException(), 0));
         assertEquals(ParentException.class.getName(), getExceptionPolicyFor(support, new ParentException(), 0));
@@ -69,15 +69,15 @@ public class ErrorHandlerSupportTest extends ContextTestSupport {
     @Test
     public void testTwoPolicyChildLast() {
         ErrorHandlerSupport support = new ShuntErrorHandlerSupport();
-        addExceptionPolicy(support, context.getRoute("foo").getRouteContext(), new OnExceptionDefinition(ParentException.class));
-        addExceptionPolicy(support, context.getRoute("foo").getRouteContext(), new OnExceptionDefinition(ChildException.class));
+        addExceptionPolicy(support, context.getRoute("foo"), new OnExceptionDefinition(ParentException.class));
+        addExceptionPolicy(support, context.getRoute("foo"), new OnExceptionDefinition(ChildException.class));
 
         assertEquals(ChildException.class.getName(), getExceptionPolicyFor(support, new ChildException(), 0));
         assertEquals(ParentException.class.getName(), getExceptionPolicyFor(support, new ParentException(), 0));
     }
 
-    private static void addExceptionPolicy(ErrorHandlerSupport handlerSupport, RouteContext routeContext, OnExceptionDefinition exceptionType) {
-        new DefaultErrorHandlerReifier<>(routeContext, null).addExceptionPolicy(handlerSupport, exceptionType);
+    private static void addExceptionPolicy(ErrorHandlerSupport handlerSupport, Route route, OnExceptionDefinition exceptionType) {
+        new DefaultErrorHandlerReifier<>(route, null).addExceptionPolicy(handlerSupport, exceptionType);
     }
 
     private static String getExceptionPolicyFor(ErrorHandlerSupport support, Throwable childException, int index) {
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategyTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategyTest.java
index 62ee77c..bf0153a 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategyTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/exceptionpolicy/DefaultExceptionPolicyStrategyTest.java
@@ -30,14 +30,13 @@ import org.apache.camel.ExchangeTimedOutException;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.ValidationException;
 import org.apache.camel.impl.DefaultCamelContext;
-import org.apache.camel.impl.DefaultRouteContext;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.model.OnExceptionDefinition;
 import org.apache.camel.processor.errorhandler.DefaultExceptionPolicyStrategy;
 import org.apache.camel.processor.errorhandler.ExceptionPolicy;
 import org.apache.camel.processor.errorhandler.ExceptionPolicyKey;
 import org.apache.camel.reifier.errorhandler.DefaultErrorHandlerReifier;
-import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -54,7 +53,7 @@ public class DefaultExceptionPolicyStrategyTest extends Assert {
 
     private ExceptionPolicy exceptionPolicy(Class<? extends Throwable> exceptionClass) {
         CamelContext cc = new DefaultCamelContext();
-        RouteContext context = new DefaultRouteContext(cc, null, null);
+        Route context = new DefaultRoute(cc, null, null, null);
         return new DefaultErrorHandlerReifier<>(context, null)
                 .createExceptionPolicy(new OnExceptionDefinition(exceptionClass));
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/onexception/ContextScopedOnExceptionCorrectRouteContextTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/onexception/ContextScopedOnExceptionCorrectRouteContextTest.java
index 10c2992..b0179f3 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/onexception/ContextScopedOnExceptionCorrectRouteContextTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/onexception/ContextScopedOnExceptionCorrectRouteContextTest.java
@@ -41,7 +41,7 @@ public class ContextScopedOnExceptionCorrectRouteContextTest extends ContextTest
                 onException(Exception.class).log("Error due ${exception.message}").process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                        String routeId = exchange.getUnitOfWork().getRouteContext().getRouteId();
+                        String routeId = exchange.getUnitOfWork().getRoute().getRouteId();
                         assertEquals("bar", routeId);
                     }
                 });
@@ -76,7 +76,7 @@ public class ContextScopedOnExceptionCorrectRouteContextTest extends ContextTest
                 onException(Exception.class).log("Error due ${exception.message}").process(new Processor() {
                     @Override
                     public void process(Exchange exchange) throws Exception {
-                        String routeId = exchange.getUnitOfWork().getRouteContext().getRouteId();
+                        String routeId = exchange.getUnitOfWork().getRoute().getRouteId();
                         assertEquals("foo", routeId);
                     }
                 });
diff --git a/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java b/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
index 1deeae8..789dffd 100644
--- a/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/reifier/ProcessorReifierTest.java
@@ -16,9 +16,9 @@
  */
 package org.apache.camel.reifier;
 
-import org.apache.camel.impl.DefaultRouteContext;
+import org.apache.camel.impl.engine.DefaultRoute;
 import org.apache.camel.model.ProcessDefinition;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 import static junit.framework.TestCase.fail;
@@ -26,7 +26,7 @@ import static junit.framework.TestCase.fail;
 public class ProcessorReifierTest {
     @Test
     public void testHandleCustomProcessorDefinition() {
-        RouteContext ctx = new DefaultRouteContext(null, null, null);
+        Route ctx = new DefaultRoute(null, null, null, null);
         try {
             ProcessorReifier.reifier(ctx, new MyProcessor());
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectNameStrategy.java b/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectNameStrategy.java
index 8c07f1f..97d769e 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectNameStrategy.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectNameStrategy.java
@@ -31,7 +31,6 @@ import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.StaticService;
 import org.apache.camel.builder.ErrorHandlerBuilderRef;
@@ -59,7 +58,7 @@ import org.apache.camel.reifier.errorhandler.ErrorHandlerReifier;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ManagementObjectNameStrategy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.util.InetAddressUtil;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.URISupport;
@@ -149,7 +148,7 @@ public class DefaultManagementObjectNameStrategy implements ManagementObjectName
             objectName = getObjectNameForRoute(mr.getRoute());
         } else if (managedObject instanceof ManagedErrorHandler) {
             ManagedErrorHandler meh = (ManagedErrorHandler) managedObject;
-            objectName = getObjectNameForErrorHandler(meh.getRouteContext(), meh.getErrorHandler(), meh.getErrorHandlerBuilder());
+            objectName = getObjectNameForErrorHandler(meh.getRoute(), meh.getErrorHandler(), meh.getErrorHandlerBuilder());
         } else if (managedObject instanceof ManagedStep) {
             ManagedStep mp = (ManagedStep) managedObject;
             objectName = getObjectNameForStep(mp.getContext(), mp.getProcessor(), mp.getDefinition());
@@ -302,10 +301,10 @@ public class DefaultManagementObjectNameStrategy implements ManagementObjectName
     }
 
     @Override
-    public ObjectName getObjectNameForErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory builder) throws MalformedObjectNameException {
+    public ObjectName getObjectNameForErrorHandler(Route route, Processor errorHandler, ErrorHandlerFactory builder) throws MalformedObjectNameException {
         StringBuilder buffer = new StringBuilder();
         buffer.append(domainName).append(":");
-        buffer.append(KEY_CONTEXT + "=").append(getContextId(routeContext.getCamelContext())).append(",");
+        buffer.append(KEY_CONTEXT + "=").append(getContextId(route.getCamelContext())).append(",");
         buffer.append(KEY_TYPE + "=").append(TYPE_ERRORHANDLER + ",");
 
         // we want to only register one instance of the various error handler types and thus do some lookup
@@ -316,7 +315,7 @@ public class DefaultManagementObjectNameStrategy implements ManagementObjectName
 
             // it has not then its an indirection and we should do some work to lookup the real builder
             ref = builderRef.getRef();
-            ErrorHandlerFactory refBuilder = ErrorHandlerReifier.lookupErrorHandlerFactory(routeContext, builderRef.getRef(), false);
+            ErrorHandlerFactory refBuilder = ErrorHandlerReifier.lookupErrorHandlerFactory(route, builderRef.getRef(), false);
             if (refBuilder != null) {
                 builder = refBuilder;
             }
@@ -328,7 +327,7 @@ public class DefaultManagementObjectNameStrategy implements ManagementObjectName
                 builderRef = (ErrorHandlerBuilderRef) builder;
                 // does it refer to a non default error handler then do a 2nd lookup
                 if (!builderRef.getRef().equals(ErrorHandlerReifier.DEFAULT_ERROR_HANDLER_BUILDER)) {
-                    refBuilder = ErrorHandlerReifier.lookupErrorHandlerFactory(routeContext, builderRef.getRef(), false);
+                    refBuilder = ErrorHandlerReifier.lookupErrorHandlerFactory(route, builderRef.getRef(), false);
                     if (refBuilder != null) {
                         ref = builderRef.getRef();
                         builder = refBuilder;
@@ -417,7 +416,7 @@ public class DefaultManagementObjectNameStrategy implements ManagementObjectName
     }
 
     @Override
-    public ObjectName getObjectNameForRoute(Route route) throws MalformedObjectNameException {
+    public ObjectName getObjectNameForRoute(org.apache.camel.Route route) throws MalformedObjectNameException {
         Endpoint ep = route.getEndpoint();
         String id = route.getId();
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java b/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
index 494f43f..6815e9a 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/DefaultManagementObjectStrategy.java
@@ -28,7 +28,6 @@ import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.cluster.CamelClusterService;
 import org.apache.camel.component.bean.BeanProcessor;
@@ -101,11 +100,27 @@ import org.apache.camel.management.mbean.ManagedUnmarshal;
 import org.apache.camel.management.mbean.ManagedValidate;
 import org.apache.camel.management.mbean.ManagedWeightedLoadBalancer;
 import org.apache.camel.management.mbean.ManagedWireTapProcessor;
+import org.apache.camel.model.AggregateDefinition;
+import org.apache.camel.model.DynamicRouterDefinition;
+import org.apache.camel.model.EnrichDefinition;
 import org.apache.camel.model.ExpressionNode;
+import org.apache.camel.model.IdempotentConsumerDefinition;
 import org.apache.camel.model.LoadBalanceDefinition;
+import org.apache.camel.model.LoopDefinition;
+import org.apache.camel.model.MarshalDefinition;
+import org.apache.camel.model.PollEnrichDefinition;
 import org.apache.camel.model.ProcessDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.RecipientListDefinition;
+import org.apache.camel.model.RoutingSlipDefinition;
+import org.apache.camel.model.ScriptDefinition;
+import org.apache.camel.model.SetBodyDefinition;
+import org.apache.camel.model.SetHeaderDefinition;
+import org.apache.camel.model.SetPropertyDefinition;
+import org.apache.camel.model.SplitDefinition;
+import org.apache.camel.model.TransformDefinition;
+import org.apache.camel.model.UnmarshalDefinition;
+import org.apache.camel.model.ValidateDefinition;
 import org.apache.camel.model.loadbalancer.CustomLoadBalancerDefinition;
 import org.apache.camel.processor.ChoiceProcessor;
 import org.apache.camel.processor.ClaimCheckProcessor;
@@ -158,7 +173,7 @@ import org.apache.camel.spi.BrowsableEndpoint;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ManagementObjectStrategy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.support.ScheduledPollConsumer;
 import org.apache.camel.support.processor.MarshalProcessor;
 import org.apache.camel.support.processor.PredicateValidatingProcessor;
@@ -220,9 +235,9 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy
     }
 
     @Override
-    public Object getManagedObjectForErrorHandler(CamelContext context, RouteContext routeContext,
+    public Object getManagedObjectForErrorHandler(CamelContext context, Route route,
                                                   Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
-        ManagedErrorHandler me = new ManagedErrorHandler(routeContext, errorHandler, errorHandlerBuilder);
+        ManagedErrorHandler me = new ManagedErrorHandler(route, errorHandler, errorHandlerBuilder);
         me.init(context.getManagementStrategy());
         return me;
     }
@@ -331,35 +346,35 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy
             } else if (target instanceof Throttler) {
                 answer = new ManagedThrottler(context, (Throttler) target, definition);
             } else if (target instanceof DynamicRouter) {
-                answer = new ManagedDynamicRouter(context, (DynamicRouter) target, (org.apache.camel.model.DynamicRouterDefinition) definition);
+                answer = new ManagedDynamicRouter(context, (DynamicRouter) target, (DynamicRouterDefinition) definition);
             } else if (target instanceof RoutingSlip) {
-                answer = new ManagedRoutingSlip(context, (RoutingSlip) target, (org.apache.camel.model.RoutingSlipDefinition) definition);
+                answer = new ManagedRoutingSlip(context, (RoutingSlip) target, (RoutingSlipDefinition) definition);
             } else if (target instanceof FilterProcessor) {
                 answer = new ManagedFilter(context, (FilterProcessor) target, (ExpressionNode)definition);
             } else if (target instanceof LogProcessor) {
                 answer = new ManagedLog(context, (LogProcessor) target, definition);
             } else if (target instanceof LoopProcessor) {
-                answer = new ManagedLoop(context, (LoopProcessor) target, (org.apache.camel.model.LoopDefinition) definition);
+                answer = new ManagedLoop(context, (LoopProcessor) target, (LoopDefinition) definition);
             } else if (target instanceof MarshalProcessor) {
-                answer = new ManagedMarshal(context, (MarshalProcessor) target, (org.apache.camel.model.MarshalDefinition) definition);
+                answer = new ManagedMarshal(context, (MarshalProcessor) target, (MarshalDefinition) definition);
             } else if (target instanceof UnmarshalProcessor) {
-                answer = new ManagedUnmarshal(context, (UnmarshalProcessor) target, (org.apache.camel.model.UnmarshalDefinition) definition);
+                answer = new ManagedUnmarshal(context, (UnmarshalProcessor) target, (UnmarshalDefinition) definition);
             } else if (target instanceof FailOverLoadBalancer) {
-                answer = new ManagedFailoverLoadBalancer(context, (FailOverLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
+                answer = new ManagedFailoverLoadBalancer(context, (FailOverLoadBalancer) target, (LoadBalanceDefinition) definition);
             } else if (target instanceof RandomLoadBalancer) {
-                answer = new ManagedRandomLoadBalancer(context, (RandomLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
+                answer = new ManagedRandomLoadBalancer(context, (RandomLoadBalancer) target, (LoadBalanceDefinition) definition);
             } else if (target instanceof RoundRobinLoadBalancer) {
-                answer = new ManagedRoundRobinLoadBalancer(context, (RoundRobinLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
+                answer = new ManagedRoundRobinLoadBalancer(context, (RoundRobinLoadBalancer) target, (LoadBalanceDefinition) definition);
             } else if (target instanceof StickyLoadBalancer) {
-                answer = new ManagedStickyLoadBalancer(context, (StickyLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
+                answer = new ManagedStickyLoadBalancer(context, (StickyLoadBalancer) target, (LoadBalanceDefinition) definition);
             } else if (target instanceof TopicLoadBalancer) {
-                answer = new ManagedTopicLoadBalancer(context, (TopicLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
+                answer = new ManagedTopicLoadBalancer(context, (TopicLoadBalancer) target, (LoadBalanceDefinition) definition);
             } else if (target instanceof WeightedLoadBalancer) {
-                answer = new ManagedWeightedLoadBalancer(context, (WeightedLoadBalancer) target, (org.apache.camel.model.LoadBalanceDefinition) definition);
+                answer = new ManagedWeightedLoadBalancer(context, (WeightedLoadBalancer) target, (LoadBalanceDefinition) definition);
             } else if (target instanceof RecipientList) {
                 answer = new ManagedRecipientList(context, (RecipientList) target, (RecipientListDefinition) definition);
             } else if (target instanceof Splitter) {
-                answer = new ManagedSplitter(context, (Splitter) target, (org.apache.camel.model.SplitDefinition) definition);
+                answer = new ManagedSplitter(context, (Splitter) target, (SplitDefinition) definition);
             } else if (target instanceof MulticastProcessor) {
                 answer = new ManagedMulticast(context, (MulticastProcessor) target, definition);
             } else if (target instanceof SamplingThrottler) {
@@ -371,23 +386,23 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy
             } else if (target instanceof StreamResequencer) {
                 answer = new ManagedResequencer(context, (StreamResequencer) target, definition);
             } else if (target instanceof SetBodyProcessor) {
-                answer = new ManagedSetBody(context, (SetBodyProcessor) target, (org.apache.camel.model.SetBodyDefinition) definition);
+                answer = new ManagedSetBody(context, (SetBodyProcessor) target, (SetBodyDefinition) definition);
             } else if (target instanceof RemoveHeaderProcessor) {
                 answer = new ManagedRemoveHeader(context, (RemoveHeaderProcessor) target, definition);
             } else if (target instanceof RemoveHeadersProcessor) {
                 answer = new ManagedRemoveHeaders(context, (RemoveHeadersProcessor) target, definition);
             } else if (target instanceof SetHeaderProcessor) {
-                answer = new ManagedSetHeader(context, (SetHeaderProcessor) target, (org.apache.camel.model.SetHeaderDefinition) definition);
+                answer = new ManagedSetHeader(context, (SetHeaderProcessor) target, (SetHeaderDefinition) definition);
             } else if (target instanceof RemovePropertyProcessor) {
                 answer = new ManagedRemoveProperty(context, (RemovePropertyProcessor) target, definition);
             } else if (target instanceof RemovePropertiesProcessor) {
                 answer = new ManagedRemoveProperties(context, (RemovePropertiesProcessor) target, definition);
             } else if (target instanceof SetPropertyProcessor) {
-                answer = new ManagedSetProperty(context, (SetPropertyProcessor) target, (org.apache.camel.model.SetPropertyDefinition) definition);
+                answer = new ManagedSetProperty(context, (SetPropertyProcessor) target, (SetPropertyDefinition) definition);
             } else if (target instanceof ExchangePatternProcessor) {
                 answer = new ManagedSetExchangePattern(context, (ExchangePatternProcessor) target, definition);
             } else if (target instanceof ScriptProcessor) {
-                answer = new ManagedScript(context, (ScriptProcessor) target, (org.apache.camel.model.ScriptDefinition) definition);
+                answer = new ManagedScript(context, (ScriptProcessor) target, (ScriptDefinition) definition);
             } else if (target instanceof StepProcessor) {
                 answer = new ManagedStep(context, (StepProcessor) target, definition);
             } else if (target instanceof StopProcessor) {
@@ -397,9 +412,9 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy
             } else if (target instanceof ThrowExceptionProcessor) {
                 answer = new ManagedThrowException(context, (ThrowExceptionProcessor) target, definition);
             } else if (target instanceof TransformProcessor) {
-                answer = new ManagedTransformer(context, (TransformProcessor) target, (org.apache.camel.model.TransformDefinition) definition);
+                answer = new ManagedTransformer(context, (TransformProcessor) target, (TransformDefinition) definition);
             } else if (target instanceof PredicateValidatingProcessor) {
-                answer = new ManagedValidate(context, (PredicateValidatingProcessor) target, (org.apache.camel.model.ValidateDefinition) definition);
+                answer = new ManagedValidate(context, (PredicateValidatingProcessor) target, (ValidateDefinition) definition);
             } else if (target instanceof WireTapProcessor) {
                 answer = new ManagedWireTapProcessor(context, (WireTapProcessor) target, definition);
             } else if (target instanceof SendDynamicProcessor) {
@@ -421,13 +436,13 @@ public class DefaultManagementObjectStrategy implements ManagementObjectStrategy
             } else if (target instanceof BeanProcessor) {
                 answer = new ManagedBeanProcessor(context, (BeanProcessor) target, definition);
             } else if (target instanceof IdempotentConsumer) {
-                answer = new ManagedIdempotentConsumer(context, (IdempotentConsumer) target, (org.apache.camel.model.IdempotentConsumerDefinition) definition);
+                answer = new ManagedIdempotentConsumer(context, (IdempotentConsumer) target, (IdempotentConsumerDefinition) definition);
             } else if (target instanceof AggregateProcessor) {
-                answer = new ManagedAggregateProcessor(context, (AggregateProcessor) target, (org.apache.camel.model.AggregateDefinition) definition);
+                answer = new ManagedAggregateProcessor(context, (AggregateProcessor) target, (AggregateDefinition) definition);
             } else if (target instanceof Enricher) {
-                answer = new ManagedEnricher(context, (Enricher) target, (org.apache.camel.model.EnrichDefinition) definition);
+                answer = new ManagedEnricher(context, (Enricher) target, (EnrichDefinition) definition);
             } else if (target instanceof PollEnricher) {
-                answer = new ManagedPollEnricher(context, (PollEnricher) target, (org.apache.camel.model.PollEnrichDefinition) definition);
+                answer = new ManagedPollEnricher(context, (PollEnricher) target, (PollEnrichDefinition) definition);
             }
 
             // special for custom load balancer
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java b/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
index cea1e3c..03210c6 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/JmxManagementLifecycleStrategy.java
@@ -43,7 +43,6 @@ import org.apache.camel.NamedNode;
 import org.apache.camel.NonManagedService;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
-import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Service;
 import org.apache.camel.StartupListener;
@@ -96,7 +95,7 @@ import org.apache.camel.spi.ManagementObjectStrategy;
 import org.apache.camel.spi.ManagementStrategy;
 import org.apache.camel.spi.ProducerCache;
 import org.apache.camel.spi.RestRegistry;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.apache.camel.spi.RuntimeEndpointRegistry;
 import org.apache.camel.spi.StreamCachingStrategy;
 import org.apache.camel.spi.Tracer;
@@ -430,7 +429,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
     }
 
     @Override
-    public void onServiceAdd(CamelContext context, Service service, Route route) {
+    public void onServiceAdd(CamelContext context, Service service, org.apache.camel.Route route) {
         if (!initialized) {
             // pre register so we can register later when we have been initialized
             PreRegisterService pre = new PreRegisterService();
@@ -467,7 +466,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
     }
 
     @Override
-    public void onServiceRemove(CamelContext context, Service service, Route route) {
+    public void onServiceRemove(CamelContext context, Service service, org.apache.camel.Route route) {
         // the agent hasn't been started
         if (!initialized) {
             return;
@@ -484,7 +483,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
     }
 
     @SuppressWarnings("unchecked")
-    private Object getManagedObjectForService(CamelContext context, Service service, Route route) {
+    private Object getManagedObjectForService(CamelContext context, Service service, org.apache.camel.Route route) {
         // skip channel, UoW and dont double wrap instrumentation
         if (service instanceof Channel || service instanceof UnitOfWork || service instanceof InstrumentationProcessor) {
             return null;
@@ -576,7 +575,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
         return answer;
     }
 
-    private Object getManagedObjectForProcessor(CamelContext context, Processor processor, Route route) {
+    private Object getManagedObjectForProcessor(CamelContext context, Processor processor, org.apache.camel.Route route) {
         // a bit of magic here as the processors we want to manage have already been registered
         // in the wrapped processors map when Camel have instrumented the route on route initialization
         // so the idea is now to only manage the processors from the map
@@ -604,8 +603,8 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
     }
 
     @Override
-    public void onRoutesAdd(Collection<Route> routes) {
-        for (Route route : routes) {
+    public void onRoutesAdd(Collection<org.apache.camel.Route> routes) {
+        for (org.apache.camel.Route route : routes) {
 
             // if we are starting CamelContext or either of the two options has been
             // enabled, then enlist the route as a known route
@@ -659,13 +658,13 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
     }
 
     @Override
-    public void onRoutesRemove(Collection<Route> routes) {
+    public void onRoutesRemove(Collection<org.apache.camel.Route> routes) {
         // the agent hasn't been started
         if (!initialized) {
             return;
         }
 
-        for (Route route : routes) {
+        for (org.apache.camel.Route route : routes) {
             Object mr = getManagementObjectStrategy().getManagedObjectForRoute(camelContext, route);
 
             // skip unmanaged routes
@@ -690,13 +689,13 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
     }
 
     @Override
-    public void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
+    public void onErrorHandlerAdd(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
         if (!shouldRegister(errorHandler, null)) {
             // avoid registering if not needed
             return;
         }
 
-        Object me = getManagementObjectStrategy().getManagedObjectForErrorHandler(camelContext, routeContext, errorHandler, errorHandlerBuilder);
+        Object me = getManagementObjectStrategy().getManagedObjectForErrorHandler(camelContext, route, errorHandler, errorHandlerBuilder);
 
         // skip already managed services, for example if a route has been restarted
         if (getManagementStrategy().isManaged(me)) {
@@ -712,12 +711,12 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
     }
 
     @Override
-    public void onErrorHandlerRemove(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
+    public void onErrorHandlerRemove(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
         if (!initialized) {
             return;
         }
 
-        Object me = getManagementObjectStrategy().getManagedObjectForErrorHandler(camelContext, routeContext, errorHandler, errorHandlerBuilder);
+        Object me = getManagementObjectStrategy().getManagedObjectForErrorHandler(camelContext, route, errorHandler, errorHandlerBuilder);
         if (me != null) {
             try {
                 unmanageObject(me);
@@ -778,7 +777,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
     }
 
     @Override
-    public void onRouteContextCreate(RouteContext routeContext) {
+    public void onRouteContextCreate(Route route) {
         if (!initialized) {
             return;
         }
@@ -790,16 +789,16 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
         // Each processor in a route will have its own performance counter.
         // These performance counter will be embedded to InstrumentationProcessor
         // and wrap the appropriate processor by InstrumentationInterceptStrategy.
-        RouteDefinition route = (RouteDefinition) routeContext.getRoute();
+        RouteDefinition routeDefinition = (RouteDefinition) route.getRoute();
 
         // register performance counters for all processors and its children
-        for (ProcessorDefinition<?> processor : route.getOutputs()) {
-            registerPerformanceCounters(routeContext, processor, registeredCounters);
+        for (ProcessorDefinition<?> processor : routeDefinition.getOutputs()) {
+            registerPerformanceCounters(route, processor, registeredCounters);
         }
 
         // set this managed intercept strategy that executes the JMX instrumentation for performance metrics
         // so our registered counters can be used for fine grained performance instrumentation
-        routeContext.setManagementInterceptStrategy(new InstrumentationInterceptStrategy(registeredCounters, wrappedProcessors));
+        route.setManagementInterceptStrategy(new InstrumentationInterceptStrategy(registeredCounters, wrappedProcessors));
     }
 
     /**
@@ -809,9 +808,9 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
      *
      * @param routes the routes
      */
-    private void removeWrappedProcessorsForRoutes(Collection<Route> routes) {
+    private void removeWrappedProcessorsForRoutes(Collection<org.apache.camel.Route> routes) {
         // loop the routes, and remove the route associated wrapped processors, as they are no longer in use
-        for (Route route : routes) {
+        for (org.apache.camel.Route route : routes) {
             String id = route.getId();
 
             Iterator<KeyValueHolder<NamedNode, InstrumentationProcessor>> it = wrappedProcessors.values().iterator();
@@ -826,13 +825,13 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
         
     }
 
-    private void registerPerformanceCounters(RouteContext routeContext, ProcessorDefinition<?> processor,
+    private void registerPerformanceCounters(Route route, ProcessorDefinition<?> processor,
                                              Map<NamedNode, PerformanceCounter> registeredCounters) {
 
         // traverse children if any exists
         List<ProcessorDefinition<?>> children = processor.getOutputs();
         for (ProcessorDefinition<?> child : children) {
-            registerPerformanceCounters(routeContext, child, registeredCounters);
+            registerPerformanceCounters(route, child, registeredCounters);
         }
 
         // skip processors that should not be registered
@@ -936,7 +935,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
      * @param route   an optional route the mbean is associated with, can be <tt>null</tt>
      * @return <tt>true</tt> to register, <tt>false</tt> to skip registering
      */
-    protected boolean shouldRegister(Object service, Route route) {
+    protected boolean shouldRegister(Object service, org.apache.camel.Route route) {
         // the agent hasn't been started
         if (!initialized) {
             return false;
@@ -1030,7 +1029,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
         private Endpoint endpoint;
         private CamelContext camelContext;
         private Service service;
-        private Route route;
+        private org.apache.camel.Route route;
 
         public void onComponentAdd(String name, Component component) {
             this.name = name;
@@ -1041,7 +1040,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
             this.endpoint = endpoint;
         }
 
-        public void onServiceAdd(CamelContext camelContext, Service service, Route route) {
+        public void onServiceAdd(CamelContext camelContext, Service service, org.apache.camel.Route route) {
             this.camelContext = camelContext;
             this.service = service;
             this.route = route;
@@ -1067,7 +1066,7 @@ public class JmxManagementLifecycleStrategy extends ServiceSupport implements Li
             return service;
         }
 
-        public Route getRoute() {
+        public org.apache.camel.Route getRoute() {
             return route;
         }
     }
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java
index ddfc3bf..2862351 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedErrorHandler.java
@@ -24,16 +24,16 @@ import org.apache.camel.api.management.mbean.ManagedErrorHandlerMBean;
 import org.apache.camel.processor.errorhandler.ErrorHandlerSupport;
 import org.apache.camel.processor.errorhandler.RedeliveryErrorHandler;
 import org.apache.camel.spi.ManagementStrategy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 
 @ManagedResource(description = "Managed ErrorHandler")
 public class ManagedErrorHandler implements ManagedErrorHandlerMBean {
-    private final RouteContext routeContext;
+    private final Route route;
     private final Processor errorHandler;
     private final ErrorHandlerFactory errorHandlerBuilder;
 
-    public ManagedErrorHandler(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory builder) {
-        this.routeContext = routeContext;
+    public ManagedErrorHandler(Route route, Processor errorHandler, ErrorHandlerFactory builder) {
+        this.route = route;
         this.errorHandler = errorHandler;
         this.errorHandlerBuilder = builder;
     }
@@ -42,8 +42,8 @@ public class ManagedErrorHandler implements ManagedErrorHandlerMBean {
         // do nothing
     }
 
-    public RouteContext getRouteContext() {
-        return routeContext;
+    public Route getRoute() {
+        return route;
     }
 
     public Processor getErrorHandler() {
@@ -56,12 +56,12 @@ public class ManagedErrorHandler implements ManagedErrorHandlerMBean {
 
     @Override
     public String getCamelId() {
-        return routeContext.getCamelContext().getName();
+        return route.getCamelContext().getName();
     }
 
     @Override
     public String getCamelManagementName() {
-        return routeContext.getCamelContext().getManagementName();
+        return route.getCamelContext().getManagementName();
     }
 
     @Override
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
index cb35cbf..ed0a340 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedRoute.java
@@ -186,27 +186,27 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
 
     @Override
     public Boolean getTracing() {
-        return route.getRouteContext().isTracing();
+        return route.isTracing();
     }
 
     @Override
     public void setTracing(Boolean tracing) {
-        route.getRouteContext().setTracing(tracing);
+        route.setTracing(tracing);
     }
 
     @Override
     public Boolean getMessageHistory() {
-        return route.getRouteContext().isMessageHistory();
+        return route.isMessageHistory();
     }
 
     @Override
     public Boolean getLogMask() {
-        return route.getRouteContext().isLogMask();
+        return route.isLogMask();
     }
 
     @Override
     public String getRoutePolicyList() {
-        List<RoutePolicy> policyList = route.getRouteContext().getRoutePolicyList();
+        List<RoutePolicy> policyList = route.getRoutePolicyList();
 
         if (policyList == null || policyList.isEmpty()) {
             // return an empty string to have it displayed nicely in JMX consoles
@@ -594,12 +594,12 @@ public class ManagedRoute extends ManagedPerformanceCounter implements TimerList
 
     @Override
     public Boolean getHasRouteController() {
-        return route.getRouteContext().getRouteController() != null;
+        return route.getRouteController() != null;
     }
 
     @Override
     public RouteError getLastError() {
-        org.apache.camel.spi.RouteError error = route.getRouteContext().getLastError();
+        org.apache.camel.spi.RouteError error = route.getLastError();
         if (error == null) {
             return null;
         } else {
diff --git a/core/camel-management/src/test/java/org/apache/camel/management/ManagedCustomPolicyTest.java b/core/camel-management/src/test/java/org/apache/camel/management/ManagedCustomPolicyTest.java
index d45c54b..2a622a8 100644
--- a/core/camel-management/src/test/java/org/apache/camel/management/ManagedCustomPolicyTest.java
+++ b/core/camel-management/src/test/java/org/apache/camel/management/ManagedCustomPolicyTest.java
@@ -26,7 +26,7 @@ import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.spi.Policy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 import org.junit.Test;
 
 public class ManagedCustomPolicyTest extends ManagementTestSupport {
@@ -81,12 +81,12 @@ public class ManagedCustomPolicyTest extends ManagementTestSupport {
     private final class MyPolicy implements Policy {
 
         @Override
-        public void beforeWrap(RouteContext routeContext, NamedNode definition) {
+        public void beforeWrap(Route route, NamedNode definition) {
             // noop
         }
 
         @Override
-        public Processor wrap(RouteContext routeContext, final Processor processor) {
+        public Processor wrap(Route route, final Processor processor) {
             return exchange -> {
                 counter.incrementAndGet();
                 processor.process(exchange);
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
index 87b7655..80a6f08 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/ExchangeHelper.java
@@ -645,7 +645,7 @@ public final class ExchangeHelper {
     public static boolean isStreamCachingEnabled(final Exchange exchange) {
         Route route = exchange.getContext().getRoute(exchange.getFromRouteId());
         if (route != null) {
-            return route.getRouteContext().isStreamCaching();
+            return route.isStreamCaching();
         } else {
             return exchange.getContext().getStreamCachingStrategy().isEnabled();
         }
@@ -1003,4 +1003,27 @@ public final class ExchangeHelper {
         }
         return scanner;
     }
+
+    public static String getRouteId(Exchange exchange) {
+        String answer = getAtRouteId(exchange);
+        if (answer == null) {
+            // fallback and get from route id on the exchange
+            answer = exchange.getFromRouteId();
+        }
+        return answer;
+    }
+
+    public static String getAtRouteId(Exchange exchange) {
+        String answer = null;
+        Route rc = getRoute(exchange);
+        if (rc != null) {
+            answer = rc.getRouteId();
+        }
+        return answer;
+    }
+
+    public static Route getRoute(Exchange exchange) {
+        UnitOfWork uow = exchange.getUnitOfWork();
+        return uow != null ? uow.getRoute() : null;
+    }
 }
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/LifecycleStrategySupport.java b/core/camel-support/src/main/java/org/apache/camel/support/LifecycleStrategySupport.java
index 49d4267..5b10a39 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/LifecycleStrategySupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/LifecycleStrategySupport.java
@@ -24,11 +24,10 @@ import org.apache.camel.Component;
 import org.apache.camel.Endpoint;
 import org.apache.camel.ErrorHandlerFactory;
 import org.apache.camel.Processor;
-import org.apache.camel.Route;
 import org.apache.camel.Service;
 import org.apache.camel.VetoCamelContextStartException;
 import org.apache.camel.spi.LifecycleStrategy;
-import org.apache.camel.spi.RouteContext;
+import org.apache.camel.Route;
 
 /**
  * A useful base class for {@link LifecycleStrategy} implementations.
@@ -66,37 +65,37 @@ public abstract class LifecycleStrategySupport implements LifecycleStrategy {
     }
 
     @Override
-    public void onServiceAdd(CamelContext context, Service service, Route route) {
+    public void onServiceAdd(CamelContext context, Service service, org.apache.camel.Route route) {
         // noop
     }
 
     @Override
-    public void onServiceRemove(CamelContext context, Service service, Route route) {
+    public void onServiceRemove(CamelContext context, Service service, org.apache.camel.Route route) {
         // noop
     }
 
     @Override
-    public void onRoutesAdd(Collection<Route> routes) {
+    public void onRoutesAdd(Collection<org.apache.camel.Route> routes) {
         // noop
     }
 
     @Override
-    public void onRoutesRemove(Collection<Route> routes) {
+    public void onRoutesRemove(Collection<org.apache.camel.Route> routes) {
         // noop
     }
 
     @Override
-    public void onRouteContextCreate(RouteContext routeContext) {
+    public void onRouteContextCreate(Route route) {
         // noop
     }
 
     @Override
-    public void onErrorHandlerAdd(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
+    public void onErrorHandlerAdd(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
         // noop
     }
 
     @Override
-    public void onErrorHandlerRemove(RouteContext routeContext, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
+    public void onErrorHandlerRemove(Route route, Processor errorHandler, ErrorHandlerFactory errorHandlerBuilder) {
         // noop
     }
 
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
index 8756f9a..807bf25 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/MessageHelper.java
@@ -22,8 +22,6 @@ import java.io.InputStream;
 import java.io.OutputStream;
 import java.io.Reader;
 import java.io.Writer;
-import java.util.ArrayList;
-import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.TreeMap;
@@ -36,8 +34,6 @@ import org.apache.camel.StreamCache;
 import org.apache.camel.WrappedFile;
 import org.apache.camel.spi.ExchangeFormatter;
 import org.apache.camel.spi.HeaderFilterStrategy;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.util.ObjectHelper;
 import org.apache.camel.util.StopWatch;
 import org.apache.camel.util.StringHelper;
@@ -586,10 +582,9 @@ public final class MessageHelper {
             id = exchange.adapt(ExtendedExchange.class).getHistoryNodeId();
             if (id != null) {
                 // compute route id
-                UnitOfWork uow = exchange.getUnitOfWork();
-                RouteContext rc = uow != null ? uow.getRouteContext() : null;
-                if (rc != null) {
-                    routeId = rc.getRouteId();
+                String rid = ExchangeHelper.getAtRouteId(exchange);
+                if (rid != null) {
+                    routeId = rid;
                 }
                 label = exchange.adapt(ExtendedExchange.class).getHistoryNodeLabel();
                 // we need to avoid leak the sensible information here
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
index 9085cd5..71f1d68 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/builder/ExpressionBuilder.java
@@ -39,8 +39,6 @@ import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.RuntimeExchangeException;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.PropertiesComponent;
-import org.apache.camel.spi.RouteContext;
-import org.apache.camel.spi.UnitOfWork;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.ExpressionAdapter;
 import org.apache.camel.support.GroupIterator;
@@ -1242,16 +1240,7 @@ public class ExpressionBuilder {
     public static Expression routeIdExpression() {
         return new ExpressionAdapter() {
             public Object evaluate(Exchange exchange) {
-                String answer = null;
-                UnitOfWork uow = exchange.getUnitOfWork();
-                RouteContext rc = uow != null ? uow.getRouteContext() : null;
-                if (rc != null) {
-                    answer = rc.getRouteId();
-                }
-                if (answer == null) {
-                    // fallback and get from route id on the exchange
-                    answer = exchange.getFromRouteId();
-                }
+                String answer = ExchangeHelper.getRouteId(exchange);
                 return answer;
             }