diff --git a/include/dynamic-graph/value.h b/include/dynamic-graph/value.h
index 5630552a50036c2972c891235b981fb1722365f8..471e7805dfa3df0834c6104b9ae2bc5a04ba9380 100644
--- a/include/dynamic-graph/value.h
+++ b/include/dynamic-graph/value.h
@@ -59,6 +59,7 @@ namespace dynamicgraph {
 	NB_TYPES
       };
       ~Value();
+      void deleteValue ();
       explicit Value(const bool& value);
       explicit Value(const unsigned& value);
       explicit Value(const int& value);
diff --git a/src/command/value.cpp b/src/command/value.cpp
index ddb616aeaf0eb12a812e160d1d02aff2b369cabe..bc62d2b89c4f04ec4a6c2945d42bf1801eb96e65 100644
--- a/src/command/value.cpp
+++ b/src/command/value.cpp
@@ -67,7 +67,7 @@ namespace dynamicgraph {
       return value_->matrixValue();
     }
 
-    Value::~Value()
+    void Value::deleteValue ()
     {
       switch(type_) {
       case BOOL:
@@ -98,6 +98,11 @@ namespace dynamicgraph {
       }
     }
 
+    Value::~Value()
+    {
+      deleteValue ();
+    }
+
     Value::Value(const bool& value) : type_(BOOL), value_(new bool(value))
     {
     }
@@ -179,9 +184,9 @@ namespace dynamicgraph {
     Value Value::operator=(const Value& value)
     {
       if (&value != this) {
-	type_ = value.type_;
 	if(value_ != 0x0)
-		delete value_;
+	  deleteValue ();
+	type_ = value.type_;
 	void** ptValue = const_cast<void**>(&value_);
 	*ptValue = copyValue(value);
       }