You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@camel.apache.org by da...@apache.org on 2020/10/25 11:36:19 UTC

[camel] branch master updated: CAMEL-15740: camel-core - Modularize processors into their own module

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

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


The following commit(s) were added to refs/heads/master by this push:
     new 5235319  CAMEL-15740: camel-core - Modularize processors into their own module
5235319 is described below

commit 5235319d94fbb82f479ca3085b0780c0f144111b
Author: Claus Ibsen <cl...@gmail.com>
AuthorDate: Sun Oct 25 12:29:36 2020 +0100

    CAMEL-15740: camel-core - Modularize processors into their own module
---
 apache-camel/pom.xml                               |  4 ++
 apache-camel/src/main/descriptors/common-bin.xml   |  1 +
 bom/camel-bom/pom.xml                              |  5 +++
 components/camel-opentracing/pom.xml               |  2 +-
 .../apache/camel/component/seda/SedaEndpoint.java  | 11 +++++-
 .../apache/camel/test/junit5/CamelTestSupport.java |  4 +-
 .../spring/junit5/CamelAnnotationsHandler.java     |  2 +-
 .../spring/CamelSpringProvidesBreakpointTest.java  |  2 +-
 .../camel/test/spring/CamelAnnotationsHandler.java |  2 +-
 .../CamelSpringRunnerProvidesBreakpointTest.java   |  2 +-
 .../apache/camel/test/junit4/CamelTestSupport.java |  4 +-
 .../java/org/apache/camel/spi}/ErrorHandler.java   |  2 +-
 .../org/apache/camel/ExtendedCamelContext.java     | 23 +++++-------
 .../camel/spi/AnnotationBasedProcessorFactory.java |  5 +++
 .../org/apache/camel/spi/DeferServiceFactory.java  |  5 +++
 .../org/apache/camel/spi/InternalProcessor.java    | 43 ++++++++++++++++++++++
 .../org/apache/camel/spi/ProcessorFactory.java     | 13 +++++--
 .../debugger}/BacklogDebugger.java                 |  3 +-
 .../debugger}/BacklogTracer.java                   |  2 +-
 .../DefaultBacklogTracerEventMessage.java          |  2 +-
 .../debugger}/DefaultDebugger.java                 |  2 +-
 .../interceptor => impl/debugger}/package.html     |  2 +-
 .../camel/impl/engine/AbstractCamelContext.java    | 32 ++++++++++++++--
 .../engine}/CamelInternalProcessor.java            | 10 ++---
 .../impl/engine/DefaultFluentProducerTemplate.java | 23 +++++++++---
 .../engine/DefaultInterceptSendToEndpoint.java     | 13 ++++++-
 .../camel/impl/engine/DefaultProducerCache.java    | 19 +++++++---
 .../camel/impl/engine/DefaultProducerTemplate.java | 16 +++++++-
 .../org/apache/camel/impl/engine/RouteService.java |  2 +-
 .../camel/impl/engine/SimpleCamelContext.java      | 38 ++++++++++++-------
 .../impl/engine/SubscribeMethodProcessor.java      | 13 ++++---
 .../camel/impl/ExtendedCamelContextConfigurer.java | 10 +++++
 .../camel/impl/lw/LightweightCamelContext.java     | 18 +++++----
 .../impl/lw/LightweightRuntimeCamelContext.java    | 18 +++++----
 core/camel-core-model/pom.xml                      |  5 +++
 .../pom.xml                                        | 11 ++----
 .../org/apache/camel/annotation-processor-factory  |  2 +
 .../org/apache/camel/defer-service-factory         |  2 +
 .../services/org/apache/camel/processor-factory    |  2 +
 .../org/apache/camel/processor/CatchProcessor.java |  0
 .../apache/camel/processor/ChoiceProcessor.java    |  0
 .../processor/ClaimCheckAggregationStrategy.java   |  0
 .../camel/processor/ClaimCheckProcessor.java       |  0
 .../org/apache/camel/processor/ContractAdvice.java |  0
 .../camel/processor/ConvertBodyProcessor.java      |  0
 .../DefaultAnnotationBasedProcessorFactory.java    |  4 +-
 .../processor}/DefaultDeferServiceFactory.java     |  7 ++--
 .../camel/processor}/DefaultProcessorFactory.java  | 38 +++++++++++++++++--
 .../camel/processor/DelayProcessorSupport.java     |  0
 .../java/org/apache/camel/processor/Delayer.java   |  0
 .../org/apache/camel/processor/DynamicRouter.java  |  0
 .../java/org/apache/camel/processor/Enricher.java  |  0
 .../processor/EvaluateExpressionProcessor.java     |  0
 .../camel/processor/EventNotifierProducer.java     |  0
 .../camel/processor/ExchangePatternProcessor.java  |  0
 .../camel/processor/FatalFallbackErrorHandler.java |  5 ++-
 .../apache/camel/processor/FilterProcessor.java    |  0
 .../apache/camel/processor/FinallyProcessor.java   |  0
 .../processor/InterceptEndpointProcessor.java      |  0
 .../InterceptSendToEndpointProcessor.java          |  9 +++--
 .../org/apache/camel/processor/LogProcessor.java   |  0
 .../org/apache/camel/processor/LoopProcessor.java  |  0
 .../apache/camel/processor/MulticastProcessor.java |  1 +
 .../camel/processor/OnCompletionProcessor.java     |  0
 .../java/org/apache/camel/processor/Pipeline.java  |  0
 .../org/apache/camel/processor/PipelineHelper.java |  0
 .../org/apache/camel/processor/PollEnricher.java   |  0
 .../camel/processor/ProcessorExchangePair.java     |  0
 .../org/apache/camel/processor/RecipientList.java  |  0
 .../camel/processor/RecipientListProcessor.java    |  0
 .../camel/processor/RemoveHeaderProcessor.java     |  0
 .../camel/processor/RemoveHeadersProcessor.java    |  0
 .../camel/processor/RemovePropertiesProcessor.java |  0
 .../camel/processor/RemovePropertyProcessor.java   |  0
 .../org/apache/camel/processor/Resequencer.java    |  0
 .../apache/camel/processor/RestBindingAdvice.java  |  1 +
 .../apache/camel/processor/RollbackProcessor.java  |  0
 .../org/apache/camel/processor/RoutingSlip.java    |  0
 .../apache/camel/processor/SamplingThrottler.java  |  0
 .../apache/camel/processor/ScriptProcessor.java    |  0
 .../camel/processor/SendDynamicAwareResolver.java  |  0
 .../camel/processor/SendDynamicProcessor.java      |  0
 .../org/apache/camel/processor/SendProcessor.java  |  0
 .../apache/camel/processor/SetBodyProcessor.java   |  0
 .../apache/camel/processor/SetHeaderProcessor.java |  0
 .../camel/processor/SetPropertyProcessor.java      |  0
 .../processor/SharedCamelInternalProcessor.java    |  3 +-
 .../org/apache/camel/processor/SortProcessor.java  |  0
 .../java/org/apache/camel/processor/Splitter.java  |  0
 .../org/apache/camel/processor/StepProcessor.java  |  0
 .../org/apache/camel/processor/StopProcessor.java  |  0
 .../apache/camel/processor/StreamResequencer.java  |  0
 .../apache/camel/processor/ThreadsProcessor.java   |  0
 .../java/org/apache/camel/processor/Throttler.java |  0
 .../ThrottlerRejectedExecutionException.java       |  0
 .../camel/processor/ThrowExceptionProcessor.java   |  0
 .../apache/camel/processor/TransformProcessor.java |  0
 .../org/apache/camel/processor/TryProcessor.java   |  0
 .../apache/camel/processor/UnitOfWorkProducer.java |  1 +
 .../apache/camel/processor/WireTapProcessor.java   |  0
 .../org/apache/camel/processor/WrapProcessor.java  |  0
 .../aggregate/AbstractListAggregationStrategy.java |  0
 .../processor/aggregate/AggregateController.java   |  0
 .../processor/aggregate/AggregateProcessor.java    |  0
 .../aggregate/AggregateProcessorStatistics.java    |  0
 .../aggregate/AggregationStrategyBeanAdapter.java  |  0
 .../aggregate/AggregationStrategyBeanInfo.java     |  0
 .../aggregate/AggregationStrategyMethodInfo.java   |  0
 .../AggregationStrategyParameterInfo.java          |  0
 .../aggregate/ClosedCorrelationKeyException.java   |  0
 .../aggregate/DefaultAggregateController.java      |  0
 .../aggregate/GroupedBodyAggregationStrategy.java  |  0
 .../GroupedExchangeAggregationStrategy.java        |  0
 .../GroupedMessageAggregationStrategy.java         |  0
 .../aggregate/MemoryAggregationRepository.java     |  0
 .../aggregate/OptimisticLockRetryPolicy.java       |  0
 .../ShareUnitOfWorkAggregationStrategy.java        |  0
 .../aggregate/StringAggregationStrategy.java       |  0
 .../aggregate/UseLatestAggregationStrategy.java    |  0
 .../aggregate/UseOriginalAggregationStrategy.java  |  0
 .../apache/camel/processor/aggregate/package.html  |  0
 .../camel/processor/channel/DefaultChannel.java    |  9 +++--
 .../processor/errorhandler/DeadLetterChannel.java  |  0
 .../errorhandler/DefaultErrorHandler.java          |  0
 .../DefaultExceptionPolicyStrategy.java            |  0
 .../errorhandler/ErrorHandlerSupport.java          |  2 +-
 .../processor/errorhandler/ExceptionPolicy.java    |  0
 .../processor/errorhandler/ExceptionPolicyKey.java |  0
 .../errorhandler/ExceptionPolicyStrategy.java      |  0
 .../errorhandler/RedeliveryErrorHandler.java       |  0
 .../processor/errorhandler/RedeliveryPolicy.java   |  0
 .../camel/processor/errorhandler/package.html      |  0
 .../processor/idempotent/IdempotentConsumer.java   |  0
 .../idempotent/IdempotentOnCompletion.java         |  0
 .../processor/idempotent/NoMessageIdException.java |  0
 .../apache/camel/processor/idempotent/package.html |  0
 .../processor/loadbalancer/DistributionRatio.java  |  0
 .../loadbalancer/ExceptionFailureStatistics.java   |  0
 .../loadbalancer/FailOverLoadBalancer.java         |  0
 .../camel/processor/loadbalancer/LoadBalancer.java |  0
 .../loadbalancer/LoadBalancerConsumer.java         |  0
 .../loadbalancer/LoadBalancerSupport.java          |  0
 .../processor/loadbalancer/QueueLoadBalancer.java  |  0
 .../processor/loadbalancer/RandomLoadBalancer.java |  0
 .../loadbalancer/RoundRobinLoadBalancer.java       |  0
 .../processor/loadbalancer/StickyLoadBalancer.java |  0
 .../processor/loadbalancer/TopicLoadBalancer.java  |  0
 .../loadbalancer/WeightedLoadBalancer.java         |  0
 .../loadbalancer/WeightedRandomLoadBalancer.java   |  0
 .../WeightedRoundRobinLoadBalancer.java            |  0
 .../camel/processor/loadbalancer/package.html      |  0
 .../java/org/apache/camel/processor/package.html   |  0
 .../resequencer/DefaultExchangeComparator.java     |  0
 .../camel/processor/resequencer/Element.java       |  0
 .../processor/resequencer/ElementComparator.java   |  0
 .../resequencer/ExpressionResultComparator.java    |  0
 .../resequencer/MessageRejectedException.java      |  0
 .../processor/resequencer/ResequencerEngine.java   |  0
 .../camel/processor/resequencer/Sequence.java      |  0
 .../resequencer/SequenceElementComparator.java     |  0
 .../processor/resequencer/SequenceSender.java      |  0
 .../camel/processor/resequencer/Timeout.java       |  0
 .../processor/resequencer/TimeoutHandler.java      |  0
 .../camel/processor/resequencer/package.html       |  0
 .../processor/saga/MandatorySagaProcessor.java     |  0
 .../camel/processor/saga/NeverSagaProcessor.java   |  0
 .../processor/saga/NotSupportedSagaProcessor.java  |  0
 .../processor/saga/RequiredSagaProcessor.java      |  0
 .../processor/saga/RequiresNewSagaProcessor.java   |  0
 .../camel/processor/saga/SagaCompletionMode.java   |  0
 .../apache/camel/processor/saga/SagaProcessor.java |  0
 .../camel/processor/saga/SagaProcessorBuilder.java |  0
 .../camel/processor/saga/SagaPropagation.java      |  0
 .../processor/saga/SupportsSagaProcessor.java      |  0
 .../org/apache/camel/processor/saga/package.html   |  0
 .../transformer/DataFormatTransformer.java         |  0
 .../transformer/ProcessorTransformer.java          |  0
 .../camel/processor/transformer/package.html       |  0
 .../processor/validator/ProcessorValidator.java    |  0
 .../apache/camel/processor/validator/package.html  |  0
 core/camel-core-reifier/pom.xml                    |  5 +++
 .../org/apache/camel/reifier/AggregateReifier.java |  3 +-
 .../apache/camel/reifier/OnCompletionReifier.java  |  3 +-
 .../apache/camel/reifier/ResequenceReifier.java    |  3 +-
 .../org/apache/camel/reifier/RouteReifier.java     |  3 +-
 .../org/apache/camel/reifier/WireTapReifier.java   |  3 +-
 .../reifier/errorhandler/ErrorHandlerReifier.java  |  2 +-
 .../core/xml/AbstractCamelContextFactoryBean.java  |  2 +-
 .../processor/CustomProcessorFactoryTest.java      | 19 ++--------
 .../interceptor/DebugExceptionBreakpointTest.java  |  2 +
 .../DebugExceptionEventBreakpointTest.java         |  2 +
 .../interceptor/DebugSingleStepConditionTest.java  |  2 +
 .../processor/interceptor/DebugSingleStepTest.java |  2 +
 .../camel/processor/interceptor/DebugTest.java     |  2 +
 .../camel/main/DefaultConfigurationConfigurer.java |  2 +-
 .../DefaultManagementObjectStrategy.java           |  2 +-
 .../management/JmxManagementLifecycleStrategy.java |  6 +--
 .../management/mbean/ManagedBacklogDebugger.java   |  2 +-
 .../management/mbean/ManagedBacklogTracer.java     |  2 +-
 .../apache/camel/support}/BreakpointSupport.java   |  2 +-
 core/pom.xml                                       |  1 +
 .../ROOT/pages/camel-3x-upgrade-guide-3_7.adoc     | 26 +++++++++++--
 parent/pom.xml                                     |  5 +++
 203 files changed, 404 insertions(+), 152 deletions(-)

diff --git a/apache-camel/pom.xml b/apache-camel/pom.xml
index 00a8870..4ecb985 100644
--- a/apache-camel/pom.xml
+++ b/apache-camel/pom.xml
@@ -82,6 +82,10 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-processor</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
             <artifactId>camel-core-reifier</artifactId>
         </dependency>
         <dependency>
diff --git a/apache-camel/src/main/descriptors/common-bin.xml b/apache-camel/src/main/descriptors/common-bin.xml
index acec19a..404a31d 100644
--- a/apache-camel/src/main/descriptors/common-bin.xml
+++ b/apache-camel/src/main/descriptors/common-bin.xml
@@ -37,6 +37,7 @@
         <include>org.apache.camel:camel-core-engine</include>
         <include>org.apache.camel:camel-core-model</include>
         <include>org.apache.camel:camel-core-reifier</include>
+        <include>org.apache.camel:camel-core-processor</include>
         <include>org.apache.camel:camel-core-languages</include>
         <include>org.apache.camel:camel-core-xml</include>
         <include>org.apache.camel:camel-core-catalog</include>
diff --git a/bom/camel-bom/pom.xml b/bom/camel-bom/pom.xml
index 181d335..6ae6e59 100644
--- a/bom/camel-bom/pom.xml
+++ b/bom/camel-bom/pom.xml
@@ -549,6 +549,11 @@
       </dependency>
       <dependency>
         <groupId>org.apache.camel</groupId>
+        <artifactId>camel-core-processor</artifactId>
+        <version>${project.version}</version>
+      </dependency>
+      <dependency>
+        <groupId>org.apache.camel</groupId>
         <artifactId>camel-core-reifier</artifactId>
         <version>${project.version}</version>
       </dependency>
diff --git a/components/camel-opentracing/pom.xml b/components/camel-opentracing/pom.xml
index 031ced8..f04d1f6 100644
--- a/components/camel-opentracing/pom.xml
+++ b/components/camel-opentracing/pom.xml
@@ -48,7 +48,7 @@
         <!-- added to bypass LogProcessor -->
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-base</artifactId>
+            <artifactId>camel-core-processor</artifactId>
             <scope>provided</scope>
         </dependency>
 
diff --git a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
index 38ade59..225903f 100644
--- a/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
+++ b/components/camel-seda/src/main/java/org/apache/camel/component/seda/SedaEndpoint.java
@@ -17,8 +17,10 @@
 package org.apache.camel.component.seda;
 
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.HashSet;
 import java.util.List;
+import java.util.Map;
 import java.util.Set;
 import java.util.concurrent.BlockingQueue;
 import java.util.concurrent.CopyOnWriteArraySet;
@@ -254,8 +256,13 @@ public class SedaEndpoint extends DefaultEndpoint implements AsyncEndpoint, Brow
             }
             // create multicast processor
             multicastStarted = false;
-            consumerMulticastProcessor
-                    = getCamelContext().adapt(ExtendedCamelContext.class).createMulticast(processors, multicastExecutor, false);
+
+            Map<String, Object> args = new HashMap<>();
+            args.put("processors", processors);
+            args.put("executor", multicastExecutor);
+            args.put("shutdownExecutorService", false);
+            consumerMulticastProcessor = (AsyncProcessor) getCamelContext().adapt(ExtendedCamelContext.class)
+                    .getProcessorFactory().createProcessor(getCamelContext(), "MulticastProcessor", args);
         }
     }
 
diff --git a/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java b/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
index 687cffd..16e8026 100644
--- a/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
+++ b/components/camel-test-junit5/src/main/java/org/apache/camel/test/junit5/CamelTestSupport.java
@@ -48,16 +48,16 @@ import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.processor.interceptor.BreakpointSupport;
-import org.apache.camel.processor.interceptor.DefaultDebugger;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.support.BreakpointSupport;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.test.CamelRouteCoverageDumper;
 import org.apache.camel.util.StopWatch;
diff --git a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelAnnotationsHandler.java b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelAnnotationsHandler.java
index e5e16c7..5a0061c 100644
--- a/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelAnnotationsHandler.java
+++ b/components/camel-test-spring-junit5/src/main/java/org/apache/camel/test/spring/junit5/CamelAnnotationsHandler.java
@@ -30,8 +30,8 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
 import org.apache.camel.api.management.ManagedCamelContext;
 import org.apache.camel.api.management.mbean.ManagedCamelContextMBean;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
-import org.apache.camel.processor.interceptor.DefaultDebugger;
 import org.apache.camel.spi.Breakpoint;
 import org.apache.camel.spi.Debugger;
 import org.apache.camel.spi.EventNotifier;
diff --git a/components/camel-test-spring-junit5/src/test/java/org/apache/camel/test/spring/CamelSpringProvidesBreakpointTest.java b/components/camel-test-spring-junit5/src/test/java/org/apache/camel/test/spring/CamelSpringProvidesBreakpointTest.java
index 3d796d8..a0ff67c 100644
--- a/components/camel-test-spring-junit5/src/test/java/org/apache/camel/test/spring/CamelSpringProvidesBreakpointTest.java
+++ b/components/camel-test-spring-junit5/src/test/java/org/apache/camel/test/spring/CamelSpringProvidesBreakpointTest.java
@@ -19,8 +19,8 @@ package org.apache.camel.test.spring;
 import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
-import org.apache.camel.processor.interceptor.BreakpointSupport;
 import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.support.BreakpointSupport;
 import org.apache.camel.test.spring.junit5.ProvidesBreakpoint;
 import org.junit.jupiter.api.Test;
 
diff --git a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelAnnotationsHandler.java b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelAnnotationsHandler.java
index 6c348bb..d0aa07d 100644
--- a/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelAnnotationsHandler.java
+++ b/components/camel-test-spring/src/main/java/org/apache/camel/test/spring/CamelAnnotationsHandler.java
@@ -30,8 +30,8 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.api.management.JmxSystemPropertyKeys;
 import org.apache.camel.api.management.ManagedCamelContext;
 import org.apache.camel.api.management.mbean.ManagedCamelContextMBean;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
-import org.apache.camel.processor.interceptor.DefaultDebugger;
 import org.apache.camel.spi.Breakpoint;
 import org.apache.camel.spi.Debugger;
 import org.apache.camel.spi.EventNotifier;
diff --git a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerProvidesBreakpointTest.java b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerProvidesBreakpointTest.java
index 7fab987..8bc44e2 100644
--- a/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerProvidesBreakpointTest.java
+++ b/components/camel-test-spring/src/test/java/org/apache/camel/test/spring/CamelSpringRunnerProvidesBreakpointTest.java
@@ -19,8 +19,8 @@ package org.apache.camel.test.spring;
 import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
-import org.apache.camel.processor.interceptor.BreakpointSupport;
 import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.support.BreakpointSupport;
 import org.junit.Test;
 
 import static org.junit.Assert.assertEquals;
diff --git a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java b/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
index 27f3136..896e8bf 100644
--- a/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
+++ b/components/camel-test/src/main/java/org/apache/camel/test/junit4/CamelTestSupport.java
@@ -70,16 +70,16 @@ import org.apache.camel.builder.AdviceWithRouteBuilder;
 import org.apache.camel.builder.RouteBuilder;
 import org.apache.camel.component.mock.MockEndpoint;
 import org.apache.camel.impl.DefaultCamelContext;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.impl.engine.InterceptSendToMockEndpointStrategy;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.processor.interceptor.BreakpointSupport;
-import org.apache.camel.processor.interceptor.DefaultDebugger;
 import org.apache.camel.spi.CamelBeanPostProcessor;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.PropertiesComponent;
 import org.apache.camel.spi.Registry;
+import org.apache.camel.support.BreakpointSupport;
 import org.apache.camel.support.EndpointHelper;
 import org.apache.camel.util.IOHelper;
 import org.apache.camel.util.StopWatch;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ErrorHandler.java b/core/camel-api/src/generated/java/org/apache/camel/spi/ErrorHandler.java
similarity index 96%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ErrorHandler.java
rename to core/camel-api/src/generated/java/org/apache/camel/spi/ErrorHandler.java
index e53c621..656e7db 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/ErrorHandler.java
+++ b/core/camel-api/src/generated/java/org/apache/camel/spi/ErrorHandler.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor;
+package org.apache.camel.spi;
 
 import org.apache.camel.Processor;
 
diff --git a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
index c1a7a59..6700d00 100644
--- a/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
+++ b/core/camel-api/src/main/java/org/apache/camel/ExtendedCamelContext.java
@@ -16,11 +16,9 @@
  */
 package org.apache.camel;
 
-import java.util.Collection;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 
 import org.apache.camel.catalog.RuntimeCamelCatalog;
@@ -216,17 +214,6 @@ public interface ExtendedCamelContext extends CamelContext {
     ManagementMBeanAssembler getManagementMBeanAssembler();
 
     /**
-     * Creates a new multicast processor which sends an exchange to all the processors.
-     *
-     * @param  processors the list of processors to send to
-     * @param  executor   the executor to use
-     * @return            a multicasting processor
-     */
-    AsyncProcessor createMulticast(
-            Collection<Processor> processors,
-            ExecutorService executor, boolean shutdownExecutorService);
-
-    /**
      * Gets the default error handler builder which is inherited by the routes
      *
      * @return the builder
@@ -417,6 +404,11 @@ public interface ExtendedCamelContext extends CamelContext {
     DeferServiceFactory getDeferServiceFactory();
 
     /**
+     * Sets a custom {@link DeferServiceFactory} to use.
+     */
+    void setDeferServiceFactory(DeferServiceFactory deferServiceFactory);
+
+    /**
      * Gets the {@link UnitOfWorkFactory} to use.
      */
     UnitOfWorkFactory getUnitOfWorkFactory();
@@ -432,6 +424,11 @@ public interface ExtendedCamelContext extends CamelContext {
     AnnotationBasedProcessorFactory getAnnotationBasedProcessorFactory();
 
     /**
+     * Sets a custom {@link AnnotationBasedProcessorFactory} to use.
+     */
+    void setAnnotationBasedProcessorFactory(AnnotationBasedProcessorFactory annotationBasedProcessorFactory);
+
+    /**
      * Gets the {@link BeanProxyFactory} to use.
      */
     BeanProxyFactory getBeanProxyFactory();
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/AnnotationBasedProcessorFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/AnnotationBasedProcessorFactory.java
index c720652..5497830 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/AnnotationBasedProcessorFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/AnnotationBasedProcessorFactory.java
@@ -29,6 +29,11 @@ import org.apache.camel.RoutingSlip;
 public interface AnnotationBasedProcessorFactory {
 
     /**
+     * Service factory key.
+     */
+    String FACTORY = "annotation-processor-factory";
+
+    /**
      * Creates dynamic router processor from the configured annotation.
      */
     AsyncProcessor createDynamicRouter(CamelContext camelContext, DynamicRouter annotation);
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/DeferServiceFactory.java b/core/camel-api/src/main/java/org/apache/camel/spi/DeferServiceFactory.java
index 3599271..9141f08 100644
--- a/core/camel-api/src/main/java/org/apache/camel/spi/DeferServiceFactory.java
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/DeferServiceFactory.java
@@ -26,6 +26,11 @@ import org.apache.camel.Producer;
 public interface DeferServiceFactory {
 
     /**
+     * Service factory key.
+     */
+    String FACTORY = "defer-service-factory";
+
+    /**
      * Creates the {@link Producer} which is deferred started until {@link org.apache.camel.CamelContext} is being
      * started.
      * <p/>
diff --git a/core/camel-api/src/main/java/org/apache/camel/spi/InternalProcessor.java b/core/camel-api/src/main/java/org/apache/camel/spi/InternalProcessor.java
new file mode 100644
index 0000000..188ab95
--- /dev/null
+++ b/core/camel-api/src/main/java/org/apache/camel/spi/InternalProcessor.java
@@ -0,0 +1,43 @@
+package org.apache.camel.spi;
+
+import org.apache.camel.AsyncCallback;
+import org.apache.camel.AsyncProcessor;
+import org.apache.camel.Exchange;
+import org.apache.camel.Processor;
+
+/**
+ * An internal {@link Processor} that Camel routing engine used during routing for cross cutting functionality such as:
+ * <ul>
+ * <li>Execute {@link UnitOfWork}</li>
+ * <li>Keeping track which route currently is being routed</li>
+ * <li>Execute {@link RoutePolicy}</li>
+ * <li>Gather JMX performance statics</li>
+ * <li>Tracing</li>
+ * <li>Debugging</li>
+ * <li>Message History</li>
+ * <li>Stream Caching</li>
+ * <li>{@link Transformer}</li>
+ * </ul>
+ * ... and more.
+ * <p/>
+ *
+ * This is intended for internal use only - do not use this.
+ */
+public interface InternalProcessor extends Processor {
+
+    @Override
+    default void process(Exchange exchange) throws Exception {
+        // not in use
+    }
+
+    /**
+     * Asynchronous API
+     */
+    boolean process(Exchange exchange, AsyncCallback originalCallback, AsyncProcessor processor, Processor resultProcessor);
+
+    /**
+     * Synchronous API
+     */
+    void process(Exchange exchange, AsyncProcessor processor, Processor resultProcessor);
+
+}
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 6dd831d..4830369 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
@@ -31,13 +31,18 @@ import org.apache.camel.Route;
  * change options. Its also possible to add new steps in the route by adding outputs to
  * {@link org.apache.camel.model.ProcessorDefinition definition}s.
  * <p/>
- * <b>Important:</b> By returning <tt>null</tt> from the create methods you fallback to let the default implementation
- * in Camel create the {@link Processor}. You want to do this if you <i>only</i> want to manipulate the
- * {@link org.apache.camel.model.ProcessorDefinition definition}s.
+ * <b>Important:</b> A custom ProcessorFactory should extend the default implementation
+ * <tt>org.apache.camel.processor.DefaultProcessorFactory</tt> and in the overridden methods, super should be called to
+ * let the default implementation create the processor when custom processors is not created.
  */
 public interface ProcessorFactory {
 
     /**
+     * Service factory key.
+     */
+    String FACTORY = "processor-factory";
+
+    /**
      * Creates the child processor.
      * <p/>
      * The child processor is an output from the given definition, for example the sub route in a splitter EIP.
@@ -64,7 +69,7 @@ public interface ProcessorFactory {
 
     /**
      * Creates a processor by the name of the definition. This should only be used in some special situations where the
-     * processor is used internally in some features such as camel-cloud.
+     * processor is used internally by Camel itself and some component such as camel-cloud, camel-seda.
      *
      * @param  camelContext   the camel context
      * @param  definitionName the name of the definition that represents the processor
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/BacklogDebugger.java
similarity index 99%
rename from core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/debugger/BacklogDebugger.java
index 0fbb3da..1ec0404 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogDebugger.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/BacklogDebugger.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor.interceptor;
+package org.apache.camel.impl.debugger;
 
 import java.util.LinkedHashSet;
 import java.util.Set;
@@ -39,6 +39,7 @@ import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.apache.camel.spi.CamelLogger;
 import org.apache.camel.spi.Condition;
 import org.apache.camel.spi.Debugger;
+import org.apache.camel.support.BreakpointSupport;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.MessageHelper;
 import org.apache.camel.support.service.ServiceHelper;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
similarity index 99%
rename from core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
index 6c1c6f5..c9bf714 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BacklogTracer.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/BacklogTracer.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor.interceptor;
+package org.apache.camel.impl.debugger;
 
 import java.util.ArrayList;
 import java.util.List;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultBacklogTracerEventMessage.java b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java
similarity index 98%
rename from core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultBacklogTracerEventMessage.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java
index 1da6660..6cf5419 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultBacklogTracerEventMessage.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/DefaultBacklogTracerEventMessage.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor.interceptor;
+package org.apache.camel.impl.debugger;
 
 import java.text.SimpleDateFormat;
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/DefaultDebugger.java
similarity index 99%
rename from core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/debugger/DefaultDebugger.java
index 29ea5fd..a65c288 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/DefaultDebugger.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/DefaultDebugger.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor.interceptor;
+package org.apache.camel.impl.debugger;
 
 import java.util.ArrayList;
 import java.util.Arrays;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/package.html b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/package.html
similarity index 96%
rename from core/camel-base/src/main/java/org/apache/camel/processor/interceptor/package.html
rename to core/camel-base/src/main/java/org/apache/camel/impl/debugger/package.html
index dea66da..5907fd0 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/package.html
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/debugger/package.html
@@ -21,7 +21,7 @@
 </head>
 <body>
 
-Helper classes for interceptors.
+Helper classes for debugger.
 
 </body>
 </html>
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
index 39f8131..dcf5a1d 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/AbstractCamelContext.java
@@ -199,9 +199,8 @@ public abstract class AbstractCamelContext extends BaseService
     private final Object lock = new Object();
     private final RouteController internalRouteController = new InternalRouteController(this);
     private final InternalRouteStartupManager internalRouteStartupManager = new InternalRouteStartupManager(this);
-    private final DeferServiceFactory deferServiceFactory = new DefaultDeferServiceFactory();
-    private final AnnotationBasedProcessorFactory annotationBasedProcessorFactory
-            = new DefaultAnnotationBasedProcessorFactory();
+    private DeferServiceFactory deferServiceFactory;
+    private AnnotationBasedProcessorFactory annotationBasedProcessorFactory;
     private final List<RouteStartupOrder> routeStartupOrder = new ArrayList<>();
     private final StopWatch stopWatch = new StopWatch(false);
     private final Map<Class<?>, Object> extensions = new ConcurrentHashMap<>();
@@ -3265,6 +3264,7 @@ public abstract class AbstractCamelContext extends BaseService
             // ignore in case camel-bean is not on the classpath
         }
         getBeanPostProcessor();
+        getProcessorFactory();
     }
 
     /**
@@ -4126,14 +4126,36 @@ public abstract class AbstractCamelContext extends BaseService
 
     @Override
     public DeferServiceFactory getDeferServiceFactory() {
+        if (deferServiceFactory == null) {
+            synchronized (lock) {
+                if (deferServiceFactory == null) {
+                    setDeferServiceFactory(createDeferServiceFactory());
+                }
+            }
+        }
         return deferServiceFactory;
     }
 
+    public void setDeferServiceFactory(DeferServiceFactory deferServiceFactory) {
+        this.deferServiceFactory = deferServiceFactory;
+    }
+
     @Override
     public AnnotationBasedProcessorFactory getAnnotationBasedProcessorFactory() {
+        if (annotationBasedProcessorFactory == null) {
+            synchronized (lock) {
+                if (annotationBasedProcessorFactory == null) {
+                    setAnnotationBasedProcessorFactory(createAnnotationBasedProcessorFactory());
+                }
+            }
+        }
         return annotationBasedProcessorFactory;
     }
 
+    public void setAnnotationBasedProcessorFactory(AnnotationBasedProcessorFactory annotationBasedProcessorFactory) {
+        this.annotationBasedProcessorFactory = annotationBasedProcessorFactory;
+    }
+
     @Override
     public BeanProxyFactory getBeanProxyFactory() {
         if (beanProxyFactory == null) {
@@ -4241,6 +4263,10 @@ public abstract class AbstractCamelContext extends BaseService
 
     protected abstract BeanProxyFactory createBeanProxyFactory();
 
+    protected abstract AnnotationBasedProcessorFactory createAnnotationBasedProcessorFactory();
+
+    protected abstract DeferServiceFactory createDeferServiceFactory();
+
     protected abstract BeanProcessorFactory createBeanProcessorFactory();
 
     protected abstract BeanIntrospection createBeanIntrospection();
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/impl/engine/CamelInternalProcessor.java
similarity index 99%
rename from core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
rename to core/camel-base/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
index d872bf6..8fbb08f 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/CamelInternalProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/CamelInternalProcessor.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor;
+package org.apache.camel.impl.engine;
 
 import java.util.ArrayList;
 import java.util.List;
@@ -36,9 +36,9 @@ import org.apache.camel.Route;
 import org.apache.camel.StatefulService;
 import org.apache.camel.StreamCache;
 import org.apache.camel.StreamCacheException;
-import org.apache.camel.processor.interceptor.BacklogDebugger;
-import org.apache.camel.processor.interceptor.BacklogTracer;
-import org.apache.camel.processor.interceptor.DefaultBacklogTracerEventMessage;
+import org.apache.camel.impl.debugger.BacklogDebugger;
+import org.apache.camel.impl.debugger.BacklogTracer;
+import org.apache.camel.impl.debugger.DefaultBacklogTracerEventMessage;
 import org.apache.camel.spi.CamelInternalProcessorAdvice;
 import org.apache.camel.spi.Debugger;
 import org.apache.camel.spi.InflightRepository;
@@ -520,7 +520,7 @@ public class CamelInternalProcessor extends DelegateAsyncProcessor {
     }
 
     /**
-     * Advice to execute the {@link org.apache.camel.processor.interceptor.BacklogDebugger} if enabled.
+     * Advice to execute the {@link BacklogDebugger} if enabled.
      */
     public static final class BacklogDebuggerAdvice implements CamelInternalProcessorAdvice<StopWatch>, Ordered {
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
index 925ac2e..40d4bd1 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultFluentProducerTemplate.java
@@ -28,11 +28,13 @@ import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.FluentProducerTemplate;
 import org.apache.camel.Message;
 import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.processor.ConvertBodyProcessor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.support.ExchangeHelper;
 import org.apache.camel.support.service.ServiceHelper;
 import org.apache.camel.support.service.ServiceSupport;
@@ -49,7 +51,8 @@ public class DefaultFluentProducerTemplate extends ServiceSupport implements Flu
     private Consumer<ProducerTemplate> templateCustomizer;
 
     private final CamelContext context;
-    private final ClassValue<ConvertBodyProcessor> resultProcessors;
+    private final ProcessorFactory processorFactory;
+    private final ClassValue<Processor> resultProcessors;
     private Endpoint defaultEndpoint;
     private int maximumCacheSize;
     private boolean eventNotifierEnabled;
@@ -58,19 +61,27 @@ public class DefaultFluentProducerTemplate extends ServiceSupport implements Flu
 
     public DefaultFluentProducerTemplate(CamelContext context) {
         this.context = context;
+        this.processorFactory = context.adapt(ExtendedCamelContext.class).getProcessorFactory();
         this.eventNotifierEnabled = true;
-        this.resultProcessors = new ClassValue<ConvertBodyProcessor>() {
+        this.resultProcessors = new ClassValue<Processor>() {
             @Override
-            protected ConvertBodyProcessor computeValue(Class<?> type) {
-                return new ConvertBodyProcessor(type);
+            protected Processor computeValue(Class<?> type) {
+                Map<String, Object> args = new HashMap<>();
+                args.put("type", type);
+                try {
+                    return processorFactory.createProcessor(context, "ConvertBodyProcessor", args);
+                } catch (Exception e) {
+                    throw RuntimeCamelException.wrapRuntimeException(e);
+                }
             }
         };
     }
 
-    private DefaultFluentProducerTemplate(CamelContext context, ClassValue<ConvertBodyProcessor> resultProcessors,
+    private DefaultFluentProducerTemplate(CamelContext context, ClassValue<Processor> resultProcessors,
                                           Endpoint defaultEndpoint, int maximumCacheSize, boolean eventNotifierEnabled,
                                           ProducerTemplate template) {
         this.context = context;
+        this.processorFactory = context.adapt(ExtendedCamelContext.class).getProcessorFactory();
         this.resultProcessors = resultProcessors;
         this.defaultEndpoint = defaultEndpoint;
         this.maximumCacheSize = maximumCacheSize;
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInterceptSendToEndpoint.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInterceptSendToEndpoint.java
index 9cf1640..dc4b09e 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInterceptSendToEndpoint.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultInterceptSendToEndpoint.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.impl.engine;
 
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.AsyncProducer;
@@ -24,6 +25,7 @@ import org.apache.camel.Consumer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.PollingConsumer;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
@@ -36,6 +38,7 @@ import org.apache.camel.support.service.ServiceHelper;
  */
 public class DefaultInterceptSendToEndpoint implements InterceptSendToEndpoint, ShutdownableService {
 
+    private final CamelContext camelContext;
     private final Endpoint delegate;
     private Processor before;
     private Processor after;
@@ -48,6 +51,7 @@ public class DefaultInterceptSendToEndpoint implements InterceptSendToEndpoint,
      * @param skip        <tt>true</tt> to skip sending after the detour to the original endpoint
      */
     public DefaultInterceptSendToEndpoint(final Endpoint destination, boolean skip) {
+        this.camelContext = destination.getCamelContext();
         this.delegate = destination;
         this.skip = skip;
     }
@@ -122,7 +126,14 @@ public class DefaultInterceptSendToEndpoint implements InterceptSendToEndpoint,
     @Override
     public AsyncProducer createAsyncProducer() throws Exception {
         AsyncProducer producer = delegate.createAsyncProducer();
-        return new InterceptSendToEndpointProcessor(this, delegate, producer, skip);
+
+        Map<String, Object> args = new HashMap<>();
+        args.put("endpoint", this);
+        args.put("delegate", delegate);
+        args.put("producer", producer);
+        args.put("skip", skip);
+        return (AsyncProducer) camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory()
+                .createProcessor(camelContext, "InterceptSendToEndpointProcessor", args);
     }
 
     @Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerCache.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerCache.java
index 3e2571f..aad974a 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerCache.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerCache.java
@@ -30,10 +30,10 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.FailedToCreateProducerException;
 import org.apache.camel.Processor;
 import org.apache.camel.Producer;
+import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StatefulService;
-import org.apache.camel.processor.CamelInternalProcessor;
-import org.apache.camel.processor.SharedCamelInternalProcessor;
 import org.apache.camel.spi.EndpointUtilizationStatistics;
+import org.apache.camel.spi.InternalProcessor;
 import org.apache.camel.spi.ProducerCache;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.support.EventHelper;
@@ -54,7 +54,7 @@ public class DefaultProducerCache extends ServiceSupport implements ProducerCach
     private final ExtendedCamelContext camelContext;
     private final ProducerServicePool producers;
     private final Object source;
-    private final SharedCamelInternalProcessor internalProcessor;
+    private final InternalProcessor internalProcessor;
 
     private EndpointUtilizationStatistics statistics;
     private boolean eventNotifierEnabled = true;
@@ -81,8 +81,17 @@ public class DefaultProducerCache extends ServiceSupport implements ProducerCach
         }
 
         // internal processor used for sending
-        internalProcessor = new SharedCamelInternalProcessor(
-                camelContext, new CamelInternalProcessor.UnitOfWorkProcessorAdvice(null, camelContext));
+        try {
+            internalProcessor = (InternalProcessor) this.camelContext.getProcessorFactory().createProcessor(this.camelContext,
+                    "SharedCamelInternalProcessor", null);
+        } catch (Exception e) {
+            throw RuntimeCamelException.wrapRuntimeException(e);
+        }
+        if (internalProcessor == null) {
+            throw new IllegalStateException(
+                    "Cannot create SharedCamelInternalProcessor from ProcessorFactory." +
+                                            "If you have a custom ProcessorFactory then extend DefaultProcessorFactory and let the default able to create SharedCamelInternalProcessor");
+        }
     }
 
     protected ProducerServicePool createServicePool(CamelContext camelContext, int cacheSize) {
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
index cfee451..0cf510d 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProducerTemplate.java
@@ -16,6 +16,7 @@
  */
 package org.apache.camel.impl.engine;
 
+import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
@@ -29,11 +30,13 @@ import org.apache.camel.CamelExecutionException;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExchangePattern;
+import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Message;
 import org.apache.camel.NoSuchEndpointException;
 import org.apache.camel.Processor;
 import org.apache.camel.ProducerTemplate;
-import org.apache.camel.processor.ConvertBodyProcessor;
+import org.apache.camel.RuntimeCamelException;
+import org.apache.camel.spi.ProcessorFactory;
 import org.apache.camel.spi.ProducerCache;
 import org.apache.camel.spi.Synchronization;
 import org.apache.camel.support.CamelContextHelper;
@@ -49,6 +52,7 @@ import org.apache.camel.util.concurrent.SynchronousExecutorService;
  */
 public class DefaultProducerTemplate extends ServiceSupport implements ProducerTemplate {
     private final CamelContext camelContext;
+    private final ProcessorFactory processorFactory;
     private volatile ProducerCache producerCache;
     private volatile ExecutorService executor;
     private Endpoint defaultEndpoint;
@@ -58,10 +62,12 @@ public class DefaultProducerTemplate extends ServiceSupport implements ProducerT
 
     public DefaultProducerTemplate(CamelContext camelContext) {
         this.camelContext = camelContext;
+        this.processorFactory = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory();
     }
 
     public DefaultProducerTemplate(CamelContext camelContext, ExecutorService executor) {
         this.camelContext = camelContext;
+        this.processorFactory = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory();
         this.executor = executor;
     }
 
@@ -554,7 +560,13 @@ public class DefaultProducerTemplate extends ServiceSupport implements ProducerT
     }
 
     protected Processor createConvertBodyProcessor(final Class<?> type) {
-        return new ConvertBodyProcessor(type);
+        Map<String, Object> args = new HashMap<>();
+        args.put("type", type);
+        try {
+            return processorFactory.createProcessor(camelContext, "ConvertBodyProcessor", args);
+        } catch (Exception e) {
+            throw RuntimeCamelException.wrapRuntimeException(e);
+        }
     }
 
     protected Function<Exchange, Exchange> createCompletionFunction(Synchronization onCompletion) {
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/RouteService.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/RouteService.java
index 9beabf3..cb9aab0 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/RouteService.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/RouteService.java
@@ -39,7 +39,7 @@ import org.apache.camel.Route;
 import org.apache.camel.RouteAware;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.Service;
-import org.apache.camel.processor.ErrorHandler;
+import org.apache.camel.spi.ErrorHandler;
 import org.apache.camel.spi.LifecycleStrategy;
 import org.apache.camel.spi.RouteIdAware;
 import org.apache.camel.spi.RoutePolicy;
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
index f7e1f05..f2a9da4 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SimpleCamelContext.java
@@ -16,11 +16,8 @@
  */
 package org.apache.camel.impl.engine;
 
-import java.util.Collection;
 import java.util.Map;
-import java.util.concurrent.ExecutorService;
 
-import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Processor;
@@ -29,7 +26,7 @@ import org.apache.camel.TypeConverter;
 import org.apache.camel.catalog.RuntimeCamelCatalog;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.impl.converter.DefaultTypeConverter;
-import org.apache.camel.processor.MulticastProcessor;
+import org.apache.camel.spi.AnnotationBasedProcessorFactory;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.BeanProcessorFactory;
@@ -41,6 +38,7 @@ import org.apache.camel.spi.ComponentNameResolver;
 import org.apache.camel.spi.ComponentResolver;
 import org.apache.camel.spi.ConfigurerResolver;
 import org.apache.camel.spi.DataFormatResolver;
+import org.apache.camel.spi.DeferServiceFactory;
 import org.apache.camel.spi.EndpointRegistry;
 import org.apache.camel.spi.ExecutorServiceManager;
 import org.apache.camel.spi.FactoryFinder;
@@ -198,7 +196,11 @@ public class SimpleCamelContext extends AbstractCamelContext {
 
     @Override
     protected ProcessorFactory createProcessorFactory() {
-        return new DefaultProcessorFactory();
+        return new BaseServiceResolver<>(ProcessorFactory.FACTORY, ProcessorFactory.class)
+                .resolve(getCamelContextReference())
+                .orElseThrow(() -> new IllegalArgumentException(
+                        "Cannot find ProcessorFactory on classpath. "
+                                                                + "Add camel-core-processor to classpath."));
     }
 
     @Override
@@ -301,6 +303,24 @@ public class SimpleCamelContext extends AbstractCamelContext {
     }
 
     @Override
+    protected AnnotationBasedProcessorFactory createAnnotationBasedProcessorFactory() {
+        return new BaseServiceResolver<>(AnnotationBasedProcessorFactory.FACTORY, AnnotationBasedProcessorFactory.class)
+                .resolve(getCamelContextReference())
+                .orElseThrow(() -> new IllegalArgumentException(
+                        "Cannot find AnnotationBasedProcessorFactory on classpath. "
+                                                                + "Add camel-core-processor to classpath."));
+    }
+
+    @Override
+    protected DeferServiceFactory createDeferServiceFactory() {
+        return new BaseServiceResolver<>(DeferServiceFactory.FACTORY, DeferServiceFactory.class)
+                .resolve(getCamelContextReference())
+                .orElseThrow(() -> new IllegalArgumentException(
+                        "Cannot find DeferServiceFactory on classpath. "
+                                                                + "Add camel-core-processor to classpath."));
+    }
+
+    @Override
     protected BeanProcessorFactory createBeanProcessorFactory() {
         return new BaseServiceResolver<>(BeanProcessorFactory.FACTORY, BeanProcessorFactory.class)
                 .resolve(getCamelContextReference())
@@ -403,14 +423,6 @@ public class SimpleCamelContext extends AbstractCamelContext {
     }
 
     @Override
-    public AsyncProcessor createMulticast(
-            Collection<Processor> processors, ExecutorService executor, boolean shutdownExecutorService) {
-        return new MulticastProcessor(
-                getCamelContextReference(), null, processors, null, true, executor, shutdownExecutorService, false, false, 0,
-                null, false, false);
-    }
-
-    @Override
     protected ValidatorRegistry<ValidatorKey> createValidatorRegistry() {
         return new DefaultValidatorRegistry(getCamelContextReference());
     }
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SubscribeMethodProcessor.java b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SubscribeMethodProcessor.java
index c8d8492..8f3161e 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/SubscribeMethodProcessor.java
+++ b/core/camel-base/src/main/java/org/apache/camel/impl/engine/SubscribeMethodProcessor.java
@@ -18,6 +18,7 @@ package org.apache.camel.impl.engine;
 
 import java.lang.reflect.Method;
 import java.util.ArrayList;
+import java.util.HashMap;
 import java.util.LinkedHashMap;
 import java.util.List;
 import java.util.Map;
@@ -30,7 +31,6 @@ import org.apache.camel.ExtendedCamelContext;
 import org.apache.camel.Navigate;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
-import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.spi.Language;
 import org.apache.camel.support.AsyncProcessorSupport;
 import org.apache.camel.support.builder.PredicateBuilder;
@@ -58,17 +58,20 @@ public final class SubscribeMethodProcessor extends AsyncProcessorSupport implem
     public void addMethod(final Object pojo, final Method method, final Endpoint endpoint, String predicate) throws Exception {
         Processor answer = endpoint.getCamelContext().adapt(ExtendedCamelContext.class)
                 .getBeanProcessorFactory().createBeanProcessor(endpoint.getCamelContext(), pojo, method);
-        // must ensure the consumer is being executed in an unit of work so synchronization callbacks etc is invoked
-        CamelInternalProcessor internal = new CamelInternalProcessor(endpoint.getCamelContext(), answer);
-        internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(null, endpoint.getCamelContext()));
 
+        // must ensure the consumer is being executed in an unit of work so synchronization callbacks etc is invoked
+        Map<String, Object> args = new HashMap<>();
+        args.put("processor", answer);
+        args.put("route", null);
+        answer = endpoint.getCamelContext().adapt(ExtendedCamelContext.class).getProcessorFactory()
+                .createProcessor(endpoint.getCamelContext(), "UnitOfWorkProcessorAdvice", args);
         Predicate p;
         if (ObjectHelper.isEmpty(predicate)) {
             p = PredicateBuilder.constant(true);
         } else {
             p = simple.createPredicate(predicate);
         }
-        methods.put(internal, p);
+        methods.put((AsyncProcessor) answer, p);
     }
 
     @Override
diff --git a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
index 9464b40..490fe14 100644
--- a/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
+++ b/core/camel-core-engine/src/generated/java/org/apache/camel/impl/ExtendedCamelContextConfigurer.java
@@ -19,6 +19,7 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
     static {
         Map<String, Object> map = new CaseInsensitiveMap();
         map.put("AllowUseOriginalMessage", java.lang.Boolean.class);
+        map.put("AnnotationBasedProcessorFactory", org.apache.camel.spi.AnnotationBasedProcessorFactory.class);
         map.put("ApplicationContextClassLoader", java.lang.ClassLoader.class);
         map.put("AsyncProcessorAwaitManager", org.apache.camel.spi.AsyncProcessorAwaitManager.class);
         map.put("AutoStartup", java.lang.Boolean.class);
@@ -32,6 +33,7 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         map.put("DataFormatResolver", org.apache.camel.spi.DataFormatResolver.class);
         map.put("Debugger", org.apache.camel.spi.Debugger.class);
         map.put("Debugging", java.lang.Boolean.class);
+        map.put("DeferServiceFactory", org.apache.camel.spi.DeferServiceFactory.class);
         map.put("Delayer", java.lang.Long.class);
         map.put("ErrorHandlerFactory", org.apache.camel.ErrorHandlerFactory.class);
         map.put("EventNotificationApplicable", boolean.class);
@@ -97,6 +99,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowuseoriginalmessage":
         case "AllowUseOriginalMessage": target.setAllowUseOriginalMessage(property(camelContext, java.lang.Boolean.class, value)); return true;
+        case "annotationbasedprocessorfactory":
+        case "AnnotationBasedProcessorFactory": target.setAnnotationBasedProcessorFactory(property(camelContext, org.apache.camel.spi.AnnotationBasedProcessorFactory.class, value)); return true;
         case "applicationcontextclassloader":
         case "ApplicationContextClassLoader": target.setApplicationContextClassLoader(property(camelContext, java.lang.ClassLoader.class, value)); return true;
         case "asyncprocessorawaitmanager":
@@ -123,6 +127,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "Debugger": target.setDebugger(property(camelContext, org.apache.camel.spi.Debugger.class, value)); return true;
         case "debugging":
         case "Debugging": target.setDebugging(property(camelContext, java.lang.Boolean.class, value)); return true;
+        case "deferservicefactory":
+        case "DeferServiceFactory": target.setDeferServiceFactory(property(camelContext, org.apache.camel.spi.DeferServiceFactory.class, value)); return true;
         case "delayer":
         case "Delayer": target.setDelayer(property(camelContext, java.lang.Long.class, value)); return true;
         case "errorhandlerfactory":
@@ -250,6 +256,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         switch (ignoreCase ? name.toLowerCase() : name) {
         case "allowuseoriginalmessage":
         case "AllowUseOriginalMessage": return target.isAllowUseOriginalMessage();
+        case "annotationbasedprocessorfactory":
+        case "AnnotationBasedProcessorFactory": return target.getAnnotationBasedProcessorFactory();
         case "applicationcontextclassloader":
         case "ApplicationContextClassLoader": return target.getApplicationContextClassLoader();
         case "asyncprocessorawaitmanager":
@@ -276,6 +284,8 @@ public class ExtendedCamelContextConfigurer extends org.apache.camel.support.com
         case "Debugger": return target.getDebugger();
         case "debugging":
         case "Debugging": return target.isDebugging();
+        case "deferservicefactory":
+        case "DeferServiceFactory": return target.getDeferServiceFactory();
         case "delayer":
         case "Delayer": return target.getDelayer();
         case "errorhandlerfactory":
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
index bbb1d35..cb01e8c 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightCamelContext.java
@@ -22,11 +22,9 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.function.Function;
 
-import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CatalogCamelContext;
 import org.apache.camel.Component;
@@ -1130,12 +1128,6 @@ public class LightweightCamelContext implements ExtendedCamelContext, CatalogCam
     }
 
     @Override
-    public AsyncProcessor createMulticast(
-            Collection<Processor> processors, ExecutorService executor, boolean shutdownExecutorService) {
-        return getExtendedCamelContext().createMulticast(processors, executor, shutdownExecutorService);
-    }
-
-    @Override
     public ErrorHandlerFactory getErrorHandlerFactory() {
         return getExtendedCamelContext().getErrorHandlerFactory();
     }
@@ -1281,6 +1273,11 @@ public class LightweightCamelContext implements ExtendedCamelContext, CatalogCam
     }
 
     @Override
+    public void setDeferServiceFactory(DeferServiceFactory deferServiceFactory) {
+        getExtendedCamelContext().setDeferServiceFactory(deferServiceFactory);
+    }
+
+    @Override
     public UnitOfWorkFactory getUnitOfWorkFactory() {
         return getExtendedCamelContext().getUnitOfWorkFactory();
     }
@@ -1296,6 +1293,11 @@ public class LightweightCamelContext implements ExtendedCamelContext, CatalogCam
     }
 
     @Override
+    public void setAnnotationBasedProcessorFactory(AnnotationBasedProcessorFactory annotationBasedProcessorFactory) {
+        getExtendedCamelContext().setAnnotationBasedProcessorFactory(annotationBasedProcessorFactory);
+    }
+
+    @Override
     public BeanProxyFactory getBeanProxyFactory() {
         return getExtendedCamelContext().getBeanProxyFactory();
     }
diff --git a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
index 811d895..6c11515 100644
--- a/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
+++ b/core/camel-core-engine/src/main/java/org/apache/camel/impl/lw/LightweightRuntimeCamelContext.java
@@ -25,12 +25,10 @@ import java.util.Date;
 import java.util.List;
 import java.util.Map;
 import java.util.Set;
-import java.util.concurrent.ExecutorService;
 import java.util.concurrent.ScheduledExecutorService;
 import java.util.concurrent.TimeUnit;
 import java.util.stream.Collectors;
 
-import org.apache.camel.AsyncProcessor;
 import org.apache.camel.CamelContext;
 import org.apache.camel.CamelContextAware;
 import org.apache.camel.CatalogCamelContext;
@@ -1312,12 +1310,6 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat
     }
 
     @Override
-    public AsyncProcessor createMulticast(
-            Collection<Processor> processors, ExecutorService executor, boolean shutdownExecutorService) {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
     public ErrorHandlerFactory getErrorHandlerFactory() {
         throw new UnsupportedOperationException();
     }
@@ -1407,6 +1399,11 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat
     }
 
     @Override
+    public void setDeferServiceFactory(DeferServiceFactory deferServiceFactory) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public UnitOfWorkFactory getUnitOfWorkFactory() {
         return unitOfWorkFactory;
     }
@@ -1422,6 +1419,11 @@ public class LightweightRuntimeCamelContext implements ExtendedCamelContext, Cat
     }
 
     @Override
+    public void setAnnotationBasedProcessorFactory(AnnotationBasedProcessorFactory annotationBasedProcessorFactory) {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public BeanProxyFactory getBeanProxyFactory() {
         throw new UnsupportedOperationException();
     }
diff --git a/core/camel-core-model/pom.xml b/core/camel-core-model/pom.xml
index 5fcfdcb..cf5c4f1 100644
--- a/core/camel-core-model/pom.xml
+++ b/core/camel-core-model/pom.xml
@@ -45,12 +45,17 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-api</artifactId>
         </dependency>
+        <!-- TODO: Remove this dependency -->
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-base</artifactId>
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-processor</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
             <artifactId>camel-support</artifactId>
         </dependency>
         <dependency>
diff --git a/core/camel-core-reifier/pom.xml b/core/camel-core-processor/pom.xml
similarity index 90%
copy from core/camel-core-reifier/pom.xml
copy to core/camel-core-processor/pom.xml
index 248178f..f982de3 100644
--- a/core/camel-core-reifier/pom.xml
+++ b/core/camel-core-processor/pom.xml
@@ -28,11 +28,11 @@
         <relativePath>..</relativePath>
     </parent>
 
-    <artifactId>camel-core-reifier</artifactId>
+    <artifactId>camel-core-processor</artifactId>
     <packaging>jar</packaging>
 
-    <name>Camel :: Core Reifier</name>
-    <description>Camel model to processor reifiers</description>
+    <name>Camel :: Core Processor</name>
+    <description>Camel core processors</description>
 
     <properties>
         <firstVersion>3.7.0</firstVersion>
@@ -46,6 +46,7 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-api</artifactId>
         </dependency>
+        <!-- TODO: Remove this dependency -->
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-base</artifactId>
@@ -56,10 +57,6 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
-            <artifactId>camel-core-model</artifactId>
-        </dependency>
-        <dependency>
-            <groupId>org.apache.camel</groupId>
             <artifactId>camel-util</artifactId>
         </dependency>
 
diff --git a/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/annotation-processor-factory b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/annotation-processor-factory
new file mode 100644
index 0000000..896b4b0
--- /dev/null
+++ b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/annotation-processor-factory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.processor.DefaultAnnotationBasedProcessorFactory
diff --git a/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/defer-service-factory b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/defer-service-factory
new file mode 100644
index 0000000..71db7e9
--- /dev/null
+++ b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/defer-service-factory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.processor.DefaultDeferServiceFactory
diff --git a/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/processor-factory b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/processor-factory
new file mode 100644
index 0000000..66e956f
--- /dev/null
+++ b/core/camel-core-processor/src/generated/resources/META-INF/services/org/apache/camel/processor-factory
@@ -0,0 +1,2 @@
+# Generated by camel build tools - do NOT edit this file!
+class=org.apache.camel.processor.DefaultProcessorFactory
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/CatchProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/CatchProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/CatchProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ChoiceProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ChoiceProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ClaimCheckAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ClaimCheckAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ClaimCheckAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ClaimCheckAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ClaimCheckProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ClaimCheckProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ClaimCheckProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ClaimCheckProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ContractAdvice.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ContractAdvice.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ContractAdvice.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ConvertBodyProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAnnotationBasedProcessorFactory.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultAnnotationBasedProcessorFactory.java
similarity index 96%
rename from core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAnnotationBasedProcessorFactory.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultAnnotationBasedProcessorFactory.java
index ddcaf93..29b8cb1 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultAnnotationBasedProcessorFactory.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultAnnotationBasedProcessorFactory.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.engine;
+package org.apache.camel.processor;
 
 import java.util.concurrent.ExecutorService;
 
@@ -26,9 +26,11 @@ import org.apache.camel.Processor;
 import org.apache.camel.RecipientList;
 import org.apache.camel.RoutingSlip;
 import org.apache.camel.spi.AnnotationBasedProcessorFactory;
+import org.apache.camel.spi.annotations.JdkService;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.ObjectHelper;
 
+@JdkService(AnnotationBasedProcessorFactory.FACTORY)
 public final class DefaultAnnotationBasedProcessorFactory implements AnnotationBasedProcessorFactory {
 
     @Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultDeferServiceFactory.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultDeferServiceFactory.java
similarity index 87%
rename from core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultDeferServiceFactory.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultDeferServiceFactory.java
index 1f28555..6f573c0 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultDeferServiceFactory.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultDeferServiceFactory.java
@@ -14,14 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.engine;
+package org.apache.camel.processor;
 
 import org.apache.camel.Endpoint;
 import org.apache.camel.Producer;
-import org.apache.camel.processor.EventNotifierProducer;
-import org.apache.camel.processor.UnitOfWorkProducer;
+import org.apache.camel.impl.engine.DeferProducer;
 import org.apache.camel.spi.DeferServiceFactory;
+import org.apache.camel.spi.annotations.JdkService;
 
+@JdkService(DefaultDeferServiceFactory.FACTORY)
 public final class DefaultDeferServiceFactory implements DeferServiceFactory {
 
     @Override
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProcessorFactory.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
similarity index 66%
rename from core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProcessorFactory.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
index b08ebb5..cb4b71e 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/DefaultProcessorFactory.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
@@ -14,11 +14,15 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.engine;
+package org.apache.camel.processor;
 
+import java.util.Collection;
 import java.util.Map;
+import java.util.concurrent.ExecutorService;
 
+import org.apache.camel.AsyncProducer;
 import org.apache.camel.CamelContext;
+import org.apache.camel.Endpoint;
 import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.ExtendedCamelContext;
@@ -27,10 +31,11 @@ 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.impl.engine.CamelInternalProcessor;
 import org.apache.camel.spi.FactoryFinder;
+import org.apache.camel.spi.InterceptSendToEndpoint;
 import org.apache.camel.spi.ProcessorFactory;
+import org.apache.camel.spi.annotations.JdkService;
 
 /**
  * Default {@link ProcessorFactory} that supports using 3rd party Camel components to implement the EIP
@@ -44,6 +49,7 @@ import org.apache.camel.spi.ProcessorFactory;
  * The Hystrix EIP is such an example where the circuit breaker EIP (CircuitBreakerDefinition) is implemented in the
  * <tt>camel-hystrix</tt> component.
  */
+@JdkService(ProcessorFactory.FACTORY)
 public class DefaultProcessorFactory implements ProcessorFactory {
 
     public static final String RESOURCE_PATH = "META-INF/services/org/apache/camel/model/";
@@ -82,6 +88,7 @@ public class DefaultProcessorFactory implements ProcessorFactory {
     }
 
     @Override
+    @SuppressWarnings("unchecked")
     public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args)
             throws Exception {
         if ("SendDynamicProcessor".equals(definitionName)) {
@@ -94,9 +101,34 @@ public class DefaultProcessorFactory implements ProcessorFactory {
                 processor.setPattern(exchangePattern);
             }
             return processor;
+        } else if ("MulticastProcessor".equals(definitionName)) {
+            Collection<Processor> processors = (Collection<Processor>) args.get("processors");
+            ExecutorService executor = (ExecutorService) args.get("executor");
+            boolean shutdownExecutorService = (boolean) args.get("shutdownExecutorService");
+            return new MulticastProcessor(
+                    camelContext, null, processors, null, true, executor, shutdownExecutorService, false, false, 0,
+                    null, false, false);
+        } else if ("ConvertBodyProcessor".equals(definitionName)) {
+            Class<?> type = (Class<?>) args.get("type");
+            return new ConvertBodyProcessor(type);
+        } else if ("UnitOfWorkProcessorAdvice".equals(definitionName)) {
+            Processor processor = (Processor) args.get("processor");
+            Route route = (Route) args.get("route");
+            CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, processor);
+            internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
+            return internal;
         } else if ("UnitOfWorkProducer".equals(definitionName)) {
             Producer producer = (Producer) args.get("producer");
             return new UnitOfWorkProducer(producer);
+        } else if ("InterceptSendToEndpointProcessor".equals(definitionName)) {
+            InterceptSendToEndpoint endpoint = (InterceptSendToEndpoint) args.get("endpoint");
+            Endpoint delegate = (Endpoint) args.get("delegate");
+            AsyncProducer producer = (AsyncProducer) args.get("producer");
+            boolean skip = (boolean) args.get("skip");
+            return new InterceptSendToEndpointProcessor(endpoint, delegate, producer, skip);
+        } else if ("SharedCamelInternalProcessor".equals(definitionName)) {
+            return new SharedCamelInternalProcessor(
+                    camelContext, new CamelInternalProcessor.UnitOfWorkProcessorAdvice(null, camelContext));
         }
 
         return null;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/DelayProcessorSupport.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/Delayer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Delayer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/Delayer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/Delayer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/DynamicRouter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DynamicRouter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/DynamicRouter.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/DynamicRouter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/Enricher.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/Enricher.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/Enricher.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/EvaluateExpressionProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/EvaluateExpressionProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/EvaluateExpressionProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/EvaluateExpressionProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/EventNotifierProducer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/EventNotifierProducer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/EventNotifierProducer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/EventNotifierProducer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ExchangePatternProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ExchangePatternProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ExchangePatternProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ExchangePatternProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
similarity index 97%
rename from core/camel-base/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
index 6055508..3e2f165 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/FatalFallbackErrorHandler.java
@@ -23,6 +23,7 @@ import org.apache.camel.AsyncCallback;
 import org.apache.camel.Exchange;
 import org.apache.camel.ExtendedExchange;
 import org.apache.camel.Processor;
+import org.apache.camel.spi.ErrorHandler;
 import org.apache.camel.support.processor.DelegateAsyncProcessor;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -30,8 +31,8 @@ import org.slf4j.LoggerFactory;
 import static org.apache.camel.support.builder.ExpressionBuilder.routeIdExpression;
 
 /**
- * An {@link org.apache.camel.processor.ErrorHandler} used as a safe fallback when processing by other error handlers
- * such as the {@link org.apache.camel.model.OnExceptionDefinition}.
+ * An {@link ErrorHandler} used as a safe fallback when processing by other error handlers such as the
+ * {@link org.apache.camel.model.OnExceptionDefinition}.
  * <p/>
  * This error handler is used as a fail-safe to ensure that error handling does not run in endless recursive looping
  * which potentially can happen if a new exception is thrown while error handling a previous exception which then cause
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/FilterProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/FilterProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/FilterProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/FilterProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/FinallyProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/FinallyProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/FinallyProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/FinallyProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/InterceptEndpointProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/InterceptEndpointProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/InterceptEndpointProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/InterceptEndpointProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/impl/engine/InterceptSendToEndpointProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/InterceptSendToEndpointProcessor.java
similarity index 94%
rename from core/camel-base/src/main/java/org/apache/camel/impl/engine/InterceptSendToEndpointProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/InterceptSendToEndpointProcessor.java
index 0d8821e..ac5a335 100644
--- a/core/camel-base/src/main/java/org/apache/camel/impl/engine/InterceptSendToEndpointProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/InterceptSendToEndpointProcessor.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.impl.engine;
+package org.apache.camel.processor;
 
 import java.util.Arrays;
 
@@ -23,7 +23,8 @@ import org.apache.camel.AsyncProcessor;
 import org.apache.camel.AsyncProducer;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
-import org.apache.camel.processor.Pipeline;
+import org.apache.camel.impl.engine.DefaultInterceptSendToEndpoint;
+import org.apache.camel.spi.InterceptSendToEndpoint;
 import org.apache.camel.support.AsyncProcessorConverterHelper;
 import org.apache.camel.support.AsyncProcessorSupport;
 import org.apache.camel.support.DefaultAsyncProducer;
@@ -41,12 +42,12 @@ public class InterceptSendToEndpointProcessor extends DefaultAsyncProducer {
 
     private static final Logger LOG = LoggerFactory.getLogger(InterceptSendToEndpointProcessor.class);
 
-    private final DefaultInterceptSendToEndpoint endpoint;
+    private final InterceptSendToEndpoint endpoint;
     private final Endpoint delegate;
     private final AsyncProducer producer;
     private final boolean skip;
 
-    public InterceptSendToEndpointProcessor(DefaultInterceptSendToEndpoint endpoint, Endpoint delegate, AsyncProducer producer,
+    public InterceptSendToEndpointProcessor(InterceptSendToEndpoint endpoint, Endpoint delegate, AsyncProducer producer,
                                             boolean skip) throws Exception {
         super(delegate);
         this.endpoint = endpoint;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/LogProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/LogProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/LogProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/LogProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/LoopProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/LoopProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/LoopProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/LoopProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/MulticastProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
similarity index 99%
rename from core/camel-base/src/main/java/org/apache/camel/processor/MulticastProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
index 0aa69ae..33abd8e 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/MulticastProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/MulticastProcessor.java
@@ -51,6 +51,7 @@ import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.StreamCache;
 import org.apache.camel.Traceable;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.spi.IdAware;
 import org.apache.camel.spi.ReactiveExecutor;
 import org.apache.camel.spi.RouteIdAware;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/OnCompletionProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/Pipeline.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Pipeline.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/Pipeline.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/Pipeline.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/PipelineHelper.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PipelineHelper.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/PipelineHelper.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/PipelineHelper.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/PollEnricher.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/PollEnricher.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/PollEnricher.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ProcessorExchangePair.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ProcessorExchangePair.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ProcessorExchangePair.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ProcessorExchangePair.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RecipientList.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RecipientList.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientList.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RecipientListProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RecipientListProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RemoveHeaderProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RemoveHeaderProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RemoveHeaderProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RemoveHeaderProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RemoveHeadersProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RemoveHeadersProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RemoveHeadersProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RemoveHeadersProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RemovePropertiesProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RemovePropertiesProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RemovePropertiesProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RemovePropertiesProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RemovePropertyProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RemovePropertyProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RemovePropertyProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RemovePropertyProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/Resequencer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Resequencer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/Resequencer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/Resequencer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RestBindingAdvice.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RestBindingAdvice.java
similarity index 99%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RestBindingAdvice.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RestBindingAdvice.java
index 442ccc5..e463385 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/RestBindingAdvice.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RestBindingAdvice.java
@@ -27,6 +27,7 @@ import org.apache.camel.CamelContextAware;
 import org.apache.camel.CamelExchangeException;
 import org.apache.camel.Exchange;
 import org.apache.camel.Message;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.spi.CamelInternalProcessorAdvice;
 import org.apache.camel.spi.DataFormat;
 import org.apache.camel.spi.DataType;
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RollbackProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RollbackProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RollbackProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RollbackProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/RoutingSlip.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/RoutingSlip.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/RoutingSlip.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/RoutingSlip.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SamplingThrottler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SamplingThrottler.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SamplingThrottler.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SamplingThrottler.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ScriptProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ScriptProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ScriptProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ScriptProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SendDynamicAwareResolver.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendDynamicAwareResolver.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SendDynamicAwareResolver.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SendDynamicAwareResolver.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SendDynamicProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SendProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SendProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SendProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SendProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SetBodyProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SetBodyProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SetBodyProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SetBodyProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SetHeaderProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SetPropertyProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SharedCamelInternalProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SharedCamelInternalProcessor.java
similarity index 99%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SharedCamelInternalProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SharedCamelInternalProcessor.java
index a2c7438..bf3a84c 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/SharedCamelInternalProcessor.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SharedCamelInternalProcessor.java
@@ -31,6 +31,7 @@ import org.apache.camel.Processor;
 import org.apache.camel.Service;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.CamelInternalProcessorAdvice;
+import org.apache.camel.spi.InternalProcessor;
 import org.apache.camel.spi.ReactiveExecutor;
 import org.apache.camel.spi.RoutePolicy;
 import org.apache.camel.spi.ShutdownStrategy;
@@ -69,7 +70,7 @@ import org.slf4j.LoggerFactory;
  * <p/>
  * The added advices can implement {@link Ordered} to control in which order the advices are executed.
  */
-public class SharedCamelInternalProcessor {
+public class SharedCamelInternalProcessor implements InternalProcessor {
 
     private static final Logger LOG = LoggerFactory.getLogger(SharedCamelInternalProcessor.class);
     private static final Object[] EMPTY_STATES = new Object[0];
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/SortProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/SortProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/SortProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/SortProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/Splitter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/Splitter.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/Splitter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/StepProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/StepProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/StepProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/StepProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/StopProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/StopProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/StopProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/StopProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/StreamResequencer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/StreamResequencer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/StreamResequencer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/StreamResequencer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ThreadsProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ThreadsProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ThreadsProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ThreadsProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/Throttler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/Throttler.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/Throttler.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/Throttler.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ThrottlerRejectedExecutionException.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ThrottlerRejectedExecutionException.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ThrottlerRejectedExecutionException.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ThrottlerRejectedExecutionException.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/ThrowExceptionProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/ThrowExceptionProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/ThrowExceptionProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/ThrowExceptionProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/TransformProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/TransformProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/TransformProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/TransformProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/TryProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/TryProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/TryProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/TryProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java
similarity index 97%
rename from core/camel-base/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java
index 989b05d..d01c9c9 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/UnitOfWorkProducer.java
@@ -21,6 +21,7 @@ import org.apache.camel.AsyncProcessor;
 import org.apache.camel.Endpoint;
 import org.apache.camel.Exchange;
 import org.apache.camel.Producer;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.support.DefaultAsyncProducer;
 import org.apache.camel.support.service.ServiceHelper;
 
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/WireTapProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/WireTapProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/WireTapProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/WireTapProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/WrapProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/WrapProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/WrapProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/WrapProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AbstractListAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AbstractListAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AbstractListAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AbstractListAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregateController.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateController.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregateController.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateController.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessorStatistics.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessorStatistics.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessorStatistics.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregateProcessorStatistics.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyBeanAdapter.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyBeanAdapter.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyBeanAdapter.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyBeanAdapter.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyBeanInfo.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyBeanInfo.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyBeanInfo.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyBeanInfo.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyMethodInfo.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyMethodInfo.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyMethodInfo.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyMethodInfo.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyParameterInfo.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyParameterInfo.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyParameterInfo.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/AggregationStrategyParameterInfo.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/ClosedCorrelationKeyException.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ClosedCorrelationKeyException.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/ClosedCorrelationKeyException.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ClosedCorrelationKeyException.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregateController.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregateController.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregateController.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/DefaultAggregateController.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/GroupedBodyAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/GroupedBodyAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/GroupedBodyAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/GroupedBodyAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/GroupedExchangeAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/GroupedExchangeAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/GroupedExchangeAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/GroupedExchangeAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/GroupedMessageAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/GroupedMessageAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/GroupedMessageAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/GroupedMessageAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/MemoryAggregationRepository.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/MemoryAggregationRepository.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/MemoryAggregationRepository.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/MemoryAggregationRepository.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/OptimisticLockRetryPolicy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/OptimisticLockRetryPolicy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/OptimisticLockRetryPolicy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/OptimisticLockRetryPolicy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/ShareUnitOfWorkAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/StringAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/StringAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/StringAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/StringAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/UseLatestAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/UseOriginalAggregationStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/UseOriginalAggregationStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/UseOriginalAggregationStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/UseOriginalAggregationStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/aggregate/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/aggregate/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/aggregate/package.html
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java
similarity index 98%
rename from core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java
index 5dd2f80..8692457 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/channel/DefaultChannel.java
@@ -30,12 +30,13 @@ 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.impl.debugger.BacklogDebugger;
+import org.apache.camel.impl.debugger.BacklogTracer;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.processor.WrapProcessor;
 import org.apache.camel.processor.errorhandler.RedeliveryErrorHandler;
-import org.apache.camel.processor.interceptor.BacklogDebugger;
-import org.apache.camel.processor.interceptor.BacklogTracer;
 import org.apache.camel.spi.Debugger;
+import org.apache.camel.spi.ErrorHandler;
 import org.apache.camel.spi.InterceptStrategy;
 import org.apache.camel.spi.ManagementInterceptStrategy;
 import org.apache.camel.spi.MessageHistoryFactory;
@@ -105,7 +106,7 @@ public class DefaultChannel extends CamelInternalProcessor implements Channel {
     }
 
     /**
-     * Sets the {@link org.apache.camel.processor.ErrorHandler} this Channel uses.
+     * Sets the {@link ErrorHandler} this Channel uses.
      *
      * @param errorHandler the error handler
      */
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DeadLetterChannel.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DeadLetterChannel.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DeadLetterChannel.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DeadLetterChannel.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DefaultErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DefaultErrorHandler.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DefaultErrorHandler.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DefaultErrorHandler.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DefaultExceptionPolicyStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DefaultExceptionPolicyStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/DefaultExceptionPolicyStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/DefaultExceptionPolicyStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
similarity index 98%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
index 864b6c5..172cc44 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ErrorHandlerSupport.java
@@ -21,7 +21,7 @@ import java.util.Map;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.Processor;
-import org.apache.camel.processor.ErrorHandler;
+import org.apache.camel.spi.ErrorHandler;
 import org.apache.camel.support.ChildServiceSupport;
 
 /**
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicyKey.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicyKey.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicyKey.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicyKey.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicyStrategy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicyStrategy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicyStrategy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/ExceptionPolicyStrategy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryErrorHandler.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/RedeliveryPolicy.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/errorhandler/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/errorhandler/package.html
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/IdempotentConsumer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/idempotent/IdempotentOnCompletion.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/IdempotentOnCompletion.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/idempotent/IdempotentOnCompletion.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/IdempotentOnCompletion.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/idempotent/NoMessageIdException.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/NoMessageIdException.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/idempotent/NoMessageIdException.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/NoMessageIdException.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/idempotent/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/idempotent/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/idempotent/package.html
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/DistributionRatio.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/DistributionRatio.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/DistributionRatio.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/DistributionRatio.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/ExceptionFailureStatistics.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/ExceptionFailureStatistics.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/ExceptionFailureStatistics.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/ExceptionFailureStatistics.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/FailOverLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancerConsumer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancerConsumer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancerConsumer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancerConsumer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancerSupport.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancerSupport.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancerSupport.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/LoadBalancerSupport.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/QueueLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/QueueLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/QueueLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/QueueLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/RandomLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/RoundRobinLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/RoundRobinLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/RoundRobinLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/RoundRobinLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/StickyLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/TopicLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/TopicLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/TopicLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/TopicLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/WeightedLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/WeightedLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/WeightedLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/WeightedLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/WeightedRandomLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/WeightedRandomLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/WeightedRandomLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/WeightedRandomLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/WeightedRoundRobinLoadBalancer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/WeightedRoundRobinLoadBalancer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/WeightedRoundRobinLoadBalancer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/WeightedRoundRobinLoadBalancer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/loadbalancer/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/loadbalancer/package.html
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/package.html
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/DefaultExchangeComparator.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/DefaultExchangeComparator.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/DefaultExchangeComparator.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/DefaultExchangeComparator.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/Element.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/Element.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/Element.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/Element.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/ElementComparator.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/ElementComparator.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/ElementComparator.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/ElementComparator.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/ExpressionResultComparator.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/ExpressionResultComparator.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/ExpressionResultComparator.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/ExpressionResultComparator.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/MessageRejectedException.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/MessageRejectedException.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/MessageRejectedException.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/MessageRejectedException.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/ResequencerEngine.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/Sequence.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/Sequence.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/Sequence.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/Sequence.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/SequenceElementComparator.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/SequenceElementComparator.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/SequenceElementComparator.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/SequenceElementComparator.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/SequenceSender.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/SequenceSender.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/SequenceSender.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/SequenceSender.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/Timeout.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/Timeout.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/Timeout.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/Timeout.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/TimeoutHandler.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/TimeoutHandler.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/TimeoutHandler.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/TimeoutHandler.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/resequencer/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/resequencer/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/resequencer/package.html
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/MandatorySagaProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/MandatorySagaProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/MandatorySagaProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/MandatorySagaProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/NeverSagaProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/NeverSagaProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/NeverSagaProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/NeverSagaProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/NotSupportedSagaProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/NotSupportedSagaProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/NotSupportedSagaProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/NotSupportedSagaProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/RequiredSagaProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/RequiredSagaProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/RequiredSagaProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/RequiredSagaProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/RequiresNewSagaProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/RequiresNewSagaProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/RequiresNewSagaProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/RequiresNewSagaProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/SagaCompletionMode.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SagaCompletionMode.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/SagaCompletionMode.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SagaCompletionMode.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/SagaProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SagaProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/SagaProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SagaProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/SagaProcessorBuilder.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SagaProcessorBuilder.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/SagaProcessorBuilder.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SagaProcessorBuilder.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/SagaPropagation.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SagaPropagation.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/SagaPropagation.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SagaPropagation.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/SupportsSagaProcessor.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SupportsSagaProcessor.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/SupportsSagaProcessor.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/SupportsSagaProcessor.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/saga/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/saga/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/saga/package.html
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/transformer/DataFormatTransformer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/DataFormatTransformer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/transformer/DataFormatTransformer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/DataFormatTransformer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/transformer/ProcessorTransformer.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/ProcessorTransformer.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/transformer/ProcessorTransformer.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/ProcessorTransformer.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/transformer/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/transformer/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/transformer/package.html
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/validator/ProcessorValidator.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/validator/ProcessorValidator.java
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/validator/ProcessorValidator.java
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/validator/ProcessorValidator.java
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/validator/package.html b/core/camel-core-processor/src/main/java/org/apache/camel/processor/validator/package.html
similarity index 100%
rename from core/camel-base/src/main/java/org/apache/camel/processor/validator/package.html
rename to core/camel-core-processor/src/main/java/org/apache/camel/processor/validator/package.html
diff --git a/core/camel-core-reifier/pom.xml b/core/camel-core-reifier/pom.xml
index 248178f..8d99a4f 100644
--- a/core/camel-core-reifier/pom.xml
+++ b/core/camel-core-reifier/pom.xml
@@ -46,6 +46,7 @@
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-api</artifactId>
         </dependency>
+        <!-- TODO: Remove this dependency -->
         <dependency>
             <groupId>org.apache.camel</groupId>
             <artifactId>camel-base</artifactId>
@@ -60,6 +61,10 @@
         </dependency>
         <dependency>
             <groupId>org.apache.camel</groupId>
+            <artifactId>camel-core-processor</artifactId>
+        </dependency>
+        <dependency>
+            <groupId>org.apache.camel</groupId>
             <artifactId>camel-util</artifactId>
         </dependency>
 
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/AggregateReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/AggregateReifier.java
index 82f61c4..3d7f7e7 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/AggregateReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/AggregateReifier.java
@@ -25,10 +25,10 @@ import org.apache.camel.Expression;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.model.AggregateDefinition;
 import org.apache.camel.model.OptimisticLockRetryPolicyDefinition;
 import org.apache.camel.model.ProcessorDefinition;
-import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.aggregate.AggregateController;
 import org.apache.camel.processor.aggregate.AggregateProcessor;
 import org.apache.camel.processor.aggregate.AggregationStrategyBeanAdapter;
@@ -50,6 +50,7 @@ public class AggregateReifier extends ProcessorReifier<AggregateDefinition> {
     protected AggregateProcessor createAggregator() throws Exception {
         Processor childProcessor = this.createChildProcessor(true);
 
+        // TODO: Make this via SPI or some facade
         // wrap the aggregate route in a unit of work processor
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, childProcessor);
         internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
index d8a0e8f..7866a00 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/OnCompletionReifier.java
@@ -21,10 +21,10 @@ import java.util.concurrent.ExecutorService;
 import org.apache.camel.Predicate;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 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;
 
 public class OnCompletionReifier extends ProcessorReifier<OnCompletionDefinition> {
@@ -51,6 +51,7 @@ public class OnCompletionReifier extends ProcessorReifier<OnCompletionDefinition
 
         Processor childProcessor = this.createChildProcessor(true);
 
+        // TODO: Make this via SPI or some facade
         // wrap the on completion route in a unit of work processor
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, childProcessor);
         internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResequenceReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
index 5e60c4e..d7b15de 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/ResequenceReifier.java
@@ -19,12 +19,12 @@ package org.apache.camel.reifier;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ResequenceDefinition;
 import org.apache.camel.model.config.BatchResequencerConfig;
 import org.apache.camel.model.config.ResequencerConfig;
 import org.apache.camel.model.config.StreamResequencerConfig;
-import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.Resequencer;
 import org.apache.camel.processor.StreamResequencer;
 import org.apache.camel.processor.resequencer.DefaultExchangeComparator;
@@ -72,6 +72,7 @@ public class ResequenceReifier extends ProcessorReifier<ResequenceDefinition> {
         Processor processor = this.createChildProcessor(true);
         Expression expression = createExpression(definition.getExpression());
 
+        // TODO: Make this via SPI or some facade
         // and wrap in unit of work
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, processor);
         internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
index 95a4071..6a9c25c 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/RouteReifier.java
@@ -32,10 +32,10 @@ import org.apache.camel.Route;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.ShutdownRoute;
 import org.apache.camel.ShutdownRunningTask;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.PropertyDefinition;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.ContractAdvice;
 import org.apache.camel.processor.Pipeline;
 import org.apache.camel.reifier.rest.RestBindingReifier;
@@ -236,6 +236,7 @@ public class RouteReifier extends ProcessorReifier<RouteDefinition> {
         // handles preparing the response from the exchange in regard to IN vs OUT messages etc
         Processor target = new Pipeline(camelContext, eventDrivenProcessors);
 
+        // TODO: Make this via SPI or some facade
         // 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));
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
index 6cb3e7c..c14b092 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/WireTapReifier.java
@@ -22,10 +22,10 @@ import org.apache.camel.ExchangePattern;
 import org.apache.camel.Expression;
 import org.apache.camel.Processor;
 import org.apache.camel.Route;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.SetHeaderDefinition;
 import org.apache.camel.model.WireTapDefinition;
-import org.apache.camel.processor.CamelInternalProcessor;
 import org.apache.camel.processor.SendDynamicProcessor;
 import org.apache.camel.processor.WireTapProcessor;
 
@@ -50,6 +50,7 @@ public class WireTapReifier extends ToDynamicReifier<WireTapDefinition<?>> {
         // create error handler we need to use for processing the wire tapped
         Processor target = wrapInErrorHandler(dynamicTo, true);
 
+        // TODO: Make this via SPI or some facade
         // and wrap in unit of work
         CamelInternalProcessor internal = new CamelInternalProcessor(camelContext, target);
         internal.addAdvice(new CamelInternalProcessor.UnitOfWorkProcessorAdvice(route, camelContext));
diff --git a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
index 15dd813..fb0b83b 100644
--- a/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
+++ b/core/camel-core-reifier/src/main/java/org/apache/camel/reifier/errorhandler/ErrorHandlerReifier.java
@@ -37,7 +37,6 @@ import org.apache.camel.model.errorhandler.DeadLetterChannelConfiguration;
 import org.apache.camel.model.errorhandler.DefaultErrorHandlerConfiguration;
 import org.apache.camel.model.errorhandler.ErrorHandlerRefConfiguration;
 import org.apache.camel.model.errorhandler.NoErrorHandlerConfiguraiton;
-import org.apache.camel.processor.ErrorHandler;
 import org.apache.camel.processor.errorhandler.ErrorHandlerSupport;
 import org.apache.camel.processor.errorhandler.ExceptionPolicy;
 import org.apache.camel.processor.errorhandler.ExceptionPolicy.RedeliveryOption;
@@ -45,6 +44,7 @@ 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.ErrorHandler;
 import org.apache.camel.spi.Language;
 import org.apache.camel.support.CamelContextHelper;
 import org.apache.camel.util.ObjectHelper;
diff --git a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
index 70fb816..39a96ea 100644
--- a/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
+++ b/core/camel-core-xml/src/main/java/org/apache/camel/core/xml/AbstractCamelContextFactoryBean.java
@@ -50,6 +50,7 @@ import org.apache.camel.component.properties.PropertiesLocation;
 import org.apache.camel.component.properties.PropertiesParser;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.health.HealthCheckRepository;
+import org.apache.camel.impl.debugger.BacklogTracer;
 import org.apache.camel.impl.engine.DefaultManagementStrategy;
 import org.apache.camel.impl.engine.TransformerKey;
 import org.apache.camel.impl.engine.ValidatorKey;
@@ -87,7 +88,6 @@ import org.apache.camel.model.transformer.TransformerDefinition;
 import org.apache.camel.model.transformer.TransformersDefinition;
 import org.apache.camel.model.validator.ValidatorDefinition;
 import org.apache.camel.model.validator.ValidatorsDefinition;
-import org.apache.camel.processor.interceptor.BacklogTracer;
 import org.apache.camel.reifier.transformer.TransformerReifier;
 import org.apache.camel.reifier.validator.ValidatorReifier;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
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 2e5984d..b3abc05 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
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.processor;
 
-import java.util.Map;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.ContextTestSupport;
 import org.apache.camel.ExtendedCamelContext;
@@ -80,12 +78,7 @@ public class CustomProcessorFactoryTest extends ContextTestSupport {
     // END SNIPPET: e2
 
     // START SNIPPET: e3
-    public static class MyFactory implements ProcessorFactory {
-
-        @Override
-        public Processor createChildProcessor(Route route, NamedNode definition, boolean mandatory) throws Exception {
-            return null;
-        }
+    public static class MyFactory extends DefaultProcessorFactory implements ProcessorFactory {
 
         @Override
         public Processor createProcessor(Route route, NamedNode definition) throws Exception {
@@ -100,16 +93,10 @@ public class CustomProcessorFactoryTest extends ContextTestSupport {
                 set.setExpression(new ConstantExpression("body was altered"));
             }
 
-            // return null to let the default implementation create the
+            // let the default implementation create the
             // processor, we just wanted to alter the definition
             // before the processor was created
-            return null;
-        }
-
-        @Override
-        public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args)
-                throws Exception {
-            return null;
+            return super.createProcessor(route, definition);
         }
 
     }
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionBreakpointTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionBreakpointTest.java
index 3eb8687..5947a08 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionBreakpointTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionBreakpointTest.java
@@ -24,8 +24,10 @@ import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.spi.Breakpoint;
 import org.apache.camel.spi.Condition;
+import org.apache.camel.support.BreakpointSupport;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java
index 85c661e..ac519c7 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugExceptionEventBreakpointTest.java
@@ -23,10 +23,12 @@ import org.apache.camel.ContextTestSupport;
 import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.spi.Breakpoint;
 import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.spi.Condition;
+import org.apache.camel.support.BreakpointSupport;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugSingleStepConditionTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugSingleStepConditionTest.java
index 86dff36..986c9fe 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugSingleStepConditionTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugSingleStepConditionTest.java
@@ -24,8 +24,10 @@ import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.spi.Breakpoint;
 import org.apache.camel.spi.Condition;
+import org.apache.camel.support.BreakpointSupport;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugSingleStepTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugSingleStepTest.java
index 2de6271..26f0971 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugSingleStepTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugSingleStepTest.java
@@ -24,7 +24,9 @@ import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.spi.Breakpoint;
+import org.apache.camel.support.BreakpointSupport;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugTest.java b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugTest.java
index bb974e1..5b38485 100644
--- a/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugTest.java
+++ b/core/camel-core/src/test/java/org/apache/camel/processor/interceptor/DebugTest.java
@@ -24,11 +24,13 @@ import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
 import org.apache.camel.builder.RouteBuilder;
+import org.apache.camel.impl.debugger.DefaultDebugger;
 import org.apache.camel.model.ToDefinition;
 import org.apache.camel.spi.Breakpoint;
 import org.apache.camel.spi.CamelEvent.ExchangeEvent;
 import org.apache.camel.spi.CamelEvent.Type;
 import org.apache.camel.spi.Condition;
+import org.apache.camel.support.BreakpointSupport;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
 
diff --git a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
index 28e32ff..3a1af5e 100644
--- a/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
+++ b/core/camel-main/src/main/java/org/apache/camel/main/DefaultConfigurationConfigurer.java
@@ -30,10 +30,10 @@ import org.apache.camel.cloud.ServiceRegistry;
 import org.apache.camel.cluster.CamelClusterService;
 import org.apache.camel.health.HealthCheckRegistry;
 import org.apache.camel.health.HealthCheckRepository;
+import org.apache.camel.impl.debugger.BacklogTracer;
 import org.apache.camel.model.Model;
 import org.apache.camel.model.ModelCamelContext;
 import org.apache.camel.model.ModelLifecycleStrategy;
-import org.apache.camel.processor.interceptor.BacklogTracer;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.ClassResolver;
 import org.apache.camel.spi.Debugger;
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 d9c0f42..5e943dd 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
@@ -131,7 +131,6 @@ import org.apache.camel.processor.ConvertBodyProcessor;
 import org.apache.camel.processor.Delayer;
 import org.apache.camel.processor.DynamicRouter;
 import org.apache.camel.processor.Enricher;
-import org.apache.camel.processor.ErrorHandler;
 import org.apache.camel.processor.ExchangePatternProcessor;
 import org.apache.camel.processor.FilterProcessor;
 import org.apache.camel.processor.LogProcessor;
@@ -174,6 +173,7 @@ import org.apache.camel.processor.loadbalancer.TopicLoadBalancer;
 import org.apache.camel.processor.loadbalancer.WeightedLoadBalancer;
 import org.apache.camel.spi.BrowsableEndpoint;
 import org.apache.camel.spi.DataFormat;
+import org.apache.camel.spi.ErrorHandler;
 import org.apache.camel.spi.EventNotifier;
 import org.apache.camel.spi.ManagementObjectStrategy;
 import org.apache.camel.spi.RouteController;
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 f446b48..91a488a 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
@@ -51,6 +51,9 @@ import org.apache.camel.TimerListener;
 import org.apache.camel.VetoCamelContextStartException;
 import org.apache.camel.cluster.CamelClusterService;
 import org.apache.camel.health.HealthCheckRegistry;
+import org.apache.camel.impl.debugger.BacklogDebugger;
+import org.apache.camel.impl.debugger.BacklogTracer;
+import org.apache.camel.impl.engine.CamelInternalProcessor;
 import org.apache.camel.management.mbean.ManagedAsyncProcessorAwaitManager;
 import org.apache.camel.management.mbean.ManagedBacklogDebugger;
 import org.apache.camel.management.mbean.ManagedBacklogTracer;
@@ -79,9 +82,6 @@ import org.apache.camel.model.PolicyDefinition;
 import org.apache.camel.model.ProcessorDefinition;
 import org.apache.camel.model.ProcessorDefinitionHelper;
 import org.apache.camel.model.RouteDefinition;
-import org.apache.camel.processor.CamelInternalProcessor;
-import org.apache.camel.processor.interceptor.BacklogDebugger;
-import org.apache.camel.processor.interceptor.BacklogTracer;
 import org.apache.camel.spi.AsyncProcessorAwaitManager;
 import org.apache.camel.spi.BeanIntrospection;
 import org.apache.camel.spi.ConsumerCache;
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogDebugger.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogDebugger.java
index 86f5a15..cb3ac35 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogDebugger.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogDebugger.java
@@ -23,7 +23,7 @@ import org.apache.camel.NoTypeConversionAvailableException;
 import org.apache.camel.RuntimeCamelException;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.ManagedBacklogDebuggerMBean;
-import org.apache.camel.processor.interceptor.BacklogDebugger;
+import org.apache.camel.impl.debugger.BacklogDebugger;
 import org.apache.camel.spi.Language;
 import org.apache.camel.spi.ManagementStrategy;
 
diff --git a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
index 3dceacd..1eb09de 100644
--- a/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
+++ b/core/camel-management/src/main/java/org/apache/camel/management/mbean/ManagedBacklogTracer.java
@@ -22,7 +22,7 @@ import org.apache.camel.CamelContext;
 import org.apache.camel.api.management.ManagedResource;
 import org.apache.camel.api.management.mbean.BacklogTracerEventMessage;
 import org.apache.camel.api.management.mbean.ManagedBacklogTracerMBean;
-import org.apache.camel.processor.interceptor.BacklogTracer;
+import org.apache.camel.impl.debugger.BacklogTracer;
 import org.apache.camel.spi.ManagementStrategy;
 
 @ManagedResource(description = "Managed BacklogTracer")
diff --git a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BreakpointSupport.java b/core/camel-support/src/main/java/org/apache/camel/support/BreakpointSupport.java
similarity index 97%
rename from core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BreakpointSupport.java
rename to core/camel-support/src/main/java/org/apache/camel/support/BreakpointSupport.java
index d429853..35af480 100644
--- a/core/camel-base/src/main/java/org/apache/camel/processor/interceptor/BreakpointSupport.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/BreakpointSupport.java
@@ -14,7 +14,7 @@
  * See the License for the specific language governing permissions and
  * limitations under the License.
  */
-package org.apache.camel.processor.interceptor;
+package org.apache.camel.support;
 
 import org.apache.camel.Exchange;
 import org.apache.camel.NamedNode;
diff --git a/core/pom.xml b/core/pom.xml
index ef70a56..0808439 100644
--- a/core/pom.xml
+++ b/core/pom.xml
@@ -47,6 +47,7 @@
         <module>camel-core-engine</module>
         <module>camel-core-languages</module>
         <module>camel-core-model</module>
+        <module>camel-core-processor</module>
         <module>camel-core-reifier</module>
         <module>camel-xml-io</module>
         <module>camel-xml-jaxb</module>
diff --git a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_7.adoc b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_7.adoc
index efc127a..bb3a924 100644
--- a/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_7.adoc
+++ b/docs/user-manual/modules/ROOT/pages/camel-3x-upgrade-guide-3_7.adoc
@@ -6,14 +6,20 @@ from both 3.0 to 3.1 and 3.1 to 3.2.
 
 == Upgrading Camel 3.6 to 3.7
 
-=== AdviceWith
+=== Modularized core
 
-Advice routes moved the `adviceWith` method from `org.apache.camel.reifier.RouteReifier` to `org.apache.camel.builder.AdviceWith`.
-Also `adviceWith` methods on `org.apache.camel.builder.AdviceWithRouteBuilder` is deprecated in favour
-of using methods on `org.apache.camel.builder.AdviceWith`.
+The core has been further modularized and is now split up into three new core modules
+
+- camel-core-model
+- camel-core-reifier
+- camel-core-processor
+
+This separates the route model from the runtime processors via the reifiers, by having the classes in their own modules.
 
 === API changes
 
+The class `BreakpointSupport` has moved from `org/apache/camel/processor/interceptor/BreakpointSupport` to `org.apache.camel.support.BreakpointSupport`.
+
 These internal classes has been moved to locations that better suit where other similar processors are located.
 
 The class `org.apache.camel.impl.validator.ProcessorValidator` moved to `org.apache.camel.processor.validator.ProcessorValidator`.
@@ -25,6 +31,18 @@ The class `org.apache.camel.impl.transformer.TransformerKey` moved to `org.apach
 And the class `org.apache.camel.impl.DefaultExecutorServiceManager` is moved from `camel-core-engine` JAR to
 `org.apache.camel.impl.engine.DefaultExecutorServiceManager` in the `camel-base` JAR.
 
+=== ProcessorFactory
+
+If a custom `org.apache.camel.spi.ProcessorFactory` is in use, then the factory should extend the default implementation
+`org.apache.camel.processor.DefaultProcessorFactory` and in the overridden methods, super should be called to let
+the default implementation create the processor when custom processors is not created.
+
+=== AdviceWith
+
+Advice routes moved the `adviceWith` method from `org.apache.camel.reifier.RouteReifier` to `org.apache.camel.builder.AdviceWith`.
+Also `adviceWith` methods on `org.apache.camel.builder.AdviceWithRouteBuilder` is deprecated in favour
+of using methods on `org.apache.camel.builder.AdviceWith`.
+
 === toD EIP
 
 Support for using multiple languages in the toD EIP has been removed as it was a rare feature in use, and is causing some
diff --git a/parent/pom.xml b/parent/pom.xml
index 127cb32..1b4a32a 100644
--- a/parent/pom.xml
+++ b/parent/pom.xml
@@ -685,6 +685,11 @@
             </dependency>
             <dependency>
                 <groupId>org.apache.camel</groupId>
+                <artifactId>camel-core-processor</artifactId>
+                <version>${project.version}</version>
+            </dependency>
+            <dependency>
+                <groupId>org.apache.camel</groupId>
                 <artifactId>camel-core-reifier</artifactId>
                 <version>${project.version}</version>
             </dependency>