diff --git a/src/capture_fix.h b/src/capture_fix.h
index f4aa579f0b36e47e7d0d4e72f982d0bcb5896ac2..a9f90944f91f540c494b662f7ea801d3e7929ffd 100644
--- a/src/capture_fix.h
+++ b/src/capture_fix.h
@@ -12,11 +12,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class CaptureFix;
-typedef std::shared_ptr<CaptureFix> CaptureFixPtr;
-typedef std::shared_ptr<const CaptureFix> CaptureFixConstPtr;
-typedef std::weak_ptr<CaptureFix> CaptureFixWPtr;
+WOLF_PTR_TYPEDEFS(CaptureFix);
 
 //class CaptureFix
 class CaptureFix : public CaptureBase
diff --git a/src/capture_gps.h b/src/capture_gps.h
index 1f3055a28e84561edf0713ad02fa3052701eafd8..9466195277363af43a46b4654e25fd9ab15f1a61 100644
--- a/src/capture_gps.h
+++ b/src/capture_gps.h
@@ -8,11 +8,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class CaptureGPS;
-typedef std::shared_ptr<CaptureGPS> CaptureGPSPtr;
-typedef std::shared_ptr<const CaptureGPS> CaptureGPSConstPtr;
-typedef std::weak_ptr<CaptureGPS> CaptureGPSWPtr;    
+WOLF_PTR_TYPEDEFS(CaptureGPS);
 
 class CaptureGPS : public CaptureBase
 {
diff --git a/src/capture_gps_fix.h b/src/capture_gps_fix.h
index 93b4777bb405631cbedb4e34dba15011c80af6b4..3747eefafff56ddb43da60c430881e786ac16a5f 100644
--- a/src/capture_gps_fix.h
+++ b/src/capture_gps_fix.h
@@ -10,11 +10,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class CaptureGPSFix;
-typedef std::shared_ptr<CaptureGPSFix> CaptureGPSFixPtr;
-typedef std::shared_ptr<const CaptureGPSFix> CaptureGPSFixConstPtr;
-typedef std::weak_ptr<CaptureGPSFix> CaptureGPSFixWPtr;    
+WOLF_PTR_TYPEDEFS(CaptureGPSFix);
 
 //class CaptureGPSFix
 class CaptureGPSFix : public CaptureBase
diff --git a/src/capture_image.cpp b/src/capture_image.cpp
index ef9dba5734f0bf25f0b097486073a3e68444b6bc..35d71f730b65e1a543b37e708218673e709d1b86 100644
--- a/src/capture_image.cpp
+++ b/src/capture_image.cpp
@@ -3,7 +3,7 @@
 
 namespace wolf {
 
-CaptureImage::CaptureImage(const TimeStamp& _ts, SensorCamera::Ptr _camera_ptr, cv::Mat _data_cv) :
+CaptureImage::CaptureImage(const TimeStamp& _ts, SensorCameraPtr _camera_ptr, cv::Mat _data_cv) :
     CaptureBase("IMAGE", _ts, _camera_ptr), image_(_data_cv)
 {
     //
diff --git a/src/capture_image.h b/src/capture_image.h
index 6c8fae652cb2a7a72694704cb5638c8b18a44b2e..d1feeedc38f7280bcab47d4d3ded2d8d8af7c454 100644
--- a/src/capture_image.h
+++ b/src/capture_image.h
@@ -14,11 +14,8 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class CaptureImage;
-typedef std::shared_ptr<CaptureImage> CaptureImagePtr;
-typedef std::shared_ptr<const CaptureImage> CaptureImageConstPtr;
-typedef std::weak_ptr<CaptureImage> CaptureImageWPtr;    
+// Set ClassPtr, ClassConstPtr and ClassWPtr typedefs;
+WOLF_PTR_TYPEDEFS(CaptureImage);
     
 /**
  * \brief class CaptureImage
@@ -34,7 +31,7 @@ class CaptureImage : public CaptureBase
         std::vector<cv::KeyPoint> keypoints_;
 
     public:
-        CaptureImage(const TimeStamp& _ts, SensorCamera::Ptr _camera_ptr, cv::Mat _data_cv);
+        CaptureImage(const TimeStamp& _ts, SensorCameraPtr _camera_ptr, cv::Mat _data_cv);
         virtual ~CaptureImage();
 
         virtual const cv::Mat& getImage() const;
diff --git a/src/capture_imu.h b/src/capture_imu.h
index c4c6a6cd340148f72f42b9270f89b8327fbd1686..55e8d88489c58ccadbea6dcfa1da361279de9901 100644
--- a/src/capture_imu.h
+++ b/src/capture_imu.h
@@ -6,17 +6,10 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class CaptureIMU;
-typedef std::shared_ptr<CaptureIMU> CaptureIMUPtr;
-typedef std::shared_ptr<const CaptureIMU> CaptureIMUConstPtr;
-typedef std::weak_ptr<CaptureIMU> CaptureIMUWPtr;      
+WOLF_PTR_TYPEDEFS(CaptureIMU);
 
 class CaptureIMU : public CaptureMotion
 {
-    public:
-        typedef std::shared_ptr<CaptureIMU> Ptr;
-
     public:
 
         CaptureIMU(const TimeStamp& _init_ts, SensorBasePtr _sensor_ptr, const Eigen::Vector6s& _data);
diff --git a/src/capture_laser_2D.h b/src/capture_laser_2D.h
index c6ac10e07e9f64092b3cba325bd75766487e01d8..3a0612860c08862a890ea43495f12089c7a86114 100644
--- a/src/capture_laser_2D.h
+++ b/src/capture_laser_2D.h
@@ -16,11 +16,7 @@ class SensorLaser2D;
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class CaptureLaser2D;
-typedef std::shared_ptr<CaptureLaser2D> CaptureLaser2DPtr;
-typedef std::shared_ptr<const CaptureLaser2D> CaptureLaser2DConstPtr;
-typedef std::weak_ptr<CaptureLaser2D> CaptureLaser2DWPtr;      
+WOLF_PTR_TYPEDEFS(CaptureLaser2D);
     
     
 class CaptureLaser2D : public CaptureBase
@@ -36,7 +32,7 @@ class CaptureLaser2D : public CaptureBase
         void setSensorPtr(const SensorBasePtr sensor_ptr);
 
     private:
-        SensorLaser2D::Ptr laser_ptr_; //specific pointer to sensor laser 2D object
+        SensorLaser2DPtr laser_ptr_; //specific pointer to sensor laser 2D object
         laserscanutils::LaserScan scan_;
 
 };
diff --git a/src/capture_motion.h b/src/capture_motion.h
index bebdccbb713c10dd97610eba1cf12e678aed268b..f3d325a7a18c8a7b728f2b05c6522451ddb7b7e2 100644
--- a/src/capture_motion.h
+++ b/src/capture_motion.h
@@ -20,11 +20,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class CaptureMotion;
-typedef std::shared_ptr<CaptureMotion> CaptureMotionPtr;
-typedef std::shared_ptr<const CaptureMotion> CaptureMotionConst;
-typedef std::weak_ptr<CaptureMotion> CaptureMotionWPtr;      
+WOLF_PTR_TYPEDEFS(CaptureMotion);
     
 
 /** \brief Base class for motion Captures.
diff --git a/src/capture_void.h b/src/capture_void.h
index 1d50d88eb3e920f48409397566abec7861e5f839..50b3b3c7d55d87ae0d4c17d350e12ab6c90ceb54 100644
--- a/src/capture_void.h
+++ b/src/capture_void.h
@@ -7,11 +7,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class CaptureVoid;
-typedef std::shared_ptr<CaptureVoid> CaptureVoidPtr;
-typedef std::shared_ptr<const CaptureVoid> CaptureVoidConstPtr;
-typedef std::weak_ptr<CaptureVoid> CaptureVoidWPtr;      
+WOLF_PTR_TYPEDEFS(CaptureVoid);
    
     
 //class CaptureVoid
diff --git a/src/constraint_AHP.h b/src/constraint_AHP.h
index 87e7d164d26e5306b0a9f0088de656d22e6cdcd7..dc4df1914c3f9705f8fdf63407fa49440016353b 100644
--- a/src/constraint_AHP.h
+++ b/src/constraint_AHP.h
@@ -12,11 +12,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class ConstraintAHP;
-typedef std::shared_ptr<ConstraintAHP> ConstraintAHPPtr;
-typedef std::shared_ptr<const ConstraintAHP> ConstraintAHPConstPtr;
-typedef std::weak_ptr<ConstraintAHP> ConstraintAHPWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintAHP);
     
 //class    
 class ConstraintAHP : public ConstraintSparse<2, 3, 4, 3, 4, 4>
diff --git a/src/constraint_analytic.h b/src/constraint_analytic.h
index 3b1414f32731dca5850ccb96c77097c9ae3c0e81..a7c1f28d673176033adf1e0bd33982d8d9cf94f7 100644
--- a/src/constraint_analytic.h
+++ b/src/constraint_analytic.h
@@ -8,11 +8,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintAnalytic;
-typedef std::shared_ptr<ConstraintAnalytic> ConstraintAnalyticPtr;
-typedef std::shared_ptr<const ConstraintAnalytic> ConstraintAnalyticConstPtr;
-typedef std::weak_ptr<ConstraintAnalytic> ConstraintAnalyticWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintAnalytic);
   
 class ConstraintAnalytic: public ConstraintBase
 {
diff --git a/src/constraint_container.h b/src/constraint_container.h
index f0303c9875fe0443f9ee353264d4a80d6efdbab5..35fd158c7c452feca0c64366cf6f3ea62462b93a 100644
--- a/src/constraint_container.h
+++ b/src/constraint_container.h
@@ -8,11 +8,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintContainer;
-typedef std::shared_ptr<ConstraintContainer> ConstraintContainerPtr;
-typedef std::shared_ptr<const ConstraintContainer> ConstraintContainerConstPtr;
-typedef std::weak_ptr<ConstraintContainer> ConstraintContainerWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintContainer);
 
 class ConstraintContainer: public ConstraintSparse<3,2,1,2,1>
 {
diff --git a/src/constraint_corner_2D.h b/src/constraint_corner_2D.h
index 4721ebf6fd904e889100a62376e93908c501390c..1e6a4c8ac58b53091a1ae1fd75b2b353afe5896d 100644
--- a/src/constraint_corner_2D.h
+++ b/src/constraint_corner_2D.h
@@ -7,11 +7,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class ConstraintCorner2D;
-typedef std::shared_ptr<ConstraintCorner2D> ConstraintCorner2DPtr;
-typedef std::shared_ptr<const ConstraintCorner2D> ConstraintCorner2DConstPtr;
-typedef std::weak_ptr<ConstraintCorner2D> ConstraintCorner2DWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintCorner2D);
     
 class ConstraintCorner2D: public ConstraintSparse<3,2,1,2,1>
 {
diff --git a/src/constraint_epipolar.h b/src/constraint_epipolar.h
index 9c02fa395624c9e663c319faf14dfd149557440e..373579d045f7e6e874980b9cf3474714530cb8bb 100644
--- a/src/constraint_epipolar.h
+++ b/src/constraint_epipolar.h
@@ -5,11 +5,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class ConstraintEpipolar;
-typedef std::shared_ptr<ConstraintEpipolar> ConstraintEpipolarPtr;
-typedef std::shared_ptr<const ConstraintEpipolar> ConstraintEpipolarConstPtr;
-typedef std::weak_ptr<ConstraintEpipolar> ConstraintEpipolarWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintEpipolar);
     
 
 class ConstraintEpipolar : public ConstraintBase
diff --git a/src/constraint_fix.h b/src/constraint_fix.h
index ae3656de89f8eec21ba6bb25a1d583f6e92bfcc3..484f877911e3a6c5a14f010e8147dd125898ae5b 100644
--- a/src/constraint_fix.h
+++ b/src/constraint_fix.h
@@ -9,11 +9,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintFix;
-typedef std::shared_ptr<ConstraintFix> ConstraintFixPtr;
-typedef std::shared_ptr<const ConstraintFix> ConstraintFixConstPtr;
-typedef std::weak_ptr<ConstraintFix> ConstraintFixWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintFix);
 
 //class
 class ConstraintFix: public ConstraintSparse<3,2,1>
diff --git a/src/constraint_fix_3D.h b/src/constraint_fix_3D.h
index 9e8c43f0ef12c20d4683cddd6f673c7d69dfc1a6..9f3f5fec9293780fad3f4b28e3d7ed532cdc7b35 100644
--- a/src/constraint_fix_3D.h
+++ b/src/constraint_fix_3D.h
@@ -10,18 +10,11 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class ConstraintFix3D;
-typedef std::shared_ptr<ConstraintFix3D> ConstraintFix3DPtr;
-typedef std::shared_ptr<const ConstraintFix3D> ConstraintFix3DConstPtr;
-typedef std::weak_ptr<ConstraintFix3D> ConstraintFix3DWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintFix3D);
 
 //class
 class ConstraintFix3D: public ConstraintSparse<6,3,4>
 {
-    public:
-        typedef std::shared_ptr<ConstraintFix3D> Ptr;
-
     public:
 
         ConstraintFix3D(FeatureBasePtr _ftr_ptr, bool _apply_loss_function = false, ConstraintStatus _status = CTR_ACTIVE) :
diff --git a/src/constraint_gps_2D.h b/src/constraint_gps_2D.h
index f2490e2a1a91e1f8adf285f8aa795d909f9bdfe9..0f3f011c5207f51de33be7d0a6795e3284593bb1 100644
--- a/src/constraint_gps_2D.h
+++ b/src/constraint_gps_2D.h
@@ -9,11 +9,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintGPS2D;
-typedef std::shared_ptr<ConstraintGPS2D> ConstraintGPS2DPtr;
-typedef std::shared_ptr<const ConstraintGPS2D> ConstraintGPS2DConstPtr;
-typedef std::weak_ptr<ConstraintGPS2D> ConstraintGPS2DWPtr;    
+WOLF_PTR_TYPEDEFS(ConstraintGPS2D);
 
 class ConstraintGPS2D : public ConstraintSparse<2, 2>
 {
diff --git a/src/constraint_gps_pseudorange_2D.h b/src/constraint_gps_pseudorange_2D.h
index 6db67cb28df64afc658a41952d988b4f8a3b2571..b2e2a2cdd389af5b6608a95a4015dd11a956eb37 100644
--- a/src/constraint_gps_pseudorange_2D.h
+++ b/src/constraint_gps_pseudorange_2D.h
@@ -14,11 +14,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class ConstraintGPSPseudorange2D;
-typedef std::shared_ptr<ConstraintGPSPseudorange2D> ConstraintGPSPseudorange2DPtr;
-typedef std::shared_ptr<const ConstraintGPSPseudorange2D> ConstraintGPSPseudorange2DConstPtr;
-typedef std::weak_ptr<ConstraintGPSPseudorange2D> ConstraintGPSPseudorange2DWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintGPSPseudorange2D);
     
 /*
  * NB:
diff --git a/src/constraint_gps_pseudorange_3D.h b/src/constraint_gps_pseudorange_3D.h
index 86a2e2b2d6ac66b68dca4c22572e49e3af54c2a9..e7d7c93e6ca773ac017263fca8c9d24a36ce4724 100644
--- a/src/constraint_gps_pseudorange_3D.h
+++ b/src/constraint_gps_pseudorange_3D.h
@@ -10,11 +10,8 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class ConstraintGPSPseudorange3D;
-typedef std::shared_ptr<ConstraintGPSPseudorange3D> ConstraintGPSPseudorange3DPtr;
-typedef std::shared_ptr<const ConstraintGPSPseudorange3D> ConstraintGPSPseudorange3DConstPtr;
-typedef std::weak_ptr<ConstraintGPSPseudorange3D> ConstraintGPSPseudorange3DWPtr;
+// Set ClassPtr, ClassConstPtr and ClassWPtr typedefs;
+WOLF_PTR_TYPEDEFS(ConstraintGPSPseudorange3D);
     
 /*
  * NB:
diff --git a/src/constraint_imu.h b/src/constraint_imu.h
index c7320a3fc88164e6684053815200065cd92aa9f3..205e5b7abc166264397e81970491fd28c61f32d2 100644
--- a/src/constraint_imu.h
+++ b/src/constraint_imu.h
@@ -10,11 +10,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintIMU;
-typedef std::shared_ptr<ConstraintIMU> ConstraintIMUPtr;
-typedef std::shared_ptr<const ConstraintIMU> ConstraintIMUConstPtr;
-typedef std::weak_ptr<ConstraintIMU> ConstraintIMUWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintIMU);
 
 //class
 class ConstraintIMU : public ConstraintSparse<9, 3, 4, 3, 3, 3, 3, 4, 3>
diff --git a/src/constraint_odom_2D.h b/src/constraint_odom_2D.h
index fb89f42ee7831f9127658b751224323dcc6dcfb3..d133448ccddc308091b874e429cbc8734a065c2f 100644
--- a/src/constraint_odom_2D.h
+++ b/src/constraint_odom_2D.h
@@ -7,11 +7,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintOdom2D;
-typedef std::shared_ptr<ConstraintOdom2D> ConstraintOdom2DPtr;
-typedef std::shared_ptr<const ConstraintOdom2D> ConstraintOdom2DConstPtr;
-typedef std::weak_ptr<ConstraintOdom2D> ConstraintOdom2DWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintOdom2D);
     
 //class
 class ConstraintOdom2D : public ConstraintSparse<3, 2, 1, 2, 1>
diff --git a/src/constraint_odom_2D_analytic.h b/src/constraint_odom_2D_analytic.h
index ba0a0abaf5f94e96723e427061b59bc24c0fa356..74fbb56a52aa0ff20495d9e67e1f718331dec568 100644
--- a/src/constraint_odom_2D_analytic.h
+++ b/src/constraint_odom_2D_analytic.h
@@ -7,11 +7,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintOdom2DAnalytic;
-typedef std::shared_ptr<ConstraintOdom2DAnalytic> ConstraintOdom2DAnalyticPtr;
-typedef std::shared_ptr<const ConstraintOdom2DAnalytic> ConstraintOdom2DAnalyticConstPtr;
-typedef std::weak_ptr<ConstraintOdom2DAnalytic> ConstraintOdom2DAnalyticWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintOdom2DAnalytic);
     
 //class
 class ConstraintOdom2DAnalytic : public ConstraintRelative2DAnalytic
diff --git a/src/constraint_odom_3D.h b/src/constraint_odom_3D.h
index c90f5a3780ef0fb952c435a0f392ef09923b315a..f2492f77f659b6b4ab4faaad79a9d6542f594b9d 100644
--- a/src/constraint_odom_3D.h
+++ b/src/constraint_odom_3D.h
@@ -14,11 +14,7 @@
 namespace wolf
 {
 
-//forward declaration to typedef class pointers
-class ConstraintOdom3D;
-typedef std::shared_ptr<ConstraintOdom3D> ConstraintOdom3DPtr;
-typedef std::shared_ptr<const ConstraintOdom3D> ConstraintOdom3DConstPtr;
-typedef std::weak_ptr<ConstraintOdom3D> ConstraintOdom3DWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintOdom3D);
     
 //class
 class ConstraintOdom3D : public ConstraintSparse<6,3,4,3,4>
diff --git a/src/constraint_point_2D.h b/src/constraint_point_2D.h
index 9e921c9b20f18b860fda85eec519c98f1bffa6e4..7cd35e284c8af93d9ec85e13fdbec3f3846771b9 100644
--- a/src/constraint_point_2D.h
+++ b/src/constraint_point_2D.h
@@ -8,11 +8,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintPoint2D;
-typedef std::shared_ptr<ConstraintPoint2D> ConstraintPoint2DPtr;
-typedef std::shared_ptr<const ConstraintPoint2D> ConstraintPoint2DConstPtr;
-typedef std::weak_ptr<ConstraintPoint2D> ConstraintPoint2DWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintPoint2D);
     
 //class
 class ConstraintPoint2D: public ConstraintSparse<2,2,1,2,1,2>
diff --git a/src/constraint_point_to_line_2D.h b/src/constraint_point_to_line_2D.h
index 63920a1c1aedbcdcf565209a2207f6cfbbad1235..11dcae8a2bf2bdbd441977facf1ef9df819f6322 100644
--- a/src/constraint_point_to_line_2D.h
+++ b/src/constraint_point_to_line_2D.h
@@ -8,11 +8,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintPointToLine2D;
-typedef std::shared_ptr<ConstraintPointToLine2D> ConstraintPointToLine2DPtr;
-typedef std::shared_ptr<const ConstraintPointToLine2D> ConstraintPointToLine2DConstPtr;
-typedef std::weak_ptr<ConstraintPointToLine2D> ConstraintPointToLine2DWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintPointToLine2D);
     
 //class
 class ConstraintPointToLine2D: public ConstraintSparse<1,2,1,2,1,2,2>
diff --git a/src/constraint_relative_2D_analytic.h b/src/constraint_relative_2D_analytic.h
index c363d5a7573de2e6ff887ef104b8d1b424699fb2..b960d2e9b1b7c75fadf913827113a6b9ea06a192 100644
--- a/src/constraint_relative_2D_analytic.h
+++ b/src/constraint_relative_2D_analytic.h
@@ -8,11 +8,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ConstraintRelative2DAnalytic;
-typedef std::shared_ptr<ConstraintRelative2DAnalytic> ConstraintRelative2DAnalyticPtr;
-typedef std::shared_ptr<const ConstraintRelative2DAnalytic> ConstraintRelative2DAnalyticConstPtr;
-typedef std::weak_ptr<ConstraintRelative2DAnalytic> ConstraintRelative2DAnalyticWPtr;
+WOLF_PTR_TYPEDEFS(ConstraintRelative2DAnalytic);
     
 //class
 class ConstraintRelative2DAnalytic : public ConstraintAnalytic
diff --git a/src/examples/test_mpu.cpp b/src/examples/test_mpu.cpp
index 8d8a925352da9696c79851cb6b02c04e71756518..61f1cf37a3b9bf7c7227cf3be012b6fd36f2cbfe 100644
--- a/src/examples/test_mpu.cpp
+++ b/src/examples/test_mpu.cpp
@@ -123,7 +123,7 @@ int main(int argc, char** argv)
     wolf_problem_ptr_->getProcessorMotionPtr()->setOrigin(x0, t);
 
     // Create one capture to store the IMU data arriving from (sensor / callback / file / etc.)
-    CaptureIMU::Ptr imu_ptr( std::make_shared<CaptureIMU>(t, sensor_ptr, data_) );
+    CaptureIMUPtr imu_ptr( std::make_shared<CaptureIMU>(t, sensor_ptr, data_) );
 
     // main loop
     using namespace std;
diff --git a/src/examples/test_processor_image_landmark.cpp b/src/examples/test_processor_image_landmark.cpp
index 910edb4336c91776603e252f05828771d0c47ea6..8cfe8a230cd8d3c985e3190cde30ec32581d1d08 100644
--- a/src/examples/test_processor_image_landmark.cpp
+++ b/src/examples/test_processor_image_landmark.cpp
@@ -105,11 +105,11 @@ int main(int argc, char** argv)
     // ODOM SENSOR AND PROCESSOR
     SensorBasePtr sen_ptr = wolf_problem_ptr_->installSensor("ODOM 3D", "odom", (Vector7s()<<0,0,0,0,0,0,1).finished(), wolf_root + "/src/examples/sensor_odom_3D.yaml");
     ProcessorBasePtr prc_ptr = wolf_problem_ptr_->installProcessor("ODOM 3D", "odometry integrator", "odom",            wolf_root + "/src/examples/processor_odom_3D.yaml");
-    SensorOdom3D::Ptr sen_odo_ptr = std::static_pointer_cast<SensorOdom3D>(sen_ptr);
+    SensorOdom3DPtr sen_odo_ptr = std::static_pointer_cast<SensorOdom3D>(sen_ptr);
 
     // CAMERA SENSOR AND PROCESSOR
     SensorBasePtr sensor_ptr = wolf_problem_ptr_->installSensor("CAMERA", "PinHole", (Vector7s()<<0,0,0,0,0,0,1).finished(), wolf_root + "/src/examples/camera_params_ueye_sim.yaml");
-    SensorCamera::Ptr camera_ptr = std::static_pointer_cast<SensorCamera>(sensor_ptr);
+    SensorCameraPtr camera_ptr = std::static_pointer_cast<SensorCamera>(sensor_ptr);
     camera_ptr->setImgWidth(img_width);
     camera_ptr->setImgHeight(img_height);
     wolf_problem_ptr_->installProcessor("IMAGE LANDMARK", "ORB", "PinHole", wolf_root + "/src/examples/processor_image_ORB.yaml");
diff --git a/src/examples/test_simple_AHP.cpp b/src/examples/test_simple_AHP.cpp
index 541a603b20b5c1f025de09cb309b8b465578f0be..032d1dab3058b37a402f53e04c5c4afd00d76dfd 100644
--- a/src/examples/test_simple_AHP.cpp
+++ b/src/examples/test_simple_AHP.cpp
@@ -112,7 +112,7 @@ int main(int argc, char** argv)
     /* 2 */
     std::string wolf_root = _WOLF_ROOT_DIR;
     SensorBasePtr sensor_ptr = problem->installSensor("CAMERA", "PinHole", (Vector7s()<<0,0,0,-0.5,0.5,-0.5,0.5).finished(), wolf_root + "/src/examples/camera_params_ueye_sim.yaml");
-    SensorCamera::Ptr camera = std::static_pointer_cast<SensorCamera>(sensor_ptr);
+    SensorCameraPtr camera = std::static_pointer_cast<SensorCamera>(sensor_ptr);
     // ============================================================================================================
 
     // ============================================================================================================
diff --git a/src/feature_corner_2D.h b/src/feature_corner_2D.h
index dbeee258851e56ecad903c29622592d855347131..d43b820259cbc546e3fe426497c1bdc7bac99fe6 100644
--- a/src/feature_corner_2D.h
+++ b/src/feature_corner_2D.h
@@ -9,11 +9,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class FeatureCorner2D;
-typedef std::shared_ptr<FeatureCorner2D> FeatureCorner2DPtr;
-typedef std::shared_ptr<const FeatureCorner2D> FeatureCorner2DConstPtr;
-typedef std::weak_ptr<FeatureCorner2D> FeatureCorner2DWPtr;
+WOLF_PTR_TYPEDEFS(FeatureCorner2D);
 
 //class FeatureCorner2D
 class FeatureCorner2D : public FeatureBase
diff --git a/src/feature_fix.h b/src/feature_fix.h
index 2672c152ba08701d521925aa4a496d0b73f1d976..d7649bcc3bfb163c0b3a7b2bb46c2214e8c0d50a 100644
--- a/src/feature_fix.h
+++ b/src/feature_fix.h
@@ -10,11 +10,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class FeatureFix;
-typedef std::shared_ptr<FeatureFix> FeatureFixPtr;
-typedef std::shared_ptr<const FeatureFix> FeatureFixConstPtr;
-typedef std::weak_ptr<FeatureFix> FeatureFixWPtr;
+WOLF_PTR_TYPEDEFS(FeatureFix);
 
 //class FeatureFix
 class FeatureFix : public FeatureBase
diff --git a/src/feature_gps_fix.h b/src/feature_gps_fix.h
index 9e81309affdbb8e1e1f59bcba3b14d55eebdad0c..71fd098f191a7bbb2a7c0dac7165850f50f10c68 100644
--- a/src/feature_gps_fix.h
+++ b/src/feature_gps_fix.h
@@ -9,11 +9,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class FeatureGPSFix;
-typedef std::shared_ptr<FeatureGPSFix> FeatureGPSFixPtr;
-typedef std::shared_ptr<const FeatureGPSFix> FeatureGPSFixConstPtr;
-typedef std::weak_ptr<FeatureGPSFix> FeatureGPSFixWPtr;
+WOLF_PTR_TYPEDEFS(FeatureGPSFix);
 
 //class FeatureGPSFix
 class FeatureGPSFix : public FeatureBase
diff --git a/src/feature_gps_pseudorange.h b/src/feature_gps_pseudorange.h
index e68293b6820cd5410953fef479e6d63cc13d8fb6..5adaa5b6cca19ef3e15e2cae673629d2dca7a2b1 100644
--- a/src/feature_gps_pseudorange.h
+++ b/src/feature_gps_pseudorange.h
@@ -11,11 +11,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class FeatureGPSPseudorange;
-typedef std::shared_ptr<FeatureGPSPseudorange> FeatureGPSPseudorangePtr;
-typedef std::shared_ptr<const FeatureGPSPseudorange> FeatureGPSPseudorangeConstPtr;
-typedef std::weak_ptr<FeatureGPSPseudorange> FeatureGPSPseudorangeWPtr;
+WOLF_PTR_TYPEDEFS(FeatureGPSPseudorange);
 
 // TODO manage covariance
 class FeatureGPSPseudorange : public FeatureBase
diff --git a/src/feature_imu.h b/src/feature_imu.h
index f4a412498610ea352e43e03e06d53289a4b775db..a1933685742a9ac172734f5bbf198ebbc715dcf4 100644
--- a/src/feature_imu.h
+++ b/src/feature_imu.h
@@ -9,11 +9,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class FeatureIMU;
-typedef std::shared_ptr<FeatureIMU> FeatureIMUPtr;
-typedef std::shared_ptr<const FeatureIMU> FeatureIMUConstPtr;
-typedef std::weak_ptr<FeatureIMU> FeatureIMUWPtr;
+WOLF_PTR_TYPEDEFS(FeatureIMU);
 
 //class FeatureIMU
 class FeatureIMU : public FeatureBase
diff --git a/src/feature_line_2D.h b/src/feature_line_2D.h
index 39cda0be8e7f44a7a565582dd7a121279ce3c434..cd99621a080c3767f8cba5e9dafde6c73d769a58 100644
--- a/src/feature_line_2D.h
+++ b/src/feature_line_2D.h
@@ -6,11 +6,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class FeatureLine2D;
-typedef std::shared_ptr<FeatureLine2D> FeatureLine2DPtr;
-typedef std::shared_ptr<const FeatureLine2D> FeatureLine2DConstPtr;
-typedef std::weak_ptr<FeatureLine2D> FeatureLine2DWPtr;
+WOLF_PTR_TYPEDEFS(FeatureLine2D);
     
     
 /** \brief class FeatureLine2D
diff --git a/src/feature_odom_2D.h b/src/feature_odom_2D.h
index 9241fcd4cdc623af2e772753dbd0f895324e3e26..812f34567ebabdb677ef012dc65f59a2fc493205 100644
--- a/src/feature_odom_2D.h
+++ b/src/feature_odom_2D.h
@@ -11,11 +11,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class FeatureOdom2D;
-typedef std::shared_ptr<FeatureOdom2D> FeatureOdom2DPtr;
-typedef std::shared_ptr<const FeatureOdom2D> FeatureOdom2DConstPtr;
-typedef std::weak_ptr<FeatureOdom2D> FeatureOdom2DWPtr;    
+WOLF_PTR_TYPEDEFS(FeatureOdom2D);
     
 //class FeatureOdom2D
 class FeatureOdom2D : public FeatureBase
diff --git a/src/feature_point_image.h b/src/feature_point_image.h
index e7514bd09b72ca8bd05caa6093b027f05d0bb471..5535b3ce8f4ae48952a9c9c0a4c17debd8e02243 100644
--- a/src/feature_point_image.h
+++ b/src/feature_point_image.h
@@ -11,11 +11,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class FeaturePointImage;
-typedef std::shared_ptr<FeaturePointImage> FeaturePointImagePtr;
-typedef std::shared_ptr<const FeaturePointImage> FeaturePointImageConstPtr;
-typedef std::weak_ptr<FeaturePointImage> FeaturePointImageWPtr;
+WOLF_PTR_TYPEDEFS(FeaturePointImage);
     
 //class FeaturePointImage
 class FeaturePointImage : public FeatureBase
diff --git a/src/feature_polyline_2D.h b/src/feature_polyline_2D.h
index 0b16e29e2088e8cf85db17620ee044328ed962b3..60f3258f522ad85a37241c192a05d276e16bfc87 100644
--- a/src/feature_polyline_2D.h
+++ b/src/feature_polyline_2D.h
@@ -12,11 +12,7 @@
 
 namespace wolf
 {
-//forward declaration to typedef class pointers
-class FeaturePolyline2D;
-typedef std::shared_ptr<FeaturePolyline2D> FeaturePolyline2DPtr;
-typedef std::shared_ptr<const FeaturePolyline2D> FeaturePolyline2DConstPtr;
-typedef std::weak_ptr<FeaturePolyline2D> FeaturePolyline2DWPtr;
+WOLF_PTR_TYPEDEFS(FeaturePolyline2D);
 
 //class
 class FeaturePolyline2D : public FeatureBase
diff --git a/src/frame_imu.h b/src/frame_imu.h
index 61e3a89d85332207865a79738ad4b69e7955cf53..4b6ddb9a075743c2f9bf0bca5393be871cbbb24a 100644
--- a/src/frame_imu.h
+++ b/src/frame_imu.h
@@ -15,11 +15,7 @@ class StateQuaternion;
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class FrameIMU;
-typedef std::shared_ptr<FrameIMU> FrameIMUPtr;
-typedef std::shared_ptr<const FrameIMU> FrameIMUConstPtr;
-typedef std::weak_ptr<FrameIMU> FrameIMUWPtr;
+WOLF_PTR_TYPEDEFS(FrameIMU);
     
 //class
   class FrameIMU : public FrameBase
diff --git a/src/landmark_AHP.h b/src/landmark_AHP.h
index caacc21f64f0eb0850321c68c15977927cbdc017..0a31b89923132c2fae03f025eebe408603886caa 100644
--- a/src/landmark_AHP.h
+++ b/src/landmark_AHP.h
@@ -12,11 +12,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class LandmarkAHP;
-typedef std::shared_ptr<LandmarkAHP> LandmarkAHPPtr;
-typedef std::shared_ptr<const LandmarkAHP> LandmarkAHPConstPtr;
-typedef std::weak_ptr<LandmarkAHP> LandmarkAHPWPtr;
+WOLF_PTR_TYPEDEFS(LandmarkAHP);
 
 /* Landmark - Anchored Homogeneous Point*/
 class LandmarkAHP : public LandmarkBase
diff --git a/src/landmark_container.h b/src/landmark_container.h
index 7bc6964ef1161d47d7bcd35c2f6bb3c9f62115d5..0f51f3c5a91d18335f9933246f2b1588c02162be 100644
--- a/src/landmark_container.h
+++ b/src/landmark_container.h
@@ -10,11 +10,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class LandmarkContainer;
-typedef std::shared_ptr<LandmarkContainer> LandmarkContainerPtr;
-typedef std::shared_ptr<const LandmarkContainer> LandmarkContainerConstPtr;
-typedef std::weak_ptr<LandmarkContainer> LandmarkContainerWPtr;
+WOLF_PTR_TYPEDEFS(LandmarkContainer);
 
 //class LandmarkContainer
 class LandmarkContainer : public LandmarkBase
diff --git a/src/landmark_corner_2D.h b/src/landmark_corner_2D.h
index 0cb9b12b0eb20d49e3cea075dfb4d5d7c9244324..1eb99a975666814dececc52874b1c5d4905386fe 100644
--- a/src/landmark_corner_2D.h
+++ b/src/landmark_corner_2D.h
@@ -10,11 +10,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class LandmarkCorner2D;
-typedef std::shared_ptr<LandmarkCorner2D> LandmarkCorner2DPtr;
-typedef std::shared_ptr<const LandmarkCorner2D> LandmarkCorner2DConstPtr;
-typedef std::weak_ptr<LandmarkCorner2D> LandmarkCorner2DWPtr;
+WOLF_PTR_TYPEDEFS(LandmarkCorner2D);
     
 //class LandmarkCorner2D
 class LandmarkCorner2D : public LandmarkBase
diff --git a/src/landmark_line_2D.h b/src/landmark_line_2D.h
index 30508c01e6a72076912947c6a1a63bf06e8a1a32..514cd550b294a3e65255df942f450bade9dd4902 100644
--- a/src/landmark_line_2D.h
+++ b/src/landmark_line_2D.h
@@ -11,11 +11,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class LandmarkLine2D;
-typedef std::shared_ptr<LandmarkLine2D> LandmarkLine2DPtr;
-typedef std::shared_ptr<const LandmarkLine2D> LandmarkLine2DConstPtr;
-typedef std::weak_ptr<LandmarkLine2D> LandmarkLine2DWPtr;
+WOLF_PTR_TYPEDEFS(LandmarkLine2D);
 
 
 //class LandmarkLine2D
diff --git a/src/landmark_point_3d.h b/src/landmark_point_3d.h
index 8f26cdfa4f3faedd9ecf5cef866e4c2a90f38049..531346c941008a257c1636d296400434e6de7c0e 100644
--- a/src/landmark_point_3d.h
+++ b/src/landmark_point_3d.h
@@ -12,11 +12,7 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class LandmarkPoint3D;
-typedef std::shared_ptr<LandmarkPoint3D> LandmarkPoint3DPtr;
-typedef std::shared_ptr<const LandmarkPoint3D> LandmarkPoint3DConstPtr;
-typedef std::weak_ptr<LandmarkPoint3D> LandmarkPoint3DWPtr;
+WOLF_PTR_TYPEDEFS(LandmarkPoint3D);
     
 //class    
 class LandmarkPoint3D : public LandmarkBase
diff --git a/src/landmark_polyline_2D.h b/src/landmark_polyline_2D.h
index a35c6f51f6b24ab2e95d470b8ccd835bc37c9719..d2b8fb8f93e92896f85bcdd30b641346a9d1a754 100644
--- a/src/landmark_polyline_2D.h
+++ b/src/landmark_polyline_2D.h
@@ -29,11 +29,7 @@ typedef enum
     PALLET,           ///< A pallet box 0.9 x 1.2 (m)
 } LandmarkClassification;
 
-//forward declaration to typedef class pointers
-class LandmarkPolyline2D;
-typedef std::shared_ptr<LandmarkPolyline2D> LandmarkPolyline2DPtr;
-typedef std::shared_ptr<const LandmarkPolyline2D> LandmarkPolyline2DConstPtr;
-typedef std::weak_ptr<LandmarkPolyline2D> LandmarkPolyline2DWPtr;
+WOLF_PTR_TYPEDEFS(LandmarkPolyline2D);
 
 //class
 class LandmarkPolyline2D : public LandmarkBase
diff --git a/src/processor_gps.h b/src/processor_gps.h
index f9ea51a8e4499c9963fbd0350d13c3c98ef15c1e..d89ff86b4e5c6310cdf21daa5551e8dfe0b49507 100644
--- a/src/processor_gps.h
+++ b/src/processor_gps.h
@@ -14,11 +14,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ProcessorGPS;
-typedef std::shared_ptr<ProcessorGPS> ProcessorGPSPtr;
-typedef std::shared_ptr<const ProcessorGPS> ProcessorGPSConstPtr;
-typedef std::weak_ptr<ProcessorGPS> ProcessorGPSWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorGPS);
     
 //class
 class ProcessorGPS : public ProcessorBase
diff --git a/src/processor_image_feature.cpp b/src/processor_image_feature.cpp
index ce411c18a05d9c84838023c6cb8430087a17b894..a514feb06968af69408bef479e125b7c2347b6c4 100644
--- a/src/processor_image_feature.cpp
+++ b/src/processor_image_feature.cpp
@@ -65,7 +65,7 @@ ProcessorImageFeature::~ProcessorImageFeature()
     //
 }
 
-void ProcessorImageFeature::setup(SensorCamera::Ptr _camera_ptr)
+void ProcessorImageFeature::setup(SensorCameraPtr _camera_ptr)
 {
     image_.width_ = _camera_ptr->getImgWidth();
     image_.height_ = _camera_ptr->getImgHeight();
diff --git a/src/processor_image_feature.h b/src/processor_image_feature.h
index b73f1065e80ea1d80a3a07272600918c51bcae3b..a26e85b6a0c9849e4d7367fe67aa795312615c73 100644
--- a/src/processor_image_feature.h
+++ b/src/processor_image_feature.h
@@ -26,11 +26,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ProcessorImageFeature;
-typedef std::shared_ptr<ProcessorImageFeature> ProcessorImageFeaturePtr;
-typedef std::shared_ptr<const ProcessorImageFeature> ProcessorImageFeatureConstPtr;
-typedef std::weak_ptr<ProcessorImageFeature> ProcessorImageFeatureWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorImageFeature);
     
 //class
 class ProcessorImageFeature : public ProcessorTrackerFeature
@@ -66,7 +62,7 @@ class ProcessorImageFeature : public ProcessorTrackerFeature
         ProcessorImageFeature(ProcessorParamsImage _params);
         virtual ~ProcessorImageFeature();
 
-        virtual void setup(SensorCamera::Ptr _camera_ptr);
+        virtual void setup(SensorCameraPtr _camera_ptr);
 
     protected:
 
diff --git a/src/processor_image_landmark.cpp b/src/processor_image_landmark.cpp
index 5912ca5fbf3b3d115ffa18ce2dfec83fd83bff6a..c725355c14ba701fb72072107ac9ad685f65cb95 100644
--- a/src/processor_image_landmark.cpp
+++ b/src/processor_image_landmark.cpp
@@ -72,7 +72,7 @@ ProcessorImageLandmark::~ProcessorImageLandmark()
     //
 }
 
-void ProcessorImageLandmark::setup(SensorCamera::Ptr _camera_ptr)
+void ProcessorImageLandmark::setup(SensorCameraPtr _camera_ptr)
 {
     image_.width_ = _camera_ptr->getImgWidth();
     image_.height_ = _camera_ptr->getImgHeight();
diff --git a/src/processor_image_landmark.h b/src/processor_image_landmark.h
index 3c22dc2c7852fb9bc73b242ec408afcba1d876ac..23fc48e974b394d28658505da8396e30fce7bcf1 100644
--- a/src/processor_image_landmark.h
+++ b/src/processor_image_landmark.h
@@ -26,11 +26,8 @@
 
 namespace wolf {
 
-//forward declaration to typedef class pointers
-class ProcessorImageFeature;
-typedef std::shared_ptr<ProcessorImageFeature> ProcessorImageFeaturePtr;
-typedef std::shared_ptr<const ProcessorImageFeature> ProcessorImageFeatureConstPtr;
-typedef std::weak_ptr<ProcessorImageFeature> ProcessorImageFeatureWPtr;
+
+WOLF_PTR_TYPEDEFS(ProcessorImageFeature);
     
 //Class
 class ProcessorImageLandmark : public ProcessorTrackerLandmark
@@ -82,7 +79,7 @@ class ProcessorImageLandmark : public ProcessorTrackerLandmark
         ProcessorImageLandmark(const ProcessorParamsImage& _params);
         virtual ~ProcessorImageLandmark();
 
-        virtual void setup(SensorCamera::Ptr _camera_ptr);
+        virtual void setup(SensorCameraPtr _camera_ptr);
 
     protected:
 
diff --git a/src/processor_imu.h b/src/processor_imu.h
index 84e75ff463bdd592a042ac7a05c10fcef9e4eca4..c20f141b1b42676daf6e35bc38fff4c87219a3f5 100644
--- a/src/processor_imu.h
+++ b/src/processor_imu.h
@@ -8,11 +8,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ProcessorIMU;
-typedef std::shared_ptr<ProcessorIMU> ProcessorIMUPtr;
-typedef std::shared_ptr<const ProcessorIMU> ProcessorIMUConstPtr;
-typedef std::weak_ptr<ProcessorIMU> ProcessorIMUWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorIMU);
     
 //class
 class ProcessorIMU : public ProcessorMotion{
diff --git a/src/processor_motion.h b/src/processor_motion.h
index 08b053c5b927da1ebbb9cb62a53f9efc86b54645..943c0fe0e44f3682ae8bc5df2056db12d1220319 100644
--- a/src/processor_motion.h
+++ b/src/processor_motion.h
@@ -19,12 +19,6 @@
 namespace wolf
 {
     
-//forward declaration to typedef class pointers
-class ProcessorMotion;
-typedef std::shared_ptr<ProcessorMotion> ProcessorMotionPtr;
-typedef std::shared_ptr<const ProcessorMotion> ProcessorMotionConstPtr;
-typedef std::weak_ptr<ProcessorMotion> ProcessorMotionWPtr;
-
 /** \brief class for Motion processors
  *
  * This processor integrates motion data into vehicle states.
diff --git a/src/processor_odom_2D.h b/src/processor_odom_2D.h
index 009812cd0c514b728ccb79a3cb8f29676b67cf7e..657f5b84a245f0141d7e641908dbf2180e04b0e2 100644
--- a/src/processor_odom_2D.h
+++ b/src/processor_odom_2D.h
@@ -14,11 +14,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ProcessorOdom2D;
-typedef std::shared_ptr<ProcessorOdom2D> ProcessorOdom2DPtr;
-typedef std::shared_ptr<const ProcessorOdom2D> ProcessorOdom2DConstPtr;
-typedef std::weak_ptr<ProcessorOdom2D> ProcessorOdom2DWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorOdom2D);
    
 
 struct ProcessorParamsOdom2D : public ProcessorParamsBase
diff --git a/src/processor_odom_3D.cpp b/src/processor_odom_3D.cpp
index 04184e891095c048fcdaf7597d0ac48d9a80f668..9273590e993079593e123ffae74eddfdc83198b2 100644
--- a/src/processor_odom_3D.cpp
+++ b/src/processor_odom_3D.cpp
@@ -2,7 +2,7 @@
 namespace wolf
 {
 
-ProcessorOdom3D::ProcessorOdom3D(ProcessorOdom3DParams::Ptr _params, SensorOdom3D::Ptr _sensor_ptr) :
+ProcessorOdom3D::ProcessorOdom3D(ProcessorOdom3DParams::Ptr _params, SensorOdom3DPtr _sensor_ptr) :
                 ProcessorMotion("ODOM 3D", 7, 7, 6, 6),
                 max_time_span_  (_params ? _params    ->max_time_span   : 1.0  ),
                 max_buff_length_(_params ? _params    ->max_buff_length : 10   ),
@@ -21,7 +21,7 @@ ProcessorOdom3D::~ProcessorOdom3D()
 {
 }
 
-void ProcessorOdom3D::setup(SensorOdom3D::Ptr sen_ptr)
+void ProcessorOdom3D::setup(SensorOdom3DPtr sen_ptr)
 {
     if (sen_ptr)
     {
@@ -249,7 +249,7 @@ ProcessorBasePtr ProcessorOdom3D::create(const std::string& _unique_name, const
     // cast inputs to the correct type
     std::shared_ptr<ProcessorOdom3DParams> prc_odo_params = std::static_pointer_cast<ProcessorOdom3DParams>(_params);
 
-    SensorOdom3D::Ptr sen_odo =std::static_pointer_cast<SensorOdom3D>(_sen_ptr);
+    SensorOdom3DPtr sen_odo =std::static_pointer_cast<SensorOdom3D>(_sen_ptr);
 
     // construct processor
     std::shared_ptr<ProcessorOdom3D> prc_odo = std::make_shared<ProcessorOdom3D>(prc_odo_params, sen_odo);
diff --git a/src/processor_odom_3D.h b/src/processor_odom_3D.h
index f5ec56a736f94bf04f0a4c7008cb5f9d594eeba7..cfd26737bcb3df19704c1c00f0101b85c7cd86fe 100644
--- a/src/processor_odom_3D.h
+++ b/src/processor_odom_3D.h
@@ -17,11 +17,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ProcessorOdom3D;
-typedef std::shared_ptr<ProcessorOdom3D> ProcessorOdom3DPtr;
-typedef std::shared_ptr<const ProcessorOdom3D> ProcessorOdom3DConstPtr;
-typedef std::weak_ptr<ProcessorOdom3D> ProcessorOdom3DWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorOdom3D);
  
 
 struct ProcessorOdom3DParams : public ProcessorParamsBase
@@ -70,9 +66,9 @@ struct ProcessorOdom3DParams : public ProcessorParamsBase
 class ProcessorOdom3D : public ProcessorMotion
 {
     public:
-        ProcessorOdom3D(ProcessorOdom3DParams::Ptr _params = nullptr, SensorOdom3D::Ptr _sensor_ptr = nullptr);
+        ProcessorOdom3D(ProcessorOdom3DParams::Ptr _params = nullptr, SensorOdom3DPtr _sensor_ptr = nullptr);
         virtual ~ProcessorOdom3D();
-        void setup(SensorOdom3D::Ptr sen_ptr);
+        void setup(SensorOdom3DPtr sen_ptr);
 
     public:
         virtual void data2delta(const Eigen::VectorXs& _data,
diff --git a/src/processor_tracker.h b/src/processor_tracker.h
index 8259de2b1e722dc22b3ea0111a96eba24826b89e..fb1029d72456666131130f25a9f7665153def6e6 100644
--- a/src/processor_tracker.h
+++ b/src/processor_tracker.h
@@ -13,12 +13,7 @@
 
 namespace wolf {
     
-//forward declaration to typedef class pointers
-class ProcessorTracker;
-typedef std::shared_ptr<ProcessorTracker> ProcessorTrackerPtr;
-typedef std::shared_ptr<const ProcessorTracker> ProcessorTrackerConstPtr;
-typedef std::weak_ptr<ProcessorTracker> ProcessorTrackerWPtr;
-    
+WOLF_PTR_TYPEDEFS(ProcessorTracker);
 
 struct ProcessorParamsTracker : public ProcessorParamsBase
 {
diff --git a/src/processor_tracker_feature.h b/src/processor_tracker_feature.h
index c5cfb1c5d60ae5474b4819ffbd23ebafafe24fb3..032af6e3d53d78a3dea2a67665334e9663acf18f 100644
--- a/src/processor_tracker_feature.h
+++ b/src/processor_tracker_feature.h
@@ -17,12 +17,7 @@
 namespace wolf
 {
     
-//forward declaration to typedef class pointers
-class ProcessorTrackerFeature;
-typedef std::shared_ptr<ProcessorTrackerFeature> ProcessorTrackerFeaturePtr;
-typedef std::shared_ptr<const ProcessorTrackerFeature> ProcessorTrackerFeatureConstPtr;
-typedef std::weak_ptr<ProcessorTrackerFeature> ProcessorTrackerFeatureWPtr;
-
+WOLF_PTR_TYPEDEFS(ProcessorTrackerFeature);
 
 /** \brief Feature tracker processor
  *
diff --git a/src/processor_tracker_feature_corner.h b/src/processor_tracker_feature_corner.h
index 7dc7304b62114152245ab46662cf49f0cd4df36b..3c63a482796e9f7b881587df0046aec76b3d04b0 100644
--- a/src/processor_tracker_feature_corner.h
+++ b/src/processor_tracker_feature_corner.h
@@ -29,11 +29,7 @@
 namespace wolf
 {
     
-//forward declaration to typedef class pointers
-class ProcessorTrackerFeatureCorner;
-typedef std::shared_ptr<ProcessorTrackerFeatureCorner> ProcessorTrackerFeatureCornerPtr;
-typedef std::shared_ptr<const ProcessorTrackerFeatureCorner> ProcessorTrackerFeatureCornerConstPtr;
-typedef std::weak_ptr<ProcessorTrackerFeatureCorner> ProcessorTrackerFeatureCornerWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorTrackerFeatureCorner);
     
 
 //some consts.. TODO: this tuning params should be grouped in a struct and passed to the class from ros node, at constructor level
diff --git a/src/processor_tracker_feature_dummy.h b/src/processor_tracker_feature_dummy.h
index 5a19002559a01283163676d30c4b490a7b0f7f3f..ee52ca5b1266fc0c4aa9b8ad77b0d0837aab552c 100644
--- a/src/processor_tracker_feature_dummy.h
+++ b/src/processor_tracker_feature_dummy.h
@@ -15,11 +15,7 @@
 namespace wolf
 {
     
-//forward declaration to typedef class pointers
-class ProcessorTrackerFeatureDummy;
-typedef std::shared_ptr<ProcessorTrackerFeatureDummy> ProcessorTrackerFeatureDummyPtr;
-typedef std::shared_ptr<const ProcessorTrackerFeatureDummy> ProcessorTrackerFeatureDummyConstPtr;
-typedef std::weak_ptr<ProcessorTrackerFeatureDummy> ProcessorTrackerFeatureDummyWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorTrackerFeatureDummy);
     
 //Class
 class ProcessorTrackerFeatureDummy : public ProcessorTrackerFeature
diff --git a/src/processor_tracker_landmark.h b/src/processor_tracker_landmark.h
index de52a2b0e58eaa98b8e3943e5ae7ff033759e7e4..2fc24f49d8e585f79bf00ca4661d76ef85c2432e 100644
--- a/src/processor_tracker_landmark.h
+++ b/src/processor_tracker_landmark.h
@@ -16,11 +16,7 @@
 namespace wolf
 {
 
-//forward declaration to typedef class pointers
-class ProcessorTrackerLandmark;
-typedef std::shared_ptr<ProcessorTrackerLandmark> ProcessorTrackerLandmarkPtr;
-typedef std::shared_ptr<const ProcessorTrackerLandmark> ProcessorTrackerLandmarkConstPtr;
-typedef std::weak_ptr<ProcessorTrackerLandmark> ProcessorTrackerLandmarkWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorTrackerLandmark);
     
 /** \brief Landmark tracker processor
  *
diff --git a/src/processor_tracker_landmark_corner.h b/src/processor_tracker_landmark_corner.h
index 57afb9d48b5b2df3a02d96d38bf68796f795f53d..c4469f418a48e51278add6274ff618ba62046a1e 100644
--- a/src/processor_tracker_landmark_corner.h
+++ b/src/processor_tracker_landmark_corner.h
@@ -39,12 +39,7 @@ const Scalar min_features_ratio_th_ = 0.5;
 struct ProcessorParamsLaser;
 typedef std::shared_ptr<ProcessorParamsLaser> ProcessorParamsLaserPtr;
 
-//forward declaration to typedef class pointers
-class ProcessorTrackerLandmarkCorner;
-typedef std::shared_ptr<ProcessorTrackerLandmarkCorner> ProcessorTrackerLandmarkCornerPtr;
-typedef std::shared_ptr<const ProcessorTrackerLandmarkCorner> ProcessorTrackerLandmarkCornerConstPtr;
-typedef std::weak_ptr<ProcessorTrackerLandmarkCorner> ProcessorTrackerLandmarkCornerWPtr;
- 
+WOLF_PTR_TYPEDEFS(ProcessorTrackerLandmarkCorner);
 
 struct ProcessorParamsLaser : public ProcessorParamsBase
 {
diff --git a/src/processor_tracker_landmark_dummy.h b/src/processor_tracker_landmark_dummy.h
index 4e233ae068a01fc6730422453989900e7f46e9bb..4c8a2b8c8d09477a9ea27ba2020ac8151e9f28e0 100644
--- a/src/processor_tracker_landmark_dummy.h
+++ b/src/processor_tracker_landmark_dummy.h
@@ -12,13 +12,8 @@
 
 namespace wolf
 {
-    
-//forward declaration to typedef class pointers
-class ProcessorTrackerLandmarkDummy;
-typedef std::shared_ptr<ProcessorTrackerLandmarkDummy> ProcessorTrackerLandmarkDummyPtr;
-typedef std::shared_ptr<const ProcessorTrackerLandmarkDummy> ProcessorTrackerLandmarkDummyConstPtr;
-typedef std::weak_ptr<ProcessorTrackerLandmarkDummy> ProcessorTrackerLandmarkDummyWPtr;
-    
+
+WOLF_PTR_TYPEDEFS(ProcessorTrackerLandmarkDummy);
 
 class ProcessorTrackerLandmarkDummy : public ProcessorTrackerLandmark
 {
diff --git a/src/processor_tracker_landmark_polyline.h b/src/processor_tracker_landmark_polyline.h
index 3417b8fd86ff527c7bec6a99f4e55107efbccdea..11d74666ab0310ae4bfb6158a299fd7b52e1f213 100644
--- a/src/processor_tracker_landmark_polyline.h
+++ b/src/processor_tracker_landmark_polyline.h
@@ -40,12 +40,8 @@ typedef std::shared_ptr<LandmarkPolylineMatch> LandmarkPolylineMatchPtr;
 struct ProcessorParamsPolyline;
 typedef std::shared_ptr<ProcessorParamsPolyline> ProcessorParamsPolylinePtr;
 
-//forward declaration to typedef class pointers
-class ProcessorTrackerLandmarkPolyline;
-typedef std::shared_ptr<ProcessorTrackerLandmarkPolyline> ProcessorTrackerLandmarkPolylinePtr;
-typedef std::shared_ptr<const ProcessorTrackerLandmarkPolyline> ProcessorTrackerLandmarkPolylineConstPtr;
-typedef std::weak_ptr<ProcessorTrackerLandmarkPolyline> ProcessorTrackerLandmarkPolylineWPtr;
 
+WOLF_PTR_TYPEDEFS(ProcessorTrackerLandmarkPolyline);
 
 
 // Match Feature - Landmark
@@ -99,9 +95,6 @@ struct ProcessorParamsPolyline : public ProcessorParamsBase
 
 class ProcessorTrackerLandmarkPolyline : public ProcessorTrackerLandmark
 {
-    public:
-        typedef std::shared_ptr<ProcessorTrackerLandmarkPolyline> Ptr;
-
     private:
         laserscanutils::LineFinderIterative line_finder_;
         ProcessorParamsPolyline params_;
diff --git a/src/sensor_camera.h b/src/sensor_camera.h
index 051bf573028093f4b8990bed86a21b6d92065a99..7c61c98e2a04f5bd437820b6e3f5d17b79f3b8cb 100644
--- a/src/sensor_camera.h
+++ b/src/sensor_camera.h
@@ -17,14 +17,12 @@ struct IntrinsicsCamera : public IntrinsicsBase
         Eigen::VectorXs distortion;         ///< d = [d_1, d_2, d_3, ...] radial distortion coefficients
 };
 
+WOLF_PTR_TYPEDEFS(SensorCamera);
+
 /**Pin-hole camera sensor
  */
 class SensorCamera : public SensorBase
 {
-    public:
-        typedef std::shared_ptr<SensorCamera> Ptr;
-        typedef std::weak_ptr<SensorCamera> WPtr;
-
     public:
         /** \brief Constructor with arguments
          *
diff --git a/src/sensor_gps.h b/src/sensor_gps.h
index 95b9c56afc4608e9f844406895dec17a740b320b..b36d09ae0055c177d42f05b6d3fb7517a4e9fd0a 100644
--- a/src/sensor_gps.h
+++ b/src/sensor_gps.h
@@ -22,12 +22,10 @@ struct IntrinsicsGPS : public IntrinsicsBase
         // add GPS parameters here
 };
 
+WOLF_PTR_TYPEDEFS(SensorGPS);
+
 class SensorGPS : public SensorBase
 {
-    public:
-        typedef std::shared_ptr<SensorGPS> Ptr;
-        typedef std::weak_ptr<SensorGPS> WPtr;
-
 public:
     //pointer to sensor position, orientation, bias, init vehicle position and orientation
     SensorGPS(StateBlockPtr _p_ptr, StateBlockPtr _o_ptr, StateBlockPtr _bias_ptr, StateBlockPtr _map_position_ptr, StateBlockPtr _map_orientation_ptr);
diff --git a/src/sensor_gps_fix.h b/src/sensor_gps_fix.h
index a2dc9a012efc459ca91073fa44ac980e1ab07fdd..9cb5583a025eaab3264faa8943aaafbb4c720fd6 100644
--- a/src/sensor_gps_fix.h
+++ b/src/sensor_gps_fix.h
@@ -17,6 +17,8 @@ struct IntrinsicsGPSFix : public IntrinsicsBase
         // Empty -- it acts only as a typedef for IntrinsicsBase, but allows future extension with parameters
 };
 
+WOLF_PTR_TYPEDEFS(SensorGPSFix);
+
 class SensorGPSFix : public SensorBase
 {
     public:
diff --git a/src/sensor_imu.h b/src/sensor_imu.h
index cb78f919b9bab6faf9c9523ecd6c7ba8e6b2b4d6..c81d1047dd00fe97bf5bf13f766ad7ae9d9eb9e1 100644
--- a/src/sensor_imu.h
+++ b/src/sensor_imu.h
@@ -11,6 +11,7 @@ struct IntrinsicsIMU : public IntrinsicsBase
         // add IMU parameters here
 };
 
+WOLF_PTR_TYPEDEFS(SensorIMU);
 
 class SensorIMU : public SensorBase
 {
diff --git a/src/sensor_laser_2D.cpp b/src/sensor_laser_2D.cpp
index c0e4a1f62cf58b0998c6f87dffb1bddb1eb77a64..28b74f04136f9dbacd965b162d83443c4aae07bb 100644
--- a/src/sensor_laser_2D.cpp
+++ b/src/sensor_laser_2D.cpp
@@ -61,7 +61,7 @@ SensorBasePtr SensorLaser2D::create(const std::string& _unique_name, const Eigen
     StateBlockPtr ori_ptr = std::make_shared<StateBlock>(_extrinsics_po.tail(1), true);
     // cast intrinsics into derived type
     IntrinsicsLaser2D::Ptr params = std::static_pointer_cast<IntrinsicsLaser2D>(_intrinsics);
-    SensorLaser2D::Ptr sen = std::make_shared<SensorLaser2D>(pos_ptr, ori_ptr, params->scan_params);
+    SensorLaser2DPtr sen = std::make_shared<SensorLaser2D>(pos_ptr, ori_ptr, params->scan_params);
     sen->setName(_unique_name);
     return sen;
 }
diff --git a/src/sensor_laser_2D.h b/src/sensor_laser_2D.h
index 5c606062473aacac26bb83ac44c29cf301e64c3f..65906be99ad1e815b2b8b136b139cfef609172de 100644
--- a/src/sensor_laser_2D.h
+++ b/src/sensor_laser_2D.h
@@ -19,11 +19,10 @@ struct IntrinsicsLaser2D : public IntrinsicsBase
         laserscanutils::LaserScanParams scan_params;
 };
 
+WOLF_PTR_TYPEDEFS(SensorLaser2D);
 
 class SensorLaser2D : public SensorBase
 {
-    public:
-        typedef std::shared_ptr<SensorBase> Ptr;
     protected:
         laserscanutils::LaserScanParams scan_params_;
 
diff --git a/src/sensor_odom_2D.h b/src/sensor_odom_2D.h
index c148bf262da0e04ae7b2d3a39947be2dd17fbb69..6cd2ad3368ab1c4f9c7612512ef63debbc355bfc 100644
--- a/src/sensor_odom_2D.h
+++ b/src/sensor_odom_2D.h
@@ -13,11 +13,10 @@ struct IntrinsicsOdom2D : public IntrinsicsBase
         Scalar k_rot_to_rot; ///< ratio of rotation variance to rotation, for odometry noise calculation
 };
 
+WOLF_PTR_TYPEDEFS(SensorOdom2D);
+
 class SensorOdom2D : public SensorBase
 {
-    public:
-        typedef std::shared_ptr<SensorOdom2D> Ptr;
-
     protected:
         Scalar k_disp_to_disp_; ///< ratio of displacement variance to displacement, for odometry noise calculation
         Scalar k_rot_to_rot_; ///< ratio of rotation variance to rotation, for odometry noise calculation
diff --git a/src/sensor_odom_3D.h b/src/sensor_odom_3D.h
index f77ce2359766866bcb7ca88f616716edb01afa5b..50a7c357f49ce3c5990b382cb31d28f5532cfb60 100644
--- a/src/sensor_odom_3D.h
+++ b/src/sensor_odom_3D.h
@@ -32,11 +32,10 @@ struct IntrinsicsOdom3D : public IntrinsicsBase
         {}
 };
 
+WOLF_PTR_TYPEDEFS(SensorOdom3D);
+
 class SensorOdom3D : public SensorBase
 {
-    public:
-        typedef std::shared_ptr<SensorOdom3D> Ptr;
-
     protected:
         Scalar k_disp_to_disp_; ///< ratio of displacement variance to displacement, for odometry noise calculation
         Scalar k_disp_to_rot_; ///< ratio of displacement variance to rotation, for odometry noise calculation
diff --git a/src/test/gtest_frame_base.cpp b/src/test/gtest_frame_base.cpp
index ef6e14c691ef735de35fdc239f81ca75d3f02b5a..55432ae25e95f16953dcf0b0486b4de2f758b4c0 100644
--- a/src/test/gtest_frame_base.cpp
+++ b/src/test/gtest_frame_base.cpp
@@ -67,7 +67,7 @@ TEST(FrameBase, LinksToTree)
     // Problem with 2 frames and one motion constraint between them
     ProblemPtr P = Problem::create(FRM_PO_2D);
     TrajectoryBasePtr T = P->getTrajectoryPtr();
-    SensorOdom2D::Ptr S = make_shared<SensorOdom2D>(make_shared<StateBlock>(2), make_shared<StateBlock>(1), 1,1);
+    SensorOdom2DPtr S = make_shared<SensorOdom2D>(make_shared<StateBlock>(2), make_shared<StateBlock>(1), 1,1);
     P->getHardwarePtr()->addSensor(S);
     FrameBasePtr F1 = make_shared<FrameBase>(1, make_shared<StateBlock>(2), make_shared<StateBlock>(1));
     T->addFrame(F1);
diff --git a/src/wolf.h b/src/wolf.h
index 28d259f64f40bb5335b84ad20ea627aa61ce32aa..01fca0638ebb0d698b198b1e8fb648822f095b20 100644
--- a/src/wolf.h
+++ b/src/wolf.h
@@ -195,131 +195,81 @@ typedef enum
 //      TYPEDEFS FOR POINTERS, LISTS AND ITERATORS IN THE WOLF TREE
 /////////////////////////////////////////////////////////////////////////
 
-// - forwards for pointers
-class NodeBase;
-class Problem;
-class HardwareBase;
-class SensorBase;
-struct IntrinsicsBase;
-class ProcessorBase;
-class ProcessorMotion;
-struct ProcessorParamsBase;
-class TrajectoryBase;
-class FrameBase;
-class CaptureBase;
-class CaptureMotion;
-class FeatureBase;
-class ConstraintBase;
-class MapBase;
-class LandmarkBase;
-class StateBlock;
-class StateQuaternion;
-class LocalParametrizationBase;
+#define WOLF_PTR_TYPEDEFS(ClassName) \
+        class ClassName; \
+        typedef std::shared_ptr<ClassName>          ClassName##Ptr; \
+        typedef std::shared_ptr<const ClassName>    ClassName##ConstPtr; \
+        typedef std::weak_ptr<ClassName>            ClassName##WPtr;
+
+#define WOLF_LIST_TYPEDEFS(ClassName) \
+        class ClassName; \
+        typedef std::list<ClassName##Ptr>          ClassName##List; \
+        typedef ClassName##List::iterator          ClassName##Iter;
+
 
 // NodeBase
-typedef std::shared_ptr<NodeBase> NodeBasePtr;
-typedef std::shared_ptr<const NodeBase> NodeBaseConstPtr;
-typedef std::weak_ptr<NodeBase> NodeBaseWPtr;
+WOLF_PTR_TYPEDEFS(NodeBase);
 
 // Problem
-typedef std::shared_ptr<Problem> ProblemPtr;
-typedef std::shared_ptr<const Problem> ProblemConstPtr;
-typedef std::weak_ptr<Problem> ProblemWPtr;
+WOLF_PTR_TYPEDEFS(Problem);
 
 // Hardware
-typedef std::shared_ptr<HardwareBase> HardwareBasePtr;
-typedef std::shared_ptr<const HardwareBase> HardwareBaseConstPtr;
-typedef std::weak_ptr<HardwareBase> HardwareBaseWPtr;
+WOLF_PTR_TYPEDEFS(HardwareBase);
 
 // - Sensors
-typedef std::shared_ptr<SensorBase> SensorBasePtr;
-typedef std::shared_ptr<const SensorBase> SensorBaseConstPtr;
-typedef std::weak_ptr<SensorBase> SensorBaseWPtr;
-typedef std::list<SensorBasePtr> SensorBaseList;
-typedef SensorBaseList::iterator SensorBaseIter;
+WOLF_PTR_TYPEDEFS(SensorBase);
+WOLF_LIST_TYPEDEFS(SensorBase);
 
 // - - Intrinsics
+struct IntrinsicsBase;
 typedef std::shared_ptr<IntrinsicsBase> IntrinsicsBasePtr;
 typedef std::shared_ptr<const IntrinsicsBase> IntrinsicsBaseConstPtr;
 
 // - Processors
-typedef std::shared_ptr<ProcessorBase> ProcessorBasePtr;
-typedef std::shared_ptr<const ProcessorBase> ProcessorBaseConstPtr;
-typedef std::weak_ptr<ProcessorBase> ProcessorBaseWPtr;
-typedef std::list<ProcessorBasePtr> ProcessorBaseList;
-typedef ProcessorBaseList::iterator ProcessorBaseIter;
+WOLF_PTR_TYPEDEFS(ProcessorBase);
+WOLF_LIST_TYPEDEFS(ProcessorBase);
 
 // - ProcessorMotion
-typedef std::shared_ptr<ProcessorMotion> ProcessorMotionPtr;
-typedef std::shared_ptr<const ProcessorMotion> ProcessorMotionConstPtr;
-typedef std::weak_ptr<ProcessorMotion> ProcessorMotionWPtr;
+WOLF_PTR_TYPEDEFS(ProcessorMotion);
 
 // - - Processor params
+struct ProcessorParamsBase;
 typedef std::shared_ptr<ProcessorParamsBase> ProcessorParamsBasePtr;
 typedef std::shared_ptr<const ProcessorParamsBase> ProcessorParamsBaseConstPtr;
 
 // Trajectory
-typedef std::shared_ptr<TrajectoryBase> TrajectoryBasePtr;
-typedef std::shared_ptr<const TrajectoryBase> TrajectoryBaseConstPtr;
-typedef std::weak_ptr<TrajectoryBase> TrajectoryBaseWPtr;
+WOLF_PTR_TYPEDEFS(TrajectoryBase);
 
 // - Frame
-typedef std::shared_ptr<FrameBase> FrameBasePtr;
-typedef std::shared_ptr<const FrameBase> FrameBaseConstPtr;
-typedef std::weak_ptr<FrameBase> FrameBaseWPtr;
-typedef std::list<FrameBasePtr> FrameBaseList;
-typedef FrameBaseList::iterator FrameBaseIter;
+WOLF_PTR_TYPEDEFS(FrameBase);
+WOLF_LIST_TYPEDEFS(FrameBase);
 
 // - Capture
-typedef std::shared_ptr<CaptureBase> CaptureBasePtr;
-typedef std::shared_ptr<const CaptureBase> CaptureBaseConstPtr;
-typedef std::weak_ptr<CaptureBase> CaptureBaseWPtr;
-typedef std::list<CaptureBasePtr> CaptureBaseList;
-typedef CaptureBaseList::iterator CaptureBaseIter;
-
-// - CaptureMotion
-typedef std::shared_ptr<CaptureMotion> CaptureMotionPtr;
-typedef std::weak_ptr<CaptureMotion> CaptureMotionWPtr;
+WOLF_PTR_TYPEDEFS(CaptureBase);
+WOLF_LIST_TYPEDEFS(CaptureBase);
 
 // - Feature
-typedef std::shared_ptr<FeatureBase> FeatureBasePtr;
-typedef std::shared_ptr<const FeatureBase> FeatureBaseConstPtr;
-typedef std::weak_ptr<FeatureBase> FeatureBaseWPtr;
-typedef std::list<FeatureBasePtr> FeatureBaseList;
-typedef FeatureBaseList::iterator FeatureBaseIter;
+WOLF_PTR_TYPEDEFS(FeatureBase);
+WOLF_LIST_TYPEDEFS(FeatureBase);
 
 // - Constraint
-typedef std::shared_ptr<ConstraintBase> ConstraintBasePtr;
-typedef std::shared_ptr<const ConstraintBase> ConstraintBaseConstPtr;
-typedef std::weak_ptr<ConstraintBase> ConstraintBaseWPtr;
-typedef std::list<ConstraintBasePtr> ConstraintBaseList;
-typedef ConstraintBaseList::iterator ConstraintBaseIter;
+WOLF_PTR_TYPEDEFS(ConstraintBase);
+WOLF_LIST_TYPEDEFS(ConstraintBase);
 
 // Map
-typedef std::shared_ptr<MapBase> MapBasePtr;
-typedef std::shared_ptr<const MapBase> MapBaseConstPtr;
-typedef std::weak_ptr<MapBase> MapBaseWPtr;
-typedef std::list<MapBasePtr> MapBaseList;
-typedef MapBaseList::iterator MapBaseIter;
+WOLF_PTR_TYPEDEFS(MapBase);
 
 // - Landmark
-typedef std::shared_ptr<LandmarkBase> LandmarkBasePtr;
-typedef std::shared_ptr<const LandmarkBase> LandmarkBaseConstPtr;
-typedef std::weak_ptr<LandmarkBase> LandmarkBaseWPtr;
-typedef std::list<LandmarkBasePtr> LandmarkBaseList;
-typedef LandmarkBaseList::iterator LandmarkBaseIter;
+WOLF_PTR_TYPEDEFS(LandmarkBase);
+WOLF_LIST_TYPEDEFS(LandmarkBase);
 
 // - - State blocks
-typedef std::shared_ptr<StateBlock> StateBlockPtr;
-typedef std::shared_ptr<const StateBlock> StateBlockConstPtr;
-typedef std::weak_ptr<StateBlock> StateBlockWPtr;
-typedef std::list<StateBlockPtr> StateBlockList;
-typedef StateBlockList::iterator StateBlockIter;
-typedef std::shared_ptr<StateQuaternion> StateQuaternionPtr;
+WOLF_PTR_TYPEDEFS(StateBlock);
+WOLF_LIST_TYPEDEFS(StateBlock);
+WOLF_PTR_TYPEDEFS(StateQuaternion);
 
 // - - Local Parametrization
-typedef std::shared_ptr<LocalParametrizationBase> LocalParametrizationBasePtr;
-typedef std::shared_ptr<const LocalParametrizationBase> LocalParametrizationBaseConstPtr;
+WOLF_PTR_TYPEDEFS(LocalParametrizationBase);
 
 
 // ==================================================