diff --git a/rsiTurtle.lua b/rsiTurtle.lua
index cda152317dca582fc98c8fd28fab9d2856c70452..581f9bcdeb2e40e01d7dc9a9dbc65bf839d12e7e 100644
--- a/rsiTurtle.lua
+++ b/rsiTurtle.lua
@@ -106,18 +106,36 @@ end
 ---
 -- \brief Déplacement parallèle au sol
 --        Ordre de déplacement: X, Z
+-- \param int       dx          Déplacement vers l'avant (+) ou l'arrière (-)
+-- \param int       dz          Déplacement vers la gauche (-) ou la droite (+)
+-- \param bool      grounded    Se déplacer en restant toujours au niveau du sol
 -- \return bool Succès
-function RSI_Turtle:move2D(dx, dz)
+function RSI_Turtle:move2D(dx, dz, grounded)
     local success = true
 
+    if(grounded)
+    then
+        self:ground()
+    end
+
     if dx >= 0
     then
         self:face(12)
-        success = self:moveForward(dx)
+        if(grounded)
+        then
+            success = self:moveForwardGrounded(dx)
+        else
+            success = self:moveForward(dx)
+        end
     elseif dx < 0
     then
         self:face(6)
-        success = self:moveForward(-1*dx)
+        if(grounded)
+        then
+            success = self:moveForwardGrounded(-1*dx)
+        else
+            success = self:moveForward(-1*dx)
+        end
     end
 
     if not success
@@ -190,33 +208,15 @@ end
 -- \param distance Distance à parcourir
 -- \return bool Succès
 function RSI_Turtle:moveForwardGrounded(distance)
-    local traveled = 0
-
-    self:ground()
-    while (traveled < distance) and turtle.forward()
-    do
-        self:ground()
-        self:climb()
-        traveled = traveled + 1
-    end
-
-    if self.facing_ == 0 then
-        self.pos_["x"] = self.pos_["x"] + traveled
-    elseif self.facing_ == 3 then
-        self.pos_["z"] = self.pos_["z"] + traveled
-    elseif self.facing_ == 6 then
-        self.pos_["x"] = self.pos_["x"] - traveled
-    elseif self.facing_ == 9 then
-        self.pos_["z"] = self.pos_["z"] - traveled
-    end
-
-    return (traveled == distance)
+    return self:moveForward(distance, true)
 end
 
 
 ---
 -- \brief Déplacement s'assurant de rester au niveau du sol
 -- escalade et descend automatiquement les pentes
+-- \param int       dx          Déplacement vers l'avant (+) ou l'arrière (-)
+-- \param int       dz          Déplacement vers la gauche (-) ou la droite (+)
 -- \return bool Succès
 function RSI_Turtle:moveToGrounded(x, z)
     return self:moveGrounded(x - self.pos_["x"], z - self.pos_["z"])
@@ -226,53 +226,11 @@ end
 ---
 -- \brief Déplacement s'assurant de rester au niveau du sol
 -- escalade et descend automatiquement les pentes
+-- \param int       dx          Déplacement vers l'avant (+) ou l'arrière (-)
+-- \param int       dz          Déplacement vers la gauche (-) ou la droite (+)
 -- \return bool Succès
 function RSI_Turtle:moveGrounded(dx, dz)
-    local success = true
-
-    if dx >= 0
-    then
-        self:face(12)
-        success = self:moveForwardGrounded(dx)
-    elseif dx < 0
-    then
-        self:face(6)
-        success = self:moveForwardGrounded(-1*dx)
-    end
-
-    if not success
-    then
-        return false
-    end
-
-    if (self.facing_ == 0)
-    then
-        if dz < 0
-        then
-            self:turnLeft()
-        elseif dz > 0
-        then
-            self:turnRight()
-        end
-    elseif (self.facing_ == 6)
-    then
-        if dz > 0
-        then
-            self:turnLeft()
-        elseif dz < 0
-        then
-            self:turnRight()
-        end
-    end
-
-    if not success
-    then
-        return false
-    end
-
-    success = self:moveForwardGrounded(math.abs(dz))
-
-    return success
+    return self:move2D(dx, dz, true)
 end
 
 
@@ -317,13 +275,25 @@ end
 
 ---
 -- \brief Déplacement avant multiple
--- \param distance Distance à parcourir
+-- \param distance  Distance à parcourir
+-- \param bool      grounded    Se déplacer en restant toujours au niveau du sol
 -- \return bool Succès
-function RSI_Turtle:moveForward(distance)
+function RSI_Turtle:moveForward(distance, grounded)
     local traveled = 0
 
+    if (grounded)
+    then
+        self:ground()
+    end
+
     while (traveled < distance) and turtle.forward()
     do
+        if (grounded)
+        then
+            self:ground()
+            self:climb()
+        end
+
         traveled = traveled + 1
     end
 
@@ -444,7 +414,6 @@ end
 -- \brief Augmenter en altitude jusqu'à ce que le bloc en face soit de l'air
 -- \return bool Succès
 function RSI_Turtle:climb()
-    --TODO: Implémenter
     local success = true
 
     while (not self:isAir("front") and success)
@@ -492,7 +461,6 @@ end
 -- \param Côté: "top", "bottom", "left", "right", "front", "back"
 -- \return bool Bloc en face identique à l'argument
 function RSI_Turtle:isAir(side)
-    --TODO: Implementer
     if side == "top"
     then
         return (not turtle.inspectUp())
diff --git a/test.lua b/test.lua
index 7b30f5e7bea52cfb7e9c8c576f5747c5386577d3..4ee13d54c5aa921a899d1226419d715040f4abaa 100644
--- a/test.lua
+++ b/test.lua
@@ -139,5 +139,13 @@ print("Tests moveGrounded")
 assert(t:moveToGrounded(-5,5))
 assert(checkPos(-5,0,5))
 
+assert(t:moveTo(-5,2,-1))
+print(t:getPos())
+assert(checkPos(-5,2,-1))
+
+assert(t:moveToOrigin())
+print(t:getPos())
+assert(checkPos(0,0,0))
+
 print("Fin des tests")