diff --git a/src/capture_base.cpp b/src/capture_base.cpp
index 1cceb9197f5d6f119463160fd568c0767ce78faa..24f54d1e2efbf2aac83427a1776e807f27686c48 100644
--- a/src/capture_base.cpp
+++ b/src/capture_base.cpp
@@ -26,7 +26,7 @@ CaptureBase::~CaptureBase()
     is_deleting_ = true;
     while (!feature_list_.empty())
     {
-        delete feature_list_.front();
+        feature_list_.front()->destruct();
         feature_list_.pop_front();
     }
 }
diff --git a/src/examples/test_processor_odom_3D.cpp b/src/examples/test_processor_odom_3D.cpp
index da3511e90a046a781fb9ca218cafdccec36ddfce..9dbc7cf2662751853ddba30da57663a66e4befd5 100644
--- a/src/examples/test_processor_odom_3D.cpp
+++ b/src/examples/test_processor_odom_3D.cpp
@@ -106,15 +106,16 @@ int main (int argc, char** argv)
 
     Scalar dt = 0.1;
 
+    CaptureMotion* cap_odo = new CaptureMotion(TimeStamp(0), sen, data);
+
     cout << "t: " << 0 << "  \t\t\t x = ( " << problem->getCurrentState().transpose() << ")" << endl;
     print(problem);
     cout << "--------------------------------------------------------------" << endl;
 
     for (TimeStamp t = dt; t < tf - Constants::EPS; t += dt)
     {
-
-        CaptureMotion* cap_odo = new CaptureMotion(t, sen, data);
-
+        cap_odo->setTimeStamp(t);
+        cap_odo->setData(data);
         cap_odo->process();
 
         cout << "t: " << t.get() << "  \t\t x = ( " << problem->getCurrentState().transpose() << ")" << endl;
diff --git a/src/feature_base.cpp b/src/feature_base.cpp
index 4b49c9dd76048d62bd3a158f7895d91dfe209043..4fb1db87f1256a23abd9cb6976b1665dee977bde 100644
--- a/src/feature_base.cpp
+++ b/src/feature_base.cpp
@@ -51,7 +51,7 @@ FeatureBase::~FeatureBase()
 
     while (!constraint_list_.empty())
     {
-        delete constraint_list_.front();
+        constraint_list_.front()->destruct();
         constraint_list_.pop_front();
     }
 
diff --git a/src/frame_base.cpp b/src/frame_base.cpp
index 910d64ff558b8545568c58126ffb096e9972b268..af86a010ca4a650f9b1a3743118db47f8f1d9648 100644
--- a/src/frame_base.cpp
+++ b/src/frame_base.cpp
@@ -76,7 +76,7 @@ FrameBase::~FrameBase()
 
     while (!capture_list_.empty())
     {
-        delete capture_list_.front();
+        capture_list_.front()->destruct();
         capture_list_.pop_front();
     }
 
diff --git a/src/frame_base.h b/src/frame_base.h
index 5317e643e45751e348c96350dc7f0b504395dc3b..be960ba39d46dfcdc8788568a989ba4d5446589d 100644
--- a/src/frame_base.h
+++ b/src/frame_base.h
@@ -234,14 +234,14 @@ inline void FrameBase::removeCapture(const CaptureBaseIter& _capt_iter)
 {
     //std::cout << "removing capture " << (*_capt_iter)->nodeId() << " from Frame " << nodeId() << std::endl;
     capture_list_.erase(_capt_iter);
-    delete *_capt_iter;
+    //delete *_capt_iter;
 }
 
 inline void FrameBase::removeCapture(const CaptureBasePtr _capt_ptr)
 {
     //std::cout << "removing capture " << (*_capt_iter)->nodeId() << " from Frame " << nodeId() << std::endl;
     capture_list_.remove(_capt_ptr);
-    delete _capt_ptr;
+    //delete _capt_ptr;
 }
 
 inline StateStatus FrameBase::getStatus() const
diff --git a/src/hardware_base.cpp b/src/hardware_base.cpp
index 0b9c3fef9c9af7feb465a2f7a47d17e16e28990e..221d824cecba9e3dbc41f75b58182892150eb6f6 100644
--- a/src/hardware_base.cpp
+++ b/src/hardware_base.cpp
@@ -38,7 +38,7 @@ SensorBasePtr HardwareBase::addSensor(SensorBasePtr _sensor_ptr)
 void HardwareBase::removeSensor(SensorBasePtr _sensor_ptr)
 {
     sensor_list_.remove(_sensor_ptr);
-    delete _sensor_ptr;
+//    delete _sensor_ptr;
 }
 
 } // namespace wolf
diff --git a/src/hardware_base.h b/src/hardware_base.h
index 663f62c2596f47dbb0c1b3e289a60700f6be6a99..410157e8c600d65939bbb9dd1dc7b96b0af109a1 100644
--- a/src/hardware_base.h
+++ b/src/hardware_base.h
@@ -55,7 +55,7 @@ namespace wolf {
 inline void HardwareBase::removeSensor(const SensorBaseIter& _sensor_iter)
 {
     sensor_list_.erase(_sensor_iter);
-    delete * _sensor_iter;
+//    delete * _sensor_iter;
 //    removeDownNode(_sensor_iter);
 }
 
diff --git a/src/landmark_base.cpp b/src/landmark_base.cpp
index 52a35b92831f81305cf17504e6ffa32a539755a5..3516fb855641fea701924dca79ababc3b51e7d8d 100644
--- a/src/landmark_base.cpp
+++ b/src/landmark_base.cpp
@@ -46,6 +46,7 @@ LandmarkBase::~LandmarkBase()
 	{
 	    //std::cout << "destruct() constraint " << (*constrained_by_list_.begin())->nodeId() << std::endl;
 	    constrained_by_list_.front()->destruct();
+	    constrained_by_list_.pop_front();
         //std::cout << "deleted " << std::endl;
 	}
 	//std::cout << "constraints deleted" << std::endl;