diff --git a/hello_wolf/processor_range_bearing.cpp b/hello_wolf/processor_range_bearing.cpp
index d12fa8b159203afac4067e7c87dc12f4857c58cc..37c740b4205387be20683601d49fff399de1d70b 100644
--- a/hello_wolf/processor_range_bearing.cpp
+++ b/hello_wolf/processor_range_bearing.cpp
@@ -99,19 +99,6 @@ void ProcessorRangeBearing::processCapture(CaptureBasePtr _capture)
 
 }
 
-ProcessorBasePtr ProcessorRangeBearing::create(const std::string& _unique_name,
-                                               const ProcessorParamsBasePtr _params)
-{
-    auto params = std::static_pointer_cast<ProcessorParamsRangeBearing>(_params);
-
-    // construct processor
-    auto prc    = std::make_shared<ProcessorRangeBearing>(params);
-
-    // setup processor
-    prc->setName(_unique_name);
-
-    return prc;
-}
 
 Eigen::Vector2s ProcessorRangeBearing::observe(const Eigen::Vector2s& lmk_w) const
 {
diff --git a/hello_wolf/processor_range_bearing.h b/hello_wolf/processor_range_bearing.h
index 4752972086b1473dc33b2bc382773b2f45b051e0..527efd1f60afc7f1f688b795dbe0bf7fd4546628 100644
--- a/hello_wolf/processor_range_bearing.h
+++ b/hello_wolf/processor_range_bearing.h
@@ -50,9 +50,7 @@ class ProcessorRangeBearing : public ProcessorBase
         virtual void configure(SensorBasePtr _sensor) override;
 
         // Factory method for high level API
-        static ProcessorBasePtr create(const std::string& _unique_name,
-                                       const ProcessorParamsBasePtr _params);
-        WOLF_CREATE_PROCESSOR_AUTO(ProcessorRangeBearing, ProcessorParamsRangeBearing);
+        WOLF_PROCESSOR_CREATE(ProcessorRangeBearing, ProcessorParamsRangeBearing);
 
     protected:
         // Implementation of pure virtuals from ProcessorBase
diff --git a/include/core/processor/processor_base.h b/include/core/processor/processor_base.h
index da7089c17e3d854b31014cdda3b318dea47037f2..fdbd88974f34df0326e16808c5b82378dfa73249 100644
--- a/include/core/processor/processor_base.h
+++ b/include/core/processor/processor_base.h
@@ -28,20 +28,30 @@ namespace wolf {
  * In order to use this macro, the derived processor class, ProcessorClass,
  * must have a constructor available with the API:
  *
- *   ProcessorClass(const SensorClassPtr _sensor, const ProcessorParamsClassPtr _params);
+ *   ProcessorClass(const ProcessorParamsClassPtr _params);
  */
-#define WOLF_CREATE_PROCESSOR_AUTO(ProcessorClass, ProcessorParamsClass)                \
-static ProcessorBasePtr createAutoConf(const std::string& _unique_name,                 \
-                                       const ParamsServer& _server)                     \
-{                                                                                       \
-    auto params     = std::make_shared<ProcessorParamsClass>(_unique_name, _server);    \
-                                                                                        \
-    auto processor  = std::make_shared<ProcessorClass>(params);                         \
-                                                                                        \
-    processor       ->setName(_unique_name);                                            \
-                                                                                        \
-    return processor;                                                                   \
-}
+#define WOLF_PROCESSOR_CREATE(ProcessorClass, ProcessorParamsClass)                                     \
+static ProcessorBasePtr createAutoConf(const std::string& _unique_name,                                 \
+                                       const ParamsServer& _server)                                     \
+{                                                                                                       \
+    auto params     = std::make_shared<ProcessorParamsClass>(_unique_name, _server);                    \
+                                                                                                        \
+    auto processor  = std::make_shared<ProcessorClass>(params);                                         \
+                                                                                                        \
+    processor       ->setName(_unique_name);                                                            \
+                                                                                                        \
+    return processor;                                                                                   \
+}                                                                                                       \
+static ProcessorBasePtr create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)   \
+{                                                                                                       \
+    auto params     = std::static_pointer_cast<ProcessorParamsClass>(_params);                          \
+                                                                                                        \
+    auto processor  = std::make_shared<ProcessorClass>(params);                                         \
+                                                                                                        \
+    processor       ->setName(_unique_name);                                                            \
+                                                                                                        \
+    return processor;                                                                                   \
+}                                                                                                       \
 
 
 
diff --git a/include/core/processor/processor_diff_drive.h b/include/core/processor/processor_diff_drive.h
index 297ce7a38c139387aac80a987137ee61bb18202f..d4aa5a792ef4d571a057824099d4430696088c86 100644
--- a/include/core/processor/processor_diff_drive.h
+++ b/include/core/processor/processor_diff_drive.h
@@ -38,9 +38,7 @@ class ProcessorDiffDrive : public ProcessorOdom2D
         virtual void configure(SensorBasePtr _sensor) override;
 
         // Factory method for high level API
-        static ProcessorBasePtr create(const std::string& _unique_name,
-                                       const ProcessorParamsBasePtr _params);
-        WOLF_CREATE_PROCESSOR_AUTO(ProcessorDiffDrive, ProcessorParamsDiffDrive);
+        WOLF_PROCESSOR_CREATE(ProcessorDiffDrive, ProcessorParamsDiffDrive);
 
     protected:
         // Motion integration
diff --git a/include/core/processor/processor_odom_2D.h b/include/core/processor/processor_odom_2D.h
index 9d9c8096a6c5af7b641e7885d6a41d28175e123b..27d180d437f06f38423a8cae9c3ae83d350d60c5 100644
--- a/include/core/processor/processor_odom_2D.h
+++ b/include/core/processor/processor_odom_2D.h
@@ -45,9 +45,7 @@ class ProcessorOdom2D : public ProcessorMotion
         virtual void configure(SensorBasePtr _sensor) override { };
 
         // Factory method for high level API
-        static ProcessorBasePtr create(const std::string& _unique_name,
-                                       const ProcessorParamsBasePtr _params);
-        WOLF_CREATE_PROCESSOR_AUTO(ProcessorOdom2D, ProcessorParamsOdom2D);
+        WOLF_PROCESSOR_CREATE(ProcessorOdom2D, ProcessorParamsOdom2D);
 
         virtual bool voteForKeyFrame() override;
 
diff --git a/include/core/processor/processor_odom_3D.h b/include/core/processor/processor_odom_3D.h
index ce97160321f22053f926c959089fa2444d300000..62128c90469b8883f8350b16e8e02e7d654d4c8f 100644
--- a/include/core/processor/processor_odom_3D.h
+++ b/include/core/processor/processor_odom_3D.h
@@ -65,9 +65,7 @@ class ProcessorOdom3D : public ProcessorMotion
         virtual void configure(SensorBasePtr _sensor) override;
 
         // Factory method for high level API
-        static ProcessorBasePtr create(const std::string& _unique_name,
-                                       const ProcessorParamsBasePtr _params);
-        WOLF_CREATE_PROCESSOR_AUTO(ProcessorOdom3D, ProcessorParamsOdom3D);
+        WOLF_PROCESSOR_CREATE(ProcessorOdom3D, ProcessorParamsOdom3D);
 
     public:
         // Motion integration
diff --git a/src/processor/processor_diff_drive.cpp b/src/processor/processor_diff_drive.cpp
index 07bf75b344e1c9ccbafea0c5dfee8e1179b6e4b8..52cf7ebd9550fb1938b6d80983b60789d9db0e8e 100644
--- a/src/processor/processor_diff_drive.cpp
+++ b/src/processor/processor_diff_drive.cpp
@@ -31,16 +31,6 @@ ProcessorDiffDrive::~ProcessorDiffDrive()
     //
 }
 
-ProcessorBasePtr ProcessorDiffDrive::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)
-{
-    auto params = std::static_pointer_cast<ProcessorParamsDiffDrive>(_params);
-
-    auto prc_ptr = std::make_shared<ProcessorDiffDrive>(params);
-
-    prc_ptr->setName(_unique_name);
-
-    return prc_ptr;
-}
 
 void ProcessorDiffDrive::configure(SensorBasePtr _sensor)
 {
diff --git a/src/processor/processor_odom_2D.cpp b/src/processor/processor_odom_2D.cpp
index e9b7dd34ac9ed073f6c68120b34293cd477e5fb1..25e45242af0d6a52eb77adb8ba0f26c8517b08a3 100644
--- a/src/processor/processor_odom_2D.cpp
+++ b/src/processor/processor_odom_2D.cpp
@@ -167,16 +167,6 @@ FeatureBasePtr ProcessorOdom2D::emplaceFeature(CaptureMotionPtr _capture_motion)
     return key_feature_ptr;
 }
 
-ProcessorBasePtr ProcessorOdom2D::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)
-{
-    auto params = std::static_pointer_cast<ProcessorParamsOdom2D>(_params);
-
-    auto prc_ptr = std::make_shared<ProcessorOdom2D>(params);
-
-    prc_ptr->setName(_unique_name);
-
-    return prc_ptr;
-}
 
 
 } /* namespace wolf */
diff --git a/src/processor/processor_odom_3D.cpp b/src/processor/processor_odom_3D.cpp
index e519b9470cf857e050b4afe8a5af52f66cfba017..6486554ec2e0e1af49dbe14683b3b9d074c4b945 100644
--- a/src/processor/processor_odom_3D.cpp
+++ b/src/processor/processor_odom_3D.cpp
@@ -333,19 +333,6 @@ Motion ProcessorOdom3D::interpolate(const Motion& _ref1,
 }
 
 
-ProcessorBasePtr ProcessorOdom3D::create(const std::string& _unique_name, const ProcessorParamsBasePtr _params)
-{
-    // cast inputs to the correct type
-    auto params     = std::static_pointer_cast<ProcessorParamsOdom3D>(_params);
-
-    // construct processor
-    auto prc_odo    = std::make_shared<ProcessorOdom3D>(params);
-
-    // setup processor
-    prc_odo->setName(_unique_name);
-
-    return prc_odo;
-}
 
 bool ProcessorOdom3D::voteForKeyFrame()
 {