[plm] 01/06: Imported Upstream version 2.2.3+repack

Martin Quinson mquinson at alioth.debian.org
Thu Sep 12 20:33:07 UTC 2013


This is an automated email from the git hooks/post-receive script.

mquinson pushed a commit to branch debian-debian
in repository plm.

commit 07c84ff398c8bfd19b8a91853d5376dfa8606de9
Author: Martin Quinson <martin.quinson at loria.fr>
Date:   Thu Sep 12 21:54:46 2013 +0200

    Imported Upstream version 2.2.3+repack
---
 ChangeLog                                          |   52 ++
 build.xml                                          |   17 +-
 lib/l10n-engine/en.po                              |  570 ++++++++++-------
 lib/l10n-engine/fr.po                              |  638 +++++++++++--------
 lib/l10n-engine/plm.pot                            |  553 +++++++++-------
 lib/l10n/fr.po                                     |  659 +++++++++++---------
 lib/l10n/plm.pot                                   |  400 +++++++-----
 lib/resources/plm.configuration.properties         |    8 +-
 src/lessons/maze/island/IslandMaze-answer0.map     |    6 +-
 src/lessons/maze/island/IslandMaze-answer1.map     |    6 +-
 src/lessons/maze/island/IslandMaze.map             |    6 +-
 src/lessons/maze/island/IslandMaze2.map            |    6 +-
 src/lessons/maze/island/IslandMazeEntity.java      |    6 +-
 src/lessons/maze/island/IslandMazeEntity.py        |    6 +-
 src/lessons/maze/island/IslandMazeEntity.scala     |    6 +-
 src/lessons/maze/pledge/PledgeMaze.fr.html         |    6 +-
 src/lessons/maze/pledge/PledgeMazeEntity.java      |    6 +-
 src/lessons/maze/pledge/PledgeMazeEntity.py        |    6 +-
 src/lessons/maze/pledge/PledgeMazeEntity.scala     |    6 +-
 .../maze/randommouse/RandomMouseMazeEntity.java    |    6 +-
 .../maze/randommouse/RandomMouseMazeEntity.py      |    6 +-
 .../maze/randommouse/RandomMouseMazeEntity.scala   |    6 +-
 .../maze/shortestpath/ShortestPathMaze-answer0.map |   20 +-
 .../maze/shortestpath/ShortestPathMaze-answer1.map |  291 ++++++---
 .../maze/shortestpath/ShortestPathMaze.fr.html     |    8 +-
 .../maze/shortestpath/ShortestPathMazeEntity.java  |   13 +-
 .../maze/shortestpath/ShortestPathMazeEntity.py    |   21 +-
 .../maze/shortestpath/ShortestPathMazeEntity.scala |   18 +-
 .../wallfindfollow/WallFindFollowMazeEntity.java   |    6 +-
 .../wallfindfollow/WallFindFollowMazeEntity.py     |    6 +-
 .../wallfindfollow/WallFindFollowMazeEntity.scala  |    6 +-
 .../maze/wallfollower/WallFollowerMazeEntity.java  |    6 +-
 .../maze/wallfollower/WallFollowerMazeEntity.py    |    6 +-
 .../maze/wallfollower/WallFollowerMazeEntity.scala |    6 +-
 .../recursion/hanoi/universe/HanoiMovePanel.java   |    1 +
 .../sort/baseball/universe/BaseballMovePanel.java  |    1 +
 .../pancake/universe/PancakeFlipButtonPanel.java   |    1 +
 .../turmites/helloturmite/HelloTurmite.fr.html     |    2 +-
 src/lessons/turmites/universe/TurmiteWorld.fr.html |    4 +-
 src/lessons/welcome/array/basics/Array1Entity.java |    6 +-
 src/lessons/welcome/array/basics/Array1Entity.py   |    6 +-
 .../welcome/array/basics/Array1Entity.scala        |    6 +-
 src/lessons/welcome/array/basics/Array2.fr.html    |    2 +-
 src/lessons/welcome/array/basics/Array2Entity.java |    6 +-
 src/lessons/welcome/array/basics/Array2Entity.py   |    6 +-
 .../welcome/array/basics/Array2Entity.scala        |    6 +-
 src/lessons/welcome/array/has271/Has271.fr.html    |   12 +-
 src/lessons/welcome/array/has271/Has271.html       |   11 +-
 .../welcome/array/notriples/NoTriples.fr.html      |    4 +-
 src/lessons/welcome/bat/bool1/NearHundred.fr.html  |    4 +-
 src/lessons/welcome/bat/bool2/BlueTicket.fr.html   |    2 +-
 src/lessons/welcome/bat/bool2/DateFashion.fr.html  |    8 +-
 src/lessons/welcome/bat/bool2/TeenSum.fr.html      |    4 +-
 src/lessons/welcome/bdr/BDR.fr.html                |    2 +-
 .../welcome/environment/Environment.fr.html        |   10 +-
 .../welcome/instructions/InstructionsDrawG.fr.html |    7 +-
 .../welcome/loopdowhile/LoopDoWhile.fr.html        |    2 +-
 src/lessons/welcome/loopdowhile/PoucetEntity.java  |    4 +-
 src/lessons/welcome/loopdowhile/PoucetEntity.py    |    4 +-
 src/lessons/welcome/loopdowhile/PoucetEntity.scala |    4 +-
 src/lessons/welcome/loopfor/LoopCourse.fr.html     |    3 +
 src/lessons/welcome/loopfor/LoopCourse.html        |    3 +
 src/lessons/welcome/loopfor/LoopCourseEntity.java  |    4 +-
 src/lessons/welcome/loopfor/LoopCourseEntity.py    |    4 +-
 src/lessons/welcome/loopfor/LoopCourseEntity.scala |    4 +-
 .../welcome/loopfor/LoopCourseForestEntity.java    |    4 +-
 .../welcome/loopfor/LoopCourseForestEntity.py      |    4 +-
 .../welcome/loopfor/LoopCourseForestEntity.scala   |    4 +-
 src/lessons/welcome/loopfor/LoopFor.fr.html        |    2 +-
 src/lessons/welcome/loopfor/LoopFor.html           |    2 +-
 src/lessons/welcome/loopfor/LoopForEntity.java     |    4 +-
 src/lessons/welcome/loopfor/LoopForEntity.py       |    4 +-
 src/lessons/welcome/loopfor/LoopForEntity.scala    |    4 +-
 src/lessons/welcome/loopfor/LoopStairsEntity.java  |    4 +-
 src/lessons/welcome/loopfor/LoopStairsEntity.py    |    4 +-
 src/lessons/welcome/loopfor/LoopStairsEntity.scala |    4 +-
 .../welcome/loopwhile/BaggleSeekerEntity.java      |    4 +-
 .../welcome/loopwhile/BaggleSeekerEntity.scala     |    4 +-
 src/lessons/welcome/loopwhile/LoopWhileEntity.java |    4 +-
 .../welcome/loopwhile/LoopWhileEntity.scala        |    4 +-
 .../welcome/loopwhile/WhileMoriaEntity.java        |    4 +-
 .../welcome/loopwhile/WhileMoriaEntity.scala       |    4 +-
 .../welcome/methods/args/MethodsArgs.fr.html       |    6 +-
 src/lessons/welcome/methods/args/MethodsArgs.html  |    6 +-
 .../welcome/methods/args/MethodsArgsEntity.java    |    4 +-
 .../welcome/methods/args/MethodsArgsEntity.scala   |    4 +-
 src/lessons/welcome/methods/basics/Methods.fr.html |   28 +-
 src/lessons/welcome/methods/basics/Methods.html    |   28 +-
 .../methods/basics/MethodsDogHouseEntity.java      |    4 +-
 .../methods/basics/MethodsDogHouseEntity.py        |    2 +-
 .../methods/basics/MethodsDogHouseEntity.scala     |    4 +-
 .../welcome/methods/basics/MethodsEntity.java      |    4 +-
 .../welcome/methods/basics/MethodsEntity.py        |    4 +-
 .../welcome/methods/basics/MethodsEntity.scala     |    4 +-
 .../welcome/methods/flowerpot/FlowerPot.fr.html    |    2 +-
 .../methods/returning/MethodsReturningEntity.java  |    4 +-
 .../methods/returning/MethodsReturningEntity.py    |    4 +-
 .../methods/returning/MethodsReturningEntity.scala |    4 +-
 src/lessons/welcome/methods/slug/SlugHunting.html  |    2 +-
 .../welcome/methods/slug/SlugHuntingEntity.java    |    5 +-
 .../welcome/methods/slug/SlugHuntingEntity.py      |   29 +-
 .../welcome/methods/slug/SlugHuntingEntity.scala   |   15 +-
 .../welcome/methods/slug/SlugTracking.fr.html      |    2 +-
 src/lessons/welcome/traversal/Snake.fr.html        |    2 +-
 .../traversal/column/TraversalByColumn.fr.html     |    2 +-
 .../traversal/column/TraversalByColumnEntity.java  |   53 +-
 .../traversal/column/TraversalByColumnEntity.py    |   19 +-
 .../traversal/column/TraversalByColumnEntity.scala |   47 +-
 .../diagonal/TraversalDiagonalEntity.java          |   52 +-
 .../traversal/diagonal/TraversalDiagonalEntity.py  |   19 +-
 .../diagonal/TraversalDiagonalEntity.scala         |   47 +-
 .../traversal/line/TraversalByLineEntity.java      |   53 +-
 .../traversal/line/TraversalByLineEntity.py        |   19 +-
 .../traversal/line/TraversalByLineEntity.scala     |   47 +-
 .../traversal/zigzag/TraversalZigZagEntity.java    |   52 +-
 .../traversal/zigzag/TraversalZigZagEntity.py      |   19 +-
 .../traversal/zigzag/TraversalZigZagEntity.scala   |   46 +-
 src/lessons/welcome/variables/RunFourEntity.java   |    4 +-
 src/lessons/welcome/variables/RunFourEntity.py     |    4 +-
 src/lessons/welcome/variables/RunFourEntity.scala  |    4 +-
 src/lessons/welcome/variables/RunHalf.fr.html      |    2 +-
 src/lessons/welcome/variables/RunHalf.html         |    3 +-
 src/lessons/welcome/variables/RunHalfEntity.java   |    4 +-
 src/lessons/welcome/variables/RunHalfEntity.py     |    4 +-
 src/lessons/welcome/variables/RunHalfEntity.scala  |    8 +-
 src/lessons/welcome/variables/Variables.fr.html    |   90 +--
 src/lessons/welcome/variables/Variables.html       |  292 +++++----
 src/lessons/welcome/variables/VariablesEntity.java |    4 +-
 src/lessons/welcome/variables/VariablesEntity.py   |    4 +-
 .../welcome/variables/VariablesEntity.scala        |    4 +-
 src/plm/core/model/Game.java                       |   17 +-
 src/plm/core/model/LessonRunner.java               |    3 +-
 src/plm/core/ui/ExerciseFailedDialog.java          |   72 ++-
 src/plm/core/ui/FeedbackDialog.java                |    8 +-
 src/plm/core/ui/MainFrame.java                     |   17 +-
 src/plm/core/ui/PlmHtmlEditorKit.java              |    2 +-
 src/plm/core/ui/action/ExportCloudSession.java     |  141 +++++
 src/plm/core/ui/action/ImportCloudSession.java     |  170 +++++
 src/plm/core/utils/FileUtils.java                  |   31 +
 src/plm/core/utils/PlmSyntaxPane.java              |    4 +
 src/plm/universe/Direction.java                    |   19 +-
 src/plm/universe/EntityControlPanel.java           |    8 +-
 src/plm/universe/bat/BatEntity.java                |    4 +-
 src/plm/universe/bugglequest/AbstractBuggle.java   |    7 +-
 src/plm/universe/bugglequest/BuggleWorld.fr.html   |   19 +-
 src/plm/universe/bugglequest/BuggleWorld.html      |    6 +-
 src/plm/universe/bugglequest/SimpleBuggle.java     |    3 +
 .../exception/DontHaveBaggleException.java         |   13 +
 .../universe/bugglequest/ui/BuggleButtonPanel.java |    9 +
 src/plm/universe/sort/SortingButtonPanel.java      |   26 +-
 src/plm/universe/turtles/Turtle.java               |    4 +
 src/plm/universe/turtles/TurtleWorld.fr.html       |    7 +-
 src/plm/universe/turtles/TurtleWorld.html          |    3 +
 src/plm/universe/turtles/TurtleWorld.java          |   12 +-
 154 files changed, 3138 insertions(+), 2131 deletions(-)

diff --git a/ChangeLog b/ChangeLog
index b8755ab..fa70577 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,55 @@
+20130912: Release 2.2.3: Let's start adding new bu^Wfeatures again.
+
+  * Let every interactive control issue the source code doing the same
+    thing when they are clicked, so that the students can copy/paste.
+    Thanks to Laurent Guittet for suggesting this change, I love it.
+  * Buggle: Translate the direction names, too
+  * TurtleWorld: add a new clear() primitive that clears the sheet
+  * New feature: import/export session to the cloud.
+    You don't have to struggle with a bunch of zip files anymore.
+  * Rewamp the ExerciseFailedDialog to be more user friendly. Its
+    title is less demotival, it hints about how to fix the issue, and
+    the textual diff (that can be big and ugly) is hidden by default.
+  
+  * BuggleWorld: dropping a baggle was possible even if you had none
+  * welcome.BlueTicket: Fix typo in French
+  * BatEntity: more informative error message when an exception is raised
+  * FeedbackDialog: should not be modal to enable copy/paste
+  * maze.island: move the initial positions to make cheating harder
+  * maze.shortestpath: also translate the helper methods in scala and
+    python
+  * maze.shortestpath: put the distance on every cell, not just until
+    we found the buggle. Otherwise, the student must do exactly the
+    same traversal, which is not part of the spec, making it harder.
+  * Search windows directories first as the user.home property cannot
+    be trusted here at Telecom Nancy.
+  * welcome.basic.meth: reword the mission to make clear that the
+    code will get called automatically.
+  * Don't remove runner threads too early from their set so that
+    "Stop" still find them to stop them (fix #108)
+  * welcome.array.has271: improve the mission text
+  * welcome.traversal.*: fix the java and scala templating
+  * welcome.variable: speak about != that is handy here
+  
+20130910: Release 2.2.2: the 2 cts release.
+
+  * welcome.LoopCourse: specify that the colors get updated automatically
+  * welcome.NearHundred: fix french translation (was plainly wrong)
+  * welcome.SlugHunting: align templating and mission: isFacingTrail must be copied
+  * welcome.Variables: scala mandates an initial value (fix #109)
+    plus various small improvements
+  * Unify all Dave messages (marking functions that are forbidden in a
+    given exercise -- like setPos in maze exercises), to ensure that
+    they are properly translated despite the fact that gettext don't
+    dig into scala and python files for string to translate.
+  * Specify a working font for plain text to help the poor Mac users
+  * welcome.RunHalf: fix the scala templating
+  * welcome.FlowerPot: fix the french translation (growFlowers with a s)
+  * FeedbackDialog: reset the text on each invocation
+  * welcome.MethodsArgs: Fix a faulty copy/paste in scala prototypes
+  * welcome.LoopFor: Fix the scala syntax of for loops
+  * welcome.RunHalf: the description and the given condition did not match
+
 20130908: Release 2.2.1: C'mon, dudes. Break that one if you dare.
 
   * Allow a creative mode, perfectly adapted to open LOGO exercises.
diff --git a/build.xml b/build.xml
index 626113e..3d77eb8 100644
--- a/build.xml
+++ b/build.xml
@@ -81,8 +81,9 @@
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/jruby-1.5.6-5.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/jython/jython-2.5.1.jar"/>
 
-            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpclient-4.1.2.jar"/>
-            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpcore-4.1.2.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpclient-4.2.5.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpcore-4.2.4.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpmime-4.2.5.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/commons-logging-1.1.1.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/gettext-commons-0.9.6.jar"/>
             
@@ -107,8 +108,10 @@
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/miglayout-3.7.4.jar" />
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/langtools-beta.jar" />
                         
-            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpclient-4.1.2.jar"/>
-            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpcore-4.1.2.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpclient-4.2.5.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpcore-4.2.4.jar"/>
+            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/httpmime-4.2.5.jar"/>
+
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/commons-logging-1.1.1.jar"/>
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/gettext-commons-0.9.6.jar"/>
             
@@ -180,7 +183,11 @@
            '' has to be used to get a single quote displayed. 
 	   That's unfortunate given the amount of ' we have in french and english but anyway.
 	   In addition, the strings without {0} are not passed to MessageFormat by i18n.tr().
-	   See: https://code.google.com/p/gettext-commons/issues/detail?id=55 -->
+	   See: https://code.google.com/p/gettext-commons/issues/detail?id=55 
+
+           Rq: check that a word does not appear in translations:
+           msggrep -T -e  theworld  - -sort-by-file  lib/l10n/fr.po
+	   -->
       <exec executable="msggrep">
            <arg value="-K"/>
 	   <arg value="-e"/>
diff --git a/lib/l10n-engine/en.po b/lib/l10n-engine/en.po
index 6c9aa87..926167a 100644
--- a/lib/l10n-engine/en.po
+++ b/lib/l10n-engine/en.po
@@ -8,8 +8,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-08 22:40+0200\n"
-"PO-Revision-Date: 2013-05-30 11:25+0200\n"
+"POT-Creation-Date: 2013-09-12 21:44+0200\n"
+"PO-Revision-Date: 2013-09-12 13:06+0200\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "Language: \n"
@@ -26,7 +26,8 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:11
 #: src/lessons/welcome/array/basics/Array2Entity.java:12
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."
+"Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal "
+"instead."
 msgstr ""
 
 #: src/lessons/maze/island/IslandMazeEntity.java:15
@@ -38,7 +39,8 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:16
 #: src/lessons/welcome/array/basics/Array2Entity.java:17
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."
+"Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal "
+"instead."
 msgstr ""
 
 #: src/lessons/maze/island/IslandMazeEntity.java:20
@@ -50,11 +52,18 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:21
 #: src/lessons/welcome/array/basics/Array2Entity.java:22
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."
+"Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your "
+"goal instead."
 msgstr ""
 
-#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:70
-#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:68
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:73
+#, java-format
+msgid "move({0},{1})"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:71
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:77
 msgid "Invalid move"
 msgstr ""
 
@@ -87,7 +96,7 @@ msgstr ""
 msgid "Go"
 msgstr ""
 
-#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:75
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
 #, java-format
 msgid ""
 "The player {0} of the base {1} cannot reach the hole that is too far from "
@@ -148,6 +157,11 @@ msgstr "Switch to time view"
 msgid "Switch to state view"
 msgstr "Switch to state view"
 
+#: src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java:66
+#, java-format
+msgid "flip({0})"
+msgstr ""
+
 #: src/lessons/sort/pancake/universe/PancakeWorld.java:116
 msgid "This is not a world of pancakes :-("
 msgstr ""
@@ -188,14 +202,13 @@ msgstr ""
 #: src/lessons/welcome/loopwhile/BaggleSeekerEntity.java:9
 #: src/lessons/welcome/loopwhile/LoopWhileEntity.java:9
 #: src/lessons/welcome/loopwhile/WhileMoriaEntity.java:9
-#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:10
 #: src/lessons/welcome/methods/returning/MethodsReturningEntity.java:9
 #: src/lessons/welcome/variables/RunFourEntity.java:8
 #: src/lessons/welcome/variables/RunHalfEntity.java:10
 #: src/lessons/welcome/variables/VariablesEntity.java:8
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use forward with an argument in "
-"this exercise."
+"Sorry Dave, I cannot let you use forward with an argument in this exercise. "
+"Use a loop instead."
 msgstr ""
 
 #: src/lessons/welcome/loopdowhile/PoucetEntity.java:14
@@ -206,14 +219,13 @@ msgstr ""
 #: src/lessons/welcome/loopwhile/BaggleSeekerEntity.java:14
 #: src/lessons/welcome/loopwhile/LoopWhileEntity.java:14
 #: src/lessons/welcome/loopwhile/WhileMoriaEntity.java:14
-#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:14
 #: src/lessons/welcome/methods/returning/MethodsReturningEntity.java:14
 #: src/lessons/welcome/variables/RunFourEntity.java:12
 #: src/lessons/welcome/variables/RunHalfEntity.java:14
 #: src/lessons/welcome/variables/VariablesEntity.java:13
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use backward with an argument in "
-"this exercise."
+"Sorry Dave, I cannot let you use backward with an argument in this exercise. "
+"Use a loop instead."
 msgstr ""
 
 #: src/lessons/welcome/loopfor/LoopCourseForestEntity.java:33
@@ -221,92 +233,70 @@ msgid "You fall into water."
 msgstr ""
 
 #: src/lessons/welcome/loopfor/LoopCourseForestEntity.java:33
-#: src/plm/universe/bugglequest/SimpleBuggle.java:29
-#: src/plm/universe/bugglequest/SimpleBuggle.java:40
-#: src/plm/universe/bugglequest/SimpleBuggle.java:51
-#: src/plm/universe/bugglequest/SimpleBuggle.java:62
-#: src/plm/universe/bugglequest/SimpleBuggle.java:78
-#: src/plm/universe/bugglequest/SimpleBuggle.java:82
-#: src/plm/universe/bugglequest/SimpleBuggle.java:93
-#: src/plm/universe/bugglequest/SimpleBuggle.java:103
-#: src/plm/universe/bugglequest/SimpleBuggle.java:113
-#: src/plm/universe/bugglequest/SimpleBuggle.java:123
+#: src/plm/universe/bugglequest/SimpleBuggle.java:30
+#: src/plm/universe/bugglequest/SimpleBuggle.java:41
+#: src/plm/universe/bugglequest/SimpleBuggle.java:52
+#: src/plm/universe/bugglequest/SimpleBuggle.java:63
+#: src/plm/universe/bugglequest/SimpleBuggle.java:79
+#: src/plm/universe/bugglequest/SimpleBuggle.java:83
+#: src/plm/universe/bugglequest/SimpleBuggle.java:94
+#: src/plm/universe/bugglequest/SimpleBuggle.java:97
+#: src/plm/universe/bugglequest/SimpleBuggle.java:106
+#: src/plm/universe/bugglequest/SimpleBuggle.java:116
+#: src/plm/universe/bugglequest/SimpleBuggle.java:126
 #, fuzzy
 msgid "Test failed"
 msgstr "Exercise failed /o\\"
 
-#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:10
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:66
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:71
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:67
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:71
-msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."
-msgstr ""
-
-#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:26
-#, java-format
-msgid ""
-"I''m sorry Dave, I''m affraid I cant let you use left() both in lines {0} "
-"and {1} in this exercise."
-msgstr ""
-
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:45
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:50
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:50
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:55
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:46
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:51
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:50
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:55
+#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:10
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."
+"I cannot let you use forward with an argument in this exercise. Use a loop "
+"instead."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:54
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:58
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:59
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:63
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:55
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:59
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:59
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:63
+#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:14
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."
+"I cannot let you use backward with an argument in this exercise. Use a loop "
+"instead."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:62
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:67
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:63
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:67
+#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:10
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."
+"Sorry Dave, I cannot let you use right() in this exercise. Use left() "
+"instead."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:70
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:75
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:71
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:75
+#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:26
+#, java-format
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."
+"Sorry Dave, I cannot let you use left() both in lines {0} and {1} in this "
+"exercise. You can write left() only once in this exercise."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:74
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:79
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:75
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:79
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:42
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:47
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:48
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:53
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:43
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:48
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:48
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:53
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this "
-"exercise."
+"Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) "
+"instead."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:78
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:83
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:79
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:83
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:51
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:55
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:57
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:61
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:52
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:56
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:57
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:61
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this "
-"exercise."
+"Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,"
+"y) instead."
 msgstr ""
 
 #.
@@ -366,23 +356,23 @@ msgid ""
 "Its value is: {1}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:151
+#: src/plm/core/model/Game.java:153
 msgid "Scala is usable on your machine. Congratulations."
 msgstr ""
 
-#: src/plm/core/model/Game.java:153
+#: src/plm/core/model/Game.java:155
 msgid "Please install Scala version 2.10 or higher to use it in PLM."
 msgstr ""
 
-#: src/plm/core/model/Game.java:155
+#: src/plm/core/model/Game.java:157
 msgid "Jython is usable on your machine. Congratulations."
 msgstr ""
 
-#: src/plm/core/model/Game.java:157
+#: src/plm/core/model/Game.java:159
 msgid "Please install jython to use the python programming language in PLM."
 msgstr ""
 
-#: src/plm/core/model/Game.java:163
+#: src/plm/core/model/Game.java:165
 #, java-format
 msgid ""
 "Warning, the default programming language is neither ''Java'' nor ''python'' "
@@ -395,74 +385,74 @@ msgid ""
 "($HOME/.plm/plm.properties)"
 msgstr ""
 
-#: src/plm/core/model/Game.java:169
+#: src/plm/core/model/Game.java:171
 msgid ""
 "The default programming language is Scala, but your scala installation is "
 "not usable. Switching to Java instead.\n"
 msgstr ""
 
-#: src/plm/core/model/Game.java:172
+#: src/plm/core/model/Game.java:174
 msgid ""
 "The default programming language is python, but your python installation is "
 "not usable. Switching to Java instead.\n"
 msgstr ""
 
-#: src/plm/core/model/Game.java:185
+#: src/plm/core/model/Game.java:187
 #, java-format
 msgid ""
 "Your progress will be posted to https://twitter.com/jlmlovers This can be "
 "turned off through the property {0}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:188
+#: src/plm/core/model/Game.java:190
 #, java-format
 msgid ""
 "Your progress will NOT be posted to twitter, as requested by the property {0}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:217
+#: src/plm/core/model/Game.java:219
 #, java-format
 msgid "Error {0} while retrieving the Scala version: {1}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:226
+#: src/plm/core/model/Game.java:228
 #, java-format
 msgid "Scala is too ancient. Found {0} while I need 2.10 or higher."
 msgstr ""
 
-#: src/plm/core/model/Game.java:251
+#: src/plm/core/model/Game.java:253
 msgid ""
 "Cannot retrieve the python ScriptEngine. Are jython.jar and its dependencies "
 "in the classpath?"
 msgstr ""
 
-#: src/plm/core/model/Game.java:274
+#: src/plm/core/model/Game.java:276
 #, java-format
 msgid ""
 "Resource {0} not found in the classpath.\n"
 "Is {1} in your classpath?"
 msgstr ""
 
-#: src/plm/core/model/Game.java:276
+#: src/plm/core/model/Game.java:278
 #, java-format
 msgid "{0} received while searching for resource {1}: {2}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:320 src/plm/core/model/Game.java:321
+#: src/plm/core/model/Game.java:322 src/plm/core/model/Game.java:323
 #, java-format
 msgid "Cannot switch to lesson {0}: class Main not found."
 msgstr ""
 
-#: src/plm/core/model/Game.java:322
+#: src/plm/core/model/Game.java:324
 #, fuzzy, java-format
 msgid "Load lesson {0}"
 msgstr "Load lesson"
 
-#: src/plm/core/model/Game.java:428 src/plm/core/model/Game.java:462
+#: src/plm/core/model/Game.java:430 src/plm/core/model/Game.java:464
 msgid "Operation cancelled by the user"
 msgstr "Operation cancelled by the user"
 
-#: src/plm/core/model/Game.java:453
+#: src/plm/core/model/Game.java:455
 #, java-format
 msgid ""
 "Exercise {0} does not support language {1}. Fallback to {2} instead. Please "
@@ -470,52 +460,32 @@ msgid ""
 "language."
 msgstr ""
 
-#: src/plm/core/model/Game.java:502
+#: src/plm/core/model/Game.java:504
 #, java-format
 msgid "The lecture {0} has no world that I can select"
 msgstr ""
 
-#: src/plm/core/model/Game.java:906
+#: src/plm/core/model/Game.java:909
 msgid ""
 "Please install Scala version 2.10 or higher to use it in PLM.\n"
 "\n"
 msgstr ""
 
-#: src/plm/core/model/Game.java:907
+#: src/plm/core/model/Game.java:910
 msgid "Scala is missing"
 msgstr ""
 
-#: src/plm/core/model/Game.java:911
+#: src/plm/core/model/Game.java:914
 msgid ""
 "Please install jython and its dependencies to use the python programming "
 "language in PLM.\n"
 "\n"
 msgstr ""
 
-#: src/plm/core/model/Game.java:912
+#: src/plm/core/model/Game.java:915
 msgid "Python is missing"
 msgstr ""
 
-#: src/plm/core/model/Game.java:1066
-#, java-format
-msgid "{0} is not writable"
-msgstr ""
-
-#: src/plm/core/model/Game.java:1070
-#, java-format
-msgid "{0} is not a directory"
-msgstr ""
-
-#: src/plm/core/model/Game.java:1077
-#, java-format
-msgid "Cannot create {0}"
-msgstr ""
-
-#: src/plm/core/model/Game.java:1083
-#, java-format
-msgid "Impossible to find a path for PLM data. Tested {0}"
-msgstr ""
-
 #: src/plm/core/model/HelpServer.java:27
 msgid "Asking to the teacher for help"
 msgstr "Asking to the teacher for help"
@@ -524,7 +494,7 @@ msgstr "Asking to the teacher for help"
 msgid "Cancel call for help to the teacher"
 msgstr "Cancel call for help to the teacher"
 
-#: src/plm/core/model/LessonRunner.java:94
+#: src/plm/core/model/LessonRunner.java:95
 #, fuzzy, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
@@ -533,21 +503,21 @@ msgstr ""
 "Congratulations, you passed this exercise.\n"
 " {0} tests passed.\n"
 
-#: src/plm/core/model/LessonRunner.java:96
-#: src/plm/core/model/LessonRunner.java:102
-#: src/plm/core/model/LessonRunner.java:111
-#: src/plm/core/model/LessonRunner.java:117
+#: src/plm/core/model/LessonRunner.java:97
+#: src/plm/core/model/LessonRunner.java:103
+#: src/plm/core/model/LessonRunner.java:112
+#: src/plm/core/model/LessonRunner.java:118
 msgid "Exercice passed \\o/"
 msgstr "Exercice passed \\o/"
 
-#: src/plm/core/model/LessonRunner.java:100
+#: src/plm/core/model/LessonRunner.java:101
 #, fuzzy
 msgid "Congratulations, you passed this exercise."
 msgstr ""
 "Congratulations, you passed this exercise.\n"
 " {0} tests passed.\n"
 
-#: src/plm/core/model/LessonRunner.java:110
+#: src/plm/core/model/LessonRunner.java:111
 #, fuzzy, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
@@ -556,7 +526,7 @@ msgid ""
 msgstr ""
 "Congratulations, you passed this test. Which exercise will you do now?\n"
 
-#: src/plm/core/model/LessonRunner.java:116
+#: src/plm/core/model/LessonRunner.java:117
 #, fuzzy
 msgid ""
 "Congratulations, you passed this exercise.\n"
@@ -739,7 +709,7 @@ msgid "About PLM dialogTitle"
 msgstr "About PLM dialogTitle"
 
 #: src/plm/core/ui/AboutPLMDialog.java:71
-#: src/plm/core/ui/ExerciseFailedDialog.java:49
+#: src/plm/core/ui/ExerciseFailedDialog.java:38
 msgid "Close"
 msgstr "Close"
 
@@ -769,12 +739,12 @@ msgid ""
 msgstr ""
 
 #: src/plm/core/ui/ChooseLessonDialog.java:132
-#: src/plm/core/ui/MainFrame.java:163
+#: src/plm/core/ui/MainFrame.java:165
 msgid "PLM lesson files"
 msgstr "PLM lesson files"
 
 #: src/plm/core/ui/ChooseLessonDialog.java:141
-#: src/plm/core/ui/MainFrame.java:172
+#: src/plm/core/ui/MainFrame.java:174
 msgid "Error"
 msgstr "Error"
 
@@ -812,17 +782,35 @@ msgstr ""
 msgid "You never attempted this lesson."
 msgstr "About this lesson"
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:30
-msgid "Exercise failed /o\\"
-msgstr "Exercise failed /o\\"
+#: src/plm/core/ui/ExerciseFailedDialog.java:33
+msgid "Mmm, not quite /o\\"
+msgstr ""
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:39
-msgid "You didn't manage to reach your objective."
-msgstr "You didn't manage to reach your objective."
+#: src/plm/core/ui/ExerciseFailedDialog.java:51
+msgid ""
+"<html>You didn't manage to reach your objective. <br>\n"
+"You should graphically compare the final state of your world <br>\n"
+"with the objective to understand the problem. <br>\n"
+"If you don't see the error, check the details below to for a <br>\n"
+"textual description of this difference between both worlds.</html>"
+msgstr ""
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:42
-msgid "Compilation error"
-msgstr "Compilation error"
+#: src/plm/core/ui/ExerciseFailedDialog.java:59
+#, java-format
+msgid ""
+"<html>Compilation error.<br>\n"
+"You can find below the detailed error message (as given by {0}).<br>\n"
+"Please read it carfully to understand the problem, and fix your code.</html>"
+msgstr ""
+
+#: src/plm/core/ui/ExerciseFailedDialog.java:71
+#: src/plm/core/ui/ExerciseFailedDialog.java:78
+msgid "Details >>"
+msgstr ""
+
+#: src/plm/core/ui/ExerciseFailedDialog.java:81
+msgid "Details <<"
+msgstr ""
 
 #: src/plm/core/ui/ExerciseView.java:92 src/plm/core/ui/ExerciseView.java:161
 #: src/plm/core/ui/ExerciseView.java:218
@@ -857,11 +845,16 @@ msgstr "Change the speed of execution"
 msgid "Switch the entity"
 msgstr "Switch the entity"
 
-#: src/plm/core/ui/FeedbackDialog.java:49
+#: src/plm/core/ui/FeedbackDialog.java:44
+#: src/plm/core/ui/FeedbackDialog.java:88
+msgid "(your feedback comes here)"
+msgstr ""
+
+#: src/plm/core/ui/FeedbackDialog.java:51
 msgid "Report your feedback"
 msgstr ""
 
-#: src/plm/core/ui/FeedbackDialog.java:59
+#: src/plm/core/ui/FeedbackDialog.java:61
 msgid ""
 "<html><p>Thanks for your feedback on PLM. We deeply need this to make the "
 "tool match <br>your needs, so please don't hesitate to report any "
@@ -879,10 +872,6 @@ msgid ""
 "for feedback.</p></html>"
 msgstr ""
 
-#: src/plm/core/ui/FeedbackDialog.java:88
-msgid "(your feedback comes here)"
-msgstr ""
-
 #: src/plm/core/ui/FeedbackDialog.java:90
 #, fuzzy
 msgid "Cancel"
@@ -916,132 +905,142 @@ msgstr "Where error and other messages get written"
 #. === FILE menu ===
 #. for now: leave the calls to i18n.tr: that way one is sure to get all the localized strings...
 #. Menus
-#: src/plm/core/ui/MainFrame.java:152 src/plm/core/ui/MainFrame.java:658
+#: src/plm/core/ui/MainFrame.java:154 src/plm/core/ui/MainFrame.java:670
 msgid "File"
 msgstr "File"
 
-#: src/plm/core/ui/MainFrame.java:154
+#: src/plm/core/ui/MainFrame.java:156
 msgid "File related functions"
 msgstr "File related functions"
 
-#: src/plm/core/ui/MainFrame.java:157 src/plm/core/ui/MainFrame.java:659
+#: src/plm/core/ui/MainFrame.java:159 src/plm/core/ui/MainFrame.java:671
 msgid "Load lesson"
 msgstr "Load lesson"
 
-#: src/plm/core/ui/MainFrame.java:179 src/plm/core/ui/MainFrame.java:660
+#: src/plm/core/ui/MainFrame.java:181 src/plm/core/ui/MainFrame.java:672
 msgid "Switch lesson"
 msgstr "Switch lesson"
 
-#: src/plm/core/ui/MainFrame.java:191 src/plm/core/ui/MainFrame.java:427
-#: src/plm/core/ui/MainFrame.java:655 src/plm/core/ui/MainFrame.java:661
+#: src/plm/core/ui/MainFrame.java:193 src/plm/core/ui/MainFrame.java:439
+#: src/plm/core/ui/MainFrame.java:667 src/plm/core/ui/MainFrame.java:673
 msgid "Switch exercise"
 msgstr "Switch exercise"
 
-#: src/plm/core/ui/MainFrame.java:204 src/plm/core/ui/MainFrame.java:663
+#: src/plm/core/ui/MainFrame.java:206 src/plm/core/ui/MainFrame.java:675
 msgid "Teacher Console"
 msgstr "Teacher Console"
 
 #. Menu item to change the current Course
-#: src/plm/core/ui/MainFrame.java:223 src/plm/core/ui/MainFrame.java:664
+#: src/plm/core/ui/MainFrame.java:225 src/plm/core/ui/MainFrame.java:676
 msgid "Choose your course"
 msgstr "Choose your course"
 
-#: src/plm/core/ui/MainFrame.java:242 src/plm/core/ui/MainFrame.java:665
+#: src/plm/core/ui/MainFrame.java:244 src/plm/core/ui/MainFrame.java:677
 msgid "Quit"
 msgstr "Quit"
 
 #. === Edit menu ===
-#: src/plm/core/ui/MainFrame.java:250 src/plm/core/ui/MainFrame.java:667
+#: src/plm/core/ui/MainFrame.java:252 src/plm/core/ui/MainFrame.java:679
 msgid "Session"
 msgstr "Session"
 
-#: src/plm/core/ui/MainFrame.java:255 src/plm/core/ui/MainFrame.java:669
+#: src/plm/core/ui/MainFrame.java:257 src/plm/core/ui/MainFrame.java:681
 msgid "Revert Exercise"
 msgstr "Revert Exercise"
 
-#: src/plm/core/ui/MainFrame.java:258 src/plm/core/ui/MainFrame.java:670
+#: src/plm/core/ui/MainFrame.java:260 src/plm/core/ui/MainFrame.java:682
 msgid "Export Session Cache"
 msgstr "Export Session Cache"
 
-#: src/plm/core/ui/MainFrame.java:261 src/plm/core/ui/MainFrame.java:671
+#: src/plm/core/ui/MainFrame.java:263 src/plm/core/ui/MainFrame.java:683
 msgid "Import Session Cache"
 msgstr "Import Session Cache"
 
-#: src/plm/core/ui/MainFrame.java:265 src/plm/core/ui/MainFrame.java:672
+#: src/plm/core/ui/MainFrame.java:268 src/plm/core/ui/MainFrame.java:684
+#, fuzzy
+msgid "Export Session Cache to Cloud"
+msgstr "Export Session Cache"
+
+#: src/plm/core/ui/MainFrame.java:271 src/plm/core/ui/MainFrame.java:685
+#, fuzzy
+msgid "Import Session Cache from Cloud"
+msgstr "Import Session Cache"
+
+#: src/plm/core/ui/MainFrame.java:277 src/plm/core/ui/MainFrame.java:687
 msgid "Debug mode"
 msgstr "Debug mode"
 
-#: src/plm/core/ui/MainFrame.java:276 src/plm/core/ui/MainFrame.java:673
+#: src/plm/core/ui/MainFrame.java:288 src/plm/core/ui/MainFrame.java:688
 msgid "Creative mode"
 msgstr ""
 
 #. === Language menu ===
-#: src/plm/core/ui/MainFrame.java:289 src/plm/core/ui/MainFrame.java:676
+#: src/plm/core/ui/MainFrame.java:301 src/plm/core/ui/MainFrame.java:691
 msgid "Language"
 msgstr "Language"
 
 #. === Programming language changing ===
-#: src/plm/core/ui/MainFrame.java:294 src/plm/core/ui/MainFrame.java:677
+#: src/plm/core/ui/MainFrame.java:306 src/plm/core/ui/MainFrame.java:692
 msgid "Human"
 msgstr "Human"
 
-#: src/plm/core/ui/MainFrame.java:308 src/plm/core/ui/MainFrame.java:678
+#: src/plm/core/ui/MainFrame.java:320 src/plm/core/ui/MainFrame.java:693
 msgid "Computer"
 msgstr "Computer"
 
 #. === Help menu ===
-#: src/plm/core/ui/MainFrame.java:312 src/plm/core/ui/MainFrame.java:680
+#: src/plm/core/ui/MainFrame.java:324 src/plm/core/ui/MainFrame.java:695
 msgid "Help"
 msgstr "Help"
 
-#: src/plm/core/ui/MainFrame.java:316 src/plm/core/ui/MainFrame.java:681
+#: src/plm/core/ui/MainFrame.java:328 src/plm/core/ui/MainFrame.java:696
 msgid "Provide feedback"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:326 src/plm/core/ui/MainFrame.java:682
+#: src/plm/core/ui/MainFrame.java:338 src/plm/core/ui/MainFrame.java:697
 msgid "About this lesson"
 msgstr "About this lesson"
 
-#: src/plm/core/ui/MainFrame.java:339 src/plm/core/ui/MainFrame.java:683
+#: src/plm/core/ui/MainFrame.java:351 src/plm/core/ui/MainFrame.java:698
 msgid "About this world"
 msgstr "About this world"
 
-#: src/plm/core/ui/MainFrame.java:355 src/plm/core/ui/MainFrame.java:685
+#: src/plm/core/ui/MainFrame.java:367 src/plm/core/ui/MainFrame.java:700
 msgid "About PLM"
 msgstr "About PLM"
 
 #. Buttons
-#: src/plm/core/ui/MainFrame.java:388 src/plm/core/ui/MainFrame.java:649
+#: src/plm/core/ui/MainFrame.java:400 src/plm/core/ui/MainFrame.java:661
 msgid "Run"
 msgstr "Run"
 
-#: src/plm/core/ui/MainFrame.java:392 src/plm/core/ui/MainFrame.java:490
-#: src/plm/core/ui/MainFrame.java:650
+#: src/plm/core/ui/MainFrame.java:404 src/plm/core/ui/MainFrame.java:502
+#: src/plm/core/ui/MainFrame.java:662
 msgid "Step"
 msgstr "Step"
 
-#: src/plm/core/ui/MainFrame.java:397 src/plm/core/ui/MainFrame.java:651
+#: src/plm/core/ui/MainFrame.java:409 src/plm/core/ui/MainFrame.java:663
 msgid "Stop"
 msgstr "Stop"
 
-#: src/plm/core/ui/MainFrame.java:403 src/plm/core/ui/MainFrame.java:652
+#: src/plm/core/ui/MainFrame.java:415 src/plm/core/ui/MainFrame.java:664
 msgid "Reset"
 msgstr "Reset"
 
-#: src/plm/core/ui/MainFrame.java:409 src/plm/core/ui/MainFrame.java:653
+#: src/plm/core/ui/MainFrame.java:421 src/plm/core/ui/MainFrame.java:665
 msgid "Demo"
 msgstr "Demo"
 
-#: src/plm/core/ui/MainFrame.java:415 src/plm/core/ui/MainFrame.java:654
+#: src/plm/core/ui/MainFrame.java:427 src/plm/core/ui/MainFrame.java:666
 #: src/plm/core/ui/action/HelpMe.java:37
 msgid "Call for Help"
 msgstr "Call for Help"
 
-#: src/plm/core/ui/MainFrame.java:475
+#: src/plm/core/ui/MainFrame.java:487
 msgid "Next"
 msgstr "Next"
 
-#: src/plm/core/ui/MainFrame.java:668
+#: src/plm/core/ui/MainFrame.java:680
 msgid "Lesson related functions"
 msgstr "Lesson related functions"
 
@@ -1084,10 +1083,68 @@ msgstr "Playing demo "
 msgid "Loading "
 msgstr "Loading"
 
+#: src/plm/core/ui/action/ExportCloudSession.java:78
+#: src/plm/core/ui/action/ImportCloudSession.java:53
+#, java-format
+msgid ""
+"No session cloud provider provided (property {0} is {1}). Please update your "
+"property file."
+msgstr ""
+
+#: src/plm/core/ui/action/ExportCloudSession.java:125
+#, java-format
+msgid ""
+"<html>Please remember the following code:<br/><h1>{0}</h1><br/>You will need "
+"it to import your session.</html>"
+msgstr ""
+
+#: src/plm/core/ui/action/ExportCloudSession.java:126
+msgid "Export success"
+msgstr ""
+
+#: src/plm/core/ui/action/ExportCloudSession.java:131
+#, java-format
+msgid ""
+"<html>Export to cloud failed.<br/>{0}<br/>Caution! Your session is not saved "
+"yet.</html>"
+msgstr ""
+
+#: src/plm/core/ui/action/ExportCloudSession.java:132
+msgid "Export error"
+msgstr ""
+
 #: src/plm/core/ui/action/HelpMe.java:37
 msgid "Cancel call"
 msgstr "Cancel call"
 
+#: src/plm/core/ui/action/ImportCloudSession.java:131
+msgid "Please enter your personal code to retrieve your session"
+msgstr ""
+
+#: src/plm/core/ui/action/ImportCloudSession.java:132
+#, fuzzy
+msgid "Session code"
+msgstr "Session"
+
+#: src/plm/core/ui/action/ImportCloudSession.java:150
+msgid "Your session has been successfully imported."
+msgstr ""
+
+#: src/plm/core/ui/action/ImportCloudSession.java:151
+#, fuzzy
+msgid "Importation suceeded"
+msgstr "Import Session Cache"
+
+#: src/plm/core/ui/action/ImportCloudSession.java:155
+#, java-format
+msgid "A {0} exception occured while importing your session: {1}"
+msgstr ""
+
+#: src/plm/core/ui/action/ImportCloudSession.java:156
+#, fuzzy
+msgid "Importation error"
+msgstr "Compilation error"
+
 #: src/plm/core/ui/action/PlayDemo.java:27
 msgid "Run the demo of what you should code for this exercise"
 msgstr "Run the demo of what you should code for this exercise"
@@ -1290,6 +1347,22 @@ msgstr ""
 msgid "Brush color (name or r/g/b)"
 msgstr ""
 
+#: src/plm/universe/Direction.java:59
+msgid "NORTH"
+msgstr ""
+
+#: src/plm/universe/Direction.java:61
+msgid "EAST"
+msgstr ""
+
+#: src/plm/universe/Direction.java:63
+msgid "SOUTH"
+msgstr ""
+
+#: src/plm/universe/Direction.java:65
+msgid "WEST"
+msgstr ""
+
 #: src/plm/universe/Entity.java:176
 #, java-format
 msgid ""
@@ -1326,81 +1399,81 @@ msgstr ""
 #: src/plm/universe/bat/BatEntity.java:65
 #: src/plm/universe/bat/BatEntity.java:94
 #, java-format
-msgid "This test raised an exception: {0}"
+msgid "This test raised a {0} exception: {1}"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:169
+#: src/plm/universe/bugglequest/AbstractBuggle.java:170
 #, java-format
 msgid ""
 "You tried to access a cell with Y={0}, but the maximal Y in this world is "
 "{1}."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:171
+#: src/plm/universe/bugglequest/AbstractBuggle.java:172
 #, java-format
 msgid ""
 "You tried to access a cell with X={0}, but the maximal X in this world is "
 "{1}."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:190
-#: src/plm/universe/bugglequest/AbstractBuggle.java:226
+#: src/plm/universe/bugglequest/AbstractBuggle.java:191
+#: src/plm/universe/bugglequest/AbstractBuggle.java:227
 #, java-format
 msgid "You tried to set X to {0}, but the maximal X in this world is {1}."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:209
-#: src/plm/universe/bugglequest/AbstractBuggle.java:224
+#: src/plm/universe/bugglequest/AbstractBuggle.java:210
+#: src/plm/universe/bugglequest/AbstractBuggle.java:225
 #, java-format
 msgid "You tried to set Y to {0}, but the maximal Y in this world is {1}."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:343
+#: src/plm/universe/bugglequest/AbstractBuggle.java:344
 #: src/plm/universe/bugglequest/BuggleWorldCell.java:128
 msgid "There is no baggle to pick up here."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:345
+#: src/plm/universe/bugglequest/AbstractBuggle.java:346
 msgid "Your are already carrying a baggle."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:425
+#: src/plm/universe/bugglequest/AbstractBuggle.java:428
 msgid "Its value is 'null', which is never good."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:432
+#: src/plm/universe/bugglequest/AbstractBuggle.java:435
 #, java-format
 msgid "    Its position is ({0},{1}); expected: ({2},{3}).\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:434
+#: src/plm/universe/bugglequest/AbstractBuggle.java:437
 #, java-format
 msgid "    Its direction is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:436
+#: src/plm/universe/bugglequest/AbstractBuggle.java:439
 #, java-format
 msgid "    Its color is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:438
+#: src/plm/universe/bugglequest/AbstractBuggle.java:441
 #, java-format
 msgid "    The color of its brush is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:440
+#: src/plm/universe/bugglequest/AbstractBuggle.java:443
 msgid "    It should not carry that baggle.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:442
+#: src/plm/universe/bugglequest/AbstractBuggle.java:445
 msgid "    It is not carrying any baggle.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:444
+#: src/plm/universe/bugglequest/AbstractBuggle.java:447
 msgid "    It encountered an issue, such as bumping into a wall.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:446
+#: src/plm/universe/bugglequest/AbstractBuggle.java:449
 msgid "    It didn't encounter any issue, such as bumping into a wall.\n"
 msgstr ""
 
@@ -1551,59 +1624,112 @@ msgstr ""
 msgid "Buggles cannot traverse walls"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:55
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:232
+#: src/plm/universe/bugglequest/exception/DontHaveBaggleException.java:10
+msgid "You have no baggle to drop"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:56
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:241
 msgid "forward"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:69
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:231
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:60
+msgid "forward()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:71
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:240
 msgid "backward"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:83
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:233
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:75
+msgid "backward()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:86
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:242
 msgid "left"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:91
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:234
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:89
+msgid "left()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:95
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:243
 msgid "right"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:99
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:235
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:98
+msgid "right()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:104
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:244
 msgid "mark"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:222
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:109
+msgid "brushUp()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:112
+msgid "brushDown()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:137
+#, java-format
+msgid "setBrushColor(Color.{0})"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:150
+#, java-format
+msgid "setColor(Color.{0})"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:231
 msgid "Wall hugging error"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:223
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:232
 msgid "Your buggle has collided with a wall, it hurts a lot ! ='("
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:236
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:245
 msgid "Brush Color"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:237
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:246
 msgid "Buggle Color"
 msgstr ""
 
-#: src/plm/universe/sort/SortingButtonPanel.java:63
+#: src/plm/universe/sort/SortingButtonPanel.java:59
 msgid "go"
 msgstr "go"
 
-#~ msgid "Current world"
-#~ msgstr "Current world"
+#: src/plm/universe/sort/SortingButtonPanel.java:70
+#, java-format
+msgid "swap({0},{1})"
+msgstr ""
+
+#: src/plm/universe/sort/SortingButtonPanel.java:74
+#, java-format
+msgid "setValue({0},{1})"
+msgstr ""
 
-#~ msgid "Target world"
-#~ msgstr "Target world"
+#: src/plm/universe/sort/SortingButtonPanel.java:78
+#, java-format
+msgid "copy({0},{1})"
+msgstr ""
 
-#~ msgid "Do you really want to quit ?"
-#~ msgstr "Do you really want to quit ?"
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "swap"
+msgstr ""
+
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "setValue"
+msgstr ""
 
-#~ msgid "Exit the PLM"
-#~ msgstr "Exit the PLM"
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "copy"
+msgstr ""
diff --git a/lib/l10n-engine/fr.po b/lib/l10n-engine/fr.po
index f1da761..735f84b 100644
--- a/lib/l10n-engine/fr.po
+++ b/lib/l10n-engine/fr.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PLM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-08 22:40+0200\n"
-"PO-Revision-Date: 2013-09-08 22:42+0200\n"
+"POT-Creation-Date: 2013-09-12 21:44+0200\n"
+"PO-Revision-Date: 2013-09-12 21:47+0200\n"
 "Last-Translator: Martin Quinson <martin.quinson at loria.fr> and Frank STENGEL "
 "<fstengel at mac.com>\n"
 "Language-Team: not really\n"
@@ -27,10 +27,11 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:11
 #: src/lessons/welcome/array/basics/Array2Entity.java:12
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."
+"Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal "
+"instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser setX() dans "
-"cet exercice."
+"Désolé Dave, je ne peux pas te laisser utiliser setX(x) dans cet exercice. "
+"Marche jusqu'à ton objectif."
 
 #: src/lessons/maze/island/IslandMazeEntity.java:15
 #: src/lessons/maze/pledge/PledgeMazeEntity.java:15
@@ -41,10 +42,11 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:16
 #: src/lessons/welcome/array/basics/Array2Entity.java:17
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."
+"Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal "
+"instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser setY() dans "
-"cet exercice."
+"Désolé Dave, je ne peux paste laisser utiliser setY(y) dans cet exercice.  "
+"Marche jusqu'à ton objectif."
 
 #: src/lessons/maze/island/IslandMazeEntity.java:20
 #: src/lessons/maze/pledge/PledgeMazeEntity.java:20
@@ -55,13 +57,20 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:21
 #: src/lessons/welcome/array/basics/Array2Entity.java:22
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."
+"Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your "
+"goal instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser setPos() "
-"dans cet exercice."
+"Désolé Dave, je ne peux pas te laisser utiliser setPos(x,y) dans cet "
+"exercice. Marche jusqu'à ton objectif."
 
-#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:70
-#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:68
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:73
+#, java-format
+msgid "move({0},{1})"
+msgstr "deplace({0},{1})"
+
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:71
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:77
 msgid "Invalid move"
 msgstr "Déplacement invalide"
 
@@ -98,7 +107,7 @@ msgstr ""
 msgid "Go"
 msgstr "Aller"
 
-#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:75
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
 #, java-format
 msgid ""
 "The player {0} of the base {1} cannot reach the hole that is too far from "
@@ -167,6 +176,11 @@ msgstr "Accéder à la vue temporelle"
 msgid "Switch to state view"
 msgstr "Accéder à la vue d'état"
 
+#: src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java:66
+#, java-format
+msgid "flip({0})"
+msgstr "retourne({0})"
+
 #: src/lessons/sort/pancake/universe/PancakeWorld.java:116
 msgid "This is not a world of pancakes :-("
 msgstr "Ce n'est pas un monde de crêpes :-("
@@ -215,17 +229,16 @@ msgstr ""
 #: src/lessons/welcome/loopwhile/BaggleSeekerEntity.java:9
 #: src/lessons/welcome/loopwhile/LoopWhileEntity.java:9
 #: src/lessons/welcome/loopwhile/WhileMoriaEntity.java:9
-#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:10
 #: src/lessons/welcome/methods/returning/MethodsReturningEntity.java:9
 #: src/lessons/welcome/variables/RunFourEntity.java:8
 #: src/lessons/welcome/variables/RunHalfEntity.java:10
 #: src/lessons/welcome/variables/VariablesEntity.java:8
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use forward with an argument in "
-"this exercise."
+"Sorry Dave, I cannot let you use forward with an argument in this exercise. "
+"Use a loop instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser avance() "
-"avec un argument dans cet exercice."
+"Je suis désolé Dave, je ne peux pas te laisser utiliser avance() avec un "
+"argument dans cet exercice. Utilise plutôt une boucle."
 
 #: src/lessons/welcome/loopdowhile/PoucetEntity.java:14
 #: src/lessons/welcome/loopfor/LoopCourseEntity.java:14
@@ -235,125 +248,99 @@ msgstr ""
 #: src/lessons/welcome/loopwhile/BaggleSeekerEntity.java:14
 #: src/lessons/welcome/loopwhile/LoopWhileEntity.java:14
 #: src/lessons/welcome/loopwhile/WhileMoriaEntity.java:14
-#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:14
 #: src/lessons/welcome/methods/returning/MethodsReturningEntity.java:14
 #: src/lessons/welcome/variables/RunFourEntity.java:12
 #: src/lessons/welcome/variables/RunHalfEntity.java:14
 #: src/lessons/welcome/variables/VariablesEntity.java:13
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use backward with an argument in "
-"this exercise."
+"Sorry Dave, I cannot let you use backward with an argument in this exercise. "
+"Use a loop instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser recule() "
-"avec un argument dans cet exercice."
+"Désolé Dave, je ne peux pas te laisser utiliser recule() avec un argument "
+"dans cet exercice. Utilise plutôt une boucle."
 
 #: src/lessons/welcome/loopfor/LoopCourseForestEntity.java:33
 msgid "You fall into water."
 msgstr "Vous êtes tombé dans l'eau."
 
 #: src/lessons/welcome/loopfor/LoopCourseForestEntity.java:33
-#: src/plm/universe/bugglequest/SimpleBuggle.java:29
-#: src/plm/universe/bugglequest/SimpleBuggle.java:40
-#: src/plm/universe/bugglequest/SimpleBuggle.java:51
-#: src/plm/universe/bugglequest/SimpleBuggle.java:62
-#: src/plm/universe/bugglequest/SimpleBuggle.java:78
-#: src/plm/universe/bugglequest/SimpleBuggle.java:82
-#: src/plm/universe/bugglequest/SimpleBuggle.java:93
-#: src/plm/universe/bugglequest/SimpleBuggle.java:103
-#: src/plm/universe/bugglequest/SimpleBuggle.java:113
-#: src/plm/universe/bugglequest/SimpleBuggle.java:123
+#: src/plm/universe/bugglequest/SimpleBuggle.java:30
+#: src/plm/universe/bugglequest/SimpleBuggle.java:41
+#: src/plm/universe/bugglequest/SimpleBuggle.java:52
+#: src/plm/universe/bugglequest/SimpleBuggle.java:63
+#: src/plm/universe/bugglequest/SimpleBuggle.java:79
+#: src/plm/universe/bugglequest/SimpleBuggle.java:83
+#: src/plm/universe/bugglequest/SimpleBuggle.java:94
+#: src/plm/universe/bugglequest/SimpleBuggle.java:97
+#: src/plm/universe/bugglequest/SimpleBuggle.java:106
+#: src/plm/universe/bugglequest/SimpleBuggle.java:116
+#: src/plm/universe/bugglequest/SimpleBuggle.java:126
 msgid "Test failed"
 msgstr "Test raté"
 
-#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:10
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:66
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:71
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:67
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:71
-msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."
-msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser droite() "
-"dans cet exercice."
-
-#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:26
-#, java-format
-msgid ""
-"I''m sorry Dave, I''m affraid I cant let you use left() both in lines {0} "
-"and {1} in this exercise."
-msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser gauche() à "
-"la fois aux lignes {0} et {1} dans cet exercice."
-
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:45
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:50
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:50
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:55
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:46
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:51
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:50
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:55
+#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:10
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."
+"I cannot let you use forward with an argument in this exercise. Use a loop "
+"instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser avance() "
-"dans cet exercice."
+"Désolé Dave, je ne peux pas te laisser utiliser avance() avec un argument "
+"dans cet exercice. Utilise plutôt une boucle."
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:54
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:58
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:59
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:63
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:55
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:59
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:59
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:63
+#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:14
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."
+"I cannot let you use backward with an argument in this exercise. Use a loop "
+"instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser recule() "
-"dans cet exercice."
+"Désolé Dave, je ne peux pas pouvoir te laisser utiliser recule() avec un "
+"argument dans cet exercice. Utilise plutôt une boucle."
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:62
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:67
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:63
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:67
+#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:10
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."
+"Sorry Dave, I cannot let you use right() in this exercise. Use left() "
+"instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser gauche() "
-"dans cet exercice."
+"Désolé Dave, je ne peux pas pouvoir te laisser utiliser droite() dans cet "
+"exercice. Utilise plutôt gauche()."
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:70
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:75
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:71
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:75
+#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:26
+#, java-format
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."
+"Sorry Dave, I cannot let you use left() both in lines {0} and {1} in this "
+"exercise. You can write left() only once in this exercise."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser retourne() "
-"dans cet exercice."
+"Désolé Dave, je ne peux pas te laisser utiliser gauche() à la fois aux "
+"lignes {0} et {1} dans cet exercice. Tu ne peux utiliser cette fonction "
+"qu'une fois dans ton source."
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:74
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:79
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:75
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:79
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:42
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:47
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:48
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:53
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:43
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:48
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:48
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:53
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this "
-"exercise."
+"Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) "
+"instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser "
-"estFaceMur() dans cet exercice."
+"Désolé Dave, je ne peux pas te laisser utiliser avance() dans cet exercice. "
+"Utilise plutôt setPos(x,y)."
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:78
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:83
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:79
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:83
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:51
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:55
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:57
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:61
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:52
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:56
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:57
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:61
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this "
-"exercise."
+"Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,"
+"y) instead."
 msgstr ""
-"Je suis désolé Dave, je ne crois pas pouvoir te laisser utiliser estDosMur() "
-"dans cet exercice."
+"Désolé Dave, je ne peux pas te laisser utiliser recule() dans cet exercice. "
+"Utilise plutôt setPos(x,y)."
 
 #.
 #. * FIXME: provide a way to debug
@@ -422,26 +409,26 @@ msgstr ""
 "Erreur inconnue (veuillez faire un rapport de bug) : {0}\\n\n"
 "Sa valeur est : {1}"
 
-#: src/plm/core/model/Game.java:151
+#: src/plm/core/model/Game.java:153
 msgid "Scala is usable on your machine. Congratulations."
 msgstr "Scala est utilisable sur votre machine. Félicitations."
 
-#: src/plm/core/model/Game.java:153
+#: src/plm/core/model/Game.java:155
 msgid "Please install Scala version 2.10 or higher to use it in PLM."
 msgstr ""
 "Veuillez installer Scala version 2.10 ou supérieure pour l'utiliser dans la "
 "PLM."
 
-#: src/plm/core/model/Game.java:155
+#: src/plm/core/model/Game.java:157
 msgid "Jython is usable on your machine. Congratulations."
 msgstr "Jython est utilisable sur votre machine. Félicitations."
 
-#: src/plm/core/model/Game.java:157
+#: src/plm/core/model/Game.java:159
 msgid "Please install jython to use the python programming language in PLM."
 msgstr ""
 "Veuillez installer jython afin d'utiliser le langage python dans la PLM."
 
-#: src/plm/core/model/Game.java:163
+#: src/plm/core/model/Game.java:165
 #, java-format
 msgid ""
 "Warning, the default programming language is neither ''Java'' nor ''python'' "
@@ -462,7 +449,7 @@ msgstr ""
 "  Vous pouvez également changer la propriété {1} de votre fichier de "
 "configuration ($HOME/.plm/plm.properties) pour cela."
 
-#: src/plm/core/model/Game.java:169
+#: src/plm/core/model/Game.java:171
 msgid ""
 "The default programming language is Scala, but your scala installation is "
 "not usable. Switching to Java instead.\n"
@@ -470,7 +457,7 @@ msgstr ""
 "Vous utilisez Scala par défaut, mais votre installation de Scala est cassée. "
 "Utilisation de Java à la place.\n"
 
-#: src/plm/core/model/Game.java:172
+#: src/plm/core/model/Game.java:174
 msgid ""
 "The default programming language is python, but your python installation is "
 "not usable. Switching to Java instead.\n"
@@ -478,7 +465,7 @@ msgstr ""
 "Vous utilisez python par défaut, mais votre installation de python est "
 "cassée. Utilisation de Java à la place.\n"
 
-#: src/plm/core/model/Game.java:185
+#: src/plm/core/model/Game.java:187
 #, java-format
 msgid ""
 "Your progress will be posted to https://twitter.com/jlmlovers This can be "
@@ -487,7 +474,7 @@ msgstr ""
 "Vos progrès seront postés sur http://twitter.com/jlmlovers Cela peut être "
 "désactivé par la propriété {0}."
 
-#: src/plm/core/model/Game.java:188
+#: src/plm/core/model/Game.java:190
 #, java-format
 msgid ""
 "Your progress will NOT be posted to twitter, as requested by the property {0}"
@@ -495,19 +482,19 @@ msgstr ""
 "Vos progrès ne seront PAS postés sur twitter, comme demandé par la propriété "
 "{0}."
 
-#: src/plm/core/model/Game.java:217
+#: src/plm/core/model/Game.java:219
 #, java-format
 msgid "Error {0} while retrieving the Scala version: {1}"
 msgstr "Erreur {0} lors de l''obtention du numéro de version de Scala: {1}"
 
-#: src/plm/core/model/Game.java:226
+#: src/plm/core/model/Game.java:228
 #, java-format
 msgid "Scala is too ancient. Found {0} while I need 2.10 or higher."
 msgstr ""
 "Scala est trop vieux. PLM nécessite la version 2.10 ou supérieure, mais la "
 "version trouvée est : {0}"
 
-#: src/plm/core/model/Game.java:251
+#: src/plm/core/model/Game.java:253
 msgid ""
 "Cannot retrieve the python ScriptEngine. Are jython.jar and its dependencies "
 "in the classpath?"
@@ -515,7 +502,7 @@ msgstr ""
 "Impossible de démarrer un engin de script pour python. Est ce que jython.jar "
 "et ses dépendences sont dans le classpath?"
 
-#: src/plm/core/model/Game.java:274
+#: src/plm/core/model/Game.java:276
 #, java-format
 msgid ""
 "Resource {0} not found in the classpath.\n"
@@ -524,26 +511,26 @@ msgstr ""
 "La ressource {0} est introuvable dans le classpath.\n"
 "Vous devriez peut-être ajouter {1} à votre classpath pour y remédier."
 
-#: src/plm/core/model/Game.java:276
+#: src/plm/core/model/Game.java:278
 #, java-format
 msgid "{0} received while searching for resource {1}: {2}"
 msgstr "{0} reçue lors de la recherche de la ressource {1}: {2}"
 
-#: src/plm/core/model/Game.java:320 src/plm/core/model/Game.java:321
+#: src/plm/core/model/Game.java:322 src/plm/core/model/Game.java:323
 #, java-format
 msgid "Cannot switch to lesson {0}: class Main not found."
 msgstr "Impossible de passer à la leçon {0} : la classe Main est introuvable."
 
-#: src/plm/core/model/Game.java:322
+#: src/plm/core/model/Game.java:324
 #, java-format
 msgid "Load lesson {0}"
 msgstr "Chargement de la leçon {0}"
 
-#: src/plm/core/model/Game.java:428 src/plm/core/model/Game.java:462
+#: src/plm/core/model/Game.java:430 src/plm/core/model/Game.java:464
 msgid "Operation cancelled by the user"
 msgstr "Opération annulée par l'utilisateur"
 
-#: src/plm/core/model/Game.java:453
+#: src/plm/core/model/Game.java:455
 #, java-format
 msgid ""
 "Exercise {0} does not support language {1}. Fallback to {2} instead. Please "
@@ -554,12 +541,12 @@ msgstr ""
 "à la place.\n"
 "Vous pourriez contribuer au projet en ajoutant votre langage à cet exercice."
 
-#: src/plm/core/model/Game.java:502
+#: src/plm/core/model/Game.java:504
 #, java-format
 msgid "The lecture {0} has no world that I can select"
 msgstr "La lecture {0} n'a aucun monde que je puisse sélectionner."
 
-#: src/plm/core/model/Game.java:906
+#: src/plm/core/model/Game.java:909
 msgid ""
 "Please install Scala version 2.10 or higher to use it in PLM.\n"
 "\n"
@@ -568,11 +555,11 @@ msgstr ""
 "PLM.\n"
 "\n"
 
-#: src/plm/core/model/Game.java:907
+#: src/plm/core/model/Game.java:910
 msgid "Scala is missing"
 msgstr "Scala est manquant"
 
-#: src/plm/core/model/Game.java:911
+#: src/plm/core/model/Game.java:914
 msgid ""
 "Please install jython and its dependencies to use the python programming "
 "language in PLM.\n"
@@ -582,32 +569,10 @@ msgstr ""
 "python.\n"
 "\n"
 
-#: src/plm/core/model/Game.java:912
+#: src/plm/core/model/Game.java:915
 msgid "Python is missing"
 msgstr "Python est manquant"
 
-#: src/plm/core/model/Game.java:1066
-#, java-format
-msgid "{0} is not writable"
-msgstr "{0} n'est pas accessible en écriture."
-
-#: src/plm/core/model/Game.java:1070
-#, java-format
-msgid "{0} is not a directory"
-msgstr "{0} n'est pas un répertoire."
-
-#: src/plm/core/model/Game.java:1077
-#, java-format
-msgid "Cannot create {0}"
-msgstr "Impossible de créer {0}"
-
-#: src/plm/core/model/Game.java:1083
-#, java-format
-msgid "Impossible to find a path for PLM data. Tested {0}"
-msgstr ""
-"Impossible de trouver un emplacement pour sauvegarder les données de PLM. "
-"Emplacements testés: {0}"
-
 #: src/plm/core/model/HelpServer.java:27
 msgid "Asking to the teacher for help"
 msgstr "Demander de l'aide à l'enseignant"
@@ -616,7 +581,7 @@ msgstr "Demander de l'aide à l'enseignant"
 msgid "Cancel call for help to the teacher"
 msgstr "Annuler la demande d'aide"
 
-#: src/plm/core/model/LessonRunner.java:94
+#: src/plm/core/model/LessonRunner.java:95
 #, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
@@ -625,18 +590,18 @@ msgstr ""
 "Félicitation, vous avez réussi cet exercice.\n"
 "{0} tests passés."
 
-#: src/plm/core/model/LessonRunner.java:96
-#: src/plm/core/model/LessonRunner.java:102
-#: src/plm/core/model/LessonRunner.java:111
-#: src/plm/core/model/LessonRunner.java:117
+#: src/plm/core/model/LessonRunner.java:97
+#: src/plm/core/model/LessonRunner.java:103
+#: src/plm/core/model/LessonRunner.java:112
+#: src/plm/core/model/LessonRunner.java:118
 msgid "Exercice passed \\o/"
 msgstr "Exercice réussi \\o/"
 
-#: src/plm/core/model/LessonRunner.java:100
+#: src/plm/core/model/LessonRunner.java:101
 msgid "Congratulations, you passed this exercise."
 msgstr "Félicitation, vous avez réussi cet exercice."
 
-#: src/plm/core/model/LessonRunner.java:110
+#: src/plm/core/model/LessonRunner.java:111
 #, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
@@ -647,7 +612,7 @@ msgstr ""
 "({0} tests passés)\n"
 "Par quel exercice voulez vous continuer ?"
 
-#: src/plm/core/model/LessonRunner.java:116
+#: src/plm/core/model/LessonRunner.java:117
 msgid ""
 "Congratulations, you passed this exercise.\n"
 "Which exercise will you do now?"
@@ -860,7 +825,7 @@ msgid "About PLM dialogTitle"
 msgstr "À propos de PLM"
 
 #: src/plm/core/ui/AboutPLMDialog.java:71
-#: src/plm/core/ui/ExerciseFailedDialog.java:49
+#: src/plm/core/ui/ExerciseFailedDialog.java:38
 msgid "Close"
 msgstr "Fermer"
 
@@ -900,12 +865,12 @@ msgstr ""
 "d'apprendre à votre rythme.</font></p><br/>"
 
 #: src/plm/core/ui/ChooseLessonDialog.java:132
-#: src/plm/core/ui/MainFrame.java:163
+#: src/plm/core/ui/MainFrame.java:165
 msgid "PLM lesson files"
 msgstr "Fichiers de leçons pour la PLM"
 
 #: src/plm/core/ui/ChooseLessonDialog.java:141
-#: src/plm/core/ui/MainFrame.java:172
+#: src/plm/core/ui/MainFrame.java:174
 msgid "Error"
 msgstr "Erreur"
 
@@ -947,17 +912,45 @@ msgstr "{0} exercices sur {1} réussis en {2}."
 msgid "You never attempted this lesson."
 msgstr "Vous n'avez jamais tenté cette leçon."
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:30
-msgid "Exercise failed /o\\"
-msgstr "Exercice raté /o\\"
+#: src/plm/core/ui/ExerciseFailedDialog.java:33
+msgid "Mmm, not quite /o\\"
+msgstr "Mmm, pas tout à fait /o\\\\"
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:39
-msgid "You didn't manage to reach your objective."
-msgstr "Vous n'avez pas atteint votre objectif"
+#: src/plm/core/ui/ExerciseFailedDialog.java:51
+msgid ""
+"<html>You didn't manage to reach your objective. <br>\n"
+"You should graphically compare the final state of your world <br>\n"
+"with the objective to understand the problem. <br>\n"
+"If you don't see the error, check the details below to for a <br>\n"
+"textual description of this difference between both worlds.</html>"
+msgstr ""
+"<html>Vous n'avez pas atteint votre objectif. <br>\n"
+"Vous devriez comparer graphiquement votre monde et celui de <br>\n"
+"l'objectif pour comprendre le problème. <br>\n"
+"Si vous ne voyez pas l'erreur, consultez les détails ci-dessous <br>\n"
+"pour une description textuelle des différences entre les deux mondes.</html>"
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:42
-msgid "Compilation error"
-msgstr "Erreur de compilation"
+#: src/plm/core/ui/ExerciseFailedDialog.java:59
+#, java-format
+msgid ""
+"<html>Compilation error.<br>\n"
+"You can find below the detailed error message (as given by {0}).<br>\n"
+"Please read it carfully to understand the problem, and fix your code.</html>"
+msgstr ""
+"<html>Erreur de compilation.<br>\n"
+"Vous trouverez ci dessous le message d''erreur détaillé renvoyé par {0}."
+"<br>\n"
+"Il faut que vous le lisiez attentivement pour comprendre le problème,<br>\n"
+"et corriger votre code.</html>"
+
+#: src/plm/core/ui/ExerciseFailedDialog.java:71
+#: src/plm/core/ui/ExerciseFailedDialog.java:78
+msgid "Details >>"
+msgstr "Détails >>"
+
+#: src/plm/core/ui/ExerciseFailedDialog.java:81
+msgid "Details <<"
+msgstr "Détails <<"
 
 #: src/plm/core/ui/ExerciseView.java:92 src/plm/core/ui/ExerciseView.java:161
 #: src/plm/core/ui/ExerciseView.java:218
@@ -991,11 +984,16 @@ msgstr "Changer la vitesse d'exécution"
 msgid "Switch the entity"
 msgstr "Changer d'entité"
 
-#: src/plm/core/ui/FeedbackDialog.java:49
+#: src/plm/core/ui/FeedbackDialog.java:44
+#: src/plm/core/ui/FeedbackDialog.java:88
+msgid "(your feedback comes here)"
+msgstr "(votre retour vient ici)"
+
+#: src/plm/core/ui/FeedbackDialog.java:51
 msgid "Report your feedback"
 msgstr "Signaler un problème dans PLM"
 
-#: src/plm/core/ui/FeedbackDialog.java:59
+#: src/plm/core/ui/FeedbackDialog.java:61
 msgid ""
 "<html><p>Thanks for your feedback on PLM. We deeply need this to make the "
 "tool match <br>your needs, so please don't hesitate to report any "
@@ -1030,10 +1028,6 @@ msgstr ""
 "d'utiliser <a href='http://github.com/oster/JLM/issues'>l'interface github</"
 "a>.</p></html>"
 
-#: src/plm/core/ui/FeedbackDialog.java:88
-msgid "(your feedback comes here)"
-msgstr "(votre retour vient ici)"
-
 #: src/plm/core/ui/FeedbackDialog.java:90
 msgid "Cancel"
 msgstr "Annuler"
@@ -1067,132 +1061,140 @@ msgstr "Endroit ou les erreurs et autres messages sont écrits"
 #. === FILE menu ===
 #. for now: leave the calls to i18n.tr: that way one is sure to get all the localized strings...
 #. Menus
-#: src/plm/core/ui/MainFrame.java:152 src/plm/core/ui/MainFrame.java:658
+#: src/plm/core/ui/MainFrame.java:154 src/plm/core/ui/MainFrame.java:670
 msgid "File"
 msgstr "Fichier"
 
-#: src/plm/core/ui/MainFrame.java:154
+#: src/plm/core/ui/MainFrame.java:156
 msgid "File related functions"
 msgstr "Fonction relatives à la gestion de fichiers"
 
-#: src/plm/core/ui/MainFrame.java:157 src/plm/core/ui/MainFrame.java:659
+#: src/plm/core/ui/MainFrame.java:159 src/plm/core/ui/MainFrame.java:671
 msgid "Load lesson"
 msgstr "Charger Leçon"
 
-#: src/plm/core/ui/MainFrame.java:179 src/plm/core/ui/MainFrame.java:660
+#: src/plm/core/ui/MainFrame.java:181 src/plm/core/ui/MainFrame.java:672
 msgid "Switch lesson"
 msgstr "Sélectionner une leçon"
 
-#: src/plm/core/ui/MainFrame.java:191 src/plm/core/ui/MainFrame.java:427
-#: src/plm/core/ui/MainFrame.java:655 src/plm/core/ui/MainFrame.java:661
+#: src/plm/core/ui/MainFrame.java:193 src/plm/core/ui/MainFrame.java:439
+#: src/plm/core/ui/MainFrame.java:667 src/plm/core/ui/MainFrame.java:673
 msgid "Switch exercise"
 msgstr "Changer d'exercice"
 
-#: src/plm/core/ui/MainFrame.java:204 src/plm/core/ui/MainFrame.java:663
+#: src/plm/core/ui/MainFrame.java:206 src/plm/core/ui/MainFrame.java:675
 msgid "Teacher Console"
 msgstr "Console enseignant"
 
 #. Menu item to change the current Course
-#: src/plm/core/ui/MainFrame.java:223 src/plm/core/ui/MainFrame.java:664
+#: src/plm/core/ui/MainFrame.java:225 src/plm/core/ui/MainFrame.java:676
 msgid "Choose your course"
 msgstr "Sélectionner un cours"
 
-#: src/plm/core/ui/MainFrame.java:242 src/plm/core/ui/MainFrame.java:665
+#: src/plm/core/ui/MainFrame.java:244 src/plm/core/ui/MainFrame.java:677
 msgid "Quit"
 msgstr "Quitter"
 
 #. === Edit menu ===
-#: src/plm/core/ui/MainFrame.java:250 src/plm/core/ui/MainFrame.java:667
+#: src/plm/core/ui/MainFrame.java:252 src/plm/core/ui/MainFrame.java:679
 msgid "Session"
 msgstr "Session"
 
-#: src/plm/core/ui/MainFrame.java:255 src/plm/core/ui/MainFrame.java:669
+#: src/plm/core/ui/MainFrame.java:257 src/plm/core/ui/MainFrame.java:681
 msgid "Revert Exercise"
 msgstr "Recommencer l'exercice"
 
-#: src/plm/core/ui/MainFrame.java:258 src/plm/core/ui/MainFrame.java:670
+#: src/plm/core/ui/MainFrame.java:260 src/plm/core/ui/MainFrame.java:682
 msgid "Export Session Cache"
 msgstr "Exporter le cache de session"
 
-#: src/plm/core/ui/MainFrame.java:261 src/plm/core/ui/MainFrame.java:671
+#: src/plm/core/ui/MainFrame.java:263 src/plm/core/ui/MainFrame.java:683
 msgid "Import Session Cache"
 msgstr "Importer le cache de session"
 
-#: src/plm/core/ui/MainFrame.java:265 src/plm/core/ui/MainFrame.java:672
+#: src/plm/core/ui/MainFrame.java:268 src/plm/core/ui/MainFrame.java:684
+msgid "Export Session Cache to Cloud"
+msgstr "Exporter la session dans le cloud"
+
+#: src/plm/core/ui/MainFrame.java:271 src/plm/core/ui/MainFrame.java:685
+msgid "Import Session Cache from Cloud"
+msgstr "Importer la session depuis le cloud"
+
+#: src/plm/core/ui/MainFrame.java:277 src/plm/core/ui/MainFrame.java:687
 msgid "Debug mode"
 msgstr "Mode débogage"
 
-#: src/plm/core/ui/MainFrame.java:276 src/plm/core/ui/MainFrame.java:673
+#: src/plm/core/ui/MainFrame.java:288 src/plm/core/ui/MainFrame.java:688
 msgid "Creative mode"
 msgstr "Mode créatif"
 
 #. === Language menu ===
-#: src/plm/core/ui/MainFrame.java:289 src/plm/core/ui/MainFrame.java:676
+#: src/plm/core/ui/MainFrame.java:301 src/plm/core/ui/MainFrame.java:691
 msgid "Language"
 msgstr "Langage"
 
 #. === Programming language changing ===
-#: src/plm/core/ui/MainFrame.java:294 src/plm/core/ui/MainFrame.java:677
+#: src/plm/core/ui/MainFrame.java:306 src/plm/core/ui/MainFrame.java:692
 msgid "Human"
 msgstr "Humain"
 
-#: src/plm/core/ui/MainFrame.java:308 src/plm/core/ui/MainFrame.java:678
+#: src/plm/core/ui/MainFrame.java:320 src/plm/core/ui/MainFrame.java:693
 msgid "Computer"
 msgstr "Ordinateur"
 
 #. === Help menu ===
-#: src/plm/core/ui/MainFrame.java:312 src/plm/core/ui/MainFrame.java:680
+#: src/plm/core/ui/MainFrame.java:324 src/plm/core/ui/MainFrame.java:695
 msgid "Help"
 msgstr "Aide"
 
-#: src/plm/core/ui/MainFrame.java:316 src/plm/core/ui/MainFrame.java:681
+#: src/plm/core/ui/MainFrame.java:328 src/plm/core/ui/MainFrame.java:696
 msgid "Provide feedback"
-msgstr "Faire un retour"
+msgstr "Rapport d'anomalie"
 
-#: src/plm/core/ui/MainFrame.java:326 src/plm/core/ui/MainFrame.java:682
+#: src/plm/core/ui/MainFrame.java:338 src/plm/core/ui/MainFrame.java:697
 msgid "About this lesson"
 msgstr "À propos de cette leçon"
 
-#: src/plm/core/ui/MainFrame.java:339 src/plm/core/ui/MainFrame.java:683
+#: src/plm/core/ui/MainFrame.java:351 src/plm/core/ui/MainFrame.java:698
 msgid "About this world"
 msgstr "À propos de ce monde"
 
-#: src/plm/core/ui/MainFrame.java:355 src/plm/core/ui/MainFrame.java:685
+#: src/plm/core/ui/MainFrame.java:367 src/plm/core/ui/MainFrame.java:700
 msgid "About PLM"
 msgstr "À propos de PLM"
 
 #. Buttons
-#: src/plm/core/ui/MainFrame.java:388 src/plm/core/ui/MainFrame.java:649
+#: src/plm/core/ui/MainFrame.java:400 src/plm/core/ui/MainFrame.java:661
 msgid "Run"
 msgstr "Exécuter"
 
-#: src/plm/core/ui/MainFrame.java:392 src/plm/core/ui/MainFrame.java:490
-#: src/plm/core/ui/MainFrame.java:650
+#: src/plm/core/ui/MainFrame.java:404 src/plm/core/ui/MainFrame.java:502
+#: src/plm/core/ui/MainFrame.java:662
 msgid "Step"
 msgstr "Un pas"
 
-#: src/plm/core/ui/MainFrame.java:397 src/plm/core/ui/MainFrame.java:651
+#: src/plm/core/ui/MainFrame.java:409 src/plm/core/ui/MainFrame.java:663
 msgid "Stop"
 msgstr "Stop"
 
-#: src/plm/core/ui/MainFrame.java:403 src/plm/core/ui/MainFrame.java:652
+#: src/plm/core/ui/MainFrame.java:415 src/plm/core/ui/MainFrame.java:664
 msgid "Reset"
 msgstr "Réinitialiser"
 
-#: src/plm/core/ui/MainFrame.java:409 src/plm/core/ui/MainFrame.java:653
+#: src/plm/core/ui/MainFrame.java:421 src/plm/core/ui/MainFrame.java:665
 msgid "Demo"
 msgstr "Démo"
 
-#: src/plm/core/ui/MainFrame.java:415 src/plm/core/ui/MainFrame.java:654
+#: src/plm/core/ui/MainFrame.java:427 src/plm/core/ui/MainFrame.java:666
 #: src/plm/core/ui/action/HelpMe.java:37
 msgid "Call for Help"
 msgstr "Appeler à l'aide"
 
-#: src/plm/core/ui/MainFrame.java:475
+#: src/plm/core/ui/MainFrame.java:487
 msgid "Next"
 msgstr "Suivant"
 
-#: src/plm/core/ui/MainFrame.java:668
+#: src/plm/core/ui/MainFrame.java:680
 msgid "Lesson related functions"
 msgstr "Fonctions relatives aux leçons"
 
@@ -1234,10 +1236,71 @@ msgstr "Exécution de la démo "
 msgid "Loading "
 msgstr "Chargement de "
 
+#: src/plm/core/ui/action/ExportCloudSession.java:78
+#: src/plm/core/ui/action/ImportCloudSession.java:53
+#, java-format
+msgid ""
+"No session cloud provider provided (property {0} is {1}). Please update your "
+"property file."
+msgstr ""
+"Aucun fournisseur de cloud pour la session (la propriété {0} vaut {1}). "
+"Veuillez modifier fichier de propriétés."
+
+#: src/plm/core/ui/action/ExportCloudSession.java:125
+#, java-format
+msgid ""
+"<html>Please remember the following code:<br/><h1>{0}</h1><br/>You will need "
+"it to import your session.</html>"
+msgstr ""
+"<html>Veuillez noter le code suivant :<br/><h1>{0}</h1><br/>Vous en aurez "
+"besoin pour importer votre session.</html>"
+
+#: src/plm/core/ui/action/ExportCloudSession.java:126
+msgid "Export success"
+msgstr "Export réussi"
+
+#: src/plm/core/ui/action/ExportCloudSession.java:131
+#, java-format
+msgid ""
+"<html>Export to cloud failed.<br/>{0}<br/>Caution! Your session is not saved "
+"yet.</html>"
+msgstr ""
+"<html>L''export de votre session dans le cloud a échoué.<br/>{0}<br/"
+">Attention! Votre session n''est pas encore sauvegardée.</html>"
+
+#: src/plm/core/ui/action/ExportCloudSession.java:132
+msgid "Export error"
+msgstr "Erreur d'export"
+
 #: src/plm/core/ui/action/HelpMe.java:37
 msgid "Cancel call"
 msgstr "Annuler l'appel"
 
+#: src/plm/core/ui/action/ImportCloudSession.java:131
+msgid "Please enter your personal code to retrieve your session"
+msgstr "Veuillez entrer votre code personnel pour sauvegarder la session"
+
+#: src/plm/core/ui/action/ImportCloudSession.java:132
+msgid "Session code"
+msgstr "Code de la session"
+
+#: src/plm/core/ui/action/ImportCloudSession.java:150
+msgid "Your session has been successfully imported."
+msgstr "Votre session a été importée avec succès."
+
+#: src/plm/core/ui/action/ImportCloudSession.java:151
+msgid "Importation suceeded"
+msgstr "Import réussi"
+
+#: src/plm/core/ui/action/ImportCloudSession.java:155
+#, java-format
+msgid "A {0} exception occured while importing your session: {1}"
+msgstr "Une exception {0} s''est produite lors de l''import de la session: {1}"
+
+#: src/plm/core/ui/action/ImportCloudSession.java:156
+msgid "Importation error"
+msgstr "Erreur d'import"
+
 #: src/plm/core/ui/action/PlayDemo.java:27
 msgid "Run the demo of what you should code for this exercise"
 msgstr ""
@@ -1449,6 +1512,22 @@ msgstr "Couleur de la buggle (nom ou r/g/b)"
 msgid "Brush color (name or r/g/b)"
 msgstr "Couleur du pinceau (nom ou r/g/b -- rouge/vert/bleu)"
 
+#: src/plm/universe/Direction.java:59
+msgid "NORTH"
+msgstr "NORD"
+
+#: src/plm/universe/Direction.java:61
+msgid "EAST"
+msgstr "EST"
+
+#: src/plm/universe/Direction.java:63
+msgid "SOUTH"
+msgstr "SUD"
+
+#: src/plm/universe/Direction.java:65
+msgid "WEST"
+msgstr "OUEST"
+
 #: src/plm/universe/Entity.java:176
 #, java-format
 msgid ""
@@ -1495,10 +1574,10 @@ msgstr ""
 #: src/plm/universe/bat/BatEntity.java:65
 #: src/plm/universe/bat/BatEntity.java:94
 #, java-format
-msgid "This test raised an exception: {0}"
-msgstr "Ce teste a levé une exception : {0}"
+msgid "This test raised a {0} exception: {1}"
+msgstr "Ce test a levé une exception {0} : {1}"
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:169
+#: src/plm/universe/bugglequest/AbstractBuggle.java:170
 #, java-format
 msgid ""
 "You tried to access a cell with Y={0}, but the maximal Y in this world is "
@@ -1507,7 +1586,7 @@ msgstr ""
 "Vous avez accedé à une cellule telle que Y={0}, mais le Y maximal pour ce "
 "monde est {1}."
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:171
+#: src/plm/universe/bugglequest/AbstractBuggle.java:172
 #, java-format
 msgid ""
 "You tried to access a cell with X={0}, but the maximal X in this world is "
@@ -1516,68 +1595,68 @@ msgstr ""
 "Vous avez accedé à une cellule telle que X={0}, mais le X maximal pour ce "
 "monde est {1}."
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:190
-#: src/plm/universe/bugglequest/AbstractBuggle.java:226
+#: src/plm/universe/bugglequest/AbstractBuggle.java:191
+#: src/plm/universe/bugglequest/AbstractBuggle.java:227
 #, java-format
 msgid "You tried to set X to {0}, but the maximal X in this world is {1}."
 msgstr ""
 "Vous avez tenté de mettre la valeur de X à {0}, mais le X maximal pour ce "
 "monde est {1}."
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:209
-#: src/plm/universe/bugglequest/AbstractBuggle.java:224
+#: src/plm/universe/bugglequest/AbstractBuggle.java:210
+#: src/plm/universe/bugglequest/AbstractBuggle.java:225
 #, java-format
 msgid "You tried to set Y to {0}, but the maximal Y in this world is {1}."
 msgstr ""
 "Vous avez tenté de mettre la valeur de Y à {0}, mais le Y maximal pour ce "
 "monde est {1}."
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:343
+#: src/plm/universe/bugglequest/AbstractBuggle.java:344
 #: src/plm/universe/bugglequest/BuggleWorldCell.java:128
 msgid "There is no baggle to pick up here."
 msgstr "Erreur : Il n'y a pas de biscuit à ramasser ici."
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:345
+#: src/plm/universe/bugglequest/AbstractBuggle.java:346
 msgid "Your are already carrying a baggle."
 msgstr "Vous portez déjà un biscuit."
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:425
+#: src/plm/universe/bugglequest/AbstractBuggle.java:428
 msgid "Its value is 'null', which is never good."
 msgstr "Sa valeur est 'null', ce qui n'est jamais bon."
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:432
+#: src/plm/universe/bugglequest/AbstractBuggle.java:435
 #, java-format
 msgid "    Its position is ({0},{1}); expected: ({2},{3}).\n"
 msgstr "    Sa position est ({0},{1}) ; attendue : ({2},{3}).\n"
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:434
+#: src/plm/universe/bugglequest/AbstractBuggle.java:437
 #, java-format
 msgid "    Its direction is {0}; expected: {1}.\n"
 msgstr "    Sa direction est {0} ; attendue : {1}.\n"
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:436
+#: src/plm/universe/bugglequest/AbstractBuggle.java:439
 #, java-format
 msgid "    Its color is {0}; expected: {1}.\n"
 msgstr "    Sa couleur est {0} ; attendue : {1}.\n"
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:438
+#: src/plm/universe/bugglequest/AbstractBuggle.java:441
 #, java-format
 msgid "    The color of its brush is {0}; expected: {1}.\n"
 msgstr "    La couleur de son pinceau est {0} ; attendue : {1}\n"
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:440
+#: src/plm/universe/bugglequest/AbstractBuggle.java:443
 msgid "    It should not carry that baggle.\n"
 msgstr "    Elle de devrait pas porter de biscuit.\n"
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:442
+#: src/plm/universe/bugglequest/AbstractBuggle.java:445
 msgid "    It is not carrying any baggle.\n"
 msgstr "    Elle ne porte pas de biscuit.\n"
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:444
+#: src/plm/universe/bugglequest/AbstractBuggle.java:447
 msgid "    It encountered an issue, such as bumping into a wall.\n"
 msgstr "    Elle a eu un problème tel que rencontrer un mur.\n"
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:446
+#: src/plm/universe/bugglequest/AbstractBuggle.java:449
 msgid "    It didn't encounter any issue, such as bumping into a wall.\n"
 msgstr "    Elle n'a pas eu de problème tel que rencontrer un mur.\n"
 
@@ -1747,53 +1826,112 @@ msgstr ", il devrait y avoir un mur au nord"
 msgid "Buggles cannot traverse walls"
 msgstr "Les buggles ne peuvent pas traverser les murs"
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:55
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:232
+#: src/plm/universe/bugglequest/exception/DontHaveBaggleException.java:10
+msgid "You have no baggle to drop"
+msgstr "Vous n'avez pas de biscuit à poser"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:56
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:241
 msgid "forward"
-msgstr "avancer"
+msgstr "avance"
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:69
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:231
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:60
+msgid "forward()"
+msgstr "avance()"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:71
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:240
 msgid "backward"
-msgstr "reculer"
+msgstr "recule"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:75
+msgid "backward()"
+msgstr "recule()"
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:83
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:233
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:86
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:242
 msgid "left"
 msgstr "gauche"
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:91
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:234
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:89
+msgid "left()"
+msgstr "gauche()"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:95
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:243
 msgid "right"
 msgstr "droite"
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:99
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:235
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:98
+msgid "right()"
+msgstr "droite()"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:104
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:244
 msgid "mark"
 msgstr "marquer"
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:222
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:109
+msgid "brushUp()"
+msgstr "leveBrosse()"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:112
+msgid "brushDown()"
+msgstr "baisseBrosse()"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:137
+#, java-format
+msgid "setBrushColor(Color.{0})"
+msgstr "setBrosseCouleur(Color.{0})"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:150
+#, java-format
+msgid "setColor(Color.{0})"
+msgstr "setCouleur(Color.{0})"
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:231
 msgid "Wall hugging error"
 msgstr "Erreur : impact avec un mur"
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:223
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:232
 msgid "Your buggle has collided with a wall, it hurts a lot ! ='("
 msgstr "Votre buggle a percuté un mur. Ça fait très mal ! ='( "
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:236
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:245
 msgid "Brush Color"
 msgstr "Couleur du pinceau"
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:237
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:246
 msgid "Buggle Color"
 msgstr "Couleur de la buggle"
 
-#: src/plm/universe/sort/SortingButtonPanel.java:63
+#: src/plm/universe/sort/SortingButtonPanel.java:59
 msgid "go"
 msgstr "aller"
 
-#~ msgid "Current world"
-#~ msgstr "Monde courant"
+#: src/plm/universe/sort/SortingButtonPanel.java:70
+#, java-format
+msgid "swap({0},{1})"
+msgstr "echange({0},{1})"
+
+#: src/plm/universe/sort/SortingButtonPanel.java:74
+#, java-format
+msgid "setValue({0},{1})"
+msgstr "setValeur({0},{1})"
+
+#: src/plm/universe/sort/SortingButtonPanel.java:78
+#, java-format
+msgid "copy({0},{1})"
+msgstr "copie({0},{1})"
+
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "swap"
+msgstr "echange"
+
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "setValue"
+msgstr "setValeur"
 
-#~ msgid "Target world"
-#~ msgstr "Monde attendu après exécution du code"
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "copy"
+msgstr "copie"
diff --git a/lib/l10n-engine/plm.pot b/lib/l10n-engine/plm.pot
index ecde5f0..77b9b9f 100644
--- a/lib/l10n-engine/plm.pot
+++ b/lib/l10n-engine/plm.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-09-08 22:40+0200\n"
+"POT-Creation-Date: 2013-09-12 21:46+0200\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -26,7 +26,8 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:11
 #: src/lessons/welcome/array/basics/Array2Entity.java:12
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."
+"Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal "
+"instead."
 msgstr ""
 
 #: src/lessons/maze/island/IslandMazeEntity.java:15
@@ -38,7 +39,8 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:16
 #: src/lessons/welcome/array/basics/Array2Entity.java:17
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."
+"Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal "
+"instead."
 msgstr ""
 
 #: src/lessons/maze/island/IslandMazeEntity.java:20
@@ -50,11 +52,18 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array1Entity.java:21
 #: src/lessons/welcome/array/basics/Array2Entity.java:22
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."
+"Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your "
+"goal instead."
 msgstr ""
 
-#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:70
-#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:68
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:73
+#, java-format
+msgid "move({0},{1})"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:71
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:77
 msgid "Invalid move"
 msgstr ""
 
@@ -87,7 +96,7 @@ msgstr ""
 msgid "Go"
 msgstr ""
 
-#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:75
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
 #, java-format
 msgid ""
 "The player {0} of the base {1} cannot reach the hole that is too far from "
@@ -148,6 +157,11 @@ msgstr ""
 msgid "Switch to state view"
 msgstr ""
 
+#: src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java:66
+#, java-format
+msgid "flip({0})"
+msgstr ""
+
 #: src/lessons/sort/pancake/universe/PancakeWorld.java:116
 msgid "This is not a world of pancakes :-("
 msgstr ""
@@ -188,14 +202,13 @@ msgstr ""
 #: src/lessons/welcome/loopwhile/BaggleSeekerEntity.java:9
 #: src/lessons/welcome/loopwhile/LoopWhileEntity.java:9
 #: src/lessons/welcome/loopwhile/WhileMoriaEntity.java:9
-#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:10
 #: src/lessons/welcome/methods/returning/MethodsReturningEntity.java:9
 #: src/lessons/welcome/variables/RunFourEntity.java:8
 #: src/lessons/welcome/variables/RunHalfEntity.java:10
 #: src/lessons/welcome/variables/VariablesEntity.java:8
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use forward with an argument in "
-"this exercise."
+"Sorry Dave, I cannot let you use forward with an argument in this exercise. "
+"Use a loop instead."
 msgstr ""
 
 #: src/lessons/welcome/loopdowhile/PoucetEntity.java:14
@@ -206,14 +219,13 @@ msgstr ""
 #: src/lessons/welcome/loopwhile/BaggleSeekerEntity.java:14
 #: src/lessons/welcome/loopwhile/LoopWhileEntity.java:14
 #: src/lessons/welcome/loopwhile/WhileMoriaEntity.java:14
-#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:14
 #: src/lessons/welcome/methods/returning/MethodsReturningEntity.java:14
 #: src/lessons/welcome/variables/RunFourEntity.java:12
 #: src/lessons/welcome/variables/RunHalfEntity.java:14
 #: src/lessons/welcome/variables/VariablesEntity.java:13
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use backward with an argument in "
-"this exercise."
+"Sorry Dave, I cannot let you use backward with an argument in this exercise. "
+"Use a loop instead."
 msgstr ""
 
 #: src/lessons/welcome/loopfor/LoopCourseForestEntity.java:33
@@ -221,91 +233,69 @@ msgid "You fall into water."
 msgstr ""
 
 #: src/lessons/welcome/loopfor/LoopCourseForestEntity.java:33
-#: src/plm/universe/bugglequest/SimpleBuggle.java:29
-#: src/plm/universe/bugglequest/SimpleBuggle.java:40
-#: src/plm/universe/bugglequest/SimpleBuggle.java:51
-#: src/plm/universe/bugglequest/SimpleBuggle.java:62
-#: src/plm/universe/bugglequest/SimpleBuggle.java:78
-#: src/plm/universe/bugglequest/SimpleBuggle.java:82
-#: src/plm/universe/bugglequest/SimpleBuggle.java:93
-#: src/plm/universe/bugglequest/SimpleBuggle.java:103
-#: src/plm/universe/bugglequest/SimpleBuggle.java:113
-#: src/plm/universe/bugglequest/SimpleBuggle.java:123
+#: src/plm/universe/bugglequest/SimpleBuggle.java:30
+#: src/plm/universe/bugglequest/SimpleBuggle.java:41
+#: src/plm/universe/bugglequest/SimpleBuggle.java:52
+#: src/plm/universe/bugglequest/SimpleBuggle.java:63
+#: src/plm/universe/bugglequest/SimpleBuggle.java:79
+#: src/plm/universe/bugglequest/SimpleBuggle.java:83
+#: src/plm/universe/bugglequest/SimpleBuggle.java:94
+#: src/plm/universe/bugglequest/SimpleBuggle.java:97
+#: src/plm/universe/bugglequest/SimpleBuggle.java:106
+#: src/plm/universe/bugglequest/SimpleBuggle.java:116
+#: src/plm/universe/bugglequest/SimpleBuggle.java:126
 msgid "Test failed"
 msgstr ""
 
-#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:10
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:66
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:71
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:67
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:71
-msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."
-msgstr ""
-
-#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:26
-#, java-format
-msgid ""
-"I''m sorry Dave, I''m affraid I cant let you use left() both in lines {0} "
-"and {1} in this exercise."
-msgstr ""
-
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:45
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:50
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:50
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:55
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:46
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:51
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:50
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:55
+#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:10
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."
+"I cannot let you use forward with an argument in this exercise. Use a loop "
+"instead."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:54
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:58
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:59
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:63
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:55
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:59
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:59
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:63
+#: src/lessons/welcome/methods/args/MethodsArgsEntity.java:14
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."
+"I cannot let you use backward with an argument in this exercise. Use a loop "
+"instead."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:62
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:67
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:63
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:67
+#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:10
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."
+"Sorry Dave, I cannot let you use right() in this exercise. Use left() "
+"instead."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:70
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:75
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:71
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:75
+#: src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java:26
+#, java-format
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."
+"Sorry Dave, I cannot let you use left() both in lines {0} and {1} in this "
+"exercise. You can write left() only once in this exercise."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:74
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:79
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:75
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:79
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:42
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:47
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:48
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:53
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:43
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:48
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:48
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:53
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this "
-"exercise."
+"Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) "
+"instead."
 msgstr ""
 
-#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:78
-#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:83
-#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:79
-#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:83
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:51
+#: src/lessons/welcome/traversal/column/TraversalByColumnEntity.java:55
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:57
+#: src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java:61
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:52
+#: src/lessons/welcome/traversal/line/TraversalByLineEntity.java:56
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:57
+#: src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java:61
 msgid ""
-"I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this "
-"exercise."
+"Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,"
+"y) instead."
 msgstr ""
 
 #.
@@ -364,23 +354,23 @@ msgid ""
 "Its value is: {1}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:151
+#: src/plm/core/model/Game.java:153
 msgid "Scala is usable on your machine. Congratulations."
 msgstr ""
 
-#: src/plm/core/model/Game.java:153
+#: src/plm/core/model/Game.java:155
 msgid "Please install Scala version 2.10 or higher to use it in PLM."
 msgstr ""
 
-#: src/plm/core/model/Game.java:155
+#: src/plm/core/model/Game.java:157
 msgid "Jython is usable on your machine. Congratulations."
 msgstr ""
 
-#: src/plm/core/model/Game.java:157
+#: src/plm/core/model/Game.java:159
 msgid "Please install jython to use the python programming language in PLM."
 msgstr ""
 
-#: src/plm/core/model/Game.java:163
+#: src/plm/core/model/Game.java:165
 #, java-format
 msgid ""
 "Warning, the default programming language is neither ''Java'' nor ''python'' "
@@ -393,74 +383,74 @@ msgid ""
 "($HOME/.plm/plm.properties)"
 msgstr ""
 
-#: src/plm/core/model/Game.java:169
+#: src/plm/core/model/Game.java:171
 msgid ""
 "The default programming language is Scala, but your scala installation is "
 "not usable. Switching to Java instead.\n"
 msgstr ""
 
-#: src/plm/core/model/Game.java:172
+#: src/plm/core/model/Game.java:174
 msgid ""
 "The default programming language is python, but your python installation is "
 "not usable. Switching to Java instead.\n"
 msgstr ""
 
-#: src/plm/core/model/Game.java:185
+#: src/plm/core/model/Game.java:187
 #, java-format
 msgid ""
 "Your progress will be posted to https://twitter.com/jlmlovers This can be "
 "turned off through the property {0}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:188
+#: src/plm/core/model/Game.java:190
 #, java-format
 msgid ""
 "Your progress will NOT be posted to twitter, as requested by the property {0}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:217
+#: src/plm/core/model/Game.java:219
 #, java-format
 msgid "Error {0} while retrieving the Scala version: {1}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:226
+#: src/plm/core/model/Game.java:228
 #, java-format
 msgid "Scala is too ancient. Found {0} while I need 2.10 or higher."
 msgstr ""
 
-#: src/plm/core/model/Game.java:251
+#: src/plm/core/model/Game.java:253
 msgid ""
 "Cannot retrieve the python ScriptEngine. Are jython.jar and its dependencies "
 "in the classpath?"
 msgstr ""
 
-#: src/plm/core/model/Game.java:274
+#: src/plm/core/model/Game.java:276
 #, java-format
 msgid ""
 "Resource {0} not found in the classpath.\n"
 "Is {1} in your classpath?"
 msgstr ""
 
-#: src/plm/core/model/Game.java:276
+#: src/plm/core/model/Game.java:278
 #, java-format
 msgid "{0} received while searching for resource {1}: {2}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:320 src/plm/core/model/Game.java:321
+#: src/plm/core/model/Game.java:322 src/plm/core/model/Game.java:323
 #, java-format
 msgid "Cannot switch to lesson {0}: class Main not found."
 msgstr ""
 
-#: src/plm/core/model/Game.java:322
+#: src/plm/core/model/Game.java:324
 #, java-format
 msgid "Load lesson {0}"
 msgstr ""
 
-#: src/plm/core/model/Game.java:428 src/plm/core/model/Game.java:462
+#: src/plm/core/model/Game.java:430 src/plm/core/model/Game.java:464
 msgid "Operation cancelled by the user"
 msgstr ""
 
-#: src/plm/core/model/Game.java:453
+#: src/plm/core/model/Game.java:455
 #, java-format
 msgid ""
 "Exercise {0} does not support language {1}. Fallback to {2} instead. Please "
@@ -468,52 +458,32 @@ msgid ""
 "language."
 msgstr ""
 
-#: src/plm/core/model/Game.java:502
+#: src/plm/core/model/Game.java:504
 #, java-format
 msgid "The lecture {0} has no world that I can select"
 msgstr ""
 
-#: src/plm/core/model/Game.java:906
+#: src/plm/core/model/Game.java:909
 msgid ""
 "Please install Scala version 2.10 or higher to use it in PLM.\n"
 "\n"
 msgstr ""
 
-#: src/plm/core/model/Game.java:907
+#: src/plm/core/model/Game.java:910
 msgid "Scala is missing"
 msgstr ""
 
-#: src/plm/core/model/Game.java:911
+#: src/plm/core/model/Game.java:914
 msgid ""
 "Please install jython and its dependencies to use the python programming "
 "language in PLM.\n"
 "\n"
 msgstr ""
 
-#: src/plm/core/model/Game.java:912
+#: src/plm/core/model/Game.java:915
 msgid "Python is missing"
 msgstr ""
 
-#: src/plm/core/model/Game.java:1066
-#, java-format
-msgid "{0} is not writable"
-msgstr ""
-
-#: src/plm/core/model/Game.java:1070
-#, java-format
-msgid "{0} is not a directory"
-msgstr ""
-
-#: src/plm/core/model/Game.java:1077
-#, java-format
-msgid "Cannot create {0}"
-msgstr ""
-
-#: src/plm/core/model/Game.java:1083
-#, java-format
-msgid "Impossible to find a path for PLM data. Tested {0}"
-msgstr ""
-
 #: src/plm/core/model/HelpServer.java:27
 msgid "Asking to the teacher for help"
 msgstr ""
@@ -522,25 +492,25 @@ msgstr ""
 msgid "Cancel call for help to the teacher"
 msgstr ""
 
-#: src/plm/core/model/LessonRunner.java:94
+#: src/plm/core/model/LessonRunner.java:95
 #, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
 "{0} tests passed."
 msgstr ""
 
-#: src/plm/core/model/LessonRunner.java:96
-#: src/plm/core/model/LessonRunner.java:102
-#: src/plm/core/model/LessonRunner.java:111
-#: src/plm/core/model/LessonRunner.java:117
+#: src/plm/core/model/LessonRunner.java:97
+#: src/plm/core/model/LessonRunner.java:103
+#: src/plm/core/model/LessonRunner.java:112
+#: src/plm/core/model/LessonRunner.java:118
 msgid "Exercice passed \\o/"
 msgstr ""
 
-#: src/plm/core/model/LessonRunner.java:100
+#: src/plm/core/model/LessonRunner.java:101
 msgid "Congratulations, you passed this exercise."
 msgstr ""
 
-#: src/plm/core/model/LessonRunner.java:110
+#: src/plm/core/model/LessonRunner.java:111
 #, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
@@ -548,7 +518,7 @@ msgid ""
 "Which exercise will you do now?"
 msgstr ""
 
-#: src/plm/core/model/LessonRunner.java:116
+#: src/plm/core/model/LessonRunner.java:117
 msgid ""
 "Congratulations, you passed this exercise.\n"
 "Which exercise will you do now?"
@@ -728,7 +698,7 @@ msgid "About PLM dialogTitle"
 msgstr ""
 
 #: src/plm/core/ui/AboutPLMDialog.java:71
-#: src/plm/core/ui/ExerciseFailedDialog.java:49
+#: src/plm/core/ui/ExerciseFailedDialog.java:38
 msgid "Close"
 msgstr ""
 
@@ -757,12 +727,12 @@ msgid ""
 msgstr ""
 
 #: src/plm/core/ui/ChooseLessonDialog.java:132
-#: src/plm/core/ui/MainFrame.java:163
+#: src/plm/core/ui/MainFrame.java:165
 msgid "PLM lesson files"
 msgstr ""
 
 #: src/plm/core/ui/ChooseLessonDialog.java:141
-#: src/plm/core/ui/MainFrame.java:172
+#: src/plm/core/ui/MainFrame.java:174
 msgid "Error"
 msgstr ""
 
@@ -799,16 +769,34 @@ msgstr ""
 msgid "You never attempted this lesson."
 msgstr ""
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:30
-msgid "Exercise failed /o\\"
+#: src/plm/core/ui/ExerciseFailedDialog.java:33
+msgid "Mmm, not quite /o\\"
+msgstr ""
+
+#: src/plm/core/ui/ExerciseFailedDialog.java:51
+msgid ""
+"<html>You didn't manage to reach your objective. <br>\n"
+"You should graphically compare the final state of your world <br>\n"
+"with the objective to understand the problem. <br>\n"
+"If you don't see the error, check the details below to for a <br>\n"
+"textual description of this difference between both worlds.</html>"
+msgstr ""
+
+#: src/plm/core/ui/ExerciseFailedDialog.java:59
+#, java-format
+msgid ""
+"<html>Compilation error.<br>\n"
+"You can find below the detailed error message (as given by {0}).<br>\n"
+"Please read it carfully to understand the problem, and fix your code.</html>"
 msgstr ""
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:39
-msgid "You didn't manage to reach your objective."
+#: src/plm/core/ui/ExerciseFailedDialog.java:71
+#: src/plm/core/ui/ExerciseFailedDialog.java:78
+msgid "Details >>"
 msgstr ""
 
-#: src/plm/core/ui/ExerciseFailedDialog.java:42
-msgid "Compilation error"
+#: src/plm/core/ui/ExerciseFailedDialog.java:81
+msgid "Details <<"
 msgstr ""
 
 #: src/plm/core/ui/ExerciseView.java:92 src/plm/core/ui/ExerciseView.java:161
@@ -843,11 +831,16 @@ msgstr ""
 msgid "Switch the entity"
 msgstr ""
 
-#: src/plm/core/ui/FeedbackDialog.java:49
+#: src/plm/core/ui/FeedbackDialog.java:44
+#: src/plm/core/ui/FeedbackDialog.java:88
+msgid "(your feedback comes here)"
+msgstr ""
+
+#: src/plm/core/ui/FeedbackDialog.java:51
 msgid "Report your feedback"
 msgstr ""
 
-#: src/plm/core/ui/FeedbackDialog.java:59
+#: src/plm/core/ui/FeedbackDialog.java:61
 msgid ""
 "<html><p>Thanks for your feedback on PLM. We deeply need this to make the "
 "tool match <br>your needs, so please don't hesitate to report any "
@@ -865,10 +858,6 @@ msgid ""
 "for feedback.</p></html>"
 msgstr ""
 
-#: src/plm/core/ui/FeedbackDialog.java:88
-msgid "(your feedback comes here)"
-msgstr ""
-
 #: src/plm/core/ui/FeedbackDialog.java:90
 msgid "Cancel"
 msgstr ""
@@ -901,132 +890,140 @@ msgstr ""
 #. === FILE menu ===
 #. for now: leave the calls to i18n.tr: that way one is sure to get all the localized strings...
 #. Menus
-#: src/plm/core/ui/MainFrame.java:152 src/plm/core/ui/MainFrame.java:658
+#: src/plm/core/ui/MainFrame.java:154 src/plm/core/ui/MainFrame.java:670
 msgid "File"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:154
+#: src/plm/core/ui/MainFrame.java:156
 msgid "File related functions"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:157 src/plm/core/ui/MainFrame.java:659
+#: src/plm/core/ui/MainFrame.java:159 src/plm/core/ui/MainFrame.java:671
 msgid "Load lesson"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:179 src/plm/core/ui/MainFrame.java:660
+#: src/plm/core/ui/MainFrame.java:181 src/plm/core/ui/MainFrame.java:672
 msgid "Switch lesson"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:191 src/plm/core/ui/MainFrame.java:427
-#: src/plm/core/ui/MainFrame.java:655 src/plm/core/ui/MainFrame.java:661
+#: src/plm/core/ui/MainFrame.java:193 src/plm/core/ui/MainFrame.java:439
+#: src/plm/core/ui/MainFrame.java:667 src/plm/core/ui/MainFrame.java:673
 msgid "Switch exercise"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:204 src/plm/core/ui/MainFrame.java:663
+#: src/plm/core/ui/MainFrame.java:206 src/plm/core/ui/MainFrame.java:675
 msgid "Teacher Console"
 msgstr ""
 
 #. Menu item to change the current Course
-#: src/plm/core/ui/MainFrame.java:223 src/plm/core/ui/MainFrame.java:664
+#: src/plm/core/ui/MainFrame.java:225 src/plm/core/ui/MainFrame.java:676
 msgid "Choose your course"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:242 src/plm/core/ui/MainFrame.java:665
+#: src/plm/core/ui/MainFrame.java:244 src/plm/core/ui/MainFrame.java:677
 msgid "Quit"
 msgstr ""
 
 #. === Edit menu ===
-#: src/plm/core/ui/MainFrame.java:250 src/plm/core/ui/MainFrame.java:667
+#: src/plm/core/ui/MainFrame.java:252 src/plm/core/ui/MainFrame.java:679
 msgid "Session"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:255 src/plm/core/ui/MainFrame.java:669
+#: src/plm/core/ui/MainFrame.java:257 src/plm/core/ui/MainFrame.java:681
 msgid "Revert Exercise"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:258 src/plm/core/ui/MainFrame.java:670
+#: src/plm/core/ui/MainFrame.java:260 src/plm/core/ui/MainFrame.java:682
 msgid "Export Session Cache"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:261 src/plm/core/ui/MainFrame.java:671
+#: src/plm/core/ui/MainFrame.java:263 src/plm/core/ui/MainFrame.java:683
 msgid "Import Session Cache"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:265 src/plm/core/ui/MainFrame.java:672
+#: src/plm/core/ui/MainFrame.java:268 src/plm/core/ui/MainFrame.java:684
+msgid "Export Session Cache to Cloud"
+msgstr ""
+
+#: src/plm/core/ui/MainFrame.java:271 src/plm/core/ui/MainFrame.java:685
+msgid "Import Session Cache from Cloud"
+msgstr ""
+
+#: src/plm/core/ui/MainFrame.java:277 src/plm/core/ui/MainFrame.java:687
 msgid "Debug mode"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:276 src/plm/core/ui/MainFrame.java:673
+#: src/plm/core/ui/MainFrame.java:288 src/plm/core/ui/MainFrame.java:688
 msgid "Creative mode"
 msgstr ""
 
 #. === Language menu ===
-#: src/plm/core/ui/MainFrame.java:289 src/plm/core/ui/MainFrame.java:676
+#: src/plm/core/ui/MainFrame.java:301 src/plm/core/ui/MainFrame.java:691
 msgid "Language"
 msgstr ""
 
 #. === Programming language changing ===
-#: src/plm/core/ui/MainFrame.java:294 src/plm/core/ui/MainFrame.java:677
+#: src/plm/core/ui/MainFrame.java:306 src/plm/core/ui/MainFrame.java:692
 msgid "Human"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:308 src/plm/core/ui/MainFrame.java:678
+#: src/plm/core/ui/MainFrame.java:320 src/plm/core/ui/MainFrame.java:693
 msgid "Computer"
 msgstr ""
 
 #. === Help menu ===
-#: src/plm/core/ui/MainFrame.java:312 src/plm/core/ui/MainFrame.java:680
+#: src/plm/core/ui/MainFrame.java:324 src/plm/core/ui/MainFrame.java:695
 msgid "Help"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:316 src/plm/core/ui/MainFrame.java:681
+#: src/plm/core/ui/MainFrame.java:328 src/plm/core/ui/MainFrame.java:696
 msgid "Provide feedback"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:326 src/plm/core/ui/MainFrame.java:682
+#: src/plm/core/ui/MainFrame.java:338 src/plm/core/ui/MainFrame.java:697
 msgid "About this lesson"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:339 src/plm/core/ui/MainFrame.java:683
+#: src/plm/core/ui/MainFrame.java:351 src/plm/core/ui/MainFrame.java:698
 msgid "About this world"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:355 src/plm/core/ui/MainFrame.java:685
+#: src/plm/core/ui/MainFrame.java:367 src/plm/core/ui/MainFrame.java:700
 msgid "About PLM"
 msgstr ""
 
 #. Buttons
-#: src/plm/core/ui/MainFrame.java:388 src/plm/core/ui/MainFrame.java:649
+#: src/plm/core/ui/MainFrame.java:400 src/plm/core/ui/MainFrame.java:661
 msgid "Run"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:392 src/plm/core/ui/MainFrame.java:490
-#: src/plm/core/ui/MainFrame.java:650
+#: src/plm/core/ui/MainFrame.java:404 src/plm/core/ui/MainFrame.java:502
+#: src/plm/core/ui/MainFrame.java:662
 msgid "Step"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:397 src/plm/core/ui/MainFrame.java:651
+#: src/plm/core/ui/MainFrame.java:409 src/plm/core/ui/MainFrame.java:663
 msgid "Stop"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:403 src/plm/core/ui/MainFrame.java:652
+#: src/plm/core/ui/MainFrame.java:415 src/plm/core/ui/MainFrame.java:664
 msgid "Reset"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:409 src/plm/core/ui/MainFrame.java:653
+#: src/plm/core/ui/MainFrame.java:421 src/plm/core/ui/MainFrame.java:665
 msgid "Demo"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:415 src/plm/core/ui/MainFrame.java:654
+#: src/plm/core/ui/MainFrame.java:427 src/plm/core/ui/MainFrame.java:666
 #: src/plm/core/ui/action/HelpMe.java:37
 msgid "Call for Help"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:475
+#: src/plm/core/ui/MainFrame.java:487
 msgid "Next"
 msgstr ""
 
-#: src/plm/core/ui/MainFrame.java:668
+#: src/plm/core/ui/MainFrame.java:680
 msgid "Lesson related functions"
 msgstr ""
 
@@ -1068,10 +1065,65 @@ msgstr ""
 msgid "Loading "
 msgstr ""
 
+#: src/plm/core/ui/action/ExportCloudSession.java:78
+#: src/plm/core/ui/action/ImportCloudSession.java:53
+#, java-format
+msgid ""
+"No session cloud provider provided (property {0} is {1}). Please update your "
+"property file."
+msgstr ""
+
+#: src/plm/core/ui/action/ExportCloudSession.java:125
+#, java-format
+msgid ""
+"<html>Please remember the following code:<br/><h1>{0}</h1><br/>You will need "
+"it to import your session.</html>"
+msgstr ""
+
+#: src/plm/core/ui/action/ExportCloudSession.java:126
+msgid "Export success"
+msgstr ""
+
+#: src/plm/core/ui/action/ExportCloudSession.java:131
+#, java-format
+msgid ""
+"<html>Export to cloud failed.<br/>{0}<br/>Caution! Your session is not saved "
+"yet.</html>"
+msgstr ""
+
+#: src/plm/core/ui/action/ExportCloudSession.java:132
+msgid "Export error"
+msgstr ""
+
 #: src/plm/core/ui/action/HelpMe.java:37
 msgid "Cancel call"
 msgstr ""
 
+#: src/plm/core/ui/action/ImportCloudSession.java:131
+msgid "Please enter your personal code to retrieve your session"
+msgstr ""
+
+#: src/plm/core/ui/action/ImportCloudSession.java:132
+msgid "Session code"
+msgstr ""
+
+#: src/plm/core/ui/action/ImportCloudSession.java:150
+msgid "Your session has been successfully imported."
+msgstr ""
+
+#: src/plm/core/ui/action/ImportCloudSession.java:151
+msgid "Importation suceeded"
+msgstr ""
+
+#: src/plm/core/ui/action/ImportCloudSession.java:155
+#, java-format
+msgid "A {0} exception occured while importing your session: {1}"
+msgstr ""
+
+#: src/plm/core/ui/action/ImportCloudSession.java:156
+msgid "Importation error"
+msgstr ""
+
 #: src/plm/core/ui/action/PlayDemo.java:27
 msgid "Run the demo of what you should code for this exercise"
 msgstr ""
@@ -1267,6 +1319,22 @@ msgstr ""
 msgid "Brush color (name or r/g/b)"
 msgstr ""
 
+#: src/plm/universe/Direction.java:59
+msgid "NORTH"
+msgstr ""
+
+#: src/plm/universe/Direction.java:61
+msgid "EAST"
+msgstr ""
+
+#: src/plm/universe/Direction.java:63
+msgid "SOUTH"
+msgstr ""
+
+#: src/plm/universe/Direction.java:65
+msgid "WEST"
+msgstr ""
+
 #: src/plm/universe/Entity.java:176
 #, java-format
 msgid ""
@@ -1303,81 +1371,81 @@ msgstr ""
 #: src/plm/universe/bat/BatEntity.java:65
 #: src/plm/universe/bat/BatEntity.java:94
 #, java-format
-msgid "This test raised an exception: {0}"
+msgid "This test raised a {0} exception: {1}"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:169
+#: src/plm/universe/bugglequest/AbstractBuggle.java:170
 #, java-format
 msgid ""
 "You tried to access a cell with Y={0}, but the maximal Y in this world is "
 "{1}."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:171
+#: src/plm/universe/bugglequest/AbstractBuggle.java:172
 #, java-format
 msgid ""
 "You tried to access a cell with X={0}, but the maximal X in this world is "
 "{1}."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:190
-#: src/plm/universe/bugglequest/AbstractBuggle.java:226
+#: src/plm/universe/bugglequest/AbstractBuggle.java:191
+#: src/plm/universe/bugglequest/AbstractBuggle.java:227
 #, java-format
 msgid "You tried to set X to {0}, but the maximal X in this world is {1}."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:209
-#: src/plm/universe/bugglequest/AbstractBuggle.java:224
+#: src/plm/universe/bugglequest/AbstractBuggle.java:210
+#: src/plm/universe/bugglequest/AbstractBuggle.java:225
 #, java-format
 msgid "You tried to set Y to {0}, but the maximal Y in this world is {1}."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:343
+#: src/plm/universe/bugglequest/AbstractBuggle.java:344
 #: src/plm/universe/bugglequest/BuggleWorldCell.java:128
 msgid "There is no baggle to pick up here."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:345
+#: src/plm/universe/bugglequest/AbstractBuggle.java:346
 msgid "Your are already carrying a baggle."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:425
+#: src/plm/universe/bugglequest/AbstractBuggle.java:428
 msgid "Its value is 'null', which is never good."
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:432
+#: src/plm/universe/bugglequest/AbstractBuggle.java:435
 #, java-format
 msgid "    Its position is ({0},{1}); expected: ({2},{3}).\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:434
+#: src/plm/universe/bugglequest/AbstractBuggle.java:437
 #, java-format
 msgid "    Its direction is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:436
+#: src/plm/universe/bugglequest/AbstractBuggle.java:439
 #, java-format
 msgid "    Its color is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:438
+#: src/plm/universe/bugglequest/AbstractBuggle.java:441
 #, java-format
 msgid "    The color of its brush is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:440
+#: src/plm/universe/bugglequest/AbstractBuggle.java:443
 msgid "    It should not carry that baggle.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:442
+#: src/plm/universe/bugglequest/AbstractBuggle.java:445
 msgid "    It is not carrying any baggle.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:444
+#: src/plm/universe/bugglequest/AbstractBuggle.java:447
 msgid "    It encountered an issue, such as bumping into a wall.\n"
 msgstr ""
 
-#: src/plm/universe/bugglequest/AbstractBuggle.java:446
+#: src/plm/universe/bugglequest/AbstractBuggle.java:449
 msgid "    It didn't encounter any issue, such as bumping into a wall.\n"
 msgstr ""
 
@@ -1528,47 +1596,112 @@ msgstr ""
 msgid "Buggles cannot traverse walls"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:55
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:232
+#: src/plm/universe/bugglequest/exception/DontHaveBaggleException.java:10
+msgid "You have no baggle to drop"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:56
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:241
 msgid "forward"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:69
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:231
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:60
+msgid "forward()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:71
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:240
 msgid "backward"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:83
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:233
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:75
+msgid "backward()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:86
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:242
 msgid "left"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:91
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:234
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:89
+msgid "left()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:95
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:243
 msgid "right"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:99
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:235
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:98
+msgid "right()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:104
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:244
 msgid "mark"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:222
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:109
+msgid "brushUp()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:112
+msgid "brushDown()"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:137
+#, java-format
+msgid "setBrushColor(Color.{0})"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:150
+#, java-format
+msgid "setColor(Color.{0})"
+msgstr ""
+
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:231
 msgid "Wall hugging error"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:223
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:232
 msgid "Your buggle has collided with a wall, it hurts a lot ! ='("
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:236
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:245
 msgid "Brush Color"
 msgstr ""
 
-#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:237
+#: src/plm/universe/bugglequest/ui/BuggleButtonPanel.java:246
 msgid "Buggle Color"
 msgstr ""
 
-#: src/plm/universe/sort/SortingButtonPanel.java:63
+#: src/plm/universe/sort/SortingButtonPanel.java:59
 msgid "go"
 msgstr ""
+
+#: src/plm/universe/sort/SortingButtonPanel.java:70
+#, java-format
+msgid "swap({0},{1})"
+msgstr ""
+
+#: src/plm/universe/sort/SortingButtonPanel.java:74
+#, java-format
+msgid "setValue({0},{1})"
+msgstr ""
+
+#: src/plm/universe/sort/SortingButtonPanel.java:78
+#, java-format
+msgid "copy({0},{1})"
+msgstr ""
+
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "swap"
+msgstr ""
+
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "setValue"
+msgstr ""
+
+#: src/plm/universe/sort/SortingButtonPanel.java:108
+msgid "copy"
+msgstr ""
diff --git a/lib/l10n/fr.po b/lib/l10n/fr.po
index d1bd0fb..668089b 100644
--- a/lib/l10n/fr.po
+++ b/lib/l10n/fr.po
@@ -6,8 +6,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PLM mission texts\n"
-"POT-Creation-Date: 2013-09-08 22:37+0300\n"
-"PO-Revision-Date: 2013-09-08 22:38+0200\n"
+"POT-Creation-Date: 2013-09-12 21:41+0300\n"
+"PO-Revision-Date: 2013-09-12 21:42+0200\n"
 "Last-Translator: Martin Quinson\n"
 "Language-Team: none\n"
 "Language: French\n"
@@ -559,8 +559,8 @@ msgid ""
 "[!java]void [/!]forward([!java]double [/!]steps[!scala]:Double[/!])\n"
 "[!java]void [/!]backward([!java]double [/!]steps[!scala]:Double[/!])"
 msgstr ""
-"[!java]void [/!]avance([!java]double [/!]steps[!scala]:Double[/!])\n"
-"[!java]void [/!]recule([!java]double [/!]steps[!scala]:Double[/!])"
+"[!java]void [/!]avance([!java]double [/!]nbPas[!scala]:Double[/!])\n"
+"[!java]void [/!]recule([!java]double [/!]nbPas[!scala]:Double[/!])"
 
 #. type: Content of: outside any tag (error?)
 #: src/plm/universe/turtles/TurtleWorld.html:15
@@ -639,38 +639,49 @@ msgstr "Dessine un cercle du rayon demandé et centré sur la tortue."
 #. type: Content of: <pre>
 #: src/plm/universe/turtles/TurtleWorld.html:36
 #, no-wrap
+msgid "[!java]void [/!]clear()"
+msgstr "[!java]void [/!]efface()"
+
+#. type: Content of: outside any tag (error?)
+#: src/plm/universe/turtles/TurtleWorld.html:37
+msgid "Removes any trail on the sheet."
+msgstr "Efface toutes les traces de la feuille."
+
+#. type: Content of: <pre>
+#: src/plm/universe/turtles/TurtleWorld.html:39
+#, no-wrap
 msgid "[!java]double [/!]getHeading()[!scala]:Double[/!]"
 msgstr "[!java]double [/!]getCap()[!scala]:Double[/!]"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:37
+#: src/plm/universe/turtles/TurtleWorld.html:40
 msgid "Returns the current heading of the turtle (in degrees)."
 msgstr "Retourne le cap actuel de la tortue (en degrés)."
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:39
+#: src/plm/universe/turtles/TurtleWorld.html:42
 #, no-wrap
 msgid "[!java]void [/!]setHeading([!java]double [/!]angle[!scala]:Double[/!])"
 msgstr "[!java]void [/!]setCap([!java]double [/!]angle[!scala]:Double[/!])"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:40
+#: src/plm/universe/turtles/TurtleWorld.html:43
 msgid "Sets a new heading to the turtle (in degrees)."
 msgstr "Change le cap de la tortue à l'angle indiqué (en degrés)."
 
 #. type: Content of: <h2>
-#: src/plm/universe/turtles/TurtleWorld.html:42
+#: src/plm/universe/turtles/TurtleWorld.html:45
 msgid "Functions about the pen"
 msgstr "Fonctions à propos du stylo"
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:44
+#: src/plm/universe/turtles/TurtleWorld.html:47
 #, no-wrap
 msgid "[!java]void [/!]penUp()"
 msgstr "[!java]void [/!]leveCrayon()"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:45
+#: src/plm/universe/turtles/TurtleWorld.html:48
 msgid ""
 "Moves the pen up (turtles have pens, not brushes as buggles). The turtle "
 "will not leave any trace during its subsequent moves."
@@ -680,13 +691,13 @@ msgstr ""
 "déplacements suivants."
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:48
+#: src/plm/universe/turtles/TurtleWorld.html:51
 #, no-wrap
 msgid "[!java]void [/!]penDown()"
 msgstr "[!java]void [/!]baisseCrayon()"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:49
+#: src/plm/universe/turtles/TurtleWorld.html:52
 msgid ""
 "Moves the pen down. The turtle will leave a trace during its subsequent "
 "moves."
@@ -695,46 +706,46 @@ msgstr ""
 "déplacements."
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:51
+#: src/plm/universe/turtles/TurtleWorld.html:54
 #, no-wrap
 msgid "[!java]boolean [/!]isPenDown()[!scala]:Boolean[/!]"
 msgstr "[!java]boolean [/!]estCrayonBaisse()[!scala]:Boolean[/!]"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:52
+#: src/plm/universe/turtles/TurtleWorld.html:55
 msgid "Returns the current pen position as a boolean."
 msgstr "Retourne si le stylo est actuellement baissé ou non."
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/turtles/TurtleWorld.html:54
+#: src/plm/universe/turtles/TurtleWorld.html:57
 #: src/plm/universe/bugglequest/BuggleWorld.html:25
 #, no-wrap
 msgid "[!java]Color [/!]getColor()[!scala]:Color[/!]"
 msgstr "[!java]Color [/!]getCouleur()[!scala]:Color[/!]"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:55
+#: src/plm/universe/turtles/TurtleWorld.html:58
 msgid "Returns the current pen color."
 msgstr "Retourne la couleur actuelle du stylo."
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:57
+#: src/plm/universe/turtles/TurtleWorld.html:60
 #, no-wrap
 msgid "[!java]void [/!]setColor([!java]Color [/!]color[!scala]:Color[/!])"
 msgstr "[!java]void [/!]setCouleur([!java]Color [/!]couleur[!scala]:Color[/!])"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:58
+#: src/plm/universe/turtles/TurtleWorld.html:61
 msgid "Changes the pen color."
 msgstr "Modifier la couleur du stylo."
 
 #. type: Content of: <h2>
-#: src/plm/universe/turtles/TurtleWorld.html:60
+#: src/plm/universe/turtles/TurtleWorld.html:63
 msgid "Other functions"
 msgstr "Autres fonctions"
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:62
+#: src/plm/universe/turtles/TurtleWorld.html:65
 #: src/plm/universe/bugglequest/BuggleWorld.html:35
 #: src/lessons/recursion/hanoi/universe/HanoiWorld.html:23
 #, no-wrap
@@ -742,7 +753,7 @@ msgid "[!java]boolean [/!]isSelected()[!scala]:Boolean[/!]"
 msgstr "[!java]boolean [/!]estChoisie()[!scala]:Boolean[/!]"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:63
+#: src/plm/universe/turtles/TurtleWorld.html:66
 msgid ""
 "Returns whether the current turtle is selected in the graphical interface."
 msgstr ""
@@ -836,7 +847,7 @@ msgid ""
 "[!java]void [/!]forward() or [!java]void [/!]forward([!java]int [/!]steps[!"
 "scala]:Int[/!])"
 msgstr ""
-"[!java]void [/!]avance() ou [!java]void [/!]avance([!java]int [/!]steps[!"
+"[!java]void [/!]avance() ou [!java]void [/!]avance([!java]int [/!]nbPas[!"
 "scala]:Int[/!])"
 
 #. type: Content of: <table><tr><td>
@@ -846,7 +857,7 @@ msgid ""
 "[!java]void [/!]backward() or [!java]void [/!]backward([!java]int [/!]steps[!"
 "scala]:Int[/!])"
 msgstr ""
-"[!java]void [/!]recule() or [!java]void [/!]recule([!java]int [/!]steps[!"
+"[!java]void [/!]recule() or [!java]void [/!]recule([!java]int [/!]nbPas[!"
 "scala]:Int[/!])"
 
 #. type: Content of: <table><tr><td><b>
@@ -974,8 +985,8 @@ msgstr ""
 #: src/plm/universe/bugglequest/BuggleWorld.html:33
 msgid "Direction.NORTH, Direction.EAST, Direction.SOUTH and Direction.WEST"
 msgstr ""
-"Direction.NORTH (le nord), Direction.EAST (l'est), Direction.SOUTH (le sud) "
-"et Direction.WEST (l'ouest)"
+"Direction.NORD (le nord), Direction.EST (l'est), Direction.SUD (le sud) et "
+"Direction.OUEST (l'ouest)"
 
 #. type: Content of: <table><tr><td>
 #: src/plm/universe/bugglequest/BuggleWorld.html:34
@@ -1100,71 +1111,83 @@ msgstr "[!java]void [/!]prendBiscuit()"
 msgid "[!java]void [/!]dropBaggle()"
 msgstr "[!java]void [/!]poseBiscuit()"
 
+#. type: Content of: <table><tr><td>
+#: src/plm/universe/bugglequest/BuggleWorld.html:56
+#: src/lessons/welcome/Main.html:8 src/lessons/welcome/Main.html:91
+#: src/lessons/welcome/Main.html:174 src/lessons/welcome/Main.html:254
+#: src/lessons/welcome/Main.html:348 src/lessons/welcome/Main.html:428
+#: src/lessons/welcome/Main.html:468
+msgid " "
+msgstr " "
+
 #. type: Content of: <table><tr><td><b>
-#: src/plm/universe/bugglequest/BuggleWorld.html:57
+#: src/plm/universe/bugglequest/BuggleWorld.html:58
 msgid "<b>Look for a message"
 msgstr "<b>Chercher un message"
 
 #. type: Content of: <table><tr><td><b>
-#: src/plm/universe/bugglequest/BuggleWorld.html:57
+#: src/plm/universe/bugglequest/BuggleWorld.html:58
 msgid "Add a message"
 msgstr "Ajouter un message"
 
 #. type: Content of: <table><tr><td><b>
-#: src/plm/universe/bugglequest/BuggleWorld.html:57
+#: src/plm/universe/bugglequest/BuggleWorld.html:58
 msgid "Read the message"
 msgstr "Lire le message"
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:57
+#: src/plm/universe/bugglequest/BuggleWorld.html:58
 msgid "Erase the message</b>"
 msgstr "Effacer le message</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:58
+#: src/plm/universe/bugglequest/BuggleWorld.html:59
 msgid "[!java]boolean [/!]isOverMessage()[!scala]:Boolean[/!]"
 msgstr "[!java]boolean [/!]estSurMessage()[!scala]:Boolean[/!]"
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:59
+#: src/plm/universe/bugglequest/BuggleWorld.html:60
 msgid "[!java]void [/!]writeMessage([!java]String [/!]msg[!scala]:String[/!])"
 msgstr "[!java]void [/!]ecritMessage([!java]String [/!]msg[!scala]:String[/!])"
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:60
+#: src/plm/universe/bugglequest/BuggleWorld.html:61
 msgid "[!java]String [/!]readMessage()[!scala]:String[/!]"
 msgstr "[!java]String [/!]litMessage()[!scala]:String[/!]"
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:61
+#: src/plm/universe/bugglequest/BuggleWorld.html:62
 msgid "[!java]void [/!]clearMessage()"
 msgstr "[!java]void [/!]effaceMessage()"
 
 #. type: Content of: <h2>
-#: src/plm/universe/bugglequest/BuggleWorld.html:64
+#: src/plm/universe/bugglequest/BuggleWorld.html:65
 msgid "Note on exceptions"
 msgstr "Note sur les exceptions"
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/bugglequest/BuggleWorld.html:65
+#: src/plm/universe/bugglequest/BuggleWorld.html:66
 msgid ""
 "Regular buggles throw a BuggleWallException exception if you ask them to "
 "traverse a wall.  They throw a NoBaggleUnderBuggleException exception if you "
 "ask them to pickup a baggle from an empty cell, or a "
 "AlreadyHaveBaggleException exception if they already carry a baggle.  Trying "
 "to drop a baggle on a cell already containing one throws an "
-"AlreadyHaveBaggleException exception."
+"AlreadyHaveBaggleException exception.  Dropping a baggle when you have none "
+"throws a DontHaveBaggleException."
 msgstr ""
 "Les buggles normales lèvent une exception BuggleWallException si on cherche "
 "à leur faire traverser un mur.\n"
 "Elles lèvent une exception NoBaggleUnderBuggleException si vous cherchez à "
-"prendre un baggle dans une case qui n'en contient pas, ou une exception "
-"AlreadyHaveBaggleException si vous portez déjà un baggel.\n"
-"Tenter de déposer un baggel sur une case qui en contient déjà lève une "
-"exception AlreadyHaveBaggleException."
+"prendre un biscuit dans une case qui n'en contient pas, ou une exception "
+"AlreadyHaveBaggleException si vous portez déjà un biscuit.\n"
+"Tenter de déposer un biscuit sur une case qui en contient déjà lève une "
+"exception AlreadyHaveBaggleException.\n"
+"Tenter de poser un biscuit alors qu'on n'en a pas lève une exception "
+"DontHaveBaggleException."
 
 #. type: Content of: <p>
-#: src/plm/universe/bugglequest/BuggleWorld.html:71
+#: src/plm/universe/bugglequest/BuggleWorld.html:73
 msgid ""
 "SimpleBuggles (ie, the one used in first exercises) display an error message "
 "on problem so that you don't need to know what an exception is."
@@ -1539,14 +1562,6 @@ msgstr ""
 "Cette première leçon va vous guider dans vos premiers pas en programmation. "
 "Elle est destinée aux débutants. Liste des notions vues par exercice :"
 
-#. type: Content of: <table><tr><td>
-#: src/lessons/welcome/Main.html:8 src/lessons/welcome/Main.html:91
-#: src/lessons/welcome/Main.html:174 src/lessons/welcome/Main.html:254
-#: src/lessons/welcome/Main.html:348 src/lessons/welcome/Main.html:428
-#: src/lessons/welcome/Main.html:468
-msgid " "
-msgstr " "
-
 #. type: Content of: <h2>
 #: src/lessons/welcome/Main.html:9 src/lessons/welcome/Main.html:92
 #: src/lessons/welcome/Main.html:175 src/lessons/welcome/Main.html:255
@@ -1916,11 +1931,11 @@ msgid ""
 "by following @jlmlovers :)"
 msgstr ""
 "Avant d'aller plus loin, familiarisez vous avec l'environnement. Observez "
-"les différents éléments composant la fenêtre, et placez la souris sur dessus "
-"pour voir les bulles d'aide, et essayez les pour voir ce qu'ils font. La "
-"zone blanche en bas est la console : c'est là que les erreurs et messages "
-"sont affichés.  Notez que quand vous réussissez un exercice, la bonne "
-"nouvelle est envoyée sur twitter. Suivez les progrès de vos amis en suivant "
+"les différents éléments composant la fenêtre, placez la souris dessus pour "
+"voir les bulles d'aide, et essayez les pour voir ce qu'ils font. La zone "
+"blanche en bas est la console : c'est là que les erreurs et messages sont "
+"affichés.  Notez que quand vous réussissez un exercice, la bonne nouvelle "
+"est envoyée sur twitter. Suivez les progrès de vos amis en suivant "
 "@jlmlovers :)"
 
 #. type: Content of: <p>
@@ -2063,7 +2078,7 @@ msgstr ""
 
 #. type: Content of: <p><p>
 #: src/lessons/welcome/instructions/Instructions.html:27
-#: src/lessons/welcome/variables/Variables.html:123
+#: src/lessons/welcome/variables/Variables.html:139
 msgid "[!python|scala]"
 msgstr "[!python|scala]"
 
@@ -2087,9 +2102,8 @@ msgstr "casserLesOeufs(); ajouterDuSel(); melangerLeTout(); faireCuire();\n"
 
 #. type: Content of: <p><p><p>
 #: src/lessons/welcome/instructions/Instructions.html:34
-#: src/lessons/welcome/variables/Variables.html:31
-#: src/lessons/welcome/variables/Variables.html:61
-#: src/lessons/welcome/variables/Variables.html:130
+#: src/lessons/welcome/variables/Variables.html:77
+#: src/lessons/welcome/variables/Variables.html:146
 #: src/lessons/welcome/loopfor/LoopFor.html:69
 #: src/lessons/welcome/loopdowhile/LoopDoWhile.html:53
 #: src/lessons/welcome/loopdowhile/Poucet.html:36
@@ -2187,7 +2201,7 @@ msgstr ""
 #: src/lessons/welcome/conditions/Conditions.html:108
 #: src/lessons/welcome/loopwhile/LoopWhile.html:32
 #: src/lessons/welcome/loopwhile/BaggleSeeker.html:8
-#: src/lessons/welcome/variables/Variables.html:97
+#: src/lessons/welcome/variables/Variables.html:113
 #: src/lessons/welcome/loopfor/LoopFor.html:71
 #: src/lessons/welcome/methods/basics/Methods.html:95
 #: src/lessons/welcome/methods/basics/MethodsDogHouse.html:37
@@ -2278,9 +2292,9 @@ msgid ""
 "thelang], instructing the [!java|scala]compiler[/!][!python]interpreter[/!] "
 "to not read the text you add for humans:"
 msgstr ""
-"Il y a [!java]three[/!][!python|scala]two[/!] sortes de commentaires en [!"
-"thelang], indiquant au [!java|scala]compilateur[/!][!python]interpréteur[/!] "
-"qu'il ne doit pas lire le texte ajouté pour les humains."
+"Il y a [!java]trois[/!][!python|scala]deux[/!] sortes de commentaires en [!"
+"thelang], indiquant [!java|scala]au compilateur[/!][!python]à "
+"l'interpréteur[/!] qu'il ne doit pas lire le texte ajouté pour les humains."
 
 #. type: Content of: <ul><li>
 #: src/lessons/welcome/instructions/InstructionsDrawG.html:18
@@ -2941,39 +2955,37 @@ msgid ""
 "<b>Declaring</b> (ie, creating) a variable in [!thelang], is very simple. "
 "You just need to write [!java]its type, a space, and the variable name.[/!] "
 "[!scala]the <code>var</code> keyword, the variable name, a column (:) and "
-"the variable type.[/!] [!python]the variable name, an equal sign (=) and an "
-"initial value.[/!] The variable name is the label to retrieve it afterward[!"
-"python].[/!] [!java|scala] while the type is the kind of data that this "
-"variable accepts to store.[/!] It is forbidden to use spaces in variable "
-"names. So you can name a variable <code>stepAmount</code> if you want, but "
-"<code>step amount</code> is not a valid name."
+"the variable type an equal sign (=) and an initial value.[/!] [!python]the "
+"variable name, an equal sign (=) and an initial value.[/!] The variable name "
+"is the label to retrieve it afterward[!python].[/!] [!java|scala] while the "
+"type is the kind of data that this variable accepts to store.[/!] It is "
+"forbidden to use spaces in variable names. You can name a variable "
+"<code>stepAmount</code> if you want, but <code>step amount</code> is not a "
+"valid name."
 msgstr ""
 "Il est très simple de <b>déclarer</b> (c'est-à-dire, créer) une variable en "
 "[!thelang]. Il suffit d'écrire\n"
 "[!java]son type, une espace et le nom de la variable.[/!] \n"
-"[!scala]le mot-clé <code>var</code>, le nom de la variable, deux points (:) "
-"et le type de la variable.[/!] \n"
+"[!scala]le mot-clé <code>var</code>, le nom de la variable, deux points (:), "
+"le type de la variable, un signe égal (=) et une valeur intiale.[/!] \n"
 "[!python]le nom de la variable, un signe égal (=) et sa valeur initiale."
 "[/!] \n"
 "Le nom de la variable est un label pour la retrouver plus tard[!python]."
 "[/!] \n"
 "[!java|scala] tandis que son type est le genre de données qu'on va pouvoir "
 "stoker dans cette variable.[/!] \n"
-"Il est interdit de mettre des espaces et des accents dans les noms de "
-"variable. \n"
-"Ainsi, on peut nommer une variable <code>dejaFait</code>, mais ni <code>deja "
-"fait</code> ni <code>déjaFait</code> ne sont des identificateurs de "
-"variables valides."
+"Il est interdit de mettre des espaces dans les noms de variable. \n"
+"On peut nommer une variable <code>dejaFait</code>, mais <code>deja fait</"
+"code> n'est pas un identificateur de variable valide."
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p><p><p>
 #: src/lessons/welcome/variables/Variables.html:28
-#: src/lessons/welcome/variables/Variables.html:40
-#: src/lessons/welcome/methods/args/MethodsArgs.html:34
-#: src/lessons/welcome/methods/picture/MethodsPicture.html:34
-#: src/lessons/welcome/bdr/BDR.html:8 src/lessons/welcome/bdr/BDR2.html:3
-#: src/lessons/recursion/square/FourSquare.html:27
-msgid "[!java|scala]"
-msgstr "[!java|scala]"
+#: src/lessons/welcome/loopfor/LoopFor.html:46
+#: src/lessons/welcome/bdr/BDR.html:187
+#: src/lessons/turmites/langton/Langton.html:20
+#: src/lessons/welcome/array/basics/Array1.html:200
+msgid "[!java]"
+msgstr "[!java]"
 
 #. type: Content of: <p><p><p>
 #: src/lessons/welcome/variables/Variables.html:29
@@ -2987,79 +2999,165 @@ msgstr ""
 #. type: Content of: <p><p><pre>
 #: src/lessons/welcome/variables/Variables.html:30
 #, no-wrap
-msgid "[!java]int x;[/!][!scala]var x: Int[/!]"
-msgstr "[!java]int x;[/!][!scala]var x: Int[/!]"
+msgid "int x;"
+msgstr "int x;"
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:33
+#: src/lessons/welcome/variables/Variables.html:31
 msgid ""
-"[!java|scala]If you want, you can specify the initial value of the variable "
-"by adding a equal sign (=) followed by the value after the declaration.[/!] "
-"[!scala]If you specify a value, you don't have to specify the type of the "
-"variable, since Scala manages to guess it alone in most cases.  You are "
-"still free to specify the type if you prefer (or if the compiler fail to "
-"determine the type for some reason), but it's optional.[/!] So you want that "
-"the variable contains 5 as initial value, you should type:"
-msgstr ""
-"[!java|scala]Si vous le souhaitez, vous pouvez spécifier une valeur initiale "
-"en faisant suivre la déclaration d'un symbole égal (=) suivi de la valeur à "
-"utiliser.[/!] \n"
-"[!scala]Si vous spécifiez une valeur, il n'est alors plus indispensable de "
-"spécifier le type de la variable, puisque Scala parvient à le deviner tout "
-"seul. Vous êtes libre de le spécifier quand même si vous le désirez (ou si "
-"le compilateur se trompe, comme cela arrive parfois par exemple entre les "
-"différents types de nombres), mais c'est optionnel.[/!]\n"
-"Donc, si vous voulez utiliser 5 comme valeur initiale, il faut écrire:"
+"If you want, you can specify the initial value of the variable by adding a "
+"equal sign (=) followed by the value after the declaration."
+msgstr ""
+"Si vous le souhaitez, vous pouvez donner une valeur initiale à votre "
+"variable en ajoutant le symbole égal (=) suivi d'une valeur après la "
+"déclaration."
 
 #. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:33
+#, no-wrap
+msgid "int x=5;"
+msgstr "int x=5;"
+
+#. type: Content of: <p><p>
+#: src/lessons/welcome/variables/Variables.html:34
+#: src/lessons/welcome/variables/Variables.html:68
+msgid "[/!] [!python]"
+msgstr "[/!] [!python]"
+
+#. type: Content of: <p><p><p>
 #: src/lessons/welcome/variables/Variables.html:37
+msgid ""
+"So you want that the variable contains 5 as initial value, you should type:"
+msgstr "Ainsi, pour une variable ayant la valeur initiale 5, il faut écrire: "
+
+#. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:38
+#, no-wrap
+msgid "x = 5"
+msgstr "x = 5"
+
+#. type: Content of: <p><p>
+#: src/lessons/welcome/variables/Variables.html:39
+#: src/lessons/welcome/loopfor/LoopFor.html:57
+#: src/lessons/welcome/bdr/BDR2.html:82
+msgid "[/!] [!scala]"
+msgstr "[/!] [!scala]"
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:42
+msgid ""
+"So, to create a variable named <b>x</b> intended to contain integers with 42 "
+"as initial value, one should write:"
+msgstr ""
+"Ainsi, pour créer une variable nommée <b>x</b> contenant des entiers avec 42 "
+"en valeur initiale, on écrira :"
+
+#. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:43
 #, no-wrap
+msgid "var x:Int = 42"
+msgstr "var x:Int = 42"
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:44
 msgid ""
-"[!java]int x=5;[/!][!python]x = 5[/!][!scala]var x: Int =  5 <span class=\"comment\">// I can define the type if I want to</span>\n"
-"var y =  10      <span class=\"comment\">// or I can omit the type if I prefer</span>[/!]"
+"In most cases, the compiler is able to guess the type of the variable from "
+"the initialization value, and you can omit it:"
 msgstr ""
-"[!java]int x=5;[/!][!python]x = 5[/!][!scala]var x: Int =  5 <span class=\"comment\">// je peux quand même donner le type si je veux</span>\n"
-"var y = 10       <span class=\"comment\">// ou bien je peux l'omettre</span>[/!]"
+"Dans la plupart des cas, le compilateur est capable de deviner le type de la "
+"variable d'après la valeur initiale. On peut alors omettre le type de la "
+"variable:"
+
+#. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:45
+#, no-wrap
+msgid "var x = 42"
+msgstr "var x = 42"
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:41
+#: src/lessons/welcome/variables/Variables.html:46
+msgid ""
+"You still have to specify the if you use some generic values as an "
+"initialization, such as the very particular value <code>null</code>, which "
+"type happens to be ambigous. Even when the type is clear, you can still "
+"specify it if you prefer.  So you want that the variable contains 5 as "
+"initial value, you should type:"
+msgstr ""
+"Il est nécessaire de spécifier le type de la variable lorsque l'on "
+"initialise ses variables avec des valeurs génériques, telles que la valeur "
+"très particulière <code>null</code>, dont le type se trouve être ambigu. "
+"Même quand le type est clair, vous pouvez le spécifier si vous le souhaitez. "
+"Ainsi, pour une variable contenant 5 en valeur initiale, on peut écrire:"
+
+#. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:49
+#, no-wrap
+msgid ""
+"var x: Int =  5 <span class=\"comment\">// I can define the type if I want to</span>\n"
+"var y =  10      <span class=\"comment\">// or I can omit the type if I prefer</span>"
+msgstr ""
+"var x: Int =  5 <span class=\"comment\">// je peux quand même donner le type si je veux</span>\n"
+"var y = 10       <span class=\"comment\">// ou bien je peux l'omettre</span>"
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:51
+#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:38
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:60
+#: src/lessons/welcome/array/basics/Array1.html:114
+msgid "[/!] [!java|scala]"
+msgstr "[/!] [!java|scala]"
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:54
 msgid ""
 "As you can see, the variables are <b>typed</b> in [!thelang], which means "
 "that they are somehow specialized: A given variable can only store data of a "
 "given type; Don't even think of storing numbers in a variable that is "
-"tailored for letters! Other languages (such as Python) are less picky and "
-"allow you to store any kind of data in any variable without restriction.  "
-"This seems easier at the first glance, but this kind of restriction allows "
-"the compiler to catch more logic errors for you, which is also good. In some "
-"sense, Python is easier to write but errors can sneak in more easily than in "
-"[!thelang].  Here are some of the existing types:"
-msgstr ""
-"Comme vous pouvez le voir, les variables sont <b>typées</b> en[!thelang]. "
+"tailored for letters! The [!thelang] language is said to be <b>statically "
+"typed</b>."
+msgstr ""
+"Comme vous pouvez le voir, les variables sont <b>typées</b> en [!thelang]. "
 "Cela veut dire qu'elles sont en quelque sorte spécialisées: une variable "
 "donnée ne peut stocker qu'un type de données spécifique. N'essayez même pas "
-"de rancher des nombres dans une variable faite pour recevoir des lettres ! \n"
+"de ranger des nombres dans une variable faite pour recevoir des lettres ! \n"
+"On dit que [!thelang] est un langage <b>typé statiquement</b>.\n"
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:57
+msgid ""
+"Other languages (such as Python) are less picky and allow you to store any "
+"kind of data in any variable, without restriction (those languages are said "
+"to be <b>dynamically typed</b>).  This seems easier at the first glance, but "
+"this kind of restriction allows the compiler to catch more logic errors for "
+"you, which is also good. In some sense, Python is easier to write but errors "
+"can sneak in more easily than in [!thelang]."
+msgstr ""
 "D'autres langages (comme le python) sont moins regardants, et on peut ranger "
 "n'importe quel type de données dans n'importe quelle variable sans "
 "restriction. À première vue, cela semble plus simple, mais ce genre de "
 "restriction permet au compilateur de détecter plus d'erreurs de logiques "
 "pour vous, ce qui n'est pas dommage. En quelque sorte, il est plus facile "
 "d'écrire du python, mais le typage empêche certaines erreurs de se glisser "
-"dans vos programmes. \n"
-"Voici quelque uns des types de données existants en [!thelang] :"
+"dans vos programmes. "
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:61
+msgid "Here are some existing types in [!thelang]:"
+msgstr "Voici quelque uns des types de données existants en [!thelang] :"
 
 #. type: Content of: <p><p><ul><li>
-#: src/lessons/welcome/variables/Variables.html:48
+#: src/lessons/welcome/variables/Variables.html:63
 msgid "<b>[!java]int[/!][!scala]Int[/!]</b>, for integers;"
 msgstr "<b>[!java]int[/!][!scala]Int[/!]</b>, pour les entiers;"
 
 #. type: Content of: <p><p><ul><li>
-#: src/lessons/welcome/variables/Variables.html:49
+#: src/lessons/welcome/variables/Variables.html:64
 msgid "<b>[!java]double[/!][!scala]Double[/!]</b>, for dot numbers;"
 msgstr ""
 "<b>[!java]double[/!][!scala]Double[/!]</b>, pour les nombres à virgule;"
 
 #. type: Content of: <p><p><ul><li>
-#: src/lessons/welcome/variables/Variables.html:50
+#: src/lessons/welcome/variables/Variables.html:65
 msgid ""
 "<b>[!java]boolean[/!][!scala]Boolean[/!]</b>, for booleans that are values "
 "being either true or false;"
@@ -3068,41 +3166,47 @@ msgstr ""
 "dire les variables dont la valeur est soit \"vrai\" soit \"faux\";"
 
 #. type: Content of: <p><p><ul><li>
-#: src/lessons/welcome/variables/Variables.html:51
+#: src/lessons/welcome/variables/Variables.html:66
 msgid "<b>String</b>, for char strings."
 msgstr "<b>String</b>, pour les chaînes de caractères."
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/variables/Variables.html:53
-msgid "[/!] [!python]"
-msgstr "[/!] [!python]"
-
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:56
+#: src/lessons/welcome/variables/Variables.html:71
 msgid ""
 "As you can see, the variables are not <b>typed</b> in Python, which means "
 "that they are not specialized in any type of data.  A given variable store "
 "any type of data of a given type: you can store a number in a variable and "
-"latter on store a number in the same variable.  Other languages (such as "
-"Java or Scala) are much more picky and prevent you to mix data types in a "
-"given variable.  This seems annoying at the first glance, but this kind of "
-"restriction allows the compiler to catch more logic errors for you, which is "
-"also good. In some sense, Python is easier to write but errors can sneak in "
-"more easily."
+"latter on store a number in the same variable.  The values themselves are "
+"still typed, but not the variable. Python is said to be <b>dynamically "
+"typed</b>."
 msgstr ""
 "Comme vous pouvez le voir, les variables ne sont pas <b>typées</b> en "
 "Python, ce qui veut dire qu'elles ne sont pas spécialisées sur un type de "
 "données particulier. Il est tout à fait envisageable de stocker des nombres "
-"dans une variable, puis d'y mettre des lettres un peu plus tard.\n"
+"dans une variable, puis d'y mettre des lettres un peu plus tard. Les valeurs "
+"elles-mêmes ont bien entendu un type, mais pas les variables. On dit alors "
+"que python est un langage <b>dynamiquement typé</b>.\n"
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:74
+msgid ""
+"Other languages (such as Java or Scala) are much more picky and prevent you "
+"to mix data types in a given variable (they are said to be <b>statically "
+"typed</b>).  This seems annoying at the first glance, but this kind of "
+"restriction allows the compiler to catch more logic errors for you, which is "
+"also good. In some sense, Python is easier to write but errors can sneak in "
+"more easily."
+msgstr ""
 "D'autres langages (comme le Java ou le Scala) sont plus restrictifs et "
-"imposent de spécialiser chaque variable pour un type donné. Cela semble bien "
-"plus contraignant à première vue, mais ce genre de restriction permet au "
+"imposent de spécialiser chaque variable pour un type donné (on dit que ce "
+"sont des langages <b>statiquement typés</b>). Cela semble bien plus "
+"contraignant à première vue, mais ce genre de restriction permet au "
 "compilateur de détecter plus d'erreurs de logique pour vous. D'une certaine "
 "manière, il est plus facile d'écrire du Python, mais le typage de ces "
 "langages empêche certaines erreurs de se glisser dans les programmes."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:64
+#: src/lessons/welcome/variables/Variables.html:80
 msgid ""
 "If you know that the value of your \"variable\" will never change (eg "
 "because it contains the screen size or some other constant value), then you "
@@ -3124,7 +3228,7 @@ msgstr ""
 "cas."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:69
+#: src/lessons/welcome/variables/Variables.html:85
 msgid ""
 "Variables work very similarly for strings, floating point numbers and "
 "boolean values."
@@ -3133,7 +3237,7 @@ msgstr ""
 "booléens."
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:71
+#: src/lessons/welcome/variables/Variables.html:87
 #, no-wrap
 msgid ""
 "String name = \"Martin Quinson\";\n"
@@ -3145,7 +3249,7 @@ msgstr ""
 "boolean marie=true; <span class=\"comment\">// Signifie vrai; le contraire (faux) s'écrirait \"false\"</span>"
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:75
+#: src/lessons/welcome/variables/Variables.html:91
 #, no-wrap
 msgid ""
 "val name:String = \"Martin Quinson\"; <span class=\"comment\">// this cannot be modified (it's a value)</span>\n"
@@ -3159,7 +3263,7 @@ msgstr ""
 "<span class=\"comment\">// Scala sait que 'true' est une valeur de type Boolean, pas besoin de le répéter</span>"
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:80
+#: src/lessons/welcome/variables/Variables.html:96
 #, no-wrap
 msgid ""
 "firstName = \"Martin\"\n"
@@ -3175,12 +3279,12 @@ msgstr ""
 "marie=True <span class=\"comment\"># Signifie 'vrai'; le contraire (faux) serait marqué 'False'</span>"
 
 #. type: Content of: <p><p><h3>
-#: src/lessons/welcome/variables/Variables.html:86
+#: src/lessons/welcome/variables/Variables.html:102
 msgid "Affectations"
 msgstr "Affectations"
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:88
+#: src/lessons/welcome/variables/Variables.html:104
 msgid ""
 "Once your variable is declared, you can <b>affect</b> a new value to it "
 "later in the program. That's really easy:"
@@ -3189,13 +3293,13 @@ msgstr ""
 "nouvelle valeur plus tard dans votre programme. C'est vraiment très simple :"
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:89
+#: src/lessons/welcome/variables/Variables.html:105
 #, no-wrap
 msgid "x = 3[!java];[/!]"
 msgstr "x = 3[!java];[/!]"
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:91
+#: src/lessons/welcome/variables/Variables.html:107
 msgid ""
 "To the right of the equal symbol, you can put an arithmetic expression "
 "containing constants, variables and operations."
@@ -3204,7 +3308,7 @@ msgstr ""
 "contenir des constantes, des variables et des opérations :"
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:93
+#: src/lessons/welcome/variables/Variables.html:109
 #, no-wrap
 msgid ""
 "x = 3 + 2[!java];[/!]\n"
@@ -3213,10 +3317,10 @@ msgid ""
 msgstr ""
 "x = 3 + 2[!java];[/!]\n"
 "x = 3 * x[!java];[/!]\n"
-"greeting = \"Hello \"+name[!java];[/!] <span class=\"comment\">[!python]#[/!][!scala|java]//[/!] + est (également) l'opérateur pour concaténer les chaînes (càd pour les fusionner</span>"
+"greeting = \"Hello \"+name[!java];[/!] <span class=\"comment\">[!python]#[/!][!scala|java]//[/!] + est (également) l'opérateur pour concaténer les chaînes (càd pour les fusionner)</span>"
 
 #. type: Content of: <p><p>
-#: src/lessons/welcome/variables/Variables.html:98
+#: src/lessons/welcome/variables/Variables.html:114
 msgid ""
 "It is now time to do more challenging exercises, don't you think? The "
 "objective is now to move forward until you find a baggle, pick it up, and "
@@ -3227,12 +3331,12 @@ msgstr ""
 "ramasser, revenir à la position initiale, puis de poser le biscuit."
 
 #. type: Content of: <p><p><h3>
-#: src/lessons/welcome/variables/Variables.html:103
+#: src/lessons/welcome/variables/Variables.html:119
 msgid "How to do this?"
 msgstr "Comment faire ?"
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:104
+#: src/lessons/welcome/variables/Variables.html:120
 msgid ""
 "To solve this problem, you have to decompose it in easier sub-parts. For "
 "example, you may want to do the following steps:"
@@ -3241,27 +3345,27 @@ msgstr ""
 "résoudre. Par exemple, on peut vouloir faire les étapes suivantes :"
 
 #. type: Content of: <p><p><p><ol><li>
-#: src/lessons/welcome/variables/Variables.html:107
+#: src/lessons/welcome/variables/Variables.html:123
 msgid "Move forward until located over a baggle"
 msgstr "Avancer jusqu'à se trouver sur un biscuit"
 
 #. type: Content of: <p><p><p><ol><li>
-#: src/lessons/welcome/variables/Variables.html:108
+#: src/lessons/welcome/variables/Variables.html:124
 msgid "Pickup the baggle"
 msgstr "Ramasser le biscuit au sol"
 
 #. type: Content of: <p><p><p><ol><li>
-#: src/lessons/welcome/variables/Variables.html:109
+#: src/lessons/welcome/variables/Variables.html:125
 msgid "Move backward of the same amount of steps than done in first step"
 msgstr "Reculer du même nombre de cases que ce qu'on a avancé"
 
 #. type: Content of: <p><p><p><ol><li>
-#: src/lessons/welcome/variables/Variables.html:110
+#: src/lessons/welcome/variables/Variables.html:126
 msgid "Drop back the baggle"
 msgstr "Reposer le biscuit au sol"
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:113
+#: src/lessons/welcome/variables/Variables.html:129
 msgid ""
 "Naturally, it is impossible to do the right amount of steps backward at step "
 "3 if you didn't count the amount of steps done in the first phase. You can "
@@ -3272,7 +3376,7 @@ msgstr ""
 "cela utiliser une variable, que l'on peut nommer <code>nbPas</code>."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:117
+#: src/lessons/welcome/variables/Variables.html:133
 msgid ""
 "Create an integer variable before phase 1, initialize it to 0, and each time "
 "you move one step forward, increment its value by one (<code>stepAmount = "
@@ -3286,7 +3390,7 @@ msgstr ""
 "écritures sont équivalentes[/!])."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:124
+#: src/lessons/welcome/variables/Variables.html:140
 msgid ""
 "If you know Java or other languages, you will probably try to use the <code>+"
 "+</code> operator to increment the variable, but it's not allowed in [!"
@@ -3306,20 +3410,17 @@ msgstr ""
 "+, ignorez simplement ce paragraphe : cela n'existe pas en [!thelang])."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:132
+#: src/lessons/welcome/variables/Variables.html:148
 msgid ""
 "Then, phase 3 consists in simply creating a new integer variable "
-"<code>doneSteps</code> initialized to 0, and do one step backward until "
-"<code>doneSteps</code> equals <code>stepAmount</code>, incrementing "
-"<code>doneSteps</code> each time."
-msgstr ""
-"Ensuite, l'étape 3 consiste simplement à créer une nouvelle variable entière "
-"<code>dejaFait</code> initialisée à zéro, et reculer d'un pas tant que "
-"<code>dejaFait</code> n'est pas égal à <code>nbPas</code>, en incrémentant "
-"<code>dejaFait</code> à chaque fois."
+"<code>doneSteps</code> initialized to 0, and do one step backward as long as "
+"<code>doneSteps</code> is not equal to <code>stepAmount</code>, incrementing "
+"<code>doneSteps</code> each time. The <code>!=</code> operator should be "
+"used to test the inequality (whether some values are NOT equal)."
+msgstr "Ensuite, l'étape 3 consiste simplement à créer une nouvelle variable entière <code>dejaFait</code> initialisée à zéro, et reculer d'un pas tant que <code>dejaFait</code> n'est pas égal à <code>nbPas</code>, en incrémentant <code>dejaFait</code> à chaque fois. Il faut utiliser l'opérateur <code>!=</code> pour tester l'inégalité entre deux valeurs."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:137
+#: src/lessons/welcome/variables/Variables.html:155
 msgid "It's your turn now!"
 msgstr "À vous de jouer !"
 
@@ -3355,18 +3456,18 @@ msgstr "La course des quatre moitiés"
 msgid ""
 "Here is the second day of the Big Buggles' Race.  As previously, you have to "
 "run forward until you reach the right cell to stop on.  But this time, you "
-"have to reach the cell where you saw as much baggles as orange cells plus "
-"1.  In other word, the following condition must become true <code>2 * "
-"baggles = orangeCells + 1</code>."
+"have to reach the cell where the amount of baggles you saw is the double of "
+"the orange cells plus 1.  In other word, the following condition must become "
+"true <code>2 * baggles = orangeCells + 1</code>."
 msgstr ""
 "C'est le second jour de la Grande Course des Buggles. Comme d'habitude, il "
 "faut courir jusqu'à trouver la case où vous devez vous arrêter. Mais cette "
-"fois, vous devez vous arrêter quand vous aurez compté deux fois plus de "
+"fois, vous devez vous arrêter quand vous aurez compté deux fois moins de "
 "biscuits que de cases oranges plus une. En d'autres termes, la condition "
 "d'arrêt est la suivante : <code>2 * biscuits = caseOrange + 1</code>."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/variables/RunHalf.html:8
+#: src/lessons/welcome/variables/RunHalf.html:9
 msgid ""
 "You can determine whether you are over a orange cell with the "
 "<code>isOverOrange()</code> method."
@@ -3440,14 +3541,14 @@ msgid ""
 "[!java]for (int stepper=0; stepper<n; stepper++) {\n"
 "    <b>action</b>();\n"
 "}[/!][!python]for <b>stepper</b> in <b>range(n)</b>:\n"
-"    <b>action</b>()[/!][!scala] for (var <b>stepper</b> <- <b>1</b> to <b>n</b>) { \n"
+"    <b>action</b>()[/!][!scala] for (<b>stepper</b> <- <b>1</b> to <b>n</b>) { \n"
 "    <b>action</b>();\n"
 "}[/!]"
 msgstr ""
 "[!java]for (int compteur=0; compteur<n; compteur++) {\n"
 "    <b>action</b>();\n"
 "}[/!][!python]for <b>compteur</b> in <b>range(n)</b>:\n"
-"    <b>action</b>()[/!][!scala] for (var <b>compteur</b> <- <b>1</b> to <b>10</b>) { \n"
+"    <b>action</b>()[/!][!scala] for (<b>compteur</b> <- <b>1</b> to <b>10</b>) { \n"
 "    <b>action</b>();\n"
 "}[/!]"
 
@@ -3493,14 +3594,6 @@ msgstr ""
 msgid "The <code>for</code> loop is easier to read, don't you think?"
 msgstr "Le code avec une boucle <code>for</code> est plus simple à lire, non?"
 
-#. type: Content of: <p><p><p>
-#: src/lessons/welcome/loopfor/LoopFor.html:46
-#: src/lessons/welcome/bdr/BDR.html:187
-#: src/lessons/turmites/langton/Langton.html:20
-#: src/lessons/welcome/array/basics/Array1.html:200
-msgid "[!java]"
-msgstr "[!java]"
-
 #. type: Content of: <p>
 #: src/lessons/welcome/loopfor/LoopFor.html:47
 msgid ""
@@ -3532,12 +3625,6 @@ msgstr ""
 "<span class=\"comment\">/* la buggle est maintenant face à un mur */</span>"
 
 #. type: Content of: <p><p>
-#: src/lessons/welcome/loopfor/LoopFor.html:57
-#: src/lessons/welcome/bdr/BDR2.html:82
-msgid "[/!] [!scala]"
-msgstr "[/!] [!scala]"
-
-#. type: Content of: <p><p>
 #: src/lessons/welcome/loopfor/LoopFor.html:60
 msgid ""
 "If you want to nest several loops, you can do it on one line in Scala. This "
@@ -3628,9 +3715,13 @@ msgid ""
 "reach the heaven, take some steps in your new home.  Meanwhile, you just "
 "have to walk your way, the colors appear automagically."
 msgstr ""
-"Avant cela, vous devez marcher un peu pour atteindre l'escalier et vous assurer que vous êtes dans la bonne position pour que le contenu de votre boucle s'exécute correctement. \n"
-"Une fois que vous avez atteint le paradis, faites quelques pas dans votre nouvelle demeure.\n"
-"Chemin faisant, les couleurs apparaissent d'elles-mêmes sans que vous n'ayez rien à faire."
+"Avant cela, vous devez marcher un peu pour atteindre l'escalier et vous "
+"assurer que vous êtes dans la bonne position pour que le contenu de votre "
+"boucle s'exécute correctement. \n"
+"Une fois que vous avez atteint le paradis, faites quelques pas dans votre "
+"nouvelle demeure.\n"
+"Chemin faisant, les couleurs apparaissent d'elles-mêmes sans que vous n'ayez "
+"rien à faire."
 
 #. type: Content of: <h2>
 #: src/lessons/welcome/loopfor/LoopCourse.html:1
@@ -3662,6 +3753,15 @@ msgstr ""
 "la piste a 4 cotés, qui prennent chacun 8 pas à parcourir. Maintenant allez-"
 "y et montrez-leur ce dont ces super-chaussures sont capables."
 
+#. type: Content of: <p>
+#: src/lessons/welcome/loopfor/LoopCourse.html:11
+msgid ""
+"You don't have to do anything particular with regard of the colors: your "
+"shoes will do it for you. Just take that run!"
+msgstr ""
+"Vous n'avez rien à faire de particulier à propos de la couleur de la piste : "
+"vos chaussures la changeront pour vous. Contentez vous de courir."
+
 #. type: Content of: <h2>
 #: src/lessons/welcome/loopfor/LoopCourseForest.html:1
 msgid "Outdoor Training Buggle"
@@ -3728,7 +3828,7 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/welcome/loopdowhile/LoopDoWhile.html:12
 msgid "The general idea is to do something like:"
-msgstr "L'idée général est donc de faire:"
+msgstr "L'idée générale est donc de faire:"
 
 #. type: Content of: <pre>
 #: src/lessons/welcome/loopdowhile/LoopDoWhile.html:13
@@ -3824,13 +3924,6 @@ msgstr ""
 "corps de boucle a été exécuté, <code>premiereFois</code> est mis à faux et "
 "n'influe plus jamais la décision d'entrer dans le corps de boucle."
 
-#. type: Content of: <p><p><p>
-#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:38
-#: src/lessons/turmites/helloturmite/HelloTurmite.html:60
-#: src/lessons/welcome/array/basics/Array1.html:114
-msgid "[/!] [!java|scala]"
-msgstr "[/!] [!java|scala]"
-
 #. type: Content of: <p>
 #: src/lessons/welcome/loopdowhile/LoopDoWhile.html:42
 msgid ""
@@ -4272,57 +4365,25 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/welcome/methods/basics/Methods.html:100
 msgid ""
-"One specificity of this exercise is that you shouldn't write directly the "
-"code that the buggle should execute, but a method it should use. The code "
-"that calls your function will be automagically added when you click on "
-"<b>Start</b>.  For your information, this calling code will look like this:"
-msgstr ""
-"La particularité de cet exercice est que vous n'écrivez pas directement le "
-"code que votre buggle va exécuter, mais une méthode qui sera appelée quand "
-"vous appuyez sur <b>Exécuter</b>. Pour votre information, le code appelant a "
-"la forme suivante:"
-
-#. type: Content of: <pre>
-#: src/lessons/welcome/methods/basics/Methods.html:105
-#, no-wrap
-msgid ""
-"[!java]for (int i=0; i<7; i++) {[/!][!python]for i in range(7):[/!][!scala]for (i <- 1 to 7) {[/!]\n"
-"    goAndGet()[!java];[/!]\n"
-"    right()[!java];[/!]\n"
-"    forward()[!java];[/!]\n"
-"    left()[!java];[/!]\n"
-"[!java|scala]}[/!]"
+"This exercise is a bit different because you will not write all of the code "
+"executed by the buggle. Instead, you should only write one method that is "
+"called automagically added when you click on <b>Start</b>. Your buggle calls "
+"your <code>goAndGet()</code> method on each row, until the baggle is found."
 msgstr ""
-"[!java]for (int i=0; i<7; i++) {[/!][!python]for i in range(7):[/!][!scala]for (i <- 1 to 7) {[/!]\n"
-"    goAndGet()[!java];[/!]\n"
-"    droite()[!java];[/!]\n"
-"    avance()[!java];[/!]\n"
-"    gauche()[!java];[/!]\n"
-"[!java|scala]}[/!]"
+"Cet exercice est un peu différent : vous n'allez pas écrire tout le code "
+"exécuté par la buggle, mais juste une méthode qui sera invoquée "
+"automagiquement quand vous exécutez l'exercice. Votre buggle va alors "
+"appeller votre méthode <code>goAndGet()</code> sur chaque colonne du monde, "
+"jusqu'à trouver le biscuit."
 
-# type: Content of: <p><a><p><p><p>
 #. type: Content of: <p>
-#: src/lessons/welcome/methods/basics/Methods.html:112
+#: src/lessons/welcome/methods/basics/Methods.html:106
 msgid ""
-"Your buggle will repeat 7 times (which matches the world's dimension)  the "
-"sequence constituted of a call to the <code>goAndGet()</code> method that "
-"you should write, plus a move to get to the next row (turn right, move "
-"forward, turn left). As you can see, the buggle will do one step right from "
-"the right border of the world. It will bring it back to the left side since "
-"its world is a torus."
+"But for that to work, you have to actually write this <code>goAndGet()</"
+"code> method now."
 msgstr ""
-"Donc, votre buggle va répéter 7 fois (la taille du monde)  l'opération "
-"<code>goAndGet()</code> que vous allez écrire, plus les opérations "
-"nécessaires pour se décaler d'une colonne vers la droite (tourner à droite, "
-"avancer, tourner à gauche). Notez que la buggle va donc faire un pas vers la "
-"droite alors qu'elle sera tout à droite du monde. Cela la ramènera sur le "
-"bord gauche, car le monde des buggles est torique."
-
-# type: Content of: <p><a><p><p><p>
-#. type: Content of: <p>
-#: src/lessons/welcome/methods/basics/Methods.html:119
-msgid "You should now write this goAndGet() method."
-msgstr "À vous d'écrire cette méthode goAndGet()."
+"Mais pour que cela fonctionne, il faut que vous écriviez maintenant cette "
+"fonction <code>goAndGet()</code>..."
 
 #. type: Content of: outside any tag (error?)
 #: src/lessons/welcome/methods/basics/MethodsDogHouse.html:3
@@ -4834,6 +4895,14 @@ msgstr ""
 "[!scala]val res = divise(3.14 , 1.5)[/!]\n"
 "[!python]res = divise(3.14 , 1.5)[/!]"
 
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/methods/args/MethodsArgs.html:34
+#: src/lessons/welcome/methods/picture/MethodsPicture.html:34
+#: src/lessons/welcome/bdr/BDR.html:8 src/lessons/welcome/bdr/BDR2.html:3
+#: src/lessons/recursion/square/FourSquare.html:27
+msgid "[!java|scala]"
+msgstr "[!java|scala]"
+
 #. type: Content of: <p>
 #: src/lessons/welcome/methods/args/MethodsArgs.html:35
 msgid ""
@@ -4849,18 +4918,18 @@ msgstr ""
 #: src/lessons/welcome/methods/args/MethodsArgs.html:39
 #, no-wrap
 msgid ""
-"[!java]double max(double x, double y)[/!][!scala]def max(x:Double, int y:Double): Double =[/!] {\n"
+"[!java]double max(double x, double y)[/!][!scala]def max(x:Double, y:Double): Double =[/!] {\n"
 "  if (x > y) {\n"
 "    return x;\n"
 "  }\n"
 "  return y;\n"
-"}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, int y:Int): Int =[/!] {\n"
+"}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, y:Int): Int =[/!] {\n"
 "  if (x > y) {\n"
 "    return x;\n"
 "  }\n"
 "  return y;\n"
 "}\n"
-"[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, int y:Int, int z:Int): Int =[/!] {\n"
+"[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, y:Int, z:Int): Int =[/!] {\n"
 "  if (x > y && x > z) {\n"
 "    return x;\n"
 "  }\n"
@@ -4870,18 +4939,18 @@ msgid ""
 "  return z;\n"
 "}"
 msgstr ""
-"[!java]double max(double x, double y)[/!][!scala]def max(x:Double, int y:Double): Double =[/!] {\n"
+"[!java]double max(double x, double y)[/!][!scala]def max(x:Double, y:Double): Double =[/!] {\n"
 "  if (x > y) {\n"
 "    return x;\n"
 "  }\n"
 "  return y;\n"
-"}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, int y:Int): Int =[/!] {\n"
+"}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, y:Int): Int =[/!] {\n"
 "  if (x > y) {\n"
 "    return x;\n"
 "  }\n"
 "  return y;\n"
 "}\n"
-"[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, int y:Int, int z:Int): Int =[/!] {\n"
+"[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, y:Int, z:Int): Int =[/!] {\n"
 "  if (x > y && x > z) {\n"
 "    return x;\n"
 "  }\n"
@@ -4958,7 +5027,7 @@ msgid ""
 "color passed in parameter sounds like a good start, but it is probably not "
 "enough."
 msgstr ""
-"Pour cela, vous devez écrire une méthode nommée <code>growFlower()</code> "
+"Pour cela, vous devez écrire une méthode nommée <code>growFlowers()</code> "
 "(«fait pousser les fleurs» en anglais). Cette méthode ne prend aucun "
 "paramètre et ne renvoie aucun résultat. Comme le motif est un peu complexe, "
 "il faut que vous le décomposiez en sous-motifs pour que votre code reste "
@@ -5197,8 +5266,8 @@ msgstr ""
 msgid ""
 "Following a track is not very difficult: move forward as long as you have "
 "the track in front of you.  If there is not track in front of you anymore, "
-"check if the rest of the track is on your left or on your right, and follow "
-"it further."
+"check whether the rest of the track is on your left or on your right, and "
+"follow it further."
 msgstr ""
 "Suivre une piste n'est pas très difficile : avancez tant que vous êtes face "
 "à la piste. Si la piste n'est plus devant vous, cherchez si elle se trouve à "
@@ -5287,7 +5356,7 @@ msgstr ""
 "que les couleurs sont des <i>objets</i> en Java, et que <code>.equals()</"
 "code> est la marche à suivre pour tester l'égalité d'objets Java.[/!]\n"
 "[!python|scala]Il suffit ensuite de tester si la couleur renvoyée par cette "
-"fonction est égale à la valeur <code>Color.green</code>, qui représente a "
+"fonction est égale à la valeur <code>Color.green</code>, qui représente la "
 "couleur verte.[/!]"
 
 #. type: Content of: <p>
@@ -5693,7 +5762,7 @@ msgid ""
 "<code>[!java]String[/!] readMessage()[!scala]: String[/!]</code>: returns "
 "the message written on the ground (or an empty string if nothing is written)."
 msgstr ""
-"<code>[!java]String [/!]readMessage()[!java]: String[/!]</code> : renvoie le "
+"<code>[!java]String [/!]litMessage()[!java]: String[/!]</code> : renvoie le "
 "message qu'il y a écrit par terre (s'il y a rien, on obtient une chaîne "
 "vide)."
 
@@ -6475,7 +6544,7 @@ msgid ""
 msgstr ""
 "On obtient la direction actuelle de la buggle avec la méthode "
 "<code>getDirection()</code>, et on sait si elle regarde à l'est avec le test "
-"<code>getDirection() == Direction.EAST</code> (WEST pour ouest)."
+"<code>getDirection() == Direction.EST</code> (ou bien Direction.OUEST)."
 
 #. type: Content of: <ul><li>
 #: src/lessons/welcome/traversal/Snake.html:25
@@ -6587,7 +6656,7 @@ msgstr ""
 "Le premier objectif est donc d'écrire une fonction booléenne indiquant si la "
 "buggle a atteint la position finale ou non, càd si elle est arrivée en bas à "
 "droite du monde.  Vous utiliserez pour cela les méthodes "
-"<code>getMondeHauteur()</code> et <code>getMondeLargueur()</code> qui "
+"<code>getMondeHauteur()</code> et <code>getMondeLargeur()</code> qui "
 "retournent respectivement la hauteur et la largeur du monde.  Votre test est "
 "de comparer les coordonnées actuelles de votre buggle (que vous pouvez "
 "retrouver avec les méthodes <code>getX()</code> et <code>getY()</code>) aux "
@@ -7097,7 +7166,7 @@ msgstr ""
 "Chaque ensemble d'informations contient trois valeurs.\n"
 "La première est le rang de la couleur à mettre sur le sol.\n"
 "La deuxième est le mouvement à effectuer, avec la notation suivante : "
-"0=stop, 1=pas de virage, 2=gauche, 4=demi-tour, 8=left. Veuillez noter que "
+"0=stop, 1=pas de virage, 2=gauche, 4=demi-tour, 8=droite. Veuillez noter que "
 "si l'instruction est stop, vous ne devez même pas avancer sur cette étape "
 "(mais vous ne devez pas arrêter votre programme pour autant : les prochains "
 "pas peuvent faire quelque chose d'autre). Finalement, le troisième entier "
@@ -9774,7 +9843,7 @@ msgstr ""
 "Écrivez une méthode booléenne <code>isDirectionFree(dir)</code> indiquant si "
 "la direction fournie en paramètre est libre, c'est-à-dire si vous pouvez "
 "vous déplacer dans cette direction. Notez que la démo utilise la direction "
-"NORTH pour cela. Vous pouvez retrouver la direction courante de la buggle en "
+"NORD pour cela. Vous pouvez retrouver la direction courante de la buggle en "
 "utilisant la méthode <code>Direction getDirection()</code>.  Vous pouvez "
 "diriger (sans se déplacer) votre buggle dans une direction en utilisant la "
 "méthode <code>setDirection(dir)</code>.  Pensez à mémoriser (dans une "
@@ -9834,8 +9903,8 @@ msgid ""
 "the favorite direction is not free. Do that until you find your baggle."
 msgstr ""
 "Vous devez changer votre cap vers votre direction favorite (probablement le "
-"nord -- NORTH). Il vous faut ensuite écrire la boucle principale de votre "
-"algorithme. Tant que votre buggle n'a pas trouvé son biscuit, il faut "
+"nord -- Direction.NORD). Il vous faut ensuite écrire la boucle principale de "
+"votre algorithme. Tant que votre buggle n'a pas trouvé son biscuit, il faut "
 "avancer jusqu'à un obstacle dans la direction de prédilection. Quand un "
 "obstacle est rencontré, il faut garder la patte sur un mur (en utilisant "
 "<code>keepHandOnSideWall()</code>) tant que la somme des virages n'est pas "
@@ -10055,7 +10124,7 @@ msgstr ""
 #. type: Content of: <ul><li>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:9
 msgid "<code>getWorldWidth()</code> gives the width of its world."
-msgstr "<code>getMondeLargueur()</code> pour connaitre la largeur du monde"
+msgstr "<code>getMondeLargeur()</code> pour connaitre la largeur du monde"
 
 #. type: Content of: <ul><li>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:10
@@ -10161,9 +10230,9 @@ msgstr ""
 "au sol. Pour celà, il lui suffit à chaque pas d'aller sur la case de plus "
 "petite distance parmis celles accessibles. Vous pouvez utiliser la méthode "
 "<code>void setDirection(Direction d)</code> pour faire regarder votre buggle "
-"dans une direction spécifique comme <code>Direction.NORTH</code>, "
-"<code>Direction.SOUTH</code>, <code>Direction.EAST</code> ou <code>Direction."
-"WEST</code>, qui correspondent respectivement au nord, sud, est et ouest."
+"dans une direction spécifique comme <code>Direction.NORD</code>, "
+"<code>Direction.SUD</code>, <code>Direction.EST</code> ou <code>Direction."
+"OUEST</code>, qui correspondent respectivement au nord, sud, est et ouest."
 
 #. type: Attribute 'alt' of: <div>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:35
@@ -10663,7 +10732,7 @@ msgstr ""
 #: src/lessons/welcome/array/arraycount9/ArrayCount9.html:4
 #: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:4
 #: src/lessons/welcome/array/notriples/NoTriples.html:7
-#: src/lessons/welcome/array/has271/Has271.html:8
+#: src/lessons/welcome/array/has271/Has271.html:9
 msgid ""
 "This exercise was converted to PLM from the excellent exercising site http://"
 "javabat.com/"
@@ -10882,8 +10951,8 @@ msgid ""
 "python]Note that math.fabs(n) returns the absolute value of a number.  This "
 "function can only be used if you imported the math module.[/!]"
 msgstr ""
-"Étant donné deux nombres entiers, retourner la valeur la plus proche de 10, "
-"ou 0 en cas de match nul.\n"
+"Étant donné deux nombres entiers, retourner vrai si et seulement si la "
+"valeur est à moins de 10 de la valeur 100 ou de la valeur 200.\n"
 "[!java|scala]Remarquez que Math.abs(n) retourne la valeur absolue d'un "
 "nombre.[/!] \n"
 "[!python]Remarquez que math.fabs(n) retourne la valeur absolue d'un nombre. "
@@ -11008,7 +11077,7 @@ msgid ""
 msgstr ""
 "Vous avez un ticket de loterie bleu, avec des entiers a, b et c inscrits "
 "dessus. Cela fait trois paires que l'on appellera ab, bc et ac. Considérez "
-"la somme des nombres de chaque pair. Si la somme de l'une des paires vaut "
+"la somme des nombres de chaque paire. Si la somme de l'une des paires vaut "
 "exactement 10, le résultat est 10. Sinon, si la somme ab vaut exactement 10 "
 "de plus que les sommes bc ou ac, le résultat est 5. Sinon, le résultat est 0."
 
@@ -11071,12 +11140,12 @@ msgid ""
 msgstr ""
 "Vous et votre compagne/compagnon essayez d'obtenir une table au restaurant. "
 "Le paramètre \"you\" est l'élégance de vos vêtements, dans l'intervalle "
-"[0,10], et \"date\"  est l'élégance des vêtements de votre compagne/"
-"compagnon. Le résultat obtenir la table est  encodé comme une valeur enteur "
-"avec 0=non, 1= peut-être et 2=oui. Si l'un de vous deux est très élégant, 8 "
-"ou plus, alors le résultat est 2 (oui). Avec l'exception que si l'un de vous "
-"deux a un style de 2 ou moins, alors le résultat est 0 (no). Sinon, le "
-"résultat est 1 (peut-être)."
+"[0,10], et \"date\" est l'élégance des vêtements de votre compagne/"
+"compagnon. Le résultat à obtenir la table est encodé comme une valeur "
+"entière avec 0=non, 1=peut-être et 2=oui. Si l'un de vous deux est très "
+"élégant (8 ou plus) alors le résultat est 2 (oui). Avec l'exception que si "
+"l'un de vous deux a un style de 2 ou moins, alors le résultat est 0 (no). "
+"Sinon, le résultat est 1 (peut-être)."
 
 #. type: Content of: <h1>
 #: src/lessons/welcome/bat/bool2/GreenTicket.html:1
@@ -11331,9 +11400,9 @@ msgid ""
 "range 13..19 inclusive, are extra lucky. So if either value is a teen, just "
 "return 19."
 msgstr ""
-"Étant donné deux nombres entiers (a et b), retournez leur somme. Cependant, "
-"les valeurs ados (dans l'intervale [13;19]) sont particulièrement chanceuse. "
-"Donc, si l'un des nombres est ado, retournez simplement 19."
+"Étant donné deux nombres entiers (a et b), renvoyez leur somme. Cependant, "
+"les valeurs ados (dans l'intervale [13;19]) sont particulièrement "
+"chanceuses. Donc, si l'un des nombres est ado, renvoyez simplement 19."
 
 #. type: Content of: <h1>
 #: src/lessons/welcome/bat/bool2/TwoAsOne.html:1
@@ -12359,7 +12428,7 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array2.html:16
 #, no-wrap
 msgid "[!java]int offset = Integer.parseInt(readMessage())[/!][!python]offset = int( readMessage() )[/!][!scala]val offset = readMessage().toInt[/!]"
-msgstr "[!java]int decalage = Integer.parseInt(readMessage())[/!][!python]decalage = int( readMessage() )[/!][!scala]val decalage = readMessage().toInt[/!]"
+msgstr "[!java]int decalage = Integer.parseInt(litMessage())[/!][!python]decalage = int( litMessage() )[/!][!scala]val decalage = litMessage().toInt[/!]"
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/basics/Array2.html:18
@@ -12722,8 +12791,8 @@ msgid ""
 "times in a row in the array. Return true if the array does not contain any "
 "triples."
 msgstr ""
-"Soit un tableau d'entiers, on dire qu'un triplet est une valeur qui apparait "
-"3 fois  à la suite dans le tableau. Renvoyez vrai si le tableau ne contient "
+"Soit un tableau d'entiers, on dira qu'un triplet est une valeur qui apparait "
+"3 fois à la suite dans le tableau. Renvoyez vrai si le tableau ne contient "
 "pas de triplet."
 
 #. type: Content of: <h1>
@@ -12731,18 +12800,28 @@ msgstr ""
 msgid "Has271"
 msgstr "Contient 271"
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p>
 #: src/lessons/welcome/array/has271/Has271.html:2
 msgid ""
 "Given an array of integers, return true if it contains a 2, 7, 1 pattern -- "
-"a value, followed by the value plus 5, followed by the value minus 1.  "
+"a value, followed by the value plus 5, followed by the initial value minus "
+"1.  So, 2,7,1 is such a pattern because 7 is 5+2 and 1 is 2-1. 3,8,2 is also "
+"such a pattern."
+msgstr ""
+"Soit un tableau d'entiers, renvoyez vrai si il contient un motif 2,7,1 -- "
+"une valeur, suivie de cette valeur plus 5, suivie par cette valeur moins "
+"1. \n"
+"Par exemple, 2,7,1 est un tel motif car 7=5+2 et 1=2-1. 3,8,2 est un autre "
+"motif correspondant.\n"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/has271/Has271.html:6
+msgid ""
 "Additionally the 271 counts even if the \"1\" differs by 2 or less from the "
 "correct value."
 msgstr ""
-"Soit un tableau d'entiers, renvoyez vrai si il contient un motif 2,7,1 -- "
-"une valeur, suivie de cette valeur plus 5, suivie par cette valeur moins 1. "
-"En outre, le 271 compte même si le \"1\" diffère de 2 ou moins de la valeur "
-"correcte."
+"De plus, le 271 compte même si le \"1\" diffère de 2 ou moins de la valeur "
+"correcte.<"
 
 #. type: Content of: <h1>
 #: src/lessons/sort/pancake/universe/PancakeWorld.html:1
diff --git a/lib/l10n/plm.pot b/lib/l10n/plm.pot
index 192e4ab..eb1466d 100644
--- a/lib/l10n/plm.pot
+++ b/lib/l10n/plm.pot
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2013-09-08 22:37+0300\n"
+"POT-Creation-Date: 2013-09-12 21:41+0300\n"
 "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -514,102 +514,113 @@ msgstr ""
 #. type: Content of: <pre>
 #: src/plm/universe/turtles/TurtleWorld.html:36
 #, no-wrap
-msgid "[!java]double [/!]getHeading()[!scala]:Double[/!]"
+msgid "[!java]void [/!]clear()"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
 #: src/plm/universe/turtles/TurtleWorld.html:37
-msgid "Returns the current heading of the turtle (in degrees)."
+msgid "Removes any trail on the sheet."
 msgstr ""
 
 #. type: Content of: <pre>
 #: src/plm/universe/turtles/TurtleWorld.html:39
 #, no-wrap
-msgid "[!java]void [/!]setHeading([!java]double [/!]angle[!scala]:Double[/!])"
+msgid "[!java]double [/!]getHeading()[!scala]:Double[/!]"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
 #: src/plm/universe/turtles/TurtleWorld.html:40
+msgid "Returns the current heading of the turtle (in degrees)."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/plm/universe/turtles/TurtleWorld.html:42
+#, no-wrap
+msgid "[!java]void [/!]setHeading([!java]double [/!]angle[!scala]:Double[/!])"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/plm/universe/turtles/TurtleWorld.html:43
 msgid "Sets a new heading to the turtle (in degrees)."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/plm/universe/turtles/TurtleWorld.html:42
+#: src/plm/universe/turtles/TurtleWorld.html:45
 msgid "Functions about the pen"
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:44
+#: src/plm/universe/turtles/TurtleWorld.html:47
 #, no-wrap
 msgid "[!java]void [/!]penUp()"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:45
+#: src/plm/universe/turtles/TurtleWorld.html:48
 msgid ""
 "Moves the pen up (turtles have pens, not brushes as buggles). The turtle "
 "will not leave any trace during its subsequent moves."
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:48
+#: src/plm/universe/turtles/TurtleWorld.html:51
 #, no-wrap
 msgid "[!java]void [/!]penDown()"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:49
+#: src/plm/universe/turtles/TurtleWorld.html:52
 msgid ""
 "Moves the pen down. The turtle will leave a trace during its subsequent "
 "moves."
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:51
+#: src/plm/universe/turtles/TurtleWorld.html:54
 #, no-wrap
 msgid "[!java]boolean [/!]isPenDown()[!scala]:Boolean[/!]"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:52
+#: src/plm/universe/turtles/TurtleWorld.html:55
 msgid "Returns the current pen position as a boolean."
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/turtles/TurtleWorld.html:54 src/plm/universe/bugglequest/BuggleWorld.html:25
+#: src/plm/universe/turtles/TurtleWorld.html:57 src/plm/universe/bugglequest/BuggleWorld.html:25
 #, no-wrap
 msgid "[!java]Color [/!]getColor()[!scala]:Color[/!]"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:55
+#: src/plm/universe/turtles/TurtleWorld.html:58
 msgid "Returns the current pen color."
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:57
+#: src/plm/universe/turtles/TurtleWorld.html:60
 #, no-wrap
 msgid "[!java]void [/!]setColor([!java]Color [/!]color[!scala]:Color[/!])"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:58
+#: src/plm/universe/turtles/TurtleWorld.html:61
 msgid "Changes the pen color."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/plm/universe/turtles/TurtleWorld.html:60
+#: src/plm/universe/turtles/TurtleWorld.html:63
 msgid "Other functions"
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/plm/universe/turtles/TurtleWorld.html:62 src/plm/universe/bugglequest/BuggleWorld.html:35 src/lessons/recursion/hanoi/universe/HanoiWorld.html:23
+#: src/plm/universe/turtles/TurtleWorld.html:65 src/plm/universe/bugglequest/BuggleWorld.html:35 src/lessons/recursion/hanoi/universe/HanoiWorld.html:23
 #, no-wrap
 msgid "[!java]boolean [/!]isSelected()[!scala]:Boolean[/!]"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/turtles/TurtleWorld.html:63
+#: src/plm/universe/turtles/TurtleWorld.html:66
 msgid "Returns whether the current turtle is selected in the graphical interface."
 msgstr ""
 
@@ -938,64 +949,70 @@ msgstr ""
 msgid "[!java]void [/!]dropBaggle()"
 msgstr ""
 
+#. type: Content of: <table><tr><td>
+#: src/plm/universe/bugglequest/BuggleWorld.html:56 src/lessons/welcome/Main.html:8 src/lessons/welcome/Main.html:91 src/lessons/welcome/Main.html:174 src/lessons/welcome/Main.html:254 src/lessons/welcome/Main.html:348 src/lessons/welcome/Main.html:428 src/lessons/welcome/Main.html:468
+msgid " "
+msgstr ""
+
 #. type: Content of: <table><tr><td><b>
-#: src/plm/universe/bugglequest/BuggleWorld.html:57
+#: src/plm/universe/bugglequest/BuggleWorld.html:58
 msgid "<b>Look for a message"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/plm/universe/bugglequest/BuggleWorld.html:57
+#: src/plm/universe/bugglequest/BuggleWorld.html:58
 msgid "Add a message"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/plm/universe/bugglequest/BuggleWorld.html:57
+#: src/plm/universe/bugglequest/BuggleWorld.html:58
 msgid "Read the message"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:57
+#: src/plm/universe/bugglequest/BuggleWorld.html:58
 msgid "Erase the message</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:58
+#: src/plm/universe/bugglequest/BuggleWorld.html:59
 msgid "[!java]boolean [/!]isOverMessage()[!scala]:Boolean[/!]"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:59
+#: src/plm/universe/bugglequest/BuggleWorld.html:60
 msgid "[!java]void [/!]writeMessage([!java]String [/!]msg[!scala]:String[/!])"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:60
+#: src/plm/universe/bugglequest/BuggleWorld.html:61
 msgid "[!java]String [/!]readMessage()[!scala]:String[/!]"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/plm/universe/bugglequest/BuggleWorld.html:61
+#: src/plm/universe/bugglequest/BuggleWorld.html:62
 msgid "[!java]void [/!]clearMessage()"
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/plm/universe/bugglequest/BuggleWorld.html:64
+#: src/plm/universe/bugglequest/BuggleWorld.html:65
 msgid "Note on exceptions"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/plm/universe/bugglequest/BuggleWorld.html:65
+#: src/plm/universe/bugglequest/BuggleWorld.html:66
 msgid ""
 "Regular buggles throw a BuggleWallException exception if you ask them to "
 "traverse a wall.  They throw a NoBaggleUnderBuggleException exception if you "
 "ask them to pickup a baggle from an empty cell, or a "
 "AlreadyHaveBaggleException exception if they already carry a baggle.  Trying "
 "to drop a baggle on a cell already containing one throws an "
-"AlreadyHaveBaggleException exception."
+"AlreadyHaveBaggleException exception.  Dropping a baggle when you have none "
+"throws a DontHaveBaggleException."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/plm/universe/bugglequest/BuggleWorld.html:71
+#: src/plm/universe/bugglequest/BuggleWorld.html:73
 msgid ""
 "SimpleBuggles (ie, the one used in first exercises) display an error message "
 "on problem so that you don't need to know what an exception is."
@@ -1241,11 +1258,6 @@ msgid ""
 "for beginners. List of seen notions per exercise:"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/lessons/welcome/Main.html:8 src/lessons/welcome/Main.html:91 src/lessons/welcome/Main.html:174 src/lessons/welcome/Main.html:254 src/lessons/welcome/Main.html:348 src/lessons/welcome/Main.html:428 src/lessons/welcome/Main.html:468
-msgid " "
-msgstr ""
-
 #. type: Content of: <h2>
 #: src/lessons/welcome/Main.html:9 src/lessons/welcome/Main.html:92 src/lessons/welcome/Main.html:175 src/lessons/welcome/Main.html:255 src/lessons/welcome/Main.html:349 src/lessons/welcome/Main.html:429 src/lessons/welcome/Main.html:469 src/lessons/welcome/instructions/Instructions.html:1
 msgid "Instructions"
@@ -1627,7 +1639,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p>
-#: src/lessons/welcome/instructions/Instructions.html:27 src/lessons/welcome/variables/Variables.html:123
+#: src/lessons/welcome/instructions/Instructions.html:27 src/lessons/welcome/variables/Variables.html:139
 msgid "[!python|scala]"
 msgstr ""
 
@@ -1646,7 +1658,7 @@ msgid "meltTheChocolatePieces(); addSugar(); coolMix(); serve()\n"
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/instructions/Instructions.html:34 src/lessons/welcome/variables/Variables.html:31 src/lessons/welcome/variables/Variables.html:61 src/lessons/welcome/variables/Variables.html:130 src/lessons/welcome/loopfor/LoopFor.html:69 src/lessons/welcome/loopdowhile/LoopDoWhile.html:53 src/lessons/welcome/loopdowhile/Poucet.html:36 src/lessons/welcome/methods/args/MethodsArgs.html:65 src/lessons/welcome/methods/picture/MethodsPicture.html:39 src/lessons/welcome/bdr/BDR.html:59 [...]
+#: src/lessons/welcome/instructions/Instructions.html:34 src/lessons/welcome/variables/Variables.html:77 src/lessons/welcome/variables/Variables.html:146 src/lessons/welcome/loopfor/LoopFor.html:69 src/lessons/welcome/loopdowhile/LoopDoWhile.html:53 src/lessons/welcome/loopdowhile/Poucet.html:36 src/lessons/welcome/methods/args/MethodsArgs.html:65 src/lessons/welcome/methods/picture/MethodsPicture.html:39 src/lessons/welcome/bdr/BDR.html:59 src/lessons/welcome/bdr/BDR.html:193 src/lesson [...]
 msgid "[/!]"
 msgstr ""
 
@@ -1706,7 +1718,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h3>
-#: src/lessons/welcome/instructions/Instructions.html:64 src/lessons/welcome/conditions/Conditions.html:108 src/lessons/welcome/loopwhile/LoopWhile.html:32 src/lessons/welcome/loopwhile/BaggleSeeker.html:8 src/lessons/welcome/variables/Variables.html:97 src/lessons/welcome/loopfor/LoopFor.html:71 src/lessons/welcome/methods/basics/Methods.html:95 src/lessons/welcome/methods/basics/MethodsDogHouse.html:37 src/lessons/welcome/methods/returning/MethodsReturning.html:48 src/lessons/welcome/m [...]
+#: src/lessons/welcome/instructions/Instructions.html:64 src/lessons/welcome/conditions/Conditions.html:108 src/lessons/welcome/loopwhile/LoopWhile.html:32 src/lessons/welcome/loopwhile/BaggleSeeker.html:8 src/lessons/welcome/variables/Variables.html:113 src/lessons/welcome/loopfor/LoopFor.html:71 src/lessons/welcome/methods/basics/Methods.html:95 src/lessons/welcome/methods/basics/MethodsDogHouse.html:37 src/lessons/welcome/methods/returning/MethodsReturning.html:48 src/lessons/welcome/ [...]
 msgid "Exercise goal"
 msgstr ""
 
@@ -2218,17 +2230,18 @@ msgid ""
 "<b>Declaring</b> (ie, creating) a variable in [!thelang], is very "
 "simple. You just need to write [!java]its type, a space, and the variable "
 "name.[/!] [!scala]the <code>var</code> keyword, the variable name, a column "
-"(:) and the variable type.[/!] [!python]the variable name, an equal sign (=) "
-"and an initial value.[/!] The variable name is the label to retrieve it "
-"afterward[!python].[/!] [!java|scala] while the type is the kind of data "
-"that this variable accepts to store.[/!] It is forbidden to use spaces in "
-"variable names. So you can name a variable <code>stepAmount</code> if you "
-"want, but <code>step amount</code> is not a valid name."
+"(:) and the variable type an equal sign (=) and an initial value.[/!] "
+"[!python]the variable name, an equal sign (=) and an initial value.[/!] The "
+"variable name is the label to retrieve it afterward[!python].[/!] "
+"[!java|scala] while the type is the kind of data that this variable accepts "
+"to store.[/!] It is forbidden to use spaces in variable names. You can name "
+"a variable <code>stepAmount</code> if you want, but <code>step amount</code> "
+"is not a valid name."
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/variables/Variables.html:28 src/lessons/welcome/variables/Variables.html:40 src/lessons/welcome/methods/args/MethodsArgs.html:34 src/lessons/welcome/methods/picture/MethodsPicture.html:34 src/lessons/welcome/bdr/BDR.html:8 src/lessons/welcome/bdr/BDR2.html:3 src/lessons/recursion/square/FourSquare.html:27
-msgid "[!java|scala]"
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:28 src/lessons/welcome/loopfor/LoopFor.html:46 src/lessons/welcome/bdr/BDR.html:187 src/lessons/turmites/langton/Langton.html:20 src/lessons/welcome/array/basics/Array1.html:200
+msgid "[!java]"
 msgstr ""
 
 #. type: Content of: <p><p><p>
@@ -2241,88 +2254,166 @@ msgstr ""
 #. type: Content of: <p><p><pre>
 #: src/lessons/welcome/variables/Variables.html:30
 #, no-wrap
-msgid "[!java]int x;[/!][!scala]var x: Int[/!]"
+msgid "int x;"
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:33
+#: src/lessons/welcome/variables/Variables.html:31
 msgid ""
-"[!java|scala]If you want, you can specify the initial value of the variable "
-"by adding a equal sign (=) followed by the value after the declaration.[/!] "
-"[!scala]If you specify a value, you don't have to specify the type of the "
-"variable, since Scala manages to guess it alone in most cases.  You are "
-"still free to specify the type if you prefer (or if the compiler fail to "
-"determine the type for some reason), but it's optional.[/!] So you want that "
-"the variable contains 5 as initial value, you should type:"
+"If you want, you can specify the initial value of the variable by adding a "
+"equal sign (=) followed by the value after the declaration."
 msgstr ""
 
 #. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:33
+#, no-wrap
+msgid "int x=5;"
+msgstr ""
+
+#. type: Content of: <p><p>
+#: src/lessons/welcome/variables/Variables.html:34 src/lessons/welcome/variables/Variables.html:68
+msgid "[/!] [!python]"
+msgstr ""
+
+#. type: Content of: <p><p><p>
 #: src/lessons/welcome/variables/Variables.html:37
+msgid "So you want that the variable contains 5 as initial value, you should type:"
+msgstr ""
+
+#. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:38
 #, no-wrap
+msgid "x = 5"
+msgstr ""
+
+#. type: Content of: <p><p>
+#: src/lessons/welcome/variables/Variables.html:39 src/lessons/welcome/loopfor/LoopFor.html:57 src/lessons/welcome/bdr/BDR2.html:82
+msgid "[/!] [!scala]"
+msgstr ""
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:42
 msgid ""
-"[!java]int x=5;[/!][!python]x = 5[/!][!scala]var x: Int =  5 <span "
-"class=\"comment\">// I can define the type if I want to</span>\n"
+"So, to create a variable named <b>x</b> intended to contain integers with 42 "
+"as initial value, one should write:"
+msgstr ""
+
+#. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:43
+#, no-wrap
+msgid "var x:Int = 42"
+msgstr ""
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:44
+msgid ""
+"In most cases, the compiler is able to guess the type of the variable from "
+"the initialization value, and you can omit it:"
+msgstr ""
+
+#. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:45
+#, no-wrap
+msgid "var x = 42"
+msgstr ""
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:46
+msgid ""
+"You still have to specify the if you use some generic values as an "
+"initialization, such as the very particular value <code>null</code>, which "
+"type happens to be ambigous. Even when the type is clear, you can still "
+"specify it if you prefer.  So you want that the variable contains 5 as "
+"initial value, you should type:"
+msgstr ""
+
+#. type: Content of: <p><p><pre>
+#: src/lessons/welcome/variables/Variables.html:49
+#, no-wrap
+msgid ""
+"var x: Int =  5 <span class=\"comment\">// I can define the type if I want "
+"to</span>\n"
 "var y =  10      <span class=\"comment\">// or I can omit the type if I "
-"prefer</span>[/!]"
+"prefer</span>"
+msgstr ""
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:51 src/lessons/welcome/loopdowhile/LoopDoWhile.html:38 src/lessons/turmites/helloturmite/HelloTurmite.html:60 src/lessons/welcome/array/basics/Array1.html:114
+msgid "[/!] [!java|scala]"
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:41
+#: src/lessons/welcome/variables/Variables.html:54
 msgid ""
 "As you can see, the variables are <b>typed</b> in [!thelang], which means "
 "that they are somehow specialized: A given variable can only store data of a "
 "given type; Don't even think of storing numbers in a variable that is "
-"tailored for letters! Other languages (such as Python) are less picky and "
-"allow you to store any kind of data in any variable without restriction.  "
-"This seems easier at the first glance, but this kind of restriction allows "
-"the compiler to catch more logic errors for you, which is also good. In some "
-"sense, Python is easier to write but errors can sneak in more easily than in "
-"[!thelang].  Here are some of the existing types:"
+"tailored for letters! The [!thelang] language is said to be <b>statically "
+"typed</b>."
+msgstr ""
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:57
+msgid ""
+"Other languages (such as Python) are less picky and allow you to store any "
+"kind of data in any variable, without restriction (those languages are said "
+"to be <b>dynamically typed</b>).  This seems easier at the first glance, but "
+"this kind of restriction allows the compiler to catch more logic errors for "
+"you, which is also good. In some sense, Python is easier to write but errors "
+"can sneak in more easily than in [!thelang]."
+msgstr ""
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:61
+msgid "Here are some existing types in [!thelang]:"
 msgstr ""
 
 #. type: Content of: <p><p><ul><li>
-#: src/lessons/welcome/variables/Variables.html:48
+#: src/lessons/welcome/variables/Variables.html:63
 msgid "<b>[!java]int[/!][!scala]Int[/!]</b>, for integers;"
 msgstr ""
 
 #. type: Content of: <p><p><ul><li>
-#: src/lessons/welcome/variables/Variables.html:49
+#: src/lessons/welcome/variables/Variables.html:64
 msgid "<b>[!java]double[/!][!scala]Double[/!]</b>, for dot numbers;"
 msgstr ""
 
 #. type: Content of: <p><p><ul><li>
-#: src/lessons/welcome/variables/Variables.html:50
+#: src/lessons/welcome/variables/Variables.html:65
 msgid ""
 "<b>[!java]boolean[/!][!scala]Boolean[/!]</b>, for booleans that are values "
 "being either true or false;"
 msgstr ""
 
 #. type: Content of: <p><p><ul><li>
-#: src/lessons/welcome/variables/Variables.html:51
+#: src/lessons/welcome/variables/Variables.html:66
 msgid "<b>String</b>, for char strings."
 msgstr ""
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/variables/Variables.html:53
-msgid "[/!] [!python]"
-msgstr ""
-
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:56
+#: src/lessons/welcome/variables/Variables.html:71
 msgid ""
 "As you can see, the variables are not <b>typed</b> in Python, which means "
 "that they are not specialized in any type of data.  A given variable store "
 "any type of data of a given type: you can store a number in a variable and "
-"latter on store a number in the same variable.  Other languages (such as "
-"Java or Scala) are much more picky and prevent you to mix data types in a "
-"given variable.  This seems annoying at the first glance, but this kind of "
+"latter on store a number in the same variable.  The values themselves are "
+"still typed, but not the variable. Python is said to be <b>dynamically "
+"typed</b>."
+msgstr ""
+
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/variables/Variables.html:74
+msgid ""
+"Other languages (such as Java or Scala) are much more picky and prevent you "
+"to mix data types in a given variable (they are said to be <b>statically "
+"typed</b>).  This seems annoying at the first glance, but this kind of "
 "restriction allows the compiler to catch more logic errors for you, which is "
 "also good. In some sense, Python is easier to write but errors can sneak in "
 "more easily."
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:64
+#: src/lessons/welcome/variables/Variables.html:80
 msgid ""
 "If you know that the value of your \"variable\" will never change (eg "
 "because it contains the screen size or some other constant value), then you "
@@ -2334,14 +2425,14 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:69
+#: src/lessons/welcome/variables/Variables.html:85
 msgid ""
 "Variables work very similarly for strings, floating point numbers and "
 "boolean values."
 msgstr ""
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:71
+#: src/lessons/welcome/variables/Variables.html:87
 #, no-wrap
 msgid ""
 "String name = \"Martin Quinson\";\n"
@@ -2351,7 +2442,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:75
+#: src/lessons/welcome/variables/Variables.html:91
 #, no-wrap
 msgid ""
 "val name:String = \"Martin Quinson\"; <span class=\"comment\">// this cannot "
@@ -2364,7 +2455,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:80
+#: src/lessons/welcome/variables/Variables.html:96
 #, no-wrap
 msgid ""
 "firstName = \"Martin\"\n"
@@ -2379,32 +2470,32 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><h3>
-#: src/lessons/welcome/variables/Variables.html:86
+#: src/lessons/welcome/variables/Variables.html:102
 msgid "Affectations"
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:88
+#: src/lessons/welcome/variables/Variables.html:104
 msgid ""
 "Once your variable is declared, you can <b>affect</b> a new value to it "
 "later in the program. That's really easy:"
 msgstr ""
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:89
+#: src/lessons/welcome/variables/Variables.html:105
 #, no-wrap
 msgid "x = 3[!java];[/!]"
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:91
+#: src/lessons/welcome/variables/Variables.html:107
 msgid ""
 "To the right of the equal symbol, you can put an arithmetic expression "
 "containing constants, variables and operations."
 msgstr ""
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/variables/Variables.html:93
+#: src/lessons/welcome/variables/Variables.html:109
 #, no-wrap
 msgid ""
 "x = 3 + 2[!java];[/!]\n"
@@ -2415,7 +2506,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p>
-#: src/lessons/welcome/variables/Variables.html:98
+#: src/lessons/welcome/variables/Variables.html:114
 msgid ""
 "It is now time to do more challenging exercises, don't you think? The "
 "objective is now to move forward until you find a baggle, pick it up, and "
@@ -2423,39 +2514,39 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><h3>
-#: src/lessons/welcome/variables/Variables.html:103
+#: src/lessons/welcome/variables/Variables.html:119
 msgid "How to do this?"
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:104
+#: src/lessons/welcome/variables/Variables.html:120
 msgid ""
 "To solve this problem, you have to decompose it in easier sub-parts. For "
 "example, you may want to do the following steps:"
 msgstr ""
 
 #. type: Content of: <p><p><p><ol><li>
-#: src/lessons/welcome/variables/Variables.html:107
+#: src/lessons/welcome/variables/Variables.html:123
 msgid "Move forward until located over a baggle"
 msgstr ""
 
 #. type: Content of: <p><p><p><ol><li>
-#: src/lessons/welcome/variables/Variables.html:108
+#: src/lessons/welcome/variables/Variables.html:124
 msgid "Pickup the baggle"
 msgstr ""
 
 #. type: Content of: <p><p><p><ol><li>
-#: src/lessons/welcome/variables/Variables.html:109
+#: src/lessons/welcome/variables/Variables.html:125
 msgid "Move backward of the same amount of steps than done in first step"
 msgstr ""
 
 #. type: Content of: <p><p><p><ol><li>
-#: src/lessons/welcome/variables/Variables.html:110
+#: src/lessons/welcome/variables/Variables.html:126
 msgid "Drop back the baggle"
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:113
+#: src/lessons/welcome/variables/Variables.html:129
 msgid ""
 "Naturally, it is impossible to do the right amount of steps backward at step "
 "3 if you didn't count the amount of steps done in the first phase. You can "
@@ -2463,7 +2554,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:117
+#: src/lessons/welcome/variables/Variables.html:133
 msgid ""
 "Create an integer variable before phase 1, initialize it to 0, and each time "
 "you move one step forward, increment its value by one (<code>stepAmount = "
@@ -2473,7 +2564,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:124
+#: src/lessons/welcome/variables/Variables.html:140
 msgid ""
 "If you know Java or other languages, you will probably try to use the "
 "<code>++</code> operator to increment the variable, but it's not allowed in "
@@ -2486,16 +2577,17 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:132
+#: src/lessons/welcome/variables/Variables.html:148
 msgid ""
 "Then, phase 3 consists in simply creating a new integer variable "
-"<code>doneSteps</code> initialized to 0, and do one step backward until "
-"<code>doneSteps</code> equals <code>stepAmount</code>, incrementing "
-"<code>doneSteps</code> each time."
+"<code>doneSteps</code> initialized to 0, and do one step backward as long as "
+"<code>doneSteps</code> is not equal to <code>stepAmount</code>, incrementing "
+"<code>doneSteps</code> each time. The <code>!=</code> operator should be "
+"used to test the inequality (whether some values are NOT equal)."
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/variables/Variables.html:137
+#: src/lessons/welcome/variables/Variables.html:155
 msgid "It's your turn now!"
 msgstr ""
 
@@ -2524,13 +2616,13 @@ msgstr ""
 msgid ""
 "Here is the second day of the Big Buggles' Race.  As previously, you have to "
 "run forward until you reach the right cell to stop on.  But this time, you "
-"have to reach the cell where you saw as much baggles as orange cells plus "
-"1.  In other word, the following condition must become true <code>2 * "
-"baggles = orangeCells + 1</code>."
+"have to reach the cell where the amount of baggles you saw is the double of "
+"the orange cells plus 1.  In other word, the following condition must become "
+"true <code>2 * baggles = orangeCells + 1</code>."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/variables/RunHalf.html:8
+#: src/lessons/welcome/variables/RunHalf.html:9
 msgid ""
 "You can determine whether you are over a orange cell with the "
 "<code>isOverOrange()</code> method."
@@ -2583,7 +2675,7 @@ msgid ""
 "[!java]for (int stepper=0; stepper<n; stepper++) {\n"
 "    <b>action</b>();\n"
 "}[/!][!python]for <b>stepper</b> in <b>range(n)</b>:\n"
-"    <b>action</b>()[/!][!scala] for (var <b>stepper</b> <- <b>1</b> to "
+"    <b>action</b>()[/!][!scala] for (<b>stepper</b> <- <b>1</b> to "
 "<b>n</b>) { \n"
 "    <b>action</b>();\n"
 "}[/!]"
@@ -2618,11 +2710,6 @@ msgstr ""
 msgid "The <code>for</code> loop is easier to read, don't you think?"
 msgstr ""
 
-#. type: Content of: <p><p><p>
-#: src/lessons/welcome/loopfor/LoopFor.html:46 src/lessons/welcome/bdr/BDR.html:187 src/lessons/turmites/langton/Langton.html:20 src/lessons/welcome/array/basics/Array1.html:200
-msgid "[!java]"
-msgstr ""
-
 #. type: Content of: <p>
 #: src/lessons/welcome/loopfor/LoopFor.html:47
 msgid ""
@@ -2645,11 +2732,6 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p>
-#: src/lessons/welcome/loopfor/LoopFor.html:57 src/lessons/welcome/bdr/BDR2.html:82
-msgid "[/!] [!scala]"
-msgstr ""
-
-#. type: Content of: <p><p>
 #: src/lessons/welcome/loopfor/LoopFor.html:60
 msgid ""
 "If you want to nest several loops, you can do it on one line in Scala. This "
@@ -2744,6 +2826,13 @@ msgid ""
 "them what these super shoes can do."
 msgstr ""
 
+#. type: Content of: <p>
+#: src/lessons/welcome/loopfor/LoopCourse.html:11
+msgid ""
+"You don't have to do anything particular with regard of the colors: your "
+"shoes will do it for you. Just take that run!"
+msgstr ""
+
 #. type: Content of: <h2>
 #: src/lessons/welcome/loopfor/LoopCourseForest.html:1
 msgid "Outdoor Training Buggle"
@@ -2858,11 +2947,6 @@ msgid ""
 "enter the body or not."
 msgstr ""
 
-#. type: Content of: <p><p><p>
-#: src/lessons/welcome/loopdowhile/LoopDoWhile.html:38 src/lessons/turmites/helloturmite/HelloTurmite.html:60 src/lessons/welcome/array/basics/Array1.html:114
-msgid "[/!] [!java|scala]"
-msgstr ""
-
 #. type: Content of: <p>
 #: src/lessons/welcome/loopdowhile/LoopDoWhile.html:42
 msgid ""
@@ -3155,39 +3239,17 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/welcome/methods/basics/Methods.html:100
 msgid ""
-"One specificity of this exercise is that you shouldn't write directly the "
-"code that the buggle should execute, but a method it should use. The code "
-"that calls your function will be automagically added when you click on "
-"<b>Start</b>.  For your information, this calling code will look like this:"
-msgstr ""
-
-#. type: Content of: <pre>
-#: src/lessons/welcome/methods/basics/Methods.html:105
-#, no-wrap
-msgid ""
-"[!java]for (int i=0; i<7; i++) {[/!][!python]for i in "
-"range(7):[/!][!scala]for (i <- 1 to 7) {[/!]\n"
-"    goAndGet()[!java];[/!]\n"
-"    right()[!java];[/!]\n"
-"    forward()[!java];[/!]\n"
-"    left()[!java];[/!]\n"
-"[!java|scala]}[/!]"
+"This exercise is a bit different because you will not write all of the code "
+"executed by the buggle. Instead, you should only write one method that is "
+"called automagically added when you click on <b>Start</b>. Your buggle calls "
+"your <code>goAndGet()</code> method on each row, until the baggle is found."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/methods/basics/Methods.html:112
+#: src/lessons/welcome/methods/basics/Methods.html:106
 msgid ""
-"Your buggle will repeat 7 times (which matches the world's dimension)  the "
-"sequence constituted of a call to the <code>goAndGet()</code> method that "
-"you should write, plus a move to get to the next row (turn right, move "
-"forward, turn left). As you can see, the buggle will do one step right from "
-"the right border of the world. It will bring it back to the left side since "
-"its world is a torus."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/welcome/methods/basics/Methods.html:119
-msgid "You should now write this goAndGet() method."
+"But for that to work, you have to actually write this "
+"<code>goAndGet()</code> method now."
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
@@ -3529,6 +3591,11 @@ msgid ""
 "[!python]res = divide(3.14 , 1.5)[/!]"
 msgstr ""
 
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/methods/args/MethodsArgs.html:34 src/lessons/welcome/methods/picture/MethodsPicture.html:34 src/lessons/welcome/bdr/BDR.html:8 src/lessons/welcome/bdr/BDR2.html:3 src/lessons/recursion/square/FourSquare.html:27
+msgid "[!java|scala]"
+msgstr ""
+
 #. type: Content of: <p>
 #: src/lessons/welcome/methods/args/MethodsArgs.html:35
 msgid ""
@@ -3541,21 +3608,21 @@ msgstr ""
 #: src/lessons/welcome/methods/args/MethodsArgs.html:39
 #, no-wrap
 msgid ""
-"[!java]double max(double x, double y)[/!][!scala]def max(x:Double, int "
+"[!java]double max(double x, double y)[/!][!scala]def max(x:Double, "
 "y:Double): Double =[/!] {\n"
 "  if (x > y) {\n"
 "    return x;\n"
 "  }\n"
 "  return y;\n"
-"}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, int y:Int): Int "
-"=[/!] {\n"
+"}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, y:Int): Int =[/!] "
+"{\n"
 "  if (x > y) {\n"
 "    return x;\n"
 "  }\n"
 "  return y;\n"
 "}\n"
-"[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, int y:Int, int "
-"z:Int): Int =[/!] {\n"
+"[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, y:Int, z:Int): "
+"Int =[/!] {\n"
 "  if (x > y && x > z) {\n"
 "    return x;\n"
 "  }\n"
@@ -3807,8 +3874,8 @@ msgstr ""
 msgid ""
 "Following a track is not very difficult: move forward as long as you have "
 "the track in front of you.  If there is not track in front of you anymore, "
-"check if the rest of the track is on your left or on your right, and follow "
-"it further."
+"check whether the rest of the track is on your left or on your right, and "
+"follow it further."
 msgstr ""
 
 #. type: Content of: <p>
@@ -7785,7 +7852,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bat/bool1/Close10.html:7 src/lessons/welcome/bat/bool1/Diff21.html:5 src/lessons/welcome/bat/bool1/HasTeen.html:6 src/lessons/welcome/bat/bool1/IcyHot.html:5 src/lessons/welcome/bat/bool1/In1020.html:5 src/lessons/welcome/bat/bool1/In3050.html:5 src/lessons/welcome/bat/bool1/LastDigit.html:9 src/lessons/welcome/bat/bool1/LoneTeen.html:6 src/lessons/welcome/bat/bool1/Main.html:11 src/lessons/welcome/bat/bool1/Makes10.html:5 src/lessons/welcome/bat/bool1/Max1020.html [...]
+#: src/lessons/welcome/bat/bool1/Close10.html:7 src/lessons/welcome/bat/bool1/Diff21.html:5 src/lessons/welcome/bat/bool1/HasTeen.html:6 src/lessons/welcome/bat/bool1/IcyHot.html:5 src/lessons/welcome/bat/bool1/In1020.html:5 src/lessons/welcome/bat/bool1/In3050.html:5 src/lessons/welcome/bat/bool1/LastDigit.html:9 src/lessons/welcome/bat/bool1/LoneTeen.html:6 src/lessons/welcome/bat/bool1/Main.html:11 src/lessons/welcome/bat/bool1/Makes10.html:5 src/lessons/welcome/bat/bool1/Max1020.html [...]
 msgid ""
 "This exercise was converted to PLM from the excellent exercising site "
 "http://javabat.com/"
@@ -9323,11 +9390,18 @@ msgstr ""
 msgid "Has271"
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p>
 #: src/lessons/welcome/array/has271/Has271.html:2
 msgid ""
 "Given an array of integers, return true if it contains a 2, 7, 1 pattern -- "
-"a value, followed by the value plus 5, followed by the value minus 1.  "
+"a value, followed by the value plus 5, followed by the initial value minus "
+"1.  So, 2,7,1 is such a pattern because 7 is 5+2 and 1 is 2-1. 3,8,2 is also "
+"such a pattern."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/has271/Has271.html:6
+msgid ""
 "Additionally the 271 counts even if the \"1\" differs by 2 or less from the "
 "correct value."
 msgstr ""
diff --git a/lib/resources/plm.configuration.properties b/lib/resources/plm.configuration.properties
index a7e625e..5b80454 100644
--- a/lib/resources/plm.configuration.properties
+++ b/lib/resources/plm.configuration.properties
@@ -1,7 +1,7 @@
-#Sun, 08 Sep 2013 22:44:35 +0200
+#Thu, 12 Sep 2013 21:46:18 +0200
 # PLM default configuration
-plm.major.version=2.2.1
-plm.minor.version=20130908
+plm.major.version=2.2.3
+plm.minor.version=20130912
 
 # This should be self explanatory, actually
 # Its value is automatically updated and saved in the personal property file
@@ -9,6 +9,8 @@ plm.programmingLanguage=Java
 
 plm.appengine.url=http\://jlmserver-chmod0.appspot.com
 
+plm.session.cloud.provider.url=http\://www.loria.fr/~oster/plm-cloud/
+
 # This is not documented, as it opens the door to teacher-only
 # features, one of them being to see the correction of any exercises.
 # Not very secure either, but PLM shouldn't be used for coercitive
diff --git a/src/lessons/maze/island/IslandMaze-answer0.map b/src/lessons/maze/island/IslandMaze-answer0.map
index ee8a7e2..5306d33 100644
--- a/src/lessons/maze/island/IslandMaze-answer0.map
+++ b/src/lessons/maze/island/IslandMaze-answer0.map
@@ -1,6 +1,6 @@
 BuggleWorld: Island
 Size: 12x12
-Buggle(11,5): east,black,lightGray,Thesee
+Buggle(11,5): east,black,black,Thesee
 Cell(0,0): white,nobaggle,topwall,leftwall,
 Cell(0,1): white,nobaggle,notopwall,leftwall,
 Cell(0,2): white,nobaggle,notopwall,leftwall,
@@ -37,7 +37,7 @@ Cell(3,0): white,nobaggle,topwall,noleftwall,
 Cell(3,1): white,nobaggle,notopwall,leftwall,
 Cell(3,2): white,nobaggle,notopwall,leftwall,
 Cell(3,3): white,nobaggle,topwall,noleftwall,
-Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,5): 204/204/255,nobaggle,topwall,leftwall,
 Cell(3,6): white,nobaggle,notopwall,leftwall,
 Cell(3,7): white,nobaggle,notopwall,leftwall,
 Cell(3,9): white,nobaggle,topwall,leftwall,
@@ -51,7 +51,7 @@ Cell(4,4): white,nobaggle,notopwall,leftwall,
 Cell(4,6): white,nobaggle,topwall,leftwall,
 Cell(4,7): white,nobaggle,topwall,noleftwall,
 Cell(4,9): white,nobaggle,notopwall,leftwall,
-Cell(4,10): 204/204/255,nobaggle,notopwall,leftwall,
+Cell(4,10): white,nobaggle,notopwall,leftwall,
 Cell(5,0): white,nobaggle,topwall,noleftwall,
 Cell(5,1): white,nobaggle,notopwall,leftwall,
 Cell(5,3): white,nobaggle,topwall,leftwall,
diff --git a/src/lessons/maze/island/IslandMaze-answer1.map b/src/lessons/maze/island/IslandMaze-answer1.map
index 31f0f91..c5b6694 100644
--- a/src/lessons/maze/island/IslandMaze-answer1.map
+++ b/src/lessons/maze/island/IslandMaze-answer1.map
@@ -1,6 +1,6 @@
 BuggleWorld: Another Island
 Size: 12x12
-Buggle(11,5): east,black,lightGray,Luke
+Buggle(11,5): east,black,black,Luke
 Cell(0,0): white,nobaggle,topwall,leftwall,
 Cell(0,1): white,nobaggle,notopwall,leftwall,
 Cell(0,2): white,nobaggle,notopwall,leftwall,
@@ -46,7 +46,7 @@ Cell(4,3): white,nobaggle,topwall,noleftwall,
 Cell(4,4): white,nobaggle,topwall,noleftwall,
 Cell(4,6): white,nobaggle,notopwall,leftwall,
 Cell(4,9): white,nobaggle,topwall,noleftwall,
-Cell(4,10): 204/204/255,nobaggle,topwall,leftwall,
+Cell(4,10): white,nobaggle,topwall,leftwall,
 Cell(5,0): white,nobaggle,topwall,leftwall,
 Cell(5,2): white,nobaggle,topwall,leftwall,
 Cell(5,3): white,nobaggle,topwall,leftwall,
@@ -70,7 +70,7 @@ Cell(7,0): white,nobaggle,topwall,leftwall,
 Cell(7,2): white,nobaggle,topwall,leftwall,
 Cell(7,3): white,nobaggle,topwall,noleftwall,
 Cell(7,4): white,nobaggle,notopwall,leftwall,
-Cell(7,6): white,nobaggle,notopwall,leftwall,
+Cell(7,6): 204/204/255,nobaggle,notopwall,leftwall,
 Cell(7,7): white,nobaggle,topwall,noleftwall,
 Cell(7,8): white,nobaggle,notopwall,leftwall,
 Cell(7,9): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/island/IslandMaze.map b/src/lessons/maze/island/IslandMaze.map
index e1a40ff..96a154a 100644
--- a/src/lessons/maze/island/IslandMaze.map
+++ b/src/lessons/maze/island/IslandMaze.map
@@ -1,6 +1,6 @@
 BuggleWorld: Island
 Size: 12x12
-Buggle(4,10): north,black,lightGray,Thesee
+Buggle(3,5): north,black,black,Thesee
 Cell(0,0): white,nobaggle,topwall,leftwall,
 Cell(0,1): white,nobaggle,notopwall,leftwall,
 Cell(0,2): white,nobaggle,notopwall,leftwall,
@@ -37,7 +37,7 @@ Cell(3,0): white,nobaggle,topwall,noleftwall,
 Cell(3,1): white,nobaggle,notopwall,leftwall,
 Cell(3,2): white,nobaggle,notopwall,leftwall,
 Cell(3,3): white,nobaggle,topwall,noleftwall,
-Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,5): 204/204/255,nobaggle,topwall,leftwall,
 Cell(3,6): white,nobaggle,notopwall,leftwall,
 Cell(3,7): white,nobaggle,notopwall,leftwall,
 Cell(3,9): white,nobaggle,topwall,leftwall,
@@ -51,7 +51,7 @@ Cell(4,4): white,nobaggle,notopwall,leftwall,
 Cell(4,6): white,nobaggle,topwall,leftwall,
 Cell(4,7): white,nobaggle,topwall,noleftwall,
 Cell(4,9): white,nobaggle,notopwall,leftwall,
-Cell(4,10): 204/204/255,nobaggle,notopwall,leftwall,
+Cell(4,10): white,nobaggle,notopwall,leftwall,
 Cell(5,0): white,nobaggle,topwall,noleftwall,
 Cell(5,1): white,nobaggle,notopwall,leftwall,
 Cell(5,3): white,nobaggle,topwall,leftwall,
diff --git a/src/lessons/maze/island/IslandMaze2.map b/src/lessons/maze/island/IslandMaze2.map
index 589cb2b..4c0648d 100644
--- a/src/lessons/maze/island/IslandMaze2.map
+++ b/src/lessons/maze/island/IslandMaze2.map
@@ -1,6 +1,6 @@
 BuggleWorld: Another Island
 Size: 12x12
-Buggle(4,10): north,black,lightGray,Luke
+Buggle(7,6): north,black,black,Luke
 Cell(0,0): white,nobaggle,topwall,leftwall,
 Cell(0,1): white,nobaggle,notopwall,leftwall,
 Cell(0,2): white,nobaggle,notopwall,leftwall,
@@ -46,7 +46,7 @@ Cell(4,3): white,nobaggle,topwall,noleftwall,
 Cell(4,4): white,nobaggle,topwall,noleftwall,
 Cell(4,6): white,nobaggle,notopwall,leftwall,
 Cell(4,9): white,nobaggle,topwall,noleftwall,
-Cell(4,10): 204/204/255,nobaggle,topwall,leftwall,
+Cell(4,10): white,nobaggle,topwall,leftwall,
 Cell(5,0): white,nobaggle,topwall,leftwall,
 Cell(5,2): white,nobaggle,topwall,leftwall,
 Cell(5,3): white,nobaggle,topwall,leftwall,
@@ -70,7 +70,7 @@ Cell(7,0): white,nobaggle,topwall,leftwall,
 Cell(7,2): white,nobaggle,topwall,leftwall,
 Cell(7,3): white,nobaggle,topwall,noleftwall,
 Cell(7,4): white,nobaggle,notopwall,leftwall,
-Cell(7,6): white,nobaggle,notopwall,leftwall,
+Cell(7,6): 204/204/255,nobaggle,notopwall,leftwall,
 Cell(7,7): white,nobaggle,topwall,noleftwall,
 Cell(7,8): white,nobaggle,notopwall,leftwall,
 Cell(7,9): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/island/IslandMazeEntity.java b/src/lessons/maze/island/IslandMazeEntity.java
index 4a1389c..4132ff2 100644
--- a/src/lessons/maze/island/IslandMazeEntity.java
+++ b/src/lessons/maze/island/IslandMazeEntity.java
@@ -7,17 +7,17 @@ public class IslandMazeEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void setX(int i)  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setY(int i)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setPos(int i,int j)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 	
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/maze/island/IslandMazeEntity.py b/src/lessons/maze/island/IslandMazeEntity.py
index 73b5368..6be2e47 100644
--- a/src/lessons/maze/island/IslandMazeEntity.py
+++ b/src/lessons/maze/island/IslandMazeEntity.py
@@ -1,9 +1,9 @@
 def setX(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead.")
 def setY(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead.")
 def setPos(x,y):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead.")
 
 
 # BEGIN SOLUTION 
diff --git a/src/lessons/maze/island/IslandMazeEntity.scala b/src/lessons/maze/island/IslandMazeEntity.scala
index d009f31..b21e052 100644
--- a/src/lessons/maze/island/IslandMazeEntity.scala
+++ b/src/lessons/maze/island/IslandMazeEntity.scala
@@ -6,15 +6,15 @@ import plm.core.model.Game
 class ScalaIslandMazeEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def setX(i: Int)  {
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	override def setY(i: Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	override def setPos(x: Int, y:Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/maze/pledge/PledgeMaze.fr.html b/src/lessons/maze/pledge/PledgeMaze.fr.html
index 3391411..b9c9144 100644
--- a/src/lessons/maze/pledge/PledgeMaze.fr.html
+++ b/src/lessons/maze/pledge/PledgeMaze.fr.html
@@ -51,7 +51,7 @@ une variable <code>sommeAngle</code> de type entière à votre programme.</p>
 <p>Écrivez une méthode booléenne <code>isDirectionFree(dir)</code> indiquant si
 la direction fournie en paramètre est libre, c'est-à-dire si vous pouvez
 vous déplacer dans cette direction. Notez que la démo utilise la direction
-NORTH pour cela. Vous pouvez retrouver la direction courante de la buggle en
+NORD pour cela. Vous pouvez retrouver la direction courante de la buggle en
 utilisant la méthode <code>Direction getDirection()</code>.  Vous pouvez
 diriger (sans se déplacer) votre buggle dans une direction en utilisant la
 méthode <code>setDirection(dir)</code>.  Pensez à mémoriser (dans une
@@ -74,8 +74,8 @@ même nom, et la globale n'est jamais modifiée.</p>
 
 <div class="tip" id="tip-1" alt="Montrer un indice supplémentaire">
 Vous devez changer votre cap vers votre direction favorite (probablement le
-nord -- NORTH). Il vous faut ensuite écrire la boucle principale de votre
-algorithme. Tant que votre buggle n'a pas trouvé son biscuit, il faut
+nord -- Direction.NORD). Il vous faut ensuite écrire la boucle principale de
+votre algorithme. Tant que votre buggle n'a pas trouvé son biscuit, il faut
 avancer jusqu'à un obstacle dans la direction de prédilection. Quand un
 obstacle est rencontré, il faut garder la patte sur un mur (en utilisant
 <code>keepHandOnSideWall()</code>) tant que la somme des virages n'est pas
diff --git a/src/lessons/maze/pledge/PledgeMazeEntity.java b/src/lessons/maze/pledge/PledgeMazeEntity.java
index c0db0ad..65734f0 100644
--- a/src/lessons/maze/pledge/PledgeMazeEntity.java
+++ b/src/lessons/maze/pledge/PledgeMazeEntity.java
@@ -7,17 +7,17 @@ public class PledgeMazeEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void setX(int i)  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setY(int i)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setPos(int i,int j)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/maze/pledge/PledgeMazeEntity.py b/src/lessons/maze/pledge/PledgeMazeEntity.py
index 53fd0f7..05860ac 100644
--- a/src/lessons/maze/pledge/PledgeMazeEntity.py
+++ b/src/lessons/maze/pledge/PledgeMazeEntity.py
@@ -1,9 +1,9 @@
 def setX(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead.")
 def setY(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead.")
 def setPos(x,y):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead.")
 
 # BEGIN SOLUTION
 
diff --git a/src/lessons/maze/pledge/PledgeMazeEntity.scala b/src/lessons/maze/pledge/PledgeMazeEntity.scala
index c60b752..2ef4549 100644
--- a/src/lessons/maze/pledge/PledgeMazeEntity.scala
+++ b/src/lessons/maze/pledge/PledgeMazeEntity.scala
@@ -6,15 +6,15 @@ import plm.core.model.Game
 class ScalaPledgeMazeEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def setX(i: Int)  {
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	override def setY(i: Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	override def setPos(x: Int, y:Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/maze/randommouse/RandomMouseMazeEntity.java b/src/lessons/maze/randommouse/RandomMouseMazeEntity.java
index fbc6df6..66a4320 100644
--- a/src/lessons/maze/randommouse/RandomMouseMazeEntity.java
+++ b/src/lessons/maze/randommouse/RandomMouseMazeEntity.java
@@ -6,17 +6,17 @@ public class RandomMouseMazeEntity extends plm.universe.bugglequest.SimpleBuggle
 	@Override
 	public void setX(int i)  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setY(int i)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setPos(int i,int j)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */ 
diff --git a/src/lessons/maze/randommouse/RandomMouseMazeEntity.py b/src/lessons/maze/randommouse/RandomMouseMazeEntity.py
index 290574b..31dddd6 100644
--- a/src/lessons/maze/randommouse/RandomMouseMazeEntity.py
+++ b/src/lessons/maze/randommouse/RandomMouseMazeEntity.py
@@ -10,11 +10,11 @@ def random3():
     return 2
 
 def setX(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead.")
 def setY(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead.")
 def setPos(x,y):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead.")
 
 # BEGIN SOLUTION
 while not isOverBaggle():
diff --git a/src/lessons/maze/randommouse/RandomMouseMazeEntity.scala b/src/lessons/maze/randommouse/RandomMouseMazeEntity.scala
index ec757d8..89b65e7 100644
--- a/src/lessons/maze/randommouse/RandomMouseMazeEntity.scala
+++ b/src/lessons/maze/randommouse/RandomMouseMazeEntity.scala
@@ -5,15 +5,15 @@ import plm.core.model.Game;
 class ScalaRandomMouseMazeEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def setX(i: Int)  {
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	override def setY(i: Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	override def setPos(x: Int, y:Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */ 
diff --git a/src/lessons/maze/shortestpath/ShortestPathMaze-answer0.map b/src/lessons/maze/shortestpath/ShortestPathMaze-answer0.map
index 00ab8db..b8e64cf 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMaze-answer0.map
+++ b/src/lessons/maze/shortestpath/ShortestPathMaze-answer0.map
@@ -46,8 +46,8 @@ Cell(3,5): white,nobaggle,topwall,leftwall,54
 Cell(3,6): white,nobaggle,notopwall,leftwall,53
 Cell(3,7): white,nobaggle,notopwall,leftwall,52
 Cell(3,8): white,nobaggle,topwall,noleftwall,47
-Cell(3,9): white,nobaggle,topwall,leftwall,
-Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,86
+Cell(3,10): white,nobaggle,notopwall,leftwall,87
 Cell(3,11): white,nobaggle,topwall,noleftwall,70
 Cell(4,0): white,nobaggle,topwall,leftwall,34
 Cell(4,1): white,nobaggle,topwall,noleftwall,33
@@ -58,7 +58,8 @@ Cell(4,5): white,nobaggle,topwall,noleftwall,55
 Cell(4,6): white,nobaggle,topwall,leftwall,58
 Cell(4,7): white,nobaggle,topwall,noleftwall,51
 Cell(4,8): white,nobaggle,topwall,noleftwall,48
-Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,85
+Cell(4,10): white,nobaggle,notopwall,noleftwall,86
 Cell(4,11): white,nobaggle,topwall,noleftwall,71
 Cell(5,0): white,nobaggle,topwall,noleftwall,33
 Cell(5,1): white,nobaggle,notopwall,noleftwall,32
@@ -69,7 +70,8 @@ Cell(5,5): white,nobaggle,topwall,noleftwall,56
 Cell(5,6): white,nobaggle,notopwall,noleftwall,57
 Cell(5,7): white,nobaggle,topwall,noleftwall,50
 Cell(5,8): white,nobaggle,notopwall,noleftwall,49
-Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,84
+Cell(5,10): white,nobaggle,notopwall,noleftwall,85
 Cell(5,11): white,nobaggle,topwall,noleftwall,72
 Cell(6,0): white,nobaggle,topwall,leftwall,
 Cell(6,1): white,nobaggle,topwall,noleftwall,31
@@ -80,8 +82,8 @@ Cell(6,5): white,nobaggle,notopwall,leftwall,37
 Cell(6,6): white,nobaggle,topwall,leftwall,10
 Cell(6,7): white,nobaggle,notopwall,leftwall,9
 Cell(6,8): white,nobaggle,notopwall,leftwall,8
-Cell(6,9): white,nobaggle,topwall,noleftwall,
-Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,9): white,nobaggle,topwall,noleftwall,83
+Cell(6,10): white,nobaggle,topwall,noleftwall,86
 Cell(6,11): white,nobaggle,topwall,noleftwall,73
 Cell(7,0): white,nobaggle,topwall,leftwall,31
 Cell(7,1): white,nobaggle,notopwall,noleftwall,30
@@ -104,7 +106,7 @@ Cell(8,5): white,nobaggle,notopwall,leftwall,21
 Cell(8,6): white,nobaggle,notopwall,leftwall,22
 Cell(8,7): white,nobaggle,topwall,noleftwall,13
 Cell(8,8): white,nobaggle,topwall,noleftwall,6
-Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,83
 Cell(8,10): white,nobaggle,topwall,noleftwall,80
 Cell(8,11): white,nobaggle,topwall,noleftwall,75
 Cell(9,0): white,nobaggle,topwall,noleftwall,
@@ -116,7 +118,7 @@ Cell(9,5): white,nobaggle,notopwall,leftwall,18
 Cell(9,6): white,nobaggle,notopwall,leftwall,17
 Cell(9,7): white,nobaggle,topwall,noleftwall,14
 Cell(9,8): white,nobaggle,topwall,noleftwall,5
-Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,84
 Cell(9,10): white,nobaggle,topwall,noleftwall,79
 Cell(9,11): white,nobaggle,topwall,noleftwall,76
 Cell(10,0): white,nobaggle,topwall,noleftwall,
@@ -128,7 +130,7 @@ Cell(10,5): white,nobaggle,notopwall,leftwall,17
 Cell(10,6): white,nobaggle,notopwall,noleftwall,16
 Cell(10,7): white,nobaggle,notopwall,noleftwall,15
 Cell(10,8): white,nobaggle,topwall,noleftwall,4
-Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,85
 Cell(10,10): white,nobaggle,topwall,noleftwall,78
 Cell(10,11): white,nobaggle,notopwall,noleftwall,77
 Cell(11,0): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/shortestpath/ShortestPathMaze-answer1.map b/src/lessons/maze/shortestpath/ShortestPathMaze-answer1.map
index 78a1105..530c30e 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMaze-answer1.map
+++ b/src/lessons/maze/shortestpath/ShortestPathMaze-answer1.map
@@ -1,111 +1,198 @@
 BuggleWorld: Another labyrinth
 Size: 20x20
 Buggle(19,19): east,black,lightGray,Thesee
-Cell(0,0): white,nobaggle,topwall,leftwall,
-Cell(0,1): white,nobaggle,notopwall,leftwall,
-Cell(0,2): white,nobaggle,notopwall,leftwall,
-Cell(0,3): white,nobaggle,notopwall,leftwall,
-Cell(0,4): white,nobaggle,notopwall,leftwall,
-Cell(0,5): white,nobaggle,notopwall,leftwall,
-Cell(0,6): white,nobaggle,notopwall,leftwall,
-Cell(0,7): white,nobaggle,notopwall,leftwall,
-Cell(0,8): white,nobaggle,notopwall,leftwall,
-Cell(0,9): white,nobaggle,notopwall,leftwall,
-Cell(0,10): white,nobaggle,notopwall,leftwall,
-Cell(0,11): white,nobaggle,notopwall,leftwall,
-Cell(0,12): white,nobaggle,notopwall,leftwall,
-Cell(0,13): white,nobaggle,notopwall,leftwall,
-Cell(0,14): white,nobaggle,notopwall,leftwall,
+Cell(0,0): white,nobaggle,topwall,leftwall,38
+Cell(0,1): white,nobaggle,notopwall,leftwall,37
+Cell(0,2): white,nobaggle,notopwall,leftwall,36
+Cell(0,3): white,nobaggle,notopwall,leftwall,35
+Cell(0,4): white,nobaggle,notopwall,leftwall,34
+Cell(0,5): white,nobaggle,notopwall,leftwall,33
+Cell(0,6): white,nobaggle,notopwall,leftwall,32
+Cell(0,7): white,nobaggle,notopwall,leftwall,31
+Cell(0,8): white,nobaggle,notopwall,leftwall,30
+Cell(0,9): white,nobaggle,notopwall,leftwall,29
+Cell(0,10): white,nobaggle,notopwall,leftwall,28
+Cell(0,11): white,nobaggle,notopwall,leftwall,27
+Cell(0,12): white,nobaggle,notopwall,leftwall,26
+Cell(0,13): white,nobaggle,notopwall,leftwall,25
+Cell(0,14): white,nobaggle,notopwall,leftwall,24
 Cell(0,15): white,nobaggle,notopwall,leftwall,23
 Cell(0,16): white,nobaggle,notopwall,leftwall,22
 Cell(0,17): white,nobaggle,notopwall,leftwall,21
 Cell(0,18): white,nobaggle,notopwall,leftwall,20
 Cell(0,19): white,nobaggle,notopwall,leftwall,21
-Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,37
+Cell(1,1): white,nobaggle,notopwall,noleftwall,36
+Cell(1,2): white,nobaggle,notopwall,noleftwall,35
+Cell(1,3): white,nobaggle,notopwall,noleftwall,34
+Cell(1,4): white,nobaggle,notopwall,noleftwall,33
+Cell(1,5): white,nobaggle,notopwall,noleftwall,32
+Cell(1,6): white,nobaggle,notopwall,noleftwall,31
+Cell(1,7): white,nobaggle,notopwall,noleftwall,30
+Cell(1,8): white,nobaggle,notopwall,noleftwall,29
+Cell(1,9): white,nobaggle,notopwall,noleftwall,28
+Cell(1,10): white,nobaggle,notopwall,noleftwall,27
+Cell(1,11): white,nobaggle,notopwall,noleftwall,26
+Cell(1,12): white,nobaggle,notopwall,noleftwall,25
+Cell(1,13): white,nobaggle,notopwall,noleftwall,24
 Cell(1,14): white,nobaggle,notopwall,noleftwall,23
 Cell(1,15): white,nobaggle,notopwall,noleftwall,22
 Cell(1,16): white,nobaggle,notopwall,noleftwall,21
 Cell(1,17): white,nobaggle,notopwall,noleftwall,20
 Cell(1,18): white,nobaggle,notopwall,noleftwall,19
 Cell(1,19): white,nobaggle,notopwall,noleftwall,20
-Cell(2,0): white,nobaggle,topwall,noleftwall,
-Cell(2,2): white,nobaggle,topwall,leftwall,
-Cell(2,3): white,nobaggle,notopwall,leftwall,
-Cell(2,4): white,nobaggle,notopwall,leftwall,
-Cell(2,5): white,nobaggle,notopwall,leftwall,
-Cell(2,6): white,nobaggle,notopwall,leftwall,
-Cell(2,7): white,nobaggle,notopwall,leftwall,
-Cell(2,8): white,nobaggle,notopwall,leftwall,
-Cell(2,9): white,nobaggle,topwall,noleftwall,
-Cell(2,11): white,nobaggle,topwall,leftwall,
-Cell(2,12): white,nobaggle,notopwall,leftwall,
-Cell(2,13): white,nobaggle,notopwall,leftwall,
-Cell(2,14): white,nobaggle,notopwall,leftwall,
-Cell(2,15): white,nobaggle,notopwall,leftwall,
-Cell(2,16): white,nobaggle,notopwall,leftwall,
-Cell(2,17): white,nobaggle,notopwall,leftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,36
+Cell(2,1): white,nobaggle,notopwall,noleftwall,35
+Cell(2,2): white,nobaggle,topwall,leftwall,34
+Cell(2,3): white,nobaggle,notopwall,leftwall,33
+Cell(2,4): white,nobaggle,notopwall,leftwall,32
+Cell(2,5): white,nobaggle,notopwall,leftwall,33
+Cell(2,6): white,nobaggle,notopwall,leftwall,34
+Cell(2,7): white,nobaggle,notopwall,leftwall,35
+Cell(2,8): white,nobaggle,notopwall,leftwall,36
+Cell(2,9): white,nobaggle,topwall,noleftwall,29
+Cell(2,10): white,nobaggle,notopwall,noleftwall,28
+Cell(2,11): white,nobaggle,topwall,leftwall,37
+Cell(2,12): white,nobaggle,notopwall,leftwall,36
+Cell(2,13): white,nobaggle,notopwall,leftwall,35
+Cell(2,14): white,nobaggle,notopwall,leftwall,34
+Cell(2,15): white,nobaggle,notopwall,leftwall,33
+Cell(2,16): white,nobaggle,notopwall,leftwall,32
+Cell(2,17): white,nobaggle,notopwall,leftwall,33
 Cell(2,18): white,nobaggle,topwall,noleftwall,18
 Cell(2,19): white,nobaggle,notopwall,noleftwall,19
-Cell(3,0): white,nobaggle,topwall,noleftwall,
-Cell(3,2): white,nobaggle,topwall,noleftwall,
-Cell(3,7): white,nobaggle,topwall,noleftwall,
-Cell(3,9): white,nobaggle,topwall,noleftwall,
-Cell(3,11): white,nobaggle,topwall,noleftwall,
-Cell(3,13): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,35
+Cell(3,1): white,nobaggle,notopwall,noleftwall,34
+Cell(3,2): white,nobaggle,topwall,noleftwall,33
+Cell(3,3): white,nobaggle,notopwall,noleftwall,32
+Cell(3,4): white,nobaggle,notopwall,noleftwall,31
+Cell(3,5): white,nobaggle,notopwall,noleftwall,32
+Cell(3,6): white,nobaggle,notopwall,noleftwall,33
+Cell(3,7): white,nobaggle,topwall,noleftwall,36
+Cell(3,8): white,nobaggle,notopwall,noleftwall,37
+Cell(3,9): white,nobaggle,topwall,noleftwall,30
+Cell(3,10): white,nobaggle,notopwall,noleftwall,29
+Cell(3,11): white,nobaggle,topwall,noleftwall,38
+Cell(3,12): white,nobaggle,notopwall,noleftwall,37
+Cell(3,13): white,nobaggle,topwall,noleftwall,34
+Cell(3,14): white,nobaggle,notopwall,noleftwall,33
+Cell(3,15): white,nobaggle,notopwall,noleftwall,32
+Cell(3,16): white,nobaggle,notopwall,noleftwall,31
+Cell(3,17): white,nobaggle,notopwall,noleftwall,32
 Cell(3,18): white,nobaggle,topwall,noleftwall,17
 Cell(3,19): white,nobaggle,notopwall,noleftwall,18
-Cell(4,0): white,nobaggle,topwall,noleftwall,
-Cell(4,2): white,nobaggle,topwall,noleftwall,
-Cell(4,7): white,nobaggle,notopwall,leftwall,
-Cell(4,8): white,nobaggle,notopwall,leftwall,
-Cell(4,11): white,nobaggle,notopwall,leftwall,
-Cell(4,12): white,nobaggle,notopwall,leftwall,
+Cell(4,0): white,nobaggle,topwall,noleftwall,34
+Cell(4,1): white,nobaggle,notopwall,noleftwall,33
+Cell(4,2): white,nobaggle,topwall,noleftwall,32
+Cell(4,3): white,nobaggle,notopwall,noleftwall,31
+Cell(4,4): white,nobaggle,notopwall,noleftwall,30
+Cell(4,5): white,nobaggle,notopwall,noleftwall,31
+Cell(4,6): white,nobaggle,notopwall,noleftwall,32
+Cell(4,7): white,nobaggle,notopwall,leftwall,33
+Cell(4,8): white,nobaggle,notopwall,leftwall,32
+Cell(4,9): white,nobaggle,notopwall,noleftwall,31
+Cell(4,10): white,nobaggle,notopwall,noleftwall,30
+Cell(4,11): white,nobaggle,notopwall,leftwall,31
+Cell(4,12): white,nobaggle,notopwall,leftwall,32
+Cell(4,13): white,nobaggle,notopwall,noleftwall,33
+Cell(4,14): white,nobaggle,notopwall,noleftwall,32
+Cell(4,15): white,nobaggle,notopwall,noleftwall,31
+Cell(4,16): white,nobaggle,notopwall,noleftwall,30
+Cell(4,17): white,nobaggle,notopwall,noleftwall,31
 Cell(4,18): white,nobaggle,topwall,noleftwall,16
 Cell(4,19): white,nobaggle,notopwall,noleftwall,17
-Cell(5,0): white,nobaggle,topwall,noleftwall,
-Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,33
+Cell(5,1): white,nobaggle,notopwall,noleftwall,32
+Cell(5,2): white,nobaggle,topwall,noleftwall,31
+Cell(5,3): white,nobaggle,notopwall,noleftwall,30
+Cell(5,4): white,nobaggle,notopwall,noleftwall,29
+Cell(5,5): white,nobaggle,notopwall,noleftwall,30
+Cell(5,6): white,nobaggle,notopwall,noleftwall,31
+Cell(5,7): white,nobaggle,notopwall,noleftwall,32
+Cell(5,8): white,nobaggle,notopwall,noleftwall,33
+Cell(5,9): white,nobaggle,notopwall,noleftwall,32
+Cell(5,10): white,nobaggle,notopwall,noleftwall,31
+Cell(5,11): white,nobaggle,notopwall,noleftwall,32
+Cell(5,12): white,nobaggle,notopwall,noleftwall,33
+Cell(5,13): white,nobaggle,notopwall,noleftwall,32
+Cell(5,14): white,nobaggle,notopwall,noleftwall,31
+Cell(5,15): white,nobaggle,notopwall,noleftwall,30
 Cell(5,16): white,nobaggle,notopwall,noleftwall,29
 Cell(5,17): white,nobaggle,notopwall,noleftwall,30
 Cell(5,18): white,nobaggle,topwall,noleftwall,15
 Cell(5,19): white,nobaggle,notopwall,noleftwall,16
-Cell(6,0): white,nobaggle,topwall,noleftwall,
-Cell(6,2): white,nobaggle,topwall,noleftwall,
-Cell(6,5): white,nobaggle,topwall,leftwall,
-Cell(6,6): white,nobaggle,notopwall,leftwall,
-Cell(6,7): white,nobaggle,notopwall,leftwall,
-Cell(6,8): white,nobaggle,notopwall,leftwall,
-Cell(6,9): white,nobaggle,notopwall,leftwall,
-Cell(6,10): white,nobaggle,notopwall,leftwall,
-Cell(6,11): white,nobaggle,notopwall,leftwall,
-Cell(6,12): white,nobaggle,notopwall,leftwall,
-Cell(6,13): white,nobaggle,notopwall,leftwall,
-Cell(6,14): white,nobaggle,notopwall,leftwall,
-Cell(6,15): white,nobaggle,notopwall,leftwall,
+Cell(6,0): white,nobaggle,topwall,noleftwall,32
+Cell(6,1): white,nobaggle,notopwall,noleftwall,31
+Cell(6,2): white,nobaggle,topwall,noleftwall,30
+Cell(6,3): white,nobaggle,notopwall,noleftwall,29
+Cell(6,4): white,nobaggle,notopwall,noleftwall,28
+Cell(6,5): white,nobaggle,topwall,leftwall,35
+Cell(6,6): white,nobaggle,notopwall,leftwall,34
+Cell(6,7): white,nobaggle,notopwall,leftwall,33
+Cell(6,8): white,nobaggle,notopwall,leftwall,32
+Cell(6,9): white,nobaggle,notopwall,leftwall,33
+Cell(6,10): white,nobaggle,notopwall,leftwall,34
+Cell(6,11): white,nobaggle,notopwall,leftwall,33
+Cell(6,12): white,nobaggle,notopwall,leftwall,32
+Cell(6,13): white,nobaggle,notopwall,leftwall,33
+Cell(6,14): white,nobaggle,notopwall,leftwall,34
+Cell(6,15): white,nobaggle,notopwall,leftwall,35
 Cell(6,16): white,nobaggle,topwall,noleftwall,28
 Cell(6,17): white,nobaggle,notopwall,noleftwall,29
 Cell(6,18): white,nobaggle,topwall,noleftwall,14
 Cell(6,19): white,nobaggle,notopwall,noleftwall,15
-Cell(7,0): white,nobaggle,topwall,noleftwall,
-Cell(7,2): white,nobaggle,topwall,noleftwall,
-Cell(7,5): white,nobaggle,topwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,31
+Cell(7,1): white,nobaggle,notopwall,noleftwall,30
+Cell(7,2): white,nobaggle,topwall,noleftwall,29
+Cell(7,3): white,nobaggle,notopwall,noleftwall,28
+Cell(7,4): white,nobaggle,notopwall,noleftwall,27
+Cell(7,5): white,nobaggle,topwall,noleftwall,34
+Cell(7,6): white,nobaggle,notopwall,noleftwall,33
+Cell(7,7): white,nobaggle,notopwall,noleftwall,32
+Cell(7,8): white,nobaggle,notopwall,noleftwall,31
+Cell(7,9): white,nobaggle,notopwall,noleftwall,32
+Cell(7,10): white,nobaggle,notopwall,noleftwall,33
+Cell(7,11): white,nobaggle,notopwall,noleftwall,32
+Cell(7,12): white,nobaggle,notopwall,noleftwall,31
+Cell(7,13): white,nobaggle,notopwall,noleftwall,32
+Cell(7,14): white,nobaggle,notopwall,noleftwall,33
+Cell(7,15): white,nobaggle,notopwall,noleftwall,34
 Cell(7,16): white,nobaggle,topwall,noleftwall,27
 Cell(7,17): white,nobaggle,notopwall,noleftwall,28
 Cell(7,18): white,nobaggle,topwall,noleftwall,13
 Cell(7,19): white,nobaggle,notopwall,noleftwall,14
-Cell(8,0): white,nobaggle,topwall,noleftwall,
-Cell(8,2): white,nobaggle,topwall,noleftwall,
-Cell(8,5): white,nobaggle,topwall,noleftwall,
-Cell(8,7): white,nobaggle,topwall,leftwall,
+Cell(8,0): white,nobaggle,topwall,noleftwall,30
+Cell(8,1): white,nobaggle,notopwall,noleftwall,29
+Cell(8,2): white,nobaggle,topwall,noleftwall,28
+Cell(8,3): white,nobaggle,notopwall,noleftwall,27
+Cell(8,4): white,nobaggle,notopwall,noleftwall,26
+Cell(8,5): white,nobaggle,topwall,noleftwall,35
+Cell(8,6): white,nobaggle,notopwall,noleftwall,34
+Cell(8,7): white,nobaggle,topwall,leftwall,29
+Cell(8,8): white,nobaggle,notopwall,noleftwall,30
+Cell(8,9): white,nobaggle,notopwall,noleftwall,31
+Cell(8,10): white,nobaggle,notopwall,noleftwall,32
+Cell(8,11): white,nobaggle,notopwall,noleftwall,31
+Cell(8,12): white,nobaggle,notopwall,noleftwall,30
 Cell(8,13): white,nobaggle,notopwall,leftwall,29
-Cell(8,14): white,nobaggle,topwall,noleftwall,
+Cell(8,14): white,nobaggle,topwall,noleftwall,34
+Cell(8,15): white,nobaggle,notopwall,noleftwall,35
 Cell(8,16): white,nobaggle,topwall,noleftwall,26
 Cell(8,17): white,nobaggle,notopwall,noleftwall,27
 Cell(8,18): white,nobaggle,topwall,noleftwall,12
 Cell(8,19): white,nobaggle,notopwall,noleftwall,13
-Cell(9,0): white,nobaggle,topwall,noleftwall,
-Cell(9,2): white,nobaggle,topwall,noleftwall,
-Cell(9,5): white,nobaggle,notopwall,leftwall,
-Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,29
+Cell(9,1): white,nobaggle,notopwall,noleftwall,28
+Cell(9,2): white,nobaggle,topwall,noleftwall,27
+Cell(9,3): white,nobaggle,notopwall,noleftwall,26
+Cell(9,4): white,nobaggle,notopwall,noleftwall,25
+Cell(9,5): white,nobaggle,notopwall,leftwall,26
+Cell(9,6): white,nobaggle,notopwall,leftwall,27
+Cell(9,7): white,nobaggle,notopwall,noleftwall,28
+Cell(9,8): white,nobaggle,notopwall,noleftwall,29
+Cell(9,9): white,nobaggle,notopwall,noleftwall,30
+Cell(9,10): white,nobaggle,notopwall,noleftwall,31
+Cell(9,11): white,nobaggle,notopwall,noleftwall,30
 Cell(9,12): white,nobaggle,notopwall,noleftwall,29
 Cell(9,13): white,nobaggle,notopwall,noleftwall,28
 Cell(9,14): white,nobaggle,notopwall,leftwall,27
@@ -114,8 +201,17 @@ Cell(9,16): white,nobaggle,notopwall,noleftwall,25
 Cell(9,17): white,nobaggle,notopwall,noleftwall,26
 Cell(9,18): white,nobaggle,topwall,noleftwall,11
 Cell(9,19): white,nobaggle,notopwall,noleftwall,12
-Cell(10,0): white,nobaggle,topwall,noleftwall,
-Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,28
+Cell(10,1): white,nobaggle,notopwall,noleftwall,27
+Cell(10,2): white,nobaggle,topwall,noleftwall,26
+Cell(10,3): white,nobaggle,notopwall,noleftwall,25
+Cell(10,4): white,nobaggle,notopwall,noleftwall,24
+Cell(10,5): white,nobaggle,notopwall,noleftwall,25
+Cell(10,6): white,nobaggle,notopwall,noleftwall,26
+Cell(10,7): white,nobaggle,notopwall,noleftwall,27
+Cell(10,8): white,nobaggle,notopwall,noleftwall,28
+Cell(10,9): white,nobaggle,notopwall,noleftwall,29
+Cell(10,10): white,nobaggle,notopwall,noleftwall,30
 Cell(10,11): white,nobaggle,notopwall,noleftwall,29
 Cell(10,12): white,nobaggle,notopwall,noleftwall,28
 Cell(10,13): white,nobaggle,notopwall,noleftwall,27
@@ -125,27 +221,37 @@ Cell(10,16): white,nobaggle,notopwall,noleftwall,24
 Cell(10,17): white,nobaggle,notopwall,noleftwall,25
 Cell(10,18): white,nobaggle,topwall,noleftwall,10
 Cell(10,19): white,nobaggle,notopwall,noleftwall,11
-Cell(11,0): white,nobaggle,topwall,noleftwall,
-Cell(11,2): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,27
+Cell(11,1): white,nobaggle,notopwall,noleftwall,26
+Cell(11,2): white,nobaggle,topwall,noleftwall,25
+Cell(11,3): white,nobaggle,notopwall,noleftwall,24
 Cell(11,4): white,nobaggle,notopwall,noleftwall,23
-Cell(11,5): white,nobaggle,topwall,leftwall,
-Cell(11,6): white,nobaggle,notopwall,leftwall,
-Cell(11,7): white,nobaggle,topwall,noleftwall,
+Cell(11,5): white,nobaggle,topwall,leftwall,34
+Cell(11,6): white,nobaggle,notopwall,leftwall,33
+Cell(11,7): white,nobaggle,topwall,noleftwall,28
+Cell(11,8): white,nobaggle,notopwall,noleftwall,29
+Cell(11,9): white,nobaggle,notopwall,noleftwall,30
+Cell(11,10): white,nobaggle,notopwall,noleftwall,31
 Cell(11,11): white,nobaggle,notopwall,noleftwall,30
 Cell(11,12): white,nobaggle,notopwall,noleftwall,29
 Cell(11,13): white,nobaggle,notopwall,noleftwall,28
 Cell(11,14): white,nobaggle,topwall,leftwall,33
-Cell(11,15): white,nobaggle,notopwall,leftwall,
+Cell(11,15): white,nobaggle,notopwall,leftwall,34
 Cell(11,16): white,nobaggle,topwall,noleftwall,23
 Cell(11,17): white,nobaggle,notopwall,noleftwall,24
 Cell(11,18): white,nobaggle,topwall,noleftwall,9
 Cell(11,19): white,nobaggle,notopwall,noleftwall,10
-Cell(12,0): white,nobaggle,topwall,noleftwall,
-Cell(12,2): white,nobaggle,topwall,noleftwall,
+Cell(12,0): white,nobaggle,topwall,noleftwall,26
+Cell(12,1): white,nobaggle,notopwall,noleftwall,25
+Cell(12,2): white,nobaggle,topwall,noleftwall,24
 Cell(12,3): white,nobaggle,notopwall,noleftwall,23
 Cell(12,4): white,nobaggle,notopwall,noleftwall,22
-Cell(12,5): white,nobaggle,topwall,noleftwall,
-Cell(12,7): white,nobaggle,notopwall,leftwall,
+Cell(12,5): white,nobaggle,topwall,noleftwall,33
+Cell(12,6): white,nobaggle,notopwall,noleftwall,32
+Cell(12,7): white,nobaggle,notopwall,leftwall,31
+Cell(12,8): white,nobaggle,notopwall,noleftwall,30
+Cell(12,9): white,nobaggle,notopwall,noleftwall,31
+Cell(12,10): white,nobaggle,notopwall,noleftwall,32
 Cell(12,11): white,nobaggle,notopwall,noleftwall,31
 Cell(12,12): white,nobaggle,notopwall,noleftwall,30
 Cell(12,13): white,nobaggle,notopwall,leftwall,31
@@ -155,19 +261,28 @@ Cell(12,16): white,nobaggle,topwall,noleftwall,22
 Cell(12,17): white,nobaggle,notopwall,noleftwall,23
 Cell(12,18): white,nobaggle,topwall,noleftwall,8
 Cell(12,19): white,nobaggle,notopwall,noleftwall,9
-Cell(13,0): white,nobaggle,topwall,noleftwall,
-Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,0): white,nobaggle,topwall,noleftwall,25
+Cell(13,1): white,nobaggle,notopwall,noleftwall,24
+Cell(13,2): white,nobaggle,topwall,noleftwall,23
 Cell(13,3): white,nobaggle,notopwall,noleftwall,22
 Cell(13,4): white,nobaggle,notopwall,noleftwall,21
-Cell(13,5): white,nobaggle,topwall,noleftwall,
+Cell(13,5): white,nobaggle,topwall,noleftwall,34
+Cell(13,6): white,nobaggle,notopwall,noleftwall,33
+Cell(13,7): white,nobaggle,notopwall,noleftwall,32
+Cell(13,8): white,nobaggle,notopwall,noleftwall,31
+Cell(13,9): white,nobaggle,notopwall,noleftwall,32
+Cell(13,10): white,nobaggle,notopwall,noleftwall,33
+Cell(13,11): white,nobaggle,notopwall,noleftwall,32
 Cell(13,12): white,nobaggle,notopwall,noleftwall,31
 Cell(13,13): white,nobaggle,notopwall,noleftwall,32
 Cell(13,14): white,nobaggle,notopwall,noleftwall,33
+Cell(13,15): white,nobaggle,notopwall,noleftwall,34
 Cell(13,16): white,nobaggle,topwall,noleftwall,21
 Cell(13,17): white,nobaggle,notopwall,noleftwall,22
 Cell(13,18): white,nobaggle,topwall,noleftwall,7
 Cell(13,19): white,nobaggle,notopwall,noleftwall,8
-Cell(14,0): white,nobaggle,topwall,noleftwall,
+Cell(14,0): white,nobaggle,topwall,noleftwall,24
+Cell(14,1): white,nobaggle,notopwall,noleftwall,23
 Cell(14,2): white,nobaggle,topwall,noleftwall,22
 Cell(14,3): white,nobaggle,notopwall,noleftwall,21
 Cell(14,4): white,nobaggle,notopwall,noleftwall,20
@@ -186,7 +301,7 @@ Cell(14,16): white,nobaggle,notopwall,noleftwall,20
 Cell(14,17): white,nobaggle,notopwall,noleftwall,21
 Cell(14,18): white,nobaggle,topwall,noleftwall,6
 Cell(14,19): white,nobaggle,notopwall,noleftwall,7
-Cell(15,0): white,nobaggle,topwall,noleftwall,
+Cell(15,0): white,nobaggle,topwall,noleftwall,23
 Cell(15,1): white,nobaggle,notopwall,noleftwall,22
 Cell(15,2): white,nobaggle,topwall,noleftwall,21
 Cell(15,3): white,nobaggle,notopwall,noleftwall,20
diff --git a/src/lessons/maze/shortestpath/ShortestPathMaze.fr.html b/src/lessons/maze/shortestpath/ShortestPathMaze.fr.html
index 2eb0783..96d0afe 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMaze.fr.html
+++ b/src/lessons/maze/shortestpath/ShortestPathMaze.fr.html
@@ -8,7 +8,7 @@ Force. Cela signifie qu'elle peut ressentir son environnement.</p>
 <p>Sans même changer de place, elle peut retrouver des informations sur le
 monde qui l'entoure, avec les instructions suivantes :</p>
 <ul>
-  <li><code>getMondeLargueur()</code> pour connaitre la largeur du monde</li>
+  <li><code>getMondeLargeur()</code> pour connaitre la largeur du monde</li>
   <li><code>getMondeHauteur()</code> pour connaitre la hauteur du monde.</li>
   <li><code>aMurNord(x,y)</code> indique si la cellule (x,y) de ce monde est
 fermée par un mur en haut.</li>
@@ -44,9 +44,9 @@ buggle jedi trouve le plus court chemin en suivant les indications écrites
 au sol. Pour celà, il lui suffit à chaque pas d'aller sur la case de plus
 petite distance parmis celles accessibles. Vous pouvez utiliser la méthode
 <code>void setDirection(Direction d)</code> pour faire regarder votre buggle
-dans une direction spécifique comme <code>Direction.NORTH</code>,
-<code>Direction.SOUTH</code>, <code>Direction.EAST</code> ou
-<code>Direction.WEST</code>, qui correspondent respectivement au nord, sud,
+dans une direction spécifique comme <code>Direction.NORD</code>,
+<code>Direction.SUD</code>, <code>Direction.EST</code> ou
+<code>Direction.OUEST</code>, qui correspondent respectivement au nord, sud,
 est et ouest.</p>
 
 <div class="tip" id="tip-1" alt="Je suis perdu, je voudrais plus d'indications">
diff --git a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.java b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.java
index 281835e..2205ad0 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.java
+++ b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.java
@@ -9,17 +9,17 @@ public class ShortestPathMazeEntity extends plm.universe.bugglequest.SimpleBuggl
 	@Override
 	public void setX(int i)  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setY(int i)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setPos(int i,int j)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	void setIndication(int x, int y, int i) {
@@ -75,11 +75,12 @@ public class ShortestPathMazeEntity extends plm.universe.bugglequest.SimpleBuggl
 				if (hasBaggle(x,y))
 					setIndication(x, y, 0);
 
-		while (true) {   
+		boolean changed = true;
+		while (changed) {
+			changed = false;
 			for (int x = 0; x < getWorldWidth(); x++) {
 				for (int y = 0; y < getWorldHeight(); y++) {  
 					int indication = getIndication(x, y);
-					boolean changed = false;
 					if (indication != 9999) {
 						if (! hasBottomWall(x,y))
 							changed |= setValueIfLess(x, (y + 1) % getWorldHeight(), indication + 1);
@@ -93,8 +94,6 @@ public class ShortestPathMazeEntity extends plm.universe.bugglequest.SimpleBuggl
 						if (! hasLeftWall(x,y))
 							changed |= setValueIfLess((x +getWorldWidth() - 1) % getWorldWidth(), y, indication + 1);
 
-						if (changed && x == getX() && y == getY())
-							return ; // reached the buggle, that's enough
 					}
 				}    
 			}
diff --git a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.py b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.py
index 03f3a72..ac5d8bc 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.py
+++ b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.py
@@ -1,9 +1,9 @@
 def setX(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead.")
 def setY(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead.")
 def setPos(x,y):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead.")
 
 def setIndication(x, y, i):
     cell = entity.getWorld().getCell(x,y)
@@ -22,6 +22,14 @@ def hasTopWall(x, y):
 def hasLeftWall(x, y):
     return entity.getWorld().getCell(x,y).hasLeftWall() 
 
+# BINDINGS TRANSLATION to French: Don't translate getIndication
+def aBiscuit(x, y):
+    return hasBaggle(x,y)
+def aMurNord(x, y):
+    hasTopWall(x,y)
+def aMurOuest(x, y):
+    hasLeftWall(x, y)
+
 # BEGIN SOLUTION
 def hasRightWall(x,y):
     return hasLeftWall((x + 1) % getWorldWidth(), y) 
@@ -43,12 +51,13 @@ def evaluatePaths():
             if hasBaggle(x,y):
                 setIndication(x, y, 0);
 
-    while (True):
+    changed = True
+    while (changed):
+        changed = False
         for x in range(getWorldWidth()):
             for y in range(getWorldHeight()):
                 indication = getIndication(x, y)
                 
-                changed = False
                 if indication != 9999 :
 
                     if not hasBottomWall(x,y):
@@ -63,8 +72,6 @@ def evaluatePaths():
                     if not hasLeftWall(x,y) :
                         changed = setValueIfLess((x +getWorldWidth() - 1) % getWorldWidth(), y, indication + 1) or changed
 
-                    if changed and x == getX() and y == getY():
-                        return # reached the buggle, that's enough
 
 def followShortestPath():
     while not isOverBaggle():
diff --git a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.scala b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.scala
index 636b9e1..7ea828e 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.scala
+++ b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.scala
@@ -8,15 +8,15 @@ import plm.core.model.Game
 class ScalaShortestPathMazeEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def setX(i: Int)  {
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	override def setY(i: Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	override def setPos(x: Int, y:Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	def setIndication(x:Int, y:Int, i:Int) {
@@ -59,10 +59,11 @@ class ScalaShortestPathMazeEntity extends plm.universe.bugglequest.SimpleBuggle
 			if (hasBaggle(x,y))
 				setIndication(x, y, 0);
 
-		while (true) {   
+		var changed = true;
+		while (changed) { 
+			changed = false
 			for (x <- 0 to getWorldWidth() -1; y <- 0 to getWorldHeight()-1) {
 				var indication = getIndication(x, y);
-				var changed = false;
 				if (indication != 9999) {
 					if (! hasBottomWall(x,y))
 						changed |= setValueIfLess(x, (y + 1) % getWorldHeight(), indication + 1);
@@ -76,8 +77,6 @@ class ScalaShortestPathMazeEntity extends plm.universe.bugglequest.SimpleBuggle
 					if (! hasLeftWall(x,y))
 						changed |= setValueIfLess((x +getWorldWidth() - 1) % getWorldWidth(), y, indication + 1);
 
-					if (changed && x == getX() && y == getY())
-						return ; // reached the buggle, that's enough
 				}    
 			}
 		}
@@ -120,4 +119,9 @@ class ScalaShortestPathMazeEntity extends plm.universe.bugglequest.SimpleBuggle
 		/* END SOLUTION */
 	}
 	/* END TEMPLATE */
+	
+	/* BINDINGS TRANSLATION to French: Don't translate getIndication */
+	def aBiscuit(x:Int, y:Int):Boolean = hasBaggle(x,y)
+	def aMurNord(x:Int, y:Int):Boolean = hasTopWall(x,y)
+	def aMurOuest(x:Int, y:Int):Boolean = hasLeftWall(x, y)
 }
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.java b/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.java
index d66feae..0e8979d 100644
--- a/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.java
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.java
@@ -9,17 +9,17 @@ public class WallFindFollowMazeEntity extends plm.universe.bugglequest.SimpleBug
 	@Override
 	public void setX(int i)  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setY(int i)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setPos(int i,int j)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 	 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.py b/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.py
index d8c8069..9a8ebe3 100644
--- a/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.py
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.py
@@ -1,9 +1,9 @@
 def setX(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead.")
 def setY(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead.")
 def setPos(x,y):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead.")
 
 # BEGIN SOLUTION 
 def stepHandOnWall():
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.scala b/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.scala
index 0e14b3a..80454d2 100644
--- a/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.scala
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.scala
@@ -7,15 +7,15 @@ class ScalaWallFindFollowMazeEntity extends plm.universe.bugglequest.SimpleBuggl
 	val uselessVariableExistingJustToMakeSureThatEclipseWontRemoveTheImport:Direction=null; /* If removed, user code can't use directions easily */
 	override def setX(i: Int)  {
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	override def setY(i: Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	override def setPos(x: Int, y:Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 	 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.java b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.java
index 8b1eff4..f5ce1df 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.java
+++ b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.java
@@ -9,17 +9,17 @@ public class WallFollowerMazeEntity extends plm.universe.bugglequest.SimpleBuggl
 	@Override
 	public void setX(int i)  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setY(int i)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setPos(int i,int j)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 	 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.py b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.py
index d8c8069..9a8ebe3 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.py
+++ b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.py
@@ -1,9 +1,9 @@
 def setX(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead.")
 def setY(i):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead.")
 def setPos(x,y):
-        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead.")
 
 # BEGIN SOLUTION 
 def stepHandOnWall():
diff --git a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.scala b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.scala
index 56cab97..6d67d58 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.scala
+++ b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.scala
@@ -7,15 +7,15 @@ class ScalaWallFollowerMazeEntity extends plm.universe.bugglequest.SimpleBuggle
 	val uselessVariableExistingJustToMakeSureThatEclipseWontRemoveTheImport:Direction=null; /* If removed, user code can't use directions easily */
 	override def setX(i: Int)  {
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	override def setY(i: Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	override def setPos(x: Int, y:Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 	 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/recursion/hanoi/universe/HanoiMovePanel.java b/src/lessons/recursion/hanoi/universe/HanoiMovePanel.java
index 1a6a399..3ef96be 100644
--- a/src/lessons/recursion/hanoi/universe/HanoiMovePanel.java
+++ b/src/lessons/recursion/hanoi/universe/HanoiMovePanel.java
@@ -65,6 +65,7 @@ public class HanoiMovePanel extends EntityControlPanel {
 				int src = sourceSelector.getSelectedIndex();
 				int dst = destinationSelector.getSelectedIndex();
 				try {
+					echo(i18n.tr("move({0},{1})",src,dst));
 					he.move(src, dst);
 				} catch (IllegalArgumentException iae) { 
 					JOptionPane.showMessageDialog(null, iae.getLocalizedMessage(),i18n.tr("Invalid move"), JOptionPane.ERROR_MESSAGE);
diff --git a/src/lessons/sort/baseball/universe/BaseballMovePanel.java b/src/lessons/sort/baseball/universe/BaseballMovePanel.java
index 876eeed..4a00839 100644
--- a/src/lessons/sort/baseball/universe/BaseballMovePanel.java
+++ b/src/lessons/sort/baseball/universe/BaseballMovePanel.java
@@ -70,6 +70,7 @@ public class BaseballMovePanel extends EntityControlPanel {
 				int base = baseSelector.getSelectedIndex();
 				int player = playerSelector.getSelectedIndex();
 				try  {
+					echo(i18n.tr("move({0},{1})",base,player));
 					be.move(base, player);
 				} catch (IllegalArgumentException e) {
 					JOptionPane.showMessageDialog(null, i18n.tr("The player {0} of the base {1} cannot reach the hole that is too far from its position", player, base),
diff --git a/src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java b/src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java
index c344dc1..cc5e66c 100644
--- a/src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java
+++ b/src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java
@@ -63,6 +63,7 @@ public class PancakeFlipButtonPanel extends EntityControlPanel {
 			public void actionPerformed(ActionEvent e) {
 				int amount = (Integer) pancakesAmountComboBox.getSelectedItem();
 				PancakeEntity pe = (PancakeEntity) Game.getInstance().getSelectedEntity();
+				echo(i18n.tr("flip({0})",amount));
 				pe.flip(amount);
 			}
 		});
diff --git a/src/lessons/turmites/helloturmite/HelloTurmite.fr.html b/src/lessons/turmites/helloturmite/HelloTurmite.fr.html
index 620d06a..d548bee 100644
--- a/src/lessons/turmites/helloturmite/HelloTurmite.fr.html
+++ b/src/lessons/turmites/helloturmite/HelloTurmite.fr.html
@@ -26,7 +26,7 @@ relative à votre situation actuelle en utilisant
 <p>Chaque ensemble d'informations contient trois valeurs.
 La première est le rang de la couleur à mettre sur le sol.
 La deuxième est le mouvement à effectuer, avec la notation suivante :
-0=stop, 1=pas de virage, 2=gauche, 4=demi-tour, 8=left. Veuillez noter que
+0=stop, 1=pas de virage, 2=gauche, 4=demi-tour, 8=droite. Veuillez noter que
 si l'instruction est stop, vous ne devez même pas avancer sur cette étape
 (mais vous ne devez pas arrêter votre programme pour autant : les prochains
 pas peuvent faire quelque chose d'autre). Finalement, le troisième entier
diff --git a/src/lessons/turmites/universe/TurmiteWorld.fr.html b/src/lessons/turmites/universe/TurmiteWorld.fr.html
index 1e846fe..abbb9d4 100644
--- a/src/lessons/turmites/universe/TurmiteWorld.fr.html
+++ b/src/lessons/turmites/universe/TurmiteWorld.fr.html
@@ -10,9 +10,9 @@ quelques méthodes que vous serez amenés à utiliser.</p>
   <tr><td><b>Tourner à gauche<br/>Tourner à droite<br/>Se retourner<br/>Avancer<br/>Reculer</b></td>
       <td>[!java]void [/!]gauche()<br/>[!java]void [/!]droite()<br/>[!java]void [/!]retourne()<br/>
           [!java]void [/!]avance() ou [!java]void [/!]avance([!java]int
-[/!]steps[!scala]:Int[/!])<br/>
+[/!]nbPas[!scala]:Int[/!])<br/>
           [!java]void [/!]recule() or [!java]void [/!]recule([!java]int
-[/!]steps[!scala]:Int[/!])<br/></td></tr>
+[/!]nbPas[!scala]:Int[/!])<br/></td></tr>
 
   <tr><td><b>Obtenir la couleur du sol</b></td><td>[!java]Color [/!]getCouleurSol()[!scala]:Color[/!]</td></tr>
 </table>
diff --git a/src/lessons/welcome/array/basics/Array1Entity.java b/src/lessons/welcome/array/basics/Array1Entity.java
index 46bc615..0a45f68 100644
--- a/src/lessons/welcome/array/basics/Array1Entity.java
+++ b/src/lessons/welcome/array/basics/Array1Entity.java
@@ -8,17 +8,17 @@ public class Array1Entity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void setX(int i)  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setY(int i)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setPos(int i,int j)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/welcome/array/basics/Array1Entity.py b/src/lessons/welcome/array/basics/Array1Entity.py
index ea1e091..8231566 100644
--- a/src/lessons/welcome/array/basics/Array1Entity.py
+++ b/src/lessons/welcome/array/basics/Array1Entity.py
@@ -1,10 +1,10 @@
 def setX(i):
-	errorMsg("Sorry Dave, I cannot let you run setX(i) in this exercise")
+	errorMsg("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead.")
 
 def setY(i):
-	errorMsg("Sorry Dave, I cannot let you run setY(i) in this exercise")
+	errorMsg("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead.")
 def setPos(x,y):
-	errorMsg("Sorry Dave, I cannot let you run setPos(x,y) in this exercise")
+	errorMsg("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead.")
 
 # BEGIN TEMPLATE
 # BEGIN SOLUTION
diff --git a/src/lessons/welcome/array/basics/Array1Entity.scala b/src/lessons/welcome/array/basics/Array1Entity.scala
index e1ee4a8..9520d29 100644
--- a/src/lessons/welcome/array/basics/Array1Entity.scala
+++ b/src/lessons/welcome/array/basics/Array1Entity.scala
@@ -6,15 +6,15 @@ import plm.core.model.Game
 class ScalaArray1Entity extends plm.universe.bugglequest.SimpleBuggle {
 	override def setX(i: Int)  {
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	override def setY(i: Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	override def setPos(x: Int, y:Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/welcome/array/basics/Array2.fr.html b/src/lessons/welcome/array/basics/Array2.fr.html
index ceb00b2..8a8b066 100644
--- a/src/lessons/welcome/array/basics/Array2.fr.html
+++ b/src/lessons/welcome/array/basics/Array2.fr.html
@@ -13,7 +13,7 @@ seulement <code>getWorldHeight()-1</code> pas dans la boucle.</p>
 n'est pas fixe, mais écrit sur la première case de chaque colonne. Pour
 obtenir l'information sous forme d'un entier, on peut utiliser:</p>
 
-<pre>[!java]int decalage = Integer.parseInt(readMessage())[/!][!python]decalage = int( readMessage() )[/!][!scala]val decalage = readMessage().toInt[/!]</pre>
+<pre>[!java]int decalage = Integer.parseInt(litMessage())[/!][!python]decalage = int( litMessage() )[/!][!scala]val decalage = litMessage().toInt[/!]</pre>
 
 <p><code>litMessage()</code> lit l'indication au sol sous forme d'une chaîne de
 caractères,
diff --git a/src/lessons/welcome/array/basics/Array2Entity.java b/src/lessons/welcome/array/basics/Array2Entity.java
index 297c6f5..4766242 100644
--- a/src/lessons/welcome/array/basics/Array2Entity.java
+++ b/src/lessons/welcome/array/basics/Array2Entity.java
@@ -9,17 +9,17 @@ public class Array2Entity extends SimpleBuggle {
 	@Override
 	public void setX(int i)  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setY(int i)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	@Override
 	public void setPos(int i,int j)  { 
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/welcome/array/basics/Array2Entity.py b/src/lessons/welcome/array/basics/Array2Entity.py
index e030ccb..00f839c 100644
--- a/src/lessons/welcome/array/basics/Array2Entity.py
+++ b/src/lessons/welcome/array/basics/Array2Entity.py
@@ -1,10 +1,10 @@
 def setX(i):
-	errorMsg("Sorry Dave, I cannot let you run setX(i) in this exercise")
+	errorMsg("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead.")
 
 def setY(i):
-	errorMsg("Sorry Dave, I cannot let you run setY(i) in this exercise")
+	errorMsg("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead.")
 def setPos(x,y):
-	errorMsg("Sorry Dave, I cannot let you run setPos(x,y) in this exercise")
+	errorMsg("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead.")
 
 # BEGIN TEMPLATE
 # BEGIN SOLUTION
diff --git a/src/lessons/welcome/array/basics/Array2Entity.scala b/src/lessons/welcome/array/basics/Array2Entity.scala
index 3f218ae..55dc86a 100644
--- a/src/lessons/welcome/array/basics/Array2Entity.scala
+++ b/src/lessons/welcome/array/basics/Array2Entity.scala
@@ -7,15 +7,15 @@ import plm.core.model.Game
 class ScalaArray2Entity extends SimpleBuggle {
 	override def setX(i: Int)  {
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setX() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setX(x) in this exercise. Walk to your goal instead."));
 	}
 	override def setY(i: Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setY() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setY(y) in this exercise. Walk to your goal instead."));
 	}
 	override def setPos(x: Int, y:Int)  { 
 		if (isInited)
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use setPos() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use setPos(x,y) in this exercise. Walk to your goal instead."));
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/welcome/array/has271/Has271.fr.html b/src/lessons/welcome/array/has271/Has271.fr.html
index 4784cc8..a0ad9e8 100644
--- a/src/lessons/welcome/array/has271/Has271.fr.html
+++ b/src/lessons/welcome/array/has271/Has271.fr.html
@@ -1,8 +1,12 @@
 <h1>Contient 271</h1>
-Soit un tableau d'entiers, renvoyez vrai si il contient un motif 2,7,1 --
-une valeur, suivie de cette valeur plus 5, suivie par cette valeur moins
-1. En outre, le 271 compte même si le "1" diffère de 2 ou moins de la valeur
-correcte.
+<p>Soit un tableau d'entiers, renvoyez vrai si il contient un motif 2,7,1 --
+une valeur, suivie de cette valeur plus 5, suivie par cette valeur moins 1.
+Par exemple, 2,7,1 est un tel motif car 7=5+2 et 1=2-1. 3,8,2 est un autre
+motif correspondant.
+</p>
+ 
+<p>De plus, le 271 compte même si le "1" diffère de 2 ou moins de la valeur
+correcte.<</p>
 
 <p>Cet exercice a été extrait de l'excellent site d'exercices
 http://javabat.com/ pour PLM.</p>
diff --git a/src/lessons/welcome/array/has271/Has271.html b/src/lessons/welcome/array/has271/Has271.html
index 17c5648..754a28a 100644
--- a/src/lessons/welcome/array/has271/Has271.html
+++ b/src/lessons/welcome/array/has271/Has271.html
@@ -1,8 +1,9 @@
 <h1>Has271</h1>
-Given an
-array of integers, return true if it contains a 2, 7, 1 pattern -- a value,
-followed by the value plus 5, followed by the value minus 1.
-Additionally the 271 counts even if the "1" differs by 2 or less from
-the correct value.
+<p>Given an array of integers, return true if it contains a 2, 7, 1 pattern -- a value,
+followed by the value plus 5, followed by the initial value minus 1. 
+So, 2,7,1 is such a pattern because 7 is 5+2 and 1 is 2-1. 3,8,2 is also such a pattern.</p>
+ 
+<p>Additionally the 271 counts even if the "1" differs by 2 or less from
+the correct value.</p>
 
 <p>This exercise was converted to PLM from the excellent exercising site http://javabat.com/</p>
diff --git a/src/lessons/welcome/array/notriples/NoTriples.fr.html b/src/lessons/welcome/array/notriples/NoTriples.fr.html
index e6c54f9..6e3af68 100644
--- a/src/lessons/welcome/array/notriples/NoTriples.fr.html
+++ b/src/lessons/welcome/array/notriples/NoTriples.fr.html
@@ -1,6 +1,6 @@
 <h1>Pas de triplet</h1>
-Soit un tableau d'entiers, on dire qu'un triplet est une valeur qui apparait
-3 fois  à la suite dans le tableau. Renvoyez vrai si le tableau ne contient
+Soit un tableau d'entiers, on dira qu'un triplet est une valeur qui apparait
+3 fois à la suite dans le tableau. Renvoyez vrai si le tableau ne contient
 pas de triplet.
 
 <p>Cet exercice a été extrait de l'excellent site d'exercices
diff --git a/src/lessons/welcome/bat/bool1/NearHundred.fr.html b/src/lessons/welcome/bat/bool1/NearHundred.fr.html
index 9b363cf..868b9b6 100644
--- a/src/lessons/welcome/bat/bool1/NearHundred.fr.html
+++ b/src/lessons/welcome/bat/bool1/NearHundred.fr.html
@@ -1,6 +1,6 @@
 <h1>Presque 100</h1>
-<p>Étant donné deux nombres entiers, retourner la valeur la plus proche de 10,
-ou 0 en cas de match nul.
+<p>Étant donné deux nombres entiers, retourner vrai si et seulement si la
+valeur est à moins de 10 de la valeur 100 ou de la valeur 200.
 [!java|scala]Remarquez que Math.abs(n) retourne la valeur absolue d'un
 nombre.[/!]
 [!python]Remarquez que math.fabs(n) retourne la valeur absolue d'un
diff --git a/src/lessons/welcome/bat/bool2/BlueTicket.fr.html b/src/lessons/welcome/bat/bool2/BlueTicket.fr.html
index e45186f..3c8e9e4 100644
--- a/src/lessons/welcome/bat/bool2/BlueTicket.fr.html
+++ b/src/lessons/welcome/bat/bool2/BlueTicket.fr.html
@@ -1,7 +1,7 @@
 <h1>Ticket bleu</h1>
 Vous avez un ticket de loterie bleu, avec des entiers a, b et c inscrits
 dessus. Cela fait trois paires que l'on appellera ab, bc et ac. Considérez
-la somme des nombres de chaque pair. Si la somme de l'une des paires vaut
+la somme des nombres de chaque paire. Si la somme de l'une des paires vaut
 exactement 10, le résultat est 10. Sinon, si la somme ab vaut exactement 10
 de plus que les sommes bc ou ac, le résultat est 5. Sinon, le résultat est
 0.
diff --git a/src/lessons/welcome/bat/bool2/DateFashion.fr.html b/src/lessons/welcome/bat/bool2/DateFashion.fr.html
index 42853c5..c5dd924 100644
--- a/src/lessons/welcome/bat/bool2/DateFashion.fr.html
+++ b/src/lessons/welcome/bat/bool2/DateFashion.fr.html
@@ -1,10 +1,10 @@
 <h1>Rendez-vous élégant</h1>
 Vous et votre compagne/compagnon essayez d'obtenir une table au
 restaurant. Le paramètre "you" est l'élégance de vos vêtements, dans
-l'intervalle [0,10], et "date"  est l'élégance des vêtements de votre
-compagne/compagnon. Le résultat obtenir la table est  encodé comme une
-valeur enteur avec 0=non, 1= peut-être et 2=oui. Si l'un de vous deux est
-très élégant, 8 ou plus, alors le résultat est 2 (oui). Avec l'exception que
+l'intervalle [0,10], et "date" est l'élégance des vêtements de votre
+compagne/compagnon. Le résultat à obtenir la table est encodé comme une
+valeur entière avec 0=non, 1=peut-être et 2=oui. Si l'un de vous deux est
+très élégant (8 ou plus) alors le résultat est 2 (oui). Avec l'exception que
 si l'un de vous deux a un style de 2 ou moins, alors le résultat est 0
 (no). Sinon, le résultat est 1 (peut-être).
 
diff --git a/src/lessons/welcome/bat/bool2/TeenSum.fr.html b/src/lessons/welcome/bat/bool2/TeenSum.fr.html
index 022222a..9b473a9 100644
--- a/src/lessons/welcome/bat/bool2/TeenSum.fr.html
+++ b/src/lessons/welcome/bat/bool2/TeenSum.fr.html
@@ -1,7 +1,7 @@
 <h1>Somme d'ados</h1>
-Étant donné deux nombres entiers (a et b), retournez leur somme. Cependant,
+Étant donné deux nombres entiers (a et b), renvoyez leur somme. Cependant,
 les valeurs ados (dans l'intervale [13;19]) sont particulièrement
-chanceuse. Donc, si l'un des nombres est ado, retournez simplement 19.
+chanceuses. Donc, si l'un des nombres est ado, renvoyez simplement 19.
 
 
 <p>Cet exercice a été extrait de l'excellent site d'exercices
diff --git a/src/lessons/welcome/bdr/BDR.fr.html b/src/lessons/welcome/bdr/BDR.fr.html
index 72a7417..7d9a672 100644
--- a/src/lessons/welcome/bdr/BDR.fr.html
+++ b/src/lessons/welcome/bdr/BDR.fr.html
@@ -145,7 +145,7 @@ faire, elles utilisent les quatre méthodes suivantes:</p>
   <li><code>[!java]boolean[/!] estSurMessage()[!scala]:Boolean[/!]</code>: renvoie
 <code>[!java|scala]true[/!][!python]True[/!]</code> si et seulement s'il y a
 un message écrit par terre.</li>
-  <li><code>[!java]String [/!]readMessage()[!java]: String[/!]</code> : renvoie le
+  <li><code>[!java]String [/!]litMessage()[!java]: String[/!]</code> : renvoie le
 message qu'il y a écrit par terre (s'il y a rien, on obtient une chaîne
 vide).</li>
   <li><code>[!java]void[/!] ecritMessage([!java]String [/!]msg[!java]:
diff --git a/src/lessons/welcome/environment/Environment.fr.html b/src/lessons/welcome/environment/Environment.fr.html
index 063c0c8..37c852b 100644
--- a/src/lessons/welcome/environment/Environment.fr.html
+++ b/src/lessons/welcome/environment/Environment.fr.html
@@ -26,11 +26,11 @@ Java, Python ou Scala (en fonction de l'exercice).</p>
   <h3>L'environnement de travail</h3>
 
   <p>Avant d'aller plus loin, familiarisez vous avec l'environnement. Observez
-les différents éléments composant la fenêtre, et placez la souris sur dessus
-pour voir les bulles d'aide, et essayez les pour voir ce qu'ils font. La
-zone blanche en bas est la console : c'est là que les erreurs et messages
-sont affichés.  Notez que quand vous réussissez un exercice, la bonne
-nouvelle est envoyée sur twitter. Suivez les progrès de vos amis en suivant
+les différents éléments composant la fenêtre, placez la souris dessus pour
+voir les bulles d'aide, et essayez les pour voir ce qu'ils font. La zone
+blanche en bas est la console : c'est là que les erreurs et messages sont
+affichés.  Notez que quand vous réussissez un exercice, la bonne nouvelle
+est envoyée sur twitter. Suivez les progrès de vos amis en suivant
 @jlmlovers :)</p>
   
   <p>Si vous préférez ne pas poster vos progrès sur internet, changez simplement
diff --git a/src/lessons/welcome/instructions/InstructionsDrawG.fr.html b/src/lessons/welcome/instructions/InstructionsDrawG.fr.html
index e36d2f7..fa0b271 100644
--- a/src/lessons/welcome/instructions/InstructionsDrawG.fr.html
+++ b/src/lessons/welcome/instructions/InstructionsDrawG.fr.html
@@ -14,10 +14,9 @@ après coup. Cependant, commenter des choses triviales est une mauvaise idée
 car cela dilue les informations dans des commentaires trop verbeux. En
 anglais, ce travers s'appelle <i>over-commenting</i>.</p>
    
-  <p>Il y a [!java]three[/!][!python|scala]two[/!] sortes de commentaires en
-[!thelang], indiquant au
-[!java|scala]compilateur[/!][!python]interpréteur[/!] qu'il ne doit pas lire
-le texte ajouté pour les humains.</p>
+  <p>Il y a [!java]trois[/!][!python|scala]deux[/!] sortes de commentaires en
+[!thelang], indiquant [!java|scala]au compilateur[/!][!python]à
+l'interpréteur[/!] qu'il ne doit pas lire le texte ajouté pour les humains.</p>
    
   <ul>
     <li><b>Commentaires sur une seule ligne</b>. Quand le
diff --git a/src/lessons/welcome/loopdowhile/LoopDoWhile.fr.html b/src/lessons/welcome/loopdowhile/LoopDoWhile.fr.html
index 3f8e55a..ebaa996 100644
--- a/src/lessons/welcome/loopdowhile/LoopDoWhile.fr.html
+++ b/src/lessons/welcome/loopdowhile/LoopDoWhile.fr.html
@@ -11,7 +11,7 @@ panique, et le fait que toutes les buggles se ruent vers l'avant au début,
 même la buggle qui ne se trouve pas sur du jaune. En d'autres mots, même si
 le sol est blanc le premier coup, il faut quand même avancer d'un pas.</p>    
 
-<p>L'idée général est donc de faire: </p>
+<p>L'idée générale est donc de faire: </p>
 <pre>avancer jusqu'à se trouver sur une case blanche</pre>
 
 <p>La principale difficulté est que nous voulons exécuter le corps de boucle au
diff --git a/src/lessons/welcome/loopdowhile/PoucetEntity.java b/src/lessons/welcome/loopdowhile/PoucetEntity.java
index 40511bf..0389f84 100644
--- a/src/lessons/welcome/loopdowhile/PoucetEntity.java
+++ b/src/lessons/welcome/loopdowhile/PoucetEntity.java
@@ -7,11 +7,11 @@ import plm.core.model.Game;
 public class PoucetEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 	
 	public boolean crossing() {
diff --git a/src/lessons/welcome/loopdowhile/PoucetEntity.py b/src/lessons/welcome/loopdowhile/PoucetEntity.py
index 06e2c18..1116c5c 100644
--- a/src/lessons/welcome/loopdowhile/PoucetEntity.py
+++ b/src/lessons/welcome/loopdowhile/PoucetEntity.py
@@ -2,12 +2,12 @@ def forward(i=-1):
     if i==-1:
       entity.forward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+      errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
 def backward(i=-1):
     if i==-1:
       entity.backward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+      errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
 
 def crossing():
     return (entity.getX() % 5 == 1) and ( entity.getY()%5==1 )
diff --git a/src/lessons/welcome/loopdowhile/PoucetEntity.scala b/src/lessons/welcome/loopdowhile/PoucetEntity.scala
index 20ce2a8..1b9410a 100644
--- a/src/lessons/welcome/loopdowhile/PoucetEntity.scala
+++ b/src/lessons/welcome/loopdowhile/PoucetEntity.scala
@@ -5,10 +5,10 @@ import plm.core.model.Game
 
 class ScalaPoucetEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	def crossing(): Boolean = {
diff --git a/src/lessons/welcome/loopfor/LoopCourse.fr.html b/src/lessons/welcome/loopfor/LoopCourse.fr.html
index f561ea5..bdae8a2 100644
--- a/src/lessons/welcome/loopfor/LoopCourse.fr.html
+++ b/src/lessons/welcome/loopfor/LoopCourse.fr.html
@@ -10,4 +10,7 @@ résultat. Même si la piste souffre un peu, vous <b>DEVEZ</b> le
 faire. Souvenez vous, la piste a 4 cotés, qui prennent chacun 8 pas à
 parcourir. Maintenant allez-y et montrez-leur ce dont ces super-chaussures
 sont capables.</p>
+
+<p>Vous n'avez rien à faire de particulier à propos de la couleur de la piste :
+vos chaussures la changeront pour vous. Contentez vous de courir.</p>
  
\ No newline at end of file
diff --git a/src/lessons/welcome/loopfor/LoopCourse.html b/src/lessons/welcome/loopfor/LoopCourse.html
index 50a9e34..a5b11ec 100644
--- a/src/lessons/welcome/loopfor/LoopCourse.html
+++ b/src/lessons/welcome/loopfor/LoopCourse.html
@@ -7,4 +7,7 @@ Its super-shoes are just perfect to run like hell, but unfortunately, they can a
 Even if the track suffers, you <b>really HAVE</b> to take that run.
 Remember, the track has four sides, that take eight steps each to run along.
 Now go, and show them what these super shoes can do.</p>
+
+<p>You don't have to do anything particular with regard of the colors: 
+your shoes will do it for you. Just take that run!</p>
  
\ No newline at end of file
diff --git a/src/lessons/welcome/loopfor/LoopCourseEntity.java b/src/lessons/welcome/loopfor/LoopCourseEntity.java
index 0c62ed6..5df2fdf 100644
--- a/src/lessons/welcome/loopfor/LoopCourseEntity.java
+++ b/src/lessons/welcome/loopfor/LoopCourseEntity.java
@@ -7,11 +7,11 @@ import plm.core.model.Game;
 public class LoopCourseEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	Color[] colors = new Color[] {
diff --git a/src/lessons/welcome/loopfor/LoopCourseEntity.py b/src/lessons/welcome/loopfor/LoopCourseEntity.py
index 3743def..36d97f7 100644
--- a/src/lessons/welcome/loopfor/LoopCourseEntity.py
+++ b/src/lessons/welcome/loopfor/LoopCourseEntity.py
@@ -15,12 +15,12 @@ def forward(i=-1):
       brushDown()
       brushUp()
     else:
-      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+      errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
 def backward(i=-1):
     if i==-1:
       entity.backward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+      errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
 # BEGIN SOLUTION
 for i in range(10):
     for side in range(4):
diff --git a/src/lessons/welcome/loopfor/LoopCourseEntity.scala b/src/lessons/welcome/loopfor/LoopCourseEntity.scala
index 3874fe1..bae2c58 100644
--- a/src/lessons/welcome/loopfor/LoopCourseEntity.scala
+++ b/src/lessons/welcome/loopfor/LoopCourseEntity.scala
@@ -6,10 +6,10 @@ import plm.core.model.Game
 
 class ScalaLoopCourseEntity extends SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	var colors = Array(
diff --git a/src/lessons/welcome/loopfor/LoopCourseForestEntity.java b/src/lessons/welcome/loopfor/LoopCourseForestEntity.java
index e0bd01a..b2b42e4 100644
--- a/src/lessons/welcome/loopfor/LoopCourseForestEntity.java
+++ b/src/lessons/welcome/loopfor/LoopCourseForestEntity.java
@@ -7,11 +7,11 @@ import plm.core.model.Game;
 public class LoopCourseForestEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 	Color[] colors = new Color[] {
 			new Color(0,155,0),
diff --git a/src/lessons/welcome/loopfor/LoopCourseForestEntity.py b/src/lessons/welcome/loopfor/LoopCourseForestEntity.py
index 34324c3..eb5ce40 100644
--- a/src/lessons/welcome/loopfor/LoopCourseForestEntity.py
+++ b/src/lessons/welcome/loopfor/LoopCourseForestEntity.py
@@ -21,12 +21,12 @@ def forward(i=-1):
       brushDown()
       brushUp()
     else:
-      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+      errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
 def backward(i=-1):
     if i==-1:
       entity.backward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+      errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
 # BEGIN SOLUTION
 for i in range(7):
     for side in range(4):
diff --git a/src/lessons/welcome/loopfor/LoopCourseForestEntity.scala b/src/lessons/welcome/loopfor/LoopCourseForestEntity.scala
index b119188..3412be9 100644
--- a/src/lessons/welcome/loopfor/LoopCourseForestEntity.scala
+++ b/src/lessons/welcome/loopfor/LoopCourseForestEntity.scala
@@ -6,10 +6,10 @@ import plm.core.model.Game
 
 class ScalaLoopCourseForestEntity extends SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	var colors = Array(
diff --git a/src/lessons/welcome/loopfor/LoopFor.fr.html b/src/lessons/welcome/loopfor/LoopFor.fr.html
index 9f02c8c..353c2b3 100644
--- a/src/lessons/welcome/loopfor/LoopFor.fr.html
+++ b/src/lessons/welcome/loopfor/LoopFor.fr.html
@@ -25,7 +25,7 @@ pratique. Leur syntaxe est la suivante :</p>
 <pre>[!java]for (int compteur=0; compteur<n; compteur++) {
     <b>action</b>();
 }[/!][!python]for <b>compteur</b> in <b>range(n)</b>:
-    <b>action</b>()[/!][!scala] for (var <b>compteur</b> <- <b>1</b> to <b>10</b>) { 
+    <b>action</b>()[/!][!scala] for (<b>compteur</b> <- <b>1</b> to <b>10</b>) { 
     <b>action</b>();
 }[/!]</pre>
 
diff --git a/src/lessons/welcome/loopfor/LoopFor.html b/src/lessons/welcome/loopfor/LoopFor.html
index aab0304..6df83e0 100644
--- a/src/lessons/welcome/loopfor/LoopFor.html
+++ b/src/lessons/welcome/loopfor/LoopFor.html
@@ -22,7 +22,7 @@ following:</p>
 <pre>[!java]for (int stepper=0; stepper<n; stepper++) {
     <b>action</b>();
 }[/!][!python]for <b>stepper</b> in <b>range(n)</b>:
-    <b>action</b>()[/!][!scala] for (var <b>stepper</b> <- <b>1</b> to <b>n</b>) { 
+    <b>action</b>()[/!][!scala] for (<b>stepper</b> <- <b>1</b> to <b>n</b>) { 
     <b>action</b>();
 }[/!]</pre>
 
diff --git a/src/lessons/welcome/loopfor/LoopForEntity.java b/src/lessons/welcome/loopfor/LoopForEntity.java
index 74d4ec6..ab1ee01 100644
--- a/src/lessons/welcome/loopfor/LoopForEntity.java
+++ b/src/lessons/welcome/loopfor/LoopForEntity.java
@@ -5,12 +5,12 @@ import plm.core.model.Game;
 public class LoopForEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 
diff --git a/src/lessons/welcome/loopfor/LoopForEntity.py b/src/lessons/welcome/loopfor/LoopForEntity.py
index dfb1b56..1326f7d 100644
--- a/src/lessons/welcome/loopfor/LoopForEntity.py
+++ b/src/lessons/welcome/loopfor/LoopForEntity.py
@@ -2,12 +2,12 @@ def forward(i=-1):
     if i==-1:
       entity.forward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+      errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
 def backward(i=-1):
     if i==-1:
       entity.backward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+      errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
 # BEGIN SOLUTION
 cpt = 0
 
diff --git a/src/lessons/welcome/loopfor/LoopForEntity.scala b/src/lessons/welcome/loopfor/LoopForEntity.scala
index 1d7b0a8..a6de03f 100644
--- a/src/lessons/welcome/loopfor/LoopForEntity.scala
+++ b/src/lessons/welcome/loopfor/LoopForEntity.scala
@@ -5,10 +5,10 @@ import plm.core.model.Game
 
 class ScalaLoopForEntity extends SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def run() {
diff --git a/src/lessons/welcome/loopfor/LoopStairsEntity.java b/src/lessons/welcome/loopfor/LoopStairsEntity.java
index 538f02e..0f390a2 100644
--- a/src/lessons/welcome/loopfor/LoopStairsEntity.java
+++ b/src/lessons/welcome/loopfor/LoopStairsEntity.java
@@ -7,11 +7,11 @@ import plm.core.model.Game;
 public class LoopStairsEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	Color[] colors = new Color[] {
diff --git a/src/lessons/welcome/loopfor/LoopStairsEntity.py b/src/lessons/welcome/loopfor/LoopStairsEntity.py
index e668657..dd0ce87 100644
--- a/src/lessons/welcome/loopfor/LoopStairsEntity.py
+++ b/src/lessons/welcome/loopfor/LoopStairsEntity.py
@@ -19,12 +19,12 @@ def forward(i=-1):
           brushUp()
       step += 1
     else:
-      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+      errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
 def backward(i=-1):
     if i==-1:
       entity.backward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+      errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
       
 # BEGIN SOLUTION
 forward()
diff --git a/src/lessons/welcome/loopfor/LoopStairsEntity.scala b/src/lessons/welcome/loopfor/LoopStairsEntity.scala
index 205cab4..79a83ce 100644
--- a/src/lessons/welcome/loopfor/LoopStairsEntity.scala
+++ b/src/lessons/welcome/loopfor/LoopStairsEntity.scala
@@ -6,10 +6,10 @@ import plm.core.model.Game
 
 class ScalaLoopStairsEntity extends SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	var colors = Array(
diff --git a/src/lessons/welcome/loopwhile/BaggleSeekerEntity.java b/src/lessons/welcome/loopwhile/BaggleSeekerEntity.java
index 92bfb41..4aaac97 100644
--- a/src/lessons/welcome/loopwhile/BaggleSeekerEntity.java
+++ b/src/lessons/welcome/loopwhile/BaggleSeekerEntity.java
@@ -6,12 +6,12 @@ import plm.universe.bugglequest.SimpleBuggle;
 public class BaggleSeekerEntity extends SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 
diff --git a/src/lessons/welcome/loopwhile/BaggleSeekerEntity.scala b/src/lessons/welcome/loopwhile/BaggleSeekerEntity.scala
index b7946d5..05a90ee 100644
--- a/src/lessons/welcome/loopwhile/BaggleSeekerEntity.scala
+++ b/src/lessons/welcome/loopwhile/BaggleSeekerEntity.scala
@@ -5,11 +5,11 @@ import plm.core.model.Game
 
 class ScalaBaggleSeekerEntity extends SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def run() { 
diff --git a/src/lessons/welcome/loopwhile/LoopWhileEntity.java b/src/lessons/welcome/loopwhile/LoopWhileEntity.java
index b7c3e17..22ee21c 100644
--- a/src/lessons/welcome/loopwhile/LoopWhileEntity.java
+++ b/src/lessons/welcome/loopwhile/LoopWhileEntity.java
@@ -6,12 +6,12 @@ import plm.universe.bugglequest.SimpleBuggle;
 public class LoopWhileEntity extends SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
diff --git a/src/lessons/welcome/loopwhile/LoopWhileEntity.scala b/src/lessons/welcome/loopwhile/LoopWhileEntity.scala
index 419da4e..106726d 100644
--- a/src/lessons/welcome/loopwhile/LoopWhileEntity.scala
+++ b/src/lessons/welcome/loopwhile/LoopWhileEntity.scala
@@ -5,11 +5,11 @@ import plm.core.model.Game
 
 class ScalaLoopWhileEntity extends SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument"));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument"));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def run() { 
diff --git a/src/lessons/welcome/loopwhile/WhileMoriaEntity.java b/src/lessons/welcome/loopwhile/WhileMoriaEntity.java
index 9a4a647..054820c 100644
--- a/src/lessons/welcome/loopwhile/WhileMoriaEntity.java
+++ b/src/lessons/welcome/loopwhile/WhileMoriaEntity.java
@@ -6,12 +6,12 @@ import plm.universe.bugglequest.SimpleBuggle;
 public class WhileMoriaEntity extends SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
diff --git a/src/lessons/welcome/loopwhile/WhileMoriaEntity.scala b/src/lessons/welcome/loopwhile/WhileMoriaEntity.scala
index 73824c2..d22a432 100644
--- a/src/lessons/welcome/loopwhile/WhileMoriaEntity.scala
+++ b/src/lessons/welcome/loopwhile/WhileMoriaEntity.scala
@@ -5,10 +5,10 @@ import plm.universe.bugglequest.SimpleBuggle;
 
 class ScalaWhileMoriaEntity extends SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument"));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument"));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def run() {
diff --git a/src/lessons/welcome/methods/args/MethodsArgs.fr.html b/src/lessons/welcome/methods/args/MethodsArgs.fr.html
index 18044f5..119e04c 100644
--- a/src/lessons/welcome/methods/args/MethodsArgs.fr.html
+++ b/src/lessons/welcome/methods/args/MethodsArgs.fr.html
@@ -37,18 +37,18 @@ lors de la déclaration comme lors de l'appel.</p>
 condition qu'elles n'aient pas la même <b>signature</b>, c'est à dire le
 même nombre de paramètres et les mêmes types de paramètres.</p>
 
-<pre>[!java]double max(double x, double y)[/!][!scala]def max(x:Double, int y:Double): Double =[/!] {
+<pre>[!java]double max(double x, double y)[/!][!scala]def max(x:Double, y:Double): Double =[/!] {
   if (x > y) {
     return x;
   }
   return y;
-}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, int y:Int): Int =[/!] {
+}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, y:Int): Int =[/!] {
   if (x > y) {
     return x;
   }
   return y;
 }
-[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, int y:Int, int z:Int): Int =[/!] {
+[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, y:Int, z:Int): Int =[/!] {
   if (x > y && x > z) {
     return x;
   }
diff --git a/src/lessons/welcome/methods/args/MethodsArgs.html b/src/lessons/welcome/methods/args/MethodsArgs.html
index 979da04..d7183bf 100644
--- a/src/lessons/welcome/methods/args/MethodsArgs.html
+++ b/src/lessons/welcome/methods/args/MethodsArgs.html
@@ -36,18 +36,18 @@ both in the declaration and calls.</p>
 they don't have the same <b>signature</b>, that is, the same amount of 
 parameters and the same parameters' types.</p>
 
-<pre>[!java]double max(double x, double y)[/!][!scala]def max(x:Double, int y:Double): Double =[/!] {
+<pre>[!java]double max(double x, double y)[/!][!scala]def max(x:Double, y:Double): Double =[/!] {
   if (x > y) {
     return x;
   }
   return y;
-}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, int y:Int): Int =[/!] {
+}[!java]int max(int x, int y)[/!][!scala]def max(x:Int, y:Int): Int =[/!] {
   if (x > y) {
     return x;
   }
   return y;
 }
-[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, int y:Int, int z:Int): Int =[/!] {
+[!java]int max(int x, int y; int z)[/!][!scala]def max(x:Int, y:Int, z:Int): Int =[/!] {
   if (x > y && x > z) {
     return x;
   }
diff --git a/src/lessons/welcome/methods/args/MethodsArgsEntity.java b/src/lessons/welcome/methods/args/MethodsArgsEntity.java
index dc0ca8a..755b7e8 100644
--- a/src/lessons/welcome/methods/args/MethodsArgsEntity.java
+++ b/src/lessons/welcome/methods/args/MethodsArgsEntity.java
@@ -7,11 +7,11 @@ import plm.universe.bugglequest.SimpleBuggle;
 public class MethodsArgsEntity extends SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 
diff --git a/src/lessons/welcome/methods/args/MethodsArgsEntity.scala b/src/lessons/welcome/methods/args/MethodsArgsEntity.scala
index de02cae..1174012 100644
--- a/src/lessons/welcome/methods/args/MethodsArgsEntity.scala
+++ b/src/lessons/welcome/methods/args/MethodsArgsEntity.scala
@@ -6,10 +6,10 @@ import plm.core.model.Game
 
 class ScalaMethodsArgsEntity extends SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 
diff --git a/src/lessons/welcome/methods/basics/Methods.fr.html b/src/lessons/welcome/methods/basics/Methods.fr.html
index d0a22a2..a55ace4 100644
--- a/src/lessons/welcome/methods/basics/Methods.fr.html
+++ b/src/lessons/welcome/methods/basics/Methods.fr.html
@@ -118,24 +118,12 @@ future.</p>
 exercice précédent (avance tant qu'on ne trouve pas de baggle, ramasser le
 baggle, reculer à la case départ, poser le baggle).</p>
 
-<p>La particularité de cet exercice est que vous n'écrivez pas directement le
-code que votre buggle va exécuter, mais une méthode qui sera appelée quand
-vous appuyez sur <b>Exécuter</b>. Pour votre information, le code appelant a
-la forme suivante:</p>
-  
-<pre>[!java]for (int i=0; i<7; i++) {[/!][!python]for i in range(7):[/!][!scala]for (i <- 1 to 7) {[/!]
-    goAndGet()[!java];[/!]
-    droite()[!java];[/!]
-    avance()[!java];[/!]
-    gauche()[!java];[/!]
-[!java|scala]}[/!]</pre>
-
-<p>Donc, votre buggle va répéter 7 fois (la taille du monde)  l'opération
-<code>goAndGet()</code> que vous allez écrire, plus les opérations
-nécessaires pour se décaler d'une colonne vers la droite (tourner à droite,
-avancer, tourner à gauche). Notez que la buggle va donc faire un pas vers la
-droite alors qu'elle sera tout à droite du monde. Cela la ramènera sur le
-bord gauche, car le monde des buggles est torique.</p>
-
-<p>À vous d'écrire cette méthode goAndGet().</p>
+<p>Cet exercice est un peu différent : vous n'allez pas écrire tout le code
+exécuté par la buggle, mais juste une méthode qui sera invoquée
+automagiquement quand vous exécutez l'exercice. Votre buggle va alors
+appeller votre méthode <code>goAndGet()</code> sur chaque colonne du monde,
+jusqu'à trouver le biscuit.</p> 
+
+<p>Mais pour que cela fonctionne, il faut que vous écriviez maintenant cette
+fonction <code>goAndGet()</code>...</p>
 
diff --git a/src/lessons/welcome/methods/basics/Methods.html b/src/lessons/welcome/methods/basics/Methods.html
index 73ad759..5ffbbaa 100644
--- a/src/lessons/welcome/methods/basics/Methods.html
+++ b/src/lessons/welcome/methods/basics/Methods.html
@@ -97,24 +97,12 @@ bug that we will fix in further releases.</p>
 which does the same than in a previous exercises (move forward until over a baggle, 
 pick it up, move back to initial position, drop baggle).</p>
 
-<p>One specificity of this exercise is that you shouldn't write directly the
-code that the buggle should execute, but a method it should use. The code that calls 
-your function will be automagically added when you click on <b>Start</b>. 
-For your information, this calling code will look like this:</p>
-  
-<pre>[!java]for (int i=0; i<7; i++) {[/!][!python]for i in range(7):[/!][!scala]for (i <- 1 to 7) {[/!]
-    goAndGet()[!java];[/!]
-    right()[!java];[/!]
-    forward()[!java];[/!]
-    left()[!java];[/!]
-[!java|scala]}[/!]</pre>
-
-<p>Your buggle will repeat 7 times (which matches the world's dimension)
-the sequence constituted of a call to the <code>goAndGet()</code> method that you
-should write, plus a move to get to the next row (turn right, move
-forward, turn left). As you can see, the buggle will do one step right from
-the right border of the world. It will bring it back to the left side since
-its world is a torus.</p>
-
-<p>You should now write this goAndGet() method.</p>
+<p>This exercise is a bit different because you will not write all of
+the code executed by the buggle. Instead, you should only write one 
+method that is called automagically added when you click on
+<b>Start</b>. Your buggle calls your <code>goAndGet()</code> method on
+each row, until the baggle is found.</p> 
+
+<p>But for that to work, you have to actually write this
+<code>goAndGet()</code> method now.</p>
 
diff --git a/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java b/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java
index 5359e36..dfe8000 100644
--- a/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java
+++ b/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.java
@@ -7,7 +7,7 @@ import plm.universe.bugglequest.SimpleBuggle;
 public class MethodsDogHouseEntity extends SimpleBuggle {
 	@Override
 	public void right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use right() in this exercise. Use left() instead."));
 	}
 
 	private int line = -1;
@@ -23,7 +23,7 @@ public class MethodsDogHouseEntity extends SimpleBuggle {
 			if (s.getMethodName().equals("dogHouse")) {
 				if (line != -1 && line != s.getLineNumber()) {
 					int offset = ((Exercise)Game.getInstance().getCurrentLesson().getCurrentExercise()).getSourceFile(Game.JAVA, 0).getOffset();
-				    String msg = Game.i18n.tr("I''m sorry Dave, I''m affraid I cant let you use left() both in lines {0} and {1} in this exercise.",
+				    String msg = Game.i18n.tr("Sorry Dave, I cannot let you use left() both in lines {0} and {1} in this exercise. You can write left() only once in this exercise.",
 					        (line-offset+1),(s.getLineNumber()-offset+1));
 
 					throw new RuntimeException(msg);
diff --git a/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.py b/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.py
index da7ab3b..4cbc479 100644
--- a/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.py
+++ b/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.py
@@ -1,7 +1,7 @@
 line = -1
 
 def right():
-	raise java.lang.RuntimeException("right() forbidden in this exercise.");
+	raise java.lang.RuntimeException("Sorry Dave, I cannot let you use right() in this exercise. Use left() instead.");
 
 # does not work as Java stacktrace does not contain python function name ;(
 #def left():
diff --git a/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.scala b/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.scala
index d33489b..be997f6 100644
--- a/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.scala
+++ b/src/lessons/welcome/methods/basics/MethodsDogHouseEntity.scala
@@ -7,7 +7,7 @@ import plm.core.model.lesson.Exercise
 
 class ScalaMethodsDogHouseEntity extends SimpleBuggle {
 	override def right()  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use right() in this exercise. Use left() instead."));
 	}
 
 	var savedLine = -1
@@ -34,7 +34,7 @@ class ScalaMethodsDogHouseEntity extends SimpleBuggle {
 	    savedLine = usedLine
 	  } else if (savedLine != usedLine) {
 	    var offset = Game.getInstance().getCurrentLesson().getCurrentExercise().asInstanceOf[Exercise].getSourceFile(Game.SCALA, 0).getOffset()
-	    var msg = Game.i18n.tr("I'm sorry Dave, I'm affraid I cant let you use left() both in lines {0} and {1}.",
+	    var msg = Game.i18n.tr("Sorry Dave, I cannot let you use left() both in lines {0} and {1} in this exercise. You can write left() only once in this exercise.",
 	        (savedLine-offset),(usedLine-offset));
 		  System.out.println(msg);
 		  throw new RuntimeException(msg);
diff --git a/src/lessons/welcome/methods/basics/MethodsEntity.java b/src/lessons/welcome/methods/basics/MethodsEntity.java
index c500913..1c6f6e8 100644
--- a/src/lessons/welcome/methods/basics/MethodsEntity.java
+++ b/src/lessons/welcome/methods/basics/MethodsEntity.java
@@ -3,12 +3,12 @@ package lessons.welcome.methods.basics;
 public class MethodsEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise.");
+		throw new RuntimeException("I cannot let you use forward with an argument in this exercise. Use a loop instead.");
 	}
 
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise.");
+		throw new RuntimeException("I cannot let you use backward with an argument in this exercise. Use a loop instead.");
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/welcome/methods/basics/MethodsEntity.py b/src/lessons/welcome/methods/basics/MethodsEntity.py
index d2d2019..bafa740 100644
--- a/src/lessons/welcome/methods/basics/MethodsEntity.py
+++ b/src/lessons/welcome/methods/basics/MethodsEntity.py
@@ -2,12 +2,12 @@ def forward(i=-1):
     if i==-1:
       entity.forward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+      errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
 def backward(i=-1):
     if i==-1:
       entity.backward()
     else:
-      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+      errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
 
 # BEGIN SOLUTION
 def goAndGet():
diff --git a/src/lessons/welcome/methods/basics/MethodsEntity.scala b/src/lessons/welcome/methods/basics/MethodsEntity.scala
index d59e48d..6a1b6b5 100644
--- a/src/lessons/welcome/methods/basics/MethodsEntity.scala
+++ b/src/lessons/welcome/methods/basics/MethodsEntity.scala
@@ -4,10 +4,10 @@ import plm.core.model.Game
 
 class ScalaMethodsEntity extends plm.universe.bugglequest.SimpleBuggle {
   	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("I cannot let you use forward with an argument. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("I cannot let you use backward with an argument. Use a loop instead."));
 	}
 
 	/* BEGIN TEMPLATE */
diff --git a/src/lessons/welcome/methods/flowerpot/FlowerPot.fr.html b/src/lessons/welcome/methods/flowerpot/FlowerPot.fr.html
index c75e4f7..5e069ea 100644
--- a/src/lessons/welcome/methods/flowerpot/FlowerPot.fr.html
+++ b/src/lessons/welcome/methods/flowerpot/FlowerPot.fr.html
@@ -4,7 +4,7 @@
 vit. Vous devez l'aider à reproduire le motif dont elle rêve (vous pouvez le
 voir dans l'onglet «Objectif»).</p>
 
-<p>Pour cela, vous devez écrire une méthode nommée <code>growFlower()</code>
+<p>Pour cela, vous devez écrire une méthode nommée <code>growFlowers()</code>
 («fait pousser les fleurs» en anglais). Cette méthode ne prend aucun
 paramètre et ne renvoie aucun résultat. Comme le motif est un peu complexe,
 il faut que vous le décomposiez en sous-motifs pour que votre code reste
diff --git a/src/lessons/welcome/methods/returning/MethodsReturningEntity.java b/src/lessons/welcome/methods/returning/MethodsReturningEntity.java
index 8e9b49e..44a6e7c 100644
--- a/src/lessons/welcome/methods/returning/MethodsReturningEntity.java
+++ b/src/lessons/welcome/methods/returning/MethodsReturningEntity.java
@@ -6,12 +6,12 @@ import plm.core.model.Game;
 public class MethodsReturningEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
diff --git a/src/lessons/welcome/methods/returning/MethodsReturningEntity.py b/src/lessons/welcome/methods/returning/MethodsReturningEntity.py
index bebd5ef..bdafc43 100644
--- a/src/lessons/welcome/methods/returning/MethodsReturningEntity.py
+++ b/src/lessons/welcome/methods/returning/MethodsReturningEntity.py
@@ -1,12 +1,12 @@
 def forward(i=-1):
     if i!=-1:
-        errorMsg("forward(int) forbidden in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
     else:
         entity.forward()
 
 def backward(i=-1):
     if i!=-1:
-        errorMsg("backward(int) forbidden in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
     else:
         entity.backward()
 
diff --git a/src/lessons/welcome/methods/returning/MethodsReturningEntity.scala b/src/lessons/welcome/methods/returning/MethodsReturningEntity.scala
index 168f9e4..f47c31a 100644
--- a/src/lessons/welcome/methods/returning/MethodsReturningEntity.scala
+++ b/src/lessons/welcome/methods/returning/MethodsReturningEntity.scala
@@ -6,11 +6,11 @@ import plm.core.model.Game
 
 class ScalaMethodsReturningEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def run() { 
diff --git a/src/lessons/welcome/methods/slug/SlugHunting.html b/src/lessons/welcome/methods/slug/SlugHunting.html
index 6278485..d213872 100644
--- a/src/lessons/welcome/methods/slug/SlugHunting.html
+++ b/src/lessons/welcome/methods/slug/SlugHunting.html
@@ -5,7 +5,7 @@ to write the code to organize the hunting party. Copy/paste your code from the
 previous exercise, and complete the <code>hunt()</code> method.</p>
 
 <p>Following a track is not very difficult: move forward as long as you have the track in front of you.
-If there is not track in front of you anymore, check if the rest of the track is on your left or on 
+If there is not track in front of you anymore, check whether the rest of the track is on your left or on 
 your right, and follow it further.</p>
 
 <p>To ensure that you don't mix the track you come from with the one in front of you, 
diff --git a/src/lessons/welcome/methods/slug/SlugHuntingEntity.java b/src/lessons/welcome/methods/slug/SlugHuntingEntity.java
index f2ae8cd..44048fd 100644
--- a/src/lessons/welcome/methods/slug/SlugHuntingEntity.java
+++ b/src/lessons/welcome/methods/slug/SlugHuntingEntity.java
@@ -24,10 +24,8 @@ public class SlugHuntingEntity extends plm.universe.bugglequest.SimpleBuggle {
 			}
 		}
 		pickupBaggle();
-		/* END SOLUTION */
 	}
 
-	/* BEGIN HIDDEN */
 	boolean isFacingTrail() {
 		if (isFacingWall())
 			return false;
@@ -37,8 +35,9 @@ public class SlugHuntingEntity extends plm.universe.bugglequest.SimpleBuggle {
 		backward();
 		return res;
 
+		/* END SOLUTION */
 	}		
-	/* END HIDDEN */
+	// Copy your isFacingTrail here
 	/* END TEMPLATE */
 
 
diff --git a/src/lessons/welcome/methods/slug/SlugHuntingEntity.py b/src/lessons/welcome/methods/slug/SlugHuntingEntity.py
index 476174e..4610c23 100644
--- a/src/lessons/welcome/methods/slug/SlugHuntingEntity.py
+++ b/src/lessons/welcome/methods/slug/SlugHuntingEntity.py
@@ -1,30 +1,25 @@
 import java.awt.Color as Color
 
 # BEGIN TEMPLATE
-# BEGIN HIDDEN
+# Copy your isFacingTrail, and write your code below
+# BEGIN SOLUTION
 def isFacingTrail():
    if isFacingWall():
       return False
    else:
 	  forward()
-	  res = getGroundColor().toString() == Color.green.toString()
+	  res = getGroundColor() == Color.green
 	  backward()
 	  return res
-# END HIDDEN
 
-def hunt():
-   # write your code here
-   # BEGIN SOLUTION
-   while not isOverBaggle():
+while not isOverBaggle():
+   brushUp()
+   if isFacingTrail():
+      brushDown()
+      forward()
       brushUp()
-      if isFacingTrail():
-         brushDown()
-         forward()
-         brushUp()
-      else:
-	     left()
-   pickupBaggle()
-   # END SOLUTION
+   else:
+     left()
+pickupBaggle()
+# END SOLUTION
 # END TEMPLATE
-
-hunt()
diff --git a/src/lessons/welcome/methods/slug/SlugHuntingEntity.scala b/src/lessons/welcome/methods/slug/SlugHuntingEntity.scala
index accde82..b256bb0 100644
--- a/src/lessons/welcome/methods/slug/SlugHuntingEntity.scala
+++ b/src/lessons/welcome/methods/slug/SlugHuntingEntity.scala
@@ -12,7 +12,7 @@ class ScalaSlugHuntingEntity extends plm.universe.bugglequest.SimpleBuggle {
 	def hunt() {
 		// Write your code here
 		/* BEGIN SOLUTION */
-	  while (! isOverBaggle()) {
+		while (! isOverBaggle()) {
 			if (isFacingTrail()) {
 				brushDown();
 				forward();
@@ -22,13 +22,8 @@ class ScalaSlugHuntingEntity extends plm.universe.bugglequest.SimpleBuggle {
 			}
 		}
 		pickupBaggle();
-		/* END SOLUTION */
 	}
 	
-	// Copy your isFacingTrail() here
-	/* END TEMPLATE */
-
-	/* BEGIN HIDDEN */
 	def isFacingTrail():Boolean = {
 		if (isFacingWall())
 			return false;
@@ -38,7 +33,9 @@ class ScalaSlugHuntingEntity extends plm.universe.bugglequest.SimpleBuggle {
 		backward();
 		return res;
 
-	}		
-	/* END HIDDEN */
-
+		/* END SOLUTION */
+	}
+	
+	// Copy your isFacingTrail() here
+	/* END TEMPLATE */
 }
diff --git a/src/lessons/welcome/methods/slug/SlugTracking.fr.html b/src/lessons/welcome/methods/slug/SlugTracking.fr.html
index d551f75..7eed827 100644
--- a/src/lessons/welcome/methods/slug/SlugTracking.fr.html
+++ b/src/lessons/welcome/methods/slug/SlugTracking.fr.html
@@ -23,7 +23,7 @@ que les couleurs sont des <i>objets</i> en Java, et que
 <code>.equals()</code> est la marche à suivre pour tester l'égalité d'objets
 Java.[/!]
 [!python|scala]Il suffit ensuite de tester si la couleur renvoyée par cette
-fonction est égale à la valeur <code>Color.green</code>, qui représente a
+fonction est égale à la valeur <code>Color.green</code>, qui représente la
 couleur verte.[/!]</p>   
 
 <h3>Objectif de cet exercice</h3>
diff --git a/src/lessons/welcome/traversal/Snake.fr.html b/src/lessons/welcome/traversal/Snake.fr.html
index 810eba0..a7c90f5 100644
--- a/src/lessons/welcome/traversal/Snake.fr.html
+++ b/src/lessons/welcome/traversal/Snake.fr.html
@@ -23,7 +23,7 @@ faut vérifier s'il y a un mur à gauche, et si la buggle regarde à l'ouest,
 il faut vérifier s'il y a un mur à droite.<br/>
       On obtient la direction actuelle de la buggle avec la méthode
 <code>getDirection()</code>, et on sait si elle regarde à l'est avec le test
-<code>getDirection() == Direction.EAST</code> (WEST pour ouest).<br/>
+<code>getDirection() == Direction.EST</code> (ou bien Direction.OUEST).<br/>
       Pour la vérification elle-même, rien de magique : il faut se tourner et
 regarder si on est face à un mur une fois tourné.</li>
 </ul>
diff --git a/src/lessons/welcome/traversal/column/TraversalByColumn.fr.html b/src/lessons/welcome/traversal/column/TraversalByColumn.fr.html
index d74cfcf..f694154 100644
--- a/src/lessons/welcome/traversal/column/TraversalByColumn.fr.html
+++ b/src/lessons/welcome/traversal/column/TraversalByColumn.fr.html
@@ -21,7 +21,7 @@ téléporte la buggle sur la case où x=3 et y=5.</p>
 <p>Le premier objectif est donc d'écrire une fonction booléenne indiquant si la
 buggle a atteint la position finale ou non, càd si elle est arrivée en bas à
 droite du monde.  Vous utiliserez pour cela les méthodes
-<code>getMondeHauteur()</code> et <code>getMondeLargueur()</code> qui
+<code>getMondeHauteur()</code> et <code>getMondeLargeur()</code> qui
 retournent respectivement la hauteur et la largeur du monde.  Votre test est
 de comparer les coordonnées actuelles de votre buggle (que vous pouvez
 retrouver avec les méthodes <code>getX()</code> et <code>getY()</code>) aux
diff --git a/src/lessons/welcome/traversal/column/TraversalByColumnEntity.java b/src/lessons/welcome/traversal/column/TraversalByColumnEntity.java
index a21f3cc..bcd6c52 100644
--- a/src/lessons/welcome/traversal/column/TraversalByColumnEntity.java
+++ b/src/lessons/welcome/traversal/column/TraversalByColumnEntity.java
@@ -5,7 +5,16 @@ import plm.universe.bugglequest.SimpleBuggle;
 
 public class TraversalByColumnEntity extends SimpleBuggle {
 	/* BEGIN TEMPLATE */
-	/* BEGIN SOLUTION */	
+	public void run() {
+		/* BEGIN SOLUTION */	
+		int cpt=0;
+		writeMessage(cpt);
+		while (!endingPosition()) {
+			nextStep();
+			cpt++;
+			writeMessage(cpt);
+		}
+	}
 	public void nextStep() {	
 		int x=getX();
 		int y=getY();
@@ -25,56 +34,24 @@ public class TraversalByColumnEntity extends SimpleBuggle {
 
 	public boolean endingPosition() {
 		return (getX() == getWorldWidth() -1) && (getY() == getWorldHeight()-1);
+		/* END SOLUTION */
 	}
-
-
-	@Override
-	public void run() {
-		int cpt=0;
-		writeMessage(cpt);
-		while (!endingPosition()) {
-			nextStep();
-			cpt++;
-			writeMessage(cpt);
-		}
-	}
-	/* END SOLUTION */
 	/* END TEMPLATE */	
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void forward()  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void backward() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
-	}
-	@Override
-	public void left() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."));
-	}
-	@Override
-	public void right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
-	}
-	@Override
-	public void back() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."));
-	}
-	@Override
-	public boolean isFacingWall() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this exercise."));
-	}
-	@Override
-	public boolean isBackingWall() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 }
diff --git a/src/lessons/welcome/traversal/column/TraversalByColumnEntity.py b/src/lessons/welcome/traversal/column/TraversalByColumnEntity.py
index bc4317f..5f93f4c 100644
--- a/src/lessons/welcome/traversal/column/TraversalByColumnEntity.py
+++ b/src/lessons/welcome/traversal/column/TraversalByColumnEntity.py
@@ -1,23 +1,8 @@
 def forward(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use forward() in this exercise.")
+	errorMsg("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead.")
 
 def backward(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use backward() in this exercise.")
-
-def right(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use right() in this exercise.")
-
-def left(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use left() in this exercise.")
-
-def back(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use back() in this exercise.")
-
-def isFacingWall(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use isFacingWall() in this exercise.")
-
-def isBackingWall(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use isFacingWall() in this exercise.")
+	errorMsg("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead.")
 
 # BEGIN TEMPLATE
 # BEGIN SOLUTION
diff --git a/src/lessons/welcome/traversal/column/TraversalByColumnEntity.scala b/src/lessons/welcome/traversal/column/TraversalByColumnEntity.scala
index ed2c088..f54fa26 100644
--- a/src/lessons/welcome/traversal/column/TraversalByColumnEntity.scala
+++ b/src/lessons/welcome/traversal/column/TraversalByColumnEntity.scala
@@ -5,7 +5,16 @@ import plm.core.model.Game
 
 class ScalaTraversalByColumnEntity extends SimpleBuggle {
 	/* BEGIN TEMPLATE */
-	/* BEGIN SOLUTION */	
+	def run() {
+		/* BEGIN SOLUTION */	
+		var cpt=0;
+		writeMessage(cpt);
+		while (!endingPosition()) {
+			nextStep();
+			cpt+=1;
+			writeMessage(cpt);
+		}
+	}
 	def nextStep() {	
 		var x=getX();
 		var y=getY();
@@ -25,46 +34,20 @@ class ScalaTraversalByColumnEntity extends SimpleBuggle {
 
 	def endingPosition(): Boolean = {
 		return (getX() == getWorldWidth() -1) && (getY() == getWorldHeight()-1);
+		/* END SOLUTION */
 	}
-
-
-	def run() {
-		var cpt=0;
-		writeMessage(cpt);
-		while (!endingPosition()) {
-			nextStep();
-			cpt+=1;
-			writeMessage(cpt);
-		}
-	}
-	/* END SOLUTION */
 	/* END TEMPLATE */	
 
 	override def forward(i:Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def forward()  {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def backward(i:Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def backward() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
-	}
-	override def left() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."));
-	}
-	override def right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
-	}
-	override def back() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."));
-	}
-	override def isFacingWall():Boolean = {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this exercise."));
-	}
-	override def isBackingWall():Boolean = {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 }
diff --git a/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java b/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java
index 0c255d2..9e667db 100644
--- a/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java
+++ b/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.java
@@ -5,8 +5,17 @@ import plm.universe.bugglequest.SimpleBuggle;
 
 public class TraversalDiagonalEntity extends SimpleBuggle {
 	/* BEGIN TEMPLATE */
-	/* BEGIN SOLUTION */
 	int diag = 0;
+	public void run() {
+		/* BEGIN SOLUTION */
+		int cpt = 0;
+		writeMessage(cpt);
+		while (!endingPosition()) {
+			nextStep();
+			cpt++;
+			writeMessage(cpt);
+		}
+	}
 
 	public void nextStep() {
 		int x = getX();
@@ -30,56 +39,25 @@ public class TraversalDiagonalEntity extends SimpleBuggle {
 
 	public boolean endingPosition() {
 		return (getX() == getWorldWidth() - 1) && (getY() == getWorldHeight() - 1);
+		/* END SOLUTION */
 	}
-
-	@Override
-	public void run() {
-		int cpt = 0;
-		writeMessage(cpt);
-		while (!endingPosition()) {
-			nextStep();
-			cpt++;
-			writeMessage(cpt);
-		}
-	}
-	/* END SOLUTION */
 	/* END TEMPLATE */
 
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void forward()  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void backward() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
-	}
-	@Override
-	public void left() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."));
-	}
-	@Override
-	public void right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
-	}
-	@Override
-	public void back() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."));
-	}
-	@Override
-	public boolean isFacingWall() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this exercise."));
-	}
-	@Override
-	public boolean isBackingWall() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 }
diff --git a/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.py b/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.py
index e40faf7..8d98bf8 100644
--- a/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.py
+++ b/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.py
@@ -1,23 +1,8 @@
 def forward(i):
-	errorMsg("Sorry Dave, I cannot let you use forward() in this exercise")
+	errorMsg("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead.")
 
 def backward(i):
-	errorMsg("Sorry Dave, I cannot let you use backward() in this exercise")
-
-def right(i):
-	errorMsg("Sorry Dave, I cannot let you use right() in this exercise")
-
-def left(i):
-	errorMsg("Sorry Dave, I cannot let you use left() in this exercise")
-
-def back(i):
-	errorMsg("Sorry Dave, I cannot let you use back() in this exercise")
-
-def isFacingWall(i):
-	errorMsg("Sorry Dave, I cannot let you use isFacingWall() in this exercise")
-
-def isBackingWall(i):
-	errorMsg("Sorry Dave, I cannot let you use isFacingWall() in this exercise")
+	errorMsg("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead.")
 
 # BEGIN TEMPLATE
 # BEGIN SOLUTION
diff --git a/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.scala b/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.scala
index 8512084..0693712 100644
--- a/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.scala
+++ b/src/lessons/welcome/traversal/diagonal/TraversalDiagonalEntity.scala
@@ -5,8 +5,17 @@ import plm.universe.bugglequest.SimpleBuggle;
 
 class ScalaTraversalDiagonalEntity extends SimpleBuggle {
 	/* BEGIN TEMPLATE */
-	/* BEGIN SOLUTION */
 	var diag = 0;
+	def run() {
+		/* BEGIN SOLUTION */
+		var cpt = 0;
+		writeMessage(cpt);
+		while (!endingPosition()) {
+			nextStep();
+			cpt+=1;
+			writeMessage(cpt);
+		}
+	}
 
 	def nextStep() {
 		var x = getX();
@@ -30,46 +39,20 @@ class ScalaTraversalDiagonalEntity extends SimpleBuggle {
 
 	def endingPosition():Boolean = {
 		return (getX() == getWorldWidth() - 1) && (getY() == getWorldHeight() - 1);
+		/* END SOLUTION */
 	}
-
-	def run() {
-		var cpt = 0;
-		writeMessage(cpt);
-		while (!endingPosition()) {
-			nextStep();
-			cpt+=1;
-			writeMessage(cpt);
-		}
-	}
-	/* END SOLUTION */
 	/* END TEMPLATE */
 
-
 	override def forward(i:Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def forward()  {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def backward(i:Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def backward() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
-	}
-	override def left() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."));
-	}
-	override def right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
-	}
-	override def back() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."));
-	}
-	override def isFacingWall():Boolean = {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this exercise."));
-	}
-	override def isBackingWall():Boolean = {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 }
diff --git a/src/lessons/welcome/traversal/line/TraversalByLineEntity.java b/src/lessons/welcome/traversal/line/TraversalByLineEntity.java
index c6fb85d..a4b8b36 100644
--- a/src/lessons/welcome/traversal/line/TraversalByLineEntity.java
+++ b/src/lessons/welcome/traversal/line/TraversalByLineEntity.java
@@ -5,7 +5,16 @@ import plm.universe.bugglequest.SimpleBuggle;
 
 public class TraversalByLineEntity extends SimpleBuggle {
 	/* BEGIN TEMPLATE */
-	/* BEGIN SOLUTION */
+	public void run() {
+		/* BEGIN SOLUTION */
+		int cpt=0;
+		do {
+			writeMessage(cpt);
+			nextStep();
+			cpt++;
+		} while (!endingPosition());
+		writeMessage(cpt);
+	}
 
 	public void nextStep() {
 		int x=getX();
@@ -25,57 +34,25 @@ public class TraversalByLineEntity extends SimpleBuggle {
 
 	public boolean endingPosition() {
 		return (getX() == getWorldWidth()-1) && (getY() == getWorldHeight()-1);
+		/* END SOLUTION */
 	}
-
-
-	@Override
-	public void run() {
-		int cpt=0;
-		do {
-			writeMessage(cpt);
-			nextStep();
-			cpt++;
-		} while (!endingPosition());
-		writeMessage(cpt);
-	}
-	/* END SOLUTION */
 	/* END TEMPLATE */	
 
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void forward()  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void backward() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
-	}
-	@Override
-	public void left() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."));
-	}
-	@Override
-	public void right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
-	}
-	@Override
-	public void back() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."));
-	}
-	@Override
-	public boolean isFacingWall() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this exercise."));
-	}
-	@Override
-	public boolean isBackingWall() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 }
diff --git a/src/lessons/welcome/traversal/line/TraversalByLineEntity.py b/src/lessons/welcome/traversal/line/TraversalByLineEntity.py
index f182076..7dfb19c 100644
--- a/src/lessons/welcome/traversal/line/TraversalByLineEntity.py
+++ b/src/lessons/welcome/traversal/line/TraversalByLineEntity.py
@@ -1,23 +1,8 @@
 def forward(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use forward() in this exercise.")
+	errorMsg("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead.")
 
 def backward(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use backward() in this exercise.")
-
-def right(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use right() in this exercise.")
-
-def left(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use left() in this exercise.")
-
-def back(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use back() in this exercise.")
-
-def isFacingWall(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use isFacingWall() in this exercise.")
-
-def isBackingWall(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use isFacingWall() in this exercise.")
+	errorMsg("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead.")
 
 # BEGIN SOLUTION
 
diff --git a/src/lessons/welcome/traversal/line/TraversalByLineEntity.scala b/src/lessons/welcome/traversal/line/TraversalByLineEntity.scala
index bcb714f..fed1d2c 100644
--- a/src/lessons/welcome/traversal/line/TraversalByLineEntity.scala
+++ b/src/lessons/welcome/traversal/line/TraversalByLineEntity.scala
@@ -5,7 +5,16 @@ import plm.universe.bugglequest.SimpleBuggle;
 
 class ScalaTraversalByLineEntity extends SimpleBuggle {
 	/* BEGIN TEMPLATE */
-	/* BEGIN SOLUTION */
+	def run() {
+		/* BEGIN SOLUTION */
+		var cpt=0;
+		do {
+			writeMessage(cpt);
+			nextStep();
+			cpt+=1;
+		} while (!endingPosition());
+		writeMessage(cpt);
+	}
 
 	def nextStep() {
 		var x=getX();
@@ -25,47 +34,21 @@ class ScalaTraversalByLineEntity extends SimpleBuggle {
 
 	def endingPosition():Boolean = {
 		return (getX() == getWorldWidth()-1) && (getY() == getWorldHeight()-1);
+		/* END SOLUTION */
 	}
-
-
-	def run() {
-		var cpt=0;
-		do {
-			writeMessage(cpt);
-			nextStep();
-			cpt+=1;
-		} while (!endingPosition());
-		writeMessage(cpt);
-	}
-	/* END SOLUTION */
 	/* END TEMPLATE */	
 
 
 	override def forward(i:Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def forward()  {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def backward(i:Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def backward() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
-	}
-	override def left() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."));
-	}
-	override def right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
-	}
-	override def back() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."));
-	}
-	override def isFacingWall():Boolean = {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this exercise."));
-	}
-	override def isBackingWall():Boolean = {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 }
diff --git a/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java b/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java
index 911cd91..ebab814 100644
--- a/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java
+++ b/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.java
@@ -5,7 +5,16 @@ import plm.universe.bugglequest.SimpleBuggle;
 
 public class TraversalZigZagEntity extends SimpleBuggle {
 	/* BEGIN TEMPLATE */		
-	/* BEGIN SOLUTION */
+	public void run() {
+		/* BEGIN SOLUTION */
+		int cpt=0;
+		writeMessage(cpt);
+		while (!endingPosition()) {
+			nextStep();
+			cpt++;
+			writeMessage(cpt);
+		}
+	}
 
 	public void nextStep() {        
 		int x=getX();
@@ -30,56 +39,25 @@ public class TraversalZigZagEntity extends SimpleBuggle {
 
 	public boolean endingPosition() {
 		return (getX() == getWorldWidth() -1) && (getY() == getWorldHeight()-1);
+		/* END SOLUTION */
 	}
-
-	@Override
-	public void run() {
-		int cpt=0;
-		writeMessage(cpt);
-		while (!endingPosition()) {
-			nextStep();
-			cpt++;
-			writeMessage(cpt);
-		}
-	}
-	/* END SOLUTION */
 	/* END TEMPLATE */	
 
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void forward()  {
 		if (isInited())
-			throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+			throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 	@Override
 	public void backward() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
-	}
-	@Override
-	public void left() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."));
-	}
-	@Override
-	public void right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
-	}
-	@Override
-	public void back() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."));
-	}
-	@Override
-	public boolean isFacingWall() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this exercise."));
-	}
-	@Override
-	public boolean isBackingWall() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 }
diff --git a/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.py b/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.py
index 2b10aba..de0a597 100644
--- a/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.py
+++ b/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.py
@@ -1,23 +1,8 @@
 def forward(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use forward() in this exercise.")
+	errorMsg("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead.")
 
 def backward(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use backward() in this exercise.")
-
-def right(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use right() in this exercise.")
-
-def left(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use left() in this exercise.")
-
-def back(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use back() in this exercise.")
-
-def isFacingWall(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use isFacingWall() in this exercise.")
-
-def isBackingWall(i):
-	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use isFacingWall() in this exercise.")
+	errorMsg("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead.")
 
 # BEGIN TEMPLATE
 # BEGIN SOLUTION
diff --git a/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.scala b/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.scala
index b9b83ef..fcbed1a 100644
--- a/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.scala
+++ b/src/lessons/welcome/traversal/zigzag/TraversalZigZagEntity.scala
@@ -5,7 +5,16 @@ import plm.universe.bugglequest.SimpleBuggle;
 
 class ScalaTraversalZigZagEntity extends SimpleBuggle {
 	/* BEGIN TEMPLATE */		
-	/* BEGIN SOLUTION */
+	def run() {
+		/* BEGIN SOLUTION */
+		var cpt=0;
+		writeMessage(cpt);
+		while (!endingPosition()) {
+			nextStep();
+			cpt+=1;
+			writeMessage(cpt);
+		}
+	}
 
 	def nextStep() {        
 		var x=getX();
@@ -30,46 +39,21 @@ class ScalaTraversalZigZagEntity extends SimpleBuggle {
 
 	def endingPosition():Boolean = {
 		return (getX() == getWorldWidth() -1) && (getY() == getWorldHeight()-1);
+		/* END SOLUTION */
 	}
-
-	def run() {
-		var cpt=0;
-		writeMessage(cpt);
-		while (!endingPosition()) {
-			nextStep();
-			cpt+=1;
-			writeMessage(cpt);
-		}
-	}
-	/* END SOLUTION */
 	/* END TEMPLATE */	
 
 
 	override def forward(i:Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def forward()  {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def backward(i:Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 	override def backward() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward() in this exercise."));
-	}
-	override def left() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use left() in this exercise."));
-	}
-	override def right() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use right() in this exercise."));
-	}
-	override def back() {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use back() in this exercise."));
-	}
-	override def isFacingWall():Boolean = {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isFacingWall() in this exercise."));
-	}
-	override def isBackingWall():Boolean = {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use isBackingWall() in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward() in this exercise. Use setPos(x,y) instead."));
 	}
 }
diff --git a/src/lessons/welcome/variables/RunFourEntity.java b/src/lessons/welcome/variables/RunFourEntity.java
index 6a839ed..5882722 100644
--- a/src/lessons/welcome/variables/RunFourEntity.java
+++ b/src/lessons/welcome/variables/RunFourEntity.java
@@ -5,11 +5,11 @@ import plm.core.model.Game;
 public class RunFourEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 
diff --git a/src/lessons/welcome/variables/RunFourEntity.py b/src/lessons/welcome/variables/RunFourEntity.py
index 330ee6d..47151fd 100644
--- a/src/lessons/welcome/variables/RunFourEntity.py
+++ b/src/lessons/welcome/variables/RunFourEntity.py
@@ -1,10 +1,10 @@
 def forward(i=1):
     if i>1:
-        errorMsg("Sorry Dave, I cannot let you use forward(i>1) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
     entity.forward()
 def backward(i=1):
     if i>1:
-        errorMsg("Sorry Dave, I cannot let you use backward(i>1) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
     entity.backward()
 
 # BEGIN SOLUTION
diff --git a/src/lessons/welcome/variables/RunFourEntity.scala b/src/lessons/welcome/variables/RunFourEntity.scala
index ed89239..35a50bb 100644
--- a/src/lessons/welcome/variables/RunFourEntity.scala
+++ b/src/lessons/welcome/variables/RunFourEntity.scala
@@ -4,10 +4,10 @@ import plm.core.model.Game
 
 class ScalaRunFourEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def run() {
diff --git a/src/lessons/welcome/variables/RunHalf.fr.html b/src/lessons/welcome/variables/RunHalf.fr.html
index 896caa7..bfc9378 100644
--- a/src/lessons/welcome/variables/RunHalf.fr.html
+++ b/src/lessons/welcome/variables/RunHalf.fr.html
@@ -2,7 +2,7 @@
 
 <p>C'est le second jour de la Grande Course des Buggles. Comme d'habitude, il
 faut courir jusqu'à trouver la case où vous devez vous arrêter. Mais cette
-fois, vous devez vous arrêter quand vous aurez compté deux fois plus de
+fois, vous devez vous arrêter quand vous aurez compté deux fois moins de
 biscuits que de cases oranges plus une. En d'autres termes, la condition
 d'arrêt est la suivante : <code>2 * biscuits = caseOrange + 1</code>.</p>
 
diff --git a/src/lessons/welcome/variables/RunHalf.html b/src/lessons/welcome/variables/RunHalf.html
index b8c254a..87c80da 100644
--- a/src/lessons/welcome/variables/RunHalf.html
+++ b/src/lessons/welcome/variables/RunHalf.html
@@ -2,7 +2,8 @@
 
 <p>Here is the second day of the Big Buggles' Race.  
 As previously, you have to run forward until you reach the right cell to stop on. 
-But this time, you have to reach the cell where you saw as much baggles as orange cells plus 1. 
+But this time, you have to reach the cell where the amount of baggles
+you saw is the double of the orange cells plus 1. 
 In other word, the following condition must become true <code>2 * baggles = orangeCells + 1</code>.</p>
 
 <p>You can determine whether you are over a orange cell with the <code>isOverOrange()</code> method.</p> 
diff --git a/src/lessons/welcome/variables/RunHalfEntity.java b/src/lessons/welcome/variables/RunHalfEntity.java
index 7ae1b0d..336a6d5 100644
--- a/src/lessons/welcome/variables/RunHalfEntity.java
+++ b/src/lessons/welcome/variables/RunHalfEntity.java
@@ -7,11 +7,11 @@ import plm.core.model.Game;
 public class RunHalfEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 	public boolean isOverOrange() {
 		return getGroundColor().equals(Color.orange);
diff --git a/src/lessons/welcome/variables/RunHalfEntity.py b/src/lessons/welcome/variables/RunHalfEntity.py
index 707c9bf..de03288 100644
--- a/src/lessons/welcome/variables/RunHalfEntity.py
+++ b/src/lessons/welcome/variables/RunHalfEntity.py
@@ -1,10 +1,10 @@
 def forward(i=1):
     if i>1:
-        errorMsg("Sorry Dave, I cannot let you use forward(i>1) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
     entity.forward()
 def backward(i=1):
     if i>1:
-        errorMsg("Sorry Dave, I cannot let you use backward(i>1) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
     entity.backward()
 def isOverOrange():
     return getGroundColor() == Color.orange
diff --git a/src/lessons/welcome/variables/RunHalfEntity.scala b/src/lessons/welcome/variables/RunHalfEntity.scala
index ebdfb88..f1abcbe 100644
--- a/src/lessons/welcome/variables/RunHalfEntity.scala
+++ b/src/lessons/welcome/variables/RunHalfEntity.scala
@@ -5,10 +5,10 @@ import plm.core.model.Game
 
 class ScalaRunHalfEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 	def isOverOrange():Boolean = {
 		return getGroundColor().equals(Color.orange);
@@ -16,7 +16,8 @@ class ScalaRunHalfEntity extends plm.universe.bugglequest.SimpleBuggle {
 	/* BINDINGS TRANSLATION */
 	def estSurOrange():Boolean = { return isOverOrange(); }
 
-	override def run() {
+	/* BEGIN TEMPLATE */
+	def run() {
 		/* BEGIN SOLUTION */
 		var baggle:Int = 0;
 		var orange:Int = 0;
@@ -31,4 +32,5 @@ class ScalaRunHalfEntity extends plm.universe.bugglequest.SimpleBuggle {
 		}
 		/* END SOLUTION */
 	}
+	/* END TEMPLATE */
 }
diff --git a/src/lessons/welcome/variables/Variables.fr.html b/src/lessons/welcome/variables/Variables.fr.html
index 8ad20c4..b68dab6 100644
--- a/src/lessons/welcome/variables/Variables.fr.html
+++ b/src/lessons/welcome/variables/Variables.fr.html
@@ -21,53 +21,62 @@ quelque chose dedans (disons, un flacon de Channel Numéro 5).
 <p>Il est très simple de <b>déclarer</b> (c'est-à-dire, créer) une variable en
 [!thelang]. Il suffit d'écrire
 [!java]son type, une espace et le nom de la variable.[/!]
-[!scala]le mot-clé <code>var</code>, le nom de la variable, deux points (:)
-et le type de la variable.[/!]
+[!scala]le mot-clé <code>var</code>, le nom de la variable, deux points (:),
+le type de la variable, un signe égal (=) et une valeur intiale.[/!]
 [!python]le nom de la variable, un signe égal (=) et sa valeur initiale.[/!]
 
 Le nom de la variable est un label pour la retrouver plus tard[!python].[/!]
 
 [!java|scala] tandis que son type est le genre de données qu'on va pouvoir
 stoker dans cette variable.[/!]
-Il est interdit de mettre des espaces et des accents dans les noms de
-variable.
-Ainsi, on peut nommer une variable <code>dejaFait</code>, mais ni <code>deja
-fait</code> ni <code>déjaFait</code> ne sont des identificateurs de
-variables valides.
+Il est interdit de mettre des espaces dans les noms de variable.
+On peut nommer une variable <code>dejaFait</code>, mais <code>deja
+fait</code> n'est pas un identificateur de variable valide.
   </p>
 
-[!java|scala]
+[!java]
   <p>Ainsi, pour créer une variable nommée <b>x</b> contenant des entiers, on
 écrira :</p> 
-  <pre>[!java]int x;[/!][!scala]var x: Int[/!]</pre>
-[/!]
-
-<p>[!java|scala]Si vous le souhaitez, vous pouvez spécifier une valeur initiale
-en faisant suivre la déclaration d'un symbole égal (=) suivi de la valeur à
-utiliser.[/!]
-[!scala]Si vous spécifiez une valeur, il n'est alors plus indispensable de
-spécifier le type de la variable, puisque Scala parvient à le deviner tout
-seul. Vous êtes libre de le spécifier quand même si vous le désirez (ou si
-le compilateur se trompe, comme cela arrive parfois par exemple entre les
-différents types de nombres), mais c'est optionnel.[/!]
-Donc, si vous voulez utiliser 5 comme valeur initiale, il faut écrire: </p>
-<pre>[!java]int x=5;[/!][!python]x = 5[/!][!scala]var x: Int =  5 <span class="comment">// je peux quand même donner le type si je veux</span>
-var y = 10       <span class="comment">// ou bien je peux l'omettre</span>[/!]</pre>
-  
-[!java|scala]
-<p>Comme vous pouvez le voir, les variables sont <b>typées</b>
-en[!thelang]. Cela veut dire qu'elles sont en quelque sorte spécialisées:
-une variable donnée ne peut stocker qu'un type de données
-spécifique. N'essayez même pas de rancher des nombres dans une variable
-faite pour recevoir des lettres !
-D'autres langages (comme le python) sont moins regardants, et on peut ranger
+  <pre>int x;</pre>
+  <p>Si vous le souhaitez, vous pouvez donner une valeur initiale à votre
+variable en ajoutant le symbole égal (=) suivi d'une valeur après la
+déclaration.</p>
+  <pre>int x=5;</pre>
+[/!] [!python]
+  <p>Ainsi, pour une variable ayant la valeur initiale 5, il faut écrire:  </p>
+  <pre>x = 5</pre>
+[/!] [!scala]
+  <p>Ainsi, pour créer une variable nommée <b>x</b> contenant des entiers avec 42
+en valeur initiale, on écrira :</p> 
+  <pre>var x:Int = 42</pre>
+  <p>Dans la plupart des cas, le compilateur est capable de deviner le type de la
+variable d'après la valeur initiale. On peut alors omettre le type de la
+variable:</p>
+  <pre>var x = 42</pre>
+  <p>Il est nécessaire de spécifier le type de la variable lorsque l'on
+initialise ses variables avec des valeurs génériques, telles que la valeur
+très particulière <code>null</code>, dont le type se trouve être
+ambigu. Même quand le type est clair, vous pouvez le spécifier si vous le
+souhaitez. Ainsi, pour une variable contenant 5 en valeur initiale, on peut
+écrire: </p>
+  <pre>var x: Int =  5 <span class="comment">// je peux quand même donner le type si je veux</span>
+var y = 10       <span class="comment">// ou bien je peux l'omettre</span></pre>
+[/!] [!java|scala]
+<p>Comme vous pouvez le voir, les variables sont <b>typées</b> en
+[!thelang]. Cela veut dire qu'elles sont en quelque sorte spécialisées: une
+variable donnée ne peut stocker qu'un type de données spécifique. N'essayez
+même pas de ranger des nombres dans une variable faite pour recevoir des
+lettres !
+On dit que [!thelang] est un langage <b>typé statiquement</b>.
+</p>
+<p>D'autres langages (comme le python) sont moins regardants, et on peut ranger
 n'importe quel type de données dans n'importe quelle variable sans
 restriction. À première vue, cela semble plus simple, mais ce genre de
 restriction permet au compilateur de détecter plus d'erreurs de logiques
 pour vous, ce qui n'est pas dommage. En quelque sorte, il est plus facile
 d'écrire du python, mais le typage empêche certaines erreurs de se glisser
-dans vos programmes.
-Voici quelque uns des types de données existants en [!thelang] :</p>
+dans vos programmes. </p>
+<p>Voici quelque uns des types de données existants en [!thelang] :</p>
 <ul>
   <li><b>[!java]int[/!][!scala]Int[/!]</b>, pour les entiers;</li>
   <li><b>[!java]double[/!][!scala]Double[/!]</b>, pour les nombres à virgule;</li> 
@@ -79,10 +88,14 @@ c'est-à-dire les variables dont la valeur est soit "vrai" soit "faux";</li>
 <p>Comme vous pouvez le voir, les variables ne sont pas <b>typées</b> en
 Python, ce qui veut dire qu'elles ne sont pas spécialisées sur un type de
 données particulier. Il est tout à fait envisageable de stocker des nombres
-dans une variable, puis d'y mettre des lettres un peu plus tard.
-D'autres langages (comme le Java ou le Scala) sont plus restrictifs et
-imposent de spécialiser chaque variable pour un type donné. Cela semble bien
-plus contraignant à première vue, mais ce genre de restriction permet au
+dans une variable, puis d'y mettre des lettres un peu plus tard. Les valeurs
+elles-mêmes ont bien entendu un type, mais pas les variables. On dit alors
+que python est un langage <b>dynamiquement typé</b>.
+</p>
+<p>D'autres langages (comme le Java ou le Scala) sont plus restrictifs et
+imposent de spécialiser chaque variable pour un type donné (on dit que ce
+sont des langages <b>statiquement typés</b>). Cela semble bien plus
+contraignant à première vue, mais ce genre de restriction permet au
 compilateur de détecter plus d'erreurs de logique pour vous. D'une certaine
 manière, il est plus facile d'écrire du Python, mais le typage de ces
 langages empêche certaines erreurs de se glisser dans les programmes.</p>
@@ -129,7 +142,7 @@ contenir des constantes, des variables et des opérations :</p>
 
 <pre>x = 3 + 2[!java];[/!]
 x = 3 * x[!java];[/!]
-greeting = "Hello "+name[!java];[/!] <span class="comment">[!python]#[/!][!scala|java]//[/!] + est (également) l'opérateur pour concaténer les chaînes (càd pour les fusionner</span></pre> 
+greeting = "Hello "+name[!java];[/!] <span class="comment">[!python]#[/!][!scala|java]//[/!] + est (également) l'opérateur pour concaténer les chaînes (càd pour les fusionner)</span></pre> 
 
 <h3>Objectif de cet exercice</h3>
 Il est temps de faire un exercice un peu plus dur, n'est ce pas ? L'objectif
@@ -170,6 +183,7 @@ l'opérateur ++, ignorez simplement ce paragraphe : cela n'existe pas en
 <p>Ensuite, l'étape 3 consiste simplement à créer une nouvelle variable entière
 <code>dejaFait</code> initialisée à zéro, et reculer d'un pas tant que
 <code>dejaFait</code> n'est pas égal à <code>nbPas</code>, en incrémentant
-<code>dejaFait</code> à chaque fois.</p>
+<code>dejaFait</code> à chaque fois. Il faut utiliser l'opérateur
+<code>!=</code> pour tester l'inégalité entre deux valeurs.</p> 
 
 <p>À vous de jouer !</p>
diff --git a/src/lessons/welcome/variables/Variables.html b/src/lessons/welcome/variables/Variables.html
index 452ce8b..ad4ef97 100644
--- a/src/lessons/welcome/variables/Variables.html
+++ b/src/lessons/welcome/variables/Variables.html
@@ -1,137 +1,155 @@
-<h2>Storing and manipulating data</h2>
-  <p>The programs we wrote so far are missing a fundamental point in computing.
-   Actually, it is all about processing <b>data</b> through specific 
-   <b>instructions</b>. In the buggle world, the main data are a bit hidden behind 
-   the graphical representation, but that's no reason to never manipulate some 
-   data explicitly. 
-
-  <h3>Data in [!thelang]</h3>
-<p>In a program, you can use several <i>types</i> of data, such as integers or strings
-of chars. If you want to use a data several times, you need to store it
-within a <i>variable</i>, which is a memory cell containing a value:
-you put your data (say the value '5') in the variable (say 'length'), and you can retrieve it 
-latter when you need it. That's very similar to a box of label 'gift' in which you would put 
-some stuff, like a bottle of perfume "Channel N°5".  
-
-<h3>Variable declarations</h3>  
-
-<p><b>Declaring</b> (ie, creating) a variable in [!thelang], is very simple. You just need to write
-  [!java]its type, a space, and the variable name.[/!]
-  [!scala]the <code>var</code> keyword, the variable name, a column (:) and the variable type.[/!]
-  [!python]the variable name, an equal sign (=) and an initial value.[/!]
-  The variable name is the label to retrieve it afterward[!python].[/!]
-  [!java|scala] while the type is the kind of data that this variable accepts to store.[/!]
-  It is forbidden to use spaces in variable names. So you can name a variable <code>stepAmount</code> if you want, 
-  but <code>step amount</code> is not a valid name.
-  </p>
-
-[!java|scala]
-  <p>So, to create a variable named <b>x</b> intended to contain integers, one should write:</p> 
-  <pre>[!java]int x;[/!][!scala]var x: Int[/!]</pre>
-[/!]
-
-<p>[!java|scala]If you want, you can specify the initial value of the variable by adding a equal sign (=) followed by the value after the declaration.[/!] 
-   [!scala]If you specify a value, you don't have to specify the type of the variable, since Scala manages to guess it alone in most cases.
-   You are still free to specify the type if you prefer (or if the compiler fail to determine the type for some reason), but it's optional.[/!] 
-   So you want that the variable contains 5 as initial value, you should type: </p>
-<pre>[!java]int x=5;[/!][!python]x = 5[/!][!scala]var x: Int =  5 <span class="comment">// I can define the type if I want to</span>
-var y =  10      <span class="comment">// or I can omit the type if I prefer</span>[/!]</pre>
-  
-[!java|scala]
-<p>As you can see, the variables are <b>typed</b> in [!thelang], which means that they are somehow specialized: 
-  A given variable can only store data of a given type; Don't even think of storing numbers in a variable that is tailored for letters!  
-  Other languages (such as Python) are less picky and allow you to store any kind of data in any variable without restriction.
-  This seems easier at the first glance, but this kind of restriction allows the compiler to catch 
-  more logic errors for you, which is also good. In some sense, Python is easier to write but errors can sneak in more easily than in [!thelang]. 
-  Here are some of the existing types:</p>
-<ul>
-  <li><b>[!java]int[/!][!scala]Int[/!]</b>, for integers;</li>
-  <li><b>[!java]double[/!][!scala]Double[/!]</b>, for dot numbers;</li> 
-  <li><b>[!java]boolean[/!][!scala]Boolean[/!]</b>, for booleans that are values being either true or false;</li>
-  <li><b>String</b>, for char strings.</li>
-</ul>
-[/!]
-
-[!python]
-<p>As you can see, the variables are not <b>typed</b> in Python, which means that they are not specialized in any type of data.
-  A given variable store any type of data of a given type: you can store a number in a variable and latter on store a number in the same variable.  
-  Other languages (such as Java or Scala) are much more picky and prevent you to mix data types in a given variable.
-  This seems annoying at the first glance, but this kind of restriction allows the compiler to catch 
-  more logic errors for you, which is also good. In some sense, Python is easier to write but errors can sneak in more easily.</p>
-[/!]
-  
-
-<p class="scala">If you know that the value of your "variable" will never change (eg because it contains the screen 
-size or some other constant value), then you should make it a <b>value</b> instead of a variable. Simply change the 
-<code>var</code> keyword with the <code>val</code> one. The compiler can then perform more verifications and catch when 
-you inadvertently modify the value. More interestingly, the compiler can produce faster code in some cases.</p>
-
-<p>Variables work very similarly for strings, floating point numbers and boolean values.</p>
-
-<pre class="java">String name = "Martin Quinson";
-double height=1.77; <span class="comment">// in meters</span>
-boolean married=true;<span class="comment">// the contrary would be written "false"</span></pre>
-
-<pre class="scala">val name:String = "Martin Quinson"; <span class="comment">// this cannot be modified (it's a value)</span>
-var height: Double = 1.77; <span class="comment">// in meters</span>
-var married = true; <span class="comment">// the contrary would be written "false"</span>
-<span class="comment">// Scala knows that 'true' is a Boolean value, no need to repeat it here</span></pre>
-
-<pre class="python">firstName = "Martin"
-lastName = 'Quinson' <span class="comment"># both single and double quote work here</span>
-motto = "I never finish anyth' (but I keep trying)" <span class="comment"># having single quote within double quote is fine</span> 
-height=1.77 <span class="comment"># in meters</span>
-married=True <span class="comment"># the contrary would be written "False"</span></pre>
-
-<h3>Affectations</h3>
-
-<p>Once your variable is declared, you can <b>affect</b> a new value to it later in the program. That's really easy:</p> 
-<pre>x = 3[!java];[/!]</pre>
-
-<p>To the right of the equal symbol, you can put an arithmetic expression containing constants, variables and operations.</p>
-
-<pre>x = 3 + 2[!java];[/!]
-x = 3 * x[!java];[/!]
-greeting = "Hello "+name[!java];[/!] <span class="comment">[!python]#[/!][!scala|java]//[/!] + is (also) the operation to concatenate (ie, to join) strings</span></pre> 
-
-<h3>Exercise goal</h3>
-It is now time to do more challenging exercises, don't you think? 
-The objective is now to move forward until you find a baggle,
-pick it up, and then move back to your initial location before dropping the
-baggle.
-
-<h3>How to do this?</h3> 
-<p>To solve this problem, you have to decompose it in easier sub-parts. For
-example, you may want to do the following steps:
-<ol>
-  <li>Move forward until located over a baggle</li>
-  <li>Pickup the baggle</li>
-  <li>Move backward of the same amount of steps than done in first step</li>
-  <li>Drop back the baggle</li>
-</ol></p>
-
-<p>Naturally, it is impossible to do the right amount of steps backward at step
-3 if you didn't count the amount of steps done in the first phase. You can
-use a variable for that, which can be named <code>stepAmount</code>.</p>
-
-<p>Create an integer variable before phase 1, initialize it to 0,
-  and each time you move one step forward, increment its value by one
-  (<code>stepAmount = stepAmount + 1;</code>[!java] or <code>stepAmount++;</code>,
-  both syntaxes being equivalent[/!]).
-  Such variable which takes every values of a given range is often called a <b>stepper</b>.</p>
-  
-[!python|scala]
-<p>If you know Java or other languages, you will probably try to use the <code>++</code> 
-  operator to increment the variable, but it's not allowed in [!thelang]. 
-  This is because it would be difficult to define this operator for every data types. 
-  For example, what should ++ do when applied to a Complex value or to a String? 
-  The problem does not occur in Java as <code>int</code> is not an object but a primitive type. 
-  (if you don't know the <code>++</code>, just ignore this paragraph: it does not exist in [!thelang])</p>
-[/!]
-
-<p>Then, phase 3 consists in simply creating a new integer variable
-<code>doneSteps</code> initialized to 0, and do one step backward until
-<code>doneSteps</code> equals <code>stepAmount</code>, incrementing
-<code>doneSteps</code> each time.</p>
-
-<p>It's your turn now!</p>
+<h2>Storing and manipulating data</h2>
+  <p>The programs we wrote so far are missing a fundamental point in computing.
+   Actually, it is all about processing <b>data</b> through specific 
+   <b>instructions</b>. In the buggle world, the main data are a bit hidden behind 
+   the graphical representation, but that's no reason to never manipulate some 
+   data explicitly. 
+
+  <h3>Data in [!thelang]</h3>
+<p>In a program, you can use several <i>types</i> of data, such as integers or strings
+of chars. If you want to use a data several times, you need to store it
+within a <i>variable</i>, which is a memory cell containing a value:
+you put your data (say the value '5') in the variable (say 'length'), and you can retrieve it 
+latter when you need it. That's very similar to a box of label 'gift' in which you would put 
+some stuff, like a bottle of perfume "Channel N°5".  
+
+<h3>Variable declarations</h3>  
+
+<p><b>Declaring</b> (ie, creating) a variable in [!thelang], is very simple. You just need to write
+  [!java]its type, a space, and the variable name.[/!]
+  [!scala]the <code>var</code> keyword, the variable name, a column (:) and the variable type an equal sign (=) and an initial value.[/!]
+  [!python]the variable name, an equal sign (=) and an initial value.[/!]
+  The variable name is the label to retrieve it afterward[!python].[/!]
+  [!java|scala] while the type is the kind of data that this variable accepts to store.[/!]
+  It is forbidden to use spaces in variable names. You can name a variable <code>stepAmount</code> if you want, 
+  but <code>step amount</code> is not a valid name.
+  </p>
+
+[!java]
+  <p>So, to create a variable named <b>x</b> intended to contain integers, one should write:</p> 
+  <pre>int x;</pre>
+  <p>If you want, you can specify the initial value of the variable by adding a equal sign (=) followed by the value 
+     after the declaration.</p>
+  <pre>int x=5;</pre>
+[/!]
+
+[!python]
+  <p>So you want that the variable contains 5 as initial value, you should type: </p>
+  <pre>x = 5</pre>
+[/!]
+
+[!scala]
+  <p>So, to create a variable named <b>x</b> intended to contain integers with 42 as initial value, one should write:</p> 
+  <pre>var x:Int = 42</pre>
+  <p>In most cases, the compiler is able to guess the type of the variable from the initialization value, and you can omit it:</p>
+  <pre>var x = 42</pre>
+  <p>You still have to specify the if you use some generic values as an initialization, such as the very particular 
+     value <code>null</code>, which type happens to be ambigous. Even when the type is clear, you can still specify it if you prefer.
+   So you want that the variable contains 5 as initial value, you should type: </p>
+  <pre>var x: Int =  5 <span class="comment">// I can define the type if I want to</span>
+var y =  10      <span class="comment">// or I can omit the type if I prefer</span></pre>
+[/!]
+  
+[!java|scala]
+<p>As you can see, the variables are <b>typed</b> in [!thelang], which means that they are somehow specialized: 
+  A given variable can only store data of a given type; Don't even think of storing numbers in a variable that is tailored for letters!  
+  The [!thelang] language is said to be <b>statically typed</b>.</p>
+<p>Other languages (such as Python) are less picky and allow you to store any kind of data in any variable, without restriction 
+  (those languages are said to be <b>dynamically typed</b>).
+  This seems easier at the first glance, but this kind of restriction allows the compiler to catch 
+  more logic errors for you, which is also good. In some sense, Python is easier to write but errors can sneak in more easily than in [!thelang].</p>
+<p>Here are some existing types in [!thelang]:</p>
+<ul>
+  <li><b>[!java]int[/!][!scala]Int[/!]</b>, for integers;</li>
+  <li><b>[!java]double[/!][!scala]Double[/!]</b>, for dot numbers;</li> 
+  <li><b>[!java]boolean[/!][!scala]Boolean[/!]</b>, for booleans that are values being either true or false;</li>
+  <li><b>String</b>, for char strings.</li>
+</ul>
+[/!]
+
+[!python]
+<p>As you can see, the variables are not <b>typed</b> in Python, which means that they are not specialized in any type of data.
+  A given variable store any type of data of a given type: you can store a number in a variable and latter on store a number in the same variable.  
+  The values themselves are still typed, but not the variable. Python is said to be <b>dynamically typed</b>.</p>
+<p>Other languages (such as Java or Scala) are much more picky and prevent you to mix data types in a given variable (they are said to be <b>statically typed</b>).
+  This seems annoying at the first glance, but this kind of restriction allows the compiler to catch 
+  more logic errors for you, which is also good. In some sense, Python is easier to write but errors can sneak in more easily.</p>
+[/!]
+  
+
+<p class="scala">If you know that the value of your "variable" will never change (eg because it contains the screen 
+size or some other constant value), then you should make it a <b>value</b> instead of a variable. Simply change the 
+<code>var</code> keyword with the <code>val</code> one. The compiler can then perform more verifications and catch when 
+you inadvertently modify the value. More interestingly, the compiler can produce faster code in some cases.</p>
+
+<p>Variables work very similarly for strings, floating point numbers and boolean values.</p>
+
+<pre class="java">String name = "Martin Quinson";
+double height=1.77; <span class="comment">// in meters</span>
+boolean married=true;<span class="comment">// the contrary would be written "false"</span></pre>
+
+<pre class="scala">val name:String = "Martin Quinson"; <span class="comment">// this cannot be modified (it's a value)</span>
+var height: Double = 1.77; <span class="comment">// in meters</span>
+var married = true; <span class="comment">// the contrary would be written "false"</span>
+<span class="comment">// Scala knows that 'true' is a Boolean value, no need to repeat it here</span></pre>
+
+<pre class="python">firstName = "Martin"
+lastName = 'Quinson' <span class="comment"># both single and double quote work here</span>
+motto = "I never finish anyth' (but I keep trying)" <span class="comment"># having single quote within double quote is fine</span> 
+height=1.77 <span class="comment"># in meters</span>
+married=True <span class="comment"># the contrary would be written "False"</span></pre>
+
+<h3>Affectations</h3>
+
+<p>Once your variable is declared, you can <b>affect</b> a new value to it later in the program. That's really easy:</p> 
+<pre>x = 3[!java];[/!]</pre>
+
+<p>To the right of the equal symbol, you can put an arithmetic expression containing constants, variables and operations.</p>
+
+<pre>x = 3 + 2[!java];[/!]
+x = 3 * x[!java];[/!]
+greeting = "Hello "+name[!java];[/!] <span class="comment">[!python]#[/!][!scala|java]//[/!] + is (also) the operation to concatenate (ie, to join) strings</span></pre> 
+
+<h3>Exercise goal</h3>
+It is now time to do more challenging exercises, don't you think? 
+The objective is now to move forward until you find a baggle,
+pick it up, and then move back to your initial location before dropping the
+baggle.
+
+<h3>How to do this?</h3> 
+<p>To solve this problem, you have to decompose it in easier sub-parts. For
+example, you may want to do the following steps:
+<ol>
+  <li>Move forward until located over a baggle</li>
+  <li>Pickup the baggle</li>
+  <li>Move backward of the same amount of steps than done in first step</li>
+  <li>Drop back the baggle</li>
+</ol></p>
+
+<p>Naturally, it is impossible to do the right amount of steps backward at step
+3 if you didn't count the amount of steps done in the first phase. You can
+use a variable for that, which can be named <code>stepAmount</code>.</p>
+
+<p>Create an integer variable before phase 1, initialize it to 0,
+  and each time you move one step forward, increment its value by one
+  (<code>stepAmount = stepAmount + 1;</code>[!java] or <code>stepAmount++;</code>,
+  both syntaxes being equivalent[/!]).
+  Such variable which takes every values of a given range is often called a <b>stepper</b>.</p>
+  
+[!python|scala]
+<p>If you know Java or other languages, you will probably try to use the <code>++</code> 
+  operator to increment the variable, but it's not allowed in [!thelang]. 
+  This is because it would be difficult to define this operator for every data types. 
+  For example, what should ++ do when applied to a Complex value or to a String? 
+  The problem does not occur in Java as <code>int</code> is not an object but a primitive type. 
+  (if you don't know the <code>++</code>, just ignore this paragraph: it does not exist in [!thelang])</p>
+[/!]
+
+<p>Then, phase 3 consists in simply creating a new integer variable
+<code>doneSteps</code> initialized to 0, and do one step backward as
+long as <code>doneSteps</code> is not equal to
+<code>stepAmount</code>, incrementing <code>doneSteps</code> each
+time. The <code>!=</code> operator should be used to test the
+inequality (whether some values are NOT equal).</p> 
+
+<p>It's your turn now!</p>
diff --git a/src/lessons/welcome/variables/VariablesEntity.java b/src/lessons/welcome/variables/VariablesEntity.java
index d97788d..54a5169 100644
--- a/src/lessons/welcome/variables/VariablesEntity.java
+++ b/src/lessons/welcome/variables/VariablesEntity.java
@@ -5,12 +5,12 @@ import plm.core.model.Game;
 public class VariablesEntity extends plm.universe.bugglequest.SimpleBuggle {
 	@Override
 	public void forward(int i)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	@Override
 	public void backward(int i) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument in this exercise."));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 
diff --git a/src/lessons/welcome/variables/VariablesEntity.py b/src/lessons/welcome/variables/VariablesEntity.py
index b0cabc6..7ba0388 100644
--- a/src/lessons/welcome/variables/VariablesEntity.py
+++ b/src/lessons/welcome/variables/VariablesEntity.py
@@ -1,10 +1,10 @@
 def forward(i=1):
     if i>1:
-        errorMsg("Sorry Dave, I cannot let you use forward(i>1) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead.")
     entity.forward()
 def backward(i=1):
     if i>1:
-        errorMsg("Sorry Dave, I cannot let you use backward(i>1) in this exercise")
+        errorMsg("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead.")
     entity.backward()
 
 # BEGIN SOLUTION 
diff --git a/src/lessons/welcome/variables/VariablesEntity.scala b/src/lessons/welcome/variables/VariablesEntity.scala
index 3f4dd9f..8eb0978 100644
--- a/src/lessons/welcome/variables/VariablesEntity.scala
+++ b/src/lessons/welcome/variables/VariablesEntity.scala
@@ -4,11 +4,11 @@ import plm.core.model.Game
 
 class ScalaVariablesEntity extends plm.universe.bugglequest.SimpleBuggle {
 	override def forward(i: Int)  { 
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use forward with an argument"));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use forward with an argument in this exercise. Use a loop instead."));
 	}
 
 	override def backward(i: Int) {
-		throw new RuntimeException(Game.i18n.tr("I'm sorry Dave, I'm affraid I can't let you use backward with an argument"));
+		throw new RuntimeException(Game.i18n.tr("Sorry Dave, I cannot let you use backward with an argument in this exercise. Use a loop instead."));
 	}
 
 
diff --git a/src/plm/core/model/Game.java b/src/plm/core/model/Game.java
index 6147d8c..adae1fe 100644
--- a/src/plm/core/model/Game.java
+++ b/src/plm/core/model/Game.java
@@ -106,6 +106,8 @@ public class Game implements IWorldView {
 	public static final String PROP_PROGRESS_APPENGINE = "plm.progress.appengine"; // Whether the progresses should be posted to the appengine (default: false)
 	public static final String PROP_APPENGINE_URL = "plm.appengine.url"; // Where to find the appengine. This is related to the teacher console, that should be rewritten at some point.
 	
+	public static final String SESSION_CLOUD_PROVIDER_URL = "plm.session.cloud.provider.url";
+	
 	public static final String PROP_PROGRAMING_LANGUAGE = "plm.programingLanguage";
 
 	public static final String PROP_FONT_SIZE = "plm.display.fontsize"; // the CSS property of the font size
@@ -644,6 +646,7 @@ public class Game implements IWorldView {
 		this.setState(GameState.SAVING);
 		this.sessionKit.storeAll(SAVE_DIR);
 		this.setState(GameState.SAVING_DONE);
+		storeProperties();
 	}
 
 	public ISessionKit getSessionKit() {
@@ -1046,8 +1049,9 @@ public class Game implements IWorldView {
 		HOME_DIR + File.separator + ".plm", /* preferred, default directory name */
 		HOME_DIR + File.separator + "_plm", /* Some paranoid administrator refuse directories which name starts with a dot */
 		HOME_DIR + File.separator + "plm",  /* one day, hidden directories with make trouble... */
-		"z:"     + File.separator + ".plm", /* windows-preferred directory name */
-		"z:"     + File.separator + "_plm",
+		"h:"     + File.separator + "_plm", /* windows-preferred directory name */
+		"h:"     + File.separator + "plm",
+		"z:"     + File.separator + "_plm", /* windows-preferred directory name */
 		"z:"     + File.separator + "plm",
 	};
 	private static File SAVE_DIR = initializeSaveDir();
@@ -1063,24 +1067,21 @@ public class Game implements IWorldView {
 						if (res.canWrite()) {
 							return res;
 						} else {
-							System.out.println(i18n.tr("{0} is not writable",res.getAbsolutePath()));
+							System.out.println(res.getAbsolutePath()+" is not writable.");
 							continue;
 						}
 					} else {
-						System.out.println(i18n.tr("{0} is not a directory",res.getAbsolutePath()));
+						System.out.println(res.getAbsolutePath()+" is not a directory.");
 						continue;
 					}
 				}
 				if (res.mkdir())
 					return res;
-				else {
-					System.out.println(i18n.tr("Cannot create {0}",res.getAbsolutePath()));
-				}
 			} catch (SecurityException e) {
 				e.getLocalizedMessage();
 			}
 		}
-		throw new RuntimeException(i18n.tr("Impossible to find a path for PLM data. Tested {0}",sb.toString()));
+		throw new RuntimeException("Impossible to find a path for PLM data. Tested "+sb.toString());
 	}
 	public static String getSavingLocation() {
 		return SAVE_DIR.getPath();
diff --git a/src/plm/core/model/LessonRunner.java b/src/plm/core/model/LessonRunner.java
index 846a3c4..5dbf7e1 100644
--- a/src/plm/core/model/LessonRunner.java
+++ b/src/plm/core/model/LessonRunner.java
@@ -60,8 +60,9 @@ public class LessonRunner extends Thread {
 			
 			exo.run(runners);
 			while (runners.size()>0) {
-				Thread t = runners.remove(0);
+				Thread t = runners.get(0); // leave the thread into the set so that it remains interruptible
 				t.join();
+				runners.remove(t);
 			}
 			
 			if (!game.isCreativeEnabled())
diff --git a/src/plm/core/ui/ExerciseFailedDialog.java b/src/plm/core/ui/ExerciseFailedDialog.java
index f583e10..a41fbbe 100644
--- a/src/plm/core/ui/ExerciseFailedDialog.java
+++ b/src/plm/core/ui/ExerciseFailedDialog.java
@@ -1,5 +1,6 @@
 package plm.core.ui;
 
+import java.awt.Dimension;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
 
@@ -7,6 +8,7 @@ import javax.swing.Icon;
 import javax.swing.JButton;
 import javax.swing.JDialog;
 import javax.swing.JLabel;
+import javax.swing.JPanel;
 import javax.swing.JScrollPane;
 import javax.swing.JTextArea;
 import javax.swing.UIManager;
@@ -16,6 +18,7 @@ import net.miginfocom.swing.MigLayout;
 import org.xnap.commons.i18n.I18n;
 import org.xnap.commons.i18n.I18nFactory;
 
+import plm.core.model.Game;
 import plm.core.model.lesson.ExecutionProgress;
 
 public class ExerciseFailedDialog extends JDialog {
@@ -25,39 +28,72 @@ public class ExerciseFailedDialog extends JDialog {
 
 
 	public ExerciseFailedDialog(ExecutionProgress ep) {
-		super(MainFrame.getInstance(), "Exercise failed /o\\", true);
+		super(MainFrame.getInstance(), "Mmm, not quite /o\\", false);
 		
-		this.setTitle(i18n.tr("Exercise failed /o\\"));
+		this.setTitle(i18n.tr("Mmm, not quite /o\\"));
 		
 		setLayout(new MigLayout("fill",""));
 		add(new JLabel( (Icon) UIManager.getLookAndFeelDefaults().get("OptionPane.errorIcon") ));
+
+		JButton close = new JButton(i18n.tr("Close"));
+		close.addActionListener(new ActionListener() {
+			
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				dispose();
+			}
+		});
 		
 		JLabel msg;
 		JTextArea ta = new JTextArea();
 		ta.setEditable(false);
 		if (ep.compilationError == null) { 
-			msg = new JLabel(i18n.tr("You didn't manage to reach your objective." ));
+			msg = new JLabel(i18n.tr("<html>You didn't manage to reach your objective. <br>\n"
+					+ "You should graphically compare the final state of your world <br>\n"
+					+ "with the objective to understand the problem. <br>\n"
+					+ "If you don't see the error, check the details below to for a <br>\n"
+					+ "textual description of this difference between both worlds.</html>" ));
 			ta.setText(ep.details);
+			ta.setCaretPosition(0);
 		} else {
-			msg = new JLabel( i18n.tr("Compilation error") );
+			msg = new JLabel( i18n.tr("<html>Compilation error.<br>\n"
+					+ "You can find below the detailed error message (as given by {0}).<br>\n"
+					+ "Please read it carfully to understand the problem, and fix your code.</html>",
+						Game.getProgrammingLanguage().getLang()) );
 			ta.setText(ep.compilationError);
+			ta.setCaretPosition(0);
 		}
-		ta.setCaretPosition(0);
 		add(msg,"wrap");
-		add(new JScrollPane(ta),"spanx, grow, growprio 200, wrap");
-		
-		JButton close = new JButton(i18n.tr("Close"));
-		close.addActionListener(new ActionListener() {
-			
-			@Override
-			public void actionPerformed(ActionEvent e) {
-				dispose();
-			}
-		});
-		add(close,"span, alignx 50%");
-		
-		
+		final JScrollPane sp = new JScrollPane(ta);
+		if (ep.compilationError == null) {
+			sp.setPreferredSize(new Dimension(0, 250));
+			JPanel buttons = new JPanel();
+			final JButton detailsBt = new JButton(i18n.tr("Details >>"));
+			detailsBt.addActionListener(new ActionListener() {
+				boolean shown = false;
+				
+				@Override
+				public void actionPerformed(ActionEvent e) {
+					if (shown) {
+						detailsBt.setText(i18n.tr("Details >>"));
+						remove(sp);
+					} else {
+						detailsBt.setText(i18n.tr("Details <<"));
+						add(sp,"spanx, grow, growprio 200, wrap");
+					}
+					shown = !shown;
+					ExerciseFailedDialog.this.pack();
+				}
+			});
+			buttons.add(detailsBt);
+			buttons.add(close);
+			add(buttons,"span, alignx 50%");
+		} else {
+			add(sp,"spanx, grow, growprio 200, wrap");			
+			add(close,"span, alignx 50%");
+		}
 		pack();
+		setMinimumSize(getSize());
 		close.requestFocusInWindow();
 		setVisible(true);
 	}
diff --git a/src/plm/core/ui/FeedbackDialog.java b/src/plm/core/ui/FeedbackDialog.java
index 9e7bba6..dbb4e91 100644
--- a/src/plm/core/ui/FeedbackDialog.java
+++ b/src/plm/core/ui/FeedbackDialog.java
@@ -36,16 +36,18 @@ public class FeedbackDialog extends JDialog {
 	private static FeedbackDialog instance = null;
 	
 	public I18n i18n = I18nFactory.getI18n(getClass(),"org.plm.i18n.Messages",getLocale(), I18nFactory.FALLBACK);
-
+	final JEditorPane feedback = new JEditorPane();
 	
 	public static FeedbackDialog getInstance() {
 		if (FeedbackDialog.instance == null)
 			FeedbackDialog.instance = new FeedbackDialog();
+		FeedbackDialog.instance.feedback.setText(FeedbackDialog.instance.i18n.tr("(your feedback comes here)"));
+
 		return FeedbackDialog.instance;
 	}
 	
 	private FeedbackDialog() {
-		super(MainFrame.getInstance(), "Report your feedback", true);
+		super(MainFrame.getInstance(), "Report your feedback", false);
 		this.setTitle(i18n.tr("Report your feedback"));
 		initComponent();
 	}
@@ -74,8 +76,6 @@ public class FeedbackDialog extends JDialog {
 		explain.setEditable(false);
 		add(explain, BorderLayout.NORTH);
 		
-		final JEditorPane feedback = new JEditorPane();
-		
 		feedback.setBackground(Color.white);
 		feedback.setOpaque(true);
 		feedback.setEditable(true);
diff --git a/src/plm/core/ui/MainFrame.java b/src/plm/core/ui/MainFrame.java
index 2262256..71330ec 100644
--- a/src/plm/core/ui/MainFrame.java
+++ b/src/plm/core/ui/MainFrame.java
@@ -41,8 +41,10 @@ import plm.core.model.ProgrammingLanguage;
 import plm.core.model.lesson.Exercise;
 import plm.core.model.lesson.Lecture;
 import plm.core.ui.action.AbstractGameAction;
+import plm.core.ui.action.ExportCloudSession;
 import plm.core.ui.action.ExportSession;
 import plm.core.ui.action.HelpMe;
+import plm.core.ui.action.ImportCloudSession;
 import plm.core.ui.action.ImportSession;
 import plm.core.ui.action.PlayDemo;
 import plm.core.ui.action.QuitGame;
@@ -75,7 +77,7 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
     private JMenu menuFile;
     private JMenuItem miFileLoad,miFileSwitch,miFileExercise,miFileConsole=null,miFileCourse,miFileQuit;
     private JMenu menuSession;
-    private JMenuItem miSessionRevert, miSessionExport, miSessionImport, miSessionDebug, miSessionCreative;
+    private JMenuItem miSessionRevert, miSessionExport, miSessionImport, miSessionExportToCloud, miSessionImportFromCloud, miSessionDebug, miSessionCreative;
 
     private JMenu menuLanguage, menuLangHuman, menuLangProg;
     private JMenu menuHelp;
@@ -262,6 +264,16 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 				null, this));
 		menuSession.add(miSessionImport);
 
+		
+		miSessionExportToCloud = new JMenuItem(new ExportCloudSession(g, i18n.tr("Export Session Cache to Cloud"),	null, this));
+		menuSession.add(miSessionExportToCloud);
+
+		miSessionImportFromCloud = new JMenuItem(new ImportCloudSession(g, i18n.tr("Import Session Cache from Cloud"),
+				null, this));
+		menuSession.add(miSessionImportFromCloud);
+
+		
+		
 		miSessionDebug = new JCheckBoxMenuItem(new AbstractGameAction(g, i18n.tr("Debug mode"), null, KeyEvent.VK_D) {
 			private static final long serialVersionUID = 1L;
 
@@ -669,6 +681,9 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 		miSessionRevert.setText(i18n.tr("Revert Exercise"));
 		miSessionExport.setText(i18n.tr("Export Session Cache"));
 		miSessionImport.setText(i18n.tr("Import Session Cache"));
+		miSessionExportToCloud.setText(i18n.tr("Export Session Cache to Cloud"));
+		miSessionImportFromCloud.setText(i18n.tr("Import Session Cache from Cloud"));
+		
 		miSessionDebug.setText(i18n.tr("Debug mode"));
 		miSessionDebug.setText(i18n.tr("Creative mode"));
 
diff --git a/src/plm/core/ui/PlmHtmlEditorKit.java b/src/plm/core/ui/PlmHtmlEditorKit.java
index a305498..ff5c362 100644
--- a/src/plm/core/ui/PlmHtmlEditorKit.java
+++ b/src/plm/core/ui/PlmHtmlEditorKit.java
@@ -67,7 +67,7 @@ public class PlmHtmlEditorKit extends HTMLEditorKit {
 		}
 		
 		String res = in.replaceAll("\\[!thelang/?\\]", "[!java]Java[/!][!python]python[/!][!scala]Scala[/!]");
-		res = res.replaceAll("\\[!configfile/?\\]", Game.getSavingLocation()+File.separator+"plm.properties");
+		res = res.replaceAll("\\[!configfile/?\\]", Game.getSavingLocation()+File.separator+"plm.properties".replaceAll("\\\\", "\\\\"));
 		
 		/* Display everything when in debug mode, with shiny colors */
 		if (showAll) {
diff --git a/src/plm/core/ui/action/ExportCloudSession.java b/src/plm/core/ui/action/ExportCloudSession.java
new file mode 100644
index 0000000..1191986
--- /dev/null
+++ b/src/plm/core/ui/action/ExportCloudSession.java
@@ -0,0 +1,141 @@
+package plm.core.ui.action;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.File;
+import java.io.FileInputStream;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.util.zip.Deflater;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipOutputStream;
+
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.HttpVersion;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.params.CoreProtocolPNames;
+import org.apache.http.util.EntityUtils;
+import org.apache.http.entity.mime.HttpMultipartMode;
+import org.apache.http.entity.mime.MultipartEntity;
+import org.apache.http.entity.mime.content.FileBody;
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+
+import plm.core.model.Game;
+import plm.core.model.session.ZipSessionKit;
+import plm.core.utils.FileUtils;
+
+public class ExportCloudSession extends AbstractGameAction {
+
+	private static final long serialVersionUID = 111337614106936502L;
+	private Component parent;
+
+	public ExportCloudSession(Game game, String text, ImageIcon icon, Component parent) {
+		super(game, text, icon);
+		this.parent = parent;
+	}
+	
+	private void zipSessionPackage(File srcDir, File packageFile) throws IOException {
+		ZipOutputStream zos = null;
+
+		try {
+			zos = new ZipOutputStream(new FileOutputStream(packageFile));
+			zos.setMethod(ZipOutputStream.DEFLATED);
+			zos.setLevel(Deflater.BEST_COMPRESSION);
+
+			final int BUFFER_SIZE = 1024 * 100;
+			byte[] buffer = new byte[BUFFER_SIZE];
+			for (final File aFile : srcDir.listFiles()) {
+				FileInputStream fis = new FileInputStream(aFile);
+				zos.putNextEntry(new ZipEntry(aFile.getName()));
+				int bytes;
+				while ((bytes = fis.read(buffer)) > 0) {
+					zos.write(buffer, 0, bytes);
+				}
+				zos.closeEntry();
+				fis.close();
+			}
+		} finally {
+			if (zos != null)
+				zos.close();
+		}
+	}
+
+	private String uploadSessionPackage(File tmpFile) throws IOException {
+		HttpClient client = new DefaultHttpClient();
+		try {
+			client.getParams().setParameter(CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
+
+			String sessionCloudProviderURL = Game.getProperty(
+					Game.SESSION_CLOUD_PROVIDER_URL, "none", false);
+			if (sessionCloudProviderURL == null || sessionCloudProviderURL.equals("none"))
+				throw new IOException(Game.i18n.tr("No session cloud provider provided (property {0} is {1}). Please update your property file.",
+						Game.SESSION_CLOUD_PROVIDER_URL,sessionCloudProviderURL));
+			HttpPost post = new HttpPost(sessionCloudProviderURL + "/upload.php");
+			MultipartEntity entity = new MultipartEntity(HttpMultipartMode.BROWSER_COMPATIBLE);
+
+			entity.addPart("session_file", new FileBody(tmpFile, "application/zip"));
+			// entity.addPart("login", new StringBody("anonymous".toString(), "text/plain", Charset.forName("UTF-8")));
+			post.setEntity(entity);
+
+			String response = null;
+			HttpResponse res = client.execute(post);
+			if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+				response = EntityUtils.toString(res.getEntity(), "UTF-8");
+			}
+
+			if (response != null) {
+				JSONObject o = (JSONObject) JSONValue.parse(response);
+				if (((Boolean) o.get("success")).booleanValue()) {
+					String fileID = (String) ((JSONObject) o.get("payload")).get("code");
+					return fileID;
+				} else {
+					String errorMessage = (String) o.get("error");
+					throw new IOException(errorMessage);
+				}
+			} else {
+				throw new IOException(res.getStatusLine().getReasonPhrase());
+			}
+		} finally {
+			client.getConnectionManager().shutdown();
+		}
+	}
+	
+	@Override
+	public void actionPerformed(ActionEvent e) {		
+		File tmpDir = null;
+		File tmpFile = null;
+
+		try {
+			tmpDir = FileUtils.createTemporaryDirectory();			
+			ZipSessionKit kit = new ZipSessionKit(this.game);
+			kit.storeAll(tmpDir);
+
+			tmpFile = FileUtils.createTemporaryFilename();
+			zipSessionPackage(tmpDir, tmpFile);
+			String fileID = uploadSessionPackage(tmpFile);
+
+			JOptionPane.showMessageDialog(this.parent,
+					Game.i18n.tr("<html>Please remember the following code:<br/><h1>{0}</h1><br/>You will need it to import your session.</html>",fileID),
+					Game.i18n.tr("Export success"),
+					JOptionPane.INFORMATION_MESSAGE
+					);			
+		} catch (Exception ex) {
+			JOptionPane.showMessageDialog(this.parent,
+					Game.i18n.tr("<html>Export to cloud failed.<br/>{0}<br/>Caution! Your session is not saved yet.</html>",ex.getMessage()),
+				    Game.i18n.tr("Export error"),
+				    JOptionPane.ERROR_MESSAGE);	
+		} finally {
+			if (tmpDir != null)
+				tmpDir.delete();		
+			if (tmpFile != null)
+				tmpFile.delete();			
+		}
+	}	
+}
diff --git a/src/plm/core/ui/action/ImportCloudSession.java b/src/plm/core/ui/action/ImportCloudSession.java
new file mode 100644
index 0000000..69ce0c8
--- /dev/null
+++ b/src/plm/core/ui/action/ImportCloudSession.java
@@ -0,0 +1,170 @@
+package plm.core.ui.action;
+
+import java.awt.Component;
+import java.awt.event.ActionEvent;
+import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.File;
+import java.io.FileOutputStream;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Enumeration;
+import java.util.zip.ZipEntry;
+import java.util.zip.ZipFile;
+
+import javax.swing.ImageIcon;
+import javax.swing.JOptionPane;
+
+import org.apache.http.HttpEntity;
+import org.apache.http.HttpResponse;
+import org.apache.http.HttpStatus;
+import org.apache.http.HttpVersion;
+import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpGet;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.params.CoreProtocolPNames;
+
+import plm.core.model.Game;
+import plm.core.model.session.ZipSessionKit;
+import plm.core.utils.FileUtils;
+
+public class ImportCloudSession extends AbstractGameAction {
+
+	private static final long serialVersionUID = -2811343885543779962L;
+	private Component parent;
+
+	public ImportCloudSession(Game game, String text, ImageIcon icon,
+			Component parent) {
+		super(game, text, icon);
+		this.parent = parent;
+	}
+
+	private void downloadSessionPackage(String fileID, File destFile) throws IOException {
+		HttpClient client = null;
+
+		try {
+			client = new DefaultHttpClient();
+			client.getParams().setParameter(
+					CoreProtocolPNames.PROTOCOL_VERSION, HttpVersion.HTTP_1_1);
+
+			String sessionCloudProviderURL = Game.getProperty(
+					Game.SESSION_CLOUD_PROVIDER_URL, "none", false);
+			if (sessionCloudProviderURL == null || sessionCloudProviderURL.equals("none"))
+				throw new IOException(Game.i18n.tr("No session cloud provider provided (property {0} is {1}). Please update your property file.",
+						Game.SESSION_CLOUD_PROVIDER_URL,sessionCloudProviderURL));
+
+			HttpGet get = new HttpGet(sessionCloudProviderURL + "/download/"
+					+ fileID);
+			HttpResponse res = client.execute(get);
+
+			if (res.getStatusLine().getStatusCode() == HttpStatus.SC_OK) {
+				HttpEntity entity = res.getEntity();
+				if (entity != null) {
+					BufferedInputStream bis = null;
+					BufferedOutputStream bos = null;
+					try {
+						bis = new BufferedInputStream(entity.getContent());
+						bos = new BufferedOutputStream(new FileOutputStream(
+								destFile));
+
+						int inByte;
+						while ((inByte = bis.read()) != -1) {
+							bos.write(inByte);
+						}
+					} finally {
+						if (bos != null)
+							bos.close();
+						if (bis != null)
+							bis.close();
+						if (get != null)
+							get.abort();
+					}
+				}
+			}
+		} finally {
+			if (client != null)
+				client.getConnectionManager().shutdown();
+		}
+	}
+
+	private void unzipSessionPackage(File packageFile, File destDir)
+			throws IOException {
+		final int BUFFER_SIZE = 1024 * 100;
+
+		ZipFile zf = null;
+		BufferedOutputStream bos = null;
+		InputStream zis = null;
+		try {
+			zf = new ZipFile(packageFile);
+
+			Enumeration<? extends ZipEntry> entries = zf.entries();
+
+			while (entries.hasMoreElements()) {
+				ZipEntry entry = entries.nextElement();
+				String outputFilename = destDir + File.separator
+						+ entry.getName();
+				int readBytes;
+				byte data[] = new byte[BUFFER_SIZE];
+				bos = new BufferedOutputStream(new FileOutputStream(
+						outputFilename), BUFFER_SIZE);
+				zis = zf.getInputStream(entry);
+				while ((readBytes = zis.read(data, 0, BUFFER_SIZE)) != -1) {
+					bos.write(data, 0, readBytes);
+				}
+				bos.flush();
+			}
+		} finally {
+			if (zis != null)
+				zis.close();
+			if (bos != null)
+				bos.close();
+			if (zf != null)
+				zf.close();
+		}
+	}
+
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		String fileID = JOptionPane
+				.showInputDialog(
+						this.parent,
+						i18n.tr("Please enter your personal code to retrieve your session"),
+						i18n.tr("Session code"), JOptionPane.WARNING_MESSAGE);
+		if (fileID == null) {
+			return;
+		}
+
+		File tmpDir = null;
+		File tmpFile = null;
+		try {
+			tmpDir = FileUtils.createTemporaryDirectory();
+			tmpFile = FileUtils.createTemporaryFilename();
+
+			downloadSessionPackage(fileID, tmpFile);
+			unzipSessionPackage(tmpFile, tmpDir);
+
+			ZipSessionKit kit = new ZipSessionKit(this.game);
+			kit.loadAll(tmpDir);
+
+			JOptionPane.showMessageDialog(this.parent,
+					i18n.tr("Your session has been successfully imported."),
+					i18n.tr("Importation suceeded"), JOptionPane.INFORMATION_MESSAGE);
+
+		} catch (IOException ex) {
+			JOptionPane.showMessageDialog(this.parent,
+					i18n.tr("A {0} exception occured while importing your session: {1}"+ex.getClass().getName(),ex.getLocalizedMessage()), 
+					i18n.tr("Importation error"),
+					JOptionPane.ERROR_MESSAGE);
+			// TODO: we should log the real exception message in order to be
+			// able to debug the failure.
+		} finally {
+			if (tmpDir != null) {
+				tmpDir.delete();
+			}
+			if (tmpFile != null) {
+				tmpFile.delete();
+			}
+		}
+	}
+
+}
diff --git a/src/plm/core/utils/FileUtils.java b/src/plm/core/utils/FileUtils.java
index 8494ccb..bf70850 100644
--- a/src/plm/core/utils/FileUtils.java
+++ b/src/plm/core/utils/FileUtils.java
@@ -132,4 +132,35 @@ public class FileUtils {
 		}
 		return sb;
 	}
+	
+	
+	/**
+	 * Create a temporary directory in a temp dir.
+	 * 
+	 * @return The File referring to the newly created temp directory. 
+	 * @throws IOException
+	 */
+	public static File createTemporaryDirectory() throws IOException {
+		File tmpDir = File.createTempFile("plm-", ".dir");
+		if(!(tmpDir.delete()))
+	        throw new IOException("Could not delete temp file: " + tmpDir.getAbsolutePath());
+	    if(!(tmpDir.mkdir()))
+	        throw new IOException("Could not create temp directory: " + tmpDir.getAbsolutePath());			
+	    return tmpDir;		
+	}
+	
+	/**
+	 * Create a temporary file then remove it. 
+	 * Therefore the temporary filename (and path) can be reused.
+	 * 
+	 * @return The File which is located in a temp.
+	 * @throws IOException
+	 */
+	public static File createTemporaryFilename() throws IOException {
+		File tmpFile = File.createTempFile("full-plm", ".sfs");
+		if(!(tmpFile.delete()))
+	        throw new IOException("Could not delete temp file: " + tmpFile.getAbsolutePath());
+		return tmpFile;
+	}
+
 }
diff --git a/src/plm/core/utils/PlmSyntaxPane.java b/src/plm/core/utils/PlmSyntaxPane.java
index 313b52c..85c30a1 100644
--- a/src/plm/core/utils/PlmSyntaxPane.java
+++ b/src/plm/core/utils/PlmSyntaxPane.java
@@ -14,6 +14,7 @@ import jsyntaxpane.SyntaxStyle;
 import jsyntaxpane.SyntaxStyles;
 import jsyntaxpane.TokenType;
 import jsyntaxpane.syntaxkits.JavaSyntaxKit;
+import jsyntaxpane.syntaxkits.PlainSyntaxKit;
 import jsyntaxpane.syntaxkits.PythonSyntaxKit;
 import jsyntaxpane.syntaxkits.ScalaSyntaxKit;
 import jsyntaxpane.syntaxkits.XHTMLSyntaxKit;
@@ -41,15 +42,18 @@ public class PlmSyntaxPane {
 		st.put(TokenType.STRING, new SyntaxStyle(new Color(0x3600ff), false, false)); // blue
 		st.put(TokenType.DEFAULT, new SyntaxStyle(Color.BLACK, false, false)); // black
 
+		Configuration plainConf = PlainSyntaxKit.getConfig(PlainSyntaxKit.class);
 		Configuration javaConf = JavaSyntaxKit.getConfig(JavaSyntaxKit.class);
 		Configuration pyConf = PythonSyntaxKit.getConfig(PythonSyntaxKit.class);
 		Configuration scalaConf = ScalaSyntaxKit.getConfig(ScalaSyntaxKit.class);
 		Configuration xhtmlConf = XHTMLSyntaxKit.getConfig(XHTMLSyntaxKit.class);
 
+		plainConf.put("DefaultFont", "monospaced 12");
 		javaConf.put("DefaultFont", "monospaced 12");
 		pyConf.put("DefaultFont", "monospaced 12");
 		scalaConf.put("DefaultFont", "monospaced 12");
 
+		setupKit(plainConf);
 		setupKit(javaConf);
 		setupKit(pyConf);
 		setupKit(scalaConf);
diff --git a/src/plm/universe/Direction.java b/src/plm/universe/Direction.java
index 69f834d..a7b1ecb 100644
--- a/src/plm/universe/Direction.java
+++ b/src/plm/universe/Direction.java
@@ -2,6 +2,8 @@ package plm.universe;
 
 import java.awt.Point;
 
+import plm.core.model.Game;
+
 
 // TODO: rewrite using enumeration
 public class Direction {
@@ -16,11 +18,8 @@ public class Direction {
 	public static final int WEST_VALUE = 3;
 
 	public static final Direction NORTH = new Direction(NORTH_VALUE);
-
 	public static final Direction EAST = new Direction(EAST_VALUE);
-
 	public static final Direction SOUTH = new Direction(SOUTH_VALUE);
-
 	public static final Direction WEST = new Direction(WEST_VALUE);
 
 	private static final Direction rights[] = { EAST, SOUTH, WEST, NORTH };
@@ -57,13 +56,13 @@ public class Direction {
 	public String toString() {
 		switch (value) {
 		case NORTH_VALUE:
-			return "NORTH";
+			return Game.i18n.tr("NORTH");
 		case EAST_VALUE:
-			return "EAST";
+			return Game.i18n.tr("EAST");
 		case SOUTH_VALUE:
-			return "SOUTH";
+			return Game.i18n.tr("SOUTH");
 		case WEST_VALUE:
-			return "WEST";
+			return Game.i18n.tr("WEST");
 		default:
 			return "Unknown direction";
 		}
@@ -109,4 +108,10 @@ public class Direction {
 			return false;
 		return true;
 	}
+	
+	/* BINDINGS TRANSLATION: French */
+	public static final Direction NORD = NORTH;
+	public static final Direction EST = EAST;
+	public static final Direction SUD = SOUTH;
+	public static final Direction OUEST = WEST;
 }
diff --git a/src/plm/universe/EntityControlPanel.java b/src/plm/universe/EntityControlPanel.java
index 0f2297e..38f32c1 100644
--- a/src/plm/universe/EntityControlPanel.java
+++ b/src/plm/universe/EntityControlPanel.java
@@ -17,6 +17,12 @@ public abstract class EntityControlPanel extends JPanel implements HumanLangChan
 	public I18n i18n = I18nFactory.getI18n(getClass(),"org.plm.i18n.Messages",Game.getInstance().getLocale(), I18nFactory.FALLBACK);
 	
 	public void currentHumanLanguageHasChanged(Locale newLang) {
-		i18n = I18nFactory.getI18n(getClass(),"org.plm.i18n.Messages",newLang, I18nFactory.FALLBACK);
+		if (newLang!=null)
+			i18n = I18nFactory.getI18n(getClass(),"org.plm.i18n.Messages",newLang, I18nFactory.FALLBACK);
+	}
+	
+	/** Do a textual output corresponding to the fact that a button was pressed. This is a direct help */
+	protected void echo(String name) {
+		System.out.println(name+(Game.getProgrammingLanguage()==Game.JAVA?";":""));
 	}
 }
diff --git a/src/plm/universe/bat/BatEntity.java b/src/plm/universe/bat/BatEntity.java
index 16b8ce9..4b18eea 100644
--- a/src/plm/universe/bat/BatEntity.java
+++ b/src/plm/universe/bat/BatEntity.java
@@ -62,7 +62,7 @@ public class BatEntity extends Entity {
 				try {
 					run(t);
 				} catch (Exception e) {
-					t.setResult(Game.i18n.tr("This test raised an exception: {0}",e.getMessage()));
+					t.setResult(Game.i18n.tr("This test raised a {0} exception: {1}",e.getClass().getName(), e.getMessage()));
 				}
 		} else if (pl.equals(Game.PYTHON)) {
 			ScriptEngine engine ;
@@ -91,7 +91,7 @@ public class BatEntity extends Entity {
 					engine.put("thetest",t);
 					engine.eval("thetest.setResult("+t.getName()+")");
 				} catch (Exception e) {
-					t.setResult(Game.i18n.tr("This test raised an exception: {0}",e.getMessage()));
+					t.setResult(Game.i18n.tr("This test raised a {0} exception: {1}",e.getClass().getName(), e.getMessage()));
 				}
 		} else {
 			throw new RuntimeException("BatWorld was not ported to "+pl.getLang()+" yet.");
diff --git a/src/plm/universe/bugglequest/AbstractBuggle.java b/src/plm/universe/bugglequest/AbstractBuggle.java
index 18158dd..1dcdd10 100644
--- a/src/plm/universe/bugglequest/AbstractBuggle.java
+++ b/src/plm/universe/bugglequest/AbstractBuggle.java
@@ -11,6 +11,7 @@ import plm.universe.World;
 import plm.universe.bugglequest.exception.AlreadyHaveBaggleException;
 import plm.universe.bugglequest.exception.BuggleInOuterSpaceException;
 import plm.universe.bugglequest.exception.BuggleWallException;
+import plm.universe.bugglequest.exception.DontHaveBaggleException;
 import plm.universe.bugglequest.exception.NoBaggleUnderBuggleException;
 
 public abstract class AbstractBuggle extends Entity {
@@ -347,7 +348,9 @@ public abstract class AbstractBuggle extends Entity {
 		carryBaggle = true;
 	}
 
-	public void dropBaggle() throws AlreadyHaveBaggleException {
+	public void dropBaggle() throws AlreadyHaveBaggleException, DontHaveBaggleException {
+		if (! isCarryingBaggle())
+			throw new DontHaveBaggleException();
 		getCellFromLesson(this.x, this.y).baggleAdd();
 		carryBaggle = false;
 	}
@@ -468,7 +471,7 @@ public abstract class AbstractBuggle extends Entity {
 	public boolean estSurBiscuit()        { return isOverBaggle(); }
 	public boolean porteBiscuit()         { return isCarryingBaggle(); }
 	public void prendBiscuit() throws AlreadyHaveBaggleException, NoBaggleUnderBuggleException { pickupBaggle(); }
-	public void poseBiscuit()  throws AlreadyHaveBaggleException                               { dropBaggle(); }
+	public void poseBiscuit()  throws AlreadyHaveBaggleException, DontHaveBaggleException      { dropBaggle(); }
 	public boolean estSurMessage()        { return isOverMessage(); }
 	public String litMessage()            { return readMessage(); }
 	public void ecritMessage(String s)    { writeMessage(s); }
diff --git a/src/plm/universe/bugglequest/BuggleWorld.fr.html b/src/plm/universe/bugglequest/BuggleWorld.fr.html
index 6f2a582..86d1d00 100644
--- a/src/plm/universe/bugglequest/BuggleWorld.fr.html
+++ b/src/plm/universe/bugglequest/BuggleWorld.fr.html
@@ -12,9 +12,9 @@ objets, colorier le sol, se cogner à des murs, etc.
           [!java]void [/!]droite()<br/>
           [!java]void [/!]retourne()<br/>
           [!java]void [/!]avance() ou [!java]void [/!]avance([!java]int
-[/!]steps[!scala]:Int[/!])<br/>
+[/!]nbPas[!scala]:Int[/!])<br/>
           [!java]void [/!]recule() or [!java]void [/!]recule([!java]int
-[/!]steps[!scala]:Int[/!])<br/></td></tr>
+[/!]nbPas[!scala]:Int[/!])<br/></td></tr>
   <tr><td><b>Obtenir l'abcisse<br/>Obtenir l'ordonnée<br/>Changer l'abcisse<br/>Changer l'ordonnée<br/>Changer la position</b></td>
       <td>[!java]int [/!]getX()[!scala]:Int[/!]<br/>
           [!java]int [/!]getY()[!scala]:Int[/!]<br/>
@@ -33,8 +33,8 @@ objets, colorier le sol, se cogner à des murs, etc.
   <tr><td><b>Obtenir la direction<br/>Changer la direction</b><br/>Les directions valides sont :</td>
       <td>[!java]Direction [/!]getDirection()[!scala]:Direction[/!]<br/>
           [!java]void [/!]setDirection([!java]Direction [/!]dir[!scala]:Direction[/!])<br/>
-          Direction.NORTH (le nord), Direction.EAST (l'est), Direction.SOUTH (le sud)
-et Direction.WEST (l'ouest)</td></tr>
+          Direction.NORD (le nord), Direction.EST (l'est), Direction.SUD (le sud) et
+Direction.OUEST (l'ouest)</td></tr>
   <tr><td>Renvoi si la buggle est actuellement <b>sélectionnée dans l'interface</b></td>
       <td>[!java]boolean [/!]estChoisie()[!scala]:Boolean[/!]</td></tr>
  
@@ -56,7 +56,8 @@ et Direction.WEST (l'ouest)</td></tr>
       <td>[!java]boolean [/!]estSurBiscuit()[!scala]:Boolean[/!]<br/>
           [!java]boolean [/!]porteBiscuit()[!scala]:Boolean[/!]<br/>
           [!java]void [/!]prendBiscuit()<br/>
-          [!java]void [/!]poseBiscuit()</td></tr>
+          [!java]void [/!]poseBiscuit()<br/>
+           </td></tr>
 
   <tr><td><b>Chercher un message<br/>Ajouter un message<br/>Lire le message<br/>Effacer le message</b></td>
       <td>[!java]boolean [/!]estSurMessage()[!scala]:Boolean[/!]<br/>
@@ -69,10 +70,12 @@ et Direction.WEST (l'ouest)</td></tr>
 Les buggles normales lèvent une exception BuggleWallException si on cherche
 à leur faire traverser un mur.
 Elles lèvent une exception NoBaggleUnderBuggleException si vous cherchez à
-prendre un baggle dans une case qui n'en contient pas, ou une exception
-AlreadyHaveBaggleException si vous portez déjà un baggel.
-Tenter de déposer un baggel sur une case qui en contient déjà lève une
+prendre un biscuit dans une case qui n'en contient pas, ou une exception
+AlreadyHaveBaggleException si vous portez déjà un biscuit.
+Tenter de déposer un biscuit sur une case qui en contient déjà lève une
 exception AlreadyHaveBaggleException.
+Tenter de poser un biscuit alors qu'on n'en a pas lève une exception
+DontHaveBaggleException.
 <p>Les "SimpleBuggles" (ie, celles utilisées dans les premiers exercices)
 affiche un message d'erreur sans que vous ayez à vous soucier de ce qu'est
 une exception.</p>
diff --git a/src/plm/universe/bugglequest/BuggleWorld.html b/src/plm/universe/bugglequest/BuggleWorld.html
index d3e3dab..a39602a 100644
--- a/src/plm/universe/bugglequest/BuggleWorld.html
+++ b/src/plm/universe/bugglequest/BuggleWorld.html
@@ -52,7 +52,8 @@ paint the ground, hit walls, etc.
       <td>[!java]boolean [/!]isOverBaggle()[!scala]:Boolean[/!]<br/>
           [!java]boolean [/!]isCarryingBaggle()[!scala]:Boolean[/!]<br/>
           [!java]void [/!]pickupBaggle()<br/>
-          [!java]void [/!]dropBaggle()</td></tr>
+          [!java]void [/!]dropBaggle()<br/>
+           </td></tr>
 
   <tr><td><b>Look for a message<br/>Add a message<br/>Read the message<br/>Erase the message</b></td>
       <td>[!java]boolean [/!]isOverMessage()[!scala]:Boolean[/!]<br/>
@@ -67,6 +68,7 @@ traverse a wall.  They throw a NoBaggleUnderBuggleException exception if you
 ask them to pickup a baggle from an empty cell, or a
 AlreadyHaveBaggleException exception if they already carry a baggle.  Trying
 to drop a baggle on a cell already containing one throws an
-AlreadyHaveBaggleException exception.
+AlreadyHaveBaggleException exception. 
+Dropping a baggle when you have none throws a DontHaveBaggleException.
 <p>SimpleBuggles (ie, the one used in first exercises) display an error message
 on problem so that you don't need to know what an exception is.</p>
diff --git a/src/plm/universe/bugglequest/SimpleBuggle.java b/src/plm/universe/bugglequest/SimpleBuggle.java
index 5ee6309..9c0c242 100644
--- a/src/plm/universe/bugglequest/SimpleBuggle.java
+++ b/src/plm/universe/bugglequest/SimpleBuggle.java
@@ -7,6 +7,7 @@ import plm.universe.Direction;
 import plm.universe.bugglequest.exception.AlreadyHaveBaggleException;
 import plm.universe.bugglequest.exception.BuggleInOuterSpaceException;
 import plm.universe.bugglequest.exception.BuggleWallException;
+import plm.universe.bugglequest.exception.DontHaveBaggleException;
 import plm.universe.bugglequest.exception.NoBaggleUnderBuggleException;
 
 
@@ -92,6 +93,8 @@ public abstract class SimpleBuggle extends AbstractBuggle  {
 			if (!haveSeenError())
 				javax.swing.JOptionPane.showMessageDialog(null, e.getLocalizedMessage(), Game.i18n.tr("Test failed"), javax.swing.JOptionPane.ERROR_MESSAGE);
 			seenError();
+		} catch (DontHaveBaggleException e) {
+			javax.swing.JOptionPane.showMessageDialog(null, e.getLocalizedMessage(), Game.i18n.tr("Test failed"), javax.swing.JOptionPane.ERROR_MESSAGE);
 		}
 	}	
 	@Override 
diff --git a/src/plm/universe/bugglequest/exception/DontHaveBaggleException.java b/src/plm/universe/bugglequest/exception/DontHaveBaggleException.java
new file mode 100644
index 0000000..bbd4997
--- /dev/null
+++ b/src/plm/universe/bugglequest/exception/DontHaveBaggleException.java
@@ -0,0 +1,13 @@
+package plm.universe.bugglequest.exception;
+
+import plm.core.PLMException;
+import plm.core.model.Game;
+
+public class DontHaveBaggleException extends PLMException {
+	private static final long serialVersionUID = 1L;
+
+	public DontHaveBaggleException() {
+		super(Game.i18n.tr("You have no baggle to drop"));
+	
+	}
+}
diff --git a/src/plm/universe/bugglequest/ui/BuggleButtonPanel.java b/src/plm/universe/bugglequest/ui/BuggleButtonPanel.java
index cb32079..519148b 100644
--- a/src/plm/universe/bugglequest/ui/BuggleButtonPanel.java
+++ b/src/plm/universe/bugglequest/ui/BuggleButtonPanel.java
@@ -19,6 +19,7 @@ import javax.swing.JPanel;
 import javax.swing.JToggleButton;
 
 import plm.core.model.Game;
+import plm.core.utils.ColorMapper;
 import plm.universe.EntityControlPanel;
 import plm.universe.bugglequest.AbstractBuggle;
 import plm.universe.bugglequest.exception.BuggleWallException;
@@ -56,6 +57,7 @@ public class BuggleButtonPanel extends EntityControlPanel {
 		fButton.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent event) {
 				try {
+					echo(i18n.tr("forward()"));
 					((AbstractBuggle)Game.getInstance().getSelectedEntity()).forward();
 				} catch (BuggleWallException e) {
 					showWallHuggingErrorMessageDialog();
@@ -70,6 +72,7 @@ public class BuggleButtonPanel extends EntityControlPanel {
 		bButton.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent event) {
 				try {
+					echo(i18n.tr("backward()"));
 					((AbstractBuggle)Game.getInstance().getSelectedEntity()).backward();
 				} catch (BuggleWallException e) {
 					showWallHuggingErrorMessageDialog();
@@ -83,6 +86,7 @@ public class BuggleButtonPanel extends EntityControlPanel {
 		lButton = new JButton(i18n.tr("left"));
 		lButton.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent event) {
+				echo(i18n.tr("left()"));
 				((AbstractBuggle)Game.getInstance().getSelectedEntity()).left();
 			}
 		});
@@ -91,6 +95,7 @@ public class BuggleButtonPanel extends EntityControlPanel {
 		rButton = new JButton(i18n.tr("right"));
 		rButton.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent event) {
+				echo(i18n.tr("right()"));
 				((AbstractBuggle)Game.getInstance().getSelectedEntity()).right();
 			}
 		});
@@ -101,8 +106,10 @@ public class BuggleButtonPanel extends EntityControlPanel {
 			public void actionPerformed(ActionEvent event) {
 				AbstractBuggle b = (AbstractBuggle)Game.getInstance().getSelectedEntity();
 				if (b.isBrushDown()) {
+					echo(i18n.tr("brushUp()"));
 					b.brushUp();
 				} else {
+					echo(i18n.tr("brushDown()"));
 					b.brushDown();
 				}
 			}
@@ -127,6 +134,7 @@ public class BuggleButtonPanel extends EntityControlPanel {
 				JComboBox cb = (JComboBox) event.getSource();
 				Color c = (Color) cb.getSelectedItem();
 				cb.setSelectedItem(c);
+				echo(i18n.tr("setBrushColor(Color.{0})",ColorMapper.color2name(c)));
 				((AbstractBuggle)Game.getInstance().getSelectedEntity()).setBrushColor(c);
 			}
 		});
@@ -139,6 +147,7 @@ public class BuggleButtonPanel extends EntityControlPanel {
 				JComboBox cb = (JComboBox) event.getSource();
 				Color c = (Color) cb.getSelectedItem();
 				cb.setSelectedItem(c);
+				echo(i18n.tr("setColor(Color.{0})",ColorMapper.color2name(c)));
 				((AbstractBuggle)Game.getInstance().getSelectedEntity()).setColor(c);
 			}
 		});
diff --git a/src/plm/universe/sort/SortingButtonPanel.java b/src/plm/universe/sort/SortingButtonPanel.java
index 2c742e5..58a3bf4 100644
--- a/src/plm/universe/sort/SortingButtonPanel.java
+++ b/src/plm/universe/sort/SortingButtonPanel.java
@@ -3,14 +3,12 @@ package plm.universe.sort;
 import java.awt.FlowLayout;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.util.Locale;
 
 import javax.swing.JButton;
 import javax.swing.JComboBox;
 import javax.swing.JPanel;
 
-import org.xnap.commons.i18n.I18n;
-import org.xnap.commons.i18n.I18nFactory;
-
 import plm.core.model.Game;
 import plm.universe.EntityControlPanel;
 
@@ -24,12 +22,10 @@ public class SortingButtonPanel extends EntityControlPanel {
 
 	private static final long serialVersionUID = 1L;
 	private JButton validateButton;	// a validate button
-	private JComboBox operationsComboBox;	// the available operations on the array ( setValue, copy and swap )
+	private JComboBox operationsComboBox = new JComboBox();	// the available operations on the array ( setValue, copy and swap )
 	private JComboBox leftValueComboBox;	// the value for the first parameter of the selected operation
 	private JComboBox rightValueComboBox;	// the value for the second parameter of the selected operation
 	
-	private I18n i18n = I18nFactory.getI18n(getClass(),"org.plm.i18n.Messages",getLocale(), I18nFactory.FALLBACK);
-
 	/**
      * Constructor of SortingButtonPanel
      * It initializes the command panel
@@ -37,6 +33,7 @@ public class SortingButtonPanel extends EntityControlPanel {
 	public SortingButtonPanel() {
 		super();
 		SortingEntity se = (SortingEntity) Game.getInstance().getSelectedEntity();
+		Game.getInstance().addHumanLangListener(this);
 		this.add(this.createCommandPanel(se));
 	}
 	
@@ -48,9 +45,8 @@ public class SortingButtonPanel extends EntityControlPanel {
 	private JPanel createCommandPanel(SortingEntity se) {
 		JPanel commandPane = new JPanel();
 		commandPane.setLayout(new FlowLayout());
-		
-		String operationsAvailable[] = { "swap","setValue","copy"};
-		this.operationsComboBox = new JComboBox(operationsAvailable);
+
+		currentHumanLanguageHasChanged(null);
 		
 		int n = se.getValueCount();
 		Integer index[] = new Integer[n];
@@ -71,12 +67,15 @@ public class SortingButtonPanel extends EntityControlPanel {
 				switch (selectedOperation)
 				{
 					case 0:
+						echo(i18n.tr("swap({0},{1})",i,j));
 						se.swap(i,j);
 						break;
 					case 1:
+						echo(i18n.tr("setValue({0},{1})",i,j));
 						se.setValue(i,j);
 						break;
 					case 2:
+						echo(i18n.tr("copy({0},{1})",i,j));
 						se.copy(i, j);
 						break;
 					default:
@@ -101,4 +100,13 @@ public class SortingButtonPanel extends EntityControlPanel {
 		this.leftValueComboBox.setEnabled(enabled);
 		this.rightValueComboBox.setEnabled(enabled);
 	}
+	
+	@Override
+	public void currentHumanLanguageHasChanged(Locale newLang) {
+		super.currentHumanLanguageHasChanged(newLang);
+		operationsComboBox.removeAllItems();
+		for (String s : new String[] { i18n.tr("swap"),i18n.tr("setValue"),i18n.tr("copy")}) 
+			operationsComboBox.addItem(s);
+		
+	}
 }
diff --git a/src/plm/universe/turtles/Turtle.java b/src/plm/universe/turtles/Turtle.java
index d6cae36..978aa23 100644
--- a/src/plm/universe/turtles/Turtle.java
+++ b/src/plm/universe/turtles/Turtle.java
@@ -235,6 +235,9 @@ public class Turtle extends Entity {
 	public void penUp() {
 		this.penDown = false;
 	}
+	public void clear() {
+		getWorld().clear();
+	}
 
 	private double fromAngularUnit(double angle) {
 		switch (angularUnit) {
@@ -423,4 +426,5 @@ public class Turtle extends Entity {
 	public void setCouleur(Color c)  { setColor(c); }
 	public boolean estChoisi()       { return isSelected(); } // we have to document the version without e, since po4a allows for one variant only
 	public boolean estChoisie()      { return isSelected(); } // But we want to have the grammatically correct form also possible (turtles are feminine)
+	public void efface()             { clear(); } 
 }
diff --git a/src/plm/universe/turtles/TurtleWorld.fr.html b/src/plm/universe/turtles/TurtleWorld.fr.html
index 716c17d..30fc5c5 100644
--- a/src/plm/universe/turtles/TurtleWorld.fr.html
+++ b/src/plm/universe/turtles/TurtleWorld.fr.html
@@ -10,8 +10,8 @@ là où elles marchent et à qui on peut donner des ordres simples.</p>
 
 <h2>Fonctions pour déplacer la tortue</h2>
 
-<pre>[!java]void [/!]avance([!java]double [/!]steps[!scala]:Double[/!])
-[!java]void [/!]recule([!java]double [/!]steps[!scala]:Double[/!])</pre>
+<pre>[!java]void [/!]avance([!java]double [/!]nbPas[!scala]:Double[/!])
+[!java]void [/!]recule([!java]double [/!]nbPas[!scala]:Double[/!])</pre>
 Avance ou recule du nombre de pas demandé.
 
 <pre>[!java]void [/!]droite([!java]double [/!]angle[!scala]:Double[/!])
@@ -33,6 +33,9 @@ Déplace la tortue à une nouvelle position.
 <pre>[!java]void [/!]cercle([!java]double [/!]rayon[!scala]:Double[/!])</pre>
 Dessine un cercle du rayon demandé et centré sur la tortue.
 
+<pre>[!java]void [/!]efface()</pre>
+Efface toutes les traces de la feuille.
+
 <pre>[!java]double [/!]getCap()[!scala]:Double[/!]</pre>
 Retourne le cap actuel de la tortue (en degrés).
 
diff --git a/src/plm/universe/turtles/TurtleWorld.html b/src/plm/universe/turtles/TurtleWorld.html
index 2458712..7465581 100644
--- a/src/plm/universe/turtles/TurtleWorld.html
+++ b/src/plm/universe/turtles/TurtleWorld.html
@@ -33,6 +33,9 @@ Moves the turtle to a new position.
 <pre>[!java]void [/!]circle([!java]double [/!]radius[!scala]:Double[/!])</pre>
 Draw a circle of the specified radius centered on the turtle.
 
+<pre>[!java]void [/!]clear()</pre>
+Removes any trail on the sheet.
+
 <pre>[!java]double [/!]getHeading()[!scala]:Double[/!]</pre>
 Returns the current heading of the turtle (in degrees).
 
diff --git a/src/plm/universe/turtles/TurtleWorld.java b/src/plm/universe/turtles/TurtleWorld.java
index f020f67..7ad3dae 100644
--- a/src/plm/universe/turtles/TurtleWorld.java
+++ b/src/plm/universe/turtles/TurtleWorld.java
@@ -87,6 +87,12 @@ public class TurtleWorld extends World {
 			notifyWorldUpdatesListeners();
 		}
 	}
+	public void clear() {
+		synchronized (shapes) {
+			shapes.clear();
+			notifyWorldUpdatesListeners();
+		}
+	}
 
 	public Iterator<Shape> shapes() {
 		return shapes.iterator();
@@ -185,6 +191,8 @@ public class TurtleWorld extends World {
 					"  entity.addSizeHint(x,y,z,t)\n"+
 					"def circle(radius):\n"+
 					"  entity.circle(radius)\n"+
+					"def clear():\n"+
+					"  entity.clear()\n"+
 					/* BINDINGS TRANSLATION: French */
 					"def recule(i):\n"+
 					"  entity.backward(i)\n"+
@@ -205,7 +213,9 @@ public class TurtleWorld extends World {
 					"def allerVers(x,y):\n" +
 					"  entity.moveTo(x,y)\n"+
 					"def cercle(radius):\n"+
-					"  entity.circle(radius)\n"
+					"  entity.circle(radius)\n"+
+					"def efface():\n"+
+					"  entity.clear()\n"
 					);
 		} else {
 			throw new RuntimeException("No binding of TurtleWorld for "+lang);

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-java/plm.git



More information about the pkg-java-commits mailing list