diff --git a/rsiTurtle.lua b/rsiTurtle.lua
index 800d603f7bc70a0c7b980768529b728d8a5dca89..797d662ed6cca3d4790109a7c3f67970176e585c 100644
--- a/rsiTurtle.lua
+++ b/rsiTurtle.lua
@@ -47,6 +47,7 @@ function RSI_Turtle:init()
     return turtle
 end
 
+
 ---
 -- \brief Affiche la position et l'orientation de la tortue
 function RSI_Turtle:print()
@@ -70,25 +71,35 @@ function RSI_Turtle:print()
 end
 
 
+---
+-- \brief   Affiche la position et l'orientation de la tortue
+-- \return int,int,int  Positions X, Y et Z
+function RSI_Turtle:getPos()
+    return self.pos_["x"], self.pos_["y"], self.pos_["z"]
+end
+
+
 ---
 -- \brief Déplacement parallèle au sol
+-- \return bool Succès
 function RSI_Turtle:moveTo2D(x, z)
-    --TODO: Implementer
+    return self:move2D(x - self.pos_["x"], z - self.pos_["z"])
 end
 
 
 ---
 -- \brief Déplacement dans les trois dimensions
+-- \return bool Succès
 function RSI_Turtle:moveTo(x, y, z)
-    --TODO: Implementer
+    return self:move(x - self.pos_["x"], y - self.pos_["y"], z - self.pos_["z"])
 end
 
 
 ---
--- \brief Déplacement s'assurant de rester au niveau du sol
--- escalade et descend automatiquement les pentes
-function RSI_Turtle:moveToGrounded(x, z)
-    --TODO: Implementer
+-- \brief Retourner au point d'origine (0,0,0)
+-- \return bool Succès
+function RSI_Turtle:moveToOrigin()
+    return self:moveTo(0,0,0)
 end
 
 
@@ -97,17 +108,16 @@ end
 --        Ordre de déplacement: X, Z
 -- \return bool Succès
 function RSI_Turtle:move2D(dx, dz)
-    local success
+    local success = true
 
     if dx >= 0
     then
         self:face(12)
-    else
+        success = self:moveForward(dx)
+    elseif dx < 0
+    then
         self:face(6)
-    end
-    for i=1,dx,1
-    do
-        success = self:forward()
+        success = self:moveForward(-1*dx)
     end
 
     if not success
@@ -115,22 +125,32 @@ function RSI_Turtle:move2D(dx, dz)
         return false
     end
     
-    if (dx <= 0 and dz >= 0) or (dx >= 0 and dz <= 0)
+    if (self.facing_ == 0)
     then
-        self:turnLeft()
-    else
-        self:turnRight()
+        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
-    
-    for i=1,dz,1
-    do
-        success = self:forward()
-    end
+    succes = self:moveForward(math.abs(dz))
+
 
     return success
 end
@@ -141,7 +161,7 @@ end
 --        Ordre de déplacement: X, Z, Y
 -- \return bool Succès
 function RSI_Turtle:move(dx, dy, dz)
-    local success
+    local success = true
 
     if (dy > 0)
     then
@@ -165,6 +185,14 @@ function RSI_Turtle:move(dx, dy, dz)
 end
 
 
+---
+-- \brief Déplacement s'assurant de rester au niveau du sol
+-- escalade et descend automatiquement les pentes
+function RSI_Turtle:moveToGrounded(x, z)
+    --TODO: Implementer
+end
+
+
 ---
 -- \brief Déplacement s'assurant de rester au niveau du sol
 -- escalade et descend automatiquement les pentes
@@ -201,17 +229,7 @@ end
 -- \brief Déplacement avant
 -- \return bool Succès
 function RSI_Turtle:forward()
-    turtle.forward()
-    
-    if self.facing_ == 0 then
-        self.pos_["x"] = self.pos_["x"] + 1
-    elseif self.facing_ == 3 then
-        self.pos_["z"] = self.pos_["z"] + 1
-    elseif self.facing_ == 6 then
-        self.pos_["x"] = self.pos_["x"] - 1
-    elseif self.facing_ == 9 then
-        self.pos_["z"] = self.pos_["z"] - 1
-    end
+    return self:moveForward(1)
 end
 
 ---
@@ -225,7 +243,7 @@ function RSI_Turtle:moveForward(distance)
     do
         traveled = traveled + 1
     end
-    
+
     if self.facing_ == 0 then
         self.pos_["x"] = self.pos_["x"] + traveled
     elseif self.facing_ == 3 then
@@ -244,20 +262,7 @@ end
 -- \brief Déplacement arrière
 -- \return bool Succès
 function RSI_Turtle:backward()
-    result = turtle.back()
-    
-    if result then
-        if self.facing_ == 0 then
-            self.pos_["x"] = self.pos_["x"] - 1
-        elseif self.facing_ == 3 then
-            self.pos_["z"] = self.pos_["z"] - 1
-        elseif self.facing_ == 6 then
-            self.pos_["x"] = self.pos_["x"] + 1
-        elseif self.facing_ == 9 then
-            self.pos_["z"] = self.pos_["z"] + 1
-        end
-    end
-    return result
+    return self:moveBackward(1)
 end
 
 
diff --git a/test.lua b/test.lua
index 73aa4a8e0dc541355ecc7d28c2679c9de2898189..ec796e639590addbd648ca689dce15714e92f515 100644
--- a/test.lua
+++ b/test.lua
@@ -58,23 +58,75 @@ e:print()
 -- print("Test ground();")
 -- t:ground()
 
-print("Test move;")
-print("1;")
-t:move(0,0,5)
-print("2;")
-t:move(-3,-2,5)
-print("3;")
-t:move(2,2)
-t:ground()
-
-print("Test moveForward;")
-t:moveForward(5)
-
-print("Test move;")
-t:moveBackward(5)
-
-print("Test move;")
-t:moveBackward(5)
+-- print("Test move;")
+-- print("1;")
+-- t:move(0,0,5)
+-- print("2;")
+-- t:move(-3,-2,5)
+-- print("3;")
+-- t:move(2,2)
+-- t:ground()
+
+-- print("Test moveForward;")
+-- t:moveForward(5)
+
+-- print("Test moveBackward;")
+-- t:moveBackward(5)
+
+function checkPos(x,y,z)
+    xPos, yPos, zPos = t:getPos()
+    return ( xPos == x and yPos == y and zPos == z )
+end
+
+-- print("Tests face;")
+-- for i=0,9,3
+-- do
+--     for j=0,9,3
+--     do
+--         t:face(i)
+--         assert(t.facing_ == 0
+--         t
+--     end
+-- end
+
+print("Tests moveTo;")
+assert(t:moveToOrigin())
+print(t:getPos())
+assert(checkPos(0,0,0))
+
+assert(t:moveTo2D(5,0))
+print(t:getPos())
+assert(checkPos(5,0,0))
+
+assert(t:moveToOrigin())
+print(t:getPos())
+assert(checkPos(0,0,0))
+
+print("Tests problematiques")
+assert(t:moveTo2D(0, 5))
+print(t:getPos())
+assert(checkPos(0,0,5))
+
+assert(t:moveTo2D(0,-5))
+print(t:getPos())
+assert(checkPos(0,0,-5))
+
+assert(t:moveToOrigin())
+print(t:getPos())
+assert(checkPos(0,0,0))
+
+assert(t:moveTo(10,2,-1))
+print(t:getPos())
+assert(checkPos(10,2,-1))
+
+assert(t:moveTo(-5,5,5))
+print(t:getPos())
+assert(checkPos(-5,5,5))
+
+assert(t:moveToOrigin())
+print(t:getPos())
+assert(checkPos(0,0,0))
+t:face(12)
 
 print("Fin des tests")