diff --git a/Src/Containers/FOctree.hpp b/Src/Containers/FOctree.hpp
index c01c9c191b40dfaef22f958a17d108b8c99d3b67..f91b70e0e1b62a80f576eb621d7be7db42b87d73 100644
--- a/Src/Containers/FOctree.hpp
+++ b/Src/Containers/FOctree.hpp
@@ -259,15 +259,15 @@ public:
      * Please refer to testOctreeIter file to see how it works.
      *
      * @code
-     * FOctree<TestParticle, TestCell, NbLevels, NbSubLevels>::Iterator octreeIterator(&tree); <br>
-     * octreeIterator.gotoBottomLeft(); <br>
-     * for(int idx = 0 ; idx < NbLevels - 1; ++idx ){ <br>
-     *     do{ <br>
-     *         // ...  <br>
-     *     } while(octreeIterator.moveRight()); <br>
-     *     octreeIterator.moveUp(); <br>
-     *     octreeIterator.gotoLeft(); <br>
-     * } <br>
+     * FOctree<TestParticle, TestCell, NbLevels, NbSubLevels>::Iterator octreeIterator(&tree);
+     * octreeIterator.gotoBottomLeft();
+     * for(int idx = 0 ; idx < NbLevels - 1; ++idx ){
+     *     do{
+     *         // ... 
+     *     } while(octreeIterator.moveRight());
+     *     octreeIterator.moveUp();
+     *     octreeIterator.gotoLeft();
+     * }
      * @endcode
      * Remark :
      * It uses the left right limit on each suboctree and their morton index.
@@ -319,6 +319,15 @@ public:
             this->currentLocalIndex = other.currentLocalIndex ;
         }
 
+        /** Move constructor
+         * @param other source iterator to move.
+         */
+        Iterator(Iterator&& other){
+            this->current = other.current ;
+            this->currentLocalLevel = other.currentLocalLevel ;
+            this->currentLocalIndex = other.currentLocalIndex ;
+        }
+
         /** Copy operator
          * @param other source iterator to copy
          * @return this after copy
@@ -330,6 +339,44 @@ public:
             return *this;
         }
 
+        /** \brief Move operator
+         * \param other Object to move.
+         * \return This object after move.
+         */
+        Iterator& operator=(Iterator&& other) {
+            this->current = other.current ;
+            this->currentLocalLevel = other.currentLocalLevel ;
+            this->currentLocalIndex = other.currentLocalIndex ;
+            return *this;
+        }
+
+        /** \brief equality operator
+         *
+         * \param other Iterator to compare to.
+         * \return True if the two oterators are the same, false otherwise.
+         */
+        bool operator==(const Iterator& other) const {
+            // Note C++11 standard, $5.9.4:
+            // If two pointers point to non-static data members of the same
+            // union object, they compare equal (after conversion to void*, if
+            // necessary). If two pointers point to elements of the same array
+            // or one beyond the end of the array, the pointer to the object
+            // with the higher subscript compares higher. 
+            // 
+            // This is why we compare the 'tree' component of the 'current' union
+            return this->current.tree == other.current.tree &&
+                this->currentLocalLevel == other.currentLocalLevel &&
+                this->currentLocalIndex == other.currentLocalIndex ;
+        }
+
+        /** \brief Inequality operator
+         * \param other Iterator to compare to.
+         * \return True if the two oterators are the different, false otherwise.
+         */
+        bool operator!=(const Iterator& other) const {
+            return ! (*this == other);
+        }
+
         /**
          * Move iterator to the top! (level 0 of root suboctree, level 1 of octree)
          * after this function : index = left limit at root level