diff --git a/src/capture_base.h b/src/capture_base.h
index cd195be7fc7ad5a8a2d547344e0cca360013cace..ac99b54e92328ae39b175dc21ec0efab2a4934ff 100644
--- a/src/capture_base.h
+++ b/src/capture_base.h
@@ -38,6 +38,12 @@ class CaptureBase : public NodeLinked<FrameBase, FeatureBase>
 
         CaptureBase(const TimeStamp& _ts, SensorBase* _sensor_ptr, const Eigen::VectorXs& _data, const Eigen::MatrixXs& _data_covariance);
 
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~CaptureBase();
 
         /** \brief Set link to Frame
diff --git a/src/capture_fix.h b/src/capture_fix.h
index 103f9452e146eb3fb6dd642c4a78add0e17be3a5..984abf00c2fbaa043de29d94db6198946d39798f 100644
--- a/src/capture_fix.h
+++ b/src/capture_fix.h
@@ -16,6 +16,11 @@ class CaptureFix : public CaptureBase
 
         CaptureFix(const TimeStamp& _ts, SensorBase* _sensor_ptr, const Eigen::VectorXs& _data, const Eigen::MatrixXs& _data_covariance);
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~CaptureFix();
 
         virtual void processCapture();
diff --git a/src/capture_gps.h b/src/capture_gps.h
index 4aa9d3c96cb917a3fd9a625c380d39fc4137b0de..ca9be411bb3d5177ec57363d7d1cacdbecd835b7 100644
--- a/src/capture_gps.h
+++ b/src/capture_gps.h
@@ -40,7 +40,11 @@ public:
 
     CaptureGPS(const TimeStamp& _ts, SensorBase* _sensor_ptr, const Eigen::VectorXs& _raw_data);
 
-
+    /** \brief Default destructor (not recommended)
+     *
+     * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+     *
+     **/
     virtual ~CaptureGPS();
 
     void processCapture();
diff --git a/src/capture_gps_fix.h b/src/capture_gps_fix.h
index 1a17154a41287073c721c78c67052298d0faba1d..2f8ebd4dda6b7c6c206fb94f43b6abc1ab666f33 100644
--- a/src/capture_gps_fix.h
+++ b/src/capture_gps_fix.h
@@ -18,6 +18,11 @@ class CaptureGPSFix : public CaptureBase
 
         CaptureGPSFix(const TimeStamp& _ts, SensorBase* _sensor_ptr, const Eigen::VectorXs& _data, const Eigen::MatrixXs& _data_covariance);
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~CaptureGPSFix();
 
         virtual void processCapture();
diff --git a/src/capture_laser_2D.h b/src/capture_laser_2D.h
index 95c402510687690e11f5efae515af959a4d3ed40..babf6c1cd50b9840715dc345ec7cf5a8a3f1fc4a 100644
--- a/src/capture_laser_2D.h
+++ b/src/capture_laser_2D.h
@@ -69,10 +69,10 @@ class CaptureLaser2D : public CaptureBase
          **/
         CaptureLaser2D(const TimeStamp & _ts, SensorBase* _sensor_ptr, const std::vector<float>& _ranges, const std::vector<float>& _intensities);
 
-        /** \brief Destructor
-         * 
-         * Destructor
-         * 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
          **/        
         virtual ~CaptureLaser2D();
         
diff --git a/src/capture_motion.h b/src/capture_motion.h
index d272272321eecaa348e6cb39a0ecbde1f968d076..e62f91e4f52cef2d032fd0589c24e22b14894205 100644
--- a/src/capture_motion.h
+++ b/src/capture_motion.h
@@ -22,6 +22,11 @@ class CaptureMotion : public CaptureBase
 
         CaptureMotion(const TimeStamp& _init_ts, const TimeStamp& _final_ts, SensorBase* _sensor_ptr, const Eigen::VectorXs& _data, const Eigen::MatrixXs& _data_covariance);
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~CaptureMotion();
 
         virtual void integrateCapture(CaptureMotion* _new_capture) = 0;
diff --git a/src/capture_odom_2D.h b/src/capture_odom_2D.h
index d53d8677ed9eeb0b18f825efa66d51aeec04931b..c3a5d8c9b81218c78ca93bf49f64ef4fbe41a65d 100644
--- a/src/capture_odom_2D.h
+++ b/src/capture_odom_2D.h
@@ -20,7 +20,12 @@ class CaptureOdom2D : public CaptureMotion
       CaptureOdom2D(const TimeStamp& _init_ts, const TimeStamp& _final_ts, SensorBase* _sensor_ptr, const Eigen::Vector3s& _data);
 
       CaptureOdom2D(const TimeStamp& _init_ts, const TimeStamp& _final_ts, SensorBase* _sensor_ptr, const Eigen::Vector3s& _data, const Eigen::Matrix3s& _data_covariance);
-        
+
+      /** \brief Default destructor (not recommended)
+       *
+       * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+       *
+       **/
       virtual ~CaptureOdom2D();
 
       virtual void processCapture();
diff --git a/src/capture_void.h b/src/capture_void.h
index da96557ebd79489fc735068e42cd0b62ec8c70b9..1de4522e5871a09d7e55342284f099627e799441 100644
--- a/src/capture_void.h
+++ b/src/capture_void.h
@@ -10,6 +10,11 @@ class CaptureVoid : public CaptureBase
     public:
         CaptureVoid(const TimeStamp& _ts, SensorBase* _sensor_ptr);
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~CaptureVoid();
 
         virtual Eigen::VectorXs computePrior(const TimeStamp& _now) const;
diff --git a/src/constraint_base.cpp b/src/constraint_base.cpp
index 31d31c97c886ba3f47d5a72820ab77882e6a9c8b..b3110fcffb94eacb6ec3ede052885afd65ada4db 100644
--- a/src/constraint_base.cpp
+++ b/src/constraint_base.cpp
@@ -70,12 +70,6 @@ ConstraintBase::~ConstraintBase()
         landmark_ptr_->removeConstraintTo(this);
 }
 
-//void ConstraintBase::destruct()
-//{
-//    if (!is_deleting_)
-//        up_node_ptr_->removeDownNode(this);
-//}
-
 ConstraintType ConstraintBase::getType() const
 {
     return type_;
diff --git a/src/constraint_base.h b/src/constraint_base.h
index c59fd6413fe3c82c95c3511643a33b3597b3cd98..fa41df4eb539a2640a724118ab679efdb87faa08 100644
--- a/src/constraint_base.h
+++ b/src/constraint_base.h
@@ -55,20 +55,13 @@ class ConstraintBase : public NodeLinked<FeatureBase, NodeTerminus>
          **/
         ConstraintBase(ConstraintType _tp, LandmarkBase* _landmark_ptr, ConstraintStatus _status);
 
-        /** \brief Destructor
-         * 
-         * Destructor
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          * 
          **/
         virtual ~ConstraintBase();
 
-        /** \brief Destructor call if is not already deleting
-         *
-         * Destructor call if is not already deleting
-         *
-         */
-        //virtual void destruct();
-
         /** \brief Returns the constraint type
          * 
          * Returns the constraint type
diff --git a/src/constraint_container.h b/src/constraint_container.h
index bfedc48f3744cea0d879857dd56f10d94fb10f0e..dd45e22fc745ec8036400be795f8aa8c55a45813 100644
--- a/src/constraint_container.h
+++ b/src/constraint_container.h
@@ -23,7 +23,12 @@ class ConstraintContainer: public ConstraintSparse<3,2,1,2,1>
             assert(_corner >= 0 && _corner <= 3 && "Wrong corner id in constraint container constructor");
             lmk_ptr_->addConstraintTo(this);
 		}
-        
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
 		virtual ~ConstraintContainer()
 		{
 			//std::cout << "deleting ConstraintContainer " << nodeId() << std::endl;
diff --git a/src/constraint_corner_2D.h b/src/constraint_corner_2D.h
index 9f5c2c478841f01c4b1fb6e24e897b4e40a12dc6..d603f91655203a1d5faa4fae8f3fd8d28f754b95 100644
--- a/src/constraint_corner_2D.h
+++ b/src/constraint_corner_2D.h
@@ -16,7 +16,12 @@ class ConstraintCorner2D: public ConstraintSparse<3,2,1,2,1>
 		{
 		    landmark_ptr_->addConstraintTo(this);
 		}
-        
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
 		virtual ~ConstraintCorner2D()
 		{
 			//std::cout << "deleting ConstraintCorner2D " << nodeId() << std::endl;
diff --git a/src/constraint_fix.h b/src/constraint_fix.h
index a254a9d81bc8dec847591113b2c40e1deee5e7aa..fef49f4b9b768cf193be59ffb4d5d5512d1eae69 100644
--- a/src/constraint_fix.h
+++ b/src/constraint_fix.h
@@ -16,7 +16,12 @@ class ConstraintFix: public ConstraintSparse<3,2,1>
 		{
 		    //std::cout << "creating ConstraintFix " << std::endl;
 		}
-        
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
 		virtual ~ConstraintFix()
 		{
 			//
diff --git a/src/constraint_gps_2D.h b/src/constraint_gps_2D.h
index 777496bda0379ead5ea4610065d5b01d3166ad92..0740930053aca9da527b7792cff6b0eaf43f2ac9 100644
--- a/src/constraint_gps_2D.h
+++ b/src/constraint_gps_2D.h
@@ -16,7 +16,12 @@ class ConstraintGPS2D: public ConstraintSparse<2,2>
 		{
 			//
 		}
-        
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
 		virtual ~ConstraintGPS2D()
 		{
 			//
diff --git a/src/constraint_gps_pseudorange.h b/src/constraint_gps_pseudorange.h
index 8a8b1e2324f445205dc5af16ceb6c71568f0ee9f..afb698c0862a9cb017429bd14cf1a2fe34d7243e 100644
--- a/src/constraint_gps_pseudorange.h
+++ b/src/constraint_gps_pseudorange.h
@@ -26,6 +26,11 @@ public:
         createConstraint((FeatureGPSPseudorange*) _ftr_ptr);
     }
 
+    /** \brief Default destructor (not recommended)
+     *
+     * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+     *
+     **/
     virtual ~ConstraintGPSPseudorange()
     {
 
diff --git a/src/constraint_odom_2D.h b/src/constraint_odom_2D.h
index 69fc4f1f4d880f66189cac7697ff78a51cf885ef..312d55c3e39b8f592d3dcaa95753b70e4ee875d3 100644
--- a/src/constraint_odom_2D.h
+++ b/src/constraint_odom_2D.h
@@ -16,6 +16,11 @@ class ConstraintOdom2D : public ConstraintSparse<3, 2, 1, 2, 1>
             //
         }
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~ConstraintOdom2D()
         {
             //
diff --git a/src/constraint_sparse.h b/src/constraint_sparse.h
index a00aa5bf42c844b8bc57d9977aea68a6199a6822..e1918b355b290b7b3646b5dcba4b3e8170c1121c 100644
--- a/src/constraint_sparse.h
+++ b/src/constraint_sparse.h
@@ -106,9 +106,9 @@ class ConstraintSparse: public ConstraintBase
                          StateBlock* _state8Ptr = nullptr,
                          StateBlock* _state9Ptr = nullptr ) ;
 
-        /** \brief Destructor
-         * 
-         * Destructor
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          * 
          **/        
         virtual ~ConstraintSparse();
diff --git a/src/examples/test_wolf_imported_graph.cpp b/src/examples/test_wolf_imported_graph.cpp
index 41f1f79f266975d536d462b00d2ed97d69b3ef97..33380ff31ce7e2946b80dfb7b454ee198e38d218 100644
--- a/src/examples/test_wolf_imported_graph.cpp
+++ b/src/examples/test_wolf_imported_graph.cpp
@@ -48,7 +48,7 @@ int main(int argc, char** argv)
     unsigned int MAX_VERTEX = atoi(argv[2]);
     if (MAX_VERTEX == 0) MAX_VERTEX = 1e6;
     std::ifstream offLineFile_;
-    clock_t t1, t2;
+    clock_t t1;
     ceres::Solver::Summary summary_full, summary_prun;
     Eigen::MatrixXs Sigma_ii(3,3), Sigma_ij(3,3), Sigma_jj(3,3), Sigma_z(3,3), Ji(3,3), Jj(3,3);
     WolfScalar xi, yi, thi, si, ci, xj, yj;
diff --git a/src/feature_base.h b/src/feature_base.h
index d541679b23e05efc21e53b2cf74f1902bd5b0398..fd41174bbc0a765afd7c32ff14ec3d560f76f110 100644
--- a/src/feature_base.h
+++ b/src/feature_base.h
@@ -37,9 +37,9 @@ class FeatureBase : public NodeLinked<CaptureBase,ConstraintBase>
          */
         FeatureBase(const Eigen::VectorXs& _measurement, const Eigen::MatrixXs& _meas_covariance);
 
-        /** \brief Destructor
+        /** \brief Default destructor (not recommended)
          *
-         * Destructor
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          *
          */
         virtual ~FeatureBase();
diff --git a/src/feature_corner_2D.h b/src/feature_corner_2D.h
index 5de276c478e061f3dad626cae62de0c1cabfa46b..8c9cd7a76841b414d54145c643851a9cdb5d1d6d 100644
--- a/src/feature_corner_2D.h
+++ b/src/feature_corner_2D.h
@@ -17,9 +17,9 @@ class FeatureCorner2D : public FeatureBase
          */
         FeatureCorner2D(const Eigen::Vector4s & _measurement, const Eigen::Matrix4s & _meas_covariance); //TODO: add const WolfScalar& aperture);
 
-        /** \brief Destructor 
-         * 
-         * destructor
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          *
          */        
         virtual ~FeatureCorner2D();
diff --git a/src/feature_fix.h b/src/feature_fix.h
index 122d816fed0e3508595067d83d43a986d212e958..8d1bf068b948419621226069f598643e8b22e2d2 100644
--- a/src/feature_fix.h
+++ b/src/feature_fix.h
@@ -19,6 +19,11 @@ class FeatureFix : public FeatureBase
          */
         FeatureFix(const Eigen::VectorXs& _measurement, const Eigen::MatrixXs& _meas_covariance);
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~FeatureFix();
 };
 #endif
diff --git a/src/feature_gps_fix.h b/src/feature_gps_fix.h
index 9e7228548470e2977f4750d87fee38e788abfc52..e59982f206f49c6142a8b74d87dfa156a0d06178 100644
--- a/src/feature_gps_fix.h
+++ b/src/feature_gps_fix.h
@@ -26,6 +26,11 @@ class FeatureGPSFix : public FeatureBase
          */
         FeatureGPSFix(const Eigen::VectorXs& _measurement, const Eigen::MatrixXs& _meas_covariance);
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~FeatureGPSFix();
 };
 #endif
diff --git a/src/feature_gps_pseudorange.h b/src/feature_gps_pseudorange.h
index 97a614e893cafd4b635cadaf7f38bd178c6b2f64..891ef0643b9c2cca6f7975cbe42dd1a4303253e4 100644
--- a/src/feature_gps_pseudorange.h
+++ b/src/feature_gps_pseudorange.h
@@ -43,6 +43,11 @@ public:
 
     FeatureGPSPseudorange(const WolfScalar &_satellite_data);
 
+    /** \brief Default destructor (not recommended)
+     *
+     * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+     *
+     **/
     virtual ~FeatureGPSPseudorange();
 
 
diff --git a/src/feature_odom_2D.h b/src/feature_odom_2D.h
index b220c8b3c751527766e54073a242bc555c1faa0a..d8ba3a6aa06aa057792a1f702558df436f7202ac 100644
--- a/src/feature_odom_2D.h
+++ b/src/feature_odom_2D.h
@@ -26,6 +26,11 @@ class FeatureOdom2D : public FeatureBase
          */
         FeatureOdom2D(const Eigen::VectorXs& _measurement, const Eigen::MatrixXs& _meas_covariance);
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~FeatureOdom2D();
 
         /** \brief Generic interface to find constraints
diff --git a/src/frame_base.cpp b/src/frame_base.cpp
index 4a717f7bbea8eae9cd0a1ebcd5fdc580685fdd4d..d3ae71cb3cd1486c08a608f49253ce489db128a7 100644
--- a/src/frame_base.cpp
+++ b/src/frame_base.cpp
@@ -51,12 +51,6 @@ FrameBase::~FrameBase()
     //std::cout << "constraints deleted" << std::endl;
 }
 
-//void FrameBase::destruct()
-//{
-//    if (!is_deleting_)
-//        up_node_ptr_->removeDownNode(this);
-//}
-
 void FrameBase::addConstraintTo(ConstraintBase* _ctr_ptr)
 {
     constraint_to_list_.push_back(_ctr_ptr);
diff --git a/src/frame_base.h b/src/frame_base.h
index 71d596a5315238615e9adbfbeb3e0d347840ee0d..7c69726976c76e5c316853b22e1eea333d1c0b36 100644
--- a/src/frame_base.h
+++ b/src/frame_base.h
@@ -52,21 +52,14 @@ class FrameBase : public NodeLinked<TrajectoryBase,CaptureBase>
          * 
          **/        
         FrameBase(const FrameType & _tp, const TimeStamp& _ts, StateBlock* _p_ptr, StateBlock* _o_ptr = nullptr);
-        
-        /** \brief Destructor
-         * 
-         * Destructor
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          * 
          **/
         virtual ~FrameBase();
 
-        /** \brief Destructor call if is not already deleting
-         *
-         * Destructor call if is not already deleting
-         *
-         */
-        //virtual void destruct();
-
         /** \brief Link with a constraint
          *
          * Link with a constraint
diff --git a/src/hardware_base.h b/src/hardware_base.h
index 99556845ddaa45c5965c714fe31b2a77e61a7323..b5868996b4cd6597959d600003d4cdf7cea6546e 100644
--- a/src/hardware_base.h
+++ b/src/hardware_base.h
@@ -20,9 +20,9 @@ class HardwareBase : public NodeLinked<WolfProblem,SensorBase>
          **/
 		HardwareBase();
 
-        /** \brief Destructor
+        /** \brief Default destructor (not recommended)
          *
-         * Destructor
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          *
          **/        
         ~HardwareBase();
diff --git a/src/landmark_base.cpp b/src/landmark_base.cpp
index a52f79cc608c4124ca9ffe40e7421624f4f06387..de4fea69e4631f7d877a23f0fbe753f871d584fb 100644
--- a/src/landmark_base.cpp
+++ b/src/landmark_base.cpp
@@ -39,12 +39,6 @@ LandmarkBase::~LandmarkBase()
 	//std::cout << "constraints deleted" << std::endl;
 }
 
-//void LandmarkBase::destruct()
-//{
-//    if (!is_deleting_)
-//        up_node_ptr_->removeDownNode(this);
-//}
-
 void LandmarkBase::addConstraintTo(ConstraintBase* _ctr_ptr)
 {
     constraint_to_list_.push_back(_ctr_ptr);
diff --git a/src/landmark_base.h b/src/landmark_base.h
index de18a044abb1933017a687e4639388f134e47eee..4b73d8dbd99b38f9a5b313162a5c714559be139b 100644
--- a/src/landmark_base.h
+++ b/src/landmark_base.h
@@ -45,20 +45,13 @@ class LandmarkBase : public NodeLinked<MapBase, NodeTerminus>
          **/
         LandmarkBase(const LandmarkType & _tp, StateBlock* _p_ptr, StateBlock* _o_ptr = nullptr);
 
-        /** \brief Destructor
+        /** \brief Default destructor (not recommended)
          *
-         * Destructor
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          *
          **/
         virtual ~LandmarkBase();
 
-        /** \brief Destructor call if is not already deleting
-         *
-         * Destructor call if is not already deleting
-         *
-         */
-        //virtual void destruct();
-
         /** \brief Link with a constraint
          *
          * Link with a constraint
diff --git a/src/landmark_container.h b/src/landmark_container.h
index d02b3158afeadf5d4c6a19ad809619eb488e0632..46f766f02ea1a877eff0389ea06aa450bd7e29d3 100644
--- a/src/landmark_container.h
+++ b/src/landmark_container.h
@@ -62,9 +62,9 @@ class LandmarkContainer : public LandmarkBase
          **/
 		LandmarkContainer(StateBlock* _p_ptr, StateBlock* _o_ptr, LandmarkCorner2D* _corner_A_ptr, LandmarkCorner2D* _corner_B_ptr, LandmarkCorner2D* _corner_C_ptr, LandmarkCorner2D* _corner_D_ptr, const WolfScalar& _witdh=2.44, const WolfScalar& _length=12.2);
 
-        /** \brief Destructor
-         * 
-         * Destructor
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          * 
          **/
         virtual ~LandmarkContainer();
diff --git a/src/landmark_corner_2D.h b/src/landmark_corner_2D.h
index 5e3e7d24099ee4f1f7e7cc39e8b7d16eb23ae1f8..0707edbe5e3c877c8fdaf6790d9bbcbe823884ea 100644
--- a/src/landmark_corner_2D.h
+++ b/src/landmark_corner_2D.h
@@ -28,10 +28,10 @@ class LandmarkCorner2D : public LandmarkBase
          *
          **/
 		LandmarkCorner2D(StateBlock* _p_ptr, StateBlock* _o_ptr, const WolfScalar& _aperture=0);
-        
-        /** \brief Destructor
-         * 
-         * Destructor
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          * 
          **/
         virtual ~LandmarkCorner2D();
diff --git a/src/map_base.h b/src/map_base.h
index 2acbb034ad398c480db070974eabc5bf6ad57ae8..d65a628c433c2064f8fbbd6550c7aa89bd43ad59 100644
--- a/src/map_base.h
+++ b/src/map_base.h
@@ -30,9 +30,9 @@ class MapBase : public NodeLinked<WolfProblem,LandmarkBase>
          **/
 		MapBase();
 
-        /** \brief Destructor
+        /** \brief Default destructor (not recommended)
          *
-         * Destructor
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          *
          **/        
         ~MapBase();
diff --git a/src/node_linked.h b/src/node_linked.h
index 16b0c150e6eb5244d4974de72730233ce2727599..28e2de3c5cab6a2bf76cf8c4bedd038374212a49 100644
--- a/src/node_linked.h
+++ b/src/node_linked.h
@@ -58,9 +58,9 @@ class NodeLinked : public NodeBase
          */
         NodeLinked(const NodeLocation _loc, const std::string& _label);
 
-        /** \brief Default destructor
+        /** \brief Default destructor (not recommended)
          *
-         * Default destructor
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
 		 * 
          */		
         virtual ~NodeLinked();
diff --git a/src/sensor_base.h b/src/sensor_base.h
index 507fc63302274ba0beb3823c2444b57de4ccd2cf..399691b06e4ea379c52a22f646f447a4f75b5a7b 100644
--- a/src/sensor_base.h
+++ b/src/sensor_base.h
@@ -61,6 +61,11 @@ class SensorBase : public NodeLinked<HardwareBase,NodeTerminus>
 //         **/
 //        SensorBase(const SensorType & _tp, StateBlock* _p_ptr, StateBlock* _o_ptr, unsigned int _params_size, const bool _extr_dyn = false);
 
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+         *
+         **/
         virtual ~SensorBase();
 
 //        const SensorType getSensorType() const;
diff --git a/src/sensor_gps.h b/src/sensor_gps.h
index 7222413ff5120bc1e5b1b3626763af52a67016ee..ca459c1f9c531ce139cfb5799e3c5c0610b9f24c 100644
--- a/src/sensor_gps.h
+++ b/src/sensor_gps.h
@@ -29,6 +29,11 @@ public:
     //pointer to sensor position and orientation.
     SensorGPS(StateBlock *_p_ptr, StateBlock *_o_ptr, StateBlock* _bias_ptr);
 
+    /** \brief Default destructor (not recommended)
+     *
+     * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
+     *
+     **/
     virtual ~SensorGPS();
 
 
diff --git a/src/sensor_gps_fix.h b/src/sensor_gps_fix.h
index 2a45bf05cdc6a6005fee20fe8f50f6adf7fc9f6c..8a300fbe918e7454f7a903b5128c5213f56489e9 100644
--- a/src/sensor_gps_fix.h
+++ b/src/sensor_gps_fix.h
@@ -17,10 +17,10 @@ class SensorGPSFix : public SensorBase
          * 
          **/
 		SensorGPSFix(StateBlock* _p_ptr, StateBlock* _o_ptr, const double& _noise);
-        
-        /** \brief Destructor
-         * 
-         * Destructor
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          * 
          **/
         virtual ~SensorGPSFix();
diff --git a/src/sensor_laser_2D.h b/src/sensor_laser_2D.h
index 076648fda283f34657eae503693b6e7c40afc648..8ab58ee4874b8466635fbad8775cc345beab40fd 100644
--- a/src/sensor_laser_2D.h
+++ b/src/sensor_laser_2D.h
@@ -31,9 +31,9 @@ class SensorLaser2D : public SensorBase
         SensorLaser2D(StateBlock* _p_ptr, StateBlock* _o_ptr);
         //SensorLaser2D(const Eigen::VectorXs & _sp, const laserscanutils::ScanParams & _params);
 
-        /** \brief Destructor
-         * 
-         * Destructor
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          * 
          **/
         virtual ~SensorLaser2D();
diff --git a/src/sensor_odom_2D.h b/src/sensor_odom_2D.h
index 65be03c8ce0e2b87145b700e9a873d9629265636..e823f939892faa92c57fcb4952829c09078a5672 100644
--- a/src/sensor_odom_2D.h
+++ b/src/sensor_odom_2D.h
@@ -19,10 +19,10 @@ class SensorOdom2D : public SensorBase
          * 
          **/
 		SensorOdom2D(StateBlock* _p_ptr, StateBlock* _o_ptr, const WolfScalar& _disp_noise_factor, const WolfScalar&  _rot_noise_factor);
-        
-        /** \brief Destructor
-         * 
-         * Destructor
+
+        /** \brief Default destructor (not recommended)
+         *
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          * 
          **/
         virtual ~SensorOdom2D();
diff --git a/src/trajectory_base.h b/src/trajectory_base.h
index c041bcd895599baf90a92cab8bacec56bd18a221..5f191ddc2bb880e9fd9cd1ac18379dba97b259b8 100644
--- a/src/trajectory_base.h
+++ b/src/trajectory_base.h
@@ -35,9 +35,9 @@ class TrajectoryBase : public NodeLinked<WolfProblem,FrameBase>
          **/
         TrajectoryBase();
 
-        /** \brief Destructor
+        /** \brief Default destructor (not recommended)
          *
-         * Destructor
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
          *
          **/        
         ~TrajectoryBase();
diff --git a/src/wolf_manager.cpp b/src/wolf_manager.cpp
index e905ef397ed5902cbc6dcf2dffff2535df850a58..66f18271766db9e51918500144c7c7b476c5f97b 100644
--- a/src/wolf_manager.cpp
+++ b/src/wolf_manager.cpp
@@ -51,7 +51,7 @@ WolfManager::WolfManager(const FrameStructure _frame_structure,
 
 WolfManager::~WolfManager()
 {
-    std::cout << "deleting wolf manager..." << std::endl;
+    //std::cout << "deleting wolf manager..." << std::endl;
     delete problem_;
 }
 
diff --git a/src/wolf_problem.cpp b/src/wolf_problem.cpp
index c185cfe31f73d7975ac8fd704e957bde97e83359..61cc63d5f855d633081c2ade0f31d2522b0a4416 100644
--- a/src/wolf_problem.cpp
+++ b/src/wolf_problem.cpp
@@ -26,7 +26,7 @@ WolfProblem::WolfProblem(TrajectoryBase* _trajectory_ptr, MapBase* _map_ptr, Har
 
 WolfProblem::~WolfProblem()
 {
-    std::cout << "deleting wolf problem " << nodeId() << std::endl;
+    //std::cout << "deleting wolf problem " << nodeId() << std::endl;
     state_block_add_list_.clear();
     covariances_.clear();
     state_block_update_list_.clear();
@@ -39,6 +39,11 @@ WolfProblem::~WolfProblem()
     hardware_ptr_->destruct();
 }
 
+void WolfProblem::destruct()
+{
+    delete this;
+}
+
 void WolfProblem::addStateBlockPtr(StateBlock* _state_ptr)
 {
 	// add the state unit to the list
diff --git a/src/wolf_problem.h b/src/wolf_problem.h
index e2b4fb9490734d90ddfa77f7426c2c800d9929ce..8c632c8fd8879f2e223ab280a769bfb6a48740b9 100644
--- a/src/wolf_problem.h
+++ b/src/wolf_problem.h
@@ -55,13 +55,20 @@ class WolfProblem: public NodeBase
 		 */
         WolfProblem(TrajectoryBase* _trajectory_ptr, MapBase* _map_ptr=nullptr, HardwareBase* _hardware_ptr=nullptr);
 
-        /** \brief Default destructor
+        /** \brief Default destructor (not recommended)
          *
-         * Default destructor
+         * Default destructor (please use destruct() instead of delete for guaranteeing the wolf tree integrity)
 		 * 
          */		
         virtual ~WolfProblem();
 
+        /** \brief Wolf destructor
+         *
+         * Wolf destructor (please use it instead of delete for guaranteeing the wolf tree integrity)
+         *
+         */
+        virtual void destruct() final;
+
         /** \brief Adds a new state block to be added to solver manager
 		 *
 		 * Adds a new state block to be added to solver manager