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 225903f..dacffa4 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,10 +17,8 @@
 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;
@@ -257,12 +255,9 @@
             // create multicast processor
             multicastStarted = 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);
+                    .getProcessorFactory().createProcessor(getCamelContext(), "MulticastProcessor",
+                            new Object[] { processors, multicastExecutor, false });
         }
     }
 
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 4830369..56355c9 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
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.spi;
 
-import java.util.Map;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
@@ -73,10 +71,10 @@
      *
      * @param  camelContext   the camel context
      * @param  definitionName the name of the definition that represents the processor
-     * @param  args           arguments for creating the processor (name=vale pairs)
+     * @param  args           arguments for creating the processor (optimized to use fixed order of parameters)
      * @return                the created processor, or <tt>null</tt> if this situation is not yet implemented.
      * @throws Exception      can be thrown if error creating the processor
      */
-    Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args) throws Exception;
+    Processor createProcessor(CamelContext camelContext, String definitionName, Object[] args) throws Exception;
 
 }
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 40d4bd1..501a69a 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
@@ -66,10 +66,8 @@
         this.resultProcessors = new ClassValue<Processor>() {
             @Override
             protected Processor computeValue(Class<?> type) {
-                Map<String, Object> args = new HashMap<>();
-                args.put("type", type);
                 try {
-                    return processorFactory.createProcessor(context, "ConvertBodyProcessor", args);
+                    return processorFactory.createProcessor(context, "ConvertBodyProcessor", new Object[] { type });
                 } catch (Exception e) {
                     throw RuntimeCamelException.wrapRuntimeException(e);
                 }
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 0cf510d..fd015f9 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,7 +16,6 @@
  */
 package org.apache.camel.impl.engine;
 
-import java.util.HashMap;
 import java.util.Map;
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.ExecutorService;
@@ -560,10 +559,8 @@
     }
 
     protected Processor createConvertBodyProcessor(final Class<?> type) {
-        Map<String, Object> args = new HashMap<>();
-        args.put("type", type);
         try {
-            return processorFactory.createProcessor(camelContext, "ConvertBodyProcessor", args);
+            return processorFactory.createProcessor(camelContext, "ConvertBodyProcessor", new Object[] { type });
         } catch (Exception e) {
             throw RuntimeCamelException.wrapRuntimeException(e);
         }
diff --git a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
index 0e756db..88dae7a 100644
--- a/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
+++ b/core/camel-cloud/src/main/java/org/apache/camel/impl/cloud/DefaultServiceCallProcessor.java
@@ -16,7 +16,6 @@
  */
 package org.apache.camel.impl.cloud;
 
-import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.camel.AsyncCallback;
@@ -134,13 +133,8 @@
         ObjectHelper.notNull(expression, "expression");
         ObjectHelper.notNull(loadBalancer, "load balancer");
 
-        Map<String, Object> args = new HashMap<>();
-        args.put("uri", uri);
-        args.put("expression", expression);
-        args.put("exchangePattern", exchangePattern);
-
         Processor send = camelContext.adapt(ExtendedCamelContext.class).getProcessorFactory().createProcessor(camelContext,
-                "SendDynamicProcessor", args);
+                "SendDynamicProcessor", new Object[] { uri, expression, exchangePattern });
         processor = AsyncProcessorConverterHelper.convert(send);
 
         // optimize and build expressions that are static ahead of time
diff --git a/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
index 3657868..e4d7f31 100644
--- a/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
+++ b/core/camel-core-processor/src/main/java/org/apache/camel/processor/DefaultProcessorFactory.java
@@ -17,7 +17,6 @@
 package org.apache.camel.processor;
 
 import java.util.Collection;
-import java.util.Map;
 import java.util.concurrent.ExecutorService;
 
 import org.apache.camel.CamelContext;
@@ -82,16 +81,14 @@
         return null;
     }
 
-    // TODO: For map args then use Object[] as its faster
-
     @Override
     @SuppressWarnings("unchecked")
-    public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args)
+    public Processor createProcessor(CamelContext camelContext, String definitionName, Object[] args)
             throws Exception {
         if ("SendDynamicProcessor".equals(definitionName)) {
-            String uri = (String) args.get("uri");
-            Expression expression = (Expression) args.get("expression");
-            ExchangePattern exchangePattern = (ExchangePattern) args.get("exchangePattern");
+            String uri = (String) args[0];
+            Expression expression = (Expression) args[1];
+            ExchangePattern exchangePattern = (ExchangePattern) args[2];
             SendDynamicProcessor processor = new SendDynamicProcessor(uri, expression);
             processor.setCamelContext(camelContext);
             if (exchangePattern != null) {
@@ -99,14 +96,14 @@
             }
             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");
+            Collection<Processor> processors = (Collection<Processor>) args[0];
+            ExecutorService executor = (ExecutorService) args[1];
+            boolean shutdownExecutorService = (boolean) args[2];
             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");
+            Class<?> type = (Class<?>) args[0];
             return new ConvertBodyProcessor(type);
         }
 
diff --git a/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java b/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
index 55b4b3b..8fe5bac 100644
--- a/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
+++ b/core/camel-support/src/main/java/org/apache/camel/support/TypedProcessorFactory.java
@@ -16,8 +16,6 @@
  */
 package org.apache.camel.support;
 
-import java.util.Map;
-
 import org.apache.camel.CamelContext;
 import org.apache.camel.NamedNode;
 import org.apache.camel.Processor;
@@ -50,16 +48,19 @@
     }
 
     @Override
-    public Processor createProcessor(CamelContext camelContext, String definitionName, Map<String, Object> args)
+    public Processor createProcessor(CamelContext camelContext, String definitionName, Object[] args)
             throws Exception {
+        // not in use
         return null;
     }
 
     protected Processor doCreateChildProcessor(Route route, T definition, boolean mandatory) throws Exception {
+        // not in use
         return null;
     }
 
     public Processor doCreateProcessor(Route route, T definition) throws Exception {
+        // not in use
         return null;
     }
 }
