diff --git a/Src/Containers/FOctree.hpp b/Src/Containers/FOctree.hpp
index 738b4ed92da71ed7db8257035aed5576ee4ce64f..644411a7cfac3500642cec0fb88d0a276bd4c5da 100644
--- a/Src/Containers/FOctree.hpp
+++ b/Src/Containers/FOctree.hpp
@@ -119,6 +119,7 @@ public:
     /** Desctructor */
     virtual ~FOctree() {
         delete [] boxWidthAtLevel;
+        delete root;
     }
 
     /** To get the tree height */
diff --git a/Src/Utils/FSmartPointer.hpp b/Src/Utils/FSmartPointer.hpp
index 7d92032a41990461b9b9dadea914bcbd6b47b461..35fdb695f5df96edcf017f264218c87178cca06e 100644
--- a/Src/Utils/FSmartPointer.hpp
+++ b/Src/Utils/FSmartPointer.hpp
@@ -25,7 +25,7 @@ public:
     }
 
     /** Constructor from the memory pointer */
-    FSmartPointer(ClassType* const inPointer) : pointer(0), counter(0) {
+    explicit FSmartPointer(ClassType* const inPointer) : pointer(0), counter(0) {
         assign(inPointer);
     }
 
@@ -52,9 +52,11 @@ public:
     /** Point to a new pointer, release if needed */
     void assign(ClassType* const inPointer){
         release();
-        pointer = inPointer;
-        counter = new int;
-        (*counter) = 1;
+        if( inPointer ){
+            pointer = inPointer;
+            counter = new int;
+            (*counter) = 1;
+        }
     }
 
     /** Point to a new pointer, release if needed */
@@ -62,16 +64,17 @@ public:
         release();
         pointer = inPointer.pointer;
         counter = inPointer.counter;
-        if(counter) (*counter) = (*counter) + 1;
+        if(counter) (*counter) += 1;
     }
 
     /** Dec counter and Release the memory last */
     void release(){
         if(counter){
-            (*counter) = (*counter) - 1;
+            (*counter) -= 1;
             if( (*counter) == 0 ){
                 if(MemoryType == FSmartArrayMemory) delete[] pointer;
                 else if(MemoryType == FSmartPointerMemory) delete pointer;
+                delete counter;
             }
             pointer = 0;
             counter = 0;