[jlm] 04/11: Imported Upstream version 2.0

Martin Quinson mquinson at alioth.debian.org
Sun Aug 4 22:23:10 UTC 2013


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

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

commit 0e76e73a3c16aaf83fde9a6f3451d74df01f587c
Author: Martin Quinson <martin.quinson at loria.fr>
Date:   Sun Aug 4 23:25:09 2013 +0200

    Imported Upstream version 2.0
---
 .classpath                                         |    4 +-
 COPYING                                            |    6 +-
 ChangeLog                                          |   67 +-
 TODO                                               |   88 +-
 build.xml                                          |   29 +-
 img/bt-load-lesson.png                             |  Bin 0 -> 13130 bytes
 img/edit_buggle.png                                |  Bin 0 -> 6851 bytes
 img/edit_nobuggle.png                              |  Bin 0 -> 1222 bytes
 img/lang_javascript.png                            |  Bin 515 -> 720 bytes
 img/world_baseball.png                             |  Bin 1904 -> 1051 bytes
 img/world_lightbot.png                             |  Bin 0 -> 2141 bytes
 img/world_turtle.png                               |  Bin 1942 -> 1592 bytes
 lib/jsyntaxpane-0.9.5~r148.jar                     |  Bin 316488 -> 0 bytes
 lib/jsyntaxpane-0.9.6~r156.jar                     |  Bin 0 -> 391052 bytes
 lib/l10n-engine/en.po                              |  846 +-
 lib/l10n-engine/fr.po                              | 1030 ++-
 lib/l10n-engine/jlm.pot                            |  830 +-
 lib/l10n/fr.po                                     | 8508 ++++++++++++--------
 lib/l10n/jlm.pot                                   | 5459 ++++++++-----
 lib/resources/jlm.configuration.properties         |   28 +-
 po4a.conf                                          |  199 +-
 src/jlm/core/ExoTest.java                          |   39 +-
 src/jlm/core/model/CourseAppEngine.java            |    8 +-
 src/jlm/core/model/FileUtils.java                  |  116 -
 src/jlm/core/model/Game.java                       |  142 +-
 src/jlm/core/model/HelpAppEngine.java              |    4 +-
 src/jlm/core/model/LessonRunner.java               |   43 +-
 src/jlm/core/model/ProgrammingLanguage.java        |    8 +-
 src/jlm/core/model/lesson/ExerciseTemplated.java   |  138 +-
 src/jlm/core/model/lesson/Lecture.java             |   59 +-
 src/jlm/core/model/lesson/Lesson.java              |   62 +-
 src/jlm/core/model/lesson/SourceFile.java          |    2 +-
 src/jlm/core/model/session/FileSessionKit.java     |    4 +-
 src/jlm/core/model/session/SessionDB.java          |  101 +-
 src/jlm/core/model/session/ZipSessionKit.java      |  146 +-
 src/jlm/core/model/tracking/IdenticaSpy.java       |    2 +-
 src/jlm/core/model/tracking/LocalFileSpy.java      |    2 +-
 .../core/model/tracking/ServerSpyAppEngine.java    |    2 +-
 src/jlm/core/model/tracking/TwitterSpy.java        |    2 +-
 src/jlm/core/ui/AboutJLMDialog.java                |    4 +-
 src/jlm/core/ui/AboutWorldDialog.java              |   17 +-
 src/jlm/core/ui/ChooseLectureDialog.java           |   28 +-
 src/jlm/core/ui/DelayBoundedRangeModel.java        |  177 -
 src/jlm/core/ui/ExerciseView.java                  |  176 +-
 src/jlm/core/ui/FeedbackDialog.java                |  179 +
 src/jlm/core/ui/JavaLearningMachine.java           |    7 +-
 src/jlm/core/ui/JlmHtmlEditorKit.java              |   62 +-
 src/jlm/core/ui/LessonChooser.java                 |  256 +
 src/jlm/core/ui/MainFrame.java                     |   34 +-
 src/jlm/core/ui/MissionEditorTabs.java             |    3 +-
 src/jlm/core/ui/ResourcesCache.java                |   91 +-
 src/jlm/core/ui/StatusBar.java                     |   14 +-
 src/jlm/core/ui/WorldView.java                     |    4 -
 src/jlm/core/ui/action/HelpMe.java                 |    2 +-
 src/jlm/core/utils/ColorMapper.java                |   48 +
 src/jlm/core/utils/FileUtils.java                  |  135 +
 src/jlm/core/utils/InvalidColorNameException.java  |   11 +
 src/jlm/universe/Entity.java                       |  214 +-
 src/jlm/universe/EntityControlPanel.java           |    1 +
 src/jlm/universe/GridWorld.java                    |   34 +
 src/jlm/universe/World.java                        |   38 +-
 src/jlm/universe/array/ArrayEntity.java            |   64 -
 src/jlm/universe/array/ArrayWorld.java             |   94 -
 src/jlm/universe/array/ArrayWorldView.java         |   91 -
 src/jlm/universe/array/package-info.java           |    5 -
 src/jlm/universe/bat/BatWorld.java                 |    6 +
 src/jlm/universe/bat/BatWorldView.java             |  106 +-
 src/jlm/universe/bugglequest/AbstractBuggle.java   |    6 +-
 src/jlm/universe/bugglequest/BuggleWorld.fr.html   |   45 +-
 src/jlm/universe/bugglequest/BuggleWorld.html      |   45 +-
 src/jlm/universe/bugglequest/BuggleWorld.java      |  333 +-
 src/jlm/universe/bugglequest/BuggleWorldCell.java  |   13 +-
 src/jlm/universe/bugglequest/SimpleBuggle.java     |    7 +-
 .../bugglequest/mapeditor/EditionListener.java     |   23 +
 src/jlm/universe/bugglequest/mapeditor/Editor.java |   79 +-
 .../universe/bugglequest/mapeditor/MainFrame.java  |   81 +-
 .../bugglequest/mapeditor/MapEditorApp.java        |   13 +-
 .../universe/bugglequest/mapeditor/MapView.java    |   84 +-
 .../bugglequest/mapeditor/PropertiesEditor.java    |  389 +
 .../universe/bugglequest/ui/BuggleButtonPanel.java |    9 -
 .../bugglequest/ui/BuggleColorCellRenderer.java    |    1 -
 .../universe/bugglequest/ui/BuggleWorldView.java   |    8 +-
 src/jlm/universe/hanoi/HanoiEntity.java            |   64 -
 src/jlm/universe/hanoi/HanoiInvalidMove.java       |   10 -
 src/jlm/universe/hanoi/HanoiMovePanel.java         |  115 -
 src/jlm/universe/hanoi/HanoiWorld.fr.html          |   24 -
 src/jlm/universe/hanoi/HanoiWorld.html             |   20 -
 src/jlm/universe/hanoi/HanoiWorld.java             |  171 -
 src/jlm/universe/hanoi/HanoiWorldView.java         |   72 -
 src/jlm/universe/hanoi/package-info.java           |    7 -
 src/jlm/universe/lightbot/LightBotWorld.java       |   17 +-
 src/jlm/universe/lightbot/LightBotWorldView2D.java |    8 -
 .../lightbot/LightBotWorldViewIsometric.java       |    8 -
 src/jlm/universe/smn/baseball/BaseballBase.java    |  123 -
 src/jlm/universe/smn/baseball/BaseballEntity.java  |  105 -
 src/jlm/universe/smn/baseball/BaseballField.java   |  389 -
 src/jlm/universe/smn/baseball/BaseballMove.java    |   94 -
 .../universe/smn/baseball/BaseballMovePanel.java   |  183 -
 src/jlm/universe/smn/baseball/BaseballPlayer.java  |   36 -
 .../universe/smn/baseball/BaseballWorld.fr.html    |   44 -
 src/jlm/universe/smn/baseball/BaseballWorld.html   |   41 -
 src/jlm/universe/smn/baseball/BaseballWorld.java   |  191 -
 .../universe/smn/baseball/BaseballWorldView.java   |  378 -
 .../smn/baseball/InvalidMoveException.java         |   15 -
 .../smn/baseball/InvalidPositionException.java     |   15 -
 src/jlm/universe/smn/baseball/package-info.java    |    7 -
 .../universe/smn/pancake/InvalidPancakeNumber.java |   20 -
 src/jlm/universe/smn/pancake/Pancake.java          |   83 -
 src/jlm/universe/smn/pancake/PancakeEntity.java    |  115 -
 .../smn/pancake/PancakeFlipButtonPanel.java        |  115 -
 src/jlm/universe/smn/pancake/PancakeWorld.fr.html  |   28 -
 src/jlm/universe/smn/pancake/PancakeWorld.html     |   24 -
 src/jlm/universe/smn/pancake/PancakeWorld.java     |  250 -
 src/jlm/universe/smn/pancake/PancakeWorldView.java |  246 -
 src/jlm/universe/smn/pancake/PancakesStack.java    |  259 -
 src/jlm/universe/smn/pancake/package-info.java     |    7 -
 src/jlm/universe/sort/CopyVal.java                 |    1 -
 src/jlm/universe/sort/GetVal.java                  |   28 +
 src/jlm/universe/sort/Operation.java               |   62 +-
 src/jlm/universe/sort/SetVal.java                  |   12 +-
 src/jlm/universe/sort/SortingButtonPanel.java      |    1 -
 src/jlm/universe/sort/SortingWorld.fr.html         |   46 +-
 src/jlm/universe/sort/SortingWorld.html            |   44 +-
 src/jlm/universe/sort/SortingWorld.java            |   93 +-
 src/jlm/universe/sort/SortingWorldView.java        |  212 +-
 src/jlm/universe/sort/Swap.java                    |    1 -
 src/jlm/universe/turmite/TurmiteWorld.fr.html      |   51 -
 src/jlm/universe/turmite/TurmiteWorld.html         |   49 -
 src/jlm/universe/turmite/TurmiteWorld.java         |  105 -
 src/jlm/universe/turmite/TurmiteWorldView.java     |   37 -
 src/jlm/universe/turtles/Line.java                 |   66 +
 src/jlm/universe/turtles/ShapeAbstract.java        |    8 -
 src/jlm/universe/turtles/ShapeLine.java            |   68 -
 src/jlm/universe/turtles/TurtleWorld.fr.html       |  106 +-
 src/jlm/universe/turtles/TurtleWorld.html          |   99 +-
 src/jlm/universe/turtles/TurtleWorld.java          |   38 +-
 src/jlm/universe/turtles/TurtleWorldView.java      |    8 +-
 src/lessons/backtracking/BacktrackingWorld.java    |    8 +-
 .../backtracking/BacktrackingWorldView.java        |   10 +-
 .../bat/string1/{altpairs => }/AltPairs.fr.html    |    0
 .../bat/string1/{altpairs => }/AltPairs.html       |    0
 src/lessons/bat/string1/AltPairs.java              |   56 +
 .../string1/{fronttimes => }/FrontTimes.fr.html    |    0
 .../bat/string1/{fronttimes => }/FrontTimes.html   |    0
 src/lessons/bat/string1/FrontTimes.java            |   59 +
 src/lessons/bat/string1/Last2.fr.html              |   10 +
 src/lessons/bat/string1/Last2.html                 |    8 +
 src/lessons/bat/string1/Last2.java                 |   68 +
 src/lessons/bat/string1/Main.fr.html               |    2 +-
 src/lessons/bat/string1/Main.java                  |   18 +-
 .../bat/string1/{bits => }/StringBits.fr.html      |    0
 src/lessons/bat/string1/{bits => }/StringBits.html |    0
 src/lessons/bat/string1/StringBits.java            |   47 +
 .../bat/string1/{match => }/StringMatch.fr.html    |    0
 .../bat/string1/{match => }/StringMatch.html       |    0
 src/lessons/bat/string1/StringMatch.java           |   61 +
 .../string1/{splosion => }/StringSplosion.fr.html  |    0
 .../bat/string1/{splosion => }/StringSplosion.html |    0
 src/lessons/bat/string1/StringSplosion.java        |   48 +
 .../bat/string1/{times => }/StringTimes.fr.html    |    0
 .../bat/string1/{times => }/StringTimes.html       |    0
 src/lessons/bat/string1/StringTimes.java           |   49 +
 .../bat/string1/{stringx => }/StringX.fr.html      |    0
 src/lessons/bat/string1/{stringx => }/StringX.html |    0
 src/lessons/bat/string1/StringX.java               |   52 +
 src/lessons/bat/string1/StringYak.fr.html          |    7 +
 src/lessons/bat/string1/{yak => }/StringYak.html   |    0
 src/lessons/bat/string1/StringYak.java             |   59 +
 src/lessons/bat/string1/altpairs/AltPairs.java     |   53 -
 src/lessons/bat/string1/bits/StringBits.java       |   44 -
 src/lessons/bat/string1/fronttimes/FrontTimes.java |   50 -
 src/lessons/bat/string1/icon.png                   |  Bin 0 -> 2049 bytes
 src/lessons/bat/string1/last2/Last2.fr.html        |    9 -
 src/lessons/bat/string1/last2/Last2.html           |    7 -
 src/lessons/bat/string1/last2/Last2.java           |   60 -
 src/lessons/bat/string1/match/StringMatch.java     |   56 -
 src/lessons/bat/string1/short_desc.fr.html         |    7 +
 src/lessons/bat/string1/short_desc.html            |    6 +
 .../bat/string1/splosion/StringSplosion.java       |   45 -
 src/lessons/bat/string1/stringx/StringX.java       |   48 -
 src/lessons/bat/string1/times/StringTimes.java     |   46 -
 src/lessons/bat/string1/yak/StringYak.fr.html      |    8 -
 src/lessons/bat/string1/yak/StringYak.java         |   51 -
 src/lessons/lightbot/Board01TwoSteps.fr.html       |    5 +-
 src/lessons/lightbot/Main.fr.html                  |    2 +-
 src/lessons/lightbot/icon.png                      |  Bin 0 -> 1280 bytes
 src/lessons/lightbot/short_desc.fr.html            |    8 +
 src/lessons/lightbot/short_desc.html               |    8 +
 src/lessons/maze/Main.html                         |    2 +-
 src/lessons/maze/Main.java                         |    5 +-
 src/lessons/maze/icon.png                          |  Bin 0 -> 2454 bytes
 src/lessons/maze/island/IslandMaze-answer0.map     |  110 +
 src/lessons/maze/island/IslandMaze-answer1.map     |  114 +
 src/lessons/maze/island/IslandMaze.fr.html         |   33 +-
 src/lessons/maze/island/IslandMaze.html            |   18 +-
 src/lessons/maze/island/IslandMaze.java            |   60 +-
 src/lessons/maze/island/IslandMaze.map             |  256 +-
 src/lessons/maze/island/IslandMaze2.map            |  260 +-
 src/lessons/maze/island/IslandMazeEntity.java      |   17 +-
 src/lessons/maze/island/IslandMazeEntity.py        |  101 +-
 src/lessons/maze/pledge/PledgeMaze-answer0.map     |  167 +
 src/lessons/maze/pledge/PledgeMaze-answer1.map     |  171 +
 src/lessons/maze/pledge/PledgeMaze.fr.html         |   67 +-
 src/lessons/maze/pledge/PledgeMaze.html            |   34 +-
 src/lessons/maze/pledge/PledgeMaze.java            |   62 +-
 src/lessons/maze/pledge/PledgeMaze.map             |  569 +-
 src/lessons/maze/pledge/PledgeMaze2.map            |  573 +-
 src/lessons/maze/pledge/PledgeMazeEntity.java      |   18 +-
 src/lessons/maze/pledge/PledgeMazeEntity.py        |  100 +-
 .../maze/randommouse/RandomMouseMaze-answer0.map   |   17 +
 .../maze/randommouse/RandomMouseMaze-answer1.map   |   16 +
 .../maze/randommouse/RandomMouseMaze.fr.html       |   25 +-
 src/lessons/maze/randommouse/RandomMouseMaze.html  |   14 +-
 src/lessons/maze/randommouse/RandomMouseMaze.java  |   61 +-
 src/lessons/maze/randommouse/RandomMouseMaze.map   |   35 +-
 src/lessons/maze/randommouse/RandomMouseMaze2.map  |   34 +-
 .../maze/randommouse/RandomMouseMazeEntity.java    |    2 +-
 .../maze/randommouse/RandomMouseMazeEntity.py      |   83 +-
 src/lessons/maze/short_desc.fr.html                |    7 +
 src/lessons/maze/short_desc.html                   |    6 +
 src/lessons/maze/shortestpath/PledgeMaze.map       |  569 +-
 .../maze/shortestpath/ShortestPathMaze-answer0.map |  145 +
 .../maze/shortestpath/ShortestPathMaze-answer1.map |  288 +
 .../maze/shortestpath/ShortestPathMaze.fr.html     |   95 +-
 .../maze/shortestpath/ShortestPathMaze.html        |   52 +-
 .../maze/shortestpath/ShortestPathMaze.java        |   66 +-
 .../maze/shortestpath/ShortestPathMazeEntity.java  |  135 +-
 .../maze/shortestpath/ShortestPathMazeEntity.py    |  229 +-
 src/lessons/maze/shortestpath/WallFollowerMaze.map |  275 +-
 .../wallfindfollow/WallFindFollowMaze-answer0.map  |  129 +
 .../wallfindfollow/WallFindFollowMaze-answer1.map  |  129 +
 .../maze/wallfindfollow/WallFindFollowMaze.fr.html |   13 +-
 .../maze/wallfindfollow/WallFindFollowMaze.html    |    6 +-
 .../maze/wallfindfollow/WallFindFollowMaze.java    |   60 +-
 .../maze/wallfindfollow/WallFindFollowMaze.map     |  129 +
 .../maze/wallfindfollow/WallFindFollowMaze2.map    |  129 +
 .../wallfindfollow/WallFindFollowMazeEntity.py     |   26 +
 .../maze/wallfollower/WallFollowerMaze-answer0.map |  129 +
 .../maze/wallfollower/WallFollowerMaze-answer1.map |  129 +
 .../maze/wallfollower/WallFollowerMaze.fr.html     |   29 +-
 .../maze/wallfollower/WallFollowerMaze.html        |   18 +-
 .../maze/wallfollower/WallFollowerMaze.java        |   60 +-
 src/lessons/maze/wallfollower/WallFollowerMaze.map |  275 +-
 .../maze/wallfollower/WallFollowerMaze2.map        |  275 +-
 .../maze/wallfollower/WallFollowerMazeEntity.java  |    2 +-
 .../maze/wallfollower/WallFollowerMazeEntity.py    |   47 +-
 src/lessons/meta/HanoiCreateEntity.java            |  114 -
 src/lessons/meta/HanoiCreateViewAnswer.java        |   98 -
 src/lessons/meta/HanoiCreateWorld.fr.html          |  194 -
 src/lessons/meta/HanoiCreateWorld.html             |  158 -
 src/lessons/meta/HanoiCreateWorld.java             |   59 -
 src/lessons/meta/HanoiMetaEntity.java              |   50 -
 src/lessons/meta/HanoiMetaWorld.java               |  129 -
 src/lessons/meta/Main.fr.html                      |    3 -
 src/lessons/meta/Main.html                         |    2 -
 src/lessons/meta/Main.java                         |   14 -
 src/lessons/meta/MetaExercise.java                 |   35 -
 src/lessons/recursion/Main.java                    |   10 +-
 .../DragonCurve1.fr.html                           |    0
 .../DragonCurve1.html                              |    0
 .../recursion/dragoncurve/DragonCurve1.java        |   49 +
 .../recursion/dragoncurve/DragonCurve1Entity.java  |   30 +
 .../recursion/dragoncurve/DragonCurve1Entity.py    |   15 +
 .../DragonCurve2.fr.html                           |    0
 .../DragonCurve2.html                              |    0
 .../recursion/dragoncurve/DragonCurve2.java        |   49 +
 .../recursion/dragoncurve/DragonCurve2Entity.java  |   48 +
 .../DragonCurve2Entity.py                          |    0
 .../recursion/dragoncurve1/DragonCurve1.java       |   49 -
 .../recursion/dragoncurve1/DragonCurve1Entity.java |   30 -
 .../recursion/dragoncurve1/DragonCurve1Entity.py   |   15 -
 .../recursion/dragoncurve2/DragonCurve2.java       |   49 -
 .../recursion/dragoncurve2/DragonCurve2Entity.java |   48 -
 .../{hanoiboard => hanoi}/HanoiBoard.fr.html       |    0
 .../{hanoiboard => hanoi}/HanoiBoard.html          |    0
 src/lessons/recursion/hanoi/HanoiBoard.java        |   30 +
 src/lessons/recursion/hanoi/HanoiBoardEntity.java  |   35 +
 .../{hanoiboard => hanoi}/HanoiBoardEntity.py      |    0
 src/lessons/recursion/hanoi/Main.fr.html           |    4 +
 src/lessons/recursion/hanoi/Main.html              |    4 +
 src/lessons/recursion/hanoi/Main.java              |   10 +
 src/lessons/recursion/hanoi/icon.png               |  Bin 0 -> 794 bytes
 src/lessons/recursion/hanoi/short_desc.fr.html     |    5 +
 src/lessons/recursion/hanoi/short_desc.html        |    5 +
 .../recursion/hanoi/universe/HanoiEntity.java      |   64 +
 .../recursion/hanoi/universe/HanoiMovePanel.java   |  101 +
 .../recursion/hanoi/universe/HanoiWorld.fr.html    |   29 +
 .../recursion/hanoi/universe/HanoiWorld.html       |   27 +
 .../recursion/hanoi/universe/HanoiWorld.java       |  173 +
 .../recursion/hanoi/universe/HanoiWorldView.java   |   64 +
 src/lessons/recursion/hanoiboard/HanoiBoard.java   |   30 -
 .../recursion/hanoiboard/HanoiBoardEntity.java     |   36 -
 src/lessons/recursion/icon.png                     |  Bin 0 -> 1291 bytes
 .../polygonfractal/PolygonFractalEntity.py         |    4 +-
 src/lessons/recursion/short_desc.fr.html           |    6 +
 src/lessons/recursion/short_desc.html              |    6 +
 src/lessons/recursion/spiral/SpiralEntity.py       |    4 +-
 .../{spiraluse => spiral}/SpiralUse.fr.html        |    0
 .../recursion/{spiraluse => spiral}/SpiralUse.html |    0
 src/lessons/recursion/spiral/SpiralUse.java        |   39 +
 src/lessons/recursion/spiral/SpiralUseEntity.java  |   34 +
 src/lessons/recursion/spiral/SpiralUseEntity.py    |   25 +
 src/lessons/recursion/spiraluse/SpiralUse.java     |   39 -
 .../recursion/spiraluse/SpiralUseEntity.java       |   34 -
 src/lessons/recursion/spiraluse/SpiralUseEntity.py |   22 -
 src/lessons/recursion/square/Square.fr.html        |    4 +-
 src/lessons/recursion/tree/TreeEntity.py           |    2 +-
 src/lessons/smn/Main.fr.html                       |    3 -
 src/lessons/smn/Main.html                          |    3 -
 src/lessons/smn/Main.java                          |   17 -
 src/lessons/smn/baseball/easy/BaseballGame.fr.html |  193 -
 src/lessons/smn/baseball/easy/BaseballGame.html    |  175 -
 src/lessons/smn/baseball/easy/BaseballGame.java    |   34 -
 .../smn/baseball/easy/BaseballGameEntity.java      |  134 -
 .../medium/BaseballGameMorePlayers.fr.html         |   81 -
 .../baseball/medium/BaseballGameMorePlayers.html   |   69 -
 .../baseball/medium/BaseballGameMorePlayers.java   |   36 -
 .../medium/BaseballGameMorePlayersEntity.java      |  131 -
 .../smn/pancake/burned/BurnedPancakePlate.fr.html  |   37 -
 .../smn/pancake/burned/BurnedPancakePlate.html     |   26 -
 .../smn/pancake/burned/BurnedPancakePlate.java     |   28 -
 .../pancake/burned/BurnedPancakePlateEntity.java   |   69 -
 .../smn/pancake/burned/BurnedPancakePlateEntity.py |   43 -
 .../smn/pancake/raw/RawPancakePlate.fr.html        |   33 -
 src/lessons/smn/pancake/raw/RawPancakePlate.html   |   24 -
 src/lessons/smn/pancake/raw/RawPancakePlate.java   |   32 -
 .../smn/pancake/raw/RawPancakePlateEntity.java     |   57 -
 .../smn/pancake/raw/RawPancakePlateEntity.py       |   33 -
 src/lessons/sort/Main.fr.html                      |    7 +-
 src/lessons/sort/Main.html                         |    5 +-
 src/lessons/sort/Main.java                         |   14 +-
 src/lessons/sort/baseball/BubbleBaseball.fr.html   |   42 +
 src/lessons/sort/baseball/BubbleBaseball.html      |   28 +
 src/lessons/sort/baseball/BubbleBaseball.java      |   25 +
 .../sort/baseball/BubbleBaseballEntity.java        |   37 +
 src/lessons/sort/baseball/BubbleBaseballEntity.py  |   19 +
 src/lessons/sort/baseball/InsertBaseball.fr.html   |   66 +
 src/lessons/sort/baseball/InsertBaseball.html      |   45 +
 src/lessons/sort/baseball/InsertBaseball.java      |   24 +
 .../sort/baseball/InsertBaseballEntity.java        |   50 +
 src/lessons/sort/baseball/InsertBaseballEntity.py  |   23 +
 src/lessons/sort/baseball/Main.fr.html             |   54 +
 src/lessons/sort/baseball/Main.html                |   34 +
 src/lessons/sort/baseball/Main.java                |   13 +
 src/lessons/sort/baseball/NaiveBaseball.fr.html    |   60 +
 src/lessons/sort/baseball/NaiveBaseball.html       |   43 +
 src/lessons/sort/baseball/NaiveBaseball.java       |   18 +
 src/lessons/sort/baseball/NaiveBaseballEntity.java |   32 +
 src/lessons/sort/baseball/NaiveBaseballEntity.py   |   13 +
 src/lessons/sort/baseball/SelectBaseball.fr.html   |   42 +
 src/lessons/sort/baseball/SelectBaseball.html      |   36 +
 src/lessons/sort/baseball/SelectBaseball.java      |   24 +
 .../sort/baseball/SelectBaseballEntity.java        |   78 +
 src/lessons/sort/baseball/SelectBaseballEntity.py  |   46 +
 src/lessons/sort/baseball/icon.png                 |  Bin 0 -> 1073 bytes
 src/lessons/sort/baseball/short_desc.fr.html       |    4 +
 src/lessons/sort/baseball/short_desc.html          |    3 +
 .../sort/baseball/universe/BaseballEntity.java     |   75 +
 .../sort/baseball/universe/BaseballMove.java       |   48 +
 .../sort/baseball/universe/BaseballMovePanel.java  |   99 +
 .../sort/baseball/universe/BaseballWorld.fr.html   |   50 +
 .../sort/baseball/universe/BaseballWorld.html      |   46 +
 .../sort/baseball/universe/BaseballWorld.java      |  424 +
 .../sort/baseball/universe/BaseballWorldView.java  |  663 ++
 src/lessons/sort/bubble/AlgBubbleSort1.fr.html     |   51 +
 src/lessons/sort/bubble/AlgBubbleSort1.html        |   47 +
 src/lessons/sort/bubble/AlgBubbleSort1.java        |   22 +
 src/lessons/sort/bubble/AlgBubbleSort1Entity.java  |   27 +
 .../{bubble1 => bubble}/AlgBubbleSort1Entity.py    |    0
 src/lessons/sort/bubble/AlgBubbleSort2.fr.html     |   33 +
 src/lessons/sort/bubble/AlgBubbleSort2.html        |   30 +
 src/lessons/sort/bubble/AlgBubbleSort2.java        |   22 +
 src/lessons/sort/bubble/AlgBubbleSort2Entity.java  |   23 +
 .../{bubble2 => bubble}/AlgBubbleSort2Entity.py    |    0
 src/lessons/sort/bubble/AlgBubbleSort3.fr.html     |   24 +
 src/lessons/sort/bubble/AlgBubbleSort3.html        |   20 +
 src/lessons/sort/bubble/AlgBubbleSort3.java        |   22 +
 src/lessons/sort/bubble/AlgBubbleSort3Entity.java  |   31 +
 .../{bubble3 => bubble}/AlgBubbleSort3Entity.py    |    0
 src/lessons/sort/bubble1/AlgBubbleSort1.fr.html    |   50 -
 src/lessons/sort/bubble1/AlgBubbleSort1.html       |   46 -
 src/lessons/sort/bubble1/AlgBubbleSort1.java       |   22 -
 src/lessons/sort/bubble1/AlgBubbleSort1Entity.java |   27 -
 src/lessons/sort/bubble2/AlgBubbleSort2.fr.html    |   35 -
 src/lessons/sort/bubble2/AlgBubbleSort2.html       |   32 -
 src/lessons/sort/bubble2/AlgBubbleSort2.java       |   22 -
 src/lessons/sort/bubble2/AlgBubbleSort2Entity.java |   23 -
 src/lessons/sort/bubble3/AlgBubbleSort3.fr.html    |   26 -
 src/lessons/sort/bubble3/AlgBubbleSort3.html       |   22 -
 src/lessons/sort/bubble3/AlgBubbleSort3.java       |   22 -
 src/lessons/sort/bubble3/AlgBubbleSort3Entity.java |   31 -
 src/lessons/sort/cocktail/AlgCocktailSort1.fr.html |   25 +
 src/lessons/sort/cocktail/AlgCocktailSort1.html    |   24 +
 src/lessons/sort/cocktail/AlgCocktailSort1.java    |   22 +
 .../sort/cocktail/AlgCocktailSort1Entity.java      |   33 +
 .../sort/cocktail/AlgCocktailSort1Entity.py        |   13 +
 src/lessons/sort/cocktail/AlgCocktailSort2.fr.html |   17 +
 src/lessons/sort/cocktail/AlgCocktailSort2.html    |   17 +
 src/lessons/sort/cocktail/AlgCocktailSort2.java    |   22 +
 .../sort/cocktail/AlgCocktailSort2Entity.java      |   37 +
 .../sort/cocktail/AlgCocktailSort2Entity.py        |   17 +
 src/lessons/sort/cocktail/AlgCocktailSort3.fr.html |    8 +
 src/lessons/sort/cocktail/AlgCocktailSort3.html    |    8 +
 src/lessons/sort/cocktail/AlgCocktailSort3.java    |   22 +
 .../sort/cocktail/AlgCocktailSort3Entity.java      |   41 +
 .../sort/cocktail/AlgCocktailSort3Entity.py        |   20 +
 .../sort/cocktail1/AlgCocktailSort1.fr.html        |   27 -
 src/lessons/sort/cocktail1/AlgCocktailSort1.html   |   26 -
 src/lessons/sort/cocktail1/AlgCocktailSort1.java   |   22 -
 .../sort/cocktail1/AlgCocktailSort1Entity.java     |   33 -
 .../sort/cocktail1/AlgCocktailSort1Entity.py       |   16 -
 .../sort/cocktail2/AlgCocktailSort2.fr.html        |   19 -
 src/lessons/sort/cocktail2/AlgCocktailSort2.html   |   19 -
 src/lessons/sort/cocktail2/AlgCocktailSort2.java   |   22 -
 .../sort/cocktail2/AlgCocktailSort2Entity.java     |   37 -
 .../sort/cocktail2/AlgCocktailSort2Entity.py       |   20 -
 .../sort/cocktail3/AlgCocktailSort3.fr.html        |   10 -
 src/lessons/sort/cocktail3/AlgCocktailSort3.html   |   10 -
 src/lessons/sort/cocktail3/AlgCocktailSort3.java   |   22 -
 .../sort/cocktail3/AlgCocktailSort3Entity.java     |   41 -
 .../sort/cocktail3/AlgCocktailSort3Entity.py       |   24 -
 src/lessons/sort/comb/AlgCombSort.fr.html          |   22 +-
 src/lessons/sort/comb/AlgCombSort.html             |    4 +-
 src/lessons/sort/comb/AlgCombSort11.fr.html        |    8 +
 src/lessons/sort/comb/AlgCombSort11.html           |    7 +
 src/lessons/sort/comb/AlgCombSort11.java           |   23 +
 src/lessons/sort/comb/AlgCombSort11Entity.java     |   34 +
 src/lessons/sort/comb/AlgCombSort11Entity.py       |   16 +
 src/lessons/sort/comb/AlgCombSortEntity.py         |   24 +-
 src/lessons/sort/comb11/AlgCombSort11.fr.html      |    9 -
 src/lessons/sort/comb11/AlgCombSort11.html         |    9 -
 src/lessons/sort/comb11/AlgCombSort11.java         |   23 -
 src/lessons/sort/comb11/AlgCombSort11Entity.java   |   34 -
 src/lessons/sort/comb11/AlgCombSort11Entity.py     |   17 -
 src/lessons/sort/gnome/AlgGnomeSort.fr.html        |   21 +-
 src/lessons/sort/gnome/AlgGnomeSort.html           |    4 +-
 src/lessons/sort/gnome/AlgGnomeSortEntity.py       |   20 +-
 src/lessons/sort/icon.png                          |  Bin 0 -> 1590 bytes
 .../sort/insertion/AlgInsertionSort.fr.html        |    7 +-
 src/lessons/sort/insertion/AlgInsertionSort.html   |    7 +-
 .../sort/insertion/AlgInsertionSortEntity.py       |    2 +-
 src/lessons/sort/pancake/BasicPancake.fr.html      |   47 +
 src/lessons/sort/pancake/BasicPancake.html         |   31 +
 src/lessons/sort/pancake/BasicPancake.java         |   24 +
 src/lessons/sort/pancake/BasicPancakeEntity.java   |   35 +
 src/lessons/sort/pancake/BasicPancakeEntity.py     |   13 +
 src/lessons/sort/pancake/BurnedPancake.fr.html     |    6 +
 src/lessons/sort/pancake/BurnedPancake.html        |    5 +
 src/lessons/sort/pancake/BurnedPancake.java        |   24 +
 src/lessons/sort/pancake/BurnedPancakeEntity.java  |   44 +
 src/lessons/sort/pancake/BurnedPancakeEntity.py    |   19 +
 src/lessons/sort/pancake/GatesPancake.fr.html      |  110 +
 src/lessons/sort/pancake/GatesPancake.html         |   87 +
 src/lessons/sort/pancake/GatesPancake.java         |   31 +
 src/lessons/sort/pancake/GatesPancakeEntity.java   |  287 +
 src/lessons/sort/pancake/GatesPancakeEntity.py     |  191 +
 src/lessons/sort/pancake/Main.fr.html              |   46 +
 src/lessons/sort/pancake/Main.html                 |   35 +
 src/lessons/sort/pancake/Main.java                 |   15 +
 src/lessons/sort/pancake/icon.png                  |  Bin 0 -> 1796 bytes
 src/lessons/sort/pancake/img/gates-a.png           |  Bin 0 -> 2095 bytes
 src/lessons/sort/pancake/img/gates-a.svg           |  222 +
 src/lessons/sort/pancake/img/gates-b.png           |  Bin 0 -> 2410 bytes
 src/lessons/sort/pancake/img/gates-b.svg           |  224 +
 src/lessons/sort/pancake/img/gates-c.png           |  Bin 0 -> 8128 bytes
 src/lessons/sort/pancake/img/gates-c.svg           |  662 ++
 src/lessons/sort/pancake/img/gates-d.png           |  Bin 0 -> 2313 bytes
 src/lessons/sort/pancake/img/gates-d.svg           |  222 +
 src/lessons/sort/pancake/img/gates-e.png           |  Bin 0 -> 2497 bytes
 src/lessons/sort/pancake/img/gates-e.svg           |  233 +
 src/lessons/sort/pancake/img/gates-f.png           |  Bin 0 -> 5044 bytes
 src/lessons/sort/pancake/img/gates-f.svg           |  382 +
 src/lessons/sort/pancake/img/gates-f1.png          |  Bin 0 -> 14458 bytes
 src/lessons/sort/pancake/img/gates-f1.svg          |  650 ++
 src/lessons/sort/pancake/img/gates-f2.png          |  Bin 0 -> 14900 bytes
 src/lessons/sort/pancake/img/gates-f2.svg          |  620 ++
 src/lessons/sort/pancake/img/gates-g.png           |  Bin 0 -> 7804 bytes
 src/lessons/sort/pancake/img/gates-g.svg           |  302 +
 src/lessons/sort/pancake/img/gates-h.png           |  Bin 0 -> 7891 bytes
 src/lessons/sort/pancake/img/gates-h.svg           |  302 +
 src/lessons/sort/pancake/img/gates-k.png           |  Bin 0 -> 5926 bytes
 .../lessons/sort/pancake/img}/world_pancake.png    |  Bin 1333 -> 1333 bytes
 .../lessons/sort/pancake/img}/world_pancake.svg    |    0
 src/lessons/sort/pancake/short_desc.fr.html        |    7 +
 src/lessons/sort/pancake/short_desc.html           |    7 +
 .../sort/pancake/universe/PancakeEntity.java       |   85 +
 .../pancake/universe/PancakeFlipButtonPanel.java   |  115 +
 .../sort/pancake/universe/PancakeWorld.fr.html     |   31 +
 .../sort/pancake/universe/PancakeWorld.html        |   27 +
 .../sort/pancake/universe/PancakeWorld.java        |  340 +
 .../sort/pancake/universe/PancakeWorldView.java    |  143 +
 .../sort/selection/AlgSelectionSortEntity.py       |   19 +-
 src/lessons/sort/shell/AlgShellSort.fr.html        |    4 +-
 src/lessons/sort/shell/AlgShellSort.html           |    2 -
 src/lessons/sort/short_desc.fr.html                |    7 +
 src/lessons/sort/short_desc.html                   |    7 +
 src/lessons/turmites/Main.fr.html                  |   34 +
 src/lessons/turmites/Main.html                     |   28 +
 src/lessons/turmites/Main.java                     |   22 +
 .../turmites/helloturmite/HelloTurmite-answer0.map | 1260 +++
 .../turmites/helloturmite/HelloTurmite-answer1.map | 2457 ++++++
 .../turmites/helloturmite/HelloTurmite-answer2.map |  947 +++
 .../turmites/helloturmite/HelloTurmite.fr.html     |   89 +
 .../turmites/helloturmite/HelloTurmite.html        |    0
 .../turmites/helloturmite/HelloTurmite.java        |   33 +
 .../turmites/helloturmite/HelloTurmiteEntity.java  |   72 +
 .../turmites/helloturmite/HelloTurmiteEntity.py    |    0
 src/lessons/turmites/icon.png                      |  Bin 0 -> 5583 bytes
 src/lessons/turmites/langton/Langton-answer0.map   |  955 +++
 src/lessons/turmites/langton/Langton.fr.html       |   49 +
 src/lessons/turmites/langton/Langton.html          |   43 +
 src/lessons/turmites/langton/Langton.java          |   16 +
 src/lessons/turmites/langton/LangtonEntity.java    |   40 +
 .../turmites/langton/LangtonEntity.py              |    0
 .../langtoncolors/LangtonColors-answer0.map        |  956 +++
 .../langtoncolors/LangtonColors-answer1.map        |  425 +
 .../langtoncolors/LangtonColors-answer2.map        |  464 ++
 .../langtoncolors/LangtonColors-answer3.map        | 2170 +++++
 .../langtoncolors/LangtonColors-answer4.map        | 2045 +++++
 .../turmites/langtoncolors/LangtonColors.fr.html   |   46 +
 .../turmites/langtoncolors/LangtonColors.html      |   39 +
 .../turmites/langtoncolors/LangtonColors.java      |   28 +
 .../langtoncolors/LangtonColorsEntity.java         |   51 +
 .../turmites/langtoncolors/LangtonColorsEntity.py  |    0
 src/lessons/turmites/short_desc.fr.html            |    6 +
 src/lessons/turmites/short_desc.html               |    5 +
 .../turmitecreator/TurmiteCreator-answer0.map      | 1260 +++
 .../turmites/turmitecreator/TurmiteCreator.fr.html |  171 +
 .../turmites/turmitecreator/TurmiteCreator.html    |    0
 .../turmites/turmitecreator/TurmiteCreator.java    |   15 +
 .../turmitecreator/TurmiteCreatorEntity.java       |  137 +
 .../turmitecreator/TurmiteCreatorEntity.py         |    0
 src/lessons/turmites/universe/TurmiteWorld.fr.html |   51 +
 src/lessons/turmites/universe/TurmiteWorld.html    |   49 +
 src/lessons/turmites/universe/TurmiteWorld.java    |  128 +
 .../turmites/universe/TurmiteWorldView.java        |   30 +
 src/lessons/welcome/Main.fr.html                   |    5 +-
 src/lessons/welcome/Main.java                      |  138 +-
 .../welcome/array/array667/Array667.fr.html        |    2 +-
 .../array/averagevalue/AverageValue.fr.html        |   20 +-
 .../welcome/array/averagevalue/AverageValue.html   |    5 +-
 .../welcome/array/averagevalue/AverageValue.java   |   64 +-
 .../array/averagevalue/AverageValueEntity.java     |   26 -
 .../array/averagevalue/AverageValueEntity.py       |   12 -
 src/lessons/welcome/array/basics/Array-answer0.map |   39 +
 src/lessons/welcome/array/basics/Array-answer1.map |   52 +
 src/lessons/welcome/array/basics/Array-answer2.map |   67 +
 src/lessons/welcome/array/basics/Array.fr.html     |  217 +-
 src/lessons/welcome/array/basics/Array.html        |    2 +-
 .../welcome/array/basics/Array2-answer0.map        |   39 +
 .../welcome/array/basics/Array2-answer1.map        |   52 +
 .../welcome/array/basics/Array2-answer2.map        |   67 +
 src/lessons/welcome/array/basics/Array2.fr.html    |   32 +
 .../welcome/array/{basics2 => basics}/Array2.html  |    0
 src/lessons/welcome/array/basics/Array2.java       |   75 +
 src/lessons/welcome/array/basics/Array2Entity.java |   63 +
 .../array/{basics2 => basics}/Array2Entity.py      |    0
 src/lessons/welcome/array/basics2/Array2.fr.html   |   27 -
 src/lessons/welcome/array/basics2/Array2.java      |   75 -
 .../welcome/array/basics2/Array2Entity.java        |   63 -
 src/lessons/welcome/array/has271/Has271.fr.html    |    6 +-
 .../array/indexof/maxvalue/IndexOfMaxValue.fr.html |    6 +-
 .../array/indexof/maxvalue/IndexOfMaxValue.java    |   67 +-
 .../indexof/maxvalue/IndexOfMaxValueEntity.java    |   30 -
 .../indexof/maxvalue/IndexOfMaxValueEntity.py      |   16 -
 .../array/indexof/value/IndexOfValue.fr.html       |   36 +-
 .../welcome/array/indexof/value/IndexOfValue.java  |   83 +-
 .../array/indexof/value/IndexOfValueEntity.java    |   27 -
 .../array/indexof/value/IndexOfValueEntity.py      |   12 -
 .../welcome/array/maxvalue/MaxValue.fr.html        |   12 +-
 src/lessons/welcome/array/maxvalue/MaxValue.java   |   72 +-
 .../welcome/array/maxvalue/MaxValueEntity.java     |   28 -
 .../welcome/array/maxvalue/MaxValueEntity.py       |   13 -
 .../occurenceofvalue/OccurrenceOfValue.fr.html     |   10 +-
 .../array/occurenceofvalue/OccurrenceOfValue.java  |   84 +-
 .../occurenceofvalue/OccurrenceOfValueEntity.java  |   28 -
 .../occurenceofvalue/OccurrenceOfValueEntity.py    |   13 -
 .../welcome/baggleseeker/BaggleSeeker-answer0.map  |   16 +
 .../welcome/baggleseeker/BaggleSeeker.fr.html      |    4 +-
 src/lessons/welcome/baggleseeker/BaggleSeeker.html |    2 +-
 src/lessons/welcome/basics/Basics-answer0.map      |   11 +
 .../welcome/basicsdrawg/BasicsDrawG-answer0.map    |   19 +
 src/lessons/welcome/bdr/BDR-answer0.map            |   31 +
 src/lessons/welcome/bdr/{basics => }/BDR.fr.html   |    0
 src/lessons/welcome/bdr/{basics => }/BDR.html      |    0
 src/lessons/welcome/bdr/BDR.java                   |   79 +
 src/lessons/welcome/bdr/BDR2-answer0.map           |   95 +
 .../welcome/bdr/{extended => }/BDR2.fr.html        |    0
 src/lessons/welcome/bdr/{extended => }/BDR2.html   |    0
 src/lessons/welcome/bdr/BDR2.java                  |   83 +
 src/lessons/welcome/bdr/BDR2Entity.java            |  116 +
 .../welcome/bdr/{extended => }/BDR2Entity.py       |    0
 src/lessons/welcome/bdr/BDREntity.java             |   42 +
 src/lessons/welcome/bdr/{basics => }/BDREntity.py  |    0
 src/lessons/welcome/bdr/basics/BDR.java            |   79 -
 src/lessons/welcome/bdr/basics/BDREntity.java      |   42 -
 src/lessons/welcome/bdr/extended/BDR2.java         |   83 -
 src/lessons/welcome/bdr/extended/BDR2Entity.java   |  116 -
 src/lessons/welcome/bool1/Close10.fr.html          |   11 +
 .../welcome/bool1/{close10 => }/Close10.html       |    0
 src/lessons/welcome/bool1/Close10.java             |   54 +
 src/lessons/welcome/bool1/CountTeen.fr.html        |    3 +
 .../welcome/bool1/{countteen => }/CountTeen.html   |    0
 src/lessons/welcome/bool1/CountTeen.java           |   67 +
 .../welcome/bool1/{diff21 => }/Diff21.fr.html      |    0
 src/lessons/welcome/bool1/{diff21 => }/Diff21.html |    0
 src/lessons/welcome/bool1/Diff21.java              |   51 +
 .../welcome/bool1/{hasteen => }/HasTeen.fr.html    |    0
 .../welcome/bool1/{hasteen => }/HasTeen.html       |    0
 src/lessons/welcome/bool1/HasTeen.java             |   49 +
 .../welcome/bool1/{icyhot => }/IcyHot.fr.html      |    0
 src/lessons/welcome/bool1/{icyhot => }/IcyHot.html |    0
 src/lessons/welcome/bool1/IcyHot.java              |   44 +
 .../welcome/bool1/{in1020 => }/In1020.fr.html      |    0
 src/lessons/welcome/bool1/{in1020 => }/In1020.html |    0
 src/lessons/welcome/bool1/In1020.java              |   47 +
 .../welcome/bool1/{in3050 => }/In3050.fr.html      |    0
 src/lessons/welcome/bool1/{in3050 => }/In3050.html |    0
 src/lessons/welcome/bool1/In3050.java              |   50 +
 .../bool1/{lastdigit => }/LastDigit.fr.html        |    0
 .../welcome/bool1/{lastdigit => }/LastDigit.html   |    0
 src/lessons/welcome/bool1/LastDigit.java           |   41 +
 .../welcome/bool1/{loneteen => }/LoneTeen.fr.html  |    0
 .../welcome/bool1/{loneteen => }/LoneTeen.html     |    0
 src/lessons/welcome/bool1/LoneTeen.java            |   54 +
 .../welcome/bool1/{makes10 => }/Makes10.fr.html    |    0
 .../welcome/bool1/{makes10 => }/Makes10.html       |    0
 src/lessons/welcome/bool1/Makes10.java             |   46 +
 .../welcome/bool1/{max1020 => }/Max1020.fr.html    |    0
 .../welcome/bool1/{max1020 => }/Max1020.html       |    0
 src/lessons/welcome/bool1/Max1020.java             |   56 +
 .../{monkeytrouble => }/MonkeyTrouble.fr.html      |    0
 .../bool1/{monkeytrouble => }/MonkeyTrouble.html   |    0
 src/lessons/welcome/bool1/MonkeyTrouble.java       |   48 +
 .../bool1/{nearhundred => }/NearHundred.fr.html    |    0
 .../bool1/{nearhundred => }/NearHundred.html       |    0
 src/lessons/welcome/bool1/NearHundred.java         |   48 +
 .../bool1/{parottrouble => }/ParotTrouble.fr.html  |    0
 .../bool1/{parottrouble => }/ParotTrouble.html     |    0
 src/lessons/welcome/bool1/ParotTrouble.java        |   46 +
 .../welcome/bool1/{posneg => }/PosNeg.fr.html      |    0
 src/lessons/welcome/bool1/{posneg => }/PosNeg.html |    0
 src/lessons/welcome/bool1/PosNeg.java              |   55 +
 .../welcome/bool1/{sleepin => }/SleepIn.fr.html    |    0
 .../welcome/bool1/{sleepin => }/SleepIn.html       |    0
 src/lessons/welcome/bool1/SleepIn.java             |   45 +
 .../bool1/{sumdouble => }/SumDouble.fr.html        |    0
 .../welcome/bool1/{sumdouble => }/SumDouble.html   |    0
 src/lessons/welcome/bool1/SumDouble.java           |   47 +
 src/lessons/welcome/bool1/close10/Close10.fr.html  |   10 -
 src/lessons/welcome/bool1/close10/Close10.java     |   54 -
 .../welcome/bool1/countteen/CountTeen.fr.html      |    5 -
 src/lessons/welcome/bool1/countteen/CountTeen.java |   67 -
 src/lessons/welcome/bool1/diff21/Diff21.java       |   51 -
 src/lessons/welcome/bool1/hasteen/HasTeen.java     |   49 -
 src/lessons/welcome/bool1/icyhot/IcyHot.java       |   44 -
 src/lessons/welcome/bool1/in1020/In1020.java       |   47 -
 src/lessons/welcome/bool1/in3050/In3050.java       |   50 -
 src/lessons/welcome/bool1/lastdigit/LastDigit.java |   40 -
 src/lessons/welcome/bool1/loneteen/LoneTeen.java   |   54 -
 src/lessons/welcome/bool1/makes10/Makes10.java     |   46 -
 src/lessons/welcome/bool1/max1020/Max1020.java     |   56 -
 .../welcome/bool1/monkeytrouble/MonkeyTrouble.java |   48 -
 .../welcome/bool1/nearhundred/NearHundred.java     |   48 -
 .../welcome/bool1/parottrouble/ParotTrouble.java   |   46 -
 src/lessons/welcome/bool1/posneg/PosNeg.java       |   55 -
 src/lessons/welcome/bool1/sleepin/SleepIn.java     |   45 -
 src/lessons/welcome/bool1/sumdouble/SumDouble.java |   47 -
 .../bool2/{alarmclock => }/AlarmClock.fr.html      |    0
 .../welcome/bool2/{alarmclock => }/AlarmClock.html |    0
 src/lessons/welcome/bool2/AlarmClock.java          |   63 +
 .../bool2/{answercell => }/AnswerCell.fr.html      |    0
 .../welcome/bool2/{answercell => }/AnswerCell.html |    0
 src/lessons/welcome/bool2/AnswerCell.java          |   41 +
 .../bool2/{ticket/blue => }/BlueTicket.fr.html     |    0
 .../bool2/{ticket/blue => }/BlueTicket.html        |    0
 src/lessons/welcome/bool2/BlueTicket.java          |   64 +
 .../{caughtspeeding => }/CaughtSpeeding.fr.html    |    0
 .../bool2/{caughtspeeding => }/CaughtSpeeding.html |    0
 src/lessons/welcome/bool2/CaughtSpeeding.java      |   57 +
 .../bool2/{party/cigar => }/CigarParty.fr.html     |    0
 .../bool2/{party/cigar => }/CigarParty.html        |    0
 src/lessons/welcome/bool2/CigarParty.java          |   46 +
 .../bool2/{datefashion => }/DateFashion.fr.html    |    0
 .../bool2/{datefashion => }/DateFashion.html       |    0
 src/lessons/welcome/bool2/DateFashion.java         |   57 +
 .../bool2/{ticket/green => }/GreenTicket.fr.html   |    0
 .../bool2/{ticket/green => }/GreenTicket.html      |    0
 src/lessons/welcome/bool2/GreenTicket.java         |   57 +
 .../welcome/bool2/{in1to10 => }/In1To10.fr.html    |    0
 .../welcome/bool2/{in1to10 => }/In1To10.html       |    0
 src/lessons/welcome/bool2/In1To10.java             |   47 +
 .../welcome/bool2/{inorder => }/InOrder.fr.html    |    0
 .../welcome/bool2/{inorder => }/InOrder.html       |    0
 src/lessons/welcome/bool2/InOrder.java             |   47 +
 .../bool2/{inorderequals => }/InOrderEqual.fr.html |    0
 .../bool2/{inorderequals => }/InOrderEqual.html    |    0
 src/lessons/welcome/bool2/InOrderEqual.java        |   49 +
 .../bool2/{lastdigit2 => }/LastDigit2.fr.html      |    0
 .../welcome/bool2/{lastdigit2 => }/LastDigit2.html |    0
 src/lessons/welcome/bool2/LastDigit2.java          |   54 +
 .../welcome/bool2/{lessby10 => }/LessBy10.fr.html  |    0
 .../welcome/bool2/{lessby10 => }/LessBy10.html     |    0
 src/lessons/welcome/bool2/LessBy10.java            |   49 +
 .../welcome/bool2/{maxmod5 => }/MaxMod5.fr.html    |    0
 .../welcome/bool2/{maxmod5 => }/MaxMod5.html       |    0
 src/lessons/welcome/bool2/MaxMod5.java             |   69 +
 .../welcome/bool2/{nearten => }/NearTen.fr.html    |    0
 .../welcome/bool2/{nearten => }/NearTen.html       |    0
 src/lessons/welcome/bool2/NearTen.java             |   49 +
 .../bool2/{ticket/red => }/RedTicket.fr.html       |    0
 .../welcome/bool2/{ticket/red => }/RedTicket.html  |    0
 src/lessons/welcome/bool2/RedTicket.java           |   60 +
 .../bool2/{sharedigit => }/ShareDigit.fr.html      |    0
 .../welcome/bool2/{sharedigit => }/ShareDigit.html |    0
 src/lessons/welcome/bool2/ShareDigit.java          |   45 +
 .../welcome/bool2/{sortasum => }/SortaSum.fr.html  |    0
 .../welcome/bool2/{sortasum => }/SortaSum.html     |    0
 src/lessons/welcome/bool2/SortaSum.java            |   52 +
 .../bool2/{squirrelplay => }/SquirrelPlay.fr.html  |    0
 .../bool2/{squirrelplay => }/SquirrelPlay.html     |    0
 src/lessons/welcome/bool2/SquirrelPlay.java        |   48 +
 .../welcome/bool2/{party/tea => }/TeaParty.fr.html |    0
 .../welcome/bool2/{party/tea => }/TeaParty.html    |    0
 src/lessons/welcome/bool2/TeaParty.java            |   58 +
 .../welcome/bool2/{teensum => }/TeenSum.fr.html    |    0
 .../welcome/bool2/{teensum => }/TeenSum.html       |    0
 src/lessons/welcome/bool2/TeenSum.java             |   57 +
 .../welcome/bool2/{twoasone => }/TwoAsOne.fr.html  |    0
 .../welcome/bool2/{twoasone => }/TwoAsOne.html     |    0
 src/lessons/welcome/bool2/TwoAsOne.java            |   47 +
 .../{withoutdoubles => }/WithoutDoubles.fr.html    |    0
 .../bool2/{withoutdoubles => }/WithoutDoubles.html |    0
 src/lessons/welcome/bool2/WithoutDoubles.java      |   59 +
 .../welcome/bool2/alarmclock/AlarmClock.java       |   63 -
 .../welcome/bool2/answercell/AnswerCell.java       |   41 -
 .../bool2/caughtspeeding/CaughtSpeeding.java       |   57 -
 .../welcome/bool2/datefashion/DateFashion.java     |   57 -
 src/lessons/welcome/bool2/in1to10/In1To10.java     |   47 -
 src/lessons/welcome/bool2/inorder/InOrder.java     |   47 -
 .../welcome/bool2/inorderequals/InOrderEqual.java  |   49 -
 .../welcome/bool2/lastdigit2/LastDigit2.java       |   54 -
 src/lessons/welcome/bool2/lessby10/LessBy10.java   |   49 -
 src/lessons/welcome/bool2/maxmod5/MaxMod5.java     |   69 -
 src/lessons/welcome/bool2/nearten/NearTen.java     |   49 -
 .../welcome/bool2/party/cigar/CigarParty.java      |   46 -
 src/lessons/welcome/bool2/party/tea/TeaParty.java  |   58 -
 .../welcome/bool2/sharedigit/ShareDigit.java       |   45 -
 src/lessons/welcome/bool2/sortasum/SortaSum.java   |   52 -
 .../welcome/bool2/squirrelplay/SquirrelPlay.java   |   48 -
 src/lessons/welcome/bool2/teensum/TeenSum.java     |   57 -
 .../welcome/bool2/ticket/blue/BlueTicket.java      |   64 -
 .../welcome/bool2/ticket/green/GreenTicket.java    |   57 -
 .../welcome/bool2/ticket/red/RedTicket.java        |   60 -
 src/lessons/welcome/bool2/twoasone/TwoAsOne.java   |   47 -
 .../bool2/withoutdoubles/WithoutDoubles.java       |   59 -
 .../welcome/conditions/Conditions-answer0.map      |   30 +
 .../welcome/environment/Environment-answer0.map    |    3 +
 .../welcome/environment/Environment.fr.html        |   32 +-
 src/lessons/welcome/environment/Environment.html   |    7 +-
 src/lessons/welcome/icon.png                       |  Bin 0 -> 2081 bytes
 src/lessons/welcome/icon.xcf                       |  Bin 0 -> 4082 bytes
 .../loop/dowhileloop/LoopDoWhile-answer0.map       |   57 +
 .../welcome/loop/dowhileloop/LoopDoWhile.fr.html   |   27 +-
 .../welcome/loop/dowhileloop/LoopDoWhile.html      |   23 +-
 .../welcome/loop/dowhileloop/LoopDoWhile.java      |    7 +-
 .../welcome/loop/dowhileloop/Poucet-answer0.map    |  266 +
 .../welcome/loop/dowhileloop/Poucet-answer1.map    |  265 +
 .../welcome/loop/dowhileloop/Poucet.fr.html        |   54 +
 src/lessons/welcome/loop/dowhileloop/Poucet.html   |   40 +
 src/lessons/welcome/loop/dowhileloop/Poucet.java   |   27 +
 src/lessons/welcome/loop/dowhileloop/Poucet.map    |  266 +
 src/lessons/welcome/loop/dowhileloop/Poucet2.map   |  265 +
 .../welcome/loop/dowhileloop/PoucetEntity.java     |   45 +
 .../welcome/loop/dowhileloop/PoucetEntity.py       |   34 +
 .../welcome/loop/forloop/LoopCourse-answer0.map    |   66 +
 .../welcome/loop/forloop/LoopCourse.fr.html        |   13 +
 src/lessons/welcome/loop/forloop/LoopCourse.html   |   10 +
 src/lessons/welcome/loop/forloop/LoopCourse.java   |   27 +
 src/lessons/welcome/loop/forloop/LoopCourse.map    |   65 +
 .../welcome/loop/forloop/LoopCourseEntity.java     |   50 +
 .../welcome/loop/forloop/LoopCourseEntity.py       |   30 +
 .../loop/forloop/LoopCourseForest-answer0.map      |  228 +
 .../welcome/loop/forloop/LoopCourseForest.fr.html  |   14 +
 .../welcome/loop/forloop/LoopCourseForest.html     |   10 +
 .../welcome/loop/forloop/LoopCourseForest.java     |   27 +
 .../welcome/loop/forloop/LoopCourseForest.map      |  228 +
 .../loop/forloop/LoopCourseForestEntity.java       |   72 +
 .../welcome/loop/forloop/LoopCourseForestEntity.py |   48 +
 .../welcome/loop/forloop/LoopFor-answer0.map       |   16 +
 .../welcome/loop/forloop/LoopForEntity.java        |    2 +-
 src/lessons/welcome/loop/forloop/LoopForEntity.py  |    2 +-
 .../welcome/loop/forloop/LoopStairs-answer0.map    |   40 +
 .../welcome/loop/forloop/LoopStairs.fr.html        |   16 +
 src/lessons/welcome/loop/forloop/LoopStairs.html   |   13 +
 src/lessons/welcome/loop/forloop/LoopStairs.java   |   25 +
 src/lessons/welcome/loop/forloop/LoopStairs.map    |   30 +
 .../welcome/loop/forloop/LoopStairsEntity.java     |   57 +
 .../welcome/loop/forloop/LoopStairsEntity.py       |   44 +
 .../welcome/loop/whileloop/LoopWhile-answer0.map   |   27 +
 .../welcome/loop/whileloop/WhileMoria-answer0.map  |   63 +
 .../welcome/loop/whileloop/WhileMoria.fr.html      |   20 +
 src/lessons/welcome/loop/whileloop/WhileMoria.html |   17 +
 src/lessons/welcome/loop/whileloop/WhileMoria.java |   26 +
 src/lessons/welcome/loop/whileloop/WhileMoria.map  |   63 +
 .../welcome/loop/whileloop/WhileMoriaEntity.java   |   42 +
 .../welcome/loop/whileloop/WhileMoriaEntity.py     |   19 +
 .../welcome/methods/args/MethodsArgs-answer0.map   |    9 +
 .../welcome/methods/basics/Methods-answer0.map     |   10 +
 .../welcome/methods/basics/MethodsEntity.java      |    2 +-
 .../welcome/methods/basics/MethodsEntity.py        |    2 +-
 .../methods/doghouse/MethodsDogHouse-answer0.map   |   35 +
 .../methods/picture/MethodsPicture-answer0.map     |   15 +
 .../methods/picture2/MethodsPicture2-answer0.map   |  111 +
 .../methods/picture3/MethodsPicture3-answer0.map   |  975 +++
 .../methods/picture4/MethodsPicture4-answer0.map   |   42 +
 .../methods/returning/MethodsReturning-answer0.map |    4 +
 .../methods/returning/MethodsReturning-answer1.map |    4 +
 .../methods/returning/MethodsReturning-answer2.map |    4 +
 src/lessons/welcome/short_desc.fr.html             |    6 +
 src/lessons/welcome/short_desc.html                |    6 +
 src/lessons/welcome/slug/SlugHunting-answer0.map   |   19 +
 src/lessons/welcome/slug/SlugHunting-answer1.map   |   21 +
 src/lessons/welcome/slug/SlugHunting.fr.html       |   24 +
 src/lessons/welcome/slug/SlugHunting.html          |   22 +
 src/lessons/welcome/slug/SlugHunting.java          |   71 +
 src/lessons/welcome/slug/SlugHuntingEntity.java    |   45 +
 src/lessons/welcome/slug/SlugHuntingEntity.py      |   30 +
 src/lessons/welcome/slug/SlugSnail-answer0.map     |   19 +
 src/lessons/welcome/slug/SlugSnail-answer1.map     |   21 +
 src/lessons/welcome/slug/SlugSnail.fr.html         |   11 +
 src/lessons/welcome/slug/SlugSnail.html            |    9 +
 src/lessons/welcome/slug/SlugSnail.java            |   74 +
 src/lessons/welcome/slug/SlugSnailEntity.java      |   47 +
 src/lessons/welcome/slug/SlugSnailEntity.py        |   31 +
 src/lessons/welcome/slug/SlugTracking-answer0.map  |   19 +
 src/lessons/welcome/slug/SlugTracking-answer1.map  |   21 +
 src/lessons/welcome/slug/SlugTracking.fr.html      |   31 +
 src/lessons/welcome/slug/SlugTracking.html         |   22 +
 src/lessons/welcome/slug/SlugTracking.java         |   71 +
 src/lessons/welcome/slug/SlugTrackingEntity.java   |   40 +
 src/lessons/welcome/slug/SlugTrackingEntity.py     |   29 +
 .../welcome/slug/hunting/SlugHunting.fr.html       |   42 -
 src/lessons/welcome/slug/hunting/SlugHunting.html  |   42 -
 src/lessons/welcome/slug/hunting/SlugHunting.java  |   71 -
 .../welcome/slug/hunting/SlugHuntingEntity.java    |   43 -
 .../welcome/slug/hunting/SlugHuntingEntity.py      |   29 -
 .../welcome/slug/tracking/SlugTracking.fr.html     |   26 -
 .../welcome/slug/tracking/SlugTracking.html        |   23 -
 .../welcome/slug/tracking/SlugTracking.java        |   71 -
 .../welcome/slug/tracking/SlugTrackingEntity.java  |   40 -
 .../welcome/slug/tracking/SlugTrackingEntity.py    |   29 -
 src/lessons/welcome/snake/Snake-answer0.map        |   52 +
 src/lessons/welcome/snake/Snake.fr.html            |   29 +-
 src/lessons/welcome/snake/Snake.html               |   26 +-
 .../traversal/column/TraversalByColumn-answer0.map |   52 +
 .../traversal/column/TraversalByColumn.fr.html     |   20 +-
 .../diagonal/TraversalDiagonal-answer0.map         |   52 +
 .../traversal/line/TraversalByLine-answer0.map     |   52 +
 .../traversal/line/TraversalByLineEntity.py        |    2 +-
 .../traversal/zigzag/TraversalZigZag-answer0.map   |   52 +
 .../turmites/helloturmite/HelloTurmite.fr.html     |   69 -
 .../turmites/helloturmite/HelloTurmite.java        |   33 -
 .../turmites/helloturmite/HelloTurmiteEntity.java  |   72 -
 .../welcome/turmites/langton/Langton.fr.html       |   58 -
 src/lessons/welcome/turmites/langton/Langton.html  |   53 -
 src/lessons/welcome/turmites/langton/Langton.java  |   16 -
 .../welcome/turmites/langton/LangtonEntity.java    |   40 -
 .../turmites/langtoncolors/LangtonColors.fr.html   |   44 -
 .../turmites/langtoncolors/LangtonColors.html      |   45 -
 .../turmites/langtoncolors/LangtonColors.java      |   28 -
 .../langtoncolors/LangtonColorsEntity.java         |   51 -
 .../turmites/turmitecreator/TurmiteCreator.fr.html |  168 -
 .../turmites/turmitecreator/TurmiteCreator.java    |   15 -
 .../turmitecreator/TurmiteCreatorEntity.java       |  137 -
 src/lessons/welcome/variables/RunFour-answer0.map  |   45 +
 src/lessons/welcome/variables/RunFour.fr.html      |   10 +
 src/lessons/welcome/variables/RunFour.html         |    7 +
 src/lessons/welcome/variables/RunFour.java         |   25 +
 src/lessons/welcome/variables/RunFour.map          |   45 +
 src/lessons/welcome/variables/RunFourEntity.java   |   28 +
 src/lessons/welcome/variables/RunFourEntity.py     |   16 +
 src/lessons/welcome/variables/RunHalf-answer0.map  |   81 +
 src/lessons/welcome/variables/RunHalf.fr.html      |   11 +
 src/lessons/welcome/variables/RunHalf.html         |    9 +
 src/lessons/welcome/variables/RunHalf.java         |   24 +
 src/lessons/welcome/variables/RunHalf.map          |   81 +
 src/lessons/welcome/variables/RunHalfEntity.java   |   37 +
 src/lessons/welcome/variables/RunHalfEntity.py     |   21 +
 .../welcome/variables/Variables-answer0.map        |   16 +
 src/lessons/welcome/variables/VariablesEntity.java |    2 +-
 src/lessons/welcome/variables/VariablesEntity.py   |    2 +-
 892 files changed, 51243 insertions(+), 22208 deletions(-)

diff --git a/.classpath b/.classpath
index 53c404a..92abbbe 100644
--- a/.classpath
+++ b/.classpath
@@ -1,9 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
 	<classpathentry including="**" kind="src" path="src"/>
-	<classpathentry excluding="*"  including="img/*.png|img/*/*.png" kind="src" path="."/>
+	<classpathentry excluding="*" including="img/*.png|img/*/*.png" kind="src" path=""/>
 	<classpathentry excluding="*.jar" including="resources|resources/" kind="src" path="lib"/>
-	<classpathentry kind="lib" path="lib/jsyntaxpane-0.9.5~r148.jar"/>
 	<classpathentry kind="lib" path="lib/miglayout-3.7.4.jar"/>
 	<classpathentry exported="true" kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
 	<classpathentry exported="true" kind="lib" path="lib/twitter4j-core-2.1.4-SNAPSHOT.jar"/>
@@ -22,5 +21,6 @@
 	<classpathentry kind="lib" path="lib/gettext-commons-0.9.6.jar"/>
 	<classpathentry kind="lib" path="lib/jlm-messages.jar"/>
 	<classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/>
+	<classpathentry kind="lib" path="lib/jsyntaxpane-0.9.6~r156.jar"/>
 	<classpathentry kind="output" path="bin"/>
 </classpath>
diff --git a/COPYING b/COPYING
index 4b0d37b..5f76217 100644
--- a/COPYING
+++ b/COPYING
@@ -53,8 +53,10 @@ We borrowed the following icons, that are CC-BY-SA too:
   img/btn-debug.png       http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/go-next-context.png
   img/btn-start.png       http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/media-playback-start-8.png
   img/btn-stop.png        http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/media-playback-stop-8.png
+  img/btn-load-lesson.png http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/address-book-new-3.png
 * light for lightbot:
   img/lightbot_light.png  http://openiconlibrary.sourceforge.net/gallery2/?./Icons/actions/help-hint.png
+  img/world_lightbot.png  (same file)
 =========================================================================
 
 The following icons are LGPL:
@@ -111,7 +113,7 @@ remember where they come from. We should maybe play safe and replace
 them. But as you can see from the rest of the project, we are
 better programmers than designers... You are welcome if you can help.
 
-* img/world_pancake.png 
+* src/lessons/sort/pancake/img/world_pancake.png 
   It was retrieved from 
   http://omgwtflols.deviantart.com/art/Pixel-Art-Pancakes-with-syrup-298700868
   It seems rather free, but the exact license is not known.
@@ -119,4 +121,4 @@ better programmers than designers... You are welcome if you can help.
   I cannot remember where it comes from. It looks very similar to the
   logo for education applications in KDE so I guess it's ok. And since
   I'm planning at removing the whole concept of lessons, it's probably
-  not worth digging any further on this one.
+  not worth digging any further on this one.
\ No newline at end of file
diff --git a/ChangeLog b/ChangeLog
index 50bef8a..ec66f43 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,4 +1,69 @@
+20130804:
+  * RELEASE 2.0, the revolutionary night.
+  * Remove the array world. It was not helping very much when compared
+    to the bat world.
+  * Use '' to get ' in translated strings to please MessageFormat.
+  * Pythonize the documentation of all universes
+  * add a button to lessonChooser to load lessons from disk
+  * Disable the step-by-step mode when stopping or swichting
+    the lesson or the exercise (fix #1)
+  * Editor: kill buggles that are in outer space after world resizing.
+  * Disable JavaScript, it's really not ready for the big night.
+  * Update our version of jsyntaxpane to get a fully working jar file.
+20130730:
+  * Pythonize new exercises
+  * Retranslate everything back to 100% in French
+  * Various cosmetics, small refactoring and little bug fixes
+  * Lesson navigator: Display which exercise are passed in which language
+  * Entity.isSelected() returns whether /this/ is selected in the UI
+  * Change Buggle.pickUpBaggle() to pickupBaggle() for consistency
+  * ExerciseTemplated: Trim leading spaces of non-python templates
+  * Fix BuggleView for non-square worlds (Fix: #83)
+  * Implement a graphical lesson chooser (Fix: #19)
+  * Rewrite and integrate all of the baseball exercises
+  * Give the baseball universe an historical view, as for sorting one
+  * PancakeView: Reimplement from scratch; can now be played with mouse
+  * Split hanoi towers and the turmites out in their own lessons
+  * Remove the meta lesson. It was not done, seemed difficult to
+    finish, and complicated the code of the universes. (Fix: #2)
+20130720:
+  * Integrate the pancake exercises into the sorting lesson
+  * New pancake exercise about implementing Gates' algorithm
+  * 1 more exercise about the while loop: Moria
+  * 2 more exercises about variables: Big Buggles's Race (1&2)
+  * 3 more exercises about the for loop: Stairs, Course and CourseForest
+  * 1 more exercise about the do/while loop: Poucet
+  * Better integrate the slug hunting exercises; add new one (on parameters)
+20130710: 
+  * Fix the temporal view of the sorting world (plus various cleanups)
+  * Allow to provide feedback easily. One click to open the dialog
+    window, type your text, validate, and it's automatically saved
+    with an http POST request.
+  * Properly select the current exercise in the lesson navigator
+  * Save the currently used programming language in the property file
+  * Current exercise gets saved in zip files and reselected when loading
+  * Speeds initialization by directly building everything in the right
+    locale instead of building it with no locale, and then updating it
+  * Progress spys (twitter/identica) get controled through properties
+  * Default values of properties get saved to local file to ease their
+    discover and tuning by users
+20130705:
+  * RELEASE 1.99
+  * Pythonize all lessons: maze, recursion, sort and bat/string
+  * Fix: demo mode in python was without delay
+  * print() in python was not playing well with graphical console
+  * Update French translation of missions: back to 100%
+20130621:
+  * Improve the BuggleWorld I/O and the BuggleWorldEditor:
+    - better detection and error messages of invalid map files
+    - every world's characteristic can be edited in the editor
+    - buggles are read from/saved into world files
+  * Update all existing worlds on disk to this format
+  * Speedup the lesson loading with a cache of answer worlds:
+    - If a relevant .map file exists, don't execute the answer entity
+    - If not, save the .map file after execution for the next time
 20130616:
+  * RELEASE 1.98
   * Squeeze a bit our sources so that we can package it for Debian
   * Add a logo to the distribution (img/logo.png)
   * List the exact license of every image used in COPYING, and replace
@@ -21,7 +86,7 @@
     version.
 20130528:
   * New lesson navigator based on JTree (fix #71)
-  * Better looking icons, with known licenses
+  * Some better looking icons, with known licenses
   * Basic testing infrastructure (fix #8)
     It ensures that python entities manage to solve the Java worlds. 
     This could be extended in many way, including:
diff --git a/TODO b/TODO
index 4aa3cfd..790d5e5 100644
--- a/TODO
+++ b/TODO
@@ -1,61 +1,53 @@
-Sorry, this file is in french. It was intended to be personal and
-short lived, but you know how it goes. Most informations should be
-converted to issues on github probably.
-
+Most informations presented in this file should probably be converted
+to github issues.
 
 ***************** BUGS
-* The delay slider is not aware of the exercises changes. That is why it
-  fails to get the value of the newly selected exercise.
-* le libération du verrou "step-by-step" ne se passe pas bien lors de l'utilisation de "Reset",
-  un "Run" remet zéro correctement
-* certains tests de countTeen() semblent faux par rapport à l'énoncé
-
-* dans lightbot, la dernière instruction exécutée ne déclenche pas de rafraichissement de la vue du monde.
 
-* try to remove the *sys-package-mgr* processing messages when jython is loading
+* Some tests of countTeen() seem wrong when compared to the mission text
 
-* say explicity that the combolist that is present in the exercise passed dialog propose different path in the learning process
+* In lightbot, the last instruction does not refresh the world when executed.
 
-* The print function (and similar) does not work in Python. I've added
-  a log function directly to the bindings, but that's *really* ugly
+* try to remove the *sys-package-mgr* processing messages when jython is loading
 
 * Allow exercises in Scala:
 http://speaking-my-language.blogspot.fr/2009/11/embedded-scala-interpreter.html
-***************** BASE
-
-Assez urgent :
- * L'éditeur n'utilise pas les mêmes raccourcis qu'eclipse   
- 
-Une série d'idées bêtes :
- * On pourrait représenter graphiquement le diff textuel entre le
-   monde attendu et le monde créé quand y'a des erreurs. Avec des
-   ronds rouges autour des cases de la mauvaise couleur, des croix sur
-   les buggles mal placées, etc.
- * les localisations de fichier dans la console devrait être des liens
-   qui déplacent l'éditeur.
- * lors d'exécution pas à pas, j'aimerais afficher le contenu des
-   variables, mais ça semble très dur. on peut tenter l'introspection.
-   Peut-être qu'en convertissant le tout en plugin eclipse on pourrait
-   y arriver, mais pas cette année.
- * Changer le JavaEditor pour suivre le point d'exécution, comme c'est
-   fait dans lightbot.
-
-***************** LEÇONS          
-Il y a pleins d'idées d'exo sur les pages des gens qui ont
-inventé le concept. Par exemple:
+
+***************** ENGINE IMPROVEMENT
+
+ * We could use the same shortcuts than eclipse
+ * We could represent graphically the textual diff between the
+   expected world and the actual one. We would have red circles on
+   cells that have an error (either wrong color or wrong message), red
+   crosses on badly located buggles, etc.
+ * Locations displayed in the console should be links that move the editor.
+ * During step-by-step execution, it'd be great to display the content
+   of values, but I'm not sure of how to do that. Introspection could
+   be a way, but I think that it's not possible. We could also convert
+   everything to an eclipse plugin, but it seems to be a rather massive
+   amount of work.
+ * We should modify the JavaEditor so that it follows the execution
+   point, just like the lightbot editor does.
+
+***************** LESSONS
+
+There is a bunch of ideas on the pages of people that invented the
+buggle concept. For example:
 
 http://cs.wellesley.edu/~cs111/fall98/assignments.html
 
-***************** MONDES
-Micro-mondes pédagogiques
- * Karel the robot (peut-être qu'un chargeur de mondes karel dans les
-   buggles suffit)
+***************** UNIVERSES
+
+Pedagogical micro-worlds
+ * Karel the robot (it may be sufficient to build a loader of karel
+   worlds within the buggle world)
  * PatchWorld
-Ludiques pour programmeurs (nécessitent un mode King of hill?)
- * CodeRuler (stratégie)
- * CodeRobot (combats de robots)
- * CodeRally (courses de voitures)
- * CodeInvaders (combats de vaisseaux spaciaux)
- * MARS (assembleur) http://courses.missouristate.edu/kenvollmar/mars/
+Programmer games (may require a King of Hill mode?)
+ * CodeRuler (strategy)
+ * CodeRobot (fights between robots)
+ * CodeRally (racing cars)
+ * CodeInvaders (fight between spaceships)
+ * MARS (assembly) http://courses.missouristate.edu/kenvollmar/mars/
  * Corewars
- 
\ No newline at end of file
+
+http://www.essentialmath.com/tutorial.htm
+ Essential Math for Games Programmers
\ No newline at end of file
diff --git a/build.xml b/build.xml
index e1dead6..dd42273 100644
--- a/build.xml
+++ b/build.xml
@@ -55,7 +55,7 @@
             <fileset dir="${lib.dir}" excludes="*.jar *.pl l10n-engine/*"/>
             <!--<zipfileset excludes="META-INF/*.SF" src="${lib.dir}/twitter4j-2.1.0-SNAPSHOT.jar" /> -->
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/twitter4j-core-2.1.4-SNAPSHOT.jar" />    
-            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/jsyntaxpane-0.9.5~r148.jar" />
+            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/jsyntaxpane-0.9.6~r156.jar" />
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/miglayout-3.7.4.jar" />
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/langtools-beta.jar" />
                         
@@ -86,7 +86,7 @@
             <fileset dir="${src.dir}" includes="**/*.java **/*.html **/*.css **/*.png **/*.map" excludes="**/.gitignore"/> 
             <fileset dir="${lib.dir}" excludes="*.jar *.pl"/>
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/twitter4j-core-2.1.4-SNAPSHOT.jar" />    
-            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/jsyntaxpane-0.9.5~r148.jar" />
+            <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/jsyntaxpane-0.9.6~r156.jar" />
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/miglayout-3.7.4.jar" />
             <zipfileset excludes="META-INF/*.SF" src="${lib.dir}/langtools-beta.jar" />
             
@@ -163,8 +163,31 @@
     <target name="i18n-update" description="Merges newly extracted messages into existing po files" depends="i18n-extract">
       <gettext-merge keysFile="jlm.pot" poDirectory="lib/l10n-engine"/>
     </target>
+    <target name="i18n-check" description="Checks that the extracted messages are correct" depends="i18n-update">
+      <!-- single quote sign is used to escape the format strings in MessageFormat;
+           '' 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 -->
+      <exec executable="msggrep">
+           <arg value="-K"/>
+	   <arg value="-e"/>
+	   <arg value="[^']'[^'].*{"/>
+	   <arg value="--sort-by-file"/>
+	   <arg value="lib/l10n-engine/fr.po"/>
+	   <redirector output="errors-msgid.txt" alwayslog="true"/>           
+      </exec>
+      <exec executable="msggrep">
+           <arg value="-T"/>
+	   <arg value="-e"/>
+	   <arg value="[^']'[^'].*{"/>
+	   <arg value="--sort-by-file"/>
+	   <arg value="lib/l10n-engine/fr.po"/>
+	   <redirector output="errors-msgstr.txt" alwayslog="true"/>           
+      </exec>
+    </target>
     
-    <target name="i18n-generate-jar" description="Generates Java ResourceBundles and jars them up" depends="i18n-update">
+    <target name="i18n-generate-jar" description="Generates Java ResourceBundles and jars them up" depends="i18n-update, i18n-check">
       <mkdir dir="${site.dir}/po"/>
       <gettext-dist targetBundle="org.jlm.i18n.Messages" poDirectory="lib/l10n-engine" outputDirectory="${site.dir}/po" />
       <jar destfile="lib/jlm-messages.jar" basedir="${site.dir}/po" includes="org/**"/>
diff --git a/img/bt-load-lesson.png b/img/bt-load-lesson.png
new file mode 100644
index 0000000..1324add
Binary files /dev/null and b/img/bt-load-lesson.png differ
diff --git a/img/edit_buggle.png b/img/edit_buggle.png
new file mode 100644
index 0000000..96d9138
Binary files /dev/null and b/img/edit_buggle.png differ
diff --git a/img/edit_nobuggle.png b/img/edit_nobuggle.png
new file mode 100644
index 0000000..d9e3049
Binary files /dev/null and b/img/edit_nobuggle.png differ
diff --git a/img/lang_javascript.png b/img/lang_javascript.png
index e5de541..71a172a 100644
Binary files a/img/lang_javascript.png and b/img/lang_javascript.png differ
diff --git a/img/world_baseball.png b/img/world_baseball.png
index 58235a2..ba2d71a 100644
Binary files a/img/world_baseball.png and b/img/world_baseball.png differ
diff --git a/img/world_lightbot.png b/img/world_lightbot.png
new file mode 100644
index 0000000..03c727d
Binary files /dev/null and b/img/world_lightbot.png differ
diff --git a/img/world_turtle.png b/img/world_turtle.png
index 8a81321..57876b6 100644
Binary files a/img/world_turtle.png and b/img/world_turtle.png differ
diff --git a/lib/jsyntaxpane-0.9.5~r148.jar b/lib/jsyntaxpane-0.9.5~r148.jar
deleted file mode 100644
index 5197e2a..0000000
Binary files a/lib/jsyntaxpane-0.9.5~r148.jar and /dev/null differ
diff --git a/lib/jsyntaxpane-0.9.6~r156.jar b/lib/jsyntaxpane-0.9.6~r156.jar
new file mode 100644
index 0000000..3cd6270
Binary files /dev/null and b/lib/jsyntaxpane-0.9.6~r156.jar differ
diff --git a/lib/l10n-engine/en.po b/lib/l10n-engine/en.po
index 8c2b055..a46c708 100644
--- a/lib/l10n-engine/en.po
+++ b/lib/l10n-engine/en.po
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-06-14 01:05+0200\n"
+"POT-Creation-Date: 2013-08-04 21:21+0200\n"
 "PO-Revision-Date: 2013-05-30 11:25+0200\n"
 "Last-Translator: FULL NAME <EMAIL at ADDRESS>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
@@ -17,10 +17,85 @@ msgstr ""
 "Content-Type: text/plain; charset=ASCII\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/jlm/core/model/Game.java:292 src/jlm/core/model/Game.java:324
+#: src/jlm/core/model/Game.java:146
+#, java-format
+msgid ""
+"Warning, the default programming language is neither ''Java'' nor ''python'' "
+"but {0}.\n"
+"   This language will be used to setup the worlds, possibly leading to "
+"severe issues for the exercises that don''t expect it.\n"
+"   It is safer to change the current language, and restart JLM before "
+"proceeding.\n"
+"   Alternatively, the property {1} can be changed in your configuration file "
+"($HOME/.jlm/jlm.properties"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:160
+#, java-format
+msgid ""
+"Your progress will be posted to http://identi.ca/jlmlovers This can be "
+"turned off through the property {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:163
+#, java-format
+msgid ""
+"Your progress will NOT be posted to identica, as requested by the property "
+"{0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:166
+#, java-format
+msgid ""
+"Your progress will be posted to https://twitter.com/jlmlovers This can be "
+"turned off through the property {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:169
+#, java-format
+msgid ""
+"Your progress will NOT be posted to twitter, as requested by the property {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:217 src/jlm/core/model/Game.java:218
+#, java-format
+msgid "Cannot switch to lesson {0}: class Main not found."
+msgstr ""
+
+#: src/jlm/core/model/Game.java:219
+#, fuzzy, java-format
+msgid "Load lesson {0}"
+msgstr "Load lesson"
+
+#: src/jlm/core/model/Game.java:325 src/jlm/core/model/Game.java:357
 msgid "Operation cancelled by the user"
 msgstr "Operation cancelled by the user"
 
+#: src/jlm/core/model/Game.java:397
+#, java-format
+msgid "The lecture {0} has no world that I can select"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:920
+#, java-format
+msgid "{0} is not writable"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:924
+#, java-format
+msgid "{0} is not a directory"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:931
+#, java-format
+msgid "Cannot create {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:937
+#, java-format
+msgid "Impossible to find a path for JLM datas. Tested {0}"
+msgstr ""
+
 #: src/jlm/core/model/HelpServer.java:27
 msgid "Asking to the teacher for help"
 msgstr "Asking to the teacher for help"
@@ -29,23 +104,43 @@ msgstr "Asking to the teacher for help"
 msgid "Cancel call for help to the teacher"
 msgstr "Cancel call for help to the teacher"
 
-#: src/jlm/core/model/LessonRunner.java:88
-#, java-format
+#: src/jlm/core/model/LessonRunner.java:90
+#, fuzzy, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
-" {0} tests passed.\n"
+"{0} tests passed."
 msgstr ""
 "Congratulations, you passed this exercise.\n"
 " {0} tests passed.\n"
 
-#: src/jlm/core/model/LessonRunner.java:90
-#: src/jlm/core/model/LessonRunner.java:96
+#: src/jlm/core/model/LessonRunner.java:92
+#: src/jlm/core/model/LessonRunner.java:98
+#: src/jlm/core/model/LessonRunner.java:107
+#: src/jlm/core/model/LessonRunner.java:113
 msgid "Exercice passed \\o/"
 msgstr "Exercice passed \\o/"
 
-#: src/jlm/core/model/LessonRunner.java:95
+#: src/jlm/core/model/LessonRunner.java:96
+#, fuzzy
+msgid "Congratulations, you passed this exercise."
+msgstr ""
+"Congratulations, you passed this exercise.\n"
+" {0} tests passed.\n"
+
+#: src/jlm/core/model/LessonRunner.java:106
+#, fuzzy, java-format
 msgid ""
+"Congratulations, you passed this exercise.\n"
+"({0} tests passed)\n"
+"Which exercise will you do now?"
+msgstr ""
 "Congratulations, you passed this test. Which exercise will you do now?\n"
+
+#: src/jlm/core/model/LessonRunner.java:112
+#, fuzzy
+msgid ""
+"Congratulations, you passed this exercise.\n"
+"Which exercise will you do now?"
 msgstr ""
 "Congratulations, you passed this test. Which exercise will you do now?\n"
 
@@ -54,6 +149,93 @@ msgstr ""
 msgid "The world ''{0}'' differs"
 msgstr ""
 
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:41
+#, java-format
+msgid "Source file {0}.{1} not found."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:88
+#, java-format
+msgid "{0}: BEGIN TEMPLATE within the template. Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:108
+#, java-format
+msgid ""
+"{0}: BEGIN SOLUTION is closed with END TEMPLATE. Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:122
+#, java-format
+msgid ""
+"{0}: END TEMPLATE with no matching BEGIN TEMPLATE. Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:126
+#, java-format
+msgid "{0}: Begin solution in template tail. Change it to BEGIN HIDDEN"
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:153
+#, java-format
+msgid ""
+"Parser error in file {0}. This is a parser bug (state={1}), please report."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:158
+#, java-format
+msgid ""
+"{0}: End of file unexpected after the solution but within the template. "
+"Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:160
+#, java-format
+msgid ""
+"{0}: End of file unexpected (state: {1}). Did you forget to close your "
+"template or solution? Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:311
+#, java-format
+msgid "World {0} is broken ({1}). Recompute all answer worlds."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:315
+#, java-format
+msgid ""
+"IO exception while reading world {0} ({1}). Recompute all answer worlds."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:326
+#, java-format
+msgid ""
+"Recompute the answer of {0} despite the cache file, as requested by the "
+"property {1}"
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:349
+#, java-format
+msgid "Error while writing answer world of {0}:"
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:353
+#, java-format
+msgid "Cannot write answer world of {0}. Please check the permissions."
+msgstr ""
+
+#: src/jlm/core/model/lesson/Lecture.java:88
+#: src/jlm/core/model/lesson/Lesson.java:84
+#, java-format
+msgid "File {0}.html not found."
+msgstr ""
+
+#: src/jlm/core/model/lesson/Lecture.java:97
+#: src/jlm/core/model/lesson/Lesson.java:94
+#, java-format
+msgid "Cannot find the name of mission in {0}.html"
+msgstr ""
+
 #: src/jlm/core/ui/AboutJLMDialog.java:34
 msgid "About JLM dialogTitle"
 msgstr "About JLM dialogTitle"
@@ -67,8 +249,9 @@ msgstr "Close"
 msgid "About lesson - "
 msgstr "About lesson - "
 
-#: src/jlm/core/ui/AboutWorldDialog.java:29
-msgid "About world - "
+#: src/jlm/core/ui/AboutWorldDialog.java:32
+#, fuzzy, java-format
+msgid "About world - {0}"
 msgstr "About world - "
 
 #: src/jlm/core/ui/ExerciseFailedDialog.java:29
@@ -111,6 +294,131 @@ msgstr "Target world"
 msgid "Switch the entity"
 msgstr "Switch the entity"
 
+#: src/jlm/core/ui/FeedbackDialog.java:49
+msgid "Report your feedback"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:59
+msgid ""
+"<html><p>Thanks for your feedback on JLM. We deeply need this to make the "
+"tool match <br>your needs, so please don't hesitate to report any "
+"suggestion, such as typos and <br/>unclear parts in the mission texts, other "
+"improvement to the existing exercises<br/>or prospective exercises. We will "
+"do our best to integrate your suggestions.</p><p>Please write here your "
+"suggestion (if possible in english or french), with all<br/>necessary "
+"details, and then click on 'Send' below.</p><p><b>Please provide your email "
+"address so that we can contact you back</b> but <br/>NEVER DISCLOSE A "
+"PASSWORD while reporting issues.</p><p>Note that some technical information "
+"(such as your version of JLM and Java) will <br/>automatically be added to "
+"your feedback. None of these automatic information <br/>are personal and you "
+"still have to identify yourself if you want to.</p><p>Alternatively, you can "
+"use the <a href='http://github.com/oster/JLM/issues'>github interface</a> "
+"for feedback.</p></html>"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:78
+msgid "(your feedback comes here)"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:89
+#, fuzzy
+msgid "Cancel"
+msgstr "Cancel call"
+
+#: src/jlm/core/ui/FeedbackDialog.java:94
+msgid "Do you really want to cancel your feedback and lose any edit?"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:95
+msgid "are you sure?"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:102
+msgid "Send feedback"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:142
+msgid "Thank you for your feedback"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:148
+#: src/jlm/core/ui/FeedbackDialog.java:157
+msgid "Error while uploading your feedback"
+msgstr ""
+
+#: src/jlm/core/ui/JlmHtmlEditorKit.java:142
+#, java-format
+msgid "<img> tag without src attribute in exercise {0}"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:40
+#, fuzzy
+msgid "Choose your lesson"
+msgstr "Choose your course"
+
+#: src/jlm/core/ui/LessonChooser.java:54
+msgid ""
+"<table border=\"0\" align=\"center\"><tr>\n"
+"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n"
+"<td valign=\"center\">  <font size=\"+2\">Welcome to the Java "
+"Learning Machine</font>  </td>\n"
+"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n"
+"</tr></table>\n"
+"\n"
+"<p><font size=\"+1\">The JLM is a Learning Management System (LMS) aiming at "
+"teaching the art of computer programming through interactive exercises. It "
+"offers an extensive set of varied exercises, allowing you to practice at "
+"your own pace.</font></p><br/>"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:132 src/jlm/core/ui/MainFrame.java:163
+msgid "JLM lesson files"
+msgstr "JLM lesson files"
+
+#: src/jlm/core/ui/LessonChooser.java:141 src/jlm/core/ui/MainFrame.java:172
+msgid "Error"
+msgstr "Error"
+
+#: src/jlm/core/ui/LessonChooser.java:168
+msgid ""
+"<h1>Please pick a lesson</h1>\n"
+"<p>Please click on an icon on the left to select a lesson.</p>\n"
+"<p>Lessons located above are generally simpler than the ones located below.</"
+"p>"
+msgstr ""
+
+#. Create the button
+#: src/jlm/core/ui/LessonChooser.java:180
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:65
+msgid "Go"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:210
+#, java-format
+msgid ""
+"<p>(unable to display the short description of this lesson: file {0} not "
+"found)</p>"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:213
+msgid "<p><b>Your score:</b> "
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:221
+#, java-format
+msgid "{0} out of {1} exercises passed."
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:225
+#, java-format
+msgid "{0} out of {1} exercises passed in {2}."
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:231
+#, fuzzy
+msgid "You never attempted this lesson."
+msgstr "About this lesson"
+
 #: src/jlm/core/ui/LoggerPanel.java:31 src/jlm/core/ui/LoggerPanel.java:96
 msgid "Where error and other messages get written"
 msgstr "Where error and other messages get written"
@@ -118,166 +426,165 @@ 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/jlm/core/ui/MainFrame.java:161 src/jlm/core/ui/MainFrame.java:643
+#: src/jlm/core/ui/MainFrame.java:152 src/jlm/core/ui/MainFrame.java:647
 msgid "File"
 msgstr "File"
 
-#: src/jlm/core/ui/MainFrame.java:163
+#: src/jlm/core/ui/MainFrame.java:154
 msgid "File related functions"
 msgstr "File related functions"
 
-#: src/jlm/core/ui/MainFrame.java:166 src/jlm/core/ui/MainFrame.java:644
+#: src/jlm/core/ui/MainFrame.java:157 src/jlm/core/ui/MainFrame.java:648
 msgid "Load lesson"
 msgstr "Load lesson"
 
-#: src/jlm/core/ui/MainFrame.java:172
-msgid "JLM lesson files"
-msgstr "JLM lesson files"
-
-#: src/jlm/core/ui/MainFrame.java:181
-msgid "Error"
-msgstr "Error"
-
-#: src/jlm/core/ui/MainFrame.java:188 src/jlm/core/ui/MainFrame.java:645
+#: src/jlm/core/ui/MainFrame.java:179 src/jlm/core/ui/MainFrame.java:649
 msgid "Switch lesson"
 msgstr "Switch lesson"
 
-#: src/jlm/core/ui/MainFrame.java:199 src/jlm/core/ui/MainFrame.java:640
-#: src/jlm/core/ui/MainFrame.java:646
+#: src/jlm/core/ui/MainFrame.java:191 src/jlm/core/ui/MainFrame.java:416
+#: src/jlm/core/ui/MainFrame.java:644 src/jlm/core/ui/MainFrame.java:650
 msgid "Switch exercise"
 msgstr "Switch exercise"
 
-#: src/jlm/core/ui/MainFrame.java:212 src/jlm/core/ui/MainFrame.java:648
+#: src/jlm/core/ui/MainFrame.java:204 src/jlm/core/ui/MainFrame.java:652
 msgid "Teacher Console"
 msgstr "Teacher Console"
 
 #. Menu item to change the current Course
-#: src/jlm/core/ui/MainFrame.java:231 src/jlm/core/ui/MainFrame.java:649
+#: src/jlm/core/ui/MainFrame.java:223 src/jlm/core/ui/MainFrame.java:653
 msgid "Choose your course"
 msgstr "Choose your course"
 
-#: src/jlm/core/ui/MainFrame.java:250 src/jlm/core/ui/MainFrame.java:650
+#: src/jlm/core/ui/MainFrame.java:242 src/jlm/core/ui/MainFrame.java:654
 msgid "Quit"
 msgstr "Quit"
 
 #. === Edit menu ===
-#: src/jlm/core/ui/MainFrame.java:258 src/jlm/core/ui/MainFrame.java:652
+#: src/jlm/core/ui/MainFrame.java:250 src/jlm/core/ui/MainFrame.java:656
 msgid "Session"
 msgstr "Session"
 
-#: src/jlm/core/ui/MainFrame.java:263 src/jlm/core/ui/MainFrame.java:654
+#: src/jlm/core/ui/MainFrame.java:255 src/jlm/core/ui/MainFrame.java:658
 msgid "Revert Exercise"
 msgstr "Revert Exercise"
 
-#: src/jlm/core/ui/MainFrame.java:266 src/jlm/core/ui/MainFrame.java:655
+#: src/jlm/core/ui/MainFrame.java:258 src/jlm/core/ui/MainFrame.java:659
 msgid "Export Session Cache"
 msgstr "Export Session Cache"
 
-#: src/jlm/core/ui/MainFrame.java:269 src/jlm/core/ui/MainFrame.java:656
+#: src/jlm/core/ui/MainFrame.java:261 src/jlm/core/ui/MainFrame.java:660
 msgid "Import Session Cache"
 msgstr "Import Session Cache"
 
-#: src/jlm/core/ui/MainFrame.java:273 src/jlm/core/ui/MainFrame.java:657
+#: src/jlm/core/ui/MainFrame.java:265 src/jlm/core/ui/MainFrame.java:661
 msgid "Debug mode"
 msgstr "Debug mode"
 
 #. === Language menu ===
-#: src/jlm/core/ui/MainFrame.java:286 src/jlm/core/ui/MainFrame.java:660
+#: src/jlm/core/ui/MainFrame.java:278 src/jlm/core/ui/MainFrame.java:664
 msgid "Language"
 msgstr "Language"
 
 #. === Programming language changing ===
-#: src/jlm/core/ui/MainFrame.java:291 src/jlm/core/ui/MainFrame.java:661
+#: src/jlm/core/ui/MainFrame.java:283 src/jlm/core/ui/MainFrame.java:665
 msgid "Human"
 msgstr "Human"
 
-#: src/jlm/core/ui/MainFrame.java:305 src/jlm/core/ui/MainFrame.java:662
+#: src/jlm/core/ui/MainFrame.java:297 src/jlm/core/ui/MainFrame.java:666
 msgid "Computer"
 msgstr "Computer"
 
 #. === Help menu ===
-#: src/jlm/core/ui/MainFrame.java:309 src/jlm/core/ui/MainFrame.java:664
+#: src/jlm/core/ui/MainFrame.java:301 src/jlm/core/ui/MainFrame.java:668
 msgid "Help"
 msgstr "Help"
 
-#: src/jlm/core/ui/MainFrame.java:313 src/jlm/core/ui/MainFrame.java:665
+#: src/jlm/core/ui/MainFrame.java:305 src/jlm/core/ui/MainFrame.java:669
+msgid "Provide feedback"
+msgstr ""
+
+#: src/jlm/core/ui/MainFrame.java:315 src/jlm/core/ui/MainFrame.java:670
 msgid "About this lesson"
 msgstr "About this lesson"
 
-#: src/jlm/core/ui/MainFrame.java:326 src/jlm/core/ui/MainFrame.java:666
+#: src/jlm/core/ui/MainFrame.java:328 src/jlm/core/ui/MainFrame.java:671
 msgid "About this world"
 msgstr "About this world"
 
-#: src/jlm/core/ui/MainFrame.java:342 src/jlm/core/ui/MainFrame.java:668
+#: src/jlm/core/ui/MainFrame.java:344 src/jlm/core/ui/MainFrame.java:673
 msgid "About JLM"
 msgstr "About JLM"
 
-#: src/jlm/core/ui/MainFrame.java:462
-msgid "Next"
-msgstr "Next"
-
-#: src/jlm/core/ui/MainFrame.java:476 src/jlm/core/ui/MainFrame.java:635
-msgid "Step"
-msgstr "Step"
-
 #. Buttons
-#: src/jlm/core/ui/MainFrame.java:634
+#: src/jlm/core/ui/MainFrame.java:377 src/jlm/core/ui/MainFrame.java:638
 msgid "Run"
 msgstr "Run"
 
-#: src/jlm/core/ui/MainFrame.java:636
+#: src/jlm/core/ui/MainFrame.java:381 src/jlm/core/ui/MainFrame.java:479
+#: src/jlm/core/ui/MainFrame.java:639
+msgid "Step"
+msgstr "Step"
+
+#: src/jlm/core/ui/MainFrame.java:386 src/jlm/core/ui/MainFrame.java:640
 msgid "Stop"
 msgstr "Stop"
 
-#: src/jlm/core/ui/MainFrame.java:637
+#: src/jlm/core/ui/MainFrame.java:392 src/jlm/core/ui/MainFrame.java:641
 msgid "Reset"
 msgstr "Reset"
 
-#: src/jlm/core/ui/MainFrame.java:638
+#: src/jlm/core/ui/MainFrame.java:398 src/jlm/core/ui/MainFrame.java:642
 msgid "Demo"
 msgstr "Demo"
 
-#: src/jlm/core/ui/MainFrame.java:639 src/jlm/core/ui/action/HelpMe.java:37
+#: src/jlm/core/ui/MainFrame.java:404 src/jlm/core/ui/MainFrame.java:643
+#: src/jlm/core/ui/action/HelpMe.java:37
 msgid "Call for Help"
 msgstr "Call for Help"
 
-#: src/jlm/core/ui/MainFrame.java:653
+#: src/jlm/core/ui/MainFrame.java:464
+msgid "Next"
+msgstr "Next"
+
+#: src/jlm/core/ui/MainFrame.java:657
 msgid "Lesson related functions"
 msgstr "Lesson related functions"
 
-#: src/jlm/core/ui/MissionEditorTabs.java:97
+#: src/jlm/core/ui/MissionEditorTabs.java:96
 msgid "Mission"
 msgstr "Mission"
 
-#: src/jlm/core/ui/MissionEditorTabs.java:98
+#: src/jlm/core/ui/MissionEditorTabs.java:97
 msgid "Description of the work to do"
 msgstr "Description of the work to do"
 
 #. Create the tab with the code editor as content
-#: src/jlm/core/ui/MissionEditorTabs.java:167
+#: src/jlm/core/ui/MissionEditorTabs.java:166
 msgid "Type your code here"
 msgstr "Type your code here"
 
 #: src/jlm/core/ui/StatusBar.java:113
-msgid "Loading"
-msgstr "Loading"
-
-#: src/jlm/core/ui/StatusBar.java:117
 msgid "Saving"
 msgstr "Saving"
 
-#: src/jlm/core/ui/StatusBar.java:121
+#: src/jlm/core/ui/StatusBar.java:117
 msgid "Compiling"
 msgstr "Compiling"
 
-#: src/jlm/core/ui/StatusBar.java:135
+#: src/jlm/core/ui/StatusBar.java:131
 msgid "Running "
 msgstr "Running "
 
-#: src/jlm/core/ui/StatusBar.java:139
+#: src/jlm/core/ui/StatusBar.java:135
 msgid "Playing demo "
 msgstr "Playing demo "
 
+#: src/jlm/core/ui/StatusBar.java:139
+#, fuzzy
+msgid "Loading "
+msgstr "Loading"
+
 #: src/jlm/core/ui/action/HelpMe.java:37
 msgid "Cancel call"
 msgstr "Cancel call"
@@ -338,145 +645,371 @@ msgstr "No execution to stop right now"
 msgid "Switch to another exercise"
 msgstr "Switch to another exercise"
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:418
+#: src/jlm/universe/Entity.java:178
+#, java-format
+msgid ""
+"The execution of your program raised an exception: {0}\n"
+" Please fix your code.\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:192
+#, java-format
+msgid "Failed to start an interpreter for {0}"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:214
+#, java-format
+msgid ""
+"No {0} script source for entity {1}. Please report that bug against JLM."
+msgstr ""
+
+#: src/jlm/universe/Entity.java:236
+#, java-format
+msgid ""
+"Syntax error at line {0}: {1}\n"
+"In doubt, check your indentation, and that you don't mix tabs and spaces\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:244
+msgid ""
+"NameError raised: You seem to use a non-existent identifier; Please check "
+"for typos\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:247
+msgid "TypeError raised: you are probably misusing a function or something.\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:250
+msgid ""
+"UnboundLocalError raised: you are probably using a global variable that is "
+"not declared as such.\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:256
+msgid "Error: there is no baggle to pickup under the buggle"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:258
+msgid "Error: a buggle cannot carry more than one baggle at the same time"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:260
+msgid "Error: your buggle just teleported to the outer space..."
+msgstr ""
+
+#: src/jlm/universe/Entity.java:262
+msgid "Error: your buggle just hit a wall. That hurts."
+msgstr ""
+
+#: src/jlm/universe/Entity.java:265
+#, java-format
+msgid ""
+"Unknown error (please report): {0}\n"
+"Its value is: {1}"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:296
+#, java-format
+msgid ""
+"Script evaluation raised an exception that is not a ScriptException but a "
+"{0}.\n"
+" Please report this as a bug against JLM, with all details allowing to "
+"reproduce it.\n"
+"Exception message: {1}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:422
 msgid "Its value is 'null', which is never good."
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:425
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:429
 #, java-format
 msgid "    Its position is ({0},{1}); expected: ({2},{3}).\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:427
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:431
 #, java-format
 msgid "    Its direction is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:429
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:433
 #, java-format
 msgid "    Its color is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:431
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:435
 #, java-format
 msgid "    The color of its brush is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:433
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:437
 msgid "    It should not carry that baggle.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:435
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:439
 msgid "    It is not carrying any baggle.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:437
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:441
 msgid "    It encountered an issue, such as bumping into a wall.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:439
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:443
 msgid "    It didn't encounter any issue, such as bumping into a wall.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:88
+#: src/jlm/universe/bugglequest/BuggleWorld.java:127
 #, java-format
 msgid ""
 "{0}.map: this file does not seem to be a serialized BuggleWorld (the file is "
 "empty!)"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:94
+#: src/jlm/universe/bugglequest/BuggleWorld.java:133
 #, java-format
 msgid ""
 "{0}.map: This file does not seem to be a serialized BuggleWorld (malformated "
 "first line: {1})"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:101
+#: src/jlm/universe/bugglequest/BuggleWorld.java:139
 #, java-format
 msgid "{0}.map: End of file reached before world size specification"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:106
+#: src/jlm/universe/bugglequest/BuggleWorld.java:144
 #, java-format
-msgid "{0}.map:1: Expected 'Size: ??x??' but got '{0}'"
+msgid "{0}.map:1: Expected ''Size: NNxMM'' but got ''{0}''"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:352
+#: src/jlm/universe/bugglequest/BuggleWorld.java:170
+#, java-format
+msgid "Cannot put a buggle on coordinate {0},{1}: that''s out of the world"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:184
+#, java-format
+msgid "Invalid buggle''s direction: {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:191
+#: src/jlm/universe/bugglequest/BuggleWorld.java:198
+#, java-format
+msgid "Invalid buggle''s color name: {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:210
+#, java-format
+msgid "Cannot define a cell on coordinate {0},{1}: that''s out of the world"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:223
+#, java-format
+msgid "Invalid color name: {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:229
+#, java-format
+msgid "Expecting ''baggle'' or ''nobaggle'' but got {0} instead"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:233
+#, java-format
+msgid "Expecting ''topwall'' or ''notopwall'' but got {0} instead"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:237
+#, java-format
+msgid "Expecting ''leftwall'' or ''noleftwall'' but got {0} instead"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:247
+#, java-format
+msgid ""
+"The cell {0},{1} seem to be defined more than once. At least, there is two "
+"baggles here, which is not allowed."
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:263
+#, java-format
+msgid ""
+"Parse error. I was expecting a cell or a buggle description but got: {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:481
+#, java-format
+msgid "  The world''s name is {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:485
 #, java-format
 msgid "  In ({0},{1})"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:355
+#: src/jlm/universe/bugglequest/BuggleWorld.java:488
 #, java-format
-msgid "  Something is wrong about buggle \"{0}\":\n"
+msgid "  Something is wrong about buggle ''{0}'':\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:239
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:230
 msgid ", there shouldn't be this baggle"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:241
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:232
 msgid ", there should be a baggle"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:243
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:234
 msgid ", the baggle differs"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:246
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:237
 #, java-format
 msgid ", the ground should not be {0}"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:248
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:239
 #, java-format
 msgid ", the ground is expected to be {0}, but it is {1}"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:250
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:241
 #, java-format
 msgid ", the ground reads ''{0}'' (expected: ''{1}'')"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:253
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:244
 msgid ", there shouldn't be any wall at west"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:255
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:246
 msgid ", there should be a wall at west"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:258
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:249
 msgid ", there shouldn't be any wall at north"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:260
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:251
 msgid ", there should be a wall at north"
 msgstr ""
 
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:176
+msgid "Create New Map"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:228
+msgid "Open Map..."
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:234
+#, fuzzy
+msgid "JLM map files"
+msgstr "JLM lesson files"
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:242
+#, java-format
+msgid "Error while reading {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:58
+msgid "Property"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:58
+msgid "Value"
+msgstr ""
+
+#. The editor for the name
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:72
+#, fuzzy
+msgid "World name"
+msgstr "World"
+
+#. ---------- world width ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:84
+#, fuzzy
+msgid "World width"
+msgstr "World"
+
+#. ---------- world height ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:104
+msgid "World height"
+msgstr ""
+
+#. ---------- selected cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:124
+msgid "Selected cell X"
+msgstr ""
+
+#. ---------- selected cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:146
+msgid "Selected cell Y"
+msgstr ""
+
+#. ---------- Ground color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:167
+msgid "Ground color (name or r/g/b)"
+msgstr ""
+
+#. ---------- top wall cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:184
+msgid "Top wall?"
+msgstr ""
+
+#. ---------- left wall cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:206
+msgid "Left wall?"
+msgstr ""
+
+#. ---------- have baggle ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:228
+msgid "Baggle?"
+msgstr ""
+
+#. ---------- Buggle name ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:259
+msgid "Buggle name"
+msgstr ""
+
+#. ---------- Buggle direction ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:270
+msgid "Buggle direction (N|S|E|W)"
+msgstr ""
+
+#. ---------- Buggle color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:299
+msgid "Buggle color (name or r/g/b)"
+msgstr ""
+
+#. ---------- Buggle color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:315
+msgid "Brush color (name or r/g/b)"
+msgstr ""
+
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:55
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:241
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:232
 msgid "forward"
 msgstr ""
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:69
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:240
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:231
 msgid "backward"
 msgstr ""
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:83
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:242
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:233
 msgid "turn left"
 msgstr ""
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:91
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:243
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:234
 msgid "turn right"
 msgstr ""
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:99
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:244
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:235
 msgid "mark"
 msgstr ""
 
@@ -488,26 +1021,139 @@ msgstr ""
 msgid "Your buggle has collided with a wall, it hurts a lot ! ='("
 msgstr ""
 
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:245
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:236
 msgid "Brush Color"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:246
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:237
 msgid "Buggle Color"
 msgstr ""
 
-#: src/jlm/universe/sort/SortingButtonPanel.java:64
+#: src/jlm/universe/sort/SortingButtonPanel.java:63
 msgid "go"
 msgstr "go"
 
-#: src/jlm/universe/sort/SortingWorldView.java:53
+#: src/jlm/universe/sort/SortingWorldView.java:51
+#: src/lessons/sort/baseball/universe/BaseballWorldView.java:655
 msgid "Switch to time view"
 msgstr "Switch to time view"
 
-#: src/jlm/universe/sort/SortingWorldView.java:55
+#: src/jlm/universe/sort/SortingWorldView.java:53
+#: src/lessons/sort/baseball/universe/BaseballWorldView.java:657
 msgid "Switch to state view"
 msgstr "Switch to state view"
 
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:70
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
+msgid "Invalid move"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:134
+#, java-format
+msgid ""
+"Cannot move from slot {0} to {1}: the only existing slots are 0, 1 and 2"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:136
+#, java-format
+msgid "Cannot move from slot {0} to itself"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:138
+#, java-format
+msgid "No disc to move from slot {0}"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:143
+#, java-format
+msgid ""
+"Cannot move disc from slot {0} to {1} small disk must remain over large ones "
+"but {2} > {3}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:75
+#, java-format
+msgid ""
+"The player {0} of the base {1} cannot reach the hole that is too far from "
+"its position"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:145
+msgid "This is not a baseball world :-("
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:149
+#, java-format
+msgid "Differing amount of bases: {0} vs {1}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:152
+#, java-format
+msgid "Differing amount of players: {0} vs {1}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:158
+#, java-format
+msgid "Player at base {0}, pos {1} differs: {2} vs {3}\n"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:351
+#, java-format
+msgid ""
+"It''s still not sorted!! PLEASE REPORT THIS BUG, along with the following "
+"information:\n"
+"Exercise: {0}; Amount of bases: {1}; Initial situation: {2}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:388
+#, java-format
+msgid "Cannot move from base {0} since it''s not between 0 and {1}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:391
+#, java-format
+msgid "Cannot move from position {0} since it''s not between 0 and {1})"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:400
+#, java-format
+msgid ""
+"The player {0} from base {1} is too far from the hole (at base {2}) to reach "
+"it in one move"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:116
+msgid "This is not a world of pancakes :-("
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:120
+msgid "The two worlds are of differing size"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:193
+#, java-format
+msgid "Asked to flip {0} pancakes, but you must flip at least one"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:195
+#, java-format
+msgid ""
+"Asked to flip {0} pancakes, but there is only {1} pancakes on this stack"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:229
+#, java-format
+msgid ""
+"Cannot get the radius of pancake #{0} because it''s not between 0 and {1}"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:248
+#, java-format
+msgid ""
+"Cannot get the orientation of pancake #{0} because it''s not between 0 and "
+"{1}"
+msgstr ""
+
 #~ msgid "Do you really want to quit ?"
 #~ msgstr "Do you really want to quit ?"
 
diff --git a/lib/l10n-engine/fr.po b/lib/l10n-engine/fr.po
index d36ec19..795dafd 100644
--- a/lib/l10n-engine/fr.po
+++ b/lib/l10n-engine/fr.po
@@ -7,8 +7,8 @@ msgid ""
 msgstr ""
 "Project-Id-Version: JLM\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-06-14 01:05+0200\n"
-"PO-Revision-Date: 2013-05-30 11:25+0200\n"
+"POT-Creation-Date: 2013-08-04 21:21+0200\n"
+"PO-Revision-Date: 2013-08-04 16:34+0200\n"
 "Last-Translator: Frank STENGEL <fstengel at mac.com>\n"
 "Language-Team: LANGUAGE <LL at li.org>\n"
 "Language: \n"
@@ -17,10 +17,103 @@ msgstr ""
 "Content-Transfer-Encoding: 8bit\n"
 "X-Generator: Poedit 1.5.5\n"
 
-#: src/jlm/core/model/Game.java:292 src/jlm/core/model/Game.java:324
+#: src/jlm/core/model/Game.java:146
+#, java-format
+msgid ""
+"Warning, the default programming language is neither ''Java'' nor ''python'' "
+"but {0}.\n"
+"   This language will be used to setup the worlds, possibly leading to "
+"severe issues for the exercises that don''t expect it.\n"
+"   It is safer to change the current language, and restart JLM before "
+"proceeding.\n"
+"   Alternatively, the property {1} can be changed in your configuration file "
+"($HOME/.jlm/jlm.properties"
+msgstr ""
+"Attention, le langage de programmation par défaut n''est ni «Java» ni "
+"«python», mais {0}.\n"
+"  Ce langage sera utilisé pour configurer les mondes, ce qui risque de "
+"causer de gros problèmes pour les exercices qui ne sont pas conçus à cet "
+"effet.\n"
+"  Il est plus sûr de changer le langage par défaut puis de redémarrer JLM.\n"
+"  Vous pouvez également changer la propriété {1} de votre fichier de "
+"configuration ($HOME/.jlm/jlm.properties) pour cela."
+
+#: src/jlm/core/model/Game.java:160
+#, java-format
+msgid ""
+"Your progress will be posted to http://identi.ca/jlmlovers This can be "
+"turned off through the property {0}"
+msgstr ""
+"Vos progrès seront postés sur http://identi.ca/jlmlovers Cela peut être "
+"désactivé par la propriété {0}."
+
+#: src/jlm/core/model/Game.java:163
+#, java-format
+msgid ""
+"Your progress will NOT be posted to identica, as requested by the property "
+"{0}"
+msgstr ""
+"Vos progrès ne seront PAS postés sur identica, comme demandé par la "
+"propriété {0}."
+
+#: src/jlm/core/model/Game.java:166
+#, java-format
+msgid ""
+"Your progress will be posted to https://twitter.com/jlmlovers This can be "
+"turned off through the property {0}"
+msgstr ""
+"Vos progrès seront postés sur http://twitter.com/jlmlovers Cela peut être "
+"désactivé par la propriété {0}."
+
+#: src/jlm/core/model/Game.java:169
+#, java-format
+msgid ""
+"Your progress will NOT be posted to twitter, as requested by the property {0}"
+msgstr ""
+"Vos progrès ne seront PAS postés sur twitter, comme demandé par la propriété "
+"{0}."
+
+#: src/jlm/core/model/Game.java:217 src/jlm/core/model/Game.java:218
+#, 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/jlm/core/model/Game.java:219
+#, java-format
+msgid "Load lesson {0}"
+msgstr "Chargement de la leçon {0}"
+
+#: src/jlm/core/model/Game.java:325 src/jlm/core/model/Game.java:357
 msgid "Operation cancelled by the user"
 msgstr "Opération annulée par l'utilisateur"
 
+#: src/jlm/core/model/Game.java:397
+#, 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/jlm/core/model/Game.java:920
+#, java-format
+msgid "{0} is not writable"
+msgstr "{0} n'est pas accessible en écriture."
+
+#: src/jlm/core/model/Game.java:924
+#, java-format
+msgid "{0} is not a directory"
+msgstr "{0} n'est pas un répertoire."
+
+#: src/jlm/core/model/Game.java:931
+#, java-format
+msgid "Cannot create {0}"
+msgstr "Impossible de créer {0}"
+
+#: src/jlm/core/model/Game.java:937
+#, java-format
+msgid "Impossible to find a path for JLM datas. Tested {0}"
+msgstr ""
+"Impossible de trouver un emplacement pour sauvegarder les données de JLM. "
+"Emplacements testés: {0}"
+
 #: src/jlm/core/model/HelpServer.java:27
 msgid "Asking to the teacher for help"
 msgstr "Demander de l'aide à l'enseignant"
@@ -29,31 +122,156 @@ msgstr "Demander de l'aide à l'enseignant"
 msgid "Cancel call for help to the teacher"
 msgstr "Annuler la demande d'aide"
 
-#: src/jlm/core/model/LessonRunner.java:88
+#: src/jlm/core/model/LessonRunner.java:90
 #, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
-" {0} tests passed.\n"
+"{0} tests passed."
 msgstr ""
 "Félicitation, vous avez réussi cet exercice.\n"
-" {0} test(s) passés.\n"
+"{0} tests passés."
 
-#: src/jlm/core/model/LessonRunner.java:90
-#: src/jlm/core/model/LessonRunner.java:96
+#: src/jlm/core/model/LessonRunner.java:92
+#: src/jlm/core/model/LessonRunner.java:98
+#: src/jlm/core/model/LessonRunner.java:107
+#: src/jlm/core/model/LessonRunner.java:113
 msgid "Exercice passed \\o/"
 msgstr "Exercice réussi \\o/"
 
-#: src/jlm/core/model/LessonRunner.java:95
+#: src/jlm/core/model/LessonRunner.java:96
+msgid "Congratulations, you passed this exercise."
+msgstr "Félicitation, vous avez réussi cet exercice."
+
+#: src/jlm/core/model/LessonRunner.java:106
+#, java-format
 msgid ""
-"Congratulations, you passed this test. Which exercise will you do now?\n"
+"Congratulations, you passed this exercise.\n"
+"({0} tests passed)\n"
+"Which exercise will you do now?"
 msgstr ""
-"Félicitation, vous avez réussi ce test. Par quel exercice voulez vous "
-"continuer ?\n"
+"Félicitation, vous avez réussi cet exercice.\n"
+"({0} tests passés)\n"
+"Par quel exercice voulez vous continuer ?"
+
+#: src/jlm/core/model/LessonRunner.java:112
+msgid ""
+"Congratulations, you passed this exercise.\n"
+"Which exercise will you do now?"
+msgstr ""
+"Félicitation, vous avez réussi cet exercice.\n"
+"Par quel exercice voulez vous continuer ?"
 
 #: src/jlm/core/model/lesson/Exercise.java:77
 #, java-format
 msgid "The world ''{0}'' differs"
+msgstr "Le monde ''{0}'' diffère"
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:41
+#, java-format
+msgid "Source file {0}.{1} not found."
+msgstr "Le fichier source {0}.{1} est introuvable."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:88
+#, java-format
+msgid "{0}: BEGIN TEMPLATE within the template. Please fix your entity."
+msgstr ""
+"{0}: BEGIN TEMPLATE à l'intérieur de la template. Veuillez corriger votre "
+"entité."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:108
+#, java-format
+msgid ""
+"{0}: BEGIN SOLUTION is closed with END TEMPLATE. Please fix your entity."
+msgstr ""
+"{0}: BEGIN SOLUTION est clos par END TEMPLATE. Veuillez corriger votre "
+"entité."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:122
+#, java-format
+msgid ""
+"{0}: END TEMPLATE with no matching BEGIN TEMPLATE. Please fix your entity."
+msgstr ""
+"{0}: END TEMPLATE sans BEGIN TEMPLATE correspondant. Veuillez corriger votre "
+"entité."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:126
+#, java-format
+msgid "{0}: Begin solution in template tail. Change it to BEGIN HIDDEN"
+msgstr ""
+"{0}: BEGIN SOLUTION après la fin du template. Changez le en BEGIN HIDDEN."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:153
+#, java-format
+msgid ""
+"Parser error in file {0}. This is a parser bug (state={1}), please report."
+msgstr ""
+"Error d''analyse à la lecture du fichier {0}. C''est un bug de l''analyseur "
+"(état={1}), merci de faire un rapport."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:158
+#, java-format
+msgid ""
+"{0}: End of file unexpected after the solution but within the template. "
+"Please fix your entity."
+msgstr ""
+"{0}: Fin de fichier inattendue après la solution mais avant la fin du "
+"template. Veuillez corriger votre entité."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:160
+#, java-format
+msgid ""
+"{0}: End of file unexpected (state: {1}). Did you forget to close your "
+"template or solution? Please fix your entity."
+msgstr ""
+"{0}: Fin de fichier inattendue (état de l''analyseur: {1}). Peut-être avez-"
+"vous oublié de fermer votre template ou votre solution ? Veuillez corriger "
+"votre entité."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:311
+#, java-format
+msgid "World {0} is broken ({1}). Recompute all answer worlds."
+msgstr "Le monde {0} est cassé ({1}). Recalcul de tous les mondes solutions."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:315
+#, java-format
+msgid ""
+"IO exception while reading world {0} ({1}). Recompute all answer worlds."
+msgstr ""
+"Exception d''entrée/sortie lors de la lecture du monde {0} ({1}). Recalcul "
+"de tous les mondes solutions."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:326
+#, java-format
+msgid ""
+"Recompute the answer of {0} despite the cache file, as requested by the "
+"property {1}"
 msgstr ""
+"Recalcul de la solution de {0} malgré le fichier de cache, comme demandé par "
+"la propriété {1}."
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:349
+#, java-format
+msgid "Error while writing answer world of {0}:"
+msgstr "Erreur lors de l''écriture du monde de correction de {0} :"
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:353
+#, java-format
+msgid "Cannot write answer world of {0}. Please check the permissions."
+msgstr ""
+"Impossible d''écrire le monde de correction de {0}. Veuillez vérifier les "
+"permissions."
+
+#: src/jlm/core/model/lesson/Lecture.java:88
+#: src/jlm/core/model/lesson/Lesson.java:84
+#, java-format
+msgid "File {0}.html not found."
+msgstr "Le fichier {0}.html est introuvable."
+
+#: src/jlm/core/model/lesson/Lecture.java:97
+#: src/jlm/core/model/lesson/Lesson.java:94
+#, java-format
+msgid "Cannot find the name of mission in {0}.html"
+msgstr "Impossible de trouver le nom de la mission dans {0}.html"
 
 #: src/jlm/core/ui/AboutJLMDialog.java:34
 msgid "About JLM dialogTitle"
@@ -68,9 +286,10 @@ msgstr "Fermer"
 msgid "About lesson - "
 msgstr "À propos de la leçon - "
 
-#: src/jlm/core/ui/AboutWorldDialog.java:29
-msgid "About world - "
-msgstr "À propos du monde - "
+#: src/jlm/core/ui/AboutWorldDialog.java:32
+#, java-format
+msgid "About world - {0}"
+msgstr "À propos du monde - {0}"
 
 #: src/jlm/core/ui/ExerciseFailedDialog.java:29
 msgid "Exercise failed /o\\"
@@ -112,6 +331,162 @@ msgstr "Monde attendu après exécution du code"
 msgid "Switch the entity"
 msgstr "Changer d'entité"
 
+#: src/jlm/core/ui/FeedbackDialog.java:49
+msgid "Report your feedback"
+msgstr "Rapporter un retour"
+
+#: src/jlm/core/ui/FeedbackDialog.java:59
+msgid ""
+"<html><p>Thanks for your feedback on JLM. We deeply need this to make the "
+"tool match <br>your needs, so please don't hesitate to report any "
+"suggestion, such as typos and <br/>unclear parts in the mission texts, other "
+"improvement to the existing exercises<br/>or prospective exercises. We will "
+"do our best to integrate your suggestions.</p><p>Please write here your "
+"suggestion (if possible in english or french), with all<br/>necessary "
+"details, and then click on 'Send' below.</p><p><b>Please provide your email "
+"address so that we can contact you back</b> but <br/>NEVER DISCLOSE A "
+"PASSWORD while reporting issues.</p><p>Note that some technical information "
+"(such as your version of JLM and Java) will <br/>automatically be added to "
+"your feedback. None of these automatic information <br/>are personal and you "
+"still have to identify yourself if you want to.</p><p>Alternatively, you can "
+"use the <a href='http://github.com/oster/JLM/issues'>github interface</a> "
+"for feedback.</p></html>"
+msgstr ""
+"<html><p>Merci pour votre retour sur JLM. Nous en avons vraiment besoin "
+"pour<br/>améliorer notre outil et nous assurer qu'il correspond à vos "
+"besoins. N'hésitez<br/>pas à nous signaler toute amélioration possible, "
+"telles que des fautes et des<br/>parties peu claires dans les énoncés, "
+"d'autres améliorations aux exercices<br/>existants, ou des idées d'exercices "
+"supplémentaires. Nous ferons de notre<br/>mieux pour intégrer vos "
+"suggestions.</p><p>Veuillez écrire ici vos suggestions (si possible en "
+"français ou anglais),<br/>avec tous les détails nécessaires, et cliquez "
+"ensuite sur «envoyer».</p><p><b>N'oubliez pas d'indiquer votre email si vous "
+"voulez que nous vous contactions<br/>en retour</b>, mais NE DONNEZ JAMAIS UN "
+"MOT DE PASSE DANS UN FORMULAIRE DE CE GENRE.<br/></p><p>Notez que certaines "
+"données techniques (telles que votre version de JLM ou de Java)<br/>seront "
+"jointes à votre envoi, mais nous ne récoltons aucune donnée personnelle<br/"
+">de cette façon, et il faut que vous vous identifiez vous même si vous le "
+"souhaitez.</p><p>Une autre façon de rapporter du feedback sur JLM est "
+"d'utiliser <a href='http://github.com/oster/JLM/issues'>l'interface github</"
+"a>.</p></html>"
+
+#: src/jlm/core/ui/FeedbackDialog.java:78
+msgid "(your feedback comes here)"
+msgstr "(votre retour vient ici)"
+
+#: src/jlm/core/ui/FeedbackDialog.java:89
+msgid "Cancel"
+msgstr "Annuler"
+
+#: src/jlm/core/ui/FeedbackDialog.java:94
+msgid "Do you really want to cancel your feedback and lose any edit?"
+msgstr ""
+"Voullez vous vraiment annuler votre retour et perdre ce que vous avez écrit ?"
+
+#: src/jlm/core/ui/FeedbackDialog.java:95
+msgid "are you sure?"
+msgstr "êtes vous sûr?"
+
+#: src/jlm/core/ui/FeedbackDialog.java:102
+msgid "Send feedback"
+msgstr "Envoyer"
+
+#: src/jlm/core/ui/FeedbackDialog.java:142
+msgid "Thank you for your feedback"
+msgstr "Merci pour votre retour"
+
+#: src/jlm/core/ui/FeedbackDialog.java:148
+#: src/jlm/core/ui/FeedbackDialog.java:157
+msgid "Error while uploading your feedback"
+msgstr "Erreur lors de l'envoi de votre retour"
+
+#: src/jlm/core/ui/JlmHtmlEditorKit.java:142
+#, java-format
+msgid "<img> tag without src attribute in exercise {0}"
+msgstr "Tag <img> sans attribut src dans l''exercice {0}."
+
+#: src/jlm/core/ui/LessonChooser.java:40
+msgid "Choose your lesson"
+msgstr "Sélectionner une leçon"
+
+#: src/jlm/core/ui/LessonChooser.java:54
+msgid ""
+"<table border=\"0\" align=\"center\"><tr>\n"
+"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n"
+"<td valign=\"center\">  <font size=\"+2\">Welcome to the Java "
+"Learning Machine</font>  </td>\n"
+"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n"
+"</tr></table>\n"
+"\n"
+"<p><font size=\"+1\">The JLM is a Learning Management System (LMS) aiming at "
+"teaching the art of computer programming through interactive exercises. It "
+"offers an extensive set of varied exercises, allowing you to practice at "
+"your own pace.</font></p><br/>"
+msgstr ""
+"<table border=\"0\" align=\"center\"><tr>\n"
+"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n"
+"<td valign=\"center\">  <font size=\"+2\">Bienvenus dans la Java "
+"Learning Machine</font>  </td>\n"
+"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n"
+"</tr></table>\n"
+"\n"
+"<p><font size=\"+1\">JLM est une plate-forme pédagogique destinée à "
+"simplifier l'apprentissage de la programmation au travers d'exercices "
+"interactifs. De nombreux exercices sont proposés, pour vous permettre "
+"d'apprendre à votre rythme.</font></p><br/>"
+
+#: src/jlm/core/ui/LessonChooser.java:132 src/jlm/core/ui/MainFrame.java:163
+msgid "JLM lesson files"
+msgstr "Fichiers de leçons pour la JLM"
+
+#: src/jlm/core/ui/LessonChooser.java:141 src/jlm/core/ui/MainFrame.java:172
+msgid "Error"
+msgstr "Erreur"
+
+#: src/jlm/core/ui/LessonChooser.java:168
+msgid ""
+"<h1>Please pick a lesson</h1>\n"
+"<p>Please click on an icon on the left to select a lesson.</p>\n"
+"<p>Lessons located above are generally simpler than the ones located below.</"
+"p>"
+msgstr ""
+"<h1>Veuillez choisir une leçon</h1>\n"
+"<p>Cliquez sur un icône à gauche pour choisir une leçon.</p>\n"
+"<p>Les leçons du haut sont généralement plus simples que celles du bas.</p>"
+
+#. Create the button
+#: src/jlm/core/ui/LessonChooser.java:180
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:65
+msgid "Go"
+msgstr "Aller"
+
+#: src/jlm/core/ui/LessonChooser.java:210
+#, java-format
+msgid ""
+"<p>(unable to display the short description of this lesson: file {0} not "
+"found)</p>"
+msgstr ""
+"<p>(impossible d''afficher le descriptif court de cette leçon: le fichier "
+"{0} est introuvable)</p>"
+
+#: src/jlm/core/ui/LessonChooser.java:213
+msgid "<p><b>Your score:</b> "
+msgstr "<p><b>Votre score :</b> "
+
+#: src/jlm/core/ui/LessonChooser.java:221
+#, java-format
+msgid "{0} out of {1} exercises passed."
+msgstr "{0} exercices sur {1} réussis."
+
+#: src/jlm/core/ui/LessonChooser.java:225
+#, java-format
+msgid "{0} out of {1} exercises passed in {2}."
+msgstr "{0} exercices sur {1} réussis en {2}."
+
+#: src/jlm/core/ui/LessonChooser.java:231
+msgid "You never attempted this lesson."
+msgstr "Vous n'avez jamais tenté cette leçon."
+
 #: src/jlm/core/ui/LoggerPanel.java:31 src/jlm/core/ui/LoggerPanel.java:96
 msgid "Where error and other messages get written"
 msgstr "Endroit ou les erreurs et autres messages sont écrits"
@@ -119,166 +494,164 @@ 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/jlm/core/ui/MainFrame.java:161 src/jlm/core/ui/MainFrame.java:643
+#: src/jlm/core/ui/MainFrame.java:152 src/jlm/core/ui/MainFrame.java:647
 msgid "File"
 msgstr "Fichier"
 
-#: src/jlm/core/ui/MainFrame.java:163
+#: src/jlm/core/ui/MainFrame.java:154
 msgid "File related functions"
 msgstr "Fonction relatives à la gestion de fichiers"
 
-#: src/jlm/core/ui/MainFrame.java:166 src/jlm/core/ui/MainFrame.java:644
+#: src/jlm/core/ui/MainFrame.java:157 src/jlm/core/ui/MainFrame.java:648
 msgid "Load lesson"
 msgstr "Charger Leçon"
 
-#: src/jlm/core/ui/MainFrame.java:172
-msgid "JLM lesson files"
-msgstr "Fichiers de leçons pour la JLM"
-
-#: src/jlm/core/ui/MainFrame.java:181
-msgid "Error"
-msgstr "Erreur"
-
-#: src/jlm/core/ui/MainFrame.java:188 src/jlm/core/ui/MainFrame.java:645
+#: src/jlm/core/ui/MainFrame.java:179 src/jlm/core/ui/MainFrame.java:649
 msgid "Switch lesson"
 msgstr "Sélectionner une leçon"
 
-#: src/jlm/core/ui/MainFrame.java:199 src/jlm/core/ui/MainFrame.java:640
-#: src/jlm/core/ui/MainFrame.java:646
+#: src/jlm/core/ui/MainFrame.java:191 src/jlm/core/ui/MainFrame.java:416
+#: src/jlm/core/ui/MainFrame.java:644 src/jlm/core/ui/MainFrame.java:650
 msgid "Switch exercise"
 msgstr "Changer d'exercice"
 
-#: src/jlm/core/ui/MainFrame.java:212 src/jlm/core/ui/MainFrame.java:648
+#: src/jlm/core/ui/MainFrame.java:204 src/jlm/core/ui/MainFrame.java:652
 msgid "Teacher Console"
 msgstr "Console enseignant"
 
 #. Menu item to change the current Course
-#: src/jlm/core/ui/MainFrame.java:231 src/jlm/core/ui/MainFrame.java:649
+#: src/jlm/core/ui/MainFrame.java:223 src/jlm/core/ui/MainFrame.java:653
 msgid "Choose your course"
 msgstr "Sélectionner un cours"
 
-#: src/jlm/core/ui/MainFrame.java:250 src/jlm/core/ui/MainFrame.java:650
+#: src/jlm/core/ui/MainFrame.java:242 src/jlm/core/ui/MainFrame.java:654
 msgid "Quit"
 msgstr "Quitter"
 
 #. === Edit menu ===
-#: src/jlm/core/ui/MainFrame.java:258 src/jlm/core/ui/MainFrame.java:652
+#: src/jlm/core/ui/MainFrame.java:250 src/jlm/core/ui/MainFrame.java:656
 msgid "Session"
 msgstr "Session"
 
-#: src/jlm/core/ui/MainFrame.java:263 src/jlm/core/ui/MainFrame.java:654
+#: src/jlm/core/ui/MainFrame.java:255 src/jlm/core/ui/MainFrame.java:658
 msgid "Revert Exercise"
 msgstr "Recommencer l'exercice"
 
-#: src/jlm/core/ui/MainFrame.java:266 src/jlm/core/ui/MainFrame.java:655
+#: src/jlm/core/ui/MainFrame.java:258 src/jlm/core/ui/MainFrame.java:659
 msgid "Export Session Cache"
 msgstr "Exporter le cache de session"
 
-#: src/jlm/core/ui/MainFrame.java:269 src/jlm/core/ui/MainFrame.java:656
+#: src/jlm/core/ui/MainFrame.java:261 src/jlm/core/ui/MainFrame.java:660
 msgid "Import Session Cache"
 msgstr "Importer le cache de session"
 
-#: src/jlm/core/ui/MainFrame.java:273 src/jlm/core/ui/MainFrame.java:657
+#: src/jlm/core/ui/MainFrame.java:265 src/jlm/core/ui/MainFrame.java:661
 msgid "Debug mode"
 msgstr "Mode débogage"
 
 #. === Language menu ===
-#: src/jlm/core/ui/MainFrame.java:286 src/jlm/core/ui/MainFrame.java:660
+#: src/jlm/core/ui/MainFrame.java:278 src/jlm/core/ui/MainFrame.java:664
 msgid "Language"
 msgstr "Langage"
 
 #. === Programming language changing ===
-#: src/jlm/core/ui/MainFrame.java:291 src/jlm/core/ui/MainFrame.java:661
+#: src/jlm/core/ui/MainFrame.java:283 src/jlm/core/ui/MainFrame.java:665
 msgid "Human"
 msgstr "Humain"
 
-#: src/jlm/core/ui/MainFrame.java:305 src/jlm/core/ui/MainFrame.java:662
+#: src/jlm/core/ui/MainFrame.java:297 src/jlm/core/ui/MainFrame.java:666
 msgid "Computer"
 msgstr "Ordinateur"
 
 #. === Help menu ===
-#: src/jlm/core/ui/MainFrame.java:309 src/jlm/core/ui/MainFrame.java:664
+#: src/jlm/core/ui/MainFrame.java:301 src/jlm/core/ui/MainFrame.java:668
 msgid "Help"
 msgstr "Aide"
 
-#: src/jlm/core/ui/MainFrame.java:313 src/jlm/core/ui/MainFrame.java:665
+#: src/jlm/core/ui/MainFrame.java:305 src/jlm/core/ui/MainFrame.java:669
+msgid "Provide feedback"
+msgstr "Faire un retour"
+
+#: src/jlm/core/ui/MainFrame.java:315 src/jlm/core/ui/MainFrame.java:670
 msgid "About this lesson"
 msgstr "À propos de cette leçon"
 
-#: src/jlm/core/ui/MainFrame.java:326 src/jlm/core/ui/MainFrame.java:666
+#: src/jlm/core/ui/MainFrame.java:328 src/jlm/core/ui/MainFrame.java:671
 msgid "About this world"
 msgstr "À propos de ce monde"
 
-#: src/jlm/core/ui/MainFrame.java:342 src/jlm/core/ui/MainFrame.java:668
+#: src/jlm/core/ui/MainFrame.java:344 src/jlm/core/ui/MainFrame.java:673
 msgid "About JLM"
 msgstr "À propos de JLM"
 
-#: src/jlm/core/ui/MainFrame.java:462
-msgid "Next"
-msgstr "Suivant"
-
-#: src/jlm/core/ui/MainFrame.java:476 src/jlm/core/ui/MainFrame.java:635
-msgid "Step"
-msgstr "Un pas"
-
 #. Buttons
-#: src/jlm/core/ui/MainFrame.java:634
+#: src/jlm/core/ui/MainFrame.java:377 src/jlm/core/ui/MainFrame.java:638
 msgid "Run"
 msgstr "Exécuter"
 
-#: src/jlm/core/ui/MainFrame.java:636
+#: src/jlm/core/ui/MainFrame.java:381 src/jlm/core/ui/MainFrame.java:479
+#: src/jlm/core/ui/MainFrame.java:639
+msgid "Step"
+msgstr "Un pas"
+
+#: src/jlm/core/ui/MainFrame.java:386 src/jlm/core/ui/MainFrame.java:640
 msgid "Stop"
 msgstr "Stop"
 
-#: src/jlm/core/ui/MainFrame.java:637
+#: src/jlm/core/ui/MainFrame.java:392 src/jlm/core/ui/MainFrame.java:641
 msgid "Reset"
 msgstr "Réinitialiser"
 
-#: src/jlm/core/ui/MainFrame.java:638
+#: src/jlm/core/ui/MainFrame.java:398 src/jlm/core/ui/MainFrame.java:642
 msgid "Demo"
 msgstr "Démo"
 
-#: src/jlm/core/ui/MainFrame.java:639 src/jlm/core/ui/action/HelpMe.java:37
+#: src/jlm/core/ui/MainFrame.java:404 src/jlm/core/ui/MainFrame.java:643
+#: src/jlm/core/ui/action/HelpMe.java:37
 msgid "Call for Help"
 msgstr "Appeler à l'aide"
 
-#: src/jlm/core/ui/MainFrame.java:653
+#: src/jlm/core/ui/MainFrame.java:464
+msgid "Next"
+msgstr "Suivant"
+
+#: src/jlm/core/ui/MainFrame.java:657
 msgid "Lesson related functions"
 msgstr "Fonctions relatives aux leçons"
 
-#: src/jlm/core/ui/MissionEditorTabs.java:97
+#: src/jlm/core/ui/MissionEditorTabs.java:96
 msgid "Mission"
 msgstr "Mission"
 
-#: src/jlm/core/ui/MissionEditorTabs.java:98
+#: src/jlm/core/ui/MissionEditorTabs.java:97
 msgid "Description of the work to do"
 msgstr "Description de la tache à effectuer"
 
 #. Create the tab with the code editor as content
-#: src/jlm/core/ui/MissionEditorTabs.java:167
+#: src/jlm/core/ui/MissionEditorTabs.java:166
 msgid "Type your code here"
 msgstr "Composer votre code ici"
 
 #: src/jlm/core/ui/StatusBar.java:113
-msgid "Loading"
-msgstr "Chargement"
-
-#: src/jlm/core/ui/StatusBar.java:117
 msgid "Saving"
 msgstr "Sauvegarde"
 
-#: src/jlm/core/ui/StatusBar.java:121
+#: src/jlm/core/ui/StatusBar.java:117
 msgid "Compiling"
 msgstr "Compilation"
 
-#: src/jlm/core/ui/StatusBar.java:135
+#: src/jlm/core/ui/StatusBar.java:131
 msgid "Running "
 msgstr "Exécution de "
 
-#: src/jlm/core/ui/StatusBar.java:139
+#: src/jlm/core/ui/StatusBar.java:135
 msgid "Playing demo "
 msgstr "Exécution de la démo "
 
+#: src/jlm/core/ui/StatusBar.java:139
+msgid "Loading "
+msgstr "Chargement de "
+
 #: src/jlm/core/ui/action/HelpMe.java:37
 msgid "Cancel call"
 msgstr "Annuler l'appel"
@@ -342,178 +715,561 @@ msgstr "Il n'y a pas de code en cours d'exécution"
 msgid "Switch to another exercise"
 msgstr "Accéder à un autre exercice"
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:418
-msgid "Its value is 'null', which is never good."
+#: src/jlm/universe/Entity.java:178
+#, java-format
+msgid ""
+"The execution of your program raised an exception: {0}\n"
+" Please fix your code.\n"
 msgstr ""
+"L''exécution de votre programme a déclanché une exception : {0}\n"
+" Merci de corriger votre code.\n"
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:425
+#: src/jlm/universe/Entity.java:192
 #, java-format
-msgid "    Its position is ({0},{1}); expected: ({2},{3}).\n"
+msgid "Failed to start an interpreter for {0}"
+msgstr "Impossible de démarrer un interpréteur pour {0}."
+
+#: src/jlm/universe/Entity.java:214
+#, java-format
+msgid ""
+"No {0} script source for entity {1}. Please report that bug against JLM."
 msgstr ""
+"Pas de script {0} pour l''entité {1}. Merci de rapporter ce bug de JLM."
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:427
+#: src/jlm/universe/Entity.java:236
 #, java-format
-msgid "    Its direction is {0}; expected: {1}.\n"
+msgid ""
+"Syntax error at line {0}: {1}\n"
+"In doubt, check your indentation, and that you don't mix tabs and spaces\n"
 msgstr ""
+"Erreur de syntaxe à la ligne {0} : {1}\n"
+"En cas de doute, vérifiez les indentations, et veillez à ne pas mélanger "
+"espaces et tabulations.\n"
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:429
+#: src/jlm/universe/Entity.java:244
+msgid ""
+"NameError raised: You seem to use a non-existent identifier; Please check "
+"for typos\n"
+msgstr ""
+"Erreur de nom : vous semblez utiliser un identifiant qui n'existe pas. "
+"Auriez-vous fait une typo ?\n"
+
+#: src/jlm/universe/Entity.java:247
+msgid "TypeError raised: you are probably misusing a function or something.\n"
+msgstr ""
+"Erreur de type : vous n'utilisez pas correctement une fonction, ou quelque "
+"chose du genre.\n"
+
+#: src/jlm/universe/Entity.java:250
+msgid ""
+"UnboundLocalError raised: you are probably using a global variable that is "
+"not declared as such.\n"
+msgstr ""
+"Erreur UnboundLocal : vous utilisez probablement une variable qui n'est pas "
+"déclarée, ou quelque chose du genre.\n"
+
+#: src/jlm/universe/Entity.java:256
+msgid "Error: there is no baggle to pickup under the buggle"
+msgstr "Erreur : Il n'y a pas de baggle à ramasser ici."
+
+#: src/jlm/universe/Entity.java:258
+msgid "Error: a buggle cannot carry more than one baggle at the same time"
+msgstr "Erreur : une baggle ne peut porter qu'un baggle à la fois."
+
+#: src/jlm/universe/Entity.java:260
+msgid "Error: your buggle just teleported to the outer space..."
+msgstr "Erreur : Votre buggle s'est téléportée dans l'espace."
+
+#: src/jlm/universe/Entity.java:262
+msgid "Error: your buggle just hit a wall. That hurts."
+msgstr "Erreur : Vous avez heurté un mur. Ça fait mal."
+
+#: src/jlm/universe/Entity.java:265
 #, java-format
-msgid "    Its color is {0}; expected: {1}.\n"
+msgid ""
+"Unknown error (please report): {0}\n"
+"Its value is: {1}"
 msgstr ""
+"Erreur inconnue (veuillez faire un rapport de bug) : {0}\\n\n"
+"Sa valeur est : {1}"
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:431
+#: src/jlm/universe/Entity.java:296
 #, java-format
-msgid "    The color of its brush is {0}; expected: {1}.\n"
+msgid ""
+"Script evaluation raised an exception that is not a ScriptException but a "
+"{0}.\n"
+" Please report this as a bug against JLM, with all details allowing to "
+"reproduce it.\n"
+"Exception message: {1}"
 msgstr ""
+"L''évaluation du script a levé une exception qui n''est pas une "
+"ScriptException mais une {0}.\n"
+"Merci de faire un rapport de bug contre JLM, avec tous les détails "
+"nécessaires pour reproduire le problème.\n"
+"Message de l''exception: {1}"
+
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:422
+msgid "Its value is 'null', which is never good."
+msgstr "Sa valeur est 'null', ce qui n'est jamais bon."
+
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:429
+#, java-format
+msgid "    Its position is ({0},{1}); expected: ({2},{3}).\n"
+msgstr "    Sa position est ({0},{1}) ; attendu : ({2},{3}).\n"
+
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:431
+#, java-format
+msgid "    Its direction is {0}; expected: {1}.\n"
+msgstr "    Sa direction est {0} ; attendu : {1}.\n"
 
 #: src/jlm/universe/bugglequest/AbstractBuggle.java:433
-msgid "    It should not carry that baggle.\n"
-msgstr ""
+#, java-format
+msgid "    Its color is {0}; expected: {1}.\n"
+msgstr "    Sa couleur est {0} ; attendu : {1}.\n"
 
 #: src/jlm/universe/bugglequest/AbstractBuggle.java:435
-msgid "    It is not carrying any baggle.\n"
-msgstr ""
+#, java-format
+msgid "    The color of its brush is {0}; expected: {1}.\n"
+msgstr "    La couleur de son pinceau est {0} ; attendu : {1}\n"
 
 #: src/jlm/universe/bugglequest/AbstractBuggle.java:437
-msgid "    It encountered an issue, such as bumping into a wall.\n"
-msgstr ""
+msgid "    It should not carry that baggle.\n"
+msgstr "    Il de devrait pas porter de baggle.\n"
 
 #: src/jlm/universe/bugglequest/AbstractBuggle.java:439
+msgid "    It is not carrying any baggle.\n"
+msgstr "    Il ne porte pas de baggle.\n"
+
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:441
+msgid "    It encountered an issue, such as bumping into a wall.\n"
+msgstr "    Il a eu un problème tel que rencontrer un mur.\n"
+
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:443
 msgid "    It didn't encounter any issue, such as bumping into a wall.\n"
-msgstr ""
+msgstr "    Il n'a pas eu de problème tel que rencontrer un mur.\n"
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:88
+#: src/jlm/universe/bugglequest/BuggleWorld.java:127
 #, java-format
 msgid ""
 "{0}.map: this file does not seem to be a serialized BuggleWorld (the file is "
 "empty!)"
 msgstr ""
+"{0}.map : ce fichier ne semble pas est un BuggleWorld sérialisé (fichier "
+"vide !)"
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:94
+#: src/jlm/universe/bugglequest/BuggleWorld.java:133
 #, java-format
 msgid ""
 "{0}.map: This file does not seem to be a serialized BuggleWorld (malformated "
 "first line: {1})"
 msgstr ""
+"{0}.map : ce fichier ne semble pas est un BuggleWorld sérialisé (première "
+"ligne malformée : {1})"
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:101
+#: src/jlm/universe/bugglequest/BuggleWorld.java:139
 #, java-format
 msgid "{0}.map: End of file reached before world size specification"
 msgstr ""
+"{0}.map : fin de fichier (EOF) rencontré avant la spécification de la taille "
+"du monde."
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:144
+#, java-format
+msgid "{0}.map:1: Expected ''Size: NNxMM'' but got ''{0}''"
+msgstr "{0}.map:1: ''Size: NNxMM'' était attendu, mais on a lu ''{0}''"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:170
+#, java-format
+msgid "Cannot put a buggle on coordinate {0},{1}: that''s out of the world"
+msgstr ""
+"Je ne peux poser un buggle aux coordonnées {0},{1} : c''est en dehors du "
+"monde"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:184
+#, java-format
+msgid "Invalid buggle''s direction: {0}"
+msgstr "direction invalide de buggle : {0}"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:191
+#: src/jlm/universe/bugglequest/BuggleWorld.java:198
+#, java-format
+msgid "Invalid buggle''s color name: {0}"
+msgstr "Couleur invalide de buggle : {0}"
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:106
+#: src/jlm/universe/bugglequest/BuggleWorld.java:210
 #, java-format
-msgid "{0}.map:1: Expected 'Size: ??x??' but got '{0}'"
+msgid "Cannot define a cell on coordinate {0},{1}: that''s out of the world"
 msgstr ""
+"Je ne peux définir les coordonnées de cellule {0},{1} : c''est en dehors du "
+"monde"
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:352
+#: src/jlm/universe/bugglequest/BuggleWorld.java:223
 #, java-format
-msgid "  In ({0},{1})"
+msgid "Invalid color name: {0}"
+msgstr "Nom de couleur invalide : {0}"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:229
+#, java-format
+msgid "Expecting ''baggle'' or ''nobaggle'' but got {0} instead"
+msgstr "«baggle» ou «nobaggle» était attendu, mais on a {0} à la place"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:233
+#, java-format
+msgid "Expecting ''topwall'' or ''notopwall'' but got {0} instead"
+msgstr "«topwall» ou «notopwall» était attendu, mais on a {0} à la place"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:237
+#, java-format
+msgid "Expecting ''leftwall'' or ''noleftwall'' but got {0} instead"
+msgstr "«leftwall» ou «noleftwall» était attendu, mais on a {0} à la place"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:247
+#, java-format
+msgid ""
+"The cell {0},{1} seem to be defined more than once. At least, there is two "
+"baggles here, which is not allowed."
 msgstr ""
+"La cellule {0},{1} semble être définie plusieurs fois. Il y a au moins deux "
+"baggles ici ce qui n'est pas permis."
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:355
+#: src/jlm/universe/bugglequest/BuggleWorld.java:263
 #, java-format
-msgid "  Something is wrong about buggle \"{0}\":\n"
+msgid ""
+"Parse error. I was expecting a cell or a buggle description but got: {0}"
 msgstr ""
+"Erreur de syntaxe. J''attendais la description d''une cellule ou d''un "
+"buggle mais j''ai eu : {0}"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:239
+#: src/jlm/universe/bugglequest/BuggleWorld.java:481
+#, java-format
+msgid "  The world''s name is {0}"
+msgstr "  Le nom du monde est {0}"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:485
+#, java-format
+msgid "  In ({0},{1})"
+msgstr "  En ({0},{1})"
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:488
+#, java-format
+msgid "  Something is wrong about buggle ''{0}'':\n"
+msgstr "  Il y a quelque chose qui cloche avec le buggle «{0}»:\n"
+
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:230
 msgid ", there shouldn't be this baggle"
-msgstr ""
+msgstr ", il ne devrait pas y avoir ce baggle"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:241
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:232
 msgid ", there should be a baggle"
-msgstr ""
+msgstr ", il devrait y avoir un baggle"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:243
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:234
 msgid ", the baggle differs"
-msgstr ""
+msgstr ", le baggle est différent"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:246
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:237
 #, java-format
 msgid ", the ground should not be {0}"
-msgstr ""
+msgstr ", le sol ne devrait pas être {0}"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:248
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:239
 #, java-format
 msgid ", the ground is expected to be {0}, but it is {1}"
-msgstr ""
+msgstr ", le sol devrait être {0}, mais est {1}"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:250
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:241
 #, java-format
 msgid ", the ground reads ''{0}'' (expected: ''{1}'')"
-msgstr ""
+msgstr ", on lit \"{0}\" sur le sol (on attendait : \"{1}\")"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:253
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:244
 msgid ", there shouldn't be any wall at west"
-msgstr ""
+msgstr ", il ne devrait pas y avoir de mur à l'ouest"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:255
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:246
 msgid ", there should be a wall at west"
-msgstr ""
+msgstr ", il devrait y avoir un mur à l'ouest"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:258
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:249
 msgid ", there shouldn't be any wall at north"
-msgstr ""
+msgstr ", il ne devrait pas y avoir de mur au nord"
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:260
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:251
 msgid ", there should be a wall at north"
-msgstr ""
+msgstr ", il devrait y avoir un mur au nord"
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:176
+msgid "Create New Map"
+msgstr "Créer une nouvelle carte"
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:228
+msgid "Open Map..."
+msgstr "Ouvrir la carte..."
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:234
+msgid "JLM map files"
+msgstr "Fichiers de cartes pour la JLM"
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:242
+#, java-format
+msgid "Error while reading {0}"
+msgstr "Erreur lors de la lecture de {0}"
+
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:58
+msgid "Property"
+msgstr "Propriété"
+
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:58
+msgid "Value"
+msgstr "Valeur"
+
+#. The editor for the name
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:72
+msgid "World name"
+msgstr "Nom du monde"
+
+#. ---------- world width ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:84
+msgid "World width"
+msgstr "Largeur du monde"
+
+#. ---------- world height ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:104
+msgid "World height"
+msgstr "Hauteur du monde"
+
+#. ---------- selected cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:124
+msgid "Selected cell X"
+msgstr "Cellule sélectionnée X"
+
+#. ---------- selected cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:146
+msgid "Selected cell Y"
+msgstr "Cellule sélectionnée Y"
+
+#. ---------- Ground color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:167
+msgid "Ground color (name or r/g/b)"
+msgstr "Couleur du sol (nom ou r/g/b)"
+
+#. ---------- top wall cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:184
+msgid "Top wall?"
+msgstr "Mur du haut ?"
+
+#. ---------- left wall cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:206
+msgid "Left wall?"
+msgstr "Mur de gauche ?"
+
+#. ---------- have baggle ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:228
+msgid "Baggle?"
+msgstr "Baggle ?"
+
+#. ---------- Buggle name ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:259
+msgid "Buggle name"
+msgstr "Nom du buggle"
+
+#. ---------- Buggle direction ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:270
+msgid "Buggle direction (N|S|E|W)"
+msgstr "Direction du buggle (N|S|E|W)"
+
+#. ---------- Buggle color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:299
+msgid "Buggle color (name or r/g/b)"
+msgstr "Couleur du buggle (nom ou r/g/b)"
+
+#. ---------- Buggle color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:315
+msgid "Brush color (name or r/g/b)"
+msgstr "Couleur du pinceau (nom ou r/g/b -- rouge/vert/bleu)"
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:55
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:241
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:232
 msgid "forward"
-msgstr ""
+msgstr "avancer"
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:69
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:240
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:231
 msgid "backward"
-msgstr ""
+msgstr "reculer"
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:83
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:242
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:233
 msgid "turn left"
-msgstr ""
+msgstr "gauche"
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:91
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:243
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:234
 msgid "turn right"
-msgstr ""
+msgstr "droite"
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:99
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:244
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:235
 msgid "mark"
-msgstr ""
+msgstr "marquer"
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:222
 msgid "Wall hugging error"
-msgstr ""
+msgstr "Erreur : impact avec un mur"
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:223
 msgid "Your buggle has collided with a wall, it hurts a lot ! ='("
-msgstr ""
+msgstr "Votre buggle a percuté un mur. Ça fait très mal ! ='( "
 
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:245
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:236
 msgid "Brush Color"
-msgstr ""
+msgstr "Couleur du pinceau"
 
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:246
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:237
 msgid "Buggle Color"
-msgstr ""
+msgstr "Couleur du buggle"
 
-#: src/jlm/universe/sort/SortingButtonPanel.java:64
+#: src/jlm/universe/sort/SortingButtonPanel.java:63
 msgid "go"
 msgstr "aller"
 
-#: src/jlm/universe/sort/SortingWorldView.java:53
+#: src/jlm/universe/sort/SortingWorldView.java:51
+#: src/lessons/sort/baseball/universe/BaseballWorldView.java:655
 msgid "Switch to time view"
 msgstr "Accéder à la vue temporelle"
 
-#: src/jlm/universe/sort/SortingWorldView.java:55
+#: src/jlm/universe/sort/SortingWorldView.java:53
+#: src/lessons/sort/baseball/universe/BaseballWorldView.java:657
 msgid "Switch to state view"
 msgstr "Accéder à la vue d'état"
 
-#~ msgid "Do you really want to quit ?"
-#~ msgstr "Voulez-vous vraiment quitter ?"
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:70
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
+msgid "Invalid move"
+msgstr "Déplacement invalide"
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:134
+#, java-format
+msgid ""
+"Cannot move from slot {0} to {1}: the only existing slots are 0, 1 and 2"
+msgstr ""
+"Impossible de bouger du piquet {0} au piquet {1} car les seuls piquets "
+"existants sont 0, 1 et 2."
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:136
+#, java-format
+msgid "Cannot move from slot {0} to itself"
+msgstr "Impossible de bouger du piquet {0} à lui-même"
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:138
+#, java-format
+msgid "No disc to move from slot {0}"
+msgstr "Il n''y a pas de disque à déplacer sur le piquet {0}"
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:143
+#, java-format
+msgid ""
+"Cannot move disc from slot {0} to {1} small disk must remain over large ones "
+"but {2} > {3}"
+msgstr ""
+"Impossible de déplacer un disque du piquet {0} au piquet {1} car les petits "
+"disques doivent rester au dessus des gros."
+
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:75
+#, java-format
+msgid ""
+"The player {0} of the base {1} cannot reach the hole that is too far from "
+"its position"
+msgstr ""
+"Le joueur {0} de la base {1} ne atteindre le trou, qui se trouve trop loin "
+"de sa position"
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:145
+msgid "This is not a baseball world :-("
+msgstr "Ce n'est pas un monde de baseball :-("
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:149
+#, java-format
+msgid "Differing amount of bases: {0} vs {1}"
+msgstr "Nombres de bases différents : {0} vs {1}"
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:152
+#, java-format
+msgid "Differing amount of players: {0} vs {1}"
+msgstr "Nombres de joueurs différents : {0} vs {1}"
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:158
+#, java-format
+msgid "Player at base {0}, pos {1} differs: {2} vs {3}\n"
+msgstr "Le joueur à la base {0}, position {1} diffère : {2} vs {3}\n"
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:351
+#, java-format
+msgid ""
+"It''s still not sorted!! PLEASE REPORT THIS BUG, along with the following "
+"information:\n"
+"Exercise: {0}; Amount of bases: {1}; Initial situation: {2}"
+msgstr ""
+"Ce n''est toujours pas trié !! MERCI DE RAPPORTER CE PROBLÈME, avec les "
+"informations suivantes:\n"
+"Exercice: {0}; Nombre de bases:: {1}; Situation initiale: {2}"
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:388
+#, java-format
+msgid "Cannot move from base {0} since it''s not between 0 and {1}"
+msgstr "Impossible de bouger de la base {0} car ce n''est pas entre 0 et {1}"
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:391
+#, java-format
+msgid "Cannot move from position {0} since it''s not between 0 and {1})"
+msgstr ""
+"Impossible de bouger de la position {0} car ce n''est pas entre 0 et {1}"
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:400
+#, java-format
+msgid ""
+"The player {0} from base {1} is too far from the hole (at base {2}) to reach "
+"it in one move"
+msgstr ""
+"Le joueur {0} de la base {1} ne atteindre le trou, qui se trouve à la base "
+"{2}, trop loin de sa position"
+
+#: 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 :-("
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:120
+msgid "The two worlds are of differing size"
+msgstr "Les deux mondes ne sont pas de la même taille"
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:193
+#, java-format
+msgid "Asked to flip {0} pancakes, but you must flip at least one"
+msgstr ""
+"Vous avez demandé de retourner {0} crêpes, mais il faut en retourner au "
+"moins une."
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:195
+#, java-format
+msgid ""
+"Asked to flip {0} pancakes, but there is only {1} pancakes on this stack"
+msgstr ""
+"Vous avez demandé de retourner {0} crêpes, mais il n''y a que {1} crêpes sur "
+"la pile."
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:229
+#, java-format
+msgid ""
+"Cannot get the radius of pancake #{0} because it''s not between 0 and {1}"
+msgstr ""
+"Impossible d''obtenir la taille de la crêpe numéro {0} car ce n''est pas "
+"entre 0 et {1}"
 
-#~ msgid "Exit the JLM"
-#~ msgstr "Quitter la JLM"
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:248
+#, java-format
+msgid ""
+"Cannot get the orientation of pancake #{0} because it''s not between 0 and "
+"{1}"
+msgstr ""
+"Impossible d''obtenir l''orientation de la crêpe numéro {0} car ce n''est "
+"pas entre 0 et {1}"
diff --git a/lib/l10n-engine/jlm.pot b/lib/l10n-engine/jlm.pot
index e6129bd..c542dc6 100644
--- a/lib/l10n-engine/jlm.pot
+++ b/lib/l10n-engine/jlm.pot
@@ -8,7 +8,7 @@ msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2013-06-14 01:07+0200\n"
+"POT-Creation-Date: 2013-08-04 21:21+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"
@@ -17,10 +17,85 @@ msgstr ""
 "Content-Type: text/plain; charset=CHARSET\n"
 "Content-Transfer-Encoding: 8bit\n"
 
-#: src/jlm/core/model/Game.java:292 src/jlm/core/model/Game.java:324
+#: src/jlm/core/model/Game.java:146
+#, java-format
+msgid ""
+"Warning, the default programming language is neither ''Java'' nor ''python'' "
+"but {0}.\n"
+"   This language will be used to setup the worlds, possibly leading to "
+"severe issues for the exercises that don''t expect it.\n"
+"   It is safer to change the current language, and restart JLM before "
+"proceeding.\n"
+"   Alternatively, the property {1} can be changed in your configuration file "
+"($HOME/.jlm/jlm.properties"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:160
+#, java-format
+msgid ""
+"Your progress will be posted to http://identi.ca/jlmlovers This can be "
+"turned off through the property {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:163
+#, java-format
+msgid ""
+"Your progress will NOT be posted to identica, as requested by the property "
+"{0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:166
+#, java-format
+msgid ""
+"Your progress will be posted to https://twitter.com/jlmlovers This can be "
+"turned off through the property {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:169
+#, java-format
+msgid ""
+"Your progress will NOT be posted to twitter, as requested by the property {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:217 src/jlm/core/model/Game.java:218
+#, java-format
+msgid "Cannot switch to lesson {0}: class Main not found."
+msgstr ""
+
+#: src/jlm/core/model/Game.java:219
+#, java-format
+msgid "Load lesson {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:325 src/jlm/core/model/Game.java:357
 msgid "Operation cancelled by the user"
 msgstr ""
 
+#: src/jlm/core/model/Game.java:397
+#, java-format
+msgid "The lecture {0} has no world that I can select"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:920
+#, java-format
+msgid "{0} is not writable"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:924
+#, java-format
+msgid "{0} is not a directory"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:931
+#, java-format
+msgid "Cannot create {0}"
+msgstr ""
+
+#: src/jlm/core/model/Game.java:937
+#, java-format
+msgid "Impossible to find a path for JLM datas. Tested {0}"
+msgstr ""
+
 #: src/jlm/core/model/HelpServer.java:27
 msgid "Asking to the teacher for help"
 msgstr ""
@@ -29,21 +104,36 @@ msgstr ""
 msgid "Cancel call for help to the teacher"
 msgstr ""
 
-#: src/jlm/core/model/LessonRunner.java:88
+#: src/jlm/core/model/LessonRunner.java:90
 #, java-format
 msgid ""
 "Congratulations, you passed this exercise.\n"
-" {0} tests passed.\n"
+"{0} tests passed."
 msgstr ""
 
-#: src/jlm/core/model/LessonRunner.java:90
-#: src/jlm/core/model/LessonRunner.java:96
+#: src/jlm/core/model/LessonRunner.java:92
+#: src/jlm/core/model/LessonRunner.java:98
+#: src/jlm/core/model/LessonRunner.java:107
+#: src/jlm/core/model/LessonRunner.java:113
 msgid "Exercice passed \\o/"
 msgstr ""
 
-#: src/jlm/core/model/LessonRunner.java:95
+#: src/jlm/core/model/LessonRunner.java:96
+msgid "Congratulations, you passed this exercise."
+msgstr ""
+
+#: src/jlm/core/model/LessonRunner.java:106
+#, java-format
+msgid ""
+"Congratulations, you passed this exercise.\n"
+"({0} tests passed)\n"
+"Which exercise will you do now?"
+msgstr ""
+
+#: src/jlm/core/model/LessonRunner.java:112
 msgid ""
-"Congratulations, you passed this test. Which exercise will you do now?\n"
+"Congratulations, you passed this exercise.\n"
+"Which exercise will you do now?"
 msgstr ""
 
 #: src/jlm/core/model/lesson/Exercise.java:77
@@ -51,6 +141,93 @@ msgstr ""
 msgid "The world ''{0}'' differs"
 msgstr ""
 
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:41
+#, java-format
+msgid "Source file {0}.{1} not found."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:88
+#, java-format
+msgid "{0}: BEGIN TEMPLATE within the template. Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:108
+#, java-format
+msgid ""
+"{0}: BEGIN SOLUTION is closed with END TEMPLATE. Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:122
+#, java-format
+msgid ""
+"{0}: END TEMPLATE with no matching BEGIN TEMPLATE. Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:126
+#, java-format
+msgid "{0}: Begin solution in template tail. Change it to BEGIN HIDDEN"
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:153
+#, java-format
+msgid ""
+"Parser error in file {0}. This is a parser bug (state={1}), please report."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:158
+#, java-format
+msgid ""
+"{0}: End of file unexpected after the solution but within the template. "
+"Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:160
+#, java-format
+msgid ""
+"{0}: End of file unexpected (state: {1}). Did you forget to close your "
+"template or solution? Please fix your entity."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:311
+#, java-format
+msgid "World {0} is broken ({1}). Recompute all answer worlds."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:315
+#, java-format
+msgid ""
+"IO exception while reading world {0} ({1}). Recompute all answer worlds."
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:326
+#, java-format
+msgid ""
+"Recompute the answer of {0} despite the cache file, as requested by the "
+"property {1}"
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:349
+#, java-format
+msgid "Error while writing answer world of {0}:"
+msgstr ""
+
+#: src/jlm/core/model/lesson/ExerciseTemplated.java:353
+#, java-format
+msgid "Cannot write answer world of {0}. Please check the permissions."
+msgstr ""
+
+#: src/jlm/core/model/lesson/Lecture.java:88
+#: src/jlm/core/model/lesson/Lesson.java:84
+#, java-format
+msgid "File {0}.html not found."
+msgstr ""
+
+#: src/jlm/core/model/lesson/Lecture.java:97
+#: src/jlm/core/model/lesson/Lesson.java:94
+#, java-format
+msgid "Cannot find the name of mission in {0}.html"
+msgstr ""
+
 #: src/jlm/core/ui/AboutJLMDialog.java:34
 msgid "About JLM dialogTitle"
 msgstr ""
@@ -64,8 +241,9 @@ msgstr ""
 msgid "About lesson - "
 msgstr ""
 
-#: src/jlm/core/ui/AboutWorldDialog.java:29
-msgid "About world - "
+#: src/jlm/core/ui/AboutWorldDialog.java:32
+#, java-format
+msgid "About world - {0}"
 msgstr ""
 
 #: src/jlm/core/ui/ExerciseFailedDialog.java:29
@@ -108,6 +286,128 @@ msgstr ""
 msgid "Switch the entity"
 msgstr ""
 
+#: src/jlm/core/ui/FeedbackDialog.java:49
+msgid "Report your feedback"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:59
+msgid ""
+"<html><p>Thanks for your feedback on JLM. We deeply need this to make the "
+"tool match <br>your needs, so please don't hesitate to report any "
+"suggestion, such as typos and <br/>unclear parts in the mission texts, other "
+"improvement to the existing exercises<br/>or prospective exercises. We will "
+"do our best to integrate your suggestions.</p><p>Please write here your "
+"suggestion (if possible in english or french), with all<br/>necessary "
+"details, and then click on 'Send' below.</p><p><b>Please provide your email "
+"address so that we can contact you back</b> but <br/>NEVER DISCLOSE A "
+"PASSWORD while reporting issues.</p><p>Note that some technical information "
+"(such as your version of JLM and Java) will <br/>automatically be added to "
+"your feedback. None of these automatic information <br/>are personal and you "
+"still have to identify yourself if you want to.</p><p>Alternatively, you can "
+"use the <a href='http://github.com/oster/JLM/issues'>github interface</a> "
+"for feedback.</p></html>"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:78
+msgid "(your feedback comes here)"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:89
+msgid "Cancel"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:94
+msgid "Do you really want to cancel your feedback and lose any edit?"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:95
+msgid "are you sure?"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:102
+msgid "Send feedback"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:142
+msgid "Thank you for your feedback"
+msgstr ""
+
+#: src/jlm/core/ui/FeedbackDialog.java:148
+#: src/jlm/core/ui/FeedbackDialog.java:157
+msgid "Error while uploading your feedback"
+msgstr ""
+
+#: src/jlm/core/ui/JlmHtmlEditorKit.java:142
+#, java-format
+msgid "<img> tag without src attribute in exercise {0}"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:40
+msgid "Choose your lesson"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:54
+msgid ""
+"<table border=\"0\" align=\"center\"><tr>\n"
+"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n"
+"<td valign=\"center\">  <font size=\"+2\">Welcome to the Java "
+"Learning Machine</font>  </td>\n"
+"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n"
+"</tr></table>\n"
+"\n"
+"<p><font size=\"+1\">The JLM is a Learning Management System (LMS) aiming at "
+"teaching the art of computer programming through interactive exercises. It "
+"offers an extensive set of varied exercises, allowing you to practice at "
+"your own pace.</font></p><br/>"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:132 src/jlm/core/ui/MainFrame.java:163
+msgid "JLM lesson files"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:141 src/jlm/core/ui/MainFrame.java:172
+msgid "Error"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:168
+msgid ""
+"<h1>Please pick a lesson</h1>\n"
+"<p>Please click on an icon on the left to select a lesson.</p>\n"
+"<p>Lessons located above are generally simpler than the ones located below.</"
+"p>"
+msgstr ""
+
+#. Create the button
+#: src/jlm/core/ui/LessonChooser.java:180
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:65
+msgid "Go"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:210
+#, java-format
+msgid ""
+"<p>(unable to display the short description of this lesson: file {0} not "
+"found)</p>"
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:213
+msgid "<p><b>Your score:</b> "
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:221
+#, java-format
+msgid "{0} out of {1} exercises passed."
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:225
+#, java-format
+msgid "{0} out of {1} exercises passed in {2}."
+msgstr ""
+
+#: src/jlm/core/ui/LessonChooser.java:231
+msgid "You never attempted this lesson."
+msgstr ""
+
 #: src/jlm/core/ui/LoggerPanel.java:31 src/jlm/core/ui/LoggerPanel.java:96
 msgid "Where error and other messages get written"
 msgstr ""
@@ -115,164 +415,162 @@ msgstr ""
 #. === FILE menu ===
 #. for now: leave the calls to i18n.tr: that way one is sure to get all the localized strings...
 #. Menus
-#: src/jlm/core/ui/MainFrame.java:161 src/jlm/core/ui/MainFrame.java:643
+#: src/jlm/core/ui/MainFrame.java:152 src/jlm/core/ui/MainFrame.java:647
 msgid "File"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:163
+#: src/jlm/core/ui/MainFrame.java:154
 msgid "File related functions"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:166 src/jlm/core/ui/MainFrame.java:644
+#: src/jlm/core/ui/MainFrame.java:157 src/jlm/core/ui/MainFrame.java:648
 msgid "Load lesson"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:172
-msgid "JLM lesson files"
-msgstr ""
-
-#: src/jlm/core/ui/MainFrame.java:181
-msgid "Error"
-msgstr ""
-
-#: src/jlm/core/ui/MainFrame.java:188 src/jlm/core/ui/MainFrame.java:645
+#: src/jlm/core/ui/MainFrame.java:179 src/jlm/core/ui/MainFrame.java:649
 msgid "Switch lesson"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:199 src/jlm/core/ui/MainFrame.java:640
-#: src/jlm/core/ui/MainFrame.java:646
+#: src/jlm/core/ui/MainFrame.java:191 src/jlm/core/ui/MainFrame.java:416
+#: src/jlm/core/ui/MainFrame.java:644 src/jlm/core/ui/MainFrame.java:650
 msgid "Switch exercise"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:212 src/jlm/core/ui/MainFrame.java:648
+#: src/jlm/core/ui/MainFrame.java:204 src/jlm/core/ui/MainFrame.java:652
 msgid "Teacher Console"
 msgstr ""
 
 #. Menu item to change the current Course
-#: src/jlm/core/ui/MainFrame.java:231 src/jlm/core/ui/MainFrame.java:649
+#: src/jlm/core/ui/MainFrame.java:223 src/jlm/core/ui/MainFrame.java:653
 msgid "Choose your course"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:250 src/jlm/core/ui/MainFrame.java:650
+#: src/jlm/core/ui/MainFrame.java:242 src/jlm/core/ui/MainFrame.java:654
 msgid "Quit"
 msgstr ""
 
 #. === Edit menu ===
-#: src/jlm/core/ui/MainFrame.java:258 src/jlm/core/ui/MainFrame.java:652
+#: src/jlm/core/ui/MainFrame.java:250 src/jlm/core/ui/MainFrame.java:656
 msgid "Session"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:263 src/jlm/core/ui/MainFrame.java:654
+#: src/jlm/core/ui/MainFrame.java:255 src/jlm/core/ui/MainFrame.java:658
 msgid "Revert Exercise"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:266 src/jlm/core/ui/MainFrame.java:655
+#: src/jlm/core/ui/MainFrame.java:258 src/jlm/core/ui/MainFrame.java:659
 msgid "Export Session Cache"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:269 src/jlm/core/ui/MainFrame.java:656
+#: src/jlm/core/ui/MainFrame.java:261 src/jlm/core/ui/MainFrame.java:660
 msgid "Import Session Cache"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:273 src/jlm/core/ui/MainFrame.java:657
+#: src/jlm/core/ui/MainFrame.java:265 src/jlm/core/ui/MainFrame.java:661
 msgid "Debug mode"
 msgstr ""
 
 #. === Language menu ===
-#: src/jlm/core/ui/MainFrame.java:286 src/jlm/core/ui/MainFrame.java:660
+#: src/jlm/core/ui/MainFrame.java:278 src/jlm/core/ui/MainFrame.java:664
 msgid "Language"
 msgstr ""
 
 #. === Programming language changing ===
-#: src/jlm/core/ui/MainFrame.java:291 src/jlm/core/ui/MainFrame.java:661
+#: src/jlm/core/ui/MainFrame.java:283 src/jlm/core/ui/MainFrame.java:665
 msgid "Human"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:305 src/jlm/core/ui/MainFrame.java:662
+#: src/jlm/core/ui/MainFrame.java:297 src/jlm/core/ui/MainFrame.java:666
 msgid "Computer"
 msgstr ""
 
 #. === Help menu ===
-#: src/jlm/core/ui/MainFrame.java:309 src/jlm/core/ui/MainFrame.java:664
+#: src/jlm/core/ui/MainFrame.java:301 src/jlm/core/ui/MainFrame.java:668
 msgid "Help"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:313 src/jlm/core/ui/MainFrame.java:665
+#: src/jlm/core/ui/MainFrame.java:305 src/jlm/core/ui/MainFrame.java:669
+msgid "Provide feedback"
+msgstr ""
+
+#: src/jlm/core/ui/MainFrame.java:315 src/jlm/core/ui/MainFrame.java:670
 msgid "About this lesson"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:326 src/jlm/core/ui/MainFrame.java:666
+#: src/jlm/core/ui/MainFrame.java:328 src/jlm/core/ui/MainFrame.java:671
 msgid "About this world"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:342 src/jlm/core/ui/MainFrame.java:668
+#: src/jlm/core/ui/MainFrame.java:344 src/jlm/core/ui/MainFrame.java:673
 msgid "About JLM"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:462
-msgid "Next"
+#. Buttons
+#: src/jlm/core/ui/MainFrame.java:377 src/jlm/core/ui/MainFrame.java:638
+msgid "Run"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:476 src/jlm/core/ui/MainFrame.java:635
+#: src/jlm/core/ui/MainFrame.java:381 src/jlm/core/ui/MainFrame.java:479
+#: src/jlm/core/ui/MainFrame.java:639
 msgid "Step"
 msgstr ""
 
-#. Buttons
-#: src/jlm/core/ui/MainFrame.java:634
-msgid "Run"
-msgstr ""
-
-#: src/jlm/core/ui/MainFrame.java:636
+#: src/jlm/core/ui/MainFrame.java:386 src/jlm/core/ui/MainFrame.java:640
 msgid "Stop"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:637
+#: src/jlm/core/ui/MainFrame.java:392 src/jlm/core/ui/MainFrame.java:641
 msgid "Reset"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:638
+#: src/jlm/core/ui/MainFrame.java:398 src/jlm/core/ui/MainFrame.java:642
 msgid "Demo"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:639 src/jlm/core/ui/action/HelpMe.java:37
+#: src/jlm/core/ui/MainFrame.java:404 src/jlm/core/ui/MainFrame.java:643
+#: src/jlm/core/ui/action/HelpMe.java:37
 msgid "Call for Help"
 msgstr ""
 
-#: src/jlm/core/ui/MainFrame.java:653
+#: src/jlm/core/ui/MainFrame.java:464
+msgid "Next"
+msgstr ""
+
+#: src/jlm/core/ui/MainFrame.java:657
 msgid "Lesson related functions"
 msgstr ""
 
-#: src/jlm/core/ui/MissionEditorTabs.java:97
+#: src/jlm/core/ui/MissionEditorTabs.java:96
 msgid "Mission"
 msgstr ""
 
-#: src/jlm/core/ui/MissionEditorTabs.java:98
+#: src/jlm/core/ui/MissionEditorTabs.java:97
 msgid "Description of the work to do"
 msgstr ""
 
 #. Create the tab with the code editor as content
-#: src/jlm/core/ui/MissionEditorTabs.java:167
+#: src/jlm/core/ui/MissionEditorTabs.java:166
 msgid "Type your code here"
 msgstr ""
 
 #: src/jlm/core/ui/StatusBar.java:113
-msgid "Loading"
+msgid "Saving"
 msgstr ""
 
 #: src/jlm/core/ui/StatusBar.java:117
-msgid "Saving"
+msgid "Compiling"
 msgstr ""
 
-#: src/jlm/core/ui/StatusBar.java:121
-msgid "Compiling"
+#: src/jlm/core/ui/StatusBar.java:131
+msgid "Running "
 msgstr ""
 
 #: src/jlm/core/ui/StatusBar.java:135
-msgid "Running "
+msgid "Playing demo "
 msgstr ""
 
 #: src/jlm/core/ui/StatusBar.java:139
-msgid "Playing demo "
+msgid "Loading "
 msgstr ""
 
 #: src/jlm/core/ui/action/HelpMe.java:37
@@ -333,145 +631,368 @@ msgstr ""
 msgid "Switch to another exercise"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:418
+#: src/jlm/universe/Entity.java:178
+#, java-format
+msgid ""
+"The execution of your program raised an exception: {0}\n"
+" Please fix your code.\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:192
+#, java-format
+msgid "Failed to start an interpreter for {0}"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:214
+#, java-format
+msgid ""
+"No {0} script source for entity {1}. Please report that bug against JLM."
+msgstr ""
+
+#: src/jlm/universe/Entity.java:236
+#, java-format
+msgid ""
+"Syntax error at line {0}: {1}\n"
+"In doubt, check your indentation, and that you don't mix tabs and spaces\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:244
+msgid ""
+"NameError raised: You seem to use a non-existent identifier; Please check "
+"for typos\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:247
+msgid "TypeError raised: you are probably misusing a function or something.\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:250
+msgid ""
+"UnboundLocalError raised: you are probably using a global variable that is "
+"not declared as such.\n"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:256
+msgid "Error: there is no baggle to pickup under the buggle"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:258
+msgid "Error: a buggle cannot carry more than one baggle at the same time"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:260
+msgid "Error: your buggle just teleported to the outer space..."
+msgstr ""
+
+#: src/jlm/universe/Entity.java:262
+msgid "Error: your buggle just hit a wall. That hurts."
+msgstr ""
+
+#: src/jlm/universe/Entity.java:265
+#, java-format
+msgid ""
+"Unknown error (please report): {0}\n"
+"Its value is: {1}"
+msgstr ""
+
+#: src/jlm/universe/Entity.java:296
+#, java-format
+msgid ""
+"Script evaluation raised an exception that is not a ScriptException but a "
+"{0}.\n"
+" Please report this as a bug against JLM, with all details allowing to "
+"reproduce it.\n"
+"Exception message: {1}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:422
 msgid "Its value is 'null', which is never good."
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:425
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:429
 #, java-format
 msgid "    Its position is ({0},{1}); expected: ({2},{3}).\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:427
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:431
 #, java-format
 msgid "    Its direction is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:429
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:433
 #, java-format
 msgid "    Its color is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:431
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:435
 #, java-format
 msgid "    The color of its brush is {0}; expected: {1}.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:433
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:437
 msgid "    It should not carry that baggle.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:435
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:439
 msgid "    It is not carrying any baggle.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:437
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:441
 msgid "    It encountered an issue, such as bumping into a wall.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/AbstractBuggle.java:439
+#: src/jlm/universe/bugglequest/AbstractBuggle.java:443
 msgid "    It didn't encounter any issue, such as bumping into a wall.\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:88
+#: src/jlm/universe/bugglequest/BuggleWorld.java:127
 #, java-format
 msgid ""
 "{0}.map: this file does not seem to be a serialized BuggleWorld (the file is "
 "empty!)"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:94
+#: src/jlm/universe/bugglequest/BuggleWorld.java:133
 #, java-format
 msgid ""
 "{0}.map: This file does not seem to be a serialized BuggleWorld (malformated "
 "first line: {1})"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:101
+#: src/jlm/universe/bugglequest/BuggleWorld.java:139
 #, java-format
 msgid "{0}.map: End of file reached before world size specification"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:106
+#: src/jlm/universe/bugglequest/BuggleWorld.java:144
+#, java-format
+msgid "{0}.map:1: Expected ''Size: NNxMM'' but got ''{0}''"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:170
 #, java-format
-msgid "{0}.map:1: Expected 'Size: ??x??' but got '{0}'"
+msgid "Cannot put a buggle on coordinate {0},{1}: that''s out of the world"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:352
+#: src/jlm/universe/bugglequest/BuggleWorld.java:184
+#, java-format
+msgid "Invalid buggle''s direction: {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:191
+#: src/jlm/universe/bugglequest/BuggleWorld.java:198
+#, java-format
+msgid "Invalid buggle''s color name: {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:210
+#, java-format
+msgid "Cannot define a cell on coordinate {0},{1}: that''s out of the world"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:223
+#, java-format
+msgid "Invalid color name: {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:229
+#, java-format
+msgid "Expecting ''baggle'' or ''nobaggle'' but got {0} instead"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:233
+#, java-format
+msgid "Expecting ''topwall'' or ''notopwall'' but got {0} instead"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:237
+#, java-format
+msgid "Expecting ''leftwall'' or ''noleftwall'' but got {0} instead"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:247
+#, java-format
+msgid ""
+"The cell {0},{1} seem to be defined more than once. At least, there is two "
+"baggles here, which is not allowed."
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:263
+#, java-format
+msgid ""
+"Parse error. I was expecting a cell or a buggle description but got: {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:481
+#, java-format
+msgid "  The world''s name is {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/BuggleWorld.java:485
 #, java-format
 msgid "  In ({0},{1})"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorld.java:355
+#: src/jlm/universe/bugglequest/BuggleWorld.java:488
 #, java-format
-msgid "  Something is wrong about buggle \"{0}\":\n"
+msgid "  Something is wrong about buggle ''{0}'':\n"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:239
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:230
 msgid ", there shouldn't be this baggle"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:241
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:232
 msgid ", there should be a baggle"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:243
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:234
 msgid ", the baggle differs"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:246
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:237
 #, java-format
 msgid ", the ground should not be {0}"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:248
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:239
 #, java-format
 msgid ", the ground is expected to be {0}, but it is {1}"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:250
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:241
 #, java-format
 msgid ", the ground reads ''{0}'' (expected: ''{1}'')"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:253
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:244
 msgid ", there shouldn't be any wall at west"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:255
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:246
 msgid ", there should be a wall at west"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:258
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:249
 msgid ", there shouldn't be any wall at north"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/BuggleWorldCell.java:260
+#: src/jlm/universe/bugglequest/BuggleWorldCell.java:251
 msgid ", there should be a wall at north"
 msgstr ""
 
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:176
+msgid "Create New Map"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:228
+msgid "Open Map..."
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:234
+msgid "JLM map files"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/MainFrame.java:242
+#, java-format
+msgid "Error while reading {0}"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:58
+msgid "Property"
+msgstr ""
+
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:58
+msgid "Value"
+msgstr ""
+
+#. The editor for the name
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:72
+msgid "World name"
+msgstr ""
+
+#. ---------- world width ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:84
+msgid "World width"
+msgstr ""
+
+#. ---------- world height ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:104
+msgid "World height"
+msgstr ""
+
+#. ---------- selected cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:124
+msgid "Selected cell X"
+msgstr ""
+
+#. ---------- selected cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:146
+msgid "Selected cell Y"
+msgstr ""
+
+#. ---------- Ground color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:167
+msgid "Ground color (name or r/g/b)"
+msgstr ""
+
+#. ---------- top wall cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:184
+msgid "Top wall?"
+msgstr ""
+
+#. ---------- left wall cell ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:206
+msgid "Left wall?"
+msgstr ""
+
+#. ---------- have baggle ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:228
+msgid "Baggle?"
+msgstr ""
+
+#. ---------- Buggle name ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:259
+msgid "Buggle name"
+msgstr ""
+
+#. ---------- Buggle direction ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:270
+msgid "Buggle direction (N|S|E|W)"
+msgstr ""
+
+#. ---------- Buggle color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:299
+msgid "Buggle color (name or r/g/b)"
+msgstr ""
+
+#. ---------- Buggle color ---------------
+#: src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java:315
+msgid "Brush color (name or r/g/b)"
+msgstr ""
+
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:55
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:241
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:232
 msgid "forward"
 msgstr ""
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:69
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:240
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:231
 msgid "backward"
 msgstr ""
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:83
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:242
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:233
 msgid "turn left"
 msgstr ""
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:91
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:243
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:234
 msgid "turn right"
 msgstr ""
 
 #: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:99
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:244
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:235
 msgid "mark"
 msgstr ""
 
@@ -483,22 +1004,135 @@ msgstr ""
 msgid "Your buggle has collided with a wall, it hurts a lot ! ='("
 msgstr ""
 
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:245
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:236
 msgid "Brush Color"
 msgstr ""
 
-#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:246
+#: src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java:237
 msgid "Buggle Color"
 msgstr ""
 
-#: src/jlm/universe/sort/SortingButtonPanel.java:64
+#: src/jlm/universe/sort/SortingButtonPanel.java:63
 msgid "go"
 msgstr ""
 
-#: src/jlm/universe/sort/SortingWorldView.java:53
+#: src/jlm/universe/sort/SortingWorldView.java:51
+#: src/lessons/sort/baseball/universe/BaseballWorldView.java:655
 msgid "Switch to time view"
 msgstr ""
 
-#: src/jlm/universe/sort/SortingWorldView.java:55
+#: src/jlm/universe/sort/SortingWorldView.java:53
+#: src/lessons/sort/baseball/universe/BaseballWorldView.java:657
 msgid "Switch to state view"
 msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiMovePanel.java:70
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:76
+msgid "Invalid move"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:134
+#, java-format
+msgid ""
+"Cannot move from slot {0} to {1}: the only existing slots are 0, 1 and 2"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:136
+#, java-format
+msgid "Cannot move from slot {0} to itself"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:138
+#, java-format
+msgid "No disc to move from slot {0}"
+msgstr ""
+
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.java:143
+#, java-format
+msgid ""
+"Cannot move disc from slot {0} to {1} small disk must remain over large ones "
+"but {2} > {3}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballMovePanel.java:75
+#, java-format
+msgid ""
+"The player {0} of the base {1} cannot reach the hole that is too far from "
+"its position"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:145
+msgid "This is not a baseball world :-("
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:149
+#, java-format
+msgid "Differing amount of bases: {0} vs {1}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:152
+#, java-format
+msgid "Differing amount of players: {0} vs {1}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:158
+#, java-format
+msgid "Player at base {0}, pos {1} differs: {2} vs {3}\n"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:351
+#, java-format
+msgid ""
+"It''s still not sorted!! PLEASE REPORT THIS BUG, along with the following "
+"information:\n"
+"Exercise: {0}; Amount of bases: {1}; Initial situation: {2}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:388
+#, java-format
+msgid "Cannot move from base {0} since it''s not between 0 and {1}"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:391
+#, java-format
+msgid "Cannot move from position {0} since it''s not between 0 and {1})"
+msgstr ""
+
+#: src/lessons/sort/baseball/universe/BaseballWorld.java:400
+#, java-format
+msgid ""
+"The player {0} from base {1} is too far from the hole (at base {2}) to reach "
+"it in one move"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:116
+msgid "This is not a world of pancakes :-("
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:120
+msgid "The two worlds are of differing size"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:193
+#, java-format
+msgid "Asked to flip {0} pancakes, but you must flip at least one"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:195
+#, java-format
+msgid ""
+"Asked to flip {0} pancakes, but there is only {1} pancakes on this stack"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:229
+#, java-format
+msgid ""
+"Cannot get the radius of pancake #{0} because it''s not between 0 and {1}"
+msgstr ""
+
+#: src/lessons/sort/pancake/universe/PancakeWorld.java:248
+#, java-format
+msgid ""
+"Cannot get the orientation of pancake #{0} because it''s not between 0 and "
+"{1}"
+msgstr ""
diff --git a/lib/l10n/fr.po b/lib/l10n/fr.po
index 67d7e6f..f02f3f7 100644
--- a/lib/l10n/fr.po
+++ b/lib/l10n/fr.po
@@ -6,8 +6,8 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: JLM mission texts\n"
-"POT-Creation-Date: 2013-05-25 09:13+0300\n"
-"PO-Revision-Date: 2013-05-28 21:47+0200\n"
+"POT-Creation-Date: 2013-08-04 11:21+0300\n"
+"PO-Revision-Date: 2013-08-04 11:27+0200\n"
 "Last-Translator: Automatically generated\n"
 "Language-Team: none\n"
 "Language: \n"
@@ -312,119 +312,187 @@ msgstr "<b>Action</b>"
 msgid "<b>Cost</b>"
 msgstr "<b>Coût</b>"
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <table><tr><td><div>
 #: src/jlm/universe/sort/SortingWorld.html:11
 msgid "int getValueCount()"
 msgstr "int getValueCount()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:12
+msgid "getValueCount()"
+msgstr "getValueCount()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:11
+#: src/jlm/universe/sort/SortingWorld.html:13
 msgid "Returns the amount of values in the array"
 msgstr "Retourne le nombre de valeurs dans le tableau"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:11
+#: src/jlm/universe/sort/SortingWorld.html:13
+#: src/jlm/universe/sort/SortingWorld.html:38
 msgid "none"
 msgstr "aucun"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:13
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:15
 msgid "boolean isSmaller(int i, int j)"
 msgstr "boolean isSmaller(int i, int j)"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:16
+msgid "isSmaller(i, j)"
+msgstr "isSmaller(i, j)"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:13
+#: src/jlm/universe/sort/SortingWorld.html:17
 msgid ""
 "Returns true if the content of cell i is strictly smaller than the one of "
 "cell j"
-msgstr "Retourne vrai ssi le contenu de la case i est strictement inférieur à celui de la case j"
+msgstr ""
+"Retourne vrai ssi le contenu de la case i est strictement inférieur à celui "
+"de la case j"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:13
+#: src/jlm/universe/sort/SortingWorld.html:17
 msgid "two reads"
 msgstr "deux lectures"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:14
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:18
 msgid "boolean isSmallerThan(int i, int val)"
 msgstr "boolean isSmallerThan(int i, int val)"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:19
+msgid "isSmallerThan(i, val)"
+msgstr "isSmallerThan(i, val)"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:14
+#: src/jlm/universe/sort/SortingWorld.html:20
 msgid ""
 "Returns true if the content of cell i is strictly smaller than value "
 "<code>val</code>"
-msgstr "Retourne vrai ssi le contenu de la case i est strictement inférieur à la valeur val"
+msgstr ""
+"Retourne vrai ssi le contenu de la case i est strictement inférieur à la "
+"valeur val"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:14
-#: src/jlm/universe/sort/SortingWorld.html:19
+#: src/jlm/universe/sort/SortingWorld.html:20
+#: src/jlm/universe/sort/SortingWorld.html:31
 msgid "one read"
 msgstr "une lecture"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:16
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:22
 msgid "void swap(int i, int j)"
 msgstr "void swap(int i, int j)"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:23
+msgid "swap(i, j)"
+msgstr "swap(i, j)"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:16
+#: src/jlm/universe/sort/SortingWorld.html:24
 msgid "Swaps the content of cell i and the one of cell j"
 msgstr "Echange le contenu de la case i avec celui de la case j"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:16
+#: src/jlm/universe/sort/SortingWorld.html:24
 msgid "two reads, two writes"
 msgstr "deux lectures, deux écritures"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:17
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:25
 msgid "void copy(int from, int to)"
 msgstr "void copy(int from, int to)"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:26
+msgid "copy(from, to)"
+msgstr "copy(from, to)"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:17
+#: src/jlm/universe/sort/SortingWorld.html:27
 msgid "Copy the content of cell 'from' into the cell 'to'"
 msgstr "Copie le contenu de la case 'from' dans la case 'to'"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:17
+#: src/jlm/universe/sort/SortingWorld.html:27
 msgid "one read, one write"
 msgstr "une lecture, une écriture"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:19
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:29
 msgid "int getValue(int idx)"
 msgstr "int getValue(int idx)"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:30
+msgid "getValue(idx)"
+msgstr "getValue(idx)"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:19
+#: src/jlm/universe/sort/SortingWorld.html:31
 msgid "Returns the value of cell idx"
 msgstr "Retourne la valeur de la case idx"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:20
-msgid "void setValue(int idx,int val)"
-msgstr "void setValue(int idx,int val)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:32
+msgid "void setValue(int idx, int val)"
+msgstr "void setValue(int idx, int val)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:33
+msgid "setValue(idx, val)"
+msgstr "setValue(idx, val)"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:20
+#: src/jlm/universe/sort/SortingWorld.html:34
 msgid "Sets cell 'idx' to the value 'val'"
 msgstr "Affecte la valeur 'val' à la case 'idx'"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:20
+#: src/jlm/universe/sort/SortingWorld.html:34
 msgid "one write"
 msgstr "une écriture"
 
+#. type: Content of: <pre>
+#: src/jlm/universe/sort/SortingWorld.html:36
+#: src/jlm/universe/turtles/TurtleWorld.html:72
+#: src/jlm/universe/bugglequest/BuggleWorld.html:35
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:25
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:25
+#, no-wrap
+msgid "boolean isSelected()"
+msgstr "boolean isSelected()"
+
+#. type: Content of: <pre>
+#: src/jlm/universe/sort/SortingWorld.html:37
+#: src/jlm/universe/turtles/TurtleWorld.html:73
+#: src/jlm/universe/bugglequest/BuggleWorld.html:35
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:26
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:26
+#, no-wrap
+msgid "isSelected()"
+msgstr "isSelected()"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/sort/SortingWorld.html:38
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:27
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:27
+msgid ""
+"Returns whether the current world is selected in the graphical interface."
+msgstr "Renvoi si le monde actuel est sélectionné dans l'interface graphique."
+
 #. type: Content of: <h2>
-#: src/jlm/universe/sort/SortingWorld.html:24
+#: src/jlm/universe/sort/SortingWorld.html:42
 msgid "History view"
 msgstr "Vue de l'historique du monde"
 
 #. type: Content of: <p>
-#: src/jlm/universe/sort/SortingWorld.html:25
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:7
+#: src/jlm/universe/sort/SortingWorld.html:43
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:7
 msgid ""
 "It is not enough to sort the array to pass the exercises. Your solution must "
 "strictly follow the expected behavior of each exercise. This is enforced by "
@@ -441,13 +509,12 @@ msgstr ""
 "comportement attendu et le comportement effectif."
 
 #. type: Content of: <p>
-#: src/jlm/universe/sort/SortingWorld.html:32
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:14
+#: src/jlm/universe/sort/SortingWorld.html:50
 msgid ""
-"To help in this process, it is posible to graphically explore the history of "
-"your sorting algorithm. Switch to the Objective view and use the contextual "
-"menu (right clic) to switch from the the view of the current state to the "
-"view of its history."
+"To help in this process, it is possible to graphically explore the history "
+"of your sorting algorithm. Switch to the Objective view and use the "
+"contextual menu (right click) to switch from the the view of the current "
+"state to the view of its history."
 msgstr ""
 "Pour cela, il est possible d'explorer graphiquement l'historique de "
 "n'importe quel monde de tri. Passez par exemple au monde Objectif et "
@@ -455,153 +522,324 @@ msgstr ""
 "l'état courant du monde et la vue de son histoire."
 
 #. type: Content of: <p>
-#: src/jlm/universe/sort/SortingWorld.html:37
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:19
+#: src/jlm/universe/sort/SortingWorld.html:55
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:19
 msgid ""
 "The history view is a bit hairly at the first glance, but actually rather "
 "simple: The time flows from left to right on this graph, and each row is a "
 "cell of your array. The curved lines that go navigate between rows represent "
 "a given data value. When two lines cross, this means that two values were "
-"swapped at this time stamp. This view, first introduced by Aldo Cortesi, "
-"reveals very helpful understand the inner behavior of sorting algorithms."
+"swapped at this time stamp; A line fork represent a value copy; When a value "
+"is magenta and followed by an interrogation mark (?), it was read using "
+"getValue(); If the value is red and followed with an exclamation point (!), "
+"it was written using setValue()."
 msgstr ""
 "La vue de l'historique n'est pas aussi complexe qu'elle en a l'air à "
 "première vue. Le temps s'écoule de gauche à droite, et les cases du tableau "
 "sont représentée de haut en bas. Les lignes de différentes couleurs qui "
 "serpentent représentent les différentes valeurs contenues dans le tableau. "
 "Quand deux lignes se croises, cela signifie que les valeurs du tableau ont "
-"été échangées à ce moment de l'historique. Cette vue, inventée par Aldo "
-"Cortesi, est très pratique pour comprendre le comportement des algorithmes "
-"de tri."
+"été échangées à ce moment de l'historique; un embranchement signifie que la "
+"valeur a été copiée; une valeur en violet suivie d'un point d'interrogation "
+"a été lue avec getValue() et une valeur en rouge suivie d'un point "
+"d'exclamation a été écrite avec setValue()."
+
+#. type: Content of: <p>
+#: src/jlm/universe/sort/SortingWorld.html:64
+msgid ""
+"This view, inspired from Aldo Cortesi, reveals very helpful understand the "
+"inner behavior of sorting algorithms."
+msgstr ""
+"Cette vue, inspirée d'Aldo Cortesi, est très pratique pour comprendre le "
+"comportement des algorithmes de tri."
 
 #. type: Content of: <h1>
 #: src/jlm/universe/turtles/TurtleWorld.html:1
 msgid "TurtleWorld"
 msgstr "Monde des tortues"
 
-#. type: Content of: outside any tag (error?)
-#: src/jlm/universe/turtles/TurtleWorld.html:2
-msgid ""
-"This world is directly inspired from the work of the mathematician Seymour "
-"Papert in the 60's. Inspirated from the swiss psycholog Jean Piaget, he came "
-"up with a learning method called LOGO to teach programming to young childs. "
-"The world is full of turtles which leave a painting where they go and which "
-"respond to simple orders."
-msgstr ""
-"Ce monde est directement inspiré des travaux du mathématicien Seymour Papert "
-"dans les années 60. Inspiré par le psychologue suisse Jean Piaget, il a "
-"inventé une méthode d'apprentissage de la programmation accessible aux "
-"jeunes enfants nommée LOGO. Le monde est peuplé de tortues qui laissent une "
-"trace là où elles marchent et à qui on peut donner des ordres simples."
+#. type: Content of: <p>
+#: src/jlm/universe/turtles/TurtleWorld.html:3
+msgid "This universe is an adaptation of LOGO for the Java Learning Machine."
+msgstr "Cet univers est une adaptation de LOGO pour la Java Learning Machine."
 
 #. type: Content of: <p>
-#: src/jlm/universe/turtles/TurtleWorld.html:8
-msgid "This world is an adaptation of LOGO for the Java Learning Machine."
-msgstr "Ce monde est une adaptation de LOGO pour la Java Learning Machine."
+#: src/jlm/universe/turtles/TurtleWorld.html:5
+msgid ""
+"It is directly inspired from the work of the mathematician Seymour Papert in "
+"the 60's. Inspired from the swiss psycholog Jean Piaget, he came up with a "
+"learning method called LOGO to teach programming to young childs. The world "
+"is full of turtles which leave a painting where they go and which respond to "
+"simple orders."
+msgstr ""
+"Il est directement inspiré des travaux du mathématicien Seymour Papert dans "
+"les années 60. Inspiré par le psychologue suisse Jean Piaget, il a inventé "
+"une méthode d'apprentissage de la programmation accessible aux jeunes "
+"enfants nommée LOGO. Le monde est peuplé de tortues qui laissent une trace "
+"là où elles marchent et à qui on peut donner des ordres simples."
 
 #. type: Content of: <h2>
-#: src/jlm/universe/turtles/TurtleWorld.html:10
-msgid "Methods understood by turtles"
-msgstr "Méthodes comprises par les tortues"
+#: src/jlm/universe/turtles/TurtleWorld.html:11
+msgid "Functions to move the turtle"
+msgstr "Fonctions pour déplacer la tortue"
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <pre>
 #: src/jlm/universe/turtles/TurtleWorld.html:13
+#, no-wrap
 msgid ""
-"<b>Moving forward</b> <code>public void forward(double stepAmount);</code>"
-msgstr "<b>Avancer</b> <code>public void forward(double nbPas);</code>"
-
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:14
-msgid ""
-"<b>Moving backward</b> <code>public void backward(double stepAmount);</code>"
-msgstr "<b>Reculer</b> <code>public void backward(double nbPas);</code>"
+"void forward(double steps)\n"
+"void backward(double steps)"
+msgstr ""
+"void forward(double nbPas)\n"
+"void backward(double nbPas)"
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <pre>
 #: src/jlm/universe/turtles/TurtleWorld.html:15
+#, no-wrap
 msgid ""
-"<b>Turn left</b> <code>public void turnLeft(double angle);</code> (in degree)"
+"forward(steps)\n"
+"backward(steps)"
 msgstr ""
-"<b>Tourner à gauche</b> <code>public void turnLeft(double angle);</code> (en "
-"degré)"
+"forward(nbPas)\n"
+"backward(nbPas)"
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: outside any tag (error?)
 #: src/jlm/universe/turtles/TurtleWorld.html:17
-msgid "<b>Turn right</b> <code>public void turnRight(double angle);</code>"
-msgstr ""
-"<b>Tourner à droite</b> <code>public void turnRight(double angle);</code>"
-
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:18
-msgid "<b>Pen up</b> <code>public void penUp();</code>"
-msgstr "<b>Lever le stylo</b> <code>public void penUp();</code>"
+msgid "Moves forward or backward of the requested amount of steps."
+msgstr "Avance (forward) ou recule (backward) du nombre de pas demandés."
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <pre>
 #: src/jlm/universe/turtles/TurtleWorld.html:19
-msgid "<b>Pen down</b> <code>public void penDown();</code>"
-msgstr "<b>Baisser le stylo</b> <code>public void penDown();</code>"
-
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:20
-msgid "<b>Get pen position</b> <code>public boolean isPenDown();</code>"
+#, no-wrap
+msgid ""
+"void turnRight(double angle)\n"
+"void turnLeft(double angle)"
 msgstr ""
-"<b>Obtenir la position du stylo</b> <code>public boolean isPenDown();</code>"
+"void turnRight(double angle)\n"
+"void turnLeft(double angle)"
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <pre>
 #: src/jlm/universe/turtles/TurtleWorld.html:21
-msgid "(turtles have pens, not brushes as buggles)"
-msgstr "(les tortues ont des stylos, pas des brosses comme les buggles)"
-
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:22
-msgid "<b>Get heading</b> <code>public double getHeading();</code>"
-msgstr "<b>Obtenir direction</b> <code>public double getHeading();</code>"
+#, no-wrap
+msgid ""
+"turnRight(angle)\n"
+"turnLeft(angle)"
+msgstr ""
+"turnRight(angle)\n"
+"turnLeft(angle)"
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: outside any tag (error?)
 #: src/jlm/universe/turtles/TurtleWorld.html:23
+msgid "Turns left or right of the given angle (in degrees)."
+msgstr ""
+"Tourne à gauche (left) ou à droite (right) du nombre de l'angle indiqué (en "
+"degrés)."
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:25
+#, no-wrap
 msgid ""
-"<b>Change heading</b> <code>public void setHeading(double angle);</code>"
+"double getX()\n"
+"double getY()"
 msgstr ""
-"<b>Changer direction</b> <code>public void setHeading(double angle);</code>"
+"double getX()\n"
+"double getY()"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:24
-msgid "<b>Get color</b> <code>public Color getColor();</code>"
-msgstr "<b>Obtenir couleur</b> <code>public Color getColor();</code>"
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:27
+#, no-wrap
+msgid ""
+"getX()\n"
+"getY()"
+msgstr ""
+"getX()\n"
+"getY()"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:25
-msgid "<b>Set color</b> <code>public void setColor(Color color);</code>"
-msgstr "<b>Changer couleur</b> <code>public void setColor(Color color);</code>"
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:29
+msgid "Returns the current position of the turtle."
+msgstr "Retourne la position acutelle de la tortue."
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:26
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:31
+#, no-wrap
 msgid ""
-"<b>Get position</b> <code>public double getX();</code> <code>public double "
-"getY();</code>"
+"void setX(double x)\n"
+"void setY(double y)\n"
+"void setPos(double x, double y)"
 msgstr ""
-"<b>Obtenir position</b> <code>public double getX();</code> <code>public "
-"double getY();</code>"
+"void setX(double x)\n"
+"void setY(double y)\n"
+"void setPos(double x, double y)"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:28
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:34
+#, no-wrap
 msgid ""
-"<b>Set position</b> <code>public void setX(double x);</code> \t <code>public "
-"void setY(double y);</code> <code>public void setPos(double x, double y);</"
-"code>"
+"setX(x)\n"
+"setY(y)\n"
+"setPos(x,y)"
 msgstr ""
-"<b>Changer position</b> <code>public void setX(double x);</code> \t "
-"<code>public void setY(double y);</code> <code>public void setPos(double x, "
-"double y);</code>"
+"setX(x)\n"
+"setY(y)\n"
+"setPos(x,y)"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:37
+msgid "Teleports the turtle to a new position."
+msgstr "Téléporte la tortue à une nouvelle position."
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:39
+#, no-wrap
+msgid "double getHeading()"
+msgstr "double getHeading()"
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:40
+#, no-wrap
+msgid "getHeading()"
+msgstr "getHeading()"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:41
+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/jlm/universe/turtles/TurtleWorld.html:43
+#, no-wrap
+msgid "void getHeading(double angle)"
+msgstr "void getHeading(double angle)"
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:44
+#, no-wrap
+msgid "getHeading(angle)"
+msgstr "getHeading(angle)"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:45
+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/jlm/universe/turtles/TurtleWorld.html:47
+msgid "Functions about the pen"
+msgstr "Fonctions à propos du stylo"
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:49
+#, no-wrap
+msgid "void penUp()"
+msgstr "void penUp()"
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:50
+#, no-wrap
+msgid "penUp()"
+msgstr "penUp()"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:51
+msgid ""
+"Moves the pen up (turtles have pens, not brushes as buggles). The turtle "
+"will not leave any trace during its subsequent moves."
+msgstr "Remonte le stylo de la tortue (les tortues ont des stylos, pas des brosses comme les buggles). La tortue ne laissera plus de trace lors de ses déplacements suivants."
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:54
+#, no-wrap
+msgid "void penDown()"
+msgstr "void penDown()"
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:55
+#, no-wrap
+msgid "penDown()"
+msgstr "penDown()"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:56
+msgid ""
+"Moves the pen down. The turtle will leave a trace during its subsequent "
+"moves."
+msgstr "Descend le stylo. La tortue laissera une trace lors de ses prochains déplacements."
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:58
+#, no-wrap
+msgid "boolean isPenDown()"
+msgstr "boolean isPenDown()"
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:59
+#, no-wrap
+msgid "isPenDown()"
+msgstr "isPenDown()"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:60
+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/jlm/universe/turtles/TurtleWorld.html:62
+#: src/jlm/universe/bugglequest/BuggleWorld.html:25
+#: src/lessons/turmites/universe/TurmiteWorld.html:18
+#, no-wrap
+msgid "Color getColor()"
+msgstr "Color getColor()"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/turtles/TurtleWorld.html:63
+#: src/jlm/universe/bugglequest/BuggleWorld.html:25
+#, no-wrap
+msgid "getColor()"
+msgstr "getColor()"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:64
+msgid "Returns the current pen color."
+msgstr "Retourne la couleur actuelle du stylo."
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:66
+#, no-wrap
+msgid "void setColor(Color color)"
+msgstr "void setColor(Color color)"
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:67
+#, no-wrap
+msgid "getColor(color)"
+msgstr "getColor(color)"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:68
+msgid "Changes the pen color."
+msgstr "Modifier la couleur du stylo."
+
+#. type: Content of: <h2>
+#: src/jlm/universe/turtles/TurtleWorld.html:70
+msgid "Other functions"
+msgstr "Autres fonctions"
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:74
+msgid ""
+"Returns whether the current turtle is selected in the graphical interface."
+msgstr "Renvoie si la tortue actuelle est sélectionnée dans l'interface graphique."
 
 #. type: Content of: <h1>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:1
-#: src/jlm/universe/turmite/TurmiteWorld.html:1
+#: src/lessons/turmites/universe/TurmiteWorld.html:1
 msgid "BuggleWorld"
 msgstr "Le monde des Buggles"
 
 #. type: Content of: outside any tag (error?)
 #: src/jlm/universe/bugglequest/BuggleWorld.html:2
-#: src/jlm/universe/turmite/TurmiteWorld.html:2
+#: src/lessons/turmites/universe/TurmiteWorld.html:2
 msgid ""
 "This world was invented by Lyn Turbak, at Wellesley College. It is full of "
 "Buggles, little animals understanding simple orders, and offers numerous "
@@ -615,427 +853,563 @@ msgstr ""
 
 #. type: Content of: <h2>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:7
-#: src/jlm/universe/turmite/TurmiteWorld.html:7
+#: src/lessons/turmites/universe/TurmiteWorld.html:7
 msgid "Methods understood by buggles"
 msgstr "Méthodes comprises par les buggles"
 
 #. type: Content of: <table><tr><td>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:9
-#: src/jlm/universe/turmite/TurmiteWorld.html:9
+#: src/lessons/turmites/universe/TurmiteWorld.html:9
 msgid "<b>Moving</b>"
 msgstr "<b>Bouger</b>"
 
 #. type: Content of: <table><tr><td>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:9
-#: src/jlm/universe/turmite/TurmiteWorld.html:9
+#: src/lessons/turmites/universe/TurmiteWorld.html:9
 msgid "(See also the note on exceptions, below)"
 msgstr "(voir aussi la note sur les exceptions, plus bas)"
 
 #. type: Content of: <table><tr><td><b>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:10
-#: src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "<b>Turn left"
 msgstr "<b>Tourner à gauche"
 
 #. type: Content of: <table><tr><td><b>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:10
-#: src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "Turn right"
 msgstr "Tourner à droite"
 
 #. type: Content of: <table><tr><td><b>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:10
-#: src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "Turn back"
 msgstr "Se retourner"
 
 #. type: Content of: <table><tr><td><b>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:10
-#: src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "Moving forward"
 msgstr "Avancer"
 
 #. type: Content of: <table><tr><td>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:10
-#: src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "Moving back</b>"
 msgstr "Reculer</b>"
 
 #. type: Content of: <table><tr><td>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:11
-#: src/jlm/universe/turmite/TurmiteWorld.html:11
+#: src/lessons/turmites/universe/TurmiteWorld.html:11
 msgid "void turnLeft()"
 msgstr "void turnLeft()"
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <table><tr><td><div>
 #: src/jlm/universe/bugglequest/BuggleWorld.html:11
-#: src/jlm/universe/turmite/TurmiteWorld.html:11
+msgid "turnLeft()"
+msgstr "turnLeft()"
+
+#. type: Content of: <table><tr><td>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:12
+#: src/lessons/turmites/universe/TurmiteWorld.html:11
 msgid "void turnRight()"
 msgstr "void turnRight()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:12
+msgid "turnRight()"
+msgstr "turnRight()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:11
-#: src/jlm/universe/turmite/TurmiteWorld.html:11
+#: src/jlm/universe/bugglequest/BuggleWorld.html:13
+#: src/lessons/turmites/universe/TurmiteWorld.html:11
 msgid "void turnBack()"
 msgstr "void turnBack()"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:12
-#: src/jlm/universe/turmite/TurmiteWorld.html:12
-msgid "void forward() or void forward(int)"
-msgstr "void forward() ou void forward(int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:13
+msgid "turnBack()"
+msgstr "turnBack()"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:12
-#: src/jlm/universe/turmite/TurmiteWorld.html:12
-msgid "void backward() or void backward(int)"
-msgstr "void backward() ou void backward(int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:14
+msgid "void forward() or void forward(int steps)"
+msgstr "void forward() ou void forward(nbPas)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:14
+msgid "forward() or forward(steps)"
+msgstr "forward() ou forward(nbPas)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:15
+msgid "void backward() or void backward(int steps)"
+msgstr "void backward() ou void backward(nbPas)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:15
+msgid "backward() or backward(steps)"
+msgstr "backward() ou backward(nbPas)"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13
-#: src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16
+#: src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "<b>Get X coordinate"
 msgstr "<b>Obtenir l'abcisse"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13
-#: src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16
+#: src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "Get Y coordinate"
 msgstr "Obtenir l'ordonnée"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13
-#: src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16
+#: src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "Set X coordinate"
 msgstr "Changer l'abcisse"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13
-#: src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16
+#: src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "Set Y coordinate"
 msgstr "Changer l'ordonnée"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13
-#: src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16
+#: src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "Set position</b>"
 msgstr "Changer la position</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14
-#: src/jlm/universe/turmite/TurmiteWorld.html:14
+#: src/jlm/universe/bugglequest/BuggleWorld.html:17
+#: src/lessons/turmites/universe/TurmiteWorld.html:14
 msgid "int getX()"
 msgstr "int getX()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:17
+msgid "getX()"
+msgstr "getX()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14
-#: src/jlm/universe/turmite/TurmiteWorld.html:14
+#: src/jlm/universe/bugglequest/BuggleWorld.html:18
+#: src/lessons/turmites/universe/TurmiteWorld.html:14
 msgid "int getY()"
 msgstr "int getY()"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14
-#: src/jlm/universe/turmite/TurmiteWorld.html:14
-msgid "void setX(int)"
-msgstr "void setX(int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:18
+msgid "getY()"
+msgstr "getY()"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14
-#: src/jlm/universe/turmite/TurmiteWorld.html:14
-msgid "void setY(int)"
-msgstr "void setY(int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:19
+msgid "void setX(int x)"
+msgstr "void setX(int x)"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14
-#: src/jlm/universe/turmite/TurmiteWorld.html:14
-msgid "void setPos(int,int)"
-msgstr "void setPos(int,int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:19
+msgid "setX(x)"
+msgstr "setX(x)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:20
+msgid "void setY(int y)"
+msgstr "void setY(int y)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:20
+msgid "setY(y)"
+msgstr "setY(y)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:21
+msgid "void setPos(int x,int y)"
+msgstr "void setPos(int x,int y)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:21
+msgid "setPos(x,y)"
+msgstr "setPos(x,y)"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:16
-#: src/jlm/universe/turmite/TurmiteWorld.html:16
+#: src/jlm/universe/bugglequest/BuggleWorld.html:23
+#: src/lessons/turmites/universe/TurmiteWorld.html:16
 msgid "<b>Information on the buggle</b>"
 msgstr "<b>Informations sur la buggle</b>"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:17
-#: src/jlm/universe/turmite/TurmiteWorld.html:17
+#: src/jlm/universe/bugglequest/BuggleWorld.html:24
+#: src/lessons/turmites/universe/TurmiteWorld.html:17
 msgid "<b>Get the color"
 msgstr "<b>Obtenir la couleur"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:17
-#: src/jlm/universe/turmite/TurmiteWorld.html:17
+#: src/jlm/universe/bugglequest/BuggleWorld.html:24
+#: src/lessons/turmites/universe/TurmiteWorld.html:17
 msgid "Set the color</b>"
 msgstr "Changer la couleur</b>"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:18
-#: src/jlm/universe/turmite/TurmiteWorld.html:18
-msgid "Color getColor()"
-msgstr "Color getColor()"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:26
+msgid "void setColor(Color c)"
+msgstr "void setColor(Color c)"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:18
-#: src/jlm/universe/turmite/TurmiteWorld.html:18
-msgid "void setColor(Color)"
-msgstr "void setColor(Color)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:26
+msgid "setColor(color)"
+msgstr "setColor(color)"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:19
-#: src/jlm/universe/turmite/TurmiteWorld.html:19
+#: src/jlm/universe/bugglequest/BuggleWorld.html:27
+#: src/lessons/turmites/universe/TurmiteWorld.html:19
 msgid "<b>Look for a wall forward"
 msgstr "<b>Chercher un mur devant"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:19
-#: src/jlm/universe/turmite/TurmiteWorld.html:19
+#: src/jlm/universe/bugglequest/BuggleWorld.html:27
+#: src/lessons/turmites/universe/TurmiteWorld.html:19
 msgid "Look for a wall backward</b>"
 msgstr "Chercher un mur derriere</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:20
-#: src/jlm/universe/turmite/TurmiteWorld.html:20
+#: src/jlm/universe/bugglequest/BuggleWorld.html:28
+#: src/lessons/turmites/universe/TurmiteWorld.html:20
 msgid "boolean isFacingWall()"
 msgstr "boolean isFacingWall()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:28
+msgid "isFacingWall()"
+msgstr "isFacingWall()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:20
-#: src/jlm/universe/turmite/TurmiteWorld.html:20
+#: src/jlm/universe/bugglequest/BuggleWorld.html:29
+#: src/lessons/turmites/universe/TurmiteWorld.html:20
 msgid "boolean isBackingWall()"
 msgstr "boolean isBackingWall()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:29
+msgid "isBackingWall()"
+msgstr "isBackingWall()"
+
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:21
-#: src/jlm/universe/turmite/TurmiteWorld.html:21
+#: src/jlm/universe/bugglequest/BuggleWorld.html:30
+#: src/lessons/turmites/universe/TurmiteWorld.html:21
 msgid "<b>Get heading"
 msgstr "<b>Obtenir la direction"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:21
-#: src/jlm/universe/turmite/TurmiteWorld.html:21
+#: src/jlm/universe/bugglequest/BuggleWorld.html:30
+#: src/lessons/turmites/universe/TurmiteWorld.html:21
 msgid "Set heading</b>"
 msgstr "Changer la direction</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:21
-#: src/jlm/universe/turmite/TurmiteWorld.html:21
+#: src/jlm/universe/bugglequest/BuggleWorld.html:30
+#: src/lessons/turmites/universe/TurmiteWorld.html:21
 msgid "valid directions are:"
 msgstr "Les directions valides sont :"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:22
-#: src/jlm/universe/turmite/TurmiteWorld.html:22
+#: src/jlm/universe/bugglequest/BuggleWorld.html:31
+#: src/lessons/turmites/universe/TurmiteWorld.html:22
 msgid "Direction getDirection()"
 msgstr "Direction getDirection()"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:22
-#: src/jlm/universe/turmite/TurmiteWorld.html:22
-msgid "void setDirection(Direction)"
-msgstr "void setDirection(Direction)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:31
+msgid "getDirection()"
+msgstr "getDirection()"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:32
+msgid "void setDirection(Direction dir)"
+msgstr "void setDirection(Direction dir)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:32
+msgid "setDirection(direction)"
+msgstr "setDirection(direction)"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:22
-#: src/jlm/universe/turmite/TurmiteWorld.html:22
+#: src/jlm/universe/bugglequest/BuggleWorld.html:33
+#: src/lessons/turmites/universe/TurmiteWorld.html:22
 msgid "Direction.NORTH, Direction.EAST, Direction.SOUTH and Direction.WEST"
 msgstr "Direction.NORTH, Direction.EAST, Direction.SOUTH et Direction.WEST"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:24
-#: src/jlm/universe/turmite/TurmiteWorld.html:24
+#: src/jlm/universe/bugglequest/BuggleWorld.html:34
+msgid "Check whether the buggle is currently <b>selected in the interface</b>"
+msgstr ""
+"Renvoi si la buggle est actuellement <b>sélectionnée dans l'interface</b>"
+
+#. type: Content of: <table><tr><td>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:37
+#: src/lessons/turmites/universe/TurmiteWorld.html:24
 msgid "<b>About the brush</b>"
 msgstr "<b>À propos de la brosse</b>"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:25
-#: src/jlm/universe/turmite/TurmiteWorld.html:25
+#: src/jlm/universe/bugglequest/BuggleWorld.html:38
+#: src/lessons/turmites/universe/TurmiteWorld.html:25
 msgid "<b>Brush down"
 msgstr "<b>Baisser la brosse"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:25
-#: src/jlm/universe/turmite/TurmiteWorld.html:25
+#: src/jlm/universe/bugglequest/BuggleWorld.html:38
+#: src/lessons/turmites/universe/TurmiteWorld.html:25
 msgid "Brush up"
 msgstr "Lever la brosse"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:25
-#: src/jlm/universe/turmite/TurmiteWorld.html:25
+#: src/jlm/universe/bugglequest/BuggleWorld.html:38
+#: src/lessons/turmites/universe/TurmiteWorld.html:25
 msgid "Get brush position</b>"
 msgstr "Obtenir la position de la brosse</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:26
-#: src/jlm/universe/turmite/TurmiteWorld.html:26
+#: src/jlm/universe/bugglequest/BuggleWorld.html:39
+#: src/lessons/turmites/universe/TurmiteWorld.html:26
 msgid "void brushUp()"
 msgstr "void brushUp()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:39
+msgid "brushUp()"
+msgstr "brushUp()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:26
-#: src/jlm/universe/turmite/TurmiteWorld.html:26
+#: src/jlm/universe/bugglequest/BuggleWorld.html:40
+#: src/lessons/turmites/universe/TurmiteWorld.html:26
 msgid "void brushDown()"
 msgstr "void brushDown()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:40
+msgid "brushDown()"
+msgstr "brushDown()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:26
-#: src/jlm/universe/turmite/TurmiteWorld.html:26
+#: src/jlm/universe/bugglequest/BuggleWorld.html:41
+#: src/lessons/turmites/universe/TurmiteWorld.html:26
 msgid "boolean isBrushDown()"
 msgstr "boolean isBrushDown()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:41
+msgid "isBrushDown()"
+msgstr "isBrushDown()"
+
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:27
-#: src/jlm/universe/turmite/TurmiteWorld.html:27
+#: src/jlm/universe/bugglequest/BuggleWorld.html:42
+#: src/lessons/turmites/universe/TurmiteWorld.html:27
 msgid "<b>Change the brush color"
 msgstr "<b>Modifier la couleur de la brosse"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:27
-#: src/jlm/universe/turmite/TurmiteWorld.html:27
+#: src/jlm/universe/bugglequest/BuggleWorld.html:42
+#: src/lessons/turmites/universe/TurmiteWorld.html:27
 msgid "Get the color of the brush</b>"
 msgstr "Obtenir la couleur de la brosse</b>"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:28
-#: src/jlm/universe/turmite/TurmiteWorld.html:28
-msgid "void setBrushColor(Color)"
-msgstr "void setBrushColor(Color)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:43
+msgid "void setBrushColor(Color c)"
+msgstr "void setBrushColor(Color c)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:43
+msgid "setBrushColor(color)"
+msgstr "setBrushColor(color)"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:28
-#: src/jlm/universe/turmite/TurmiteWorld.html:28
+#: src/jlm/universe/bugglequest/BuggleWorld.html:44
+#: src/lessons/turmites/universe/TurmiteWorld.html:28
 msgid "Color getBrushColor()"
 msgstr "Color getBrushColor()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:44
+msgid "getBrushColor()"
+msgstr "getBrushColor()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:30
-#: src/jlm/universe/turmite/TurmiteWorld.html:30
+#: src/jlm/universe/bugglequest/BuggleWorld.html:46
+#: src/lessons/turmites/universe/TurmiteWorld.html:30
 msgid "<b>Interacting with the world</b>"
 msgstr "<b>Interagir avec le monde</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:31
-#: src/jlm/universe/turmite/TurmiteWorld.html:31
+#: src/jlm/universe/bugglequest/BuggleWorld.html:47
+#: src/lessons/turmites/universe/TurmiteWorld.html:31
 msgid "<b>Get the color of the ground</b>"
 msgstr "<b>Obtenir la couleur du sol</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:31
-#: src/jlm/universe/turmite/TurmiteWorld.html:31
+#: src/jlm/universe/bugglequest/BuggleWorld.html:48
+#: src/lessons/turmites/universe/TurmiteWorld.html:31
 msgid "Color getGroundColor()"
 msgstr "Color getGroundColor()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:48
+msgid "getGroundColor()"
+msgstr "getGroundColor()"
+
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:33
-#: src/jlm/universe/turmite/TurmiteWorld.html:33
+#: src/jlm/universe/bugglequest/BuggleWorld.html:50
+#: src/lessons/turmites/universe/TurmiteWorld.html:33
 msgid "<b>Look for a baggle on the ground"
 msgstr "<b>Chercher un baggle par terre"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:33
-#: src/jlm/universe/turmite/TurmiteWorld.html:33
+#: src/jlm/universe/bugglequest/BuggleWorld.html:50
+#: src/lessons/turmites/universe/TurmiteWorld.html:33
 msgid "Look for a baggle in bag"
 msgstr "Chercher un baggle dans ses poches"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:33
-#: src/jlm/universe/turmite/TurmiteWorld.html:33
+#: src/jlm/universe/bugglequest/BuggleWorld.html:50
+#: src/lessons/turmites/universe/TurmiteWorld.html:33
 msgid "Pickup a baggle"
 msgstr "Prendre un baggle"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:33
-#: src/jlm/universe/turmite/TurmiteWorld.html:33
+#: src/jlm/universe/bugglequest/BuggleWorld.html:50
+#: src/lessons/turmites/universe/TurmiteWorld.html:33
 msgid "Drop a baggle</b>"
 msgstr "Poser un baggle</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:34
-#: src/jlm/universe/turmite/TurmiteWorld.html:34
+#: src/jlm/universe/bugglequest/BuggleWorld.html:51
+#: src/lessons/turmites/universe/TurmiteWorld.html:34
 msgid "(see the note on exceptions)"
 msgstr "(voir la note sur les exceptions)"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:35
-#: src/jlm/universe/turmite/TurmiteWorld.html:35
+#: src/jlm/universe/bugglequest/BuggleWorld.html:52
+#: src/lessons/turmites/universe/TurmiteWorld.html:35
 msgid "boolean isOverBaggle()"
 msgstr "boolean isOverBaggle()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:52
+msgid "isOverBaggle()"
+msgstr "isOverBaggle()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:35
-#: src/jlm/universe/turmite/TurmiteWorld.html:35
+#: src/jlm/universe/bugglequest/BuggleWorld.html:53
+#: src/lessons/turmites/universe/TurmiteWorld.html:35
 msgid "boolean isCarryingBaggle()"
 msgstr "boolean isCarryingBaggle()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:53
+msgid "isCarryingBaggle()"
+msgstr "isCarryingBaggle()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:35
-#: src/jlm/universe/turmite/TurmiteWorld.html:35
-msgid "void pickUpBaggle()"
-msgstr "void pickUpBaggle()"
+#: src/jlm/universe/bugglequest/BuggleWorld.html:54
+#: src/lessons/turmites/universe/TurmiteWorld.html:35
+msgid "void pickupBaggle()"
+msgstr "void pickupBaggle()"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:54
+msgid "pickupBaggle()"
+msgstr "pickupBaggle()"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:35
-#: src/jlm/universe/turmite/TurmiteWorld.html:35
+#: src/jlm/universe/bugglequest/BuggleWorld.html:55
+#: src/lessons/turmites/universe/TurmiteWorld.html:35
 msgid "void dropBaggle()"
 msgstr "void dropBaggle()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:55
+msgid "dropBaggle()"
+msgstr "dropBaggle()"
+
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:37
-#: src/jlm/universe/turmite/TurmiteWorld.html:37
+#: src/jlm/universe/bugglequest/BuggleWorld.html:57
+#: src/lessons/turmites/universe/TurmiteWorld.html:37
 msgid "<b>Look for a message"
 msgstr "<b>Chercher un message"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:37
-#: src/jlm/universe/turmite/TurmiteWorld.html:37
+#: src/jlm/universe/bugglequest/BuggleWorld.html:57
+#: src/lessons/turmites/universe/TurmiteWorld.html:37
 msgid "Add a message"
 msgstr "Ajouter un message"
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:37
-#: src/jlm/universe/turmite/TurmiteWorld.html:37
+#: src/jlm/universe/bugglequest/BuggleWorld.html:57
+#: src/lessons/turmites/universe/TurmiteWorld.html:37
 msgid "Read the message"
 msgstr "Lire le message"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:37
-#: src/jlm/universe/turmite/TurmiteWorld.html:37
+#: src/jlm/universe/bugglequest/BuggleWorld.html:57
+#: src/lessons/turmites/universe/TurmiteWorld.html:37
 msgid "Erase the message</b>"
 msgstr "Effacer le message</b>"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:38
-#: src/jlm/universe/turmite/TurmiteWorld.html:38
+#: src/jlm/universe/bugglequest/BuggleWorld.html:58
+#: src/lessons/turmites/universe/TurmiteWorld.html:38
 msgid "boolean isOverMessage()"
 msgstr "boolean isOverMessage()"
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:38
-#: src/jlm/universe/turmite/TurmiteWorld.html:38
-msgid "void writeMessage(String)"
-msgstr "void writeMessage(String)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:58
+msgid "isOverMessage()"
+msgstr "isOverMessage()"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:59
+msgid "void writeMessage(String msg)"
+msgstr "void writeMessage(String msg)"
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:59
+msgid "writeMessage(msg)"
+msgstr "writeMessage(msg)"
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:38
-#: src/jlm/universe/turmite/TurmiteWorld.html:38
+#: src/jlm/universe/bugglequest/BuggleWorld.html:60
+#: src/lessons/turmites/universe/TurmiteWorld.html:38
 msgid "String readMessage()"
 msgstr "String readMessage()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:60
+msgid "readMessage()"
+msgstr "readMessage()"
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:38
-#: src/jlm/universe/turmite/TurmiteWorld.html:38
+#: src/jlm/universe/bugglequest/BuggleWorld.html:61
+#: src/lessons/turmites/universe/TurmiteWorld.html:38
 msgid "void clearMessage()"
 msgstr "void clearMessage()"
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:61
+msgid "clearMessage()"
+msgstr "clearMessage()"
+
 #. type: Content of: <h2>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:41
-#: src/jlm/universe/turmite/TurmiteWorld.html:41
+#: src/jlm/universe/bugglequest/BuggleWorld.html:64
+#: src/lessons/turmites/universe/TurmiteWorld.html:41
 msgid "Note on exceptions"
 msgstr "Note sur les exceptions"
 
 #. type: Content of: outside any tag (error?)
-#: src/jlm/universe/bugglequest/BuggleWorld.html:42
-#: src/jlm/universe/turmite/TurmiteWorld.html:42
+#: src/jlm/universe/bugglequest/BuggleWorld.html:65
+#: src/lessons/turmites/universe/TurmiteWorld.html:42
 msgid ""
 "Regular buggles throw a BuggleWallException exception if you ask them to "
 "traverse a wall.  They throw a NoBaggleUnderBuggleException exception if you "
@@ -1053,8 +1427,8 @@ msgstr ""
 "exception AlreadyHaveBaggleException."
 
 #. type: Content of: <p>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:48
-#: src/jlm/universe/turmite/TurmiteWorld.html:48
+#: src/jlm/universe/bugglequest/BuggleWorld.html:71
+#: src/lessons/turmites/universe/TurmiteWorld.html:48
 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."
@@ -1064,67 +1438,6 @@ msgstr ""
 "une exception."
 
 #. type: Content of: <h1>
-#: src/jlm/universe/hanoi/HanoiWorld.html:1
-msgid "HanoiWorld"
-msgstr "Le monde des tours de Hanoï"
-
-#. type: Content of: outside any tag (error?)
-#: src/jlm/universe/hanoi/HanoiWorld.html:3
-msgid ""
-"This world implements the ultra-classical Hanoi problem. You are asked to "
-"move the disk pile from the stick where they are to the target stick (given "
-"as second parameter in the world's name -- number 1 for the default world). "
-"There is some extra constraint: you can only move one disk at a time, and "
-"you cannot move a big disk over a smaller one.  Only 2 functions are "
-"provided:"
-msgstr ""
-"Ce monde implémente le problème ultra classique de Hanoï. Il vous est "
-"demandé\n"
-"de déplacer une pile de disques du piquet où ils se trouvent vers un piquet\n"
-"cible (passé comme second paramètre dans le nom du monde -- numéro 1 pour "
-"le\n"
-"monde par défaut). Il y a quelques contraintes supplémentaires: il est "
-"interdit\n"
-"de déplacer plus d'un disque à la fois, ainsi que de placer un disque plus\n"
-"grand sur un disque plus petit. Seules deux fonctions sont fournies :"
-
-#. type: Content of: <pre>
-#: src/jlm/universe/hanoi/HanoiWorld.html:11
-#, no-wrap
-msgid "public void move(int src, int dst) throws HanoiInvalidMove;"
-msgstr "public void move(int src, int dst) throws HanoiInvalidMove;"
-
-#. type: Content of: outside any tag (error?)
-#: src/jlm/universe/hanoi/HanoiWorld.html:13
-msgid ""
-"It moves one disk from the stick <code>src</code> onto the stick <code>dst</"
-"code>. As you can see, if you try to do an invalid move (like laying a disk "
-"over a smaller one), an exception is thrown."
-msgstr ""
-"Elle déplace un disque d'un piquet <code>src</code> vers le piquet "
-"<code>dst</code>. Comme vous le voyez, si vous demandez un déplacement "
-"invalide (comme le placement d'un disque sur un disque plus petit), une "
-"exception est levée."
-
-#. type: Content of: <pre>
-#: src/jlm/universe/hanoi/HanoiWorld.html:17
-#, no-wrap
-msgid "int getSlotSize(int slot);"
-msgstr "int getSlotSize(int slot);"
-
-#. type: Content of: outside any tag (error?)
-#: src/jlm/universe/hanoi/HanoiWorld.html:19
-msgid ""
-"It returns the amount of disks placed on the specified slot. This is mainly "
-"used to initialize the recursion and set the amount of recursive call to "
-"execute."
-msgstr ""
-"Elle retourne le nombre de disques placés sur un piquet donné. Cette "
-"fonction\n"
-"est surtout utile pour initialiser la récursion et déterminer le nombre\n"
-"d'appels récursifs à réaliser."
-
-#. type: Content of: <h1>
 #: src/lessons/backtracking/Main.html:1
 msgid "Backtracking lesson"
 msgstr "Leçon sur le \"backtracking\""
@@ -1476,583 +1789,109 @@ msgstr ""
 "Ce n'est pas une vraie leçon, c'est ici que vous pouvez choisir une leçon "
 "parmis les autres."
 
-#. type: Content of: <h1>
-#: src/lessons/meta/HanoiCreateWorld.html:1
-msgid "Creating a new JLM world"
-msgstr "Créer un nouveau monde JLM (\"World\")"
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:4
-msgid ""
-"Welcome to the JLM Meta-Lesson. Its goal is to teach you how to write new "
-"universes in JLM. For that, we will reimplement the Hanoi world (available "
-"in the recursion lesson) step-by-step. This lesson covers quite advanced "
-"topics and suppose that you are fluent in Java and confident with the use of "
-"the JLM framework already. If you are not used to the framework already, you "
-"probably want to take another lesson before, like the welcome one or (maybe "
-"more fun) the maze one."
-msgstr ""
-"Bienvenue dans la Meta-Leçon JLM. Son but est de vous apprendre comment "
-"écrire de nouveaux univers dans la JLM. Pour ce faire, nous allons "
-"réimplanter le monde des tours de Hanoï ( disponible dans la leçon "
-"récursion ) pas à pas. Cette leçon couvre des sujets assez avancés et "
-"supporse que vous êtes à l'aise en Java et que vous connaissez déjà bien "
-"l'utilisation du framework de la JLM. Si vous n'êtes pas déjà habitué au "
-"frameword, vous voudrez probablement suivre une autre leçon avant, comme "
-"Welcome ou ( sans doute plus amusant ) Maze."
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:12
-msgid "Every JLM universe is composed of 4 main components:"
-msgstr "Chaque univers JLM est composé de quatre composants principaux"
-
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:14
-msgid "<b>The world</b>: it contains the state of the universe."
-msgstr "<b>Le monde (\"world\")</b> : il contient l'état de l'univers."
+#. type: Content of: <h3>
+#: src/lessons/welcome/Main.html:1 src/lessons/welcome/short_desc.html:1
+msgid "First steps"
+msgstr "Premiers pas"
 
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:15
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/Main.html:3
 msgid ""
-"<b>The view</b>: it allows to draw the world and the entities on the screen."
+"This first lesson will lead your first steps in programming. It is intended "
+"for beginners. List of seen notions per exercise:"
 msgstr ""
-"<b>La vue (\"View\")</b>: elle permet de dessiner le monde et les entitées à "
-"l'écran."
+"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: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:17
-msgid ""
-"<b>The entity ancestor</b>: the code written by the student will derive from "
-"this class, which contains some state specific to the entity, and every "
-"accessor to let the entity interact with its world."
-msgstr ""
-"<b>L' \"entity ancestor\"</b> :  le code écrit par l'étudiant sera dérivé de "
-"cette classe, qui contient certains états spécifiques à l'entité, et chaque "
-"accesseur pour permettre à l'entité d'intéragir avec le monde."
+#. 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: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:20
-msgid ""
-"<b>The entity interactive control panel</b>: this is the little panel "
-"displayed under the world view in the JLM interface. It allows to "
-"interactively control the selected entity. As you can see from the existing "
-"universes, this is optional, and if you don't provide any, the panel will "
-"remain blank, preventing the users from interactively controlling the "
-"entities."
-msgstr ""
-"<b>Le panneau de contrôle interactif de l'entité</b> : c'est le petit "
-"panneau affiché en dessous de la vue du monde dans l'interface de la JLM. Il "
-"permet de contrôler interactivement l'entité sélectionnée. Comme vous pouvez "
-"le voir avec les univers existants, c'est optionnel, et si vous n'en "
-"fournissez pas, le panneau restera vide, empêchant l'utilisateur de "
-"controler interactivement l'entité."
+#. 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/basics/Basics.html:1
+msgid "Instructions"
+msgstr "Instructions"
 
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:28
-msgid ""
-"In addition, worlds are used by exercises, themselves sorted in lessons."
-msgstr ""
-"De plus, les mondes sont utilisés pas les exercices, eux-mêmes rangés en "
-"leçons."
+#. type: Content of: <table><tr><td>
+#: src/lessons/welcome/Main.html:10 src/lessons/welcome/Main.html:93
+#: src/lessons/welcome/Main.html:176 src/lessons/welcome/Main.html:256
+#: src/lessons/welcome/Main.html:350 src/lessons/welcome/Main.html:430
+#: src/lessons/welcome/Main.html:470
+msgid "Comments"
+msgstr "Commentaires"
 
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:30
-msgid ""
-"<b>Lessons</b> are just a list of exercise. They can be sequential (meaning "
-"that the student has to finish one exercise before being allowed to see the "
-"next one in the list), altrough most of them are not (ie, students are free "
-"to attempt the exercises in the order they like)."
-msgstr ""
-"<b>Les leçons (\"Lessons\")</b> sont juste une liste d'exercices. Elles "
-"peuvent être séquentielles (ce qui signifie que l'étudiant doit finir "
-"l'exercise avant de pouvoir voir le suivant ), même si la grande majorité "
-"des leçons ne le sont pas ( ie, les étudiants sont libre d'essayer les "
-"exercices dans l'ordre qu'ils souhaitent)."
+#. type: Content of: <table><tr><td>
+#: src/lessons/welcome/Main.html:11 src/lessons/welcome/Main.html:94
+#: src/lessons/welcome/Main.html:177 src/lessons/welcome/Main.html:257
+#: src/lessons/welcome/Main.html:351 src/lessons/welcome/Main.html:431
+#: src/lessons/welcome/Main.html:471
+msgid "Conditionals/ Expressions"
+msgstr "Instructions conditionnelles et expressions"
 
-#. type: Content of: <ul><li><p>
-#: src/lessons/meta/HanoiCreateWorld.html:35
-msgid ""
-"In the future, we would like to have richer exercise ordering schema, where "
-"the requirements to fulfill to be allowed to try an exercise could be more "
-"complex.  The dependencies would probably turn into a graph instead of a "
-"chain.  But this is still to be done."
-msgstr ""
-"A l'avenir, nous aimerions disposer d'un ordonnancement d'exercices plus "
-"riche, où les conditions à remplir pour pouvoir essayer un exercice pourrait "
-"être plus complexes. Les dépendances deviendraient probablement un graphe au "
-"lieu d'être une chaîne. Mais cela reste encore à réaliser."
+#. type: Content of: <h2>
+#: src/lessons/welcome/Main.html:12 src/lessons/welcome/Main.html:78
+#: src/lessons/welcome/Main.html:95 src/lessons/welcome/Main.html:178
+#: src/lessons/welcome/Main.html:258 src/lessons/welcome/Main.html:352
+#: src/lessons/welcome/Main.html:432 src/lessons/welcome/Main.html:472
+#: src/lessons/welcome/loop/whileloop/LoopWhile.html:1
+msgid "While loops"
+msgstr "Boucles tant que <tt>(while)</tt>"
 
-#. type: Content of: <ul><li><p>
-#: src/lessons/meta/HanoiCreateWorld.html:40
-msgid ""
-"The main element of each lesson is a class classically called Main, which "
-"simply contains a constructor adding each exercise of the lesson in row."
-msgstr ""
-"L'élément principal de chaque leçon est la classe communément appelée Main, "
-"qui contient simplement un constructeur ajoutant chaque exercice de la leçon "
-"l'un à la suite de l'autre."
+#. type: Content of: <table><tr><td>
+#: src/lessons/welcome/Main.html:13 src/lessons/welcome/Main.html:96
+#: src/lessons/welcome/Main.html:179 src/lessons/welcome/Main.html:259
+#: src/lessons/welcome/Main.html:353 src/lessons/welcome/Main.html:433
+#: src/lessons/welcome/Main.html:473
+msgid "Variables"
+msgstr "Variables"
 
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:43
-msgid ""
-"Each <b>exercise</b> object is in charge of instantiating the worlds used, "
-"set them up (adding walls and baggles in BuggleWorld, or changing the "
-"elevation and adding lamps in the LightBotWorld, etc), and populate them "
-"with entities correctly setup (location, color, etc)."
-msgstr ""
-"Chaque objet <b>exercise</b> a pour mission d'instancier les mondes "
-"utilisés, de les initialiser ( ajouter des murs et des baggles dans "
-"BuggleWorld, ou changer l'altitude et ajouter des lampes dans LightBotWorld, "
-"etc), et les peupler avec des correctement initialisées ( emplacement, "
-"couleur, etc) ."
+#. type: Content of: <h2>
+#: src/lessons/welcome/Main.html:14 src/lessons/welcome/Main.html:97
+#: src/lessons/welcome/Main.html:133 src/lessons/welcome/Main.html:180
+#: src/lessons/welcome/Main.html:260 src/lessons/welcome/Main.html:354
+#: src/lessons/welcome/Main.html:434 src/lessons/welcome/Main.html:474
+#: src/lessons/welcome/loop/forloop/LoopFor.html:1
+msgid "For loops"
+msgstr "Boucles pour <tt>(for)</tt>"
 
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:48
-msgid ""
-"Most of the exercises also provide a specific <b>answer entity</b> able to "
-"solve the exercise.  It serve both to compute the initial content of the "
-"code editor, and to compute the objective world. We will come back on this "
-"in a latter exercise of this meta-lesson."
-msgstr ""
-"La plupart des exercices fournissent aussi une <b>entité réponse <b>"
-"(\"answer entity\")</b> capable de résoudre l'exercice. Cela sert à la fois "
-"à afficher le contenu initial de l'éditeur de code, et à calculer le monde "
-"objectif. Nous reviendrons là-dessus plus tard dans un exercice de cette "
-"meta-leçon."
+#. type: Content of: <table><tr><td>
+#: src/lessons/welcome/Main.html:15 src/lessons/welcome/Main.html:98
+#: src/lessons/welcome/Main.html:181 src/lessons/welcome/Main.html:261
+#: src/lessons/welcome/Main.html:355 src/lessons/welcome/Main.html:435
+#: src/lessons/welcome/Main.html:475
+msgid "Do/While loops"
+msgstr "Boucles jusqu'à"
 
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:53
-msgid ""
-"The very first element you want to write in a new JLM universe is a partial "
-"world implementation including the internal state. In subsequent exercises, "
-"we will complete the World class to provide entities ways to interact and "
-"modify their world, and we will also implement the other elements of the "
-"universe."
-msgstr ""
-"Le premier élément que vous voulez écrire dans un nouvel univers de la JLM "
-"est une implémentation partielle du monde incluant l'état interne. Dans des "
-"exercices ultérieurs, nous complèterons la classe World pour fournir aux "
-"entités des moyens d'intéragir et de modifier leur monde, et nous "
-"implémenterons aussi les autres éléments de l'univers."
+#. type: Content of: <h2>
+#: src/lessons/welcome/Main.html:16 src/lessons/welcome/Main.html:99
+#: src/lessons/welcome/Main.html:161 src/lessons/welcome/Main.html:182
+#: src/lessons/welcome/Main.html:262 src/lessons/welcome/Main.html:356
+#: src/lessons/welcome/Main.html:436 src/lessons/welcome/Main.html:476
+#: src/lessons/welcome/methods/basics/Methods.html:1
+msgid "Methods"
+msgstr "Méthodes"
 
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:58
-msgid ""
-"Before you jump in writing your World implementation, you should understand "
-"the big JLM picture, and how worlds are used internally."
-msgstr ""
-"Avant que vous vous jetiez dans l'écriture de votre implémentation de World, "
-"vous devez comprendre le schéma de la JLM, et comment les mondes sont "
-"utilisés en interne."
+#. type: Content of: <table><tr><td>
+#: src/lessons/welcome/Main.html:17 src/lessons/welcome/Main.html:100
+#: src/lessons/welcome/Main.html:183 src/lessons/welcome/Main.html:263
+#: src/lessons/welcome/Main.html:357 src/lessons/welcome/Main.html:437
+#: src/lessons/welcome/Main.html:477
+msgid "Switch"
+msgstr "Switch"
 
 #. type: Content of: <h2>
-#: src/lessons/meta/HanoiCreateWorld.html:61
-msgid "JLM worlds big picture"
-msgstr "Schéma des mondes de la JLM"
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:64
-msgid ""
-"As you know, every JLM exercise can contain one or several worlds, each "
-"containing one or several entities. The code written by the student is "
-"executed in the entities, which must interact with their world to change it "
-"from its initial state to its goal state."
-msgstr ""
-"Comme vous le savez, chaque exercice de la JLM peut contenir un ou plusieurs "
-"mondes, chacun contenant une ou plusieures entitées. Le code écrit par les "
-"étudiants est éxécutés dans les entitées, qui doivent intéragir avec leur "
-"monde pour le faire passer de son état initial à l'état objectif."
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:69
-msgid ""
-"This multiplication of worlds and entities is used to test the student code "
-"in several conditions. It can thus be parallelized to test cases, aiming at "
-"full testing coverage of the student code."
-msgstr ""
-"La multiplication des mondes et des entitées est utilisé pour tester le code "
-"de l'étudiant dans différentes conditions. Cela peut être comparé à des cas "
-"de tests, cherchant à tester entièrement le code de l'étudiant."
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:73
-msgid ""
-"Technically, in a given exercise, for every world accessible from the "
-"relevant combobox, there is three World objects. They live in jlm.lesson."
-"Exercise:"
-msgstr ""
-"Techniquement, dans un exercice donné, pour chaque monde accessible depuis "
-"la liste déroulante, il y a trois objets World. Ils se trouvent dans jlm."
-"lesson.Exercise."
-
-#. type: Content of: <p><pre>
-#: src/lessons/meta/HanoiCreateWorld.html:76
-#, no-wrap
-msgid ""
-"protected World [] initialWorld; \n"
-"protected World [] currentWorld; \n"
-"protected World [] answerWorld;  \n"
-msgstr ""
-"protected World [] initialWorld; \n"
-"protected World [] currentWorld; \n"
-"protected World [] answerWorld;  \n"
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:83
-msgid ""
-"The line number of the combobox gives the index to use in these arrays.  "
-"Each <code>initialWorld</code> is created by the exercise constructor."
-msgstr ""
-"Le numéro de ligne de la liste déroulante donne l'index utilisé dans ces "
-"tableaux. Chaque <code>initialWorld</code> est crée par le constructeur de "
-"l'exercice."
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:87
-msgid ""
-"<code>currentWorld</code> is the one displayed in the \"World\" tab of the "
-"interface. At the beginning, it is a plain copy of the initialWorld, but it "
-"gets modified when the student uses the interactive controls or when the "
-"program gets run. The \"Reset\" button reset it to be a perfect copy of the "
-"initial world."
-msgstr ""
-"<code>currentWorld</code> est celui affiché dans l'onglet \"World\" de "
-"l'interface. Au début, il s'agit d'une simple copie de initialWorld, mais il "
-"est modifié quand l'étudiant utilise les contrôles interactifs ou quand le "
-"programme est lancé. Le bouton \"Reset\" le remet à zéro afin qu'il "
-"redevienne une copie parfaite du monde initial."
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:93
-msgid ""
-"<code>answerWorld</code> is the one displayed by the \"Objective\" world. "
-"Basically, it's a copy of the initial world, on which we let the specific "
-"answer entity of this exercise run.  This default behavior can be overloaded "
-"by exercises, but you'll probably never have to do so. We will come back on "
-"this in a subsequent exercise."
-msgstr ""
-"<code>answerWorld</code> est celui affiché par le monde \"Objective\". "
-"Concrètement, il s'agit d'une copie du monde initial, sur lequel on a lancé "
-"le programme de l'\"answer entity\" de l'exercice. Ce comportement par "
-"défaut peut être modifié par les exercices, mais vous n'aurez probablement "
-"jamais à le faire. Nous reviendrons là dessus dans un exercice ultérieur."
-
-#. type: Content of: <h3>
-#: src/lessons/meta/HanoiCreateWorld.html:98
-msgid "Implementing basic Worlds"
-msgstr "Implémenter des mondes basiques"
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:100
-msgid ""
-"The internal use of Worlds hidden, but the important point is that every "
-"World object has extend the jlm.universe.World class and define the "
-"following methods and constructors:"
-msgstr ""
-"L'utilisation interne des mondes est cachée, mais le point important est que "
-"chaque objet World hérite de la classe jlm.universe.World et définit les "
-"méthodes et constructeurs suivants :"
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:103
-msgid ""
-"<b>a copy constructor</b> which is used to copy initial worlds into "
-"currentWorld and answerWorld.  Its argument must be of the exact same type "
-"than the class itself, not Object (this is because we use Java introspection "
-"mechanism to search for such a constructor of the class).  For example, if "
-"you create a TotoWorld, your copy constructor must be declared as this:"
-msgstr ""
-"<b>un constructeur copie</b> qui est utilisé pour copier le monde initial en "
-"currentWorld et answerWorld. Son argument doit être du même type que la "
-"classe elle-même, et non pas de type Object ( c'est parce que nous utilisons "
-"le mécanisme d'introspection Java pour rechercher un tel constructeur dans "
-"la classe). Par exemple, si vous créer un TotWorl, votre constructeur votre "
-"constructeur copie doit être déclaré ainsi :"
-
-#. type: Content of: <p><ul><li><pre>
-#: src/lessons/meta/HanoiCreateWorld.html:108
-#, no-wrap
-msgid ""
-"public TotoWorld(TotoWorld other) {...} // Correct\n"
-"public TotoWorld(Object other) {...} // FALSE\n"
-"public TotoWorld(World other) {...} // also FALSE\n"
-msgstr ""
-"public TotoWorld(TotoWorld other) {...} // Correct\n"
-"public TotoWorld(Object other) {...} // Faux\n"
-"public TotoWorld(World other) {...} // Faux\n"
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:112
-msgid ""
-"The content of this constructor is usually a simple call to the <code>super"
-"(World w)</code> constructor, but this constructor cannot be omitted."
-msgstr ""
-"Le contenu de ce constructeur est généralement un simple appel au "
-"constructeur<code>super(World w)</code>, mais ce constructeur copie doit "
-"exister."
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:115
-msgid ""
-"One or several <b>regular constructors</b> initializing the state of the "
-"object. They will be used by the exercise constructor to instantiate your "
-"world. Since you usually write both the world and the lessons, you are "
-"completely free to specify the parameters you want to your constructor. It "
-"should use the <code>super(String name)</code> constructor to setup the very "
-"basic elements of your world."
-msgstr ""
-"Un ou plusieurs <b>constructeurs normaux</b> initialisant l'état de l'objet. "
-"Ils seront utilisés par le constructeur de l'exercice pour instancier votre "
-"monde. Puisque vous écrivez généralement le monde et les leçons, vous êtes "
-"complètement libre de spécifier les paramètres que vous voulez pour votre "
-"constructeur. Il doit néanmoins utilise le constructeur <code>super(String "
-"name)</code> pour initialiser les éléments basiques de votre monde."
-
-#. type: Content of: <p><ul><li><p>
-#: src/lessons/meta/HanoiCreateWorld.html:120
-msgid ""
-"Optionally, you may also want to use the <code>setDelay(int delay)</code> "
-"method to change the initial animation delay. For example, the SortingWorld "
-"set this to 1 to speed animations up. This is the delay in milliseconds "
-"between each animation step during a continuous run."
-msgstr ""
-"Vous pouvez, de manière facultative, utiliser la méthode <code>setdelay(int "
-"delay)</code> pour changer le délai initial de l'animation. Par exemple, "
-"dans SortingWorld, mettez le à 1 pour accélérer l'animation. C'est le délai "
-"en millisecondes entre chaque pas d'animation durant un programme continu."
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:124
-msgid ""
-"A <b>reset() method</b> taking one World as parameter, and in charge of "
-"copying the state of the parameter into the current world. This is naturally "
-"used when you press the \"Reset\" button, or at the beginning of each run."
-msgstr ""
-"Une méthode <b>reset()</b> prenant un World en paramètre, et ayant pour "
-"mission d'affecter l'état du paramètre dans le monde courant. C'est "
-"naturellement utilisé quand vous appuyez sur le bouton \"Reset\", ou au "
-"début de chaque lancement de programme."
-
-#. type: Content of: <p><ul><li><p>
-#: src/lessons/meta/HanoiCreateWorld.html:127
-msgid ""
-"The length of this method naturally depends on the complexity of your world "
-"state. In hanoi, there is only 3 slots containing a list of disc so that "
-"will be quite easy, but this can be quite complicated for complex worlds "
-"such as BuggleWorld."
-msgstr ""
-"La longueur de cette méthode dépend naturellemetn de la complexité de l'état "
-"de votre monde. Dans Hanoi, il y a seulement trois tours contenant une liste "
-"de disques, cela sera donc très facile, mais cela peut être bien plus "
-"compliqué avec des mondes complexes comme BuggleWorld."
-
-#. type: Content of: <h3>
-#: src/lessons/meta/HanoiCreateWorld.html:132
-msgid "Allowing the graphical rendering of Worlds"
-msgstr "Permettre le rendu graphique des mondes"
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:134
-msgid ""
-"Some specific steps naturally must be taken so that JLM can graphically "
-"display your world. Usually, you must write a specific class extending jlm."
-"universe.WorldView, and provide some protected methods so that the View can "
-"retrieve the state to display. In this particular exercise, the view is "
-"provided (you will write you own one in next exercise), so you only have to "
-"implement the right accessor."
-msgstr ""
-"Certaines étapes spécifiques doivent naturellement être prise afin que la "
-"JLM puisse afficher graphique votre monde. Usuellement, vous devez écrire "
-"une classe spécifique héritant de jlm.universe.WorldView, et fournissant des "
-"méthodes \"protected\", afin que la vue puisse récupérer l'état à afficher. "
-"Dans cet exercice particulier, la vue vous est fournie ( vous en écrirez une "
-"dans le prochain exercice ), donc vous n'avez qu'à implémenter le bon "
-"accesseur."
-
-#. type: Content of: <h2>
-#: src/lessons/meta/HanoiCreateWorld.html:139
-msgid "Implementing your HanoiWorld"
-msgstr "Implémenter votre HanoiWorld"
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:141
-msgid ""
-"The main task of this exercise is to modify the provided template to store "
-"the state of the world. Since the exercise provides a view and automatically "
-"instantiate your world, you cannot change the instantiation constructor, nor "
-"the rendering accessor (see the code template for there prototype). But you "
-"are completely free about how you actually store the state in your object."
-msgstr ""
-"La tâche principale de cet exercice est de modifié le code fourni pour "
-"sauvegarder l'état du monde. Puisque l'exercice fournit une  vue et "
-"instancie automatiquement le monde, vous ne pouvez pas changer le "
-"constructeur d'instanciation, ni l'accesseur de rendu graphique ( regardez "
-"le code fourni pour leurs prototypes ). Mais vous êtes complètement libre "
-"sur comment vous allez sauvegarder l'état dans votre object."
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:146
-msgid ""
-"During the implementation of the Hanoi world, I changed my internal "
-"representation several times, to adapt to the code needs. My first try was "
-"only simply three ArrayList<Integer>, for each slots, while the final "
-"design used an inner class called HanoiSlot, containing an integer array and "
-"providing friendly functions such as <code>push()</code>, <code>pop()</code> "
-"and <code>top()</code>. Even if it really becomes necessary when "
-"implementing the action methods allowing the entities to interact with their "
-"world, I advise you to design an inner class from the beginning."
-msgstr ""
-"Pendant l'implémentation du monde des Tours de Hanoï, j'ai changé ma "
-"représentation interne à plusieures reprises, afin de l'adapter aux besoins "
-"du code. Mon premier essai était simplement trois ArrayList<Integer>, une "
-"pour chaque tour, tandis que la version finale fournit une classe interne, "
-"nommé HanoiSlot, contenant un tableau d'entier et fournissant des fonctions "
-"sympathiques telles que <code>push()</code>, <code>pop()</code> and <code>top"
-"()</code>. Même si cela ne devient réellement nécessaire que quand vous "
-"implémenter les méthodes d'actions permettant aux entitées d'intéragir avec "
-"leur monde, je vous conseille de concevoir une classe interne dès le départ."
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:153
-msgid ""
-"You probably want to add 3 fields to your World, one for each slot (we will "
-"never try to have worlds with more than 3 slots), store the content of each "
-"slot in the instantiation constructor, and retrieve the content of a "
-"specific slot in the rendering accessor (<code>Integer[] values(Integer i)</"
-"code>)."
-msgstr ""
-"Vous voudrez probablement ajouter trois champs à votre monde, un pour chaque "
-"tour (on n'essayera jamais d'avoir des mondes avec plus de trois tours), "
-"sauvegarder le contenu de chaque tour dans le construction d'instanciation, "
-"et récupérer le contenu d'une tour donnée dans l'accesseur de rendu "
-"graphique (<code>Integer[] values(Integer i)</code>)."
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:157
-msgid ""
-"That seems quite a lot of code to write compared to the other JLM exercises, "
-"but at the end, my HanoiWorld implementation is less than 100 lines long, "
-"which is not that much."
-msgstr ""
-"Cela semble être beaucoup de code à écrire comparé aux autres exercices de "
-"la JLM, mais en fin de compte, mon implémentation de HanoiWorld fait moints "
-"de cent lignes, ce qui n'est pas beaucoup."
-
-#. type: Content of: <h1>
-#: src/lessons/meta/Main.html:1
-msgid "Meta lesson"
-msgstr "Meta leçon"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/meta/Main.html:2
-msgid ""
-"The purpose of this lesson is to teach you how to write lessons for JLM."
-msgstr ""
-"Le but de cette leçon est de vous apprendre comment écrire des leçons pour "
-"la JLM."
-
-#. type: Content of: <h1>
-#: src/lessons/welcome/Main.html:1
-msgid "First steps"
-msgstr "Premiers pas"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/Main.html:3
-msgid ""
-"This first lesson will lead your first steps in programming. It is "
-"intended for beginners. List of seen notions per exercise:"
-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
-#: src/lessons/welcome/Main.html:349 src/lessons/welcome/Main.html:429
-#: src/lessons/welcome/Main.html:469 src/lessons/welcome/basics/Basics.html:1
-msgid "Instructions"
-msgstr "Instructions"
-
-#. type: Content of: <table><tr><td>
-#: src/lessons/welcome/Main.html:10 src/lessons/welcome/Main.html:93
-#: src/lessons/welcome/Main.html:176 src/lessons/welcome/Main.html:256
-#: src/lessons/welcome/Main.html:350 src/lessons/welcome/Main.html:430
-#: src/lessons/welcome/Main.html:470
-msgid "Comments"
-msgstr "Commentaires"
-
-#. type: Content of: <table><tr><td>
-#: src/lessons/welcome/Main.html:11 src/lessons/welcome/Main.html:94
-#: src/lessons/welcome/Main.html:177 src/lessons/welcome/Main.html:257
-#: src/lessons/welcome/Main.html:351 src/lessons/welcome/Main.html:431
-#: src/lessons/welcome/Main.html:471
-msgid "Conditionals/ Expressions"
-msgstr "Instructions conditionnelles et expressions"
-
-#. type: Content of: <h2>
-#: src/lessons/welcome/Main.html:12 src/lessons/welcome/Main.html:78
-#: src/lessons/welcome/Main.html:95 src/lessons/welcome/Main.html:178
-#: src/lessons/welcome/Main.html:258 src/lessons/welcome/Main.html:352
-#: src/lessons/welcome/Main.html:432 src/lessons/welcome/Main.html:472
-#: src/lessons/welcome/loop/whileloop/LoopWhile.html:1
-msgid "While loops"
-msgstr "Boucles tant que <tt>(while)</tt>"
-
-#. type: Content of: <table><tr><td>
-#: src/lessons/welcome/Main.html:13 src/lessons/welcome/Main.html:96
-#: src/lessons/welcome/Main.html:179 src/lessons/welcome/Main.html:259
-#: src/lessons/welcome/Main.html:353 src/lessons/welcome/Main.html:433
-#: src/lessons/welcome/Main.html:473
-msgid "Variables"
-msgstr "Variables"
-
-#. type: Content of: <h2>
-#: src/lessons/welcome/Main.html:14 src/lessons/welcome/Main.html:97
-#: src/lessons/welcome/Main.html:133 src/lessons/welcome/Main.html:180
-#: src/lessons/welcome/Main.html:260 src/lessons/welcome/Main.html:354
-#: src/lessons/welcome/Main.html:434 src/lessons/welcome/Main.html:474
-#: src/lessons/welcome/loop/forloop/LoopFor.html:1
-msgid "For loops"
-msgstr "Boucles pour <tt>(for)</tt>"
-
-#. type: Content of: <table><tr><td>
-#: src/lessons/welcome/Main.html:15 src/lessons/welcome/Main.html:98
-#: src/lessons/welcome/Main.html:181 src/lessons/welcome/Main.html:261
-#: src/lessons/welcome/Main.html:355 src/lessons/welcome/Main.html:435
-#: src/lessons/welcome/Main.html:475
-msgid "Do/While loops"
-msgstr "Boucles jusqu'à"
-
-#. type: Content of: <h2>
-#: src/lessons/welcome/Main.html:16 src/lessons/welcome/Main.html:99
-#: src/lessons/welcome/Main.html:161 src/lessons/welcome/Main.html:182
-#: src/lessons/welcome/Main.html:262 src/lessons/welcome/Main.html:356
-#: src/lessons/welcome/Main.html:436 src/lessons/welcome/Main.html:476
-#: src/lessons/welcome/methods/basics/Methods.html:1
-msgid "Methods"
-msgstr "Méthodes"
-
-#. type: Content of: <table><tr><td>
-#: src/lessons/welcome/Main.html:17 src/lessons/welcome/Main.html:100
-#: src/lessons/welcome/Main.html:183 src/lessons/welcome/Main.html:263
-#: src/lessons/welcome/Main.html:357 src/lessons/welcome/Main.html:437
-#: src/lessons/welcome/Main.html:477
-msgid "Switch"
-msgstr "Switch"
-
-#. type: Content of: <table><tr><td>
 #: src/lessons/welcome/Main.html:18 src/lessons/welcome/Main.html:101
 #: src/lessons/welcome/Main.html:184 src/lessons/welcome/Main.html:264
 #: src/lessons/welcome/Main.html:358 src/lessons/welcome/Main.html:438
 #: src/lessons/welcome/Main.html:478
+#: src/lessons/welcome/array/basics/Array.html:18
 msgid "Arrays"
 msgstr "Tableaux"
 
@@ -2151,13 +1990,13 @@ msgstr "Buggle Dance Revolution 2"
 
 #. type: Content of: <h2>
 #: src/lessons/welcome/Main.html:322
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:1
+#: src/lessons/welcome/slug/SlugHunting.html:1
 msgid "Slug Hunting"
 msgstr "Chasse à la limace"
 
 #. type: Content of: <h2>
 #: src/lessons/welcome/Main.html:335
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:1
+#: src/lessons/welcome/slug/SlugTracking.html:1
 msgid "Slug Tracking"
 msgstr "Pistage de la limace"
 
@@ -2166,15 +2005,13 @@ msgstr "Pistage de la limace"
 msgid "Snake World"
 msgstr "Monde de serpents"
 
-#. type: Content of: <h1>
+#. type: Content of: <table><tr><td>
 #: src/lessons/welcome/Main.html:375
-#: src/lessons/welcome/array/basics/Array.html:1
 msgid "Knitting and Arrays"
 msgstr "Tricots et tableaux"
 
-#. type: Content of: <h1>
+#. type: Content of: <table><tr><td>
 #: src/lessons/welcome/Main.html:389
-#: src/lessons/welcome/array/basics2/Array2.html:1
 msgid "Knitting, Arrays and modulos"
 msgstr "Tricots, tableaux et modulos"
 
@@ -2227,6 +2064,24 @@ msgstr "Le concept est supposé maîtrisé"
 msgid "Concept not mandated by the exercise"
 msgstr "Le concept n'est pas indispensable à l'exercice"
 
+#. type: Content of: <p>
+#: src/lessons/welcome/short_desc.html:2
+msgid ""
+"This first lesson will lead your first steps in programming. It is intended "
+"for beginners."
+msgstr ""
+"Cette première leçon va vous guider dans vos premiers pas en programmation. "
+"Elle est destinée aux débutants. "
+
+#. type: Content of: <p>
+#: src/lessons/welcome/short_desc.html:5
+msgid ""
+"If you are not sure, go for this lesson that will teach you the bases of "
+"programming."
+msgstr ""
+"Dans le doute, faites cette leçon, qui vous enseignera les bases de la "
+"programmation."
+
 #. type: Content of: outside any tag (error?)
 #: src/lessons/welcome/environment/Environment.html:3
 msgid ""
@@ -2237,14 +2092,12 @@ msgid ""
 "environment is configured to be programmed in the Java programming language, "
 "but you can change it from the Language menu if you want."
 msgstr ""
-"Vous venez de lancer la Java Learning Machine.  Il s'agit d'une plate-forme\n"
+"Vous venez de lancer la Java Learning Machine.  Il s'agit d'une plate-forme "
 "pédagogique destinée à simplifier l'apprentissage de la programmation.  Il "
-"est\n"
-"constitué d'un ensemble d'exercices groupés par leçons, pour vous permettre "
-"de\n"
-"progresser à votre rythme. Par défaut, l'outil est configuré pour vous\n"
-"permettre de programmer en Java, mais vous pouvez changer de langage de\n"
-"programmation grâce au menu Language si vous le désirez."
+"est constitué d'un ensemble d'exercices groupés par leçons, pour vous "
+"permettre de progresser à votre rythme. Par défaut, l'outil est configuré "
+"pour vous permettre de programmer en Java, mais vous pouvez changer de "
+"langage de programmation grâce au menu Langage si vous le désirez."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/environment/Environment.html:9
@@ -2254,7 +2107,7 @@ msgstr ""
 "Dans cette première leçon, les buggles guideront vos premiers pas en "
 "programmation."
 
-#. type: Content of: <p><h3>
+#. type: Content of: <h3>
 #: src/lessons/welcome/environment/Environment.html:11
 msgid "The <i>buggles</i>? What is this??"
 msgstr "Les <i>buggles</i> ? Qu'est ce que c'est ??"
@@ -2269,30 +2122,25 @@ msgid ""
 "that by checking the difference between the <i>World</i> view and the "
 "<i>Objective</i> one.  Depending on the lessons (and your settings in the "
 "Language menu), your code must be written in either Java, JavaScript, Python "
-"or Ruby."
+"or Ruby (depending on the exercise)."
 msgstr ""
-"Les buggles sont de petites bêtes qui obéissent aux ordres que vous leur\n"
+"Les buggles sont de petites bêtes qui obéissent aux ordres que vous leur "
 "donnez. Dans chaque exercice, vous devez donner des ordres à vos buggles "
-"pour\n"
-"faire en sorte que le monde ressemble à l'objectif de l'exercice. Par "
-"exemple\n"
-"dans cet exercice, vous devez instruire votre buggle pour qu'elle avance "
-"d'un\n"
-"pas. Observez la différence entre l'état initial et l'objectif en utilisant "
-"les\n"
-"panneaux à droite. Selon la leçon (et vos réglages dans le menu Language), "
-"vous\n"
-"devez écrire vos programme dans l'un des langages de programmation "
-"suivant :\n"
-"Java, JavaScript, Python ou Ruby."
+"pour faire en sorte que le monde ressemble à l'objectif de l'exercice. Par "
+"exemple dans cet exercice, vous devez instruire votre buggle pour qu'elle "
+"avance d'un pas. Observez la différence entre l'état initial et l'objectif "
+"en utilisant les panneaux à droite. Selon la leçon (et vos réglages dans le "
+"menu Language), vous devez écrire vos programme dans l'un des langages de "
+"programmation suivant : Java, JavaScript, Python ou Ruby (en fonction de "
+"l'exercice)."
 
-#. type: Content of: <p><h3>
-#: src/lessons/welcome/environment/Environment.html:21
+#. type: Content of: <h3>
+#: src/lessons/welcome/environment/Environment.html:22
 msgid "Working environment"
 msgstr "L'environnement de travail"
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/environment/Environment.html:23
+#. type: Content of: <p>
+#: src/lessons/welcome/environment/Environment.html:24
 msgid ""
 "Before going any further, get familiar with the working environment. Have a "
 "look at the several elements composing the main window, move your mouse over "
@@ -2312,8 +2160,8 @@ msgstr ""
 "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><p>
-#: src/lessons/welcome/environment/Environment.html:32
+#. type: Content of: <p>
+#: src/lessons/welcome/environment/Environment.html:33
 msgid ""
 "If your code contains errors (and code always do at some point), the "
 "computer will display error messages in the console. You obviously have to "
@@ -2332,13 +2180,13 @@ msgstr ""
 "pour corriger les problèmes est inscrite dans ces messages cryptiques. Vous "
 "verrez, avec un peu d'entraînement, vous vous y habituerez."
 
-#. type: Content of: <p><p><h3>
-#: src/lessons/welcome/environment/Environment.html:40
+#. type: Content of: <p><h3>
+#: src/lessons/welcome/environment/Environment.html:41
 msgid "What am I supposed to do?"
 msgstr "Que dois-je faire ?"
 
-#. type: Content of: <p><p><p>
-#: src/lessons/welcome/environment/Environment.html:42
+#. type: Content of: <p><p>
+#: src/lessons/welcome/environment/Environment.html:43
 msgid ""
 "It's time to write your first program. Simply ask your buggle to move one "
 "step forward using the Source Code pane. For that, simply write the "
@@ -2351,21 +2199,21 @@ msgstr ""
 "pas. Il faut écrire le code après avoir expérimenté interactivement."
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/environment/Environment.html:46
+#: src/lessons/welcome/environment/Environment.html:47
 #: src/lessons/welcome/basics/Basics.html:50
 #, no-wrap
 msgid "forward();"
 msgstr "forward();"
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/environment/Environment.html:47
+#: src/lessons/welcome/environment/Environment.html:48
 #: src/lessons/welcome/basics/Basics.html:50
 #, no-wrap
 msgid "forward()"
 msgstr "forward()"
 
-#. type: Content of: <p><p><p><p>
-#: src/lessons/welcome/environment/Environment.html:48
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/environment/Environment.html:49
 msgid ""
 "Do not forget the final <code>;</code> which tells the compiler that the "
 "instruction is over (yes, computers are so dumb that they cannot <i>guess</"
@@ -2375,8 +2223,8 @@ msgstr ""
 "l'instruction est terminée (oui, les ordinateurs sont si stupides qu'il faut "
 "leur préciser des choses aussi simples)."
 
-#. type: Content of: <p><p><p><p>
-#: src/lessons/welcome/environment/Environment.html:52
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/environment/Environment.html:53
 msgid ""
 "Once done, clic on run, and proceed to next exercise using the File menu "
 "entry"
@@ -2385,8 +2233,8 @@ msgstr ""
 "le\n"
 "menu File."
 
-#. type: Content of: <p><p><p>
-#: src/lessons/welcome/environment/Environment.html:54
+#. type: Content of: <p><p>
+#: src/lessons/welcome/environment/Environment.html:55
 msgid "(or keep around to experiment further if you feel so)."
 msgstr "(ou restez ici pour expérimenter un peu si vous le voulez)."
 
@@ -2614,19 +2462,18 @@ msgstr ""
 #: src/lessons/welcome/variables/Variables.html:72
 #: src/lessons/welcome/loop/forloop/LoopFor.html:73
 #: src/lessons/welcome/loop/whileloop/LoopWhile.html:26
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:17
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:26
 #: src/lessons/welcome/methods/basics/Methods.html:59
 #: src/lessons/welcome/methods/doghouse/MethodsDogHouse.html:49
 #: src/lessons/welcome/methods/returning/MethodsReturning.html:56
 #: src/lessons/welcome/methods/args/MethodsArgs.html:69
-#: src/lessons/welcome/bdr/basics/BDR.html:159
-#: src/lessons/welcome/bdr/extended/BDR2.html:111
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:37
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:20
-#: src/lessons/maze/randommouse/RandomMouseMaze.html:23
+#: src/lessons/welcome/bdr/BDR.html:159 src/lessons/welcome/bdr/BDR2.html:111
+#: src/lessons/welcome/slug/SlugHunting.html:18
+#: src/lessons/welcome/slug/SlugTracking.html:21
+#: src/lessons/maze/randommouse/RandomMouseMaze.html:24
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:17
-#: src/lessons/maze/pledge/PledgeMaze.html:35
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:36
+#: src/lessons/maze/pledge/PledgeMaze.html:36
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:22
 #: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:21
 msgid "Exercise goal"
 msgstr "Objectif de cet exercice"
@@ -2880,10 +2727,10 @@ msgstr ""
 "Python utilise l'indentation pour définir les blocs de code. L'indentation "
 "standard en Python est de quatre espaces. Veuillez noter que les blocs de "
 "code n'ont pas besoin de terminaison. Indenter commence un bloc et "
-"désindenter le termine. Dans le code suivant, les instructions <b>whatToDo()"
-"</b> et <b>whatToDoNext()</b> seront executées si la condition est vraie, "
-"ensuite l'instruction <b>whatToDoAnyway()</b> sera exécutée dans tous les "
-"cas."
+"désindenter le termine. Dans le code suivant, les instructions "
+"<b>whatToDo()</b> et <b>whatToDoNext()</b> seront executées si la condition "
+"est vraie, ensuite l'instruction <b>whatToDoAnyway()</b> sera exécutée dans "
+"tous les cas."
 
 #. type: Content of: <p><pre>
 #: src/lessons/welcome/conditions/Conditions.html:33
@@ -3211,16 +3058,16 @@ msgstr "Quand votre programme fonctionne, passez à l'exercice suivant."
 msgid ""
 "The buggle world can sometimes contain some <i>baggles</i>, which are little "
 "biscuits that buggles can carry from one point to another. For that, they "
-"have to use specific methods such as <code>isOverBaggle(), isCarryingBaggle"
-"(), pickUpBaggle()</code> or <code>dropBaggle()</code>. Check their "
-"documentation in \"Help/About this world\" for more details."
+"have to use specific methods such as <code>isOverBaggle(), "
+"isCarryingBaggle(), pickupBaggle()</code> or <code>dropBaggle()</code>. "
+"Check their documentation in \"Help/About this world\" for more details."
 msgstr ""
 "Le monde des buggles contient parfois des <i>baggles</i>, sorte de petits "
 "biscuits que les buggles peuvent déplacer d'un endroit à un autre. Pour "
-"cela, elles peuvent utiliser des fonctions spécifiques : <code>isOverBaggle"
-"(), isCarryingBaggle(), pickUpBaggle()</code> et <code>dropBaggle()</code>. "
-"Tous les détails se trouvent dans la documentation accessible depuis \"Help/"
-"About this world\"."
+"cela, elles peuvent utiliser des fonctions spécifiques : "
+"<code>isOverBaggle(), isCarryingBaggle(), pickupBaggle()</code> et "
+"<code>dropBaggle()</code>. Tous les détails se trouvent dans la "
+"documentation accessible depuis «Aide/À propos de ce monde»."
 
 #. type: Content of: <p><p>
 #: src/lessons/welcome/baggleseeker/BaggleSeeker.html:10
@@ -3593,6 +3440,57 @@ msgstr ""
 msgid "It's your turn now!"
 msgstr "À vous de jouer !"
 
+#. type: Content of: <h2>
+#: src/lessons/welcome/variables/RunFour.html:1
+msgid "Run Four bases"
+msgstr "La course des quatre bases"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/variables/RunFour.html:3
+msgid ""
+"Today is a great day for the buggles: the Big Buggles' Race begun. It's a "
+"traditional competition in which young buggles prove their value to the "
+"tribe. Both force and intelligence is exercised: you have to rush forward, "
+"but stop as soon as you reach your fourth baggle.  Please help the buggles "
+"to move forward while counting the baggles and to determine when to stop."
+msgstr ""
+"Aujourd'hui est un grand jour : la Grande Course des Buggles a commencé. "
+"C'est une compétition traditionnelle par laquelle les jeunes buggles "
+"prouvent leur valeur à la tribu. C'est à la fois une épreuve de force et "
+"d'intelligence puisqu'il faut courir le plus vite possible, mais s'arrêter "
+"dès que vous avez rejoint votre quatrième baggle. Il faut que vous aidiez "
+"les buggles à avancer tout en comptant les baggles pour déterminer quand "
+"s'arrêter."
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/variables/RunHalf.html:1
+msgid "The Four Halves run"
+msgstr "La course des quatre moitiés"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/variables/RunHalf.html:3
+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>."
+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 "
+"baggles que de cases oranges plus une. En d'autres termes, la condition "
+"d'arrêt est la suivante : <code>2 * baggles = caseOrange + 1</code>."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/variables/RunHalf.html:8
+msgid ""
+"You can determine whether you are over a orange cell with the "
+"<code>isOverOrange()</code> method."
+msgstr ""
+"Vous pouvez déterminer si vous vous trouvez sur une case orange avec la "
+"méthode <code>isOverOrange()</code>."
+
 #. type: Content of: <p>
 #: src/lessons/welcome/loop/forloop/LoopFor.html:3
 msgid ""
@@ -3804,21 +3702,126 @@ msgstr ""
 msgid "Once done, proceed to next exercise."
 msgstr "Une fois ceci fait, passez à l'exercice suivant."
 
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/forloop/LoopStairs.html:1
+msgid "Stairway to Heaven"
+msgstr "la voie du paradis"
+
 #. type: Content of: <p>
-#: src/lessons/welcome/loop/whileloop/LoopWhile.html:3
+#: src/lessons/welcome/loop/forloop/LoopStairs.html:3
 msgid ""
-"In addition to conditionals, another handy construction is the ability to "
-"repeat an action while a specific condition does not appear. A while loop is "
-"used for that, with the following syntax:"
+"Your buggle feels a bit depressed today, but it's currently facing a magic "
+"stair: It leads directly to heaven, and each time you walk on it, joyful "
+"colors spur all around."
 msgstr ""
-"En plus des instructions conditionnelles, une autre construction pratique "
-"est de pouvoir demander à la buggle de répéter une action tant qu'une "
-"condition particulière n'est pas arrivée. On utilise pour cela une boucle "
-"<tt>while</tt>, dont la syntaxe est la suivante :"
+"Votre buggle est un peu déprimée aujourd'hui, mais elle est face à un "
+"escalier magique : il mène directement au paradis, et des couleurs "
+"joyeuses jaillissent de partout quand on l'emprunte."
 
-#. type: Content of: <p><pre>
-#: src/lessons/welcome/loop/whileloop/LoopWhile.html:6
-#, no-wrap
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopStairs.html:6
+msgid ""
+"Your goal is to take this stair, one step after the other.  First devise the "
+"four instructions you have to give you buggle to take one stair step, and "
+"then put them in a loop to take the whole stair."
+msgstr ""
+"Votre objectif est de prendre cet escalier, une marche après l'autre. "
+"Commencez par trouver les quatre instructions à réaliser pour gravir une "
+"marche, puis placez-les dans une boucle pour gravir toutes les marches."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopStairs.html:10
+msgid ""
+"And before that, walk a bit forward to reach that stair, and ensure that you "
+"are in the right situation for your loop content to run properly. And once "
+"you reach the heaven, take some steps in your new home."
+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. Et une fois que vous avez atteint le paradis, "
+"faites quelques pas dans votre nouvelle demeure."
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/forloop/LoopCourse.html:1
+msgid "Training Buggle"
+msgstr "Entraînement de buggle"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopCourse.html:3
+msgid ""
+"Today, your buggle wants to get some serious exercise: It wants to run 'till "
+"the track burns! Its super-shoes are just perfect to run like hell, but "
+"unfortunately, they can actually damage the track on the long run..."
+msgstr ""
+"Aujourd'hui, votre buggle veut s'entraîner sérieusement. Elle veut courir "
+"jusqu'à brûler la piste! Ses super-chaussures, sont parfaites pour courir "
+"comme une dingue, mais malheureusement, elles abîment un peu la piste à la "
+"longue..."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopCourse.html:6
+msgid ""
+"Your goal is to run the track 10 times, no matter what happens.  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."
+msgstr ""
+"Votre objectif est de faire 10 tours de piste, quel que soit le 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."
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/forloop/LoopCourseForest.html:1
+msgid "Outdoor Training Buggle"
+msgstr "Course en forêt"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopCourseForest.html:3
+msgid ""
+"Well, our last training didn't went that well. The track actually burned, "
+"and we are now banned from there.  This time, our buggle decided to practice "
+"outdoor, in the middle of the forest, with its good old shoes instead.  The "
+"problem is that you have to be careful to not fall into water. The track on "
+"which you can run is rather narrow: One side is now 4 steps forward, 2 steps "
+"to the left, 4 steps to the right, 2 steps to the right, 4 steps to the "
+"left, and you want to run 7 around."
+msgstr ""
+"Bon, notre dernier entraînement ne s'est pas très bien passé. La piste a "
+"effectivement brûlé, et vous voilà banni des pistes d'athlétisme de la "
+"région. Cette fois, notre buggle a décidé de s'entraîner en forêt, et avec "
+"des chaussures normales pour être plus sûr. Le problème est qu'il faut faire "
+"attention à ne pas tomber dans l'eau. La piste sur laquelle on peut courir "
+"est plutôt étroite : pour un coté, il faut faire quatre pas en avant, "
+"deux pas à gauche, quatre pas à droite, deux pas à droite, et quatre pas à "
+"gauche. Il faut faire 7 tours de circuit."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopCourseForest.html:9
+msgid ""
+"Oh crap, running on the grass seems to destroy it too! So just take your 7 "
+"loops around the garden, and move along to the next exercise before anyone "
+"notices the damage you made..."
+msgstr ""
+"Raaah, mince. Courir sur l'herbe semble l'endommager également ! Bon, tant "
+"pis. Faites vos 7 tours, et passez vite à l'exercice suivant avant que "
+"quelqu'un ne constate les dégâts que vous avez fait..."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/whileloop/LoopWhile.html:3
+msgid ""
+"In addition to conditionals, another handy construction is the ability to "
+"repeat an action while a specific condition does not appear. A while loop is "
+"used for that, with the following syntax:"
+msgstr ""
+"En plus des instructions conditionnelles, une autre construction pratique "
+"est de pouvoir demander à la buggle de répéter une action tant qu'une "
+"condition particulière n'est pas arrivée. On utilise pour cela une boucle "
+"<tt>while</tt>, dont la syntaxe est la suivante :"
+
+#. type: Content of: <p><pre>
+#: src/lessons/welcome/loop/whileloop/LoopWhile.html:6
+#, no-wrap
 msgid ""
 "while (<b>condition</b>) {\n"
 "  <b>action()</b>;\n"
@@ -3906,6 +3909,52 @@ msgstr ""
 "tant que l'on est pas face à un mur, faire :\n"
 "  avancer();"
 
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/whileloop/WhileMoria.html:1
+msgid "Lost in the Moria"
+msgstr "Perdu dans la Moria"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/whileloop/WhileMoria.html:3
+msgid ""
+"You buggle got stuck in a mine! Some rocks are blocking the exit, and you "
+"will have to clear your way to the exit. Well of course these are only "
+"baggles and you could simply walk away, but it will be easier to program "
+"your buggle so that it moves those \"rocks\" than convincing your buggle "
+"that it could easily walk away without solving the problem..."
+msgstr ""
+"Votre buggle est coincé dans une mine ! Des rochers bloquent la sortie, et "
+"il va falloir dégager le chemin pour passer. Bon, ok, ce ne sont pas "
+"vraiment des rochers mais juste des baggles, et votre buggle pourrait "
+"facilement passer au dessus sans se fatiguer. Mais il est probablement plus "
+"simple de programmer votre buggle pour qu'elle déplace ces «rochers» plutôt "
+"que de tenter de la convaincre de passer à la suite sans avoir résolu le "
+"problème..."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/whileloop/WhileMoria.html:9
+msgid ""
+"So, you have to find the first baggle blocking the exit (simply walk to the "
+"east until you are over a baggle), take it and move it back to the other "
+"side of the tunnel (walk to the west while you are not over a baggle, and "
+"then move back one step to the east and drop your baggle), and iterate until "
+"you find the exit (that is, the wall to the east side). Afterward, move out "
+"as in the objective world."
+msgstr ""
+"Donc, il vous faut trouver le premier baggle en travers de votre chemin "
+"(marchez vers l'est jusqu'à vous trouver au dessus d'un baggle), le "
+"ramasser, et retourner à l'autre extrémité du couloir pour le déposer "
+"(marchez vers l'ouest jusqu'à vous trouver au dessus d'un baggle puis "
+"reculez d'un pas). Il faut ensuite faire de même pour tous les baggles "
+"jusqu'à trouver la sortie. Une fois ceci fait, marchez vers l'air frais "
+"comme dans le monde objectif."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/whileloop/WhileMoria.html:16
+msgid "Once you manage to escape this trap, move forward to the next exercise."
+msgstr ""
+"Quand vous serez parvenu à sortir de ce piège, passez à l'exercice suivant."
+
 #. type: Content of: <p>
 #: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:3
 msgid ""
@@ -3924,6 +3973,34 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:7
 msgid ""
+"A bad solution would be to duplicate the loop content before the loop, but "
+"code duplication is a <b>very</b> bad habit, and you should always avoid it. "
+"A better solution is to have a dedicated variable indicating whether we are "
+"taking the loop for the first time, as follows:"
+msgstr ""
+"Une mauvaise solution serait de dupliquer le contenu de la boucle avant la "
+"boucle à proprement parlé, mais c'est une <b>très mauvaise</b> habitude de "
+"dupliquer du code, et il faut toujours éviter. Une meilleure solution est "
+"d'avoir une variable dédiée qui indique si c'est la première fois que l'on "
+"rentre dans la boucle :"
+
+#. type: Content of: <pre>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:10
+#, no-wrap
+msgid ""
+"firstTime = True\n"
+"while firstTime or (other conditions):\n"
+"  firstTime = False\n"
+"  (loop body)\n"
+msgstr ""
+"premiereFois = True\n"
+"while premiereFois or (les autres conditions):\n"
+"  premiereFois = False\n"
+"  (le corps de la boucle)"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:16
+msgid ""
 "In a <tt>while</tt> loop, the condition is evaluated before anything else, "
 "and if it's false, the loop body is never evaluated. Sometimes (although not "
 "that often), you would prefer the loop body to get evaluated at least once, "
@@ -3937,7 +4014,7 @@ msgstr ""
 "variante de la boucle <tt>while</tt>, dont la syntaxe Java est la suivante :"
 
 #. type: Content of: <p><pre>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:13
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:22
 #, no-wrap
 msgid ""
 "do {\n"
@@ -3948,36 +4025,46 @@ msgstr ""
 "  <b>action()</b>;\n"
 "} while (<b>condition</b>);"
 
-#. type: Content of: <a>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:17
-msgid ""
-"<a name=\"Objectives\"> Some cells of the world are yellow, but your buggle "
-"cannot stand being in such cells as it is right now. Write the code needed "
-"to move forward until the ground gets white. You can use for that the "
-"isGroundWhite() method, that only the buggle of this exercise knows. The "
-"trick is that even if the ground is white on the first cell, you still want "
-"to move forward to the next cell."
-msgstr ""
-"<a name=\"Objectifs\"> Certaines cases du monde sont jaunes, mais votre "
-"buggle ne supporte pas de s'y trouver comme c'est son cas actuellement. "
-"Écrivez le code lui permettant d'avancer jusqu'à se trouver sur une case "
-"blanche. Vous utiliserez pour cela la méthode isGroundWhite(), que seule la "
-"buggle de cet exercice connaît. Le truc est que même si le sol de la "
-"première case est blanc, il faut quand même faire avancer la buggle d'un pas."
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:27
+msgid ""
+"Some cells of the world are yellow, but your buggle cannot stand being in "
+"such cells. Write the necessary code to move forward until the ground gets "
+"white. For that, use the provided method <code>isGroundWhite()</code>."
+msgstr ""
+"Certaines cases du monde sont jaunes, mais les buggles ne supportent pas de "
+"s'y trouver. Écrivez le code nécessaire pour avancer jusqu'à ce que le sol "
+"devienne blanc. Vous pourrez utiliser la méthode <code>isGroundWhite()</"
+"code> qui retourne vrai si le sol est blanc.."
 
-#. type: Content of: <a><p>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:23
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:31
+msgid ""
+"The trick is that most buggles of this world are currently on this yellow "
+"ground that they dislike so much. That is why they are in panic, and every "
+"buggle rushes one cell forward, even the buggle that was not on a yellow "
+"cell at first. In other worlds, even if the ground is white on the first "
+"cell, you still want to move forward to the next cell."
+msgstr ""
+"Le truc est que la plupart des buggles de ce monde se trouvent actuellement "
+"sur ce sol jaune qui les énerve tant. Cela explique sans doute leur état de "
+"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."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:36
 msgid "The general idea is to do something like:"
 msgstr "L'idée général est donc de faire:"
 
-#. type: Content of: <a><p><pre>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:24
+#. type: Content of: <p><pre>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:37
 #, no-wrap
 msgid "move forward until located in a white cell"
 msgstr "avancer jusqu'à se trouver sur une case blanche"
 
-#. type: Content of: <a><p><p>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:26
+#. type: Content of: <p><p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:39
 msgid ""
 "<i>Remark:</i> it is also possible to solve this exercise with a classical "
 "<tt>while</tt> loop, but it's not the goal."
@@ -3985,6 +4072,149 @@ msgstr ""
 "<i>Remarque :</i> il est également possible de résoudre cet exercice avec "
 "une boucle <tt>while</tt> classique, mais ce n'est pas l'objectif."
 
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:1
+msgid "Tracks of buggles"
+msgstr "La buggle Petite Poucette"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:3
+msgid ""
+"Your buggle got lost in a strange maze, and you must help it finding the "
+"exit that is represented in orange.  You cannot simply explain the path to "
+"the exit in something like <code>turnRight();forward;forward();forward()</"
+"code> because you have to save two buggles at the same time, that are lost "
+"in similar but not identical worlds.  You can switch to the other world by "
+"using the combobox above the world representation (where it's written 'Deep "
+"Forest' right now), and selecting the other entry (that should read 'Deeper "
+"Forest')."
+msgstr ""
+"Votre buggle est perdue dans un étrange labyrinthe, et elle a besoin de vous "
+"pour trouver la sortie (représentée par les cases orange). Vous ne pouvez "
+"pas lui donner son chemin tout simplement avec quelque chose comme "
+"<code>turnRight();forward();forward();</code> parce qu'il faut secourir deux "
+"buggles à la fois, perdues dans des labyrinthes similaires mais différents. "
+"Vous pouvez passer à l'autre monde en cliquant sur le menu défilant au "
+"dessus de l'endroit où est dessiné le monde. C'est là où est écrit \"Deep "
+"Forest\" pour l'instant (forêt profonde), et si vous passez à \"Deeper Forest"
+"\" (forêt encore plus profonde), vous verrez l'autre monde. "
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:9
+msgid ""
+"The good news is that the path to the exit is written on the ground. As you "
+"can see, the world is made of several corridors, with baggles on the ground. "
+"After each corridor, you should turn left if the corridor contains three "
+"baggels or more, and you have to turn right if there is only 2 baggles or "
+"less."
+msgstr ""
+"La bonne nouvelle est que le chemin vers la sortie est en quelque sorte "
+"écrit au sol. Ces mondes sont composés de plusieurs corridors, avec des "
+"baggles par terre. À chaque embranchement, il faut prendre à gauche si le "
+"corridor qu'on vient de parcourir contient 3 baggles ou plus, ou à droite "
+"s'il contient 2 baggles ou moins."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:13
+msgid ""
+"So, the general form of your code must be something like \"while I did not "
+"find the exit, take the next corridor to decide whether I should turn left "
+"or right at the next intersection\". You can determine whether you are on "
+"the exit cell (that is orange) with the provided <code>exitReached()</code> "
+"method."
+msgstr ""
+"La forme générale de votre code doit donc être quelque chose comme «tant que "
+"je n'ai pas trouvé la sortie, prendre le prochain couloir pour décider s'il "
+"faut tourner à gauche ou à droite au prochain embranchement». Vous pouvez "
+"déterminer si vous avez rejoint la sortie (indiquée en orange) avec la "
+"méthode <code>exitReached()</code> fournie."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:17
+msgid ""
+"To take one corridor, you simply have to run from one intersection to "
+"another while counting the baggles you see on your path. The method "
+"<code>crossing()</code> tells you whether your buggle currently stands on an "
+"intersection.  The extra complexity is that at the beginning of a corridor, "
+"you obviously stand on an intersection, but you still want to move on."
+msgstr ""
+"Pour prendre un couloir, il suffit de courir d'une intersection à l'autre "
+"tout en comptant les baggles en chemin. La méthode <code>crossing()</code> "
+"indique si vous vous trouvez actuellement à un embranchement. Ce qui "
+"complique un peu, c'est qu'au début du couloir, vous vous trouvez bien "
+"entendu à une intersection, mais vous souhaitez avancer quand même."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:22
+msgid ""
+"For that, the easiest is to use a <code>do / while</code> loop instead of a "
+"regular <code>while</code> loop to move until the next intersection."
+msgstr ""
+"Pour cela, le plus simple est d'utiliser une boucle <code>do / while</code> "
+"au lieu d'une boucle <code>while</code> pour se déplacer d'une intersection "
+"à l'autre."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:25
+msgid ""
+"For that, use an extra variable indicating whether you already entered the "
+"corridor, as follows. This will ensure that you execute the loop body at "
+"least once (when <code>firstTime</code> is true)  before we actually use the "
+"value returned by <code>crossing()</code> to determine to continue or not."
+msgstr ""
+"Pour cela, utilisez une variable supplémentaire indiquant si vous êtes déjà "
+"entré dans le couloir, comme dans l'exemple suivant. Ainsi, vous exécuterez "
+"le corps de la boucle au moins une fois (quand <code>premiereFois</code> est "
+"vrai) tandis qu'aux tours de boucles suivants, c'est la valeur de retour de "
+"<code>crossing()</code> qui détermine s'il faut s'arrêter ou non."
+
+#. type: Content of: <pre>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:28
+#, no-wrap
+msgid ""
+"firstTime = True\n"
+"while firstTime or not crossing():\n"
+"  firstTime = False\n"
+"  <your body>  \n"
+msgstr ""
+"premiereFois = True\n"
+"while premiereFois or not crossing():\n"
+"  premiereFois = False\n"
+"  <your body>  \n"
+
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:34
+msgid "I cannot imagine how to count the baggles I see."
+msgstr "Je n'arrive pas à imaginer comment compter les baggles que je vois"
+
+#. type: Content of: <p><div>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:35
+msgid ""
+"You need a variable that is initialized to 0, and incremented each time you "
+"see a baggle on the ground. A variable used this way is often called "
+"<i>accumulator</i>."
+msgstr ""
+"Il vous faut une variable initialisée à zéro et incrémentée à chaque fois "
+"que vous voyez un baggle. Une variable utilisée ainsi est souvent appelée un "
+"<i>accumulateur</i>."
+
+#. type: Content of: <p><div>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:37
+msgid ""
+"Don't forget to reset your accumulator to 0 at the beginning of each "
+"corridor!"
+msgstr ""
+"N'oubliez pas de remettre l'accumulateur à 0 au début de chaque couloir!"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:40
+msgid ""
+"Oh, and when you reach the exit, don't forget to take an extra step to "
+"actually exit the maze!"
+msgstr ""
+"Oh, et quand vous parviendrez à trouver la sortie, n'oubliez pas de faire un "
+"pas de plus pour vous échapper effectivement."
+
 #. type: Content of: <p>
 #: src/lessons/welcome/methods/basics/Methods.html:4
 msgid ""
@@ -4369,9 +4599,8 @@ msgstr ""
 
 #. type: Content of: <p><p><p>
 #: src/lessons/welcome/methods/doghouse/MethodsDogHouse.html:54
-#: src/lessons/maze/randommouse/RandomMouseMaze.html:41
-#: src/lessons/welcome/array/basics/Array.html:161
-#: src/lessons/welcome/array/basics2/Array2.html:26
+#: src/lessons/welcome/array/basics/Array.html:229
+#: src/lessons/welcome/array/basics/Array2.html:30
 msgid "You're up."
 msgstr "À vous de jouer."
 
@@ -4577,9 +4806,9 @@ msgstr ""
 #: src/lessons/welcome/methods/args/MethodsArgs.html:3
 msgid ""
 "Don't you get tired of writing again and again the code to move by a fixed "
-"amount of steps? On the other hand, writing <tt>forward2()</tt>, <tt>forward3"
-"()</tt>, <tt>forward4()</tt>, as well as <tt>backward2()</tt>, <tt>backward3"
-"()</tt>, <tt>backward4()</tt>, and so on does not really help"
+"amount of steps? On the other hand, writing <tt>forward2()</tt>, "
+"<tt>forward3()</tt>, <tt>forward4()</tt>, as well as <tt>backward2()</tt>, "
+"<tt>backward3()</tt>, <tt>backward4()</tt>, and so on does not really help"
 msgstr ""
 "N'êtes vous pas fatigué d'écrire encore et encore le code qui permet "
 "d'avancer ou de reculer d'un nombre prédéterminé pas ? Oui, mais écrire les "
@@ -4761,13 +4990,13 @@ msgid ""
 "its position and orientation in order to determine the amount of steps to do "
 "and their direction, but it is not relevant here."
 msgstr ""
-"<a name=\"Objectifs\"> Il s'agit cette fois d'écrire une méthode <code>move"
-"(int nbPas, boolean forward)</code> qui avance de <code>nbPas</code> si "
-"<code>forward</code> est vrai, et recule d'autant de pas si le booléen est "
-"faux. La buggle s'en servira pour retourner sur la ligne du haut. Elle "
-"utilisera au passage des méthodes que l'on ne connaît pas encore pour "
-"deviner sa position et sa direction actuelles afin de calculer le sens et le "
-"nombre de pas à faire (mais ce n'est pas important ici)."
+"<a name=\"Objectifs\"> Il s'agit cette fois d'écrire une méthode "
+"<code>move(int nbPas, boolean forward)</code> qui avance de <code>nbPas</"
+"code> si <code>forward</code> est vrai, et recule d'autant de pas si le "
+"booléen est faux. La buggle s'en servira pour retourner sur la ligne du "
+"haut. Elle utilisera au passage des méthodes que l'on ne connaît pas encore "
+"pour deviner sa position et sa direction actuelles afin de calculer le sens "
+"et le nombre de pas à faire (mais ce n'est pas important ici)."
 
 #. type: Content of: <p><p><p><p><p>
 #: src/lessons/welcome/methods/args/MethodsArgs.html:76
@@ -4993,9 +5222,9 @@ msgid ""
 msgstr ""
 "Mais pour que votre méthode principale <code>run()</code> reste aussi simple "
 "que possible, il faudra définir de nouvelles méthodes afin de gérer "
-"simplement les répétions du motif. Par exemple, une méthode <code>makePattern"
-"()</code> réalisant le motif de l'exercice précédent semble être un bon "
-"départ (mais ce n'est sans doute pas suffisant)."
+"simplement les répétions du motif. Par exemple, une méthode "
+"<code>makePattern()</code> réalisant le motif de l'exercice précédent semble "
+"être un bon départ (mais ce n'est sans doute pas suffisant)."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/methods/picture2/MethodsPicture2.html:16
@@ -5054,8 +5283,8 @@ msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/welcome/methods/picture3/MethodsPicture3.html:11
-#: src/lessons/welcome/snake/Snake.html:44
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:49
+#: src/lessons/welcome/snake/Snake.html:46
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:52
 #: src/lessons/welcome/traversal/line/TraversalByLine.html:10
 #: src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:10
 #: src/lessons/welcome/traversal/zigzag/TraversalZigZag.html:6
@@ -5093,12 +5322,12 @@ msgid "Good luck!"
 msgstr "Bon courage !"
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/bdr/basics/BDR.html:1
+#: src/lessons/welcome/bdr/BDR.html:1
 msgid "Buggle Dance Revolution (BDR)"
 msgstr "Buggle Dance Revolution (BDR)"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:3
+#: src/lessons/welcome/bdr/BDR.html:3
 msgid ""
 "Today is a great day: we will learn the buggles to play Dance Revolution, "
 "this game beloved of some students where the player has to move its feet on "
@@ -5112,12 +5341,12 @@ msgstr ""
 "quelques détails à étudier."
 
 #. type: Content of: <h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:8
+#: src/lessons/welcome/bdr/BDR.html:8
 msgid "Conditionals without curly braces"
 msgstr "Conditionnelles sans accolades"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:10
+#: src/lessons/welcome/bdr/BDR.html:10
 msgid ""
 "There is one detail we omitted about the conditional syntax: if a branch "
 "contains only one instruction, then the curly braces become optional. So, "
@@ -5129,7 +5358,7 @@ msgstr ""
 "équivalents:"
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:14
+#: src/lessons/welcome/bdr/BDR.html:14
 #, no-wrap
 msgid ""
 "if (<b>condition</b>) {\n"
@@ -5145,7 +5374,7 @@ msgstr ""
 "}"
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:19
+#: src/lessons/welcome/bdr/BDR.html:19
 #, no-wrap
 msgid ""
 "if (<b>condition</b>) \n"
@@ -5159,7 +5388,7 @@ msgstr ""
 "    <b>quoiFaireSinon();</b>"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:24
+#: src/lessons/welcome/bdr/BDR.html:24
 msgid ""
 "But beware, this becomes dangerous if you chain the <tt>if</tt> instructions "
 "like this:"
@@ -5168,7 +5397,7 @@ msgstr ""
 "comme dans l'exemple suivant."
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:26
+#: src/lessons/welcome/bdr/BDR.html:26
 #, no-wrap
 msgid ""
 "if (isOverBaggle())    \n"
@@ -5186,7 +5415,7 @@ msgstr ""
 "forward();"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:33
+#: src/lessons/welcome/bdr/BDR.html:33
 msgid ""
 "In fact, it does not turn right when there is no baggle on the ground AND x "
 "equals 5, but when the buggle found a baggle on the ground and x equals "
@@ -5201,7 +5430,7 @@ msgstr ""
 "précédemment) :"
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:38
+#: src/lessons/welcome/bdr/BDR.html:38
 #, no-wrap
 msgid ""
 "if (isOverBaggle())    \n"
@@ -5219,7 +5448,7 @@ msgstr ""
 "forward();"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:45
+#: src/lessons/welcome/bdr/BDR.html:45
 msgid ""
 "The first lesson of this is that the indentation is very helpful to help "
 "humans understanding, but it's of no importance for the actual meaning of "
@@ -5238,13 +5467,13 @@ msgstr ""
 "poser une question), ou si vous comptez réutiliser votre code plus tard."
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:53
+#: src/lessons/welcome/bdr/BDR.html:53
 #, no-wrap
 msgid "if (isOverBaggle()) if (x == 5) turnLeft(); else turnRight(); forward();"
 msgstr "if (isOverBaggle()) if (x == 5) turnLeft(); else turnRight(); forward();"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:55
+#: src/lessons/welcome/bdr/BDR.html:55
 msgid ""
 "The second lesson is that a <tt>else</tt> branch always connects to the "
 "closest <tt>if</tt>. This may be a bit troublesome in some case, and it may "
@@ -5256,18 +5485,18 @@ msgstr ""
 "ambiguïté."
 
 #. type: Content of: <h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:59
+#: src/lessons/welcome/bdr/BDR.html:59
 msgid "Chaining conditionals"
 msgstr "Enchaînements de conditionnelles"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:61
+#: src/lessons/welcome/bdr/BDR.html:61
 msgid "You sometimes want to ask the buggle something similar to:"
 msgstr ""
 "Il arrive que l'on veuille demander à la buggle quelque chose similaire à :"
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:62
+#: src/lessons/welcome/bdr/BDR.html:62
 #, no-wrap
 msgid ""
 "if it's raining, take an umbrella;\n"
@@ -5279,7 +5508,7 @@ msgstr ""
 "si non, si nous sommes le 14 juillet, prend un drapeau français"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:66
+#: src/lessons/welcome/bdr/BDR.html:66
 msgid ""
 "The trap is that we want at most one of these actions to be taken. That is "
 "to say, if it's raining a very hot July 4th, we don't want the buggle to get "
@@ -5292,7 +5521,7 @@ msgstr ""
 "juste avec un parapluie. Le code suivant est donc faux."
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:71
+#: src/lessons/welcome/bdr/BDR.html:71
 #, no-wrap
 msgid ""
 "if (rainy()) {\n"
@@ -5316,7 +5545,7 @@ msgstr ""
 "}"
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:81
+#: src/lessons/welcome/bdr/BDR.html:81
 #, no-wrap
 msgid ""
 "if rainy():\n"
@@ -5334,7 +5563,7 @@ msgstr ""
 "    prendreDrapeau()\n"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:90
+#: src/lessons/welcome/bdr/BDR.html:90
 msgid ""
 "Indeed, since the conditions are evaluated one after the other, there is a "
 "risk that you go to the July 4th march on a rainy day. Instead, we should "
@@ -5345,7 +5574,7 @@ msgstr ""
 "écrire quelque chose comme :"
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:94
+#: src/lessons/welcome/bdr/BDR.html:94
 #, no-wrap
 msgid ""
 "if (rainy()) {\n"
@@ -5373,7 +5602,7 @@ msgstr ""
 "}"
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:106
+#: src/lessons/welcome/bdr/BDR.html:106
 #, no-wrap
 msgid ""
 "if rainy():\n"
@@ -5395,7 +5624,7 @@ msgstr ""
 "            prendreDrapeau()\n"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:117
+#: src/lessons/welcome/bdr/BDR.html:117
 msgid ""
 "Such a cascade of conditionals are quite difficult to read, and it is better "
 "to omit the curly braces for the <tt>else</tt> statements. Some languages "
@@ -5408,7 +5637,7 @@ msgstr ""
 "<tt>else if</tt> (mais pas Java)."
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:121
+#: src/lessons/welcome/bdr/BDR.html:121
 #, no-wrap
 msgid ""
 "if (rainy()) {\n"
@@ -5428,7 +5657,7 @@ msgstr ""
 "}"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:129
+#: src/lessons/welcome/bdr/BDR.html:129
 msgid ""
 "Such a cascade of conditionals are quite difficult to read, and it is better "
 "to omit extra indentation for the <tt>else</tt> statements. In Python, there "
@@ -5441,7 +5670,7 @@ msgstr ""
 "faire ceci facilement."
 
 #. type: Content of: <p><pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:132
+#: src/lessons/welcome/bdr/BDR.html:132
 #, no-wrap
 msgid ""
 "if rainy():\n"
@@ -5459,12 +5688,12 @@ msgstr ""
 "    prendreDrapeau()\n"
 
 #. type: Content of: <p><h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:140
+#: src/lessons/welcome/bdr/BDR.html:140
 msgid "Graffitis in the Buggle World"
 msgstr "Les graffitis dans le monde des buggles"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:142
+#: src/lessons/welcome/bdr/BDR.html:142
 msgid ""
 "Buggles can write graffitis on the ground of their world. For that, they use "
 "the four following methods:"
@@ -5473,7 +5702,7 @@ msgstr ""
 "faire, elles utilisent les quatre méthodes suivantes:"
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:146
+#: src/lessons/welcome/bdr/BDR.html:146
 msgid ""
 "<code>boolean isOverMessage()</code>: returns <code>true</code> if and only "
 "if there is a message on the ground."
@@ -5482,7 +5711,7 @@ msgstr ""
 "et seulement s'il y a un message écrit par terre."
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:148
+#: src/lessons/welcome/bdr/BDR.html:148
 msgid ""
 "<code>boolean isOverMessage()</code>: returns <code>True</code> if and only "
 "if there is a message on the ground."
@@ -5491,7 +5720,7 @@ msgstr ""
 "et seulement s'il y a un message écrit par terre."
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:150
+#: src/lessons/welcome/bdr/BDR.html:150
 msgid ""
 "<code>String readMessage()</code>: returns the message written on the ground "
 "(or an empty string if nothing is written)."
@@ -5500,7 +5729,7 @@ msgstr ""
 "terre (s'il y a rien, on obtient une chaîne vide)."
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:152
+#: src/lessons/welcome/bdr/BDR.html:152
 msgid ""
 "<code>void writeMessage(String msg)</code>: writes the specified message "
 "down on the ground. If there is already a message on the ground, the new "
@@ -5511,12 +5740,12 @@ msgstr ""
 "le nouveau message à la fin du précédent."
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:155
+#: src/lessons/welcome/bdr/BDR.html:155
 msgid "<code>void clearMessage()</code>: clears what is written on the ground."
 msgstr "<code>void clearMessage()</code> : efface ce qui est écrit par terre."
 
 #. type: Content of: <p><a>
-#: src/lessons/welcome/bdr/basics/BDR.html:159
+#: src/lessons/welcome/bdr/BDR.html:159
 msgid ""
 "<a name=\"Objectives\">The goal is then to organize a BDR game between the "
 "buggles by learning them to move according to the instructions written on "
@@ -5529,184 +5758,164 @@ msgstr ""
 "suivant:"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:165
-#: src/lessons/welcome/bdr/extended/BDR2.html:127
+#: src/lessons/welcome/bdr/BDR.html:165 src/lessons/welcome/bdr/BDR2.html:127
 msgid "Message"
 msgstr "Indication"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:166
-#: src/lessons/welcome/bdr/extended/BDR2.html:128
+#: src/lessons/welcome/bdr/BDR.html:166 src/lessons/welcome/bdr/BDR2.html:128
 msgid "What to do"
 msgstr "Quoi faire"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:167
+#: src/lessons/welcome/bdr/BDR.html:167
 msgid "Mnemonic"
 msgstr "Mnémotechnique"
 
 #. type: Content of: <table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:169
-#: src/lessons/welcome/bdr/extended/BDR2.html:130
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:30
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:33
+#: src/lessons/welcome/bdr/BDR.html:169 src/lessons/welcome/bdr/BDR2.html:130
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:30
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:33
 msgid "R"
 msgstr "R"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:169
-#: src/lessons/welcome/bdr/extended/BDR2.html:130
+#: src/lessons/welcome/bdr/BDR.html:169 src/lessons/welcome/bdr/BDR2.html:130
 msgid "Turn right and move one step forward"
 msgstr "Tourner à droite et avancer d'une case"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:169
+#: src/lessons/welcome/bdr/BDR.html:169
 msgid "Right"
 msgstr "Right"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:170
-#: src/lessons/welcome/bdr/extended/BDR2.html:131
+#: src/lessons/welcome/bdr/BDR.html:170 src/lessons/welcome/bdr/BDR2.html:131
 msgid "L"
 msgstr "L"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:170
-#: src/lessons/welcome/bdr/extended/BDR2.html:131
+#: src/lessons/welcome/bdr/BDR.html:170 src/lessons/welcome/bdr/BDR2.html:131
 msgid "Turn left and move one step forward"
 msgstr "Tourner à gauche et avancer d'une case"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:170
+#: src/lessons/welcome/bdr/BDR.html:170
 msgid "Left"
 msgstr "Left"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:171
-#: src/lessons/welcome/bdr/extended/BDR2.html:132
+#: src/lessons/welcome/bdr/BDR.html:171 src/lessons/welcome/bdr/BDR2.html:132
 msgid "I"
 msgstr "I"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:171
+#: src/lessons/welcome/bdr/BDR.html:171
 msgid "Turn back (U-turn) and move one step forward"
 msgstr "Tourner en sens inverse (demi tour) et avancer d'une case"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:171
+#: src/lessons/welcome/bdr/BDR.html:171
 msgid "Inverse"
 msgstr "Inverse"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:173
-#: src/lessons/welcome/bdr/extended/BDR2.html:134
+#: src/lessons/welcome/bdr/BDR.html:173 src/lessons/welcome/bdr/BDR2.html:134
 msgid "A"
 msgstr "A"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:173
-#: src/lessons/welcome/bdr/extended/BDR2.html:134
+#: src/lessons/welcome/bdr/BDR.html:173 src/lessons/welcome/bdr/BDR2.html:134
 msgid "Move one step forward"
 msgstr "Avancer d'une case"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:173
+#: src/lessons/welcome/bdr/BDR.html:173
 msgid "First letter of the alphabet"
 msgstr "Première lettre de l'alphabet"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:174
-#: src/lessons/welcome/bdr/extended/BDR2.html:135
+#: src/lessons/welcome/bdr/BDR.html:174 src/lessons/welcome/bdr/BDR2.html:135
 msgid "B"
 msgstr "B"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:174
-#: src/lessons/welcome/bdr/extended/BDR2.html:135
+#: src/lessons/welcome/bdr/BDR.html:174 src/lessons/welcome/bdr/BDR2.html:135
 msgid "Move two steps forward"
 msgstr "Avancer de deux cases"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:174
+#: src/lessons/welcome/bdr/BDR.html:174
 msgid "Second letter of the alphabet"
 msgstr "Deuxième lettre de l'alphabet"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:175
-#: src/lessons/welcome/bdr/extended/BDR2.html:136
+#: src/lessons/welcome/bdr/BDR.html:175 src/lessons/welcome/bdr/BDR2.html:136
 msgid "C"
 msgstr "C"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:175
-#: src/lessons/welcome/bdr/extended/BDR2.html:136
+#: src/lessons/welcome/bdr/BDR.html:175 src/lessons/welcome/bdr/BDR2.html:136
 msgid "Move three steps forward"
 msgstr "Avancer de trois cases"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:175
+#: src/lessons/welcome/bdr/BDR.html:175
 msgid "Third letter of the alphabet"
 msgstr "Troisième lettre de l'alphabet"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:177
-#: src/lessons/welcome/bdr/extended/BDR2.html:141
+#: src/lessons/welcome/bdr/BDR.html:177 src/lessons/welcome/bdr/BDR2.html:141
 msgid "Z"
 msgstr "Z"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:177
-#: src/lessons/welcome/bdr/extended/BDR2.html:141
+#: src/lessons/welcome/bdr/BDR.html:177 src/lessons/welcome/bdr/BDR2.html:141
 msgid "Move one step backward"
 msgstr "Reculer d'une case"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:177
+#: src/lessons/welcome/bdr/BDR.html:177
 msgid "One letter before the end of the alphabet"
 msgstr "A une lettre de la fin de l'alphabet"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:178
-#: src/lessons/welcome/bdr/extended/BDR2.html:142
+#: src/lessons/welcome/bdr/BDR.html:178 src/lessons/welcome/bdr/BDR2.html:142
 msgid "Y"
 msgstr "Y"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:178
-#: src/lessons/welcome/bdr/extended/BDR2.html:142
+#: src/lessons/welcome/bdr/BDR.html:178 src/lessons/welcome/bdr/BDR2.html:142
 msgid "Move two steps backward"
 msgstr "Reculer de deux cases"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:178
+#: src/lessons/welcome/bdr/BDR.html:178
 msgid "Two letters before the end of the alphabet"
 msgstr "A deux lettres de la fin de l'alphabet"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:179
-#: src/lessons/welcome/bdr/extended/BDR2.html:143
+#: src/lessons/welcome/bdr/BDR.html:179 src/lessons/welcome/bdr/BDR2.html:143
 msgid "X"
 msgstr "X"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:179
-#: src/lessons/welcome/bdr/extended/BDR2.html:143
+#: src/lessons/welcome/bdr/BDR.html:179 src/lessons/welcome/bdr/BDR2.html:143
 msgid "Move three steps backward"
 msgstr "Reculer de trois cases"
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:179
+#: src/lessons/welcome/bdr/BDR.html:179
 msgid "Three letters before the end of the alphabet"
 msgstr "A trois lettres de la fin de l'alphabet"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:182
-#: src/lessons/welcome/bdr/extended/BDR2.html:149
+#: src/lessons/welcome/bdr/BDR.html:182 src/lessons/welcome/bdr/BDR2.html:149
 msgid "In any other case, you should stop"
 msgstr "Dans tous les autres cas, il faut s'arrêter."
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:184
+#: src/lessons/welcome/bdr/BDR.html:184
 msgid ""
 "Write the code of the dance in the <code>run()</code> method which prototype "
 "is already in the editor."
@@ -5715,7 +5924,7 @@ msgstr ""
 "prototype se trouve déjà dans l'éditeur."
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:187
+#: src/lessons/welcome/bdr/BDR.html:187
 msgid ""
 "Write the code of the dance directly in the editor, out of any function."
 msgstr ""
@@ -5723,12 +5932,12 @@ msgstr ""
 "fonction."
 
 #. type: Content of: <p><a><h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:190
+#: src/lessons/welcome/bdr/BDR.html:190
 msgid "Indications"
 msgstr "Indications"
 
 #. type: Content of: <p><a>
-#: src/lessons/welcome/bdr/basics/BDR.html:192
+#: src/lessons/welcome/bdr/BDR.html:192
 msgid ""
 "This exercise may seem a bit complex at the first glance, but it comes down "
 "to summarizing the information above in a sequence of conditionals."
@@ -5738,7 +5947,7 @@ msgstr ""
 "conditionnelles."
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:197
+#: src/lessons/welcome/bdr/BDR.html:197
 msgid ""
 "The first subtlety is that we use the <code>char getIndication()</code> "
 "instead of <code>String readMessage()</code>. This method, only known by the "
@@ -5751,7 +5960,7 @@ msgstr ""
 "premier caractère du message au sol (ou ' ' s'il n'y a rien d'écrit au sol)."
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:202
+#: src/lessons/welcome/bdr/BDR.html:202
 msgid ""
 "The other subtlety is to keep working as long as there is some work to do, i."
 "e., as long as we did not find a cell which content is not described in the "
@@ -5770,7 +5979,7 @@ msgstr ""
 "(<code>true</code>. Cela arrête la boucle, et le programme s'arrête."
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:209
+#: src/lessons/welcome/bdr/BDR.html:209
 msgid ""
 "The other subtlety is to keep working as long as there is some work to do, i."
 "e., as long as we did not find a cell which content is not described in the "
@@ -5789,7 +5998,7 @@ msgstr ""
 "(<code>True</code>. Cela arrête la boucle, et le programme s'arrête."
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:217
+#: src/lessons/welcome/bdr/BDR.html:217
 msgid ""
 "The functions having <code>void</code> as return type can contain some "
 "<tt>return</tt> without any associated value. It interrupts immediately "
@@ -5800,12 +6009,12 @@ msgstr ""
 "exécution."
 
 #. type: Content of: <p><a><h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:221
+#: src/lessons/welcome/bdr/BDR.html:221
 msgid "Tips and Hints"
 msgstr "Trucs et astuces"
 
 #. type: Content of: <p><a>
-#: src/lessons/welcome/bdr/basics/BDR.html:223
+#: src/lessons/welcome/bdr/BDR.html:223
 msgid ""
 "If you fail understanding why the buggle does not execute the expected "
 "steps, try adding <code>brushDown()</code> in your method. This asks the "
@@ -5823,17 +6032,17 @@ msgstr ""
 "buggles, pas de dégrader le dance floor."
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:230
+#: src/lessons/welcome/bdr/BDR.html:230
 msgid "When your program finally works, move on to the next exercise."
 msgstr "Quand votre programme fonctionne enfin, passez à l'exercice suivant."
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/bdr/extended/BDR2.html:1
+#: src/lessons/welcome/bdr/BDR2.html:1
 msgid "Buggle Dance Revolution 2 (BDR2)"
 msgstr "Buggle Dance Revolution 2 (BDR2)"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:3
+#: src/lessons/welcome/bdr/BDR2.html:3
 msgid ""
 "BDR is cool, but it's a bit chaotic. First, the buggles giggle in any "
 "directions, and then the code you had to write to let them move is rather "
@@ -5849,12 +6058,12 @@ msgstr ""
 "nouveaux éléments que nous allons maintenant étudier."
 
 #. type: Content of: <p><h3>
-#: src/lessons/welcome/bdr/extended/BDR2.html:9
+#: src/lessons/welcome/bdr/BDR2.html:9
 msgid "<tt>switch</tt> conditionals"
 msgstr "Branchement conditionnel <tt>switch</tt>"
 
 #. type: Content of: <p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:12
+#: src/lessons/welcome/bdr/BDR2.html:12
 msgid ""
 "The hardest part of previous code is certainly the conditional cascading. "
 "Somewhere in your code, you certainly had something similar to:"
@@ -5864,7 +6073,7 @@ msgstr ""
 "écrit quelque chose comme:"
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:15
+#: src/lessons/welcome/bdr/BDR2.html:15
 #, no-wrap
 msgid ""
 "if (getIndication() == 'R') {\n"
@@ -5896,20 +6105,20 @@ msgstr ""
 "}\n"
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:31
+#: src/lessons/welcome/bdr/BDR2.html:31
 msgid ""
 "When you review this code, it may not be clear at the first glance that it "
-"is simply a choice with 4 branches depending on the value of getIndication"
-"(). To improve this, we will use a <code>switch</code> construct, which Java "
-"syntax is the following:"
+"is simply a choice with 4 branches depending on the value of "
+"getIndication(). To improve this, we will use a <code>switch</code> "
+"construct, which Java syntax is the following:"
 msgstr ""
 "Quand on relit ce programme, on ne voit pas forcément tout de suite qu'il "
-"s'agit simplement d'un choix à 4 branches selon la valeur de getIndication"
-"(). Pour faire mieux, on va utiliser la construction <tt>switch</tt>, dont "
-"la syntaxe est la suivante:"
+"s'agit simplement d'un choix à 4 branches selon la valeur de "
+"getIndication(). Pour faire mieux, on va utiliser la construction "
+"<tt>switch</tt>, dont la syntaxe est la suivante:"
 
 #. type: Content of: <p><p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:37
+#: src/lessons/welcome/bdr/BDR2.html:37
 #, no-wrap
 msgid ""
 "switch (<b>expression</b>) {\n"
@@ -5943,7 +6152,7 @@ msgstr ""
 "}"
 
 #. type: Content of: <p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:53
+#: src/lessons/welcome/bdr/BDR2.html:53
 msgid ""
 "Observe that each branch of a <tt>switch</tt> must be ended by a "
 "<code>break</code>. If you forget this, the machine keeps going and execute "
@@ -5957,7 +6166,7 @@ msgstr ""
 "pratique."
 
 #. type: Content of: <p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:58
+#: src/lessons/welcome/bdr/BDR2.html:58
 msgid ""
 "It is then possible to rewrite previous BDR code in a cleaner way using the "
 "<tt>switch</tt> construct:"
@@ -5966,7 +6175,7 @@ msgstr ""
 "construction <tt>switch</tt> de la façon suivante."
 
 #. type: Content of: <p><p><p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:61
+#: src/lessons/welcome/bdr/BDR2.html:61
 #, no-wrap
 msgid ""
 "switch (getIndication()) {\n"
@@ -6004,12 +6213,12 @@ msgstr ""
 "}"
 
 #. type: Content of: <p><p><p><p><h2>
-#: src/lessons/welcome/bdr/extended/BDR2.html:79
+#: src/lessons/welcome/bdr/BDR2.html:79
 msgid "Variables shared between methods"
 msgstr "Variables partagées par les méthodes"
 
 #. type: Content of: <p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:82
+#: src/lessons/welcome/bdr/BDR2.html:82
 msgid ""
 "Another issue in your code is that it begins to be a bit long to be written "
 "as a single method. We would like to split it up in two methods:"
@@ -6018,13 +6227,13 @@ msgstr ""
 "être dans une seule fonction. On voudrait découper en deux méthodes:"
 
 #. type: Content of: <p><p><p><p><p><ul><li>
-#: src/lessons/welcome/bdr/extended/BDR2.html:85
+#: src/lessons/welcome/bdr/BDR2.html:85
 msgid ""
 "<code>danceOneStep()</code> would take care of achieving a single dance step"
 msgstr "<code>danceOneStep()</code> s'occuperait de faire un pas de danse"
 
 #. type: Content of: <p><p><p><p><p><ul><li>
-#: src/lessons/welcome/bdr/extended/BDR2.html:86
+#: src/lessons/welcome/bdr/BDR2.html:86
 msgid ""
 "<code>run()</code> would take care of the dance as a whole. It would do the "
 "steps while we didn't encounter a cell not asking any further move."
@@ -6035,7 +6244,7 @@ msgstr ""
 "demandant pas d'aller plus loin."
 
 #. type: Content of: <p><p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:90
+#: src/lessons/welcome/bdr/BDR2.html:90
 msgid ""
 "The difficulty is to make sure that <tt>danceOneStep()</tt> keeps <tt>run()</"
 "tt> informed that there is no further dance step to achieve. The simpler "
@@ -6052,13 +6261,13 @@ msgstr ""
 "de toute méthode :"
 
 #. type: Content of: <p><p><p><p><p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:95
+#: src/lessons/welcome/bdr/BDR2.html:95
 #, no-wrap
 msgid "boolean moreMusic = true;"
 msgstr "boolean moreMusic = true;"
 
 #. type: Content of: <p><p><p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:97
+#: src/lessons/welcome/bdr/BDR2.html:97
 msgid ""
 "Note that it is possible to write variable declarations out of any methods, "
 "but that instructions must be in a method. In Java such <i>global</i> "
@@ -6070,7 +6279,7 @@ msgstr ""
 "méthodes des <b>champs</b>."
 
 #. type: Content of: <p><p><p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:101
+#: src/lessons/welcome/bdr/BDR2.html:101
 msgid ""
 "Then, the <tt>danceOneStep()</tt> must be changed to update this variable to "
 "<tt>false</tt> when there is nothing more to do. For that, simply add "
@@ -6082,12 +6291,12 @@ msgstr ""
 "tt>."
 
 #. type: Content of: <p><p><p><p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:105
+#: src/lessons/welcome/bdr/BDR2.html:105
 msgid "It is then possible to use the following <tt>run()</tt> method:"
 msgstr "On peut alors utiliser la fonction <tt>run()</tt> suivante:"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:106
+#: src/lessons/welcome/bdr/BDR2.html:106
 #, no-wrap
 msgid ""
 "public void run() {\n"
@@ -6101,20 +6310,20 @@ msgstr ""
 "}"
 
 #. type: Content of: <a>
-#: src/lessons/welcome/bdr/extended/BDR2.html:111
-#: src/lessons/maze/randommouse/RandomMouseMaze.html:23
+#: src/lessons/welcome/bdr/BDR2.html:111
+#: src/lessons/maze/randommouse/RandomMouseMaze.html:24
 msgid "<a name=\"Objectives\">"
 msgstr "<a name=\"Objectifs\">"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:112
+#: src/lessons/welcome/bdr/BDR2.html:112
 msgid "Apply the improvement we just saw to rewrite your buggle code."
 msgstr ""
 "Réécrivez le code des buggles en appliquant les améliorations que nous "
 "venons de voir."
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:114
+#: src/lessons/welcome/bdr/BDR2.html:114
 msgid ""
 "You don't have to write the <tt>run()</tt> method since the buggle already "
 "know it. If you put it anyway, the compiler will complain about this "
@@ -6129,7 +6338,7 @@ msgstr ""
 "variable <tt>moreMusic</tt> et la méthode <tt>danceOneStep()</tt>."
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:120
+#: src/lessons/welcome/bdr/BDR2.html:120
 msgid ""
 "This dance step is slightly more complex but actually better looking. Beside "
 "of that, that's the same old story."
@@ -6138,7 +6347,7 @@ msgstr ""
 "dehors de cela, c'est la même chose que précédemment."
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:123
+#: src/lessons/welcome/bdr/BDR2.html:123
 msgid ""
 "Here are the ground indications to use for BDR2. Note that we can now move a "
 "buggle up to 6 cells in one dance step."
@@ -6147,221 +6356,231 @@ msgstr ""
 "maintenant avancer la buggle de 6 cases d'un coup."
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:132
+#: src/lessons/welcome/bdr/BDR2.html:132
 msgid "Turn back and move one step forward"
 msgstr "Tourner en sens inverse (demi-tour) et avancer d'une case"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:137
+#: src/lessons/welcome/bdr/BDR2.html:137
 msgid "D"
 msgstr "D"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:137
+#: src/lessons/welcome/bdr/BDR2.html:137
 msgid "Move four cells forward"
 msgstr "Avancer de quatre cases"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:138
+#: src/lessons/welcome/bdr/BDR2.html:138
 msgid "E"
 msgstr "E"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:138
+#: src/lessons/welcome/bdr/BDR2.html:138
 msgid "Move five cells forward"
 msgstr "Avancer de cinq cases"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:139
+#: src/lessons/welcome/bdr/BDR2.html:139
 msgid "F"
 msgstr "F"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:139
+#: src/lessons/welcome/bdr/BDR2.html:139
 msgid "Move six cells forward"
 msgstr "Avancer de six cases"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:144
+#: src/lessons/welcome/bdr/BDR2.html:144
 msgid "W"
 msgstr "W"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:144
+#: src/lessons/welcome/bdr/BDR2.html:144
 msgid "Move four cells backward"
 msgstr "Reculer de quatre cases"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:145
+#: src/lessons/welcome/bdr/BDR2.html:145
 msgid "V"
 msgstr "V"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:145
+#: src/lessons/welcome/bdr/BDR2.html:145
 msgid "Move five cells backward"
 msgstr "Reculer de cinq cases"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:146
+#: src/lessons/welcome/bdr/BDR2.html:146
 msgid "U"
 msgstr "U"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:146
+#: src/lessons/welcome/bdr/BDR2.html:146
 msgid "Move six cells backward"
 msgstr "Reculer de six cases"
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:151
+#: src/lessons/welcome/bdr/BDR2.html:151
 msgid "When you program works again, proceed to next exercise."
 msgstr ""
 "Quand votre programme fonctionne de nouveau, passez à l'exercice suivant."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:4
+#: src/lessons/welcome/slug/SlugHunting.html:3
 msgid ""
-"After all this excitation of dance revolution, we will move on to a slower "
-"activity : the slug hunting. Your buggle just happened to found the trail of "
-"a slug: a green dribbling tracks. If it manage to follow it to its end, it "
-"will find a baggle representing an appetizing slug (from a buggle point of "
-"view)."
+"Now that your <code>isFacingTrail()</code> method is working, it's time to "
+"write the code to organize the hunting party. Copy/paste your code from the "
+"previous exercise, and complete the <code>hunt()</code> method."
 msgstr ""
-"Après toute l'agitation de la dance revolution, nous allons passer à une "
-"activité plus calme : la chasse à la limace. Votre buggle a en effet trouvé "
-"par hasard la trace d'une limace : une traînée baveuse verte. Si elle "
-"parvient à la suivre jusqu'au bout, elle trouvera un baggle représentant la "
-"grosse limace si appétissante (pour une buggle)."
+"Maintenant que votre méthode <code>isFacingTrail()</code> fonctionne, il est "
+"temps d'écrire le code de la chasse à proprement parler. Copie/collez le "
+"code que vous aviez fait pour l'exercice précédent, et complétez la méthode "
+"<code>hunt()</code> (<i>hunt</i> signifie <i>chasse</i> en anglais)."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:12
+#: src/lessons/welcome/slug/SlugHunting.html:7
 msgid ""
-"To reach that goal, you have a boolean method <tt>isFacingTrail</tt>, which "
-"determine whether we are facing a green cell or not. Of course, if we are "
-"facing a wall, it returns false.In addition, this method preserve the state "
-"of the calling buggle and of the world. Such a method is said to have no "
-"<b>side effect</b>."
+"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."
 msgstr ""
-"Pour arriver au résultat, vous disposez d'une méthode booléenne "
-"<tt>isFacingTrail</tt>, qui permet de savoir si on est face à une case verte "
-"ou non. Bien sûr, si on est face à un mur, elle renvoie faux. De plus que "
-"cette méthode ne modifie ni l'état de la buggle qui l'appelle, ni celui du "
-"monde. Une telle méthode est dite <b>sans effet de bord</b>."
+"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 à "
+"gauche ou à droite, et suivez-la encore."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:20
+#: src/lessons/welcome/slug/SlugHunting.html:11
 msgid ""
-"It takes the color of the trail we want to follow as an argument. Slugs "
-"leave green trails, but other prey leave trails of other colors. In Java, "
-"there is a <i>data type</i> <tt>Color</tt> to indicate the colors. The green "
-"color is defined by <code>Color.green</code>."
+"To ensure that you don't mix the track you come from with the one in front "
+"of you, the easier is to erase the track when you follow it. Use the method "
+"<code>brushDown()</code> to put your brush down and mark the ground, and "
+"<code>brushUp()</code> to move it up again."
 msgstr ""
-"Cette méthode prend en argument la couleur de la piste que l'on veut suivre. "
-"Les limaces laissent des traces vertes, mais d'autres proies laissent des "
-"traces d'autres couleurs.  En Java, il existe un <i>type</i> <tt>Color</tt> "
-"pour désigner les couleurs.  La couleur verte est définie par <code>Color."
-"green</code>."
+"Pour ne pas confondre la partie de la trace à suivre avec celle que votre "
+"buggle a déjà suivie, il est conseillé d'effacer la piste derrière vous. "
+"Pour cela, utilisez la méthode <code>brushDown()</code> pour baisser votre "
+"crayon, et <code>brushUp()</code> pour le relever."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:25
+#: src/lessons/welcome/slug/SlugHunting.html:15
+msgid ""
+"Finally, do not forget to capture your prey once you found it (using "
+"<code>pickupBaggle()</code>)."
+msgstr ""
+"Enfin, n'oubliez de capturer votre proie une fois que vous l'aurez débusquée "
+"(avec <code>pickupBaggle()</code>)."
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/slug/SlugHunting.html:19
 msgid ""
-"In order to hunt your prey, you should not mistake the part of the tracks to "
-"follow with the one your buggle comes from, you should ask your buggle to "
-"leave a tracks behind it. Don't forget to use the <code>brushDown()</code> "
-"method to put your brush down and <code>brushUp()</code> to move it up again."
+"<a name=\"Objectives\"> Complete the <code>hunt()</code> method. You "
+"probably want to copy over the <code>isFacingTrail()</code> method that you "
+"wrote in previous exercise.  </a>"
 msgstr ""
-"Afin d'atteindre votre proie, il ne faut pas confondre la partie de la trace "
-"à suivre avec celle que votre buggle a déjà suivie, il est conseillé à votre "
-"buggle de laisser une trace derrière ses pas.  Pensez à utiliser la méthode "
-"<code>brushDown()</code> pour baisser votre crayon (et <code>brushUp()</"
-"code> pour le relever)"
+"<a name=\"Objectifs\"> Complétez la méthode <code>hunt()</code>. Vous voulez "
+"probablement copier votre méthode <code>isFacingTrail()</code> de l'exercice "
+"précédent."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:30
+#: src/lessons/welcome/slug/SlugTracking.html:3
 msgid ""
-"A buggle can know the color of the cell it is over using the <code>Color "
-"getGroundColor()</code> method."
+"Your buggle is super happy! It just found the green dribbling trail, "
+"certainly left by a big yummy slug.  At its end, the buggle is certain to "
+"entertain itself with this appetizing slug (represented as a baggle)."
 msgstr ""
-"Un buggle peut connaître la couleur de la case sur laquelle il est "
-"positionné en utilisant la méthode <code>Color getGroundColor()</code>."
+"Votre buggle est super contente ! Elle vient de trouver une grosse traînée "
+"baveuse sur le sol, certainement laissée par une grosse limace. Au bout de "
+"cette piste, la buggle est sûre de se régaler d'un bon jus de limace "
+"(représentée par un baggle)."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:33
+#: src/lessons/welcome/slug/SlugTracking.html:7
 msgid ""
-"Finally, do not forget to capture your prey once you found it (using "
-"<code>pickUpBaggle()</code>)."
+"To reach that goal, you had to write a boolean method <tt>isFacingTrail</"
+"tt>, which determines whether we are facing a green cell or not. Of course, "
+"if we are facing a wall, it should return false without bumping into it. You "
+"should make sure that this method has no <b>side effect</b>, i.e. that it "
+"does not change the state of the calling buggle nor of its world."
 msgstr ""
-"Enfin, n'oubliez de capturer votre proie une fois que vous l'aurez débusquée "
-"(avec <code>pickUpBaggle()</code>)."
+"Pour arriver au résultat, vous devez écrire la méthode booléenne "
+"<code>isFacingTrail()</code>, qui permet de savoir si on est face à une case "
+"verte ou non. Bien sûr, si on est face à un mur, elle doit répondre faux "
+"sans se cogner. Il faudrait de plus que cette méthode soit <b>sans effet de "
+"bord</b>, c'est-à-dire qu'elle ne modifie  ni la buggle qui l'appelle, ni le "
+"monde environnant."
 
-#. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:38
+#. type: Content of: <p>
+#: src/lessons/welcome/slug/SlugTracking.html:12
 msgid ""
-"<a name=\"Objectives\"> Complete the <code>hunt()</code> method (which gets "
-"called by <code>run()</code> automatically). You should use the "
-"<code>isFacingTrail()</code> method that is provided.  </a>"
+"Your tool to that end is the <code>getGroundColor()</code> that returns the "
+"color of the current cell. Just go to the cell you want to test and run that "
+"function. You cannot test whether this color is equal to <code>Color.green</"
+"code> with an <code>==</code> sign but instead you have to write something "
+"like <code>getGroundColor().equals(Color.green)</code>. This is because "
+"green is an <i>object</i> in Java, and <code>.equals()</code> is the way to "
+"go to test equality between Java objects."
 msgstr ""
-"<a name=\"Objectifs\"> Complétez la méthode <code>hunt()</code> ( qui sera "
-"appelée par la méthode <code>run()</code> automatiquement ). La méthode "
-"<tt>hunt()</tt> doit utiliser la méthode <code>isFacingTrail()</code> qui "
-"vous est fournie."
+"Votre outil pour cela est la méthode <code>getGroundColor()</code> qui "
+"retourne la couleur du sol dans la case où se trouve la buggle. Il vous faut "
+"vous rendre dans la case à tester avant d'appeler cette méthode. Vous ne "
+"pouvez pas simplement utiliser <code>==</code> pour tester si la couleur "
+"retournée est le vert, mais vous devez plutôt écrire quelque chose comme "
+"<code>getGroundColor().equals(Color.green)</code>. C'est parce 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."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:3
+#: src/lessons/welcome/slug/SlugTracking.html:18
 msgid ""
-"After all this excitation of slug hunting, we will have to learn how to "
-"track their trail. Your buggle just happened to found the trail of a slug: a "
-"green dribbling tracks. If it manage to follow it to its end, it will find a "
-"baggle representing an appetizing slug (from a buggle point of view)."
+"Your tool to that end is the <code>getGroundColor()</code> that returns the "
+"color of the current cell. Just go to the cell you want to test and run that "
+"function."
 msgstr ""
-"Après toute l'excitation liée à la chasse à la limace, nous allons apprendre "
-"comment suivre leur piste. Votre buggle a en effet trouvé par hasard la "
-"trace d'une limace : une traînée baveuse verte. Si elle parvient à la suivre "
-"jusqu'au bout, elle trouvera un baggle représentant la grosse limace si "
-"appétissante (pour une buggle)."
+"Votre outil pour cela est la méthode <code>getGroundColor()</code> qui "
+"retourne la couleur du sol dans la case où se trouve la buggle. Il vous faut "
+"vous rendre dans la case à tester avant d'appeler cette méthode."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:9
+#: src/lessons/welcome/slug/SlugTracking.html:22
 msgid ""
-"To reach that goal, you had to write the previously given boolean method "
-"<tt>isFacingTrail</tt>, which should determine whether we are facing a green "
-"cell or not. Of course, if we are facing a wall, it should return false. It "
-"would be great if this method could have no <b>side effect</b>.  on the "
-"calling buggle and on the world."
+"Complete the <code>isFacingTrail()</code> method (which gets called "
+"automatically)."
 msgstr ""
-"Pour arriver au résultat, vous devez écrire la méthode booléenne "
-"<tt>isFacingTrail</tt> décrite lors de l'exercice précédent, qui permet de "
-"savoir si on est face à une case verte ou non. Bien sûr, si on est face à un "
-"mur, elle doit répondre faux. Il faudrait de plus que cette méthode soit "
-"<b>sans effet de bord</b> en ne modifiannt pas ni le buggle qui l'appelle, "
-"ni le monde."
+"Complétez la méthode <code>isFacingTrail()</code> qui sera appelée "
+"automatiquement comme il faut."
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/slug/SlugSnail.html:1
+msgid "Slugs and Snails"
+msgstr "Limaces et escargots"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:15
+#: src/lessons/welcome/slug/SlugSnail.html:3
 msgid ""
-"Remember that this method takes the color of the trail we want to follow as "
-"an argument. Slugs leave green trails, but other prey leave trails of other "
-"colors. In Java, there is a <i>data type</i> <tt>Color</tt> to indicate the "
-"colors. The green color is defined by <code>Color.green</code>."
+"Yuhu! This time, your buggle found the tracks of much more preys! In the "
+"first world, that's a yummy Kitty Slug (leaving a pink trail) while on the "
+"second world, that's a big fat snail that awaits your buggle at the end of "
+"the orange trail."
 msgstr ""
-"Souvenez vous que cette méthode doit prendre en argument la couleur de la "
-"piste que l'on veut suivre. Les limaces laissent des traces vertes, mais "
-"d'autres proies laissent des traces d'autres couleurs.  En Java, il existe "
-"un <i>type</i> <tt>Color</tt> pour désigner les couleurs.  La couleur verte "
-"est définie par <code>Color.green</code>."
+"YES! Cette fois encore, votre buggle a débusqué de bonnes proies! Dans le "
+"premier monde, c'est une délicieuse limace Kitty (qui laisse des traces "
+"rose) tandis que dans le second monde, un bon gros escargot du désert attend "
+"la buggle au bout de sa piste orange."
 
-#. type: Content of: <a>
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:21
+#. type: Content of: <p>
+#: src/lessons/welcome/slug/SlugSnail.html:7
 msgid ""
-"<a name=\"Objectives\">Complete the <code>isFacingTrail()</code> method "
-"(which gets called by <code>hunt()</code> automatically). You don't have to "
-"write the <code>hunt()</code> method."
+"You have to copy/paste your code again, and change it so that your methods "
+"take the color of the trail to follow as a parameter. Beside of this, your "
+"code should work as earlier."
 msgstr ""
-"<a name=\"Objectifs\"> Complétez la méthode <code>isFacingTrail()</code> qui "
-"sera appelée par la méthode <code>hunt()</code> définissant le comportement "
-"par défaut de votre buggle.  Vous n'avez pas à écrire la méthode <tt>hunt()</"
-"tt>."
+"Il vous faut copie/coller votre code encore une fois, et le modifier pour "
+"que vos méthodes prennent la couleur de piste à suivre en paramètre. À part "
+"cela, votre code devrait faire comme avant."
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:3
 msgid ""
 "We will now teach the buggle to explore its world. Its initial position is "
@@ -6387,7 +6606,7 @@ msgstr ""
 " tant que l'on est pas à la position finale\n"
 "   avancer comme un serpent\n"
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:13
 msgid "The prototype of this method (its first line) must be:"
 msgstr "Le prototype de cette méthode (sa première ligne) doit être :"
@@ -6398,7 +6617,7 @@ msgstr "Le prototype de cette méthode (sa première ligne) doit être :"
 msgid "public void run()"
 msgstr "public void run()"
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:15
 msgid ""
 "(we will come back later on the meaning of <code>public</code>). We thus "
@@ -6413,15 +6632,17 @@ msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:20
-msgid "We reached the final position if and only if:"
-msgstr "On se trouve sur une position finale si et seulement si :"
+msgid "We reached the final position if and only if both conditions are true:"
+msgstr ""
+"On se trouve sur une position finale si et seulement si les deux conditions "
+"suivantes sont vraies.:"
 
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/welcome/snake/Snake.html:22
 msgid "We are facing a wall"
 msgstr "On est face à un mur"
 
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/welcome/snake/Snake.html:23
 msgid ""
 "There is a wall on the north of the buggle. So, if the buggle is facing "
@@ -6432,7 +6653,7 @@ msgstr ""
 "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."
 
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/welcome/snake/Snake.html:26
 msgid ""
 "We can get the current heading of the buggle using the <code>getDirection()</"
@@ -6443,7 +6664,7 @@ msgstr ""
 "<code>getDirection()</code>, et on sait si elle regarde à l'est avec le test "
 "<code>getDirection() == Direction.EAST</code> (WEST pour ouest)."
 
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/welcome/snake/Snake.html:29
 msgid ""
 "For the checking itself, nothing magical: you have to turn the buggle and "
@@ -6473,25 +6694,37 @@ msgstr ""
 "continuer tant que la fonction adéquate renvoie faux. On peut l'écrire de "
 "deux façons:"
 
-#. type: Content of: <p><pre>
+#. type: Content of: <pre>
 #: src/lessons/welcome/snake/Snake.html:39
 #, no-wrap
 msgid "while (testingFunction() == false)"
 msgstr "while (fonctionTest() == false)"
 
-#. type: Content of: <p>
+#. type: Content of: <pre>
 #: src/lessons/welcome/snake/Snake.html:40
+#, no-wrap
+msgid "while testingFunction() == False:"
+msgstr "while fonctionTest() == false:"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/snake/Snake.html:41
 msgid "or"
 msgstr "ou bien"
 
-#. type: Content of: <p><pre>
-#: src/lessons/welcome/snake/Snake.html:41
+#. type: Content of: <pre>
+#: src/lessons/welcome/snake/Snake.html:42
 #, no-wrap
 msgid "while (! testingFunction())"
 msgstr "while (! fonctionTest())"
 
+#. type: Content of: <pre>
+#: src/lessons/welcome/snake/Snake.html:43
+#, no-wrap
+msgid "while not testingFunction():"
+msgstr "while not fonctionTest():"
+
 #. type: Content of: <p>
-#: src/lessons/welcome/snake/Snake.html:42
+#: src/lessons/welcome/snake/Snake.html:44
 msgid ""
 "It works because the exclamation mark (!) means in Java a boolean negation."
 msgstr ""
@@ -6517,8 +6750,13 @@ msgstr ""
 "La boucle principale de la méthode <code>run()</code> (que vous devez "
 "écrire)  est de la forme :"
 
-#. type: Content of: <p><pre>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:9
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:8
+msgid "The main loop of your code should be something like:"
+msgstr "La boucle principale du code que vous devez écrire est de la forme :"
+
+#. type: Content of: <p><p><p><p><p><pre>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:10
 #, no-wrap
 msgid ""
 " while we are not on the final position\n"
@@ -6529,25 +6767,25 @@ msgstr ""
 "   aller à la prochaine position\n"
 "   marquer le numéro de case au sol \n"
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:14
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:15
 msgid ""
-"In contrary to the exercises we saw so far, we won't use the <code>forward()"
-"</code>, <code>backward()</code> and similar methods. Instead, we will "
-"compute the coordinate of the next buggle position and use the <code>setPos"
-"(int, int)</code> method to <i>teleport</i> the buggle directly to this "
-"position. For example, <code>setPos(3, 5)</code> teleports the buggle to the "
-"cell where x=3 and y=5."
+"In contrary to the exercises we saw so far, we won't use the "
+"<code>forward()</code>, <code>backward()</code> and similar methods. "
+"Instead, we will compute the coordinate of the next buggle position and use "
+"the <code>setPos(x, y)</code> method to <i>teleport</i> the buggle directly "
+"to this position. For example, <code>setPos(3, 5)</code> teleports the "
+"buggle to the cell where x=3 and y=5."
 msgstr ""
 "À la différence des exercices vus jusque là, nous n'allons pas utiliser les "
 "méthodes <code>forward()</code>, <code>backward()</code> et autres, mais "
 "nous allons calculer les coordonnées de la prochaine position de la buggle, "
-"et utiliser la méthode <code>setPos(int, int)</code> pour <i>téléporter</i> "
-"la buggle directement à cette position. Par exemple, <code>setPos(3, 5)</"
-"code> téléporte la buggle sur la case où x=3 et y=5."
+"et utiliser la méthode <code>setPos(x, y)</code> pour <i>téléporter</i> la "
+"buggle directement à cette position. Par exemple, <code>setPos(3, 5)</code> "
+"téléporte la buggle sur la case où x=3 et y=5."
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:21
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:22
 msgid ""
 "Your first task is thus to write a boolean function indicating whether the "
 "buggle the final position or not, ie if it reached the bottom right corner "
@@ -6559,21 +6797,22 @@ msgid ""
 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>getWorldWidth"
-"()</code> et <code>getWorldHeight()</code> qui retournent respectivement la "
-"largeur et la hauteur 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 dimensions du monde."
+"droite du monde.  Vous utiliserez pour cela les méthodes "
+"<code>getWorldWidth()</code> et <code>getWorldHeight()</code> qui retournent "
+"respectivement la largeur et la hauteur 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 "
+"dimensions du monde."
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:28
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:29
 msgid "Beware, the first line and column are numbered 0 and not 1..."
 msgstr ""
 "Attention, la première ligne et la première colonne sont numérotées 0 et non "
 "1..."
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:30
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:31
 msgid ""
 "Then, you have to write the code to reach the next position. In this "
 "exercise, you have to traverse the world row after row. So, if you are at "
@@ -6585,8 +6824,8 @@ msgstr ""
 "tout en bas d'une colonne, il faut aller en haut de la colonne suivante et "
 "sinon, il faut aller à la case du dessous."
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:35
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:36
 msgid ""
 "At this point, you can launch your program to check that the buggle "
 "correctly traverse the world in the expected order, and that it stops when "
@@ -6597,23 +6836,23 @@ msgstr ""
 "faut. Pensez à utiliser le bouton <b>stop</b> pour arrêter l'exécution si "
 "votre programme ne se termine pas correctement."
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:39
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:40
 msgid ""
 "It is now time to write done the cell numbers. For that, you will need a "
 "counter initialiser to zero at the begining of your <code>run()</code> "
-"method, and incremented by one at each step (for example with <code>counter+"
-"+;</code>). Then, you have to write the value on the ground, for example "
+"method, and incremented by one at each step (for example with <code>counter "
+"+= 1;</code>). Then, you have to write the value on the ground, for example "
 "with <code>writeMessage(counter);</code>."
 msgstr ""
 "Il est temps d'écrire au sol les numéros de case. Pour cela, vous aurez "
-"besoin d'un compteur initialisé à zéro au début de votre méthode <code>run()"
-"</code>, et incrémenté de un à chaque pas (par exemple avec <code>cpt++;</"
-"code>). Ensuite, il faut écrire la valeur de ce compteur au sol à chaque "
-"pas, par exemple avec <code>writeMessage(cpt);</code>."
+"besoin d'un compteur initialisé à zéro au début de votre méthode "
+"<code>run()</code>, et incrémenté de un à chaque pas (par exemple avec "
+"<code>cpt += 1;</code>). Ensuite, il faut écrire la valeur de ce compteur au "
+"sol à chaque pas, par exemple avec <code>writeMessage(cpt);</code>."
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:45
+#. type: Content of: <p><p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:46
 msgid ""
 "You probably need to write the first or last value out of the main loop, "
 "depending on whether you prefer to use a <code>while {}</code> or a <code>do "
@@ -6623,6 +6862,15 @@ msgstr ""
 "case en dehors de la boucle principale, selon que vous utilisez un "
 "<code>while {}</code> ou un <code>do {} while</code>..."
 
+#. type: Content of: <p><p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:50
+msgid ""
+"You may want to write the first value out of the main <code>while ...:</"
+"code> loop."
+msgstr ""
+"Si vous le souhaitez, vous pouvez écrire la première valeur en dehors de la "
+"boucle <code>while ....:</code>."
+
 #. type: Content of: outside any tag (error?)
 #: src/lessons/welcome/traversal/line/TraversalByLine.html:3
 msgid ""
@@ -6669,13 +6917,119 @@ msgstr ""
 "Cette fois, il faut parcourir le monde en zig-zag. Regardez le monde "
 "objectif pour voir les détails de l'ordre de parcours demandé."
 
+#. type: Content of: <h3>
+#: src/lessons/turmites/Main.html:1 src/lessons/turmites/short_desc.html:1
+msgid "The turmites"
+msgstr "Les turmites"
+
+#. type: Content of: <p>
+#: src/lessons/turmites/Main.html:3
+msgid ""
+"This set of activities lets you play with Langton's ants, that are 2D turing "
+"machines. They constitute very simple application problems, achievable by "
+"beginners, and open the door to an amazing world."
+msgstr ""
+"Cet ensemble d'activités vous permet de jouer avec les fourmis de Langton, "
+"qui sont des machines de Turing à deux dimensions. Il s'agit d'exercices "
+"d'application très simple, à la portée de débutants, mais ils ouvrent la "
+"porte sur un univers fascinant."
+
+#. type: Content of: <p>
+#: src/lessons/turmites/Main.html:7
+msgid ""
+"This mechanism were invented in 1986 by Chris Langton, and later generalized "
+"in several ways (as we shall see in the next exercises). It was proven in "
+"2000 that the ant's trajectory can be used to compute any boolean circuit, "
+"and thus that the ant is capable of universal computation (ie, any possible "
+"computation can be achieved using the ant as a computing device). Yet "
+"another subject of fascination..."
+msgstr ""
+"Ce mécanisme a été inventé en 1986 par Chris Langton, et généralisé après de "
+"plusieures façons (comme nous le verrons dans les prochains exercices). Il a "
+"été prouvé en 2000 que la trajectoire de la fourmi peut être utilisée pour "
+"calculer n'importe quel circuit booléen, et que la fourmi est capable de "
+"calcul universel ( ie, n'importe quel calcul possible peut être réalisé en "
+"utilisant la fourmi comme instrument de calcul). Encore un autre sujet de "
+"fascination..."
+
+#. type: Content of: <p>
+#: src/lessons/turmites/Main.html:13
+msgid ""
+"Multicolor Langton's ants were discovered in 1995 by Propp et Al. Another "
+"funny fact is that the ants which name is a list of consecutive pair of "
+"identical letters (LL and RR) produce symmetric patterns. This fact was even "
+"formally proved."
+msgstr ""
+"Les fourmis de Langton multicolores ont été découvertes en 1995 par Propp et "
+"Al. Un fait amusant est que les fourmis dont le nom est une paire de lettres "
+"identiques (LL et RR) produisent des dessins symétriques. Ce fait a même été "
+"prouvé formellement."
+
+#. type: Content of: <p>
+#: src/lessons/turmites/Main.html:18
+msgid ""
+"Check the corresponding wikipedia web page, of which this exercise is "
+"inspired, for further details."
+msgstr ""
+"Consultez la page correspondante sur Wikipedia, à partir de laquelle cet "
+"exercice est inspiré, pour d'avantages de détails."
+
+#. type: Content of: <h3>
+#: src/lessons/turmites/Main.html:21 src/lessons/sort/pancake/Main.html:29
+#: src/lessons/sort/baseball/Main.html:27
+msgid "What can I do to improve this JLM universe?"
+msgstr "Que puis-je faire pour améliorer cet univers de JLM?"
+
+#. type: Content of: <p>
+#: src/lessons/turmites/Main.html:23 src/lessons/sort/pancake/Main.html:31
+#: src/lessons/sort/baseball/Main.html:29
+msgid ""
+"As usual, there are several things that could be done in the code of this "
+"universe to improve it:"
+msgstr ""
+"Comme souvent, plusieurs points pourraient être améliorés dans le code de "
+"cet univers pour l'améliorer :"
+
+#. type: Content of: <ul><li>
+#: src/lessons/turmites/Main.html:25
+msgid ""
+"We are probably missing some good exercises. The turmite creator exercise is "
+"a bit harsh: we could introduce the patterns in a more friendly manner."
+msgstr ""
+"Il nous manque probablement quelques exercices progressifs. Celui sur la "
+"création de turmites est particulièrement aride. Nous devrions probablement "
+"introduire les motifs de façon plus pédagogique."
+
+#. type: Content of: <ul><li>
+#: src/lessons/turmites/Main.html:27
+msgid "We may want to write an exercise on the busy beaver, maybe?"
+msgstr ""
+"Il serait peut-être amusant d'introduire un exercice sur les castors occupés "
+"(busy beavers)?"
+
+#. type: Content of: <p>
+#: src/lessons/turmites/short_desc.html:2
+msgid "Discover the Langton's ants, that are 2D turing machines."
+msgstr ""
+"Découvrez les fourmis de Langton, qui sont des machines de Turing à deux "
+"dimensions."
+
+#. type: Content of: <p>
+#: src/lessons/turmites/short_desc.html:4
+msgid ""
+"These activities are very simple application problems, achievable by "
+"beginners, and open the door to an amazing world."
+msgstr ""
+"Ces activités sont très simples, à la portée de débutants, et elles ouvrent "
+"la porte sur un univers fascinant."
+
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/langton/Langton.html:1
+#: src/lessons/turmites/langton/Langton.html:1
 msgid "Langton's ant"
 msgstr "La fourmi de Langton"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:3
+#: src/lessons/turmites/langton/Langton.html:3
 msgid ""
 "In this exercise, you will turn your buggle into a <i>Langton's ant</i>. "
 "These artificial little animals are very interesting because they are given "
@@ -6689,13 +7043,13 @@ msgstr ""
 "chaotique, un schéma général <i>apparaît</i>"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:8
+#: src/lessons/turmites/langton/Langton.html:8
 msgid ""
 "The rules are absolutely trivial: to compute what the next step should be, "
-"you should check the current color of the ground (using <code>getGroundColor"
-"()</code>). If it's white, change it to black, turn right and move forward "
-"by one cell. If the ground is currently black, change it to white, turn left "
-"and move forward by one cell."
+"you should check the current color of the ground (using "
+"<code>getGroundColor()</code>). If it's white, change it to black, turn "
+"right and move forward by one cell. If the ground is currently black, change "
+"it to white, turn left and move forward by one cell."
 msgstr ""
 "Les règles sont absolument triviales: pour calculer quel sera le prochain "
 "pas, vous devez regarder la couleur actuelle du sol ( en utilisant "
@@ -6704,27 +7058,36 @@ msgstr ""
 "en blanc, tournez à gauche et avancez d'une case."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:14
+#: src/lessons/turmites/langton/Langton.html:14
 msgid ""
 "It's hard to come up with simpler rules isn't it? Well, let's go and code it "
 "now. You have to complete the <code>step()</code> method, which encodes the "
 "behavior of the ant at each step. You will probably use the "
 "<code>getGroundColor()</code> method to retrieve the color of the cell on "
-"which the ant is currently. To compare colors, you cannot use the equal sign "
-"(=), because these things are not scalar values but objects. Instead, you "
-"need to write something like the following:"
+"which the ant is currently.  Colors of interest are simply named <code>Color."
+"black</code> and <code>Color.white</code>."
 msgstr ""
 "Il est difficile de trouver des règles plus simples, n'est-ce pas ? Et bien, "
-"allons-y et codons les maintenant. Vous avez à compléter la méthode "
+"allons-y et codons-les maintenant. Vous avez à compléter la méthode "
 "<code>step()</code>, qui définit le comportement de la fourmi à chaque pas. "
 "Vous utiliserez probablement la méthode <code>getGroundColor()</code> pour "
-"récupérer la valeur de la case sur laquelle la fourmi se trouve. Pour "
-"comparer des couleurs, vous ne pouvez pas utiliser le signe égal (=), parce "
-"que les couleurs ne sont pas des valeurs scalaires mais des objets. A la "
-"place, vous aurez besoin d'écrire quelquechose comme:"
+"récupérer la valeur de la case sur laquelle la fourmi se trouve. Les "
+"couleurs intéressantes sont tout simplement <code>Color.black</code> pour le "
+"noir ou <code>Color.white</code> pour le blanc."
+
+#. type: Content of: <p>
+#: src/lessons/turmites/langton/Langton.html:20
+msgid ""
+"To compare colors, you cannot use the equal sign (=), because these things "
+"are not scalar values but objects. Instead, you need to write something like "
+"the following:"
+msgstr ""
+"Pour comparer les couleurs, il n'est pas possible d'utiliser le signe égal "
+"(=) parce ces choses ne sont pas des valeurs scalaires normales mais des "
+"objets. À la place, vous devez écrire quelque chose comme cela :"
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/turmites/langton/Langton.html:22
+#: src/lessons/turmites/langton/Langton.html:24
 #, no-wrap
 msgid ""
 "Color c /* = some initialization */;\n"
@@ -6742,77 +7105,46 @@ msgstr ""
 "}\n"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:30
+#: src/lessons/turmites/langton/Langton.html:32
 msgid ""
 "Changing the ground color is not difficult, but a bit long: you have to "
 "change the brush color of your buggle, set the brush down (to mark the "
 "current cell -- with <code>brushDown()</code>), and set the brush back up "
 "(with <code>brushUp()</code>) to avoid further issues when the buggle will "
 "move. You are naturally free of organizing your code the way you want, but "
-"you may want to write a <code>void setGroundColor(Color c)</code> method to "
+"you may want to write a <code>setGroundColor(color)</code> method to "
 "factorize things a bit."
 msgstr ""
 "Changer la couleur du sol n'est pas difficile, seulement un peu long : vous "
-"avez à changer la couleur de la brosse de votre buggle, l'abaisser ( pour "
-"marquer la case courante -- avec <code>brushDown()</code>, et relever la "
+"avez à changer la couleur de la brosse de votre buggle, l'abaisser (pour "
+"marquer la case courante -- avec <code>brushDown()</code>), et relever la "
 "brosse (avec <code>brushUp()</code>) pour éviter des problèmes lorsque la "
 "buggle va se déplacer. Vous être naturellement libre d'organiser votre code "
 "comme vous le souhaitez, mais vous pouvez vouloir écrire une méthode "
-"<code>void setGroundColor(Color c)</code> pour factoriser le tout."
-
-#. type: Content of: <h2>
-#: src/lessons/welcome/turmites/langton/Langton.html:38
-msgid "More information on Langton's ant"
-msgstr "Plus d'informations sur la fourmi de Langton"
+"<code>setGroundColor(couleur)</code> pour factoriser le tout."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:40
+#: src/lessons/turmites/langton/Langton.html:39
 msgid ""
 "As you can see from the execution of this exercise, the interest in this "
 "algorithm is that after about 10000 steps of relative chaotic behavior, the "
 "ant start building a regular pattern. This emergence of a regular pattern "
-"from the chaos is rather fascinating, isn't it?"
+"from the chaos is rather fascinating, isn't it? Move on to the next exercise "
+"to see more of them."
 msgstr ""
 "Comme vous pouvez le constater avec l'exécution de cet exercice, l'intérêt "
 "dans cet algorithme est qu'après environ 10 000 pas de comportement "
 "relativement chaotique, la fourmi commence à suivre un schéma régulier. "
 "L'émergence de ce schéma régulier à partir du chaos est réellement "
-"fascinant, n'est-ce pas ?"
+"fascinant, n'est-ce pas ? Passez à l'exercice suivant pour en voir plus."
+
+#. type: Content of: <h2>
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:1
+msgid "Multicolor Langton's ant"
+msgstr "La fourmi de Langton multicolore"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:45
-msgid ""
-"This mechanism were invented in 1986 by Chris Langton, and later generalized "
-"in several ways (as we shall see in the next exercises). It was proven in "
-"2000 that the ant's trajectory can be used to compute any boolean circuit, "
-"and thus that the ant is capable of universal computation (ie, any possible "
-"computation can be achieved using the ant as a computing device). Yet "
-"another subject of fascination..."
-msgstr ""
-"Ce mécanisme a été inventé en 1986 par Chris Langton, et généralisé après de "
-"plusieures façons (comme nous le verrons dans les prochains exercices). Il a "
-"été prouvé en 2000 que la trajectoire de la fourmi peut être utilisée pour "
-"calculer n'importe quel circuit booléen, et que la fourmi est capable de "
-"calcul universel ( ie, n'importe quel calcul possible peut être réalisé en "
-"utilisant la fourmi comme instrument de calcul). Encore un autre sujet de "
-"fascination..."
-
-#. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:51
-msgid ""
-"Check the corresponding wikipedia web page, of which this exercise is "
-"inspired, for further details."
-msgstr ""
-"Consultez la page correspondante sur Wikipedia, à partir de laquelle cet "
-"exercice est inspiré, pour d'avantages de détails."
-
-#. type: Content of: <h2>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:1
-msgid "Multicolor Langton's ant"
-msgstr "La fourmi de Langton multicolore"
-
-#. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:3
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:3
 msgid ""
 "There is several ways to extend the concept of Langton's ant. In this "
 "exercise, we explore first one, using more than two colors. It remains very "
@@ -6836,7 +7168,7 @@ msgstr ""
 "blanches et à gauche sur les noires)."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:12
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:12
 msgid ""
 "Some of these ants draw fascinating patterns (switch the world to see them): "
 "LLRR build a symmetric figure resembling loosely to a ball, LRRRRRLLR draws "
@@ -6850,7 +7182,7 @@ msgstr ""
 "RRLLLRLLLRRR semble remplir un sablier..."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:17
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:17
 msgid ""
 "Changing your buggle into a generic Langton's ant is not very complicated, "
 "although it is not completely trivial. As previously, you have to write a "
@@ -6869,17 +7201,36 @@ msgstr ""
 "code> et <code>{Color.white, Color.black}</code> comme arguments."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:24
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:24
+msgid ""
+"Changing your buggle into a generic Langton's ant is not very complicated, "
+"although it is not completely trivial. As previously, you have to write a "
+"<code>step</code> function. But this time, it receives two arrays as "
+"parameters.  The first one defines the rules to follow depending on the "
+"ground color while the second one gives the sequence of colors to use. For "
+"example, the basic ant would have <code>['R', 'L']</code> and <code>[Color."
+"white, Color.black]</code> as arguments."
+msgstr ""
+"Métamorphoser votre buggle en une fourmi de Langton générique n'est pas très "
+"compliqué, même si ce n'est pas complètement trivial. Comme précédemment, "
+"vous avez à écrire une fonction <code>step</code>. Mais cette fois, elle "
+"reçoit deux tableaux comme paramètres. Le premier définit les règles à "
+"suivre selon la couleur du sol tandis que le deuxième done la séquence de "
+"couleur à utiliser. Par exemple, la fourmi de base aurait <code>['R', 'L']</"
+"code> et <code>[Color.white, Color.black]</code> comme arguments."
+
+#. type: Content of: <p>
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:31
 msgid "At each step, you thus have to apply the following pseudo-code:"
 msgstr "A chaque pas, vous avez toujours à appliquer le pseudo-code suivant :"
 
 #. type: Content of: <ul><li>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:26
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:33
 msgid "Find the position of the ground color in the color sequence;"
 msgstr "Trouver la position de la couleur du sol dans la séquence de couleur;"
 
 #. type: Content of: <ul><li>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:27
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:34
 msgid ""
 "Turn left or right depending on the content of the rule array at that "
 "position;"
@@ -6888,7 +7239,7 @@ msgstr ""
 "position;"
 
 #. type: Content of: <ul><li>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:28
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:35
 msgid ""
 "Mark the current ground with the next color in the sequence (the last color "
 "being followed by the first one);"
@@ -6897,42 +7248,23 @@ msgstr ""
 "séquence ( la dernière couleur est suivie par la première);"
 
 #. type: Content of: <ul><li>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:29
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:36
 msgid "Move forward by one step."
 msgstr "Avancer d'un pas"
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:32
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:52
+#. type: Content of: <p>
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:39
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:70
 msgid "You now should have enough information to succeed."
 msgstr "Vous devriez maintenant avoir assez d'informations pour réussir."
 
-#. type: Content of: <p><h2>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:34
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:54
-msgid "Bibliographical notes"
-msgstr "Notes bibliographiques"
-
-#. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:35
-msgid ""
-"According to wikipedia, multicolor Langton's ants were discovered in 1995 by "
-"Propp et Al. Another funny fact is that the ants which name is a list of "
-"consecutive pair of identical letters (LL and RR) produce symmetric "
-"patterns. This fact was even formally proved."
-msgstr ""
-"Selon Wikipedia, les fourmis de Langton multicolores ont été découvertes en "
-"1995 par Propp et Al. Un autre fait amusant est que les fourmis dont le nom "
-"est une paire de lettres identiques (LL et RR) produisent des dessins "
-"symétriques. Ce fait a même été prouvré formellement."
-
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:1
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:1
 msgid "Turmites"
 msgstr "Turmites"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:3
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:3
 msgid ""
 "This exercise explores a new way to extend the concept of Langton's ant. "
 "Now, the behavior of the ant not only depends on the color on the ground, "
@@ -6945,96 +7277,100 @@ msgid ""
 msgstr ""
 "Cette exercice explore une nouvelle façon d'étendre le concept de la fourmi "
 "de Langton. Maintenant, le comportement de la fourmi ne dépend plus "
-"seulement de la couleur du sol, mais aussi de son état interne ( représenté "
-"par une valeur entière ). L'idée de changer la fourmi en un automate découle "
+"seulement de la couleur du sol, mais aussi de son état interne (représenté "
+"par une valeur entière). L'idée de changer la fourmi en un automate découle "
 "naturellement du concept de la machine de Turing. Ceci explique le nom de "
 "ces nouveaux animaux, qui est un mélange de <i>Turing</i> et de <i>Termite</"
-"i> ( si vous ne savez pas ce qu'est une machine de Turing, vous devriez vous "
+"i> (si vous ne savez pas ce qu'est une machine de Turing, vous devriez vous "
 "jeter sur Wikipedia parce qu'il est tout simplement impossible d'être un "
 "vrai informaticien sans le savoir)."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:12
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:12
 msgid ""
 "Once again, you just have to write the <code>step()</code> method, in charge "
 "of doing one turmite's step. Once again, you should first find the rank of "
-"the current's cell ground color in the color sequence. The <code>colors</"
-"code> array is not passed as parameter but declared as global variable. It "
-"shouldn't change anything for us since this array was never modified during "
-"the execution. This trick to pass constant parameters is not very clean, but "
-"it should help performance a bit."
-msgstr ""
-"Encore une fois, vous avez seulement à écrire la méthode <code>step()</"
-"code>, dont le but est de réaliser un pas de turmite.\n"
-"Encore une fois, vous devez tout d'abord trouver la rang de la couleur de la "
-"case actuelle dans la séquence de couleur.\n"
-"Le tableau <code>colors</code> n'est pas passé en tant que paramètre mais "
-"est déclaré comme une variable globale. Cela ne devrait rien changer pour "
-"nous pouisque ce tableau n'a jamais été modifié pendant l'exécution. Cette "
-"astuce pour passer des paramètres constants n'est pas très propre, mais cela "
-"devrait améliorer un peu les performances."
-
-#. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:20
-msgid ""
-"The second step is to use the <code>rule</code> data depending on the "
-"current color and the current state. <code>rule</code> actually contains 3 "
-"information in each situation: the color to write, the move to do, and the "
-"next state value. For example, rule[1][0] contains the informations to use "
-"when <code>state==1</code> and <code>color==0</code>. In other worlds, you "
-"can retrieve the information relative to your current situation by using "
-"<code>rule[state][currentColor]</code>."
-msgstr ""
-"La deuxième étape est d'utiliser la donnée <code>rule</code> selon la "
-"couleur actuelle et l'état courant.\n"
-"<code>rule</code> contient en fait trois informations dans chaque "
-"situation : la couleur à mettre, le mouvement à effectuer, et la valeur du "
-"prochain état. Par exemple, rule[1][0] contient l'information à utiliser "
-"quand <code>state==1</code> et <code>color==0</code>. En d'autres mots, vous "
-"pouvez récupérer l'information relative à votre situation actuelle en "
-"utilisant <code>rule[etatCourant][couleurActuelle]</code>"
-
-#. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:27
+"the current's cell ground color in the color sequence. But this time, the "
+"<code>rule</code> data depends both on the current color and the current "
+"state.  <code>rule</code> actually contains 3 information in each situation: "
+"the color to write, the move to do, and the next state value. For example, "
+"rule[1][0] contains the informations to use when <code>state==1</code> and "
+"<code>color==0</code>. In other worlds, you can retrieve the information "
+"relative to your current situation by using <code>rule[state][currentColor]</"
+"code>."
+msgstr ""
+"Une fois encore, vous devez seulement écrire la méthode <code>step()</code>, "
+"qui s'occupe de faire faire un pas à la turmite. Une fois encore, vous devez "
+"tout d'abord trouver le rang de la couleur actuelle du sol dans la liste des "
+"couleurs. Mais cette fois, <code>rule</code> dépend à la fois de la couleur "
+"courante et de l'état courant. <code>rule</code> contient en fait trois "
+"informations dans chaque situation : la couleur à mettre, le mouvement à "
+"effectuer, et la valeur du prochain état. Par exemple, rule[1][0] contient "
+"l'information à utiliser quand <code>state==1</code> et <code>color==0</"
+"code>. En d'autres mots, vous pouvez récupérer l'information relative à "
+"votre situation actuelle en utilisant <code>rule[etatCourant]"
+"[couleurActuelle]</code>"
+
+#. type: Content of: <p>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:22
 msgid ""
 "Each such information set contains 3 values. The first one is the rank of "
 "the color to write on the ground. The second is the move to do, with the "
 "following notation: 0=stop, 1=noturn, 2=right, 4=u-turn, 8=left. Note that "
 "if the command is stop, you shouldn't even move forward on that step (but "
-"you shouldn't stop your program either: the next steps can do something "
-"else). Finally, the third integer is the next <code>state</code> value to go "
-"into after this iteration."
+"you shouldn't stop your program either: the next steps can do something else "
+"in a future state). Finally, the third integer is the next <code>state</"
+"code> value to go into after this iteration."
 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=droite, 4=demi-tour, 8=gauche. 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 quelquechose d'autre). Finalement, le troisième entier est "
-"la valeur du prochain <code>state</code> à avoir après cette itération."
+"(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 "
+"est la valeur du prochain <code>state</code> à avoir après cette itération."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:34
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:29
 msgid ""
 "Since these arbitrary notations are somehow difficult to remember, the "
 "template code defines a set of constants that you should use instead of the "
 "direct numerical values. Their names are NOTURN, LEFT, RIGHT and so on. The "
 "modifiers <code>final static</code> before their type is the way to mark "
 "variables as constant in Java (sorry if the notation seems complex). Using "
-"such constants greatly help making the code easier to read, since"
+"such constants greatly help making the code easier to read. This allows to "
+"write things this way:"
 msgstr ""
 "Puisque ces notations arbitraires sont parfois difficiles à se souvenir, le "
 "code fourni définit un ensemble de constantes que vous pouvez utiliser à la "
 "place des valeurs numériques. Leurs noms sont LEFT, RIGHT, etc.\n"
 "Le modifieur <code>final static</code> avant leur type est la façon "
-"d'indiquer les variables comme constantes en Java ( nous nous excusons si la "
-"notation semble complexe ).\n"
-"Utiliser de telles constantes rend le code beaucoup plus simple à lire, "
-"puisque"
+"d'indiquer les variables comme constantes en Java (désolés si la notation "
+"semble complexe).\n"
+"Utiliser de telles constantes rend le code beaucoup plus simple à lire :"
 
-#. type: Content of: <p><pre>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:41
+#. type: Content of: <p>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:35
+msgid ""
+"Since these arbitrary notations are somehow difficult to remember, the "
+"template code defines a set of constants that you should use instead of the "
+"direct numerical values. Their names are NOTURN, LEFT, RIGHT and so on. By "
+"convention, such constant variables are written in upper case in python. "
+"Technically, you can still modify them, but that would be a very bad idea. "
+"Using such constants greatly help making the code easier to read, as it "
+"allows to write things this way:"
+msgstr ""
+"Puisque ces notations arbitraires sont parfois difficiles à se souvenir, le "
+"code fourni définit un ensemble de constantes que vous pouvez utiliser à la "
+"place des valeurs numériques. Leurs noms sont NOTURN, LEFT, RIGHT, etc. "
+"(pour TOUTDROIT, GAUCHE, DROITE). Par convention, de telles constantes sont "
+"écrites en majuscules en python. Techniquement, vous pouvez modifier la "
+"valeur de ces variables, but ce serait une très mauvause idée.\n"
+"Utiliser de telles constantes rend le code beaucoup plus simple à lire :"
+
+#. type: Content of: <pre>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:42
 #, no-wrap
 msgid ""
 "  if (rule[state][currentColor][NEXT_MOVE] == LEFT) {\n"
@@ -7045,13 +7381,23 @@ msgstr ""
 "    turnLeft();\n"
 "  }\n"
 
+#. type: Content of: <pre>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:47
+#, no-wrap
+msgid ""
+"  if rule[state][currentColor][NEXT_MOVE] == LEFT:\n"
+"    turnLeft()\n"
+msgstr ""
+"  if rule[state][currentColor][NEXT_MOVE] == LEFT:\n"
+"    turnLeft()\n"
+
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:45
-msgid "is much more easier to read than"
-msgstr "est beaucoup plus simple à lire que"
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:50
+msgid "This is much more easier to read than the following way:"
+msgstr "C'est beaucoup plus simple à lire que ceci :"
 
-#. type: Content of: <p><pre>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:47
+#. type: Content of: <pre>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:52
 #, no-wrap
 msgid ""
 "  if (rule[x][y][1] == 2) {\n"
@@ -7062,8 +7408,47 @@ msgstr ""
 "    turnLeft();\n"
 "  }\n"
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:55
+#. type: Content of: <pre>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:57
+#, no-wrap
+msgid ""
+"  if rule[x][y][1] == 2:\n"
+"    turnLeft()\n"
+msgstr ""
+"  if rule[x][y][1] == 2:\n"
+"    turnLeft()\n"
+
+#. type: Content of: <p>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:61
+msgid ""
+"Finally, you probably want to write a <code>elif</code> branch for the "
+"<code>STOP</code> condition too. Having a <code>else</code> branch "
+"displaying an error message such as \"unknown case\" is a good practice: it "
+"makes your assumptions about your code more explicit, and you will get an "
+"error message if they fall short. When doing so, the next problem is that "
+"you have nothing to do in the <code>STOP</code> case, but python do not "
+"allows you to write empty <code>elif</code> branches. You should use the "
+"<code>pass</code> instruction as a placeholder: it says python that you have "
+"a branch here, and that it does not contain anything."
+msgstr ""
+"Enfin, vous devriez également écrire une branche <code>elif</code> pour la "
+"condition <code>STOP</code>. Avoir une branche <code>else</code> qui affiche "
+"un message d'erreur tel que \"situation inattendue\" est une bonne pratique. "
+"Celà permet d'expliciter les présuposés du code, et assure un message "
+"d'erreur plus explicite si ces suppositions s'avèrent erronées. Le problème "
+"suivant est que nous n'avons rien à faire faire dans la branche du cas "
+"<code>STOP</code>, mais que python n'autorise pas de branche <code>else</"
+"code> vide. Il faut alors utiliser l'instruction <code>pass</code> là où il "
+"n'y a rien à faire. Cela indique à Python qu'il y a bien une branche à cet "
+"emplacement, mais qu'elle ne fait rien."
+
+#. type: Content of: <h2>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:72
+msgid "Bibliographical notes"
+msgstr "Notes bibliographiques"
+
+#. type: Content of: <p>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:73
 msgid ""
 "According to wikipedia, turmites were invented independently by the end of "
 "the eighties. It has been shown that turmites in general are exactly "
@@ -7080,12 +7465,12 @@ msgstr ""
 "théoriquement être calculé sur cet outil."
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:1
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:1
 msgid "Creating Turmites"
 msgstr "Créer des Turmites"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:3
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:3
 msgid ""
 "This exercise allows you to build your own turmites. To pass the exercise, "
 "you should simply write a <code>init()</code> method which initializes the "
@@ -7095,65 +7480,65 @@ msgstr ""
 "Cet exercice vous permet de construire vos propres turmites. Pour réussir "
 "cet exercice, vous devez simplement écrire une méthode <code>init()</code> "
 "qui initialise <code>rule</code> pour utiliser les tables de transitions "
-"suivantes ( de Wikipedia ), met la position initiale du buggle à (8;33), et "
+"suivantes (de Wikipedia), met la position initiale du buggle à (8;33), et "
 "demande de faire 8342 pas."
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:10
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:10
 msgid "Current color"
 msgstr "Couleur actuelle"
 
 #. type: Content of: <table><tr><td>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:13
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:28
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:31
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:39
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:41
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:42
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:13
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:28
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:31
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:39
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:41
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:42
 msgid "0"
 msgstr "0"
 
 #. type: Content of: <table><tr><td>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:14
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:29
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:32
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:34
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:37
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:44
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:14
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:29
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:32
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:34
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:37
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:44
 msgid "1"
 msgstr "1"
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:18
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:21
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:18
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:21
 msgid "Write color"
 msgstr "Couleur à mettre"
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:19
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:22
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:19
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:22
 msgid "Turn"
 msgstr "Virage"
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:20
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:23
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:20
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:23
 msgid "Next state"
 msgstr "État suivant"
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:26
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:26
 msgid "Current state"
 msgstr "État courant"
 
 #. type: Content of: <table><tr><td>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:40
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:43
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:40
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:43
 msgid "N"
 msgstr "N"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:48
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:48
 msgid ""
 "where the direction to turn is one of <b>L</b> (90° left), <b>R</b> (90° "
 "right), <b>N</b> (no turn) and <b>U</b> (180° U-turn)."
@@ -7165,12 +7550,12 @@ msgstr ""
 "<b>U</b> (demi tour de 180° -- U-turn)."
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:50
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:50
 msgid "Going further"
 msgstr "Aller plus loin"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:51
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:51
 msgid ""
 "This exercise is naturally an excuse to let you experiment with your own "
 "turmites.  Feel free to change the transition table and the amount of steps "
@@ -7186,7 +7571,7 @@ msgstr ""
 "les ajouter à cette liste."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:57
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:57
 msgid ""
 "In addition, wikipedia is desperately missing some good looking colorful "
 "turmites: only black and white ones are depicted.  You should consider "
@@ -7196,112 +7581,124 @@ msgstr ""
 "turmites: seuls des noirs et blancs sont décrits. Vous pouvez considérer "
 "l'idée de soumettre vos créations directement à l'encyclopédie libre."
 
+#. type: Content of: <p>
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:62
+msgid ""
+"Here are some 2-color turmites, extracted from http://demonstrations.wolfram."
+"com/Turmites/ They are not written using the python syntax, but converting "
+"them should be easy."
+msgstr ""
+"Voici quelques turmites bicolores, issues de http://demonstrations.wolfram."
+"com/Turmites/ Elles n'ont pas été écrites avec la syntaxe Python, mais les "
+"convertir ne devrait pas poser beaucoup de problèmes."
+
+#. type: Content of: <p>
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:64
+msgid ""
+"Here are some 2-color turmites, extracted from http://demonstrations.wolfram."
+"com/Turmites/"
+msgstr ""
+"Voici quelques turmites bicolores, issues de http://demonstrations.wolfram."
+"com/Turmites/"
+
 #. type: Content of: <pre>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:63
-#, no-wrap
-msgid ""
-"EdPeggJrTurmiteLibrary = [\n"
-"# source: http://demonstrations.wolfram.com/Turmites/\n"
-"# Translated into his later notation: 1=noturn, 2=right, 4=u-turn, 8=left\n"
-"# (all these are 2-color patterns)\n"
-"\"{{{1, 2, 0}, {0, 8, 0}}}\",  # 1: Langton's ant\n"
-"\"{{{1, 2, 0}, {0, 1, 0}}}\",  # 2: binary counter\n"
-"\"{{{0, 8, 1}, {1, 2, 1}}, {{1, 1, 0}, {1, 1, 1}}}\", # 3: (filled triangle)\n"
-"\"{{{0, 1, 1}, {0, 8, 1}}, {{1, 2, 0}, {0, 1, 1}}}\", # 4: spiral in a box\n"
-"\"{{{0, 2, 1}, {0, 8, 0}}, {{1, 8, 1}, {0, 2, 0}}}\", # 5: stripe-filled spiral\n"
-"\"{{{0, 2, 1}, {0, 8, 0}}, {{1, 8, 1}, {1, 1, 0}}}\", # 6: stepped pyramid\n"
-"\"{{{0, 2, 1}, {0, 1, 1}}, {{1, 2, 1}, {1, 8, 0}}}\", # 7: contoured island\n"
-"\"{{{0, 2, 1}, {0, 2, 1}}, {{1, 1, 0}, {0, 2, 1}}}\", # 8: woven placemat\n"
-"\"{{{0, 2, 1}, {1, 2, 1}}, {{1, 8, 1}, {1, 8, 0}}}\", # 9: snowflake-ish\n"
-"\"{{{1, 8, 0}, {0, 1, 1}}, {{0, 8, 0}, {0, 8, 1}}}\", # 10: slow city builder\n"
-"\"{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 0}, {0, 8, 1}}}\", # 11: framed computer art\n"
-"\"{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 1}, {1, 8, 0}}}\", # 12: balloon bursting (makes a spreading highway)\n"
-"\"{{{1, 8, 1}, {0, 8, 0}}, {{1, 1, 0}, {0, 1, 0}}}\", # 13: makes a horizontal highway\n"
-"\"{{{1, 8, 1}, {0, 8, 0}}, {{1, 2, 1}, {1, 2, 0}}}\", # 14: makes a 45 degree highway\n"
-"\"{{{1, 8, 1}, {0, 8, 1}}, {{1, 2, 1}, {0, 8, 0}}}\", # 15: makes a 45 degree highway\n"
-"\"{{{1, 8, 1}, {0, 1, 0}}, {{1, 1, 0}, {1, 2, 0}}}\", # 16: spiral in a filled box\n"
-"\"{{{1, 8, 1}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 17: glaciers\n"
-"\"{{{1, 8, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 1, 0}}}\", # 18: golden rectangle!\n"
-"\"{{{1, 8, 1}, {1, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 19: fizzy spill\n"
-"\"{{{1, 8, 1}, {1, 2, 1}}, {{1, 1, 0}, {0, 1, 1}}}\", # 20: nested cabinets\n"
-"\"{{{1, 1, 1}, {0, 8, 1}}, {{1, 2, 0}, {1, 1, 1}}}\", # 21: (cross)\n"
-"\"{{{1, 1, 1}, {0, 1, 0}}, {{0, 2, 0}, {1, 8, 0}}}\", # 22: saw-tipped growth\n"
-"\"{{{1, 1, 1}, {0, 1, 1}}, {{1, 2, 1}, {0, 1, 0}}}\", # 23: curves in blocks growth\n"
-"\"{{{1, 1, 1}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 24: textured growth\n"
-"\"{{{1, 1, 1}, {0, 2, 1}}, {{1, 8, 0}, {1, 2, 0}}}\", # 25: (diamond growth)\n"
-"\"{{{1, 1, 1}, {1, 8, 0}}, {{1, 2, 1}, {0, 1, 0}}}\", # 26: coiled rope\n"
-"\"{{{1, 2, 0}, {0, 8, 1}}, {{1, 8, 0}, {0, 1, 1}}}\", # 27: (growth)\n"
-"\"{{{1, 2, 0}, {0, 8, 1}}, {{1, 8, 0}, {0, 2, 1}}}\", # 28: (square spiral)\n"
-"\"{{{1, 2, 0}, {1, 2, 1}}, {{0, 1, 0}, {0, 1, 1}}}\", # 29: loopy growth with holes\n"
-"\"{{{1, 2, 1}, {0, 8, 1}}, {{1, 1, 0}, {0, 1, 0}}}\", # 30: Lanton's Ant drawn with squares\n"
-"\"{{{1, 2, 1}, {0, 2, 0}}, {{0, 8, 1}, {1, 8, 0}}}\", # 31: growth with curves and blocks\n"
-"\"{{{1, 2, 1}, {0, 2, 0}}, {{0, 1, 0}, {1, 2, 1}}}\", # 32: distracted spiral builder\n"
-"\"{{{1, 2, 1}, {0, 2, 1}}, {{1, 1, 0}, {1, 1, 1}}}\", # 33: cauliflower stalk (45 deg highway)\n"
-"\"{{{1, 2, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 2, 0}}}\", # 34: worm trails (eventually turns cyclic!)\n"
-"\"{{{1, 2, 1}, {1, 1, 0}}, {{1, 1, 0}, {0, 1, 1}}}\", # 35: eventually makes a two-way highway!\n"
-"\"{{{1, 2, 1}, {1, 2, 0}}, {{0, 1, 0}, {0, 1, 0}}}\", # 36: almost symmetric mould bloom\n"
-"\"{{{1, 2, 1}, {1, 2, 0}}, {{0, 2, 0}, {1, 1, 1}}}\", # 37: makes a 1 in 2 gradient highway\n"
-"\"{{{1, 2, 1}, {1, 2, 1}}, {{1, 8, 1}, {0, 2, 0}}}\", # 38: immediately makes a 1 in 3 highway\n"
-"\"{{{0, 2, 1}, {1, 2, 1}}, {{0, 8, 2}, {0, 8, 0}}, {{1, 2, 2}, {1, 8, 0}}}\", # 39: squares and diagonals growth\n"
-"\"{{{1, 8, 1}, {0, 1, 0}}, {{0, 2, 2}, {1, 8, 0}}, {{1, 2, 1}, {1, 1, 0}}}\", # 40: streak at approx. an 8.1 in 1 gradient\n"
-"\"{{{1, 8, 1}, {0, 1, 2}}, {{0, 2, 2}, {1, 1, 1}}, {{1, 2, 1}, {1, 1, 0}}}\", # 41: streak at approx. a 1.14 in 1 gradient\n"
-"\"{{{1, 8, 1}, {1, 8, 1}}, {{1, 1, 0}, {0, 1, 2}}, {{0, 8, 1}, {1, 1, 1}}}\", # 42: maze-like growth\n"
-"\"{{{1, 8, 2}, {0, 2, 0}}, {{1, 8, 0}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 1}}}\", # 43: growth by cornices \n"
-"\"{{{1, 2, 0}, {0, 2, 2}}, {{0, 8, 0}, {0, 2, 0}}, {{0, 1, 1}, {1, 8, 0}}}\", # 44: makes a 1 in 7 highway\n"
-"\"{{{1, 2, 1}, {0, 8, 0}}, {{1, 2, 2}, {0, 1, 0}}, {{1, 8, 0}, {0, 8, 0}}}\", # 45: makes a 4 in 1 highway\n"
-msgstr ""
-"EdPeggJrTurmiteLibrary = [\n"
-"# source: http://demonstrations.wolfram.com/Turmites/\n"
-"# Translated into his later notation: 1=noturn, 2=right, 4=u-turn, 8=left\n"
-"# (all these are 2-color patterns)\n"
-"\"{{{1, 2, 0}, {0, 8, 0}}}\",  # 1: Langton's ant\n"
-"\"{{{1, 2, 0}, {0, 1, 0}}}\",  # 2: binary counter\n"
-"\"{{{0, 8, 1}, {1, 2, 1}}, {{1, 1, 0}, {1, 1, 1}}}\", # 3: (filled triangle)\n"
-"\"{{{0, 1, 1}, {0, 8, 1}}, {{1, 2, 0}, {0, 1, 1}}}\", # 4: spiral in a box\n"
-"\"{{{0, 2, 1}, {0, 8, 0}}, {{1, 8, 1}, {0, 2, 0}}}\", # 5: stripe-filled spiral\n"
-"\"{{{0, 2, 1}, {0, 8, 0}}, {{1, 8, 1}, {1, 1, 0}}}\", # 6: stepped pyramid\n"
-"\"{{{0, 2, 1}, {0, 1, 1}}, {{1, 2, 1}, {1, 8, 0}}}\", # 7: contoured island\n"
-"\"{{{0, 2, 1}, {0, 2, 1}}, {{1, 1, 0}, {0, 2, 1}}}\", # 8: woven placemat\n"
-"\"{{{0, 2, 1}, {1, 2, 1}}, {{1, 8, 1}, {1, 8, 0}}}\", # 9: snowflake-ish\n"
-"\"{{{1, 8, 0}, {0, 1, 1}}, {{0, 8, 0}, {0, 8, 1}}}\", # 10: slow city builder\n"
-"\"{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 0}, {0, 8, 1}}}\", # 11: framed computer art\n"
-"\"{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 1}, {1, 8, 0}}}\", # 12: balloon bursting (makes a spreading highway)\n"
-"\"{{{1, 8, 1}, {0, 8, 0}}, {{1, 1, 0}, {0, 1, 0}}}\", # 13: makes a horizontal highway\n"
-"\"{{{1, 8, 1}, {0, 8, 0}}, {{1, 2, 1}, {1, 2, 0}}}\", # 14: makes a 45 degree highway\n"
-"\"{{{1, 8, 1}, {0, 8, 1}}, {{1, 2, 1}, {0, 8, 0}}}\", # 15: makes a 45 degree highway\n"
-"\"{{{1, 8, 1}, {0, 1, 0}}, {{1, 1, 0}, {1, 2, 0}}}\", # 16: spiral in a filled box\n"
-"\"{{{1, 8, 1}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 17: glaciers\n"
-"\"{{{1, 8, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 1, 0}}}\", # 18: golden rectangle!\n"
-"\"{{{1, 8, 1}, {1, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 19: fizzy spill\n"
-"\"{{{1, 8, 1}, {1, 2, 1}}, {{1, 1, 0}, {0, 1, 1}}}\", # 20: nested cabinets\n"
-"\"{{{1, 1, 1}, {0, 8, 1}}, {{1, 2, 0}, {1, 1, 1}}}\", # 21: (cross)\n"
-"\"{{{1, 1, 1}, {0, 1, 0}}, {{0, 2, 0}, {1, 8, 0}}}\", # 22: saw-tipped growth\n"
-"\"{{{1, 1, 1}, {0, 1, 1}}, {{1, 2, 1}, {0, 1, 0}}}\", # 23: curves in blocks growth\n"
-"\"{{{1, 1, 1}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 24: textured growth\n"
-"\"{{{1, 1, 1}, {0, 2, 1}}, {{1, 8, 0}, {1, 2, 0}}}\", # 25: (diamond growth)\n"
-"\"{{{1, 1, 1}, {1, 8, 0}}, {{1, 2, 1}, {0, 1, 0}}}\", # 26: coiled rope\n"
-"\"{{{1, 2, 0}, {0, 8, 1}}, {{1, 8, 0}, {0, 1, 1}}}\", # 27: (growth)\n"
-"\"{{{1, 2, 0}, {0, 8, 1}}, {{1, 8, 0}, {0, 2, 1}}}\", # 28: (square spiral)\n"
-"\"{{{1, 2, 0}, {1, 2, 1}}, {{0, 1, 0}, {0, 1, 1}}}\", # 29: loopy growth with holes\n"
-"\"{{{1, 2, 1}, {0, 8, 1}}, {{1, 1, 0}, {0, 1, 0}}}\", # 30: Lanton's Ant drawn with squares\n"
-"\"{{{1, 2, 1}, {0, 2, 0}}, {{0, 8, 1}, {1, 8, 0}}}\", # 31: growth with curves and blocks\n"
-"\"{{{1, 2, 1}, {0, 2, 0}}, {{0, 1, 0}, {1, 2, 1}}}\", # 32: distracted spiral builder\n"
-"\"{{{1, 2, 1}, {0, 2, 1}}, {{1, 1, 0}, {1, 1, 1}}}\", # 33: cauliflower stalk (45 deg highway)\n"
-"\"{{{1, 2, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 2, 0}}}\", # 34: worm trails (eventually turns cyclic!)\n"
-"\"{{{1, 2, 1}, {1, 1, 0}}, {{1, 1, 0}, {0, 1, 1}}}\", # 35: eventually makes a two-way highway!\n"
-"\"{{{1, 2, 1}, {1, 2, 0}}, {{0, 1, 0}, {0, 1, 0}}}\", # 36: almost symmetric mould bloom\n"
-"\"{{{1, 2, 1}, {1, 2, 0}}, {{0, 2, 0}, {1, 1, 1}}}\", # 37: makes a 1 in 2 gradient highway\n"
-"\"{{{1, 2, 1}, {1, 2, 1}}, {{1, 8, 1}, {0, 2, 0}}}\", # 38: immediately makes a 1 in 3 highway\n"
-"\"{{{0, 2, 1}, {1, 2, 1}}, {{0, 8, 2}, {0, 8, 0}}, {{1, 2, 2}, {1, 8, 0}}}\", # 39: squares and diagonals growth\n"
-"\"{{{1, 8, 1}, {0, 1, 0}}, {{0, 2, 2}, {1, 8, 0}}, {{1, 2, 1}, {1, 1, 0}}}\", # 40: streak at approx. an 8.1 in 1 gradient\n"
-"\"{{{1, 8, 1}, {0, 1, 2}}, {{0, 2, 2}, {1, 1, 1}}, {{1, 2, 1}, {1, 1, 0}}}\", # 41: streak at approx. a 1.14 in 1 gradient\n"
-"\"{{{1, 8, 1}, {1, 8, 1}}, {{1, 1, 0}, {0, 1, 2}}, {{0, 8, 1}, {1, 1, 1}}}\", # 42: maze-like growth\n"
-"\"{{{1, 8, 2}, {0, 2, 0}}, {{1, 8, 0}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 1}}}\", # 43: growth by cornices \n"
-"\"{{{1, 2, 0}, {0, 2, 2}}, {{0, 8, 0}, {0, 2, 0}}, {{0, 1, 1}, {1, 8, 0}}}\", # 44: makes a 1 in 7 highway\n"
-"\"{{{1, 2, 1}, {0, 8, 0}}, {{1, 2, 2}, {0, 1, 0}}, {{1, 8, 0}, {0, 8, 0}}}\", # 45: makes a 4 in 1 highway\n"
-
-#. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:114
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:67
+#, no-wrap
+msgid ""
+"{{{1, RIGHT , 0}, {0, LEFT  , 0}}}  # 1: Langton's ant\n"
+"{{{1, RIGHT , 0}, {0, NOTURN, 0}}}  # 2: binary counter\n"
+"{{{0, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 3: (filled triangle)\n"
+"{{{0, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {0, NOTURN, 1}}} # 4: spiral in a box\n"
+"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 5: stripe-filled spiral\n"
+"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {1, NOTURN, 0}}} # 6: stepped pyramid\n"
+"{{{0, RIGHT , 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {1, LEFT  , 0}}} # 7: contoured island\n"
+"{{{0, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {0, RIGHT , 1}}} # 8: woven placemat\n"
+"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {1, LEFT  , 0}}} # 9: snowflake-ish\n"
+"{{{1, LEFT  , 0}, {0, NOTURN, 1}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 10: slow city builder\n"
+"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 0}, {0, LEFT  , 1}}} # 11: framed computer art\n"
+"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 1}, {1, LEFT  , 0}}} # 12: balloon bursting (makes a spreading highway)\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 13: makes a horizontal highway\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 1}, {1, RIGHT , 0}}} # 14: makes a 45 degree highway\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 1}}, {{1, RIGHT , 1}, {0, LEFT  , 0}}} # 15: makes a 45 degree highway\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{1, NOTURN, 0}, {1, RIGHT , 0}}} # 16: spiral in a filled box\n"
+"{{{1, LEFT  , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 17: glaciers\n"
+"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 18: golden rectangle!\n"
+"{{{1, LEFT  , 1}, {1, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 19: fizzy spill\n"
+"{{{1, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 20: nested cabinets\n"
+"{{{1, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {1, NOTURN, 1}}} # 21: (cross)\n"
+"{{{1, NOTURN, 1}, {0, NOTURN, 0}}, {{0, RIGHT , 0}, {1, LEFT  , 0}}} # 22: saw-tipped growth\n"
+"{{{1, NOTURN, 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 23: curves in blocks growth\n"
+"{{{1, NOTURN, 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 24: textured growth\n"
+"{{{1, NOTURN, 1}, {0, RIGHT , 1}}, {{1, LEFT  , 0}, {1, RIGHT , 0}}} # 25: (diamond growth)\n"
+"{{{1, NOTURN, 1}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 26: coiled rope\n"
+"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, NOTURN, 1}}} # 27: (growth)\n"
+"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, RIGHT , 1}}} # 28: (square spiral)\n"
+"{{{1, RIGHT , 0}, {1, RIGHT , 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}} # 29: loopy growth with holes\n"
+"{{{1, RIGHT , 1}, {0, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 30: Lanton's Ant drawn with squares\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 1}, {1, LEFT  , 0}}} # 31: growth with curves and blocks\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, NOTURN, 0}, {1, RIGHT , 1}}} # 32: distracted spiral builder\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 33: cauliflower stalk (45 deg highway)\n"
+"{{{1, RIGHT , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, RIGHT , 0}}} # 34: worm trails (eventually turns cyclic!)\n"
+"{{{1, RIGHT , 1}, {1, NOTURN, 0}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 35: eventually makes a two-way highway!\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, NOTURN, 0}, {0, NOTURN, 0}}} # 36: almost symmetric mould bloom\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, RIGHT , 0}, {1, NOTURN, 1}}} # 37: makes a 1 in 2 gradient highway\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 38: immediately makes a 1 in 3 highway\n"
+"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{0, LEFT  , 2}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {1, LEFT  , 0}}} # 39: squares and diagonals growth\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{0, RIGHT , 2}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {1, NOTURN, 0}}} # 40: streak at approx. an 8.1 in 1 gradient\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 2}}, {{0, RIGHT , 2}, {1, NOTURN, 1}}, {{1, RIGHT , 1}, {1, NOTURN, 0}}} # 41: streak at approx. a 1.14 in 1 gradient\n"
+"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 2}}, {{0, LEFT  , 1}, {1, NOTURN, 1}}} # 42: maze-like growth\n"
+"{{{1, LEFT  , 2}, {0, RIGHT , 0}}, {{1, LEFT  , 0}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 43: growth by cornices \n"
+"{{{1, RIGHT , 0}, {0, RIGHT , 2}}, {{0, LEFT  , 0}, {0, RIGHT , 0}}, {{0, NOTURN, 1}, {1, LEFT  , 0}}} # 44: makes a 1 in 7 highway\n"
+"{{{1, RIGHT , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {0, NOTURN, 0}}, {{1, LEFT  , 0}, {0, LEFT  , 0}}} # 45: makes a 4 in 1 highway\n"
+msgstr ""
+"{{{1, RIGHT , 0}, {0, LEFT  , 0}}}  # 1: La fourmi de Langton\n"
+"{{{1, RIGHT , 0}, {0, NOTURN, 0}}}  # 2: Compteur binaire\n"
+"{{{0, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 3: Triangle rempli\n"
+"{{{0, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {0, NOTURN, 1}}} # 4: Spirale dans une boite\n"
+"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 5: Spirale rayurée\n"
+"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {1, NOTURN, 0}}} # 6: Pyramide à étages\n"
+"{{{0, RIGHT , 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {1, LEFT  , 0}}} # 7: Ile entourée\n"
+"{{{0, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {0, RIGHT , 1}}} # 8: Set tissé\n"
+"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {1, LEFT  , 0}}} # 9: Sorte de flocon de neige\n"
+"{{{1, LEFT  , 0}, {0, NOTURN, 1}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 10: Constructeur de ville lent\n"
+"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 0}, {0, LEFT  , 1}}} # 11: Art informatisé en boîte\n"
+"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 1}, {1, LEFT  , 0}}} # 12: Décollage de ballon (fait une autoroute)\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 13: Autoroute horizontale\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 1}, {1, RIGHT , 0}}} # 14: Autoroute à 45 degrés\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 1}}, {{1, RIGHT , 1}, {0, LEFT  , 0}}} # 15: Autoroute à 45 degrés\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{1, NOTURN, 0}, {1, RIGHT , 0}}} # 16: Spirale dans une boîte remplie\n"
+"{{{1, LEFT  , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 17: glaciers\n"
+"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 18: Rectangle doré!\n"
+"{{{1, LEFT  , 1}, {1, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 19: Fontaine pétillante\n"
+"{{{1, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 20: Armoires imbriquées\n"
+"{{{1, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {1, NOTURN, 1}}} # 21: Croix\n"
+"{{{1, NOTURN, 1}, {0, NOTURN, 0}}, {{0, RIGHT , 0}, {1, LEFT  , 0}}} # 22: Croissance en dents de scie\n"
+"{{{1, NOTURN, 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 23: Croissance par blocs\n"
+"{{{1, NOTURN, 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 24: Croissance texturée\n"
+"{{{1, NOTURN, 1}, {0, RIGHT , 1}}, {{1, LEFT  , 0}, {1, RIGHT , 0}}} # 25: Croissance en diamands\n"
+"{{{1, NOTURN, 1}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 26: Corde enroulée\n"
+"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, NOTURN, 1}}} # 27: (croissance)\n"
+"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, RIGHT , 1}}} # 28: (spirale carrée)\n"
+"{{{1, RIGHT , 0}, {1, RIGHT , 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}} # 29: Croissance ébourifée\n"
+"{{{1, RIGHT , 1}, {0, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 30: La fourmi de Lanton en carrés\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 1}, {1, LEFT  , 0}}} # 31: Croissance avec des courbes et des blocs\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, NOTURN, 0}, {1, RIGHT , 1}}} # 32: Constructeur de spirales distrait\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 33: Tige de choux-fleur (autoroute à 45 degrés)\n"
+"{{{1, RIGHT , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, RIGHT , 0}}} # 34: Piste de vers (croissance cyclique!)\n"
+"{{{1, RIGHT , 1}, {1, NOTURN, 0}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 35: Fini par faire une autoroute à deux voies!\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, NOTURN, 0}, {0, NOTURN, 0}}} # 36: Éclosion de moisissure presque symétrique\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, RIGHT , 0}, {1, NOTURN, 1}}} # 37: Fait un 1 dans une autoroute à deux gradients\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 38: Fait immédiatement un 1 dans une autoroute à 3\n"
+"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{0, LEFT  , 2}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {1, LEFT  , 0}}} # 39: Croissance de carrés et diagonales\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{0, RIGHT , 2}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {1, NOTURN, 0}}} # 40: streak at approx. an 8.1 in 1 gradient\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 2}}, {{0, RIGHT , 2}, {1, NOTURN, 1}}, {{1, RIGHT , 1}, {1, NOTURN, 0}}} # 41: streak at approx. a 1.14 in 1 gradient\n"
+"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 2}}, {{0, LEFT  , 1}, {1, NOTURN, 1}}} # 42: Croissance en labyrinthe\n"
+"{{{1, LEFT  , 2}, {0, RIGHT , 0}}, {{1, LEFT  , 0}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 43: Croissance en corniches\n"
+"{{{1, RIGHT , 0}, {0, RIGHT , 2}}, {{0, LEFT  , 0}, {0, RIGHT , 0}}, {{0, NOTURN, 1}, {1, LEFT  , 0}}} # 44: makes a 1 in 7 highway\n"
+"{{{1, RIGHT , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {0, NOTURN, 0}}, {{1, LEFT  , 0}, {0, LEFT  , 0}}} # 45: makes a 4 in 1 highway\n"
+
+#. type: Content of: <p>
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:114
 msgid ""
 "Langton's ants may not share the expressiveness power of the turmites, but "
 "they remain fascinating too. You can experiment with them using the "
@@ -7322,7 +7719,7 @@ msgstr ""
 "pas !"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:121
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:121
 msgid ""
 "Quite a lot of Langton's ants build highways: RL, of course, but also "
 "RLRLRLLRLR (about 2500 steps).  The chaotic behavior of ants before the "
@@ -7346,7 +7743,7 @@ msgstr ""
 "transcendant avant leur route."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:129
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:129
 msgid ""
 "Some ants fill solid sectors, such as RRLLLRLLLRRR (16,000 steps), "
 "RRLLLRLLLRRR (30,000 steps), RRLLLRRRRRLR (125,000 steps) or RRLRLLRRRRRR "
@@ -7367,7 +7764,7 @@ msgstr ""
 "rapidement son comportement stable (15 000 pas suffisent)."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:136
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:136
 msgid ""
 "Finally, some ants are just build artistic patterns. You should check this "
 "video for some beautiful ones: http://www.youtube.com/watch?v=1X-gtr4pEBU. "
@@ -7383,7 +7780,7 @@ msgstr ""
 "(le premier mouvement visible doit être vu comme le dernier)."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:141
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:141
 msgid ""
 "As you can see by exploring the above set of turmites, they are usually not "
 "as colorful as the ants, but this may be because very few colors suffice to "
@@ -7408,8 +7805,53 @@ msgstr ""
 "La page web est ici : http://code.google.com/p/ruletablerepository/wiki/"
 "TwoDimensionalTuringMachines"
 
-#. type: Content of: <h1>
-#: src/lessons/sort/Main.html:1
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:12
+msgid "void forward() or void forward(int)"
+msgstr "void forward() ou void forward(int)"
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:12
+msgid "void backward() or void backward(int)"
+msgstr "void backward() ou void backward(int)"
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:14
+msgid "void setX(int)"
+msgstr "void setX(int)"
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:14
+msgid "void setY(int)"
+msgstr "void setY(int)"
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:14
+msgid "void setPos(int,int)"
+msgstr "void setPos(int,int)"
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:18
+msgid "void setColor(Color)"
+msgstr "void setColor(Color)"
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:22
+msgid "void setDirection(Direction)"
+msgstr "void setDirection(Direction)"
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:28
+msgid "void setBrushColor(Color)"
+msgstr "void setBrushColor(Color)"
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:38
+msgid "void writeMessage(String)"
+msgstr "void writeMessage(String)"
+
+#. type: Content of: <h3>
+#: src/lessons/sort/Main.html:1 src/lessons/sort/short_desc.html:1
 msgid "Sorting Algorithms"
 msgstr "Algorithmes de tri"
 
@@ -7434,21 +7876,41 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/sort/Main.html:10
 msgid ""
-"An exercise on recursive sorting algorithms (such as QuickSort and "
-"MergeSort) is planned for the future."
+"More exercises are planned for the future, on recursive sorting algorithms "
+"(such as QuickSort and MergeSort) or using other microworlds to apply these "
+"algorithms to other contexts."
+msgstr ""
+"Plus d'exercices sont prévus à l'avenir. Certain porteront sur les tris\n"
+"récursifs (en particulier QuickSort et MergeSort) tandis que d'autres\n"
+"s'appuieront sur d'autres micro-mondes pour appliquer ces algorithmes à "
+"d'autres\n"
+"situations."
+
+#. type: Content of: <p>
+#: src/lessons/sort/short_desc.html:3
+msgid ""
+"This lesson allows to experiment with some classical sorting algorithms (and "
+"some less common variant of them :)"
+msgstr ""
+"Cette leçon vous permet d'expérimenter avec des algorithmes de tri "
+"classiques (ainsi qu'avec certaines variantes moins classiques :)"
+
+#. type: Content of: <p>
+#: src/lessons/sort/short_desc.html:6 src/lessons/recursion/short_desc.html:5
+#: src/lessons/maze/short_desc.html:5
+msgid ""
+"You are supposed to master the bases of programming to take this lesson."
 msgstr ""
-"Un exercice sur les tris récursifs (en particulier QuickSort et MergeSort) "
-"est prévu à l'avenir."
+"Vous êtes supposé maîtriser les bases de la programmation avant de tenter "
+"cette leçon."
 
 #. type: Content of: <h1>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:1
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:1
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:1
-msgid "BubbleSort and variations"
-msgstr "Le tri à bulle et variantes"
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:1
+msgid "BubbleSort"
+msgstr "Tri à bulle"
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:3
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:3
 msgid ""
 "Welcome to the sorting world. It allows you to experiment with the existing "
 "sorting algorithms. The list of buildins that you can use in your algorithms "
@@ -7457,16 +7919,29 @@ msgid ""
 msgstr ""
 "Bienvenu au monde des tris. Il permet d'expérimenter avec les algorithmes de "
 "tri existants. La liste des primitives que vous pouvez utiliser dans vos "
-"programmes est disponible dans la documentation de référence du monde (\"Help"
-"\" -> \"About this world\")."
+"programmes est disponible dans la documentation de référence du monde "
+"(Aide / À propos de ce monde)."
+
+#. type: Content of: <p>
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:14
+msgid ""
+"To help in this process, it is posible to graphically explore the history of "
+"your sorting algorithm. Switch to the Objective view and use the contextual "
+"menu (right click) to switch from the the view of the current state to the "
+"view of its history."
+msgstr ""
+"Pour cela, il est possible d'explorer graphiquement l'historique de "
+"n'importe quel monde de tri. Passez par exemple au monde Objectif et "
+"utilisez son menu contextuel (clic droit) pour choisir entre la vue de "
+"l'état courant du monde et la vue de son histoire."
 
 #. type: Content of: <h2>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:27
-msgid "BubbleSort"
-msgstr "BubbleSort"
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:28
+msgid "First attempt at BubbleSort"
+msgstr "Première tentative pour le tri à bulle"
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:29
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:30
 msgid ""
 "This first sorting algorithm is the most simple one: Bubble sort consists in "
 "progressively moving up the smaller elements of the array, as if they were "
@@ -7492,18 +7967,18 @@ msgstr ""
 "jamais utilisé en pratique."
 
 #. type: Attribute 'alt' of: <div>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:39
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:13
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:40
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:11
 msgid "Show Tip (Pseudo-code)"
 msgstr "Montrer l'indice (le pseudo-code)"
 
 #. type: Content of: <div><p>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:40
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:41
 msgid "The pseudo-code of the BubbleSort algorithm is the following:"
 msgstr "Le pseudo-code de l'algorithme du tri à bulles est donc le suivant :"
 
 #. type: Content of: <div><pre>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:41
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:42
 #, no-wrap
 msgid ""
 "do: \n"
@@ -7516,13 +7991,13 @@ msgstr ""
 "          Si les cases i et i+1 doivent être inverser, le faire\n"
 "     tant qu'on a inverser des choses lors du dernier parcours\n"
 
-#. type: Content of: <h2>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:3
-msgid "BubbleSort2"
-msgstr "BubbleSort2"
+#. type: Content of: <h1>
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:1
+msgid "BubbleSort (take 2)"
+msgstr "Tri à bulle (deuxième version)"
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:5
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:3
 msgid ""
 "If you look carefully at the behavior of BubbleSort, a first easy "
 "optimization appears: after one traversal, the last element of the array "
@@ -7542,12 +8017,12 @@ msgstr ""
 "dans le tableau."
 
 #. type: Content of: <div><p>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:14
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:12
 msgid "The pseudo-code of the BubbleSort2 algorithm is the following:"
 msgstr "Le pseudo-code de l'algorithme BubbleSort2 est le suivant :"
 
 #. type: Content of: <div><pre>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:15
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:13
 #, no-wrap
 msgid ""
 "For all i in [len-2,0] (traversing from biggest to smallest)\n"
@@ -7559,7 +8034,7 @@ msgstr ""
 "          Si les cases j et j+1 doivent être inverser, le faire\n"
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:21
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:19
 msgid ""
 "When we run this algorithm, it is quite disappointing to see that it runs "
 "approximately at the same speed than the basic version of BubbleSort. This "
@@ -7581,7 +8056,7 @@ msgstr ""
 "plus d'un quart du nombre de lectures, ce qui n'est pas si mal."
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:30
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:28
 msgid ""
 "From the asymptotic complexity point of view, there is absolutely no "
 "difference: this variation is still in O(n^2) on average (our gain is only "
@@ -7590,13 +8065,13 @@ msgstr ""
 "D'un point de vue complexité algorithmique, cela ne change rien: cette "
 "variante est toujours en O(n2) en moyenne (on ne gagne que sur la constante)."
 
-#. type: Content of: <h2>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:3
-msgid "BubbleSort3"
-msgstr "BubbleSort3"
+#. type: Content of: <h1>
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:1
+msgid "BubbleSort (take 3)"
+msgstr "Tri à bulle (troisième version)"
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:5
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:3
 msgid ""
 "Let's now reintroduce the little optimization we removed at previous step: "
 "if a traversal does not swap any element, it means that the array is already "
@@ -7607,7 +8082,7 @@ msgstr ""
 "est maintenant trié. Dans ce cas, il faut arrêter le processus de tri."
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:9
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:7
 msgid ""
 "For that, simply use the <code>break</code> keyword, which breaks the "
 "current loop.  Beware, if you have several embedded loops, this will apply "
@@ -7621,12 +8096,12 @@ msgstr ""
 "est cassée."
 
 #. type: Attribute 'alt' of: <div>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:12
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:10
 msgid "If you want, this tip shows the pseudo-code."
 msgstr "Si vous le désirez, cet indice montre le pseudo-code."
 
 #. type: Content of: <div><pre>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:14
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:12
 #, no-wrap
 msgid ""
 "For all i in [len-2,0] (traversing from biggest to smallest)\n"
@@ -7640,7 +8115,7 @@ msgstr ""
 "       Si le parcours sur les j n'a rien inversé, casser la boucle\n"
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:21
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:19
 msgid ""
 "This optimization is even more disappointing: it only provide a gain of a "
 "few percents on the amount of reads over BubbleSort2."
@@ -7649,19 +8124,12 @@ msgstr ""
 "pourcents en nombre de lectures sur BubbleSort2."
 
 #. type: Content of: <h1>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:1
-#: src/lessons/sort/cocktail2/AlgCocktailSort2.html:1
-#: src/lessons/sort/cocktail3/AlgCocktailSort3.html:1
-msgid "CocktailSort and variations"
-msgstr "Le tri à bulle et variantes"
-
-#. type: Content of: <h2>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:3
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:1
 msgid "CocktailSort"
-msgstr "CocktailSort"
+msgstr "Tri Cocktail"
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:5
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:3
 msgid ""
 "To improve further the BubbleSort algorithm, we need to look closer its "
 "behavior. One can notice that big elements are moved very quickly in "
@@ -7677,7 +8145,7 @@ msgstr ""
 "valeurs."
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:11
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:9
 msgid ""
 "To help the turtles moving faster, the cocktail sort traverse alternatively "
 "the array from right to left and from left to right. Here is the pseudo-code:"
@@ -7687,7 +8155,7 @@ msgstr ""
 "son pseudo-code:"
 
 #. type: Content of: <pre>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:16
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:14
 #, no-wrap
 msgid ""
 "Do\n"
@@ -7705,7 +8173,7 @@ msgstr ""
 "tant qu'au moins l'un des parcours a inversé un élément\n"
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:24
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:22
 msgid ""
 "One can see that cocktail sort achieves exactly the same amount of swaps "
 "than the bubble sort, but improves slightly on read amount. It is however "
@@ -7715,13 +8183,13 @@ msgstr ""
 "d'échanges que le tri à bulle, mais qu'il améliore les choses sur le nombre "
 "de lectures. Il reste cependant moins bon que BubbleSort2 en la matière."
 
-#. type: Content of: <h2>
-#: src/lessons/sort/cocktail2/AlgCocktailSort2.html:3
-msgid "CocktailSort2"
-msgstr "CocktailSort2"
+#. type: Content of: <h1>
+#: src/lessons/sort/cocktail/AlgCocktailSort2.html:1
+msgid "CocktailSort (take 2)"
+msgstr "Tri Cocktail (seconde version)"
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail2/AlgCocktailSort2.html:5
+#: src/lessons/sort/cocktail/AlgCocktailSort2.html:3
 msgid ""
 "We will now apply to CocktailSort the same optimization than BubbleSort2 did "
 "to BubbleSort. We must remember the limits of the array part not being "
@@ -7733,7 +8201,7 @@ msgstr ""
 "parcourir alternativement de droite à gauche et de gauche à droite:"
 
 #. type: Content of: <pre>
-#: src/lessons/sort/cocktail2/AlgCocktailSort2.html:10
+#: src/lessons/sort/cocktail/AlgCocktailSort2.html:8
 #, no-wrap
 msgid ""
 "beg=0; end=len-2\n"
@@ -7756,13 +8224,13 @@ msgstr ""
 "  debut++\n"
 "tant qu'au moins l'un des parcours a inversé un élément\n"
 
-#. type: Content of: <h2>
-#: src/lessons/sort/cocktail3/AlgCocktailSort3.html:3
-msgid "CocktailSort3"
-msgstr "CocktailSort3"
+#. type: Content of: <h1>
+#: src/lessons/sort/cocktail/AlgCocktailSort3.html:1
+msgid "CocktailSort (take 3)"
+msgstr "Tri Cocktail (troisième version)"
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail3/AlgCocktailSort3.html:5
+#: src/lessons/sort/cocktail/AlgCocktailSort3.html:3
 msgid ""
 "Even if the asymptotic complexity of CocktailSort2 is the same than the one "
 "of BubbleSort, it seem to perform better in practice. It is even possible to "
@@ -7780,26 +8248,11 @@ msgstr ""
 
 #. type: Content of: <h1>
 #: src/lessons/sort/insertion/AlgInsertionSort.html:1
-#: src/lessons/sort/shell/AlgShellSort.html:1
-msgid "Insertion algorithms and variations"
-msgstr "Algorithme par insertion et variantes"
-
-#. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:4
-msgid ""
-"This exercise allows you to experiment with the insertion sort and its major "
-"variations."
-msgstr ""
-"Cet exercice vous permet d'expérimenter avec le tri par insertion et ses "
-"variantes les plus classiques."
-
-#. type: Content of: <h2>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:7
 msgid "InsertionSort"
-msgstr "InsertionSort"
+msgstr "Tri par insertion"
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:9
+#: src/lessons/sort/insertion/AlgInsertionSort.html:4
 msgid ""
 "This sorting algorithm is quite simple to understand and write, even if it "
 "is not as efficient as possible. Its asymptotic complexity is in O(n2), but "
@@ -7813,7 +8266,7 @@ msgstr ""
 "et N2/4 en moyenne)."
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:14
+#: src/lessons/sort/insertion/AlgInsertionSort.html:9
 msgid ""
 "The idea is to traverse all elements of the array, and to insert each of "
 "them into its proper position in the already sorted part of the array. When "
@@ -7828,17 +8281,17 @@ msgstr ""
 "tableau."
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:22
+#: src/lessons/sort/insertion/AlgInsertionSort.html:17
 msgid "Once this is done, the situation is the following:"
 msgstr "Une fois ceci fait, on se retrouve dans la situation suivante:"
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:26
+#: src/lessons/sort/insertion/AlgInsertionSort.html:21
 msgid "The pseudo-code of this algorithm is thus the following:"
 msgstr "Le pseudo-code de cet algorithme est donc le suivant :"
 
 #. type: Content of: <pre>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:27
+#: src/lessons/sort/insertion/AlgInsertionSort.html:22
 #, no-wrap
 msgid ""
 "For each i in [1,len]\n"
@@ -7860,7 +8313,7 @@ msgstr ""
 "  recopier val dans la dernière case recopiée plus haut\n"
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:37
+#: src/lessons/sort/insertion/AlgInsertionSort.html:32
 msgid ""
 "Naturally, you should use a loop to write the big permutation within the "
 "given loop. Writing it this way would be really ... counter-productive."
@@ -7870,7 +8323,7 @@ msgstr ""
 "vraiment ... contre-productif."
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:40
+#: src/lessons/sort/insertion/AlgInsertionSort.html:35
 msgid ""
 "If you've always wondered what computer science researchers do nowadays, "
 "here is part of the answer: They improve fundamental algorithms so that "
@@ -7882,17 +8335,17 @@ msgstr ""
 "faire des programmes efficaces..."
 
 #. type: Content of: <h2>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:44
+#: src/lessons/sort/insertion/AlgInsertionSort.html:39
 msgid "Other variation of insertion sort"
 msgstr "D'autres variantes du tri par insertion"
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:46
+#: src/lessons/sort/insertion/AlgInsertionSort.html:41
 msgid ""
-"TreeSort builds a binary search tree to sort them. It leads to a O(n log"
-"(n))  on average, but O(n^2) in worst cases. We won't study this algorithm "
-"here since unterstanding its behavior requires to know what a binary tree "
-"is, what is beyond our present goals."
+"TreeSort builds a binary search tree to sort them. It leads to a O(n "
+"log(n))  on average, but O(n^2) in worst cases. We won't study this "
+"algorithm here since unterstanding its behavior requires to know what a "
+"binary tree is, what is beyond our present goals."
 msgstr ""
 "TreeSort construit un arbre binaire équilibré des données pour les trier. "
 "Cela lui permet d'être en O(nlog n) en moyenne (mais O(n^2) dans le pire "
@@ -7901,7 +8354,7 @@ msgstr ""
 "dela de nos objectifs présents."
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:51
+#: src/lessons/sort/insertion/AlgInsertionSort.html:46
 msgid ""
 "There is other variations over the insertion sort, such as PatienceSort "
 "which builds piles of values and sort each pile afterward. This algorithm "
@@ -7912,13 +8365,13 @@ msgid ""
 msgstr ""
 "Il existe d'autres variantes du tri par insertion, comme PatienceSorting, "
 "qui fait des paquets des valeurs et trie ensuite chaque paquet. Cet "
-"algorithme présente un pire cas en O(nlog n), et une complexité spatiale en O"
-"(n).  LibrarySort (proposé en 2004) échange également un peu d'espace pour "
+"algorithme présente un pire cas en O(nlog n), et une complexité spatiale en "
+"O(n).  LibrarySort (proposé en 2004) échange également un peu d'espace pour "
 "du temps puisqu'il présente une complexité moyenne en O(n log n), mais "
 "nécessite de stoquer des données supplémentaires."
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:58
+#: src/lessons/sort/insertion/AlgInsertionSort.html:53
 msgid ""
 "Wikipedia provides a detailled description of all these algorithms we cannot "
 "present here because of time constraints."
@@ -7927,12 +8380,12 @@ msgstr ""
 "algorithmes que nous n'avons pas le temps de détailler ici."
 
 #. type: Content of: <h2>
-#: src/lessons/sort/shell/AlgShellSort.html:3
+#: src/lessons/sort/shell/AlgShellSort.html:1
 msgid "ShellSort"
-msgstr "ShellSort"
+msgstr "Tri Shell"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/sort/shell/AlgShellSort.html:5
+#: src/lessons/sort/shell/AlgShellSort.html:3
 msgid ""
 "This algorithm is named after its author, Donald Shell, who published it in "
 "1959. It can be seen as an application of the CombSort idea (let elements "
@@ -7959,7 +8412,7 @@ msgstr ""
 "précédentes."
 
 #. type: Content of: <p>
-#: src/lessons/sort/shell/AlgShellSort.html:16
+#: src/lessons/sort/shell/AlgShellSort.html:14
 msgid ""
 "Donald Shell propose <code>len/2</code> as initial value of the gap, and "
 "then to divide it by 2 at each step. The pseudo-code is thus the following:"
@@ -7969,7 +8422,7 @@ msgstr ""
 "suivant:"
 
 #. type: Content of: <p><pre>
-#: src/lessons/sort/shell/AlgShellSort.html:19
+#: src/lessons/sort/shell/AlgShellSort.html:17
 #, no-wrap
 msgid ""
 "gap=len/2\n"
@@ -7981,7 +8434,7 @@ msgstr ""
 "  appliquer l'algorithme de tri par insertion en comparant i-gap et i, puis i-2gap et i-gap, puis i-3gap et i-2gap, etc.\n"
 
 #. type: Content of: <p><p>
-#: src/lessons/sort/shell/AlgShellSort.html:24
+#: src/lessons/sort/shell/AlgShellSort.html:22
 msgid ""
 "Just like in CombSort, the sequence of values taken by the gap is crucial "
 "for Shell sort performance. In some rare pathological cases, the sequence we "
@@ -8005,7 +8458,7 @@ msgstr ""
 "est correctement implémenté."
 
 #. type: Content of: <p><p>
-#: src/lessons/sort/shell/AlgShellSort.html:34
+#: src/lessons/sort/shell/AlgShellSort.html:32
 msgid ""
 "In our case, the array are ways too small to benefit of these optimizations. "
 "If you ever need to do so, take as initial gap the biggest value of the "
@@ -8019,7 +8472,7 @@ msgstr ""
 "descendant ensuite."
 
 #. type: Content of: <p><p>
-#: src/lessons/sort/shell/AlgShellSort.html:39
+#: src/lessons/sort/shell/AlgShellSort.html:37
 msgid ""
 "Interesingly enough, determining the best gap sequence for shell sort turns "
 "into a contemporary research issue in computer science. For example, an "
@@ -8097,18 +8550,11 @@ msgstr ""
 
 #. type: Content of: <h1>
 #: src/lessons/sort/comb/AlgCombSort.html:1
-#: src/lessons/sort/comb11/AlgCombSort11.html:1
-#: src/lessons/sort/gnome/AlgGnomeSort.html:1
-msgid "Miscellaneous sorting"
-msgstr "Tris divers"
-
-#. type: Content of: <h2>
-#: src/lessons/sort/comb/AlgCombSort.html:3
 msgid "CombSort"
-msgstr "CombSort"
+msgstr "Tri à peigne"
 
 #. type: Content of: <p>
-#: src/lessons/sort/comb/AlgCombSort.html:5
+#: src/lessons/sort/comb/AlgCombSort.html:3
 msgid ""
 "We saw that CocktailSort improve a bit for turtles (i.e. small values near "
 "to the end of the array), but it is still possible to achieve better. "
@@ -8123,18 +8569,18 @@ msgid ""
 msgstr ""
 "Nous avons vu que le tri cocktail permet d'améliorer un peu les choses pour "
 "les tortues (ie, les petites valeurs près de la fin du tableau), mais on "
-"peut faire mieux. CombSort revient à leur faire prendre un racourci: Au lieu "
-"de comparer les valeurs adjacentes, on compare des valeurs séparés par un "
-"écart plus grand que 1. Ainsi, les tortues vont se déplacer de <i>ecart</i> "
-"cases à chaque parcours. Bien entendu, il faut appliquer l'algorithme avec "
-"des écarts de plus en plus petit et terminer avec <i>ecart=1</i> pour "
-"s'assurer que le tableau est entièrement trié à la fin. Choisir comment "
-"réduire l'écart entre les parcours est une question difficile (voir "
-"wikipédia en anglais sur le thème), mais en pratique, le diviser par 1.3 à "
-"chaque fois amène de bons résultats. Voici le pseudo-code correspondant :"
+"peut faire mieux. Le tri à peigne revient à leur faire prendre un "
+"racourci : Au lieu de comparer les valeurs adjacentes, on compare des "
+"valeurs séparés par un écart plus grand que 1. Ainsi, les tortues vont se "
+"déplacer de <i>ecart</i> cases à chaque parcours. Bien entendu, il faut "
+"appliquer l'algorithme avec des écarts de plus en plus petit et terminer "
+"avec <i>ecart=1</i> pour s'assurer que le tableau est entièrement trié à la "
+"fin. Choisir comment réduire l'écart entre les parcours est une question "
+"difficile (voir wikipédia), mais en pratique, le diviser par 1.3 à chaque "
+"fois amène de bons résultats. Voici le pseudo-code correspondant :"
 
 #. type: Content of: <pre>
-#: src/lessons/sort/comb/AlgCombSort.html:17
+#: src/lessons/sort/comb/AlgCombSort.html:15
 #, no-wrap
 msgid ""
 "gap = len;\n"
@@ -8158,7 +8604,7 @@ msgstr ""
 " tant que l'écart est plus grand que 1 ou que le dernier parcours a inversé au moins un élément\n"
 
 #. type: Content of: <p>
-#: src/lessons/sort/comb/AlgCombSort.html:28
+#: src/lessons/sort/comb/AlgCombSort.html:26
 msgid ""
 "This algorithm was invented by Wlodek Dobosiewicz in 1980, and later "
 "rediscovered and popularized by Stephen Lacey and Richard Box, who described "
@@ -8168,13 +8614,13 @@ msgstr ""
 "et popularisé par Stephen Lacey et Richard Box, qui l'ont décrit dans le "
 "magazine Byte d'avril 1991."
 
-#. type: Content of: <h2>
-#: src/lessons/sort/comb11/AlgCombSort11.html:3
+#. type: Content of: <h1>
+#: src/lessons/sort/comb/AlgCombSort11.html:1
 msgid "CombSort11"
-msgstr "CombSort11"
+msgstr "Tri à peigne 11"
 
 #. type: Content of: <p>
-#: src/lessons/sort/comb11/AlgCombSort11.html:5
+#: src/lessons/sort/comb/AlgCombSort11.html:3
 msgid ""
 "The authors of this algorithm observed that the performance is increased if "
 "we make sure that the last values of the gap are (11, 8, 6, 4, 3, 2, 1)  "
@@ -8182,19 +8628,19 @@ msgid ""
 "CombSort to ensure just after the gap update that if it is 9 or 10, we "
 "should use 11 instead."
 msgstr ""
-"Les auteurs de l'algorithme ont constaté que l'on améliore les performances "
-"en s'assurant que les dernières valeurs de l'écart sont (11, 8, 6, 4, 3, 2, "
-"1) plutôt que (9, 6, 4, 3, 2, 1) ou (10, 7, 5, 3, 2, 1). Reprenez donc le "
-"code de CombSort, et indiquez juste après la mise à jour de l'écart que si "
-"la valeur est 9 ou 10, il faut utiliser 11 à la place."
+"Les auteurs de l'algorithme du tri à peigne ont constaté que l'on améliore "
+"les performances en s'assurant que les dernières valeurs de l'écart sont "
+"(11, 8, 6, 4, 3, 2, 1) plutôt que (9, 6, 4, 3, 2, 1) ou (10, 7, 5, 3, 2, 1). "
+"Reprenez donc le code du tri à peigne, et indiquez juste après la mise à "
+"jour de l'écart que si la valeur est 9 ou 10, il faut utiliser 11 à la place."
 
-#. type: Content of: <h2>
-#: src/lessons/sort/gnome/AlgGnomeSort.html:3
+#. type: Content of: <h1>
+#: src/lessons/sort/gnome/AlgGnomeSort.html:1
 msgid "GnomeSort"
-msgstr "GnomeSort"
+msgstr "Tri du gnome"
 
 #. type: Content of: <p>
-#: src/lessons/sort/gnome/AlgGnomeSort.html:5
+#: src/lessons/sort/gnome/AlgGnomeSort.html:3
 msgid ""
 "The Gnome sort is similar to insertion sort, but the elements are moved in "
 "position by a serie of swaps just like in bubble sort. It is named after the "
@@ -8208,7 +8654,7 @@ msgstr ""
 "auteur:"
 
 #. type: Content of: <p>
-#: src/lessons/sort/gnome/AlgGnomeSort.html:10
+#: src/lessons/sort/gnome/AlgGnomeSort.html:8
 msgid ""
 "Gnome Sort is based on the technique used by the standard Dutch Garden Gnome "
 "(Du.: tuinkabouter). Here is how a garden gnome sorts a line of flower pots. "
@@ -8218,14 +8664,17 @@ msgid ""
 "previous pot, he steps forwards; if there is no pot next to him, he is "
 "done.  <i>—Dick Grune</i>"
 msgstr ""
-"L'algorithme de tri Gnome repose sur la manière habituelle de travailler des "
-"Nains de Jardin Hollandais Garden(Du.: tuinkabouter). Voici comment les "
-"nains de jardin trient une ligne de pots de fleurs.Le nain regarde le pot de "
-"fleur qui est à côté de lui et il regarde également le pot de fleurs "
+"L'algorithme de tri du gnome repose sur la manière habituelle de travailler "
+"des\n"
+"nains de jardin pour trier une ligne de pots de fleurs: Le nain regarde le "
+"pot\n"
+"de fleur qui est à côté de lui et il regarde également le pot de fleurs\n"
 "précédent; si ces deux pots sont alignés dans le bon ordre, le nain se "
-"déplace en avant d'un pot de fleurs, sinon il les échange et se déplace en "
-"arrière d'un pot de fleur. Condition d'arrêt : si il n'y a pas de pot de "
-"fleurs précédent, le nain avance ; si il n'y a pas de pot suivant alors il a "
+"déplace\n"
+"en avant d'un pot de fleurs, sinon il les échange et se déplace en arrière "
+"d'un\n"
+"pot de fleur. Condition aux limites : si il n'y a pas de pot de fleurs "
+"précédent, le nain avance ; si il n'y a pas de pot suivant alors il a "
 "terminé sa tâche."
 
 #. type: Content of: <h1>
@@ -8249,6 +8698,20 @@ msgstr ""
 "récursifs (en particulier QuickSort et MergeSort) est prévu à l'avenir dans "
 "la leçon sur les tris."
 
+#. type: Content of: <h3>
+#: src/lessons/recursion/short_desc.html:1
+msgid "Bases of recursion"
+msgstr "Les bases de la récursion"
+
+#. type: Content of: <p>
+#: src/lessons/recursion/short_desc.html:2
+msgid ""
+"Discover the recursive way of thinking by drawing trees and other figures "
+"with the Logo turtle."
+msgstr ""
+"Découvrez la récursion en dessinant des arbres et d'autres figures avec la "
+"tortue Logo."
+
 #. type: Content of: <h2>
 #: src/lessons/recursion/square/Square.html:1
 msgid "The small cousines of Buggles"
@@ -8312,8 +8775,8 @@ msgstr ""
 "D'un point de vue pratique, la plupart des méthodes que vous connaissez à "
 "propos des buggles fonctionnent également avec les tortues, à quelques "
 "variantes près. En particulier, la méthode <code>forward</code> prend en "
-"argument le nombre de pas donné comme un nombre double (voir \"About this "
-"world\" dans le menu pour plus de détails)."
+"argument le nombre de pas donné comme un nombre double (voir «Aide / À "
+"propos de ce monde» dans le menu pour plus de détails)."
 
 #. type: Content of: <p><p><p><h3>
 #: src/lessons/recursion/square/Square.html:26
@@ -8355,11 +8818,11 @@ msgstr ""
 "Math.ceiling(-5.12) // Value = -5 (Arrondi en direction de plus l'infini)\n"
 "(double) 17 // Value = 17.0 (“transtypage en double”, converti en double)\n"
 
-#. type: Content of: <br><p><p><p><p><h2>
+#. type: Content of: <br><p><p><p><p><p><h2>
 #: src/lessons/recursion/square/Square.html:43
 #: src/lessons/recursion/circle/Circle.html:14
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:20
-#: src/lessons/welcome/array/basics/Array.html:146
+#: src/lessons/recursion/hanoi/HanoiBoard.html:20
+#: src/lessons/welcome/array/basics/Array.html:210
 msgid "Goal of this exercise"
 msgstr "Objectif de l'exercice"
 
@@ -8426,8 +8889,8 @@ msgstr "void polygonFractal (int levels, int sides, double length, double shrink
 #. type: Content of: <p>
 #: src/lessons/recursion/polygonfractal/PolygonFractal.html:7
 #: src/lessons/recursion/sierpinski/Sierpinski.html:8
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:27
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:50
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:27
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:50
 msgid ""
 "Have a look at each world's objective view to understand how to write the "
 "function."
@@ -8716,72 +9179,152 @@ msgstr ""
 "          spiral(0,90,12,3);\n"
 
 #. type: Content of: <h2>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:1
-msgid "Dragon curve (1)"
-msgstr "Courbe du Dragon (1)"
-
-#. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:3
-msgid "The dragon curve is a classical example of recursive method."
-msgstr "Un exemple classique de la méthode récursive est la courbe du Dragon."
-
-#. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:5
-msgid "The definition of this curve is the following:"
-msgstr "La définition de cette courbe est la suivante :"
+#: src/lessons/recursion/spiral/SpiralUse.html:1
+msgid "Drawing spirals"
+msgstr "Faire des spirales"
 
-#. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:6
+#. type: Content of: outside any tag (error?)
+#: src/lessons/recursion/spiral/SpiralUse.html:3
 msgid ""
-"the dragon curve of order 1 is a vector between to arbitrary points P and Q,"
+"Can you reproduce the provided patterns of this exercise using the "
+"<code>spiral()</code> method?"
 msgstr ""
-"la courbe du Dragon d'ordre 1 est un vecteur entre deux points quelconques P "
-"et Q,"
+"Saurez-vous faire les différents motifs de cet exercice en utilisant la "
+"méthode <code>spiral()</code>?"
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:7
-msgid ""
-"the dragon curve of order n is the dragon curve of order n-1 between P and "
-"R, followed by the same curve of order n-1 between R and Q (reverse side), "
-"where PRQ is an isoscele triangle with angle R being a right angle, and R "
-"being at the right of the PQ vector. Thus, if P and Q coordinates are (x, "
-"y)  and (z, t), the coordinate (u, v) of R are given by:"
-msgstr ""
-"la courbe du Dragon d'ordre n est la courbe du Dragon d'ordre n-1 entre P et "
-"R suivie de la même courbe d'ordre n-1 entre R et Q (à l'envers), où PRQ est "
-"le triangle isocèle rectangle en R, et R est à droite du vecteur PQ.  Donc, "
-"si P et Q sont les points de coordonnées (x, y) et (z,t), les coordonnées "
-"(u, v) de R sont"
-
-#. type: Content of: <p><pre>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:13
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:27
-#, no-wrap
+#: src/lessons/recursion/spiral/SpiralUse.html:6
 msgid ""
-"u = (x + z)/2 + (t - y)/2\n"
-"v = (y + t)/2 - (z - x)/2\n"
+"You must provide a method called <code>doit(int)</code> taking the number of "
+"the page to draw as parameter. Its code is as following, with A0, B0, etc "
+"being integers. The goal of this exercise is to find the good values for "
+"each page."
 msgstr ""
-"u = (x + z)/2 + (t - y)/2\n"
-"v = (y + t)/2 - (z - x)/2\n"
-
-#. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:19
-msgid "The prototype of the method drawing the curve is the following:"
-msgstr "Le prototype de la méthode traçant la courbe est le suivant :"
+"Vous devez écrire une méthode <code>doit(int)</code> qui prend en paramètre "
+"le numéro de la page à dessiner. Son code est de la forme suivante. A0, B0, "
+"etc sont des nombres entiers. L'objectif de l'exercice est de retrouver les "
+"valeurs convenables pour chaque page."
 
-#. type: Content of: <p><pre>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:20
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:22
+#. type: Content of: <pre>
+#: src/lessons/recursion/spiral/SpiralUse.html:12
 #, no-wrap
-msgid "void dragon(int ordre, double x, double y, double z, double t)"
-msgstr "void dragon(int ordre, double x, double y, double z, double t)"
-
-#. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:23
 msgid ""
-"You should use the method <code>setPos(x,y)</code> to put your turtle at "
-"coordinates (x,y) and the method <code>moveTo(z,t)</code> to draw a line "
-"between the turtle position and the point (z,t)."
+"void doit(int page) {\n"
+"  switch (page) {\n"
+"    case 0: /* Drawing of the first page, dubbed \"One\" */\n"
+"      spiral(A0,B0,C0,D0);\n"
+"      break;\n"
+"    case 1: /* Drawing of the second page, dubbed \"Two\" */\n"
+"      spiral(A1,B1,C1,D1);\n"
+"      break;\n"
+"    case 2: /* Drawing of the page dubbed \"Three\" */\n"
+"      spiral(A2,B2,C2,D2);\n"
+"      break;\n"
+"    case 3: /* Drawing of the page dubbed \"Four\" */\n"
+"      spiral(A3,B3,C3,D3);\n"
+"      break;\n"
+"    case 4: /* Drawing of the page dubbed \"Five\" */\n"
+"      spiral(A4,B4,C4,D4);\n"
+"      break;\n"
+"  }\n"
+"}\n"
+msgstr ""
+"void doit(int page) {\n"
+"  switch (page) {\n"
+"    case 0: /* Dessin de la première page, marquée \"One\" */\n"
+"      spiral(A0,B0,C0,D0);\n"
+"      break;\n"
+"    case 1: /* Dessin de la seconde page, marquée \"Two\" */\n"
+"      spiral(A1,B1,C1,D1);\n"
+"      break;\n"
+"    case 2: /* Dessin de la page marquée \"Three\" */\n"
+"      spiral(A2,B2,C2,D2);\n"
+"      break;\n"
+"    case 3: /* Dessin de la page marquée \"Four\" */\n"
+"      spiral(A3,B3,C3,D3);\n"
+"      break;\n"
+"    case 4: /* Dessin de la page marquée \"Five\" */\n"
+"      spiral(A4,B4,C4,D4);\n"
+"      break;\n"
+"  }\n"
+"}\n"
+
+#. type: Content of: <p>
+#: src/lessons/recursion/spiral/SpiralUse.html:34
+msgid ""
+"No need to copy over the method of <code>spiral()</code>, the turtle of this "
+"exercise already knows it."
+msgstr ""
+"Pas besoin de recopier le code de <code>spiral()</code>, la tortue de cet "
+"exercice connait déjà la méthode."
+
+#. type: Content of: <h2>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:1
+msgid "Dragon curve (1)"
+msgstr "Courbe du Dragon (1)"
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:3
+msgid "The dragon curve is a classical example of recursive method."
+msgstr "Un exemple classique de la méthode récursive est la courbe du Dragon."
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:5
+msgid "The definition of this curve is the following:"
+msgstr "La définition de cette courbe est la suivante :"
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:6
+msgid ""
+"the dragon curve of order 1 is a vector between to arbitrary points P and Q,"
+msgstr ""
+"la courbe du Dragon d'ordre 1 est un vecteur entre deux points quelconques P "
+"et Q,"
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:7
+msgid ""
+"the dragon curve of order n is the dragon curve of order n-1 between P and "
+"R, followed by the same curve of order n-1 between R and Q (reverse side), "
+"where PRQ is an isoscele triangle with angle R being a right angle, and R "
+"being at the right of the PQ vector. Thus, if P and Q coordinates are (x, "
+"y)  and (z, t), the coordinate (u, v) of R are given by:"
+msgstr ""
+"la courbe du Dragon d'ordre n est la courbe du Dragon d'ordre n-1 entre P et "
+"R suivie de la même courbe d'ordre n-1 entre R et Q (à l'envers), où PRQ est "
+"le triangle isocèle rectangle en R, et R est à droite du vecteur PQ.  Donc, "
+"si P et Q sont les points de coordonnées (x, y) et (z,t), les coordonnées "
+"(u, v) de R sont"
+
+#. type: Content of: <p><pre>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:13
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:27
+#, no-wrap
+msgid ""
+"u = (x + z)/2 + (t - y)/2\n"
+"v = (y + t)/2 - (z - x)/2\n"
+msgstr ""
+"u = (x + z)/2 + (t - y)/2\n"
+"v = (y + t)/2 - (z - x)/2\n"
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:19
+msgid "The prototype of the method drawing the curve is the following:"
+msgstr "Le prototype de la méthode traçant la courbe est le suivant :"
+
+#. type: Content of: <p><pre>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:20
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:22
+#, no-wrap
+msgid "void dragon(int ordre, double x, double y, double z, double t)"
+msgstr "void dragon(int ordre, double x, double y, double z, double t)"
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:23
+msgid ""
+"You should use the method <code>setPos(x,y)</code> to put your turtle at "
+"coordinates (x,y) and the method <code>moveTo(z,t)</code> to draw a line "
+"between the turtle position and the point (z,t)."
 msgstr ""
 "Vous utiliserez la méthode <code>setPos(x,y)</code> pour déplacer votre "
 "tortue aux coordonnées (x,y) et la méthode <code>moveTo(z,t)</code> pour "
@@ -8789,18 +9332,18 @@ msgstr ""
 "de coordonnées (z,t)"
 
 #. type: Content of: <h2>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:1
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:1
 msgid "The dragon curve (2)"
 msgstr "Courbe du Dragon (2)"
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:3
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:3
 msgid ""
 "Previous solution induce that the turtle teleports to other location, or at "
 "the very least, that it moves its pen up during the drawing. Indeed, the end "
 "of the drawing of the first recursive call does not match the begining of "
-"the second recursive call. That is why we had to use the method <code>setPos"
-"()</code>"
+"the second recursive call. That is why we had to use the method "
+"<code>setPos()</code>"
 msgstr ""
 "La solution précédente nécessite que la tortue se téléporte, autrement dit, "
 "qu'il est parfois nécessaire de lever le crayon pour tracer la courbe.  En "
@@ -8810,7 +9353,7 @@ msgstr ""
 "<code>setPos()</code>"
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:9
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:9
 msgid ""
 "In this lesson, you will write a recursive method allowing to draw the "
 "dragon curve without taking the pen up. For that, we need another recursive "
@@ -8821,12 +9364,12 @@ msgstr ""
 "définirez une seconde méthode récursive qui trace la courbe à l'envers."
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:13
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:13
 msgid ""
 "The method <code>dragon()</code> is then recursively defined using itself "
-"and <code>dragonReverse()</code>. Likewise, the method <code>dragonReverse()"
-"</code> is defined recursively using itself and <code>dragon()</code>. This "
-"is thus an example of <i>mutual recursion</i>."
+"and <code>dragonReverse()</code>. Likewise, the method "
+"<code>dragonReverse()</code> is defined recursively using itself and "
+"<code>dragon()</code>. This is thus an example of <i>mutual recursion</i>."
 msgstr ""
 "La méthode <code>dragon()</code> sera définie récursivement en fonction des "
 "méthodes <code>dragon()</code> et <code>dragonInverse()</code>. De même, la "
@@ -8835,7 +9378,7 @@ msgstr ""
 "exemple de <i>récursivité croisée</i>."
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:20
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:20
 msgid ""
 "The prototype of the <code>dragon()</code> method remains unchanged from "
 "previous exercise:"
@@ -8844,28 +9387,28 @@ msgstr ""
 "précédemment :"
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:24
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:24
 msgid ""
 "The new point's coordinate (u, v) introduced by the <code>dragon()</code> "
 "are:"
 msgstr ""
-"Les coordonnées (u, v) du nouveau point introduit par la méthode <code>dragon"
-"()</code> seront :"
+"Les coordonnées (u, v) du nouveau point introduit par la méthode "
+"<code>dragon()</code> seront :"
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:33
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:33
 msgid "The prototype of the method <code>dragonReverse</code> is similar:"
 msgstr ""
 "Le prototype de la méthode <code>dragonInverse()</code> est identique : :"
 
 #. type: Content of: <p><pre>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:34
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:34
 #, no-wrap
 msgid "void dragonReverse(int ordre, double x, double y, double z, double t)"
 msgstr "void dragonInverse(int ordre, double x, double y, double z, double t)"
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:36
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:36
 msgid ""
 "The new point's coordinate (u, v) introduced by the <code>dragonReverse()</"
 "code> are:"
@@ -8874,7 +9417,7 @@ msgstr ""
 "<code>dragonInverse()</code> seront :"
 
 #. type: Content of: <p><pre>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:39
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:39
 #, no-wrap
 msgid ""
 "u = (x + z)/2 - (t - y)/2\n"
@@ -8884,7 +9427,7 @@ msgstr ""
 "v = (y + t)/2 + (z - x)/2\n"
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:45
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:45
 msgid ""
 "To make the work of each method recursiv more visible, the line painted by "
 "the <code>dragon()</code> must be red (<code>Color.red</code>) while the "
@@ -8896,93 +9439,44 @@ msgstr ""
 "rouge (<code>Color.red</code>) et le trait tracé par la méthode "
 "<code>dragonInverse</code> devra être bleu (<code>Color.blue</code>)."
 
-#. type: Content of: <h2>
-#: src/lessons/recursion/spiraluse/SpiralUse.html:1
-msgid "Drawing spirals"
-msgstr "Faire des spirales"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/recursion/spiraluse/SpiralUse.html:3
-msgid ""
-"Can you reproduce the provided patterns of this exercise using the "
-"<code>spiral()</code> method?"
-msgstr ""
-"Saurez-vous faire les différents motifs de cet exercice en utilisant la "
-"méthode <code>spiral()</code>?"
+#. type: Content of: <h3>
+#: src/lessons/recursion/hanoi/Main.html:1
+#: src/lessons/recursion/hanoi/short_desc.html:1
+msgid "Hanoi towers"
+msgstr "Les tours de Hanoï"
 
 #. type: Content of: <p>
-#: src/lessons/recursion/spiraluse/SpiralUse.html:6
+#: src/lessons/recursion/hanoi/Main.html:2
 msgid ""
-"You must provide a method called <code>doit(int)</code> taking the number of "
-"the page to draw as parameter. Its code is as following, with A0, B0, etc "
-"being integers. The goal of this exercise is to find the good values for "
-"each page."
+"Here comes the super classical exercise on recursion. It's not very "
+"developped here, I'm not sure of what I could add to this lesson. If you "
+"have any idea, please submit them."
 msgstr ""
-"Vous devez écrire une méthode <code>doit(int)</code> qui prend en paramètre "
-"le numéro de la page à dessiner. Son code est de la forme suivante. A0, B0, "
-"etc sont des nombres entiers. L'objectif de l'exercice est de retrouver les "
-"valeurs convenables pour chaque page."
+"Voici l'exercice ultra classique sur la récursivité. Il n'est pas très "
+"développé ici, mais je ne sais pas vraiment quoi rajouter pour prolonger le "
+"plaisir. Si vous avez des idées, n'hésitez pas à nous en faire part."
 
-#. type: Content of: <pre>
-#: src/lessons/recursion/spiraluse/SpiralUse.html:12
-#, no-wrap
-msgid ""
-"void doit(int page) {\n"
-"  switch (page) {\n"
-"    case 0: /* Drawing of the first page, dubbed \"One\" */\n"
-"      spiral(A0,B0,C0,D0);\n"
-"      break;\n"
-"    case 1: /* Drawing of the second page, dubbed \"Two\" */\n"
-"      spiral(A1,B1,C1,D1);\n"
-"      break;\n"
-"    case 2: /* Drawing of the page dubbed \"Three\" */\n"
-"      spiral(A2,B2,C2,D2);\n"
-"      break;\n"
-"    case 3: /* Drawing of the page dubbed \"Four\" */\n"
-"      spiral(A3,B3,C3,D3);\n"
-"      break;\n"
-"    case 4: /* Drawing of the page dubbed \"Five\" */\n"
-"      spiral(A4,B4,C4,D4);\n"
-"      break;\n"
-"  }\n"
-"}\n"
-msgstr ""
-"void doit(int page) {\n"
-"  switch (page) {\n"
-"    case 0: /* Dessin de la première page, marquée \"One\" */\n"
-"      spiral(A0,B0,C0,D0);\n"
-"      break;\n"
-"    case 1: /* Dessin de la seconde page, marquée \"Two\" */\n"
-"      spiral(A1,B1,C1,D1);\n"
-"      break;\n"
-"    case 2: /* Dessin de la page marquée \"Three\" */\n"
-"      spiral(A2,B2,C2,D2);\n"
-"      break;\n"
-"    case 3: /* Dessin de la page marquée \"Four\" */\n"
-"      spiral(A3,B3,C3,D3);\n"
-"      break;\n"
-"    case 4: /* Dessin de la page marquée \"Five\" */\n"
-"      spiral(A4,B4,C4,D4);\n"
-"      break;\n"
-"  }\n"
-"}\n"
+#. type: Content of: <p>
+#: src/lessons/recursion/hanoi/short_desc.html:2
+msgid "Here comes the super classical exercise on recursion."
+msgstr "Voici l'exercice ultra classique de récursivité."
 
 #. type: Content of: <p>
-#: src/lessons/recursion/spiraluse/SpiralUse.html:34
+#: src/lessons/recursion/hanoi/short_desc.html:4
 msgid ""
-"No need to copy over the method of <code>spiral()</code>, the turtle of this "
-"exercise already knows it."
+"This is an application exercise of recursion, that you should master to take "
+"this lesson."
 msgstr ""
-"Pas besoin de recopier le code de <code>spiral()</code>, la tortue de cet "
-"exercice connait déjà la méthode."
+"C'est un exercice d'application de la récursivité, que vous devez maîtriser "
+"avant de tenter cette leçon."
 
 #. type: Content of: <h2>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:1
+#: src/lessons/recursion/hanoi/HanoiBoard.html:1
 msgid "Tower of Hanoi"
 msgstr "Les tours de Hanoï"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:3
+#: src/lessons/recursion/hanoi/HanoiBoard.html:3
 msgid ""
 "The Tower of Hanoi or Towers of Hanoi , also called the Tower of Brahma or "
 "Towers of Brahma, is a mathematical game or puzzle. It consists of three "
@@ -9001,12 +9495,12 @@ msgstr ""
 "pile entière jusqu'à une autre tour, en respectant les règles suivantes :"
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:11
+#: src/lessons/recursion/hanoi/HanoiBoard.html:11
 msgid "Only one disk may be moved at a time."
 msgstr "Seul un disque peut être bougé à la fois."
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:13
+#: src/lessons/recursion/hanoi/HanoiBoard.html:13
 msgid ""
 "Each move consists of taking the upper disk from one of the rods and sliding "
 "it onto another rod, on top of the other disks that may already be present "
@@ -9017,12 +9511,12 @@ msgstr ""
 "déjà être présents sur cette tour."
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:17
+#: src/lessons/recursion/hanoi/HanoiBoard.html:17
 msgid "No disk may be placed on top of a smaller disk."
 msgstr "Aucun disque ne peut être placé au dessus d'un disque plus petit."
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:22
+#: src/lessons/recursion/hanoi/HanoiBoard.html:22
 msgid ""
 "Write the core of the method: <code>public void solve(int src, int dst, int "
 "height) throws HanoiInvalidMove</code> This method will recursively solve "
@@ -9047,55 +9541,128 @@ msgstr ""
 "démontre cette approche :"
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:36
+#: src/lessons/recursion/hanoi/HanoiBoard.html:36
 msgid "label the pegs A, B, C (these labels may move at different steps)"
 msgstr ""
 "Etiquetons les tours A, B, C ( ces étiquettes peuvent changer à différentes "
 "étapes )"
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:37
+#: src/lessons/recursion/hanoi/HanoiBoard.html:37
 msgid "let n be the total number of discs (the height of the initial tower)"
 msgstr "Soit n le nombre total de disques ( la hauteur de la tour initiale )"
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:38
+#: src/lessons/recursion/hanoi/HanoiBoard.html:38
 msgid "number the discs from 1 (smallest, topmost) to n (largest, bottommost)"
 msgstr ""
 "Numérotez les disques de 1 ( le plus petit, le plus en haut ) à n ( le plus "
 "large, le plus en bas )"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:41
+#: src/lessons/recursion/hanoi/HanoiBoard.html:41
 msgid "To move n discs from peg A to peg C:"
 msgstr "Pour déplacer n disques du poteau A au poteau C : "
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:43
+#: src/lessons/recursion/hanoi/HanoiBoard.html:43
 msgid "move n−1 discs from A to B. This leaves disc #n alone on peg A"
 msgstr ""
 "déplcacer n-1 disques de A vers B. Cela laisse le disque #n seul sur le "
 "poteau A"
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:44
+#: src/lessons/recursion/hanoi/HanoiBoard.html:44
 msgid "move disc #n from A to C"
 msgstr "déplacer le disque #n de A vers C"
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:45
+#: src/lessons/recursion/hanoi/HanoiBoard.html:45
 msgid "move n−1 discs from B to C so they sit on disc #n"
 msgstr "deplacer n-1 disques de B vers C afin qu'ils reposent sur le disque #n"
 
 #. type: Content of: <h1>
-#: src/lessons/maze/Main.html:1
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:1
+msgid "HanoiWorld"
+msgstr "Le monde des tours de Hanoï"
+
+#. type: Content of: <p>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:4
+msgid ""
+"This world implements the ultra-classical Hanoi problem. You are asked to "
+"move the disk pile from the stick where they are to the target stick (given "
+"as second parameter in the world's name -- number 1 for the default world). "
+"There is some extra constraint: you can only move one disk at a time, and "
+"you cannot move a big disk over a smaller one."
+msgstr ""
+"Ce monde implémente le problème ultra classique de Hanoï. Il vous est "
+"demandé de déplacer une pile de disques du piquet où ils se trouvent vers un "
+"piquet cible (passé comme second paramètre dans le nom du monde -- numéro 1 "
+"pour le monde par défaut). Il y a quelques contraintes supplémentaires: il "
+"est interdit de déplacer plus d'un disque à la fois, ainsi que de placer un "
+"disque plus grand sur un disque plus petit."
+
+#. type: Content of: <p>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:11
+msgid "Only 3 functions are provided:"
+msgstr "Seules trois fonctions sont fournies :"
+
+#. type: Content of: <pre>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:13
+#, no-wrap
+msgid "void move(int src, int dst)"
+msgstr "void move(int src, int dst)"
+
+#. type: Content of: <pre>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:14
+#, no-wrap
+msgid "move(src, dst) throws HanoiInvalidMove"
+msgstr "move(src, dst) throws HanoiInvalidMove"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:16
+msgid ""
+"Moves one disk from the stick <code>src</code> onto the stick <code>dst</"
+"code>. If you try to do an invalid move (like laying a disk over a smaller "
+"one), an IllegalArgumentException is thrown."
+msgstr ""
+"Elle déplace un disque d'un piquet <code>src</code> vers le piquet "
+"<code>dst</code>. Si vous demandez un déplacement invalide (comme le "
+"placement d'un disque sur un disque plus petit), une exception "
+"IllegalArgumentException est levée."
+
+#. type: Content of: <pre>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:20
+#, no-wrap
+msgid "int getSlotSize(int slot);"
+msgstr "int getSlotSize(int slot);"
+
+#. type: Content of: <pre>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:21
+#, no-wrap
+msgid "getSlotSize(slot)"
+msgstr "getSlotSize(slot)"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:22
+msgid ""
+"Returns the amount of disks placed on the specified slot. This is mainly "
+"used to initialize the recursion and set the amount of recursive call to "
+"execute."
+msgstr ""
+"Retourne le nombre de disques placés sur un piquet donné. Cette fonction est "
+"surtout utile pour initialiser la récursion et déterminer le nombre d'appels "
+"récursifs à réaliser."
+
+#. type: Content of: <h3>
+#: src/lessons/maze/Main.html:1 src/lessons/maze/short_desc.html:1
 msgid "Labyrinths"
 msgstr "Labyrinthes"
 
 #. type: Content of: <p>
-#: src/lessons/maze/Main.html:3
+#: src/lessons/maze/Main.html:3 src/lessons/maze/short_desc.html:3
 msgid ""
-"This lesson propose several exercises about labyrinths in the buggle world."
+"This lesson proposes several exercises about labyrinths in the buggle world."
 msgstr ""
 "Cette leçon propose divers exercices à propos des labyrinthes dans le monde "
 "des buggles."
@@ -9137,45 +9704,29 @@ msgstr ""
 #: src/lessons/maze/randommouse/RandomMouseMaze.html:18
 msgid ""
 "While the buggle didn't find the path to the escape, it must proceed the "
-"following way: pick a random integer between 0 and 2 by using the "
+"following way: pick a random integer between 0 and 2 by using the provided "
 "<code>random3()</code> method and make one of the following actions: moving "
 "forward if possible, turn left or turn right."
 msgstr ""
 "Tant que notre buggle n'a pas trouvé la sortie, il doit progresser de la "
-"façon suivante : choisir un entier entre 0 et 2 au hasard à l'aide de la "
-"méthode <code>random3()</code> et prendre l'une des décisions suivantes "
-"selon l'entier choisi: avancer si il le peut, tourner à droite ou bien "
-"tourner à gauche)."
+"façon suivante : choisir un entier entre 0 et 2 au hasard à l'aide de "
+"la méthode <code>random3()</code> fournie et prendre l'une des décisions "
+"suivantes selon l'entier choisi : avancer si il le peut, tourner à "
+"droite ou bien tourner à gauche."
 
 #. type: Content of: <a><p>
-#: src/lessons/maze/randommouse/RandomMouseMaze.html:26
+#: src/lessons/maze/randommouse/RandomMouseMaze.html:27
 msgid ""
 "This exercise's objective is to write an algorithm allowing the buggle to "
-"find its path out of the maze. Do not forget to let your buggle pick up the "
-"baggle once it found the way out."
+"find its path out of the maze."
 msgstr ""
-"<a name=\"Objectifs\"> L'objectif de cet exercice est d'écrire un algorithme "
-"permettant à votre buggle de sortir du labyrinthe. Pensez à faire prendre le "
-"baggle à votre buggle avant la fin de votre programme."
+"L'objectif de cet exercice est d'écrire un algorithme permettant à votre "
+"buggle de sortir du labyrinthe."
 
 #. type: Content of: <a><p>
 #: src/lessons/maze/randommouse/RandomMouseMaze.html:32
-msgid ""
-"Write the <code>run()</code> method so that your buggle takes a random "
-"decision (forward, turn left or turn right). You can use the <code>random3()"
-"</code> method which returns randomly either 0, 1 or 2."
-msgstr ""
-"Ecrivez la méthode <code>run()</code> pour que votre buggle prenne une "
-"décision (avancer, tourner à droite, tourner à gauche) au hasard.  Vous "
-"pouvez utiliser la méthode <code>random3()</code> qui retourne de manière "
-"aléatoire la valeur 0, 1 ou 2."
-
-#. type: Content of: <a><p>
-#: src/lessons/maze/randommouse/RandomMouseMaze.html:38
 msgid "Don't forget to pick up the baggle once you've reached it."
-msgstr ""
-"N'oubliez pas de faire ramasser le baggle par votre buggle à la fin de votre "
-"code."
+msgstr "N'oubliez pas de ramasser le baggle quand vous l'avez trouvé."
 
 #. type: Content of: <h2>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:1
@@ -9194,25 +9745,25 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:6
 msgid ""
-"Hopefully, this maze is simpler that it seems at the first glance: every "
-"wall are connected to each other. To get out of this kind of maze, the "
-"buggle only have to follow a wall (the one on its left or the one on its "
-"right, it doesn't matter).  While keeping a paw on the wall, the buggle must "
-"move forward until it finds the maze exit and this biscuit it loves so much."
+"The good news is that this maze is simpler that it seems at the first "
+"glance: every wall are connected to each other. To get out of this kind of "
+"maze, the buggle only have to follow a wall (the one on its left or the one "
+"on its right, it doesn't matter).  While keeping a paw on the wall, the "
+"buggle must move forward until it finds the maze exit and this biscuit it "
+"loves so much."
 msgstr ""
 "Heureusement, ce labyrinthe est plus simple qu'il n'y paraît: tous les murs "
 "sont connectés les uns aux autres. Pour sortir de ce genre de labyrinthe, il "
 "suffit à votre buggle de longer un mur (celui à sa droite, ou celui à sa "
-"gauche: c'est sans importance). Et, tout en gardant sa patte posée sur ce "
-"mur, votre buggle doit avancer jusqu'à ce qu'il trouve la sortie du "
-"labyrinthe et ce biscuit qu'il apprécie tant."
+"gauche: c'est sans importance). Tout en gardant sa patte posée sur ce mur, "
+"votre buggle doit avancer jusqu'à ce qu'il trouve la sortie du labyrinthe et "
+"ce biscuit qu'il apprécie tant."
 
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:13
 msgid ""
-"This algorithm works here because there is no island of isolated walls, so "
-"our buggle cannot loop around for ever without encountering the baggle it "
-"looks for."
+"This works here because there is no island of isolated walls, so our buggle "
+"cannot loop around for ever without encountering its baggle."
 msgstr ""
 "Cet algorithme fonctionne ici car il n'y a pas d'île de murs isolés, ce qui "
 "fait que la buggle ne peut pas boucler autour des murs sans rencontrer le "
@@ -9230,45 +9781,41 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:20
 msgid ""
-"As said in the introduction, it is exactly the same if you decide to follow "
-"the left wall or the right one. Simply, the demo follows the left one, so "
-"you should do the same in your solution to ease the comparison of your "
-"solution and the demo."
+"As said earlier, it does not matter whether you decide to follow the left "
+"wall or the right one. Simply, the demo follows the left one, so you should "
+"do the same in your solution to ease the comparison of your solution and the "
+"demo."
 msgstr ""
-"Comme dit dans l'introduction, il est sans importance de décider de suivre "
-"le mur droit ou le mur gauche. Simplement, la démo suit le mur gauche, et il "
-"serait donc avisé d'en faire de même dans votre solution pour simplifier la "
-"comparaison de votre solution et de la démo."
+"Comme dit précédement, le mur choisi n'a pas d'importance. Simplement, la "
+"démo suit le mur gauche, et il serait donc avisé d'en faire de même pour "
+"simplifier la comparaison de votre solution et de la démo."
 
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:25
 msgid ""
-"Write a method <code>void keepHandOnSideWall()</code> which lets the buggle "
-"move one step forward while keeping the paw on the wall of the selected "
-"side. You thus have to ensure that the buggle always keep the paw on the "
-"wall, but also that it won't crash into a wall. You can check the tip for "
-"more info on this, but only do so if you're stuck. Try to do it without the "
-"tip first."
+"Write a method <code>keepHandOnSideWall()</code> which lets the buggle move "
+"one step forward while keeping the paw on the wall of the selected side. You "
+"must ensure that the buggle always keep the paw on the wall, but also that "
+"it won't crash into a wall. You can check the tip for more info on this, but "
+"only do so if you're stuck. Try to do it without the tip first."
 msgstr ""
-"Écrivez une méthode <code>void keepHandOnSideWall()</code> qui fait avancer\n"
+"Écrivez une méthode <code>keepHandOnSideWall()</code> qui fait avancer\n"
 "votre buggle d'une case tout en gardant la patte sur le mur du côté\n"
-"choisi. Vous devez donc vous assurer que votre buggle garde toujours la "
-"patte\n"
+"choisi. Vous devez vous assurer que votre buggle garde toujours la patte\n"
 "sur le mur et également qu'il ne risque pas de percuter un mur. Vous pouvez\n"
 "regarder l'indice (hint) si vous êtes coincés, mais vous devriez d'abord\n"
-"essayer de le faire sans l'indice."
+"essayer de le faire par vous-même."
 
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:32
 msgid ""
-"Then, write a <code>run()</code> method which traverse the maze step by step "
-"(using <code>void keepHandOnSideWall()</code>) until it finds the biscuit "
-"and the exit. Don't forget to pick the baggle up once you've found it."
+"Then, write the whole algorithm to traverse the maze step by step (using "
+"<code>keepHandOnSideWall()</code>) until it finds the biscuit and the exit. "
+"Don't forget to pick the baggle up once you've found it."
 msgstr ""
-"Enfin, écrivez la méthode <code>void run()</code> qui cherche le mur le plus "
-"proche (méthode <code>void putHandOnSideWall()</code>), puis parcours le "
-"labyrinthe (méthode <code>void keepHandOnSideWall()</code>) jusqu'à trouver "
-"la sortie et le biscuit. Enfin il ne faut pas oubliez de prendre la baggle."
+"Enfin, écrivez l'algorithme complet qui parcourt le labyrinthe pas à pas "
+"jusqu'à\n"
+"trouver le biscuit et la sortie. N'oubliez pas de prendre le baggle."
 
 #. type: Attribute 'alt' of: <div>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:37
@@ -9317,12 +9864,12 @@ msgstr "Étape suivante"
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:60
 msgid ""
 "If you do a <code>turnRight()</code> in any case at the end of your "
-"function, it's possible to write it in 3 lines with a <code>while()</code> "
+"function, it's possible to write it in 3 lines with a <code>while</code> "
 "loop."
 msgstr ""
 "Si vous faites un <code>turnRight()</code> dans tous les cas à la fin de "
 "votre fonction, il est possible de l'écrire en trois lignes avec une boucle "
-"<code>while()</code>."
+"<code>while</code>."
 
 #. type: Content of: <h2>
 #: src/lessons/maze/pledge/PledgeMaze.html:1
@@ -9334,22 +9881,24 @@ msgstr "Algorithme de Pledge"
 msgid ""
 "Once again, you thought that your algorithm were good enough to escape the "
 "maze, and once again, you buggle is now in a maze where your previous "
-"algorithm fails. Just give it a try: hit the \"Run\" button and see your "
-"creation fail. The trap is shaped like an upper case \"G\". The buggle "
-"enters the trap and follows the inner border. At some point, it finds the "
-"north direction free, run into that direction, and falls again in the trap."
+"algorithm fails. Just give it a try: copy/paste your code and hit the \"Run"
+"\" button and see your creation fail. The trap is shaped like an upper case "
+"\"G\". The buggle enters the trap and follows the inner border. At some "
+"point, it finds the north direction free, run into that direction, and falls "
+"again in the trap."
 msgstr ""
-"Une fois de plus, vous pensiez que votre algorithme vous permettait de vous "
+"Une fois de plus, vous pensiez que votre algorithme vous permettait de vous\n"
 "échapper des labyrinthes, et une fois de plus, votre buggle est prise dans "
-"un labyrinthe où votre algorithme précédent ne suffit pas. Vous pouvez "
-"tenter de simplement appuyer sur le bouton «Run» et voir votre création "
-"échouer. Le piège a la forme d'un «G» majuscule : la buggle entre dans le "
-"piège, suit le bord interne. Au bout d'un moment, la direction nord est "
-"libre et votre buggle se met donc à courir dans cette direction. Pour "
-"retomber dans le piège..."
+"un\n"
+"labyrinthe mettant votre algorithme en défaut. Vous essayer de copier votre "
+"code\n"
+"et de l'exécuter pour voir votre création échouer. Le piège a la forme d'un "
+"«G» majuscule : la buggle entre dans le piège, suit le bord interne. Au bout "
+"d'un moment, la direction nord est libre et votre buggle se met donc à "
+"courir dans cette direction. Pour retomber dans le piège..."
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:12
+#: src/lessons/maze/pledge/PledgeMaze.html:13
 msgid ""
 "The Pledge's algorithm (named after Jon Pledge of Exeter) can solve this "
 "maze."
@@ -9358,7 +9907,7 @@ msgstr ""
 "labyrinthe."
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:15
+#: src/lessons/maze/pledge/PledgeMaze.html:16
 msgid ""
 "This algorithm is a modification of the previous one thought to avoid "
 "obstacles. It randomly picks a heading and let the buggle move in that "
@@ -9378,7 +9927,7 @@ msgstr ""
 
 # type: Content of: <p><p>
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:23
+#: src/lessons/maze/pledge/PledgeMaze.html:24
 msgid ""
 "Note that the use of \"total turning\" rather than just the \"current "
 "direction\" allows the algorithm to avoid G-shapped traps. If one proceeds "
@@ -9397,7 +9946,7 @@ msgstr ""
 
 # type: Content of: <p><p>
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:30
+#: src/lessons/maze/pledge/PledgeMaze.html:31
 msgid ""
 "The Pledge's algorithm does not leave the rightmost wall due to the total "
 "turning not being zero at that point. It follows the wall all the way "
@@ -9409,7 +9958,7 @@ msgstr ""
 "une fois parvenu sous l'obstacle."
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:37
+#: src/lessons/maze/pledge/PledgeMaze.html:38
 msgid ""
 "<a name=\"Objective\"/>You now have to modify your solution to implement the "
 "Pledge algorithm to escape this maze."
@@ -9419,42 +9968,41 @@ msgstr ""
 "sortir du labyrinthe."
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:40
+#: src/lessons/maze/pledge/PledgeMaze.html:41
 msgid ""
-"Change your <code>void keepHandOnSideWall()</code> method to count the "
-"amount of turns done by the buggle (+1 when it turns left, and -1 when it "
-"turns right). This counting may require the addition of an <code>angleSum</"
-"code> integer value in your program."
+"Change your <code>keepHandOnSideWall()</code> method to count the amount of "
+"turns done by the buggle (+1 when it turns left, and -1 when it turns "
+"right). This counting may require the addition of an <code>angleSum</code> "
+"integer value in your program."
 msgstr ""
-"Reprenez la méthode <code>void keepHandOnSideWall()</code> de l'exercice "
+"Reprenez la méthode <code>keepHandOnSideWall()</code> de l'exercice "
 "précédent. Modifiez cette méthode pour compter les virages pris par votre "
 "buggle (+1 lorsqu'il a tourné à gauche par rapport à son origine, -1 "
 "lorsqu'il a tourné à droite). Pour comptabiliser vous aurez besoin d'ajouter "
-"une variable <code>angleSum</code> de type entière à votre programme."
+"une variable <code>sommeAngle</code> de type entière à votre programme."
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:45
+#: src/lessons/maze/pledge/PledgeMaze.html:46
 msgid ""
-"Write a <code>boolean isChosenDirectionFree()</code> method indicating if "
-"the arbitrary direction you picked up is free, ie, if you can move in that "
-"direction. (Note that the demo uses the NORTH direction for that).  You can "
-"retrieve the current direction of the buggle using the <code>Direction "
-"getDirection()</code> method. You can change your direction (without moving) "
-"using <code>void setDirection(Direction d)</code>. Don't forget to store the "
-"previous direction of your buggle (in a variable of type Direction) before "
-"checking if your favorite direction is free in order to restore your state "
-"afterward."
+"Write a boolean method <code>isDirectionFree(dir)</code> indicating if the "
+"provided direction is free, ie, if you can move in that direction (Note that "
+"the demo uses the NORTH direction for that).  You can retrieve the current "
+"direction of the buggle using the method <code>getDirection()</code>. You "
+"can change your direction (without moving) using <code>setDirection(dir)</"
+"code>. Don't forget to store the previous direction of your buggle (in a "
+"dedicated variable) before checking if your favorite direction is free in "
+"order to restore your state afterward."
 msgstr ""
-"Écrivez une méthode <code>boolean isChosenDirectionFree()</code> indiquant "
-"si la direction arbitraire que vous avez choisie 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 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>void setDirection(Direction d)</code>.  Pensez à "
-"mémoriser (dans une variable de type <code>Direction</code>) la direction "
-"courante de votre buggle avant de vérifier si votre buggle peut se diriger "
-"vers sa direction de prédilection pour pouvoir restaurer l'état après coup."
+"É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 "
+"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 "
+"variable dédiée) la direction courante de votre buggle avant de vérifier si "
+"votre buggle peut se diriger vers sa direction de prédilection pour pouvoir "
+"restaurer l'état après coup."
 
 #. type: Content of: <p>
 #: src/lessons/maze/pledge/PledgeMaze.html:55
@@ -9465,31 +10013,59 @@ msgstr ""
 "Vous pouvez être amenés à modifier également le reste de votre code, mais "
 "ces changements devraient rester limités."
 
-#. type: Attribute 'alt' of: <div>
+#. type: Content of: <p>
 #: src/lessons/maze/pledge/PledgeMaze.html:58
+msgid ""
+"Don't forget that if you have a method modifying a global variable (such as "
+"angleSum), you should ensure that it declares this variable as global. "
+"Without it, the method creates a new variable of the same name, and the "
+"global never gets modified."
+msgstr ""
+"N'oubliez pas que si l'une de vos méthodes modifie une variable globale "
+"(telle\n"
+"que sommeAngles), vous devez vous assurer qu'elle définie cette globale\n"
+"correctement. Sinon, la méthode crée une nouvelle variable locale de même "
+"nom,\n"
+"et la globale n'est jamais modifiée."
+
+#. type: Content of: <div><pre>
+#: src/lessons/maze/pledge/PledgeMaze.html:62
+#, no-wrap
+msgid ""
+"def myMethod():\n"
+"  global angleSum\n"
+"  ...\n"
+"  angleSum = angleSum + 1\n"
+msgstr ""
+"def myMethod():\n"
+"  global sommeAngle\n"
+"  ...\n"
+"  sommeAngle = sommeAngle + 1\n"
+
+#. type: Attribute 'alt' of: <div>
+#: src/lessons/maze/pledge/PledgeMaze.html:68
 msgid "Show an additional tip"
 msgstr "Montrer un indice supplémentaire"
 
 #. type: Content of: <div>
-#: src/lessons/maze/pledge/PledgeMaze.html:59
-msgid ""
-"The <code>void run()</code> method should move in your favorite direction "
-"(NORTH is advised). Then, you should write the algorithm main loop. In other "
-"words, while your buggle did not find its biscuit, you have to move forward "
-"until next obstacle in the favorite direction. Then, put a paw on a wall "
-"(using (<code>void keepHandOnSideWall()</code>) while the sum of turns is "
-"not null and the favorite direction is not free. Do that until you find your "
-"baggle."
-msgstr ""
-"La méthode <code>void run()</code> doit déplacer votre buggle dans votre "
-"direction de prédilection (il est conseillé de choisir le nord pour cela). "
-"Ensuite, vous devez écrire la boucle principale de l'algorithme. Autrement "
-"dit, 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>void "
-"keepHandOnSideWall()</code>) tant que la somme des virages n'est pas nulle "
-"et que la direction de prédilection n'est pas libre. Faites cela jusqu'à "
-"trouver votre biscuit."
+#: src/lessons/maze/pledge/PledgeMaze.html:69
+msgid ""
+"You should set your direction to your favorite one (NORTH is advised). Then, "
+"you should write the algorithm main loop. In other words, while your buggle "
+"did not find its biscuit, you have to move forward until next obstacle in "
+"the favorite direction. Then, put a paw on a wall (using "
+"(<code>keepHandOnSideWall()</code>) while the sum of turns is not null and "
+"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\n"
+"-- NORTH). 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 "
+"nulle et que la direction de prédilection n'est pas libre. Faites cela "
+"jusqu'à trouver votre biscuit."
 
 #. type: Content of: <h2>
 #: src/lessons/maze/island/IslandMaze.html:1
@@ -9513,7 +10089,7 @@ msgid ""
 "the buggle begins in the middle of the maze, it may exist wall sections "
 "disconnected from the external wall."
 msgstr ""
-"L' algorithme du <i>Wall Follower</i> que nous avons utilisé jusqu'à présent "
+"L'algorithme de suivi de mur que nous avons utilisé jusqu'à présent "
 "fonctionne seulement si l'entrée et la sortie sont placées à côté de murs "
 "connectés à un mur externe. Mais si le buggle commence au milieu du "
 "labyrinthe, il peut exister des pans de mur déconnectés du mur externe."
@@ -9524,13 +10100,15 @@ msgid ""
 "That is why the previous strategy would let the buggle round around for "
 "ever. Indeed, the maze you should now escape from contains islands, and the "
 "buggle does not start along one of the external walls. Just give it a try if "
-"you want: push the run button and see your previous solution fail miserabily."
+"you want: copy your code over, push the run button and see your previous "
+"solution failing miserabily."
 msgstr ""
-"C'est pourquoi notre stratégie précédente laissera notre buggle tourner en "
-"rond pour toujours. En effet, le labyrinthe dont vous devez vous échapper "
-"maintenant contient des îles, et le buggle ne commence pas sur un des murs "
-"externes. Vous pouvez essayer si vous voulez : appuyez sur le bouton 'run' "
-"et admirez votre solution précédente échouer lamentablement"
+"Dans cette situation, notre précédente stratégie ferait notre buggle tourner "
+"en rond pour toujours sur l'un de ces îlots. En effet, le labyrinthe dont "
+"vous devez vous échapper maintenant contient des îles, et le buggle ne "
+"commence pas sur un des murs externes. Vous pouvez essayer si vous voulez : "
+"Copie/collez votre code et appuyez sur le bouton 'run' pour admirez votre "
+"solution précédente échouer lamentablement."
 
 #. type: Content of: <p><p>
 #: src/lessons/maze/island/IslandMaze.html:18
@@ -9592,41 +10170,57 @@ msgstr ""
 #: src/lessons/maze/island/IslandMaze.html:40
 #, no-wrap
 msgid ""
-"\t<code>int state=0;\n"
+"\t<code div=\"Java\">int state=0;\n"
 "switch (state) {\n"
-"  case 0: \n"
+"  case 0: // North runner\n"
 "     ...\n"
 "     state = 1;\n"
 "     break;\n"
-"  case 1:\n"
+"  case 1: // Left follower\n"
 "     ...\n"
 "     state = 0;\n"
 "     break;\n"
 "}\n"
 "</code>\n"
+"<code div=\"python\">northRunner = True\n"
+"if northRunner:\n"
+"     ...\n"
+"     northRunner = False\n"
+"else: # left follower\n"
+"     ...\n"
+"     northRunner = True\n"
+"</code>\n"
 msgstr ""
-"<code>int state=0;\n"
-"switch (state) {\n"
-"  case 0: \n"
+"\t<code div=\"Java\">int etat=0;\n"
+"switch (etat) {\n"
+"  case 0: // courir au nord\n"
 "     ...\n"
-"     state = 1;\n"
+"     etat = 1;\n"
 "     break;\n"
-"  case 1:\n"
+"  case 1: // suivre a gauche\n"
 "     ...\n"
-"     state = 0;\n"
+"     etat = 0;\n"
 "     break;\n"
 "}\n"
 "</code>\n"
+"<code div=\"python\">courirNord = True\n"
+"if courirNord:\n"
+"     ...\n"
+"     courirNord = False\n"
+"else: # suivre a gauche\n"
+"     ...\n"
+"     courirNord = True\n"
+"</code>\n"
 
 #. type: Content of: <p><p><p>
-#: src/lessons/maze/island/IslandMaze.html:55
+#: src/lessons/maze/island/IslandMaze.html:63
 msgid "Don't forget to let the buggle pick the baggle at the end of your code."
 msgstr ""
 "N'oubliez pas de faire ramasser le baggle par votre buggle à la fin de votre "
 "code."
 
 #. type: Content of: <p><p><p>
-#: src/lessons/maze/island/IslandMaze.html:58
+#: src/lessons/maze/island/IslandMaze.html:66
 msgid ""
 "You're up. That should be enough for you to figure out how to escape this "
 "maze, but if not, you can always request for the tip. But you do not need "
@@ -9640,7 +10234,7 @@ msgstr ""
 #. type: Content of: <h2>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:1
 msgid "Basic Shortest Path algorithm"
-msgstr "Algorithme basique de rechercher du plus court chemin"
+msgstr "Algorithme basique de recherche du plus court chemin"
 
 #. type: Content of: <p>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:3
@@ -9652,118 +10246,80 @@ msgid ""
 msgstr ""
 "Pour conclure avec cette leçon d'introduction aux algorithmes de sortie de "
 "labyrinthe, nous allons étudier un autre moyen de trouver la sortie. Le "
-"buggle de cette leçon est spécial : c'est un jedi. Il eut ressentir la "
+"buggle de cette leçon est spécial : c'est un jedi. Il peut ressentir la "
 "Force. Cela signifie qu'il peut ressentir son environnement."
 
 #. type: Content of: <p>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:7
 msgid ""
-"By using method <code>BuggleWorld getMyWorld()</code> he can retrieve "
-"information about the world he is leaving in."
+"Without even leaving his position, he can retrieve information about the "
+"world he is leaving in, with the following functions:"
 msgstr ""
-"En utilisant la méthode <code>BuggleWorld getMyWorld()</code> il peut "
-"récupérerdes informations à propos du monde où il vit."
+"Sans même changer de place, il peut retrouver des informations sur le monde "
+"qui l'entoure, avec les instructions suivantes :"
 
-#. type: Content of: <p>
+#. type: Content of: <ul><li>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:9
+msgid "<code>getWorldWidth()</code> gives the width of its world."
+msgstr "<code>getWorldWidth()</code> pour connaitre la largeur du monde"
+
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:10
+msgid "<code>getWorldHeight()</code> gives the height of its world."
+msgstr "<code>getWorldHeight()</code> pour connaitre la hauteur du monde."
+
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:11
 msgid ""
-"A <code>BuggleWorld</code> object is an object on which you can perform the "
-"following operations:"
+"<code>hasTopWall(x,y)</code> tells whether the cell (x,y) of this world has "
+"a wall on top."
 msgstr ""
-"Un objet <code>BuggleWorld</code> est un objet Java sur lequel vous pouvez "
-"effectuer les opérations suivantes :"
+"<code>hasTopWall(x,y)</code> indique si la cellule (x,y) de ce monde est "
+"fermée\n"
+"par un mur en haut."
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:11
-msgid "<code>int getHeight()</code> to know the height of the world."
-msgstr "<code>int getHeight()</code> pour connaitre la hauteur du monde."
-
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:12
-msgid "<code>int getWidth()</code> to know the width of the world."
-msgstr "<code>int getWidth()</code> pour connaitre la largeur du monde"
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:13
-msgid ""
-"<code>BuggleWorldCell getCell(int x, int y)</code> to retrieve the "
-"<code>BuggleWorldCell</code> object located at a specific position in the "
-"world."
-msgstr ""
-"<code>BuggleWorldCell getCell(int x, int y)</code> pour récupérer l'objet "
-"<code>BuggleWorldCell</code> localisé à une position donnée dans le monde."
-
-#. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:19
-msgid ""
-"A <code>BuggleWorldCell</code> is an object that represents a cell of the "
-"world. On an object of this type, it is possible to call the following "
-"methods:"
-msgstr ""
-"Un objet <code>BuggleWorldCell</code> est un objet Java qui représente une "
-"case du monde. Sur un objet de ce type, il est possible d'appeler les "
-"méthodes suivantes :"
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:22
 msgid ""
-"<code>boolean hasContent()</code> to know if something is written on the "
-"floor of this cell."
+"<code>hasLeftWall(x,y)</code> tells whether the cell (x,y) of this world has "
+"a wall on the left."
 msgstr ""
-"<code>boolean hasContent()</code> pour savoir si quelquechose est écrit sur "
-"le sol de cette case."
+"<code>hasLeftWall(x,y)</code> indique si la cellule (x,y) de ce monde est "
+"fermée\n"
+"par un mur à gauche."
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:23
-msgid ""
-"<code>void setContentFromInt(int v)</code> to write an integer value on the "
-"floor of this cell."
-msgstr ""
-"<code>void setContentFromInt(int v)</code> pour écrire une valeur entière "
-"sur le sol de cette case."
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:24
-msgid ""
-"<code>int getContentAsInt()</code> to retrieve the integer value which is "
-"written on the floor of this cell."
-msgstr ""
-"<code>int getContentAsInt()</code> pour récupérer la valeur entière qui est "
-"sur le sol de cette case."
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:25
-msgid "<code>void emptyContent()</code> to clean the floor of this cell."
-msgstr "<code>void emptyContent()</code> pour nettoyer le sol de cette case."
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:26
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:13
 msgid ""
-"<code>boolean hasTopWall()</code> to know if a wall is built on the top edge "
-"of this cell."
+"<code>hasBaggle(x,y)</code> tells whether the cell (x,y) of this world has a "
+"baggle."
 msgstr ""
-"<code>boolean hasTopWall()</code> pour savoir si un mur a été construit sur "
-"le côté supérieur de la case."
+"<code>hasBaggle(x,y)</code> indique si un baggle se trouve dans la cellule "
+"(x,y) de ce monde."
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:27
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:14
 msgid ""
-"<code>boolean hasLeftWall()</code> to know if a wall is built on the left "
-"edge of this cell."
+"<code>setIndication(x,y,i)</code> adds the integer indication <code>i</code> "
+"to the cell (x,y)."
 msgstr ""
-"<code>boolean hasLeftWall()</code> pour savoir si un mur a été construit sur "
-"le côté gauche de la case."
+"<code>setIndication(x,y,i)</code> ajoute une indication entière <code>i</"
+"code>\n"
+"sur le sol de la cellule (x,y)."
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:28
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:15
 msgid ""
-"<code>boolean hasBaggle()</code> to know if a baggle is present on this cell."
+"<code>getIndication(x,y,i)</code> retrieves the integer indication of the "
+"cell (x,y) (or 9999 if there is no indication)."
 msgstr ""
-"<code>boolean hasBaggle()</code> pour savoir si un baggle est présent sur la "
-"case."
+"<code>getIndication(x,y,i)</code> retourne l'indication entière qui se "
+"trouve\n"
+"dans la cellule (x,y) (ou bien la valeur 9999 s'il n'y a pas d'indication à\n"
+"l'endroit indiqué)."
 
 #. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:32
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:18
 msgid ""
 "It has to be noted that it is not possible to build a wall on the bottom "
 "edge or on the right edge of a cell.  Therefore when such wall exists, it "
@@ -9778,61 +10334,60 @@ msgstr ""
 "( respectivement sur la droite ) de la case courante."
 
 #. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:38
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:24
 msgid ""
-"<a name=\"Objective\"/>Write a method <code>evaluatePaths()</code> which "
-"computes a very basic shortest path algorithm. This algorithm will write on "
-"each world cell (or at least the one that are useful) the distance from this "
-"cell to the maze exit."
+"Your buggle should first write the distance to the exit on each cell (or at "
+"least the useful ones)."
 msgstr ""
-"<a name=\"Objective\"/>Ecrivez une méthode <code>evaluatePaths()</code> qui "
-"implémente une version basique de l'algorithme de recherche du plus court "
-"chemin. Cet algorithme écrira sur chaque case du monde ( ou au moins sur "
-"celles qui sont nécessaires ) la distance qu'il y a de la case à la sortie "
-"du labyrinthe."
+"Votre buggle devrait tout d'abord écrire sur chaque case importante la "
+"distance qui la sépare de la sortie."
 
 #. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:41
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:25
 msgid ""
-"To achieve this objective, your algorithm has to find the exit of the maze "
-"on the map. Then, for every cells next to the cell where the exit is "
-"located, it has to mark these cells with a integer value of 1 (indicating "
-"the distance). Then, it has to iterate the same process to mark the cells "
-"which are at a distance of 2 and so on until it marks the cell where the "
-"buggle is located."
+"For that, find the exit and write 0 there.  Then, write 1 on every "
+"neighboring cells that is not separated from the exit with a wall.  And then "
+"mark every cells from which you can reach the exit in 2 steps, and iterate "
+"for all cells until you mark the cell where the buggle is located."
 msgstr ""
-"Pour parvenir à cet objectif, votre algorithme devra trouver la sortie du "
-"labyrinthe sur la carte. Ensuite, pour chaque case à côté de la case où se "
-"situe la sortie, il devra marquer cette case avec une valeur entière de 1 "
-"( indiquant la distance ). Ensuite, il faudra itérer ce processus pour "
-"marquer les cases qui sont à une distance de 2 et jusqu'à marquer la case où "
-"se situe le buggle."
+"Pour cela, trouvez la sortie et écrivez 0 dessus. Ensuite, écrivez 1 sur "
+"toutes les cases adjacentes à la sortie qui n'en sont pas séparées par un "
+"mur. Ensuite, écrivez 2 sur toutes les cases à partir desquelles on peut "
+"atteindre une case marquée 1, puis faites de même pour toutes les cases "
+"jusqu'à numéroter la case où se trouve votre buggle."
 
 #. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:46
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:30
 msgid ""
-"Write a method <code>followShortestPath()</code> that will make the jedi "
-"buggle to follow the shortest path.  Basically the buggle has only to walk "
-"on each case with the lesser distance from the exit. You can use the method "
-"<code>void setDirection(Direction d)</code> to make your buggle look at the "
+"Once the cells are marked, get your jedi buggle to follow the shortest "
+"path.  Basically the buggle has only to walk on each case with the lesser "
+"distance from the exit. You can use the method "
+"<code>setDirection(direction)</code> to make your buggle look at the "
 "specific direction such as <code>Direction.NORTH</code> or <code>Direction."
 "EAST</code>."
 msgstr ""
-"Ecrivez une méthode <code>followShortestPath()</code> qui permettra au "
-"buggle jedi de suivre le plus court chemin. Basiquement, le buggle a "
-"seulement à suivre la case ayant la plus petite distance à la sortie. 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> ou <code>Direction.EAST</code>."
+"Une fois que toutes les cases sont marquées, faites en sorte que votre "
+"buggle\n"
+"jedi trouve le plus court chemin en suivant les indications écrites au sol. "
+"Pour\n"
+"celà, il lui suffit à chaque pas d'aller sur la case de plus petite "
+"distance\n"
+"parmis celles accessibles. Vous pouvez utiliser la méthode <code>void\n"
+"setDirection(Direction d)</code> pour faire regarder votre buggle dans une\n"
+"direction spécifique comme <code>Direction.NORTH</code>,\n"
+"<code>Direction.SOUTH</code>, <code>Direction.EAST</code> ou\n"
+"<code>Direction.WEST</code>, qui correspondent respectivement au nord, sud, "
+"est\n"
+"et ouest."
 
 #. type: Attribute 'alt' of: <div>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:51
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:35
 msgid "I'm lost now. Please give me some extra indications."
 msgstr "Je suis perdu, je voudrais plus d'indications"
 
 #. type: Content of: <div>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:52
-msgid "Use the Force Luke!"
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:36
+msgid "Use the Force, Luke!"
 msgstr "Utilises la Force Luke !"
 
 #. type: Content of: <h2>
@@ -9855,18 +10410,17 @@ msgstr ""
 #: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:7
 msgid ""
 "As a result, the method you wrote for the previous exercise probably don't "
-"work for this one. If you click on the run button with no modification, your "
-"buggle probably start looping over the four free cells around its start "
-"position (if that's not the case, well, you didn't really stick to the "
-"mission on previous exercise. Feel lucky and move to the next one once "
-"you've read this text)."
+"work for this one. If you use it here with no modification, your buggle "
+"probably start looping over the four free cells around its start position "
+"(if that's not the case, well, you didn't really stick to the mission on "
+"previous exercise. Feel lucky and proceed to the next :)"
 msgstr ""
 "Ceci engendre que la méthode que vous avez écrite à l'exercice précédent ne "
-"fonctionne plus ici. Si vous cliquez sur le bouton 'run' sans modification "
-"du code, votre buggle va probablement commencer à tourner sur les quatres "
-"cases à côté de sa position de départ (si ça n'est pas le cas, et bien, vous "
-"n'avez pas réellement suivi la mission de l'exercice précédent. Sentez vous "
-"chanceux et passez à l'exercice suivant une fois que vous aurez lu ce texte)."
+"fonctionne plus ici. Si vous l'utilisez ici sans modification, votre buggle "
+"va probablement commencer à tourner sur les quatres cases à côté de sa "
+"position de départ (si ça n'est pas le cas, et bien, vous n'avez pas "
+"réellement suivi la mission de l'exercice précédent. Sentez vous chanceux et "
+"passez à l'exercice suivant une fois que vous aurez lu ce texte)."
 
 #. type: Content of: <p>
 #: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:14
@@ -9890,12 +10444,12 @@ msgstr ""
 msgid ""
 "Fixing the problem should be very easy. Simply make sure that the pre-"
 "condition of <code>keepHandOnSideWall()</code> is verified before calling "
-"it. For that, update your run() method to first look for a wall on its left "
-"before the big <code>while</code> loop."
+"it. For that, update your code to first look for a wall on its left before "
+"the big <code>while</code> loop."
 msgstr ""
 "Réparer le problème devrait être très facile. Assurez-vous simplement que la "
 "pré-condition de <code>keepHandOnSideWall()</code> est vérifiée avant de "
-"l'appeler Pour ce faire, mettez à jour votre méthode run() pour tout d'abord "
+"l'appeler Pour ce faire, mettez à jour votre code pour tout d'abord "
 "rechercher à avoir un mur à sa gauche avant de rentrer dans la grande boucle "
 "<code>while</code>."
 
@@ -10016,8 +10570,8 @@ msgstr ""
 "peut par exemple trouver sur kongregate.com. Il a été écrit par Danny "
 "Yaroslavski (Coolio-Niato), d'après une idée originale de Matt Chase."
 
-#. type: Content of: <h1>
-#: src/lessons/lightbot/Main.html:1
+#. type: Content of: <h3>
+#: src/lessons/lightbot/Main.html:1 src/lessons/lightbot/short_desc.html:1
 msgid "LightBot"
 msgstr "LightBot"
 
@@ -10033,15 +10587,34 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/lightbot/Main.html:4
 msgid "See the <i>About this world</i> dialog for more details."
-msgstr "Référez vous à l'aide <i>About this world</i> pour plus de détails."
+msgstr ""
+"Référez vous à l'aide <i>À propos de ce monde</i> pour plus de détails."
+
+#. type: Content of: <p>
+#: src/lessons/lightbot/short_desc.html:3
+msgid ""
+"This lesson constitutes a little brain teaser for programmers. You have to "
+"instruct your robot to turn off all lights. The trick is that you program "
+"your robot graphically, and that you are limited in the amount of "
+"instructions."
+msgstr ""
+"Cette leçon constitue un casse-tête pour programmeurs, où vous devez "
+"apprendre à votre robot à éteindre toutes les lumières. Le truc est que vous "
+"le programmez graphiquement, et que vous n'avez droit qu'à un nombre limité "
+"d'instructions."
+
+#. type: Content of: <p>
+#: src/lessons/lightbot/short_desc.html:8
+msgid "No previous experience is expected to take this lesson."
+msgstr "Aucune expérience préalable n'est nécessaire pour tenter cette leçon."
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:1
+#: src/lessons/lightbot/Board01TwoSteps.html:1
 msgid "Welcome"
 msgstr "Bienvenue"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:3
+#: src/lessons/lightbot/Board01TwoSteps.html:3
 msgid ""
 "Welcome to the lightbot world. This is merely a programmer puzzle rather "
 "than a real lesson (although some use it to teach programming).  The robot "
@@ -10052,10 +10625,10 @@ msgstr ""
 "pour programmeur que d'une vraie leçon (bien qu'il puisse être utilisé pour "
 "enseigner la programmation). Le robot n'est pas programmé en Java, mais "
 "graphiquement. Vous trouverez les ordres disponibles dans la documentation "
-"en utilisant le menu <b>About this world</b>."
+"en utilisant le menu <b>À propos de ce monde</b>."
 
 #. type: Content of: <p><</p><p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:6
+#: src/lessons/lightbot/Board01TwoSteps.html:6
 msgid ""
 "The goal of each board is simply to switch on every lights of the board "
 "using your little robot."
@@ -10064,7 +10637,7 @@ msgstr ""
 "ampoules du tableau à votre petit robot."
 
 #. type: Content of: <p><</p><p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:8
+#: src/lessons/lightbot/Board01TwoSteps.html:8
 msgid ""
 "This is a introduction exercise, which should be solvable by only moving "
 "forward and switching the light, using respectively"
@@ -10074,49 +10647,49 @@ msgstr ""
 "suivants: "
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:8
-#: src/lessons/lightbot/mission2/Board02Turn.html:3
-#: src/lessons/lightbot/mission6/Board06Func.html:3
+#: src/lessons/lightbot/Board01TwoSteps.html:10
+#: src/lessons/lightbot/Board02Turn.html:4
+#: src/lessons/lightbot/Board06Func.html:3
 msgid "and"
 msgstr "et"
 
 #. type: Content of: <p><</p><p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:8
+#: src/lessons/lightbot/Board01TwoSteps.html:10
 msgid "."
 msgstr "."
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission2/Board02Turn.html:1
+#: src/lessons/lightbot/Board02Turn.html:1
 msgid "Turn around"
 msgstr "Se retourner"
 
 # type: Content of: <p>
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission2/Board02Turn.html:3
+#: src/lessons/lightbot/Board02Turn.html:3
 msgid "Now, you probably need to turn in addition (using"
 msgstr "Maintenant, vous avez probablement besoin de tourner (en utilisant "
 
 # type: Content of: <p>
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission2/Board02Turn.html:3
+#: src/lessons/lightbot/Board02Turn.html:4
 msgid ")."
 msgstr ")."
 
 # type: Content of: <h1>
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission3/Board03Jump.html:1
+#: src/lessons/lightbot/Board03Jump.html:1
 msgid "Jump"
 msgstr "Sauter"
 
 # type: Content of: <p>
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission3/Board03Jump.html:3
+#: src/lessons/lightbot/Board03Jump.html:3
 msgid "You can also jump using"
 msgstr "Vous pouvez également sauter en utilisant "
 
 # type: Content of: <p>
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission3/Board03Jump.html:3
+#: src/lessons/lightbot/Board03Jump.html:3
 msgid ""
 "to pass obstacles. You can either jump one level up or any amount of levels "
 "down, but you cannot jump to go on a cell of the same height."
@@ -10126,37 +10699,37 @@ msgstr ""
 "vous déplacer à plat."
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission4/Board04Stairs.html:1
+#: src/lessons/lightbot/Board04Stairs.html:1
 msgid "Stairs"
 msgstr "Escaliers"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission4/Board04Stairs.html:3
+#: src/lessons/lightbot/Board04Stairs.html:3
 msgid "Can you pass these stairs?"
 msgstr "Parviendrez vous à passer ces escaliers ?"
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission5/Board05Higher.html:1
+#: src/lessons/lightbot/Board05Higher.html:1
 msgid "Higher"
 msgstr "Toujours plus haut"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission5/Board05Higher.html:3
+#: src/lessons/lightbot/Board05Higher.html:3
 msgid "Let's go higher"
 msgstr "Il est temps de nous élever de plus en plus haut."
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission6/Board06Func.html:1
+#: src/lessons/lightbot/Board06Func.html:1
 msgid "Functions"
 msgstr "Fonctions"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission6/Board06Func.html:3
+#: src/lessons/lightbot/Board06Func.html:3
 msgid "You can use"
 msgstr "Vous pouvez utiliser"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission6/Board06Func.html:3
+#: src/lessons/lightbot/Board06Func.html:3
 msgid ""
 "to call respectively the first and second functions. Define their code in "
 "their own tab."
@@ -10165,80 +10738,80 @@ msgstr ""
 "leur code dans leur boîte respective."
 
 #. type: Content of: <p><p>
-#: src/lessons/lightbot/mission6/Board06Func.html:5
+#: src/lessons/lightbot/Board06Func.html:5
 msgid "This is great if you get out of space in your main function"
 msgstr ""
 "Cela peut s'avérer pratique si vous n'avez plus assez d'espace dans votre "
 "fonction principale."
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission7/Board07Repeat.html:1
+#: src/lessons/lightbot/Board07Repeat.html:1
 msgid "Repetitive tasks"
 msgstr "Des tâches répétitives"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission7/Board07Repeat.html:3
+#: src/lessons/lightbot/Board07Repeat.html:3
 msgid "Functions are also of great use for repetitive tasks"
 msgstr "Les fonctions sont également très pratique pour les tâches répétitives"
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission8/Board08Rec.html:1
+#: src/lessons/lightbot/Board08Rec.html:1
 msgid "Calling functions from functions"
 msgstr "Invoquer des fonctions depuis les fonctions"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission8/Board08Rec.html:3
+#: src/lessons/lightbot/Board08Rec.html:3
 msgid "It is perfectly okay to call a function from within a function!"
 msgstr ""
 "Rien ne vous interdit d'invoquer une fonction depuis une autre fonction !"
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission9/Board09Castle.html:1
+#: src/lessons/lightbot/Board09Castle.html:1
 msgid "Castle"
 msgstr "Chateau"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission9/Board09Castle.html:3
+#: src/lessons/lightbot/Board09Castle.html:3
 msgid "You're getting good at this..."
 msgstr "Vous vous en sortez de mieux en mieux..."
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission10/Board10Wall.html:1
+#: src/lessons/lightbot/Board10Wall.html:1
 msgid "Wall"
 msgstr "Mur"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission10/Board10Wall.html:3
+#: src/lessons/lightbot/Board10Wall.html:3
 msgid "Ready to climb the wall?"
 msgstr "Etes-vous prêt à escalader ce mur ?"
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission11/Board11Sea.html:1
+#: src/lessons/lightbot/Board11Sea.html:1
 msgid "Sea"
 msgstr "Mer"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission11/Board11Sea.html:3
+#: src/lessons/lightbot/Board11Sea.html:3
 msgid "You now have to surf these waves of lamps."
 msgstr "Vous devez maintenant surfer sur cette mer de lampes."
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission12/Board12Escher.html:1
+#: src/lessons/lightbot/Board12Escher.html:1
 msgid "Escher Castle"
 msgstr "Le chateau d'Escher"
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission12/Board12Escher.html:3
+#: src/lessons/lightbot/Board12Escher.html:3
 msgid "This one aint easy."
 msgstr "Celui-ci est loin d'être facile."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/close10/Close10.html:1
+#: src/lessons/welcome/bool1/Close10.html:1
 msgid "Close to 10"
 msgstr "Proche de 10"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bool1/close10/Close10.html:2
+#: src/lessons/welcome/bool1/Close10.html:2
 msgid ""
 "Given 2 int values, return whichever value is nearest to the value 10, or "
 "return 0 in the event of a tie. Note that Math.abs(n) returns the absolute "
@@ -10249,73 +10822,74 @@ msgstr ""
 "absolue d'un nombre."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bool1/close10/Close10.html:5
+#: src/lessons/welcome/bool1/Close10.html:5
 msgid ""
 "Given 2 int values, return whichever value is nearest to the value 10, or "
 "return 0 in the event of a tie. Note that math.fabs(n) returns the absolute "
-"value of a number."
+"value of a number. Note also that 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. Remarquez que math.fabs(n) retourne la valeur "
-"absolue d'un nombre."
-
-#. type: Content of: <p>
-#: src/lessons/welcome/bool1/close10/Close10.html:9
-#: src/lessons/welcome/bool1/diff21/Diff21.html:5
-#: src/lessons/welcome/bool1/hasteen/HasTeen.html:6
-#: src/lessons/welcome/bool1/icyhot/IcyHot.html:5
-#: src/lessons/welcome/bool1/in1020/In1020.html:5
-#: src/lessons/welcome/bool1/in3050/In3050.html:5
-#: src/lessons/welcome/bool1/lastdigit/LastDigit.html:9
-#: src/lessons/welcome/bool1/loneteen/LoneTeen.html:6
+"absolue d'un nombre. Remarquez également que vous ne pouvez utiliser cette "
+"fonction que si vous avez importé le module math."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/bool1/Close10.html:10
+#: src/lessons/welcome/bool1/Diff21.html:5
+#: src/lessons/welcome/bool1/HasTeen.html:6
+#: src/lessons/welcome/bool1/IcyHot.html:5
+#: src/lessons/welcome/bool1/In1020.html:5
+#: src/lessons/welcome/bool1/In3050.html:5
+#: src/lessons/welcome/bool1/LastDigit.html:9
+#: src/lessons/welcome/bool1/LoneTeen.html:6
 #: src/lessons/welcome/bool1/Main.html:11
-#: src/lessons/welcome/bool1/makes10/Makes10.html:5
-#: src/lessons/welcome/bool1/max1020/Max1020.html:8
-#: src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.html:7
-#: src/lessons/welcome/bool1/nearhundred/NearHundred.html:5
-#: src/lessons/welcome/bool1/parottrouble/ParotTrouble.html:8
-#: src/lessons/welcome/bool1/posneg/PosNeg.html:5
-#: src/lessons/welcome/bool1/sleepin/SleepIn.html:7
-#: src/lessons/welcome/bool1/sumdouble/SumDouble.html:5
-#: src/lessons/welcome/bool2/alarmclock/AlarmClock.html:11
-#: src/lessons/welcome/bool2/answercell/AnswerCell.html:8
-#: src/lessons/welcome/bool2/ticket/blue/BlueTicket.html:10
-#: src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.html:11
-#: src/lessons/welcome/bool2/party/cigar/CigarParty.html:9
-#: src/lessons/welcome/bool2/datefashion/DateFashion.html:12
-#: src/lessons/welcome/bool2/ticket/green/GreenTicket.html:9
-#: src/lessons/welcome/bool2/in1to10/In1To10.html:8
-#: src/lessons/welcome/bool2/inorderequals/InOrderEqual.html:9
-#: src/lessons/welcome/bool2/inorder/InOrder.html:8
-#: src/lessons/welcome/bool2/lastdigit2/LastDigit2.html:8
-#: src/lessons/welcome/bool2/lessby10/LessBy10.html:5
+#: src/lessons/welcome/bool1/Makes10.html:5
+#: src/lessons/welcome/bool1/Max1020.html:8
+#: src/lessons/welcome/bool1/MonkeyTrouble.html:7
+#: src/lessons/welcome/bool1/NearHundred.html:5
+#: src/lessons/welcome/bool1/ParotTrouble.html:8
+#: src/lessons/welcome/bool1/PosNeg.html:5
+#: src/lessons/welcome/bool1/SleepIn.html:7
+#: src/lessons/welcome/bool1/SumDouble.html:5
+#: src/lessons/welcome/bool2/AlarmClock.html:11
+#: src/lessons/welcome/bool2/AnswerCell.html:8
+#: src/lessons/welcome/bool2/BlueTicket.html:10
+#: src/lessons/welcome/bool2/CaughtSpeeding.html:11
+#: src/lessons/welcome/bool2/CigarParty.html:9
+#: src/lessons/welcome/bool2/DateFashion.html:12
+#: src/lessons/welcome/bool2/GreenTicket.html:9
+#: src/lessons/welcome/bool2/In1To10.html:8
+#: src/lessons/welcome/bool2/InOrderEqual.html:9
+#: src/lessons/welcome/bool2/InOrder.html:8
+#: src/lessons/welcome/bool2/LastDigit2.html:8
+#: src/lessons/welcome/bool2/LessBy10.html:5
 #: src/lessons/welcome/bool2/Main.html:4
-#: src/lessons/welcome/bool2/maxmod5/MaxMod5.html:9
-#: src/lessons/welcome/bool2/nearten/NearTen.html:8
-#: src/lessons/welcome/bool2/ticket/red/RedTicket.html:9
-#: src/lessons/welcome/bool2/sharedigit/ShareDigit.html:9
-#: src/lessons/welcome/bool2/sortasum/SortaSum.html:7
-#: src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.html:10
-#: src/lessons/welcome/bool2/party/tea/TeaParty.html:11
-#: src/lessons/welcome/bool2/teensum/TeenSum.html:8
-#: src/lessons/welcome/bool2/twoasone/TwoAsOne.html:5
-#: src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.html:8
-#: src/lessons/bat/string1/Main.html:8
-#: src/lessons/bat/string1/altpairs/AltPairs.html:4
-#: src/lessons/bat/string1/array123/Array123.html:4
-#: src/lessons/bat/string1/array667/Array667.html:7
-#: src/lessons/bat/string1/arraycount9/ArrayCount9.html:4
-#: src/lessons/bat/string1/arrayfront9/ArrayFront9.html:4
-#: src/lessons/bat/string1/fronttimes/FrontTimes.html:7
-#: src/lessons/bat/string1/has271/Has271.html:8
-#: src/lessons/bat/string1/last2/Last2.html:7
-#: src/lessons/bat/string1/notriples/NoTriples.html:7
-#: src/lessons/bat/string1/bits/StringBits.html:4
-#: src/lessons/bat/string1/match/StringMatch.html:8
-#: src/lessons/bat/string1/splosion/StringSplosion.html:4
-#: src/lessons/bat/string1/times/StringTimes.html:4
-#: src/lessons/bat/string1/stringx/StringX.html:6
-#: src/lessons/bat/string1/yak/StringYak.html:7
+#: src/lessons/welcome/bool2/MaxMod5.html:9
+#: src/lessons/welcome/bool2/NearTen.html:8
+#: src/lessons/welcome/bool2/RedTicket.html:9
+#: src/lessons/welcome/bool2/ShareDigit.html:9
+#: src/lessons/welcome/bool2/SortaSum.html:7
+#: src/lessons/welcome/bool2/SquirrelPlay.html:10
+#: src/lessons/welcome/bool2/TeaParty.html:11
+#: src/lessons/welcome/bool2/TeenSum.html:8
+#: src/lessons/welcome/bool2/TwoAsOne.html:5
+#: src/lessons/welcome/bool2/WithoutDoubles.html:8
+#: src/lessons/bat/string1/Main.html:8 src/lessons/bat/string1/AltPairs.html:4
+#: src/lessons/bat/string1/FrontTimes.html:7
+#: src/lessons/bat/string1/Last2.html:8
+#: src/lessons/bat/string1/StringBits.html:4
+#: src/lessons/bat/string1/StringMatch.html:8
+#: src/lessons/bat/string1/StringSplosion.html:4
+#: src/lessons/bat/string1/StringTimes.html:4
+#: src/lessons/bat/string1/StringX.html:6
+#: src/lessons/bat/string1/StringYak.html:7
+#: src/lessons/welcome/array/array123/Array123.html:4
+#: src/lessons/welcome/array/array667/Array667.html:7
+#: 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
 msgid ""
 "This exercise was converted to JLM from the excellent exercising site http://"
 "javabat.com/"
@@ -10324,12 +10898,12 @@ msgstr ""
 "com/ pour JLM."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/countteen/CountTeen.html:1
+#: src/lessons/welcome/bool1/CountTeen.html:1
 msgid "Count Teen"
 msgstr "Compter les ados"
 
-#. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/countteen/CountTeen.html:2
+#. type: Content of: <p>
+#: src/lessons/welcome/bool1/CountTeen.html:2
 msgid ""
 "We'll say that a number is \"teen\" if it is in the range 13..19 inclusive. "
 "Given 4 int values, return the amount of teen ones."
@@ -10337,18 +10911,13 @@ msgstr ""
 "On dira qu'un nombre est \"ado\" s'il appartient à l'intervale [13;19]. "
 "Étant donné quatre nombres entiers, retournez combien d'entre eux sont ados."
 
-#. type: Content of: <p>
-#: src/lessons/welcome/bool1/countteen/CountTeen.html:5
-msgid "This exercise was written by Martin Quinson."
-msgstr "Cet exercice a été écrit par Martin Quinson."
-
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/diff21/Diff21.html:1
+#: src/lessons/welcome/bool1/Diff21.html:1
 msgid "Diff 21"
 msgstr "Diff 21"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/diff21/Diff21.html:2
+#: src/lessons/welcome/bool1/Diff21.html:2
 msgid ""
 "Given an int n, return the absolute difference between n and 21, except "
 "return double the absolute difference if n is over 21."
@@ -10357,12 +10926,12 @@ msgstr ""
 "si n est plus grand que 21. Dans ce cas, doublez la différence absolue."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/hasteen/HasTeen.html:1
+#: src/lessons/welcome/bool1/HasTeen.html:1
 msgid "Has Teen"
 msgstr "A des ados"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/hasteen/HasTeen.html:2
+#: src/lessons/welcome/bool1/HasTeen.html:2
 msgid ""
 "We'll say that a number is \"teen\" if it is in the range 13..19 inclusive. "
 "Given 3 int values, return true if 1 or more of them are teen."
@@ -10372,12 +10941,12 @@ msgstr ""
 "d'entre eux sont ados."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/icyhot/IcyHot.html:1
+#: src/lessons/welcome/bool1/IcyHot.html:1
 msgid "Icy Hot"
 msgstr "Feu glacé"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/icyhot/IcyHot.html:2
+#: src/lessons/welcome/bool1/IcyHot.html:2
 msgid ""
 "Given two temperatures, return true if one is less than 0 and the other is "
 "greater than 100."
@@ -10386,12 +10955,12 @@ msgstr ""
 "et l'autre supérieure à 100."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/in1020/In1020.html:1
+#: src/lessons/welcome/bool1/In1020.html:1
 msgid "In [10;20]"
 msgstr "Dans [10;20]"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/in1020/In1020.html:2
+#: src/lessons/welcome/bool1/In1020.html:2
 msgid ""
 "Given 2 int values, return true if either of them is in the range 10..20 "
 "inclusive."
@@ -10400,12 +10969,12 @@ msgstr ""
 "l'intervale [10;20]."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/in3050/In3050.html:1
+#: src/lessons/welcome/bool1/In3050.html:1
 msgid "In [30;50]"
 msgstr "Dans [30;50]"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/in3050/In3050.html:2
+#: src/lessons/welcome/bool1/In3050.html:2
 msgid ""
 "Given 2 int values, return true if they are both in the range 30..40 "
 "inclusive, or they are both in the range 40..50 inclusive."
@@ -10415,12 +10984,12 @@ msgstr ""
 "[40;50]."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/lastdigit/LastDigit.html:1
+#: src/lessons/welcome/bool1/LastDigit.html:1
 msgid "LastDigit"
 msgstr "Dernier chiffre"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/lastdigit/LastDigit.html:2
+#: src/lessons/welcome/bool1/LastDigit.html:2
 msgid ""
 "Given two non-negative int values, return true if they have the same last "
 "digit, such as with 27 and 57. Note that the % \"mod\" operator computes "
@@ -10431,12 +11000,12 @@ msgstr ""
 "calcule le reste de la division entière (donc 17 % 10 vaut 7)."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/loneteen/LoneTeen.html:1
+#: src/lessons/welcome/bool1/LoneTeen.html:1
 msgid "Lone Teen"
 msgstr "Ado solitaire"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/loneteen/LoneTeen.html:2
+#: src/lessons/welcome/bool1/LoneTeen.html:2
 msgid ""
 "We'll say that a number is \"teen\" if it is in the range 13..19 inclusive. "
 "Given 2 int values, return true if one or the other is teen, but not both."
@@ -10471,12 +11040,12 @@ msgstr ""
 "exercices pour vous permettre de vous entrainer."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/makes10/Makes10.html:1
+#: src/lessons/welcome/bool1/Makes10.html:1
 msgid "Makes 10"
 msgstr "Font 10"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/makes10/Makes10.html:2
+#: src/lessons/welcome/bool1/Makes10.html:2
 msgid ""
 "Given 2 ints, a and b, return true if one if them is 10 or if their sum is "
 "10."
@@ -10485,12 +11054,12 @@ msgstr ""
 "10, ou si leur somme vaut 10."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/max1020/Max1020.html:1
+#: src/lessons/welcome/bool1/Max1020.html:1
 msgid "Max1020"
 msgstr "Max1020"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/max1020/Max1020.html:2
+#: src/lessons/welcome/bool1/Max1020.html:2
 msgid ""
 "Given 2 positive int values, return the larger value that is in the range "
 "10..20 inclusive, or return 0 if neither is in that range."
@@ -10500,12 +11069,12 @@ msgstr ""
 "intervale."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.html:1
+#: src/lessons/welcome/bool1/MonkeyTrouble.html:1
 msgid "MonkeyTrouble"
 msgstr "Problème de singe"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.html:3
+#: src/lessons/welcome/bool1/MonkeyTrouble.html:3
 msgid ""
 "We have two monkeys, a and b, and the parameters aSmile and bSmile indicate "
 "if each is smiling.  We are in trouble if they are both smiling or if "
@@ -10517,26 +11086,26 @@ msgstr ""
 "problème."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/nearhundred/NearHundred.html:1
+#: src/lessons/welcome/bool1/NearHundred.html:1
 msgid "Near Hundred"
 msgstr "Presque 100"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bool1/nearhundred/NearHundred.html:2
+#: src/lessons/welcome/bool1/NearHundred.html:2
 msgid ""
-"Given an int n, return true if it is within 10 of 100 or 200. Note Math.abs"
-"(n) returns the absolute value of a number."
+"Given an int n, return true if it is within 10 of 100 or 200. Note Math."
+"abs(n) returns the absolute value of a number."
 msgstr ""
 "Étant donné un entier n, retournez vrai s'il est à 10 près de 100 ou de 200. "
 "Remarquez que Math.abs(n) retourne la valeur absolue d'un nombre."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/parottrouble/ParotTrouble.html:1
+#: src/lessons/welcome/bool1/ParotTrouble.html:1
 msgid "Parot Trouble"
 msgstr "Problème de perroquet"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/parottrouble/ParotTrouble.html:3
+#: src/lessons/welcome/bool1/ParotTrouble.html:3
 msgid ""
 "We have a loud talking parrot. The \"hour\" parameter is the current hour "
 "time in the range 0..23. We are in trouble if the parrot is talking and the "
@@ -10547,12 +11116,12 @@ msgstr ""
 "parle avant 7h ou après 20h. Retournez vrai si nous avons un problème."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/posneg/PosNeg.html:1
+#: src/lessons/welcome/bool1/PosNeg.html:1
 msgid "Positive Negative"
 msgstr "Positif Negatif"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/posneg/PosNeg.html:2
+#: src/lessons/welcome/bool1/PosNeg.html:2
 msgid ""
 "Given 2 int values, return true if one is negative and one is positive. "
 "Unless negative is true, then they both must be negative."
@@ -10562,12 +11131,12 @@ msgstr ""
 "que les deux nombres soient négatifs."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/sleepin/SleepIn.html:1
+#: src/lessons/welcome/bool1/SleepIn.html:1
 msgid "SleepDay"
 msgstr "Grasse matinée"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/sleepin/SleepIn.html:3
+#: src/lessons/welcome/bool1/SleepIn.html:3
 msgid ""
 "The parameter weekday is true if it is a weekday, and the parameter vacation "
 "is true if we are on vacation. We sleep in if it is not a weekday or we're "
@@ -10579,12 +11148,12 @@ msgstr ""
 "vacances. Retournez vrai si nous pouvons faire la grasse matinée."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/sumdouble/SumDouble.html:1
+#: src/lessons/welcome/bool1/SumDouble.html:1
 msgid "Sum Double"
 msgstr "Somme doublée"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/sumdouble/SumDouble.html:2
+#: src/lessons/welcome/bool1/SumDouble.html:2
 msgid ""
 "Given two int values, return their sum. Unless the two values are the same, "
 "then return double their sum."
@@ -10593,12 +11162,12 @@ msgstr ""
 "égales, auquel cas vous devez retourner le double de leur somme."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/alarmclock/AlarmClock.html:1
+#: src/lessons/welcome/bool2/AlarmClock.html:1
 msgid "AlarmClock"
 msgstr "Radio réveil"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/alarmclock/AlarmClock.html:2
+#: src/lessons/welcome/bool2/AlarmClock.html:2
 msgid ""
 "Given a day of the week encoded as 0=Sun, 1=Mon, 2=Tue, ...6=Sat, and a "
 "boolean indicating if we are on vacation, return a string of the form "
@@ -10617,12 +11186,12 @@ msgstr ""
 "week-end."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/answercell/AnswerCell.html:1
+#: src/lessons/welcome/bool2/AnswerCell.html:1
 msgid "AnswerCell"
 msgstr "Répondeur"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/answercell/AnswerCell.html:2
+#: src/lessons/welcome/bool2/AnswerCell.html:2
 msgid ""
 "Your cell phone rings. Return true if you should answer it. Normally you "
 "answer, except in the morning you only answer if it is your mom calling. In "
@@ -10633,12 +11202,12 @@ msgstr ""
 "Dans tous les cas, vous ne répondez pas si vous dormez."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/ticket/blue/BlueTicket.html:1
+#: src/lessons/welcome/bool2/BlueTicket.html:1
 msgid "BlueTicket"
 msgstr "Ticket bleu"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/ticket/blue/BlueTicket.html:2
+#: src/lessons/welcome/bool2/BlueTicket.html:2
 msgid ""
 "You have a blue lottery ticket, with ints a, b, and c on it. This makes "
 "three pairs, which we'll call ab, bc, and ac. Consider the sum of the "
@@ -10653,12 +11222,12 @@ msgstr ""
 "de plus que les sommes bc ou ac, le résultat est 5. Sinon, le résultat est 0."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.html:1
+#: src/lessons/welcome/bool2/CaughtSpeeding.html:1
 msgid "CaughtSpeeding"
 msgstr "Radar de vitesse"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.html:2
+#: src/lessons/welcome/bool2/CaughtSpeeding.html:2
 msgid ""
 "You are driving a little too fast, and a police officer stops you. Write "
 "code to compute the result, encoded as an int value: 0=no ticket, 1=small "
@@ -10676,12 +11245,12 @@ msgstr ""
 "sinon, votre vitesse peut être supérieure de 5 dans tous les cas."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/party/cigar/CigarParty.html:1
+#: src/lessons/welcome/bool2/CigarParty.html:1
 msgid "CigarParty"
 msgstr "Cigares de fête"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/party/cigar/CigarParty.html:2
+#: src/lessons/welcome/bool2/CigarParty.html:2
 msgid ""
 "When squirrels get together for a party, they like to have cigars. A "
 "squirrel party is successful when the number of cigars is between 40 and 60, "
@@ -10694,12 +11263,12 @@ msgstr ""
 "nombre de cigares. Renvoyez vrai si la fête est réussie. "
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/datefashion/DateFashion.html:1
+#: src/lessons/welcome/bool2/DateFashion.html:1
 msgid "DateFashion"
 msgstr "Rendez-vous élégant"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/datefashion/DateFashion.html:2
+#: src/lessons/welcome/bool2/DateFashion.html:2
 msgid ""
 "You and your date are trying to get a table at a restaurant. The parameter "
 "\"you\" is the stylishness of your clothes, in the range 0..10, and \"date\" "
@@ -10719,12 +11288,12 @@ msgstr ""
 "résultat est 1 (peut-être)."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/ticket/green/GreenTicket.html:1
+#: src/lessons/welcome/bool2/GreenTicket.html:1
 msgid "GreenTicket"
 msgstr "Ticket vert"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/ticket/green/GreenTicket.html:2
+#: src/lessons/welcome/bool2/GreenTicket.html:2
 msgid ""
 "You have a green lottery ticket, with ints a, b, and c on it. If the numbers "
 "are all different from each other, the result is 0. If all of the numbers "
@@ -10737,12 +11306,12 @@ msgstr ""
 "nombres sont les mêmes, le résultat est 10."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/in1to10/In1To10.html:1
+#: src/lessons/welcome/bool2/In1To10.html:1
 msgid "In1To10"
 msgstr "De 1 à 10"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/in1to10/In1To10.html:2
+#: src/lessons/welcome/bool2/In1To10.html:2
 msgid ""
 "Given a number n, return true if n is in the range 1..10, inclusive. Unless "
 "\"outsideMode\" is true, in which case return true if the number is less or "
@@ -10753,12 +11322,12 @@ msgstr ""
 "petit ou égal à 1 ou bien s'il est plus grand ou égal à 10"
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/inorderequals/InOrderEqual.html:1
+#: src/lessons/welcome/bool2/InOrderEqual.html:1
 msgid "InOrderEqual"
 msgstr "Dans l'ordre croissant"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/inorderequals/InOrderEqual.html:2
+#: src/lessons/welcome/bool2/InOrderEqual.html:2
 msgid ""
 "Given three ints, a b c, return true if they are in strict increasing order, "
 "such as 2 5 11, or 5 6 7, but not 6 5 7 or 5 5 7. However, with the "
@@ -10771,12 +11340,12 @@ msgstr ""
 "5 5 7 ou 5 5 5."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/inorder/InOrder.html:1
+#: src/lessons/welcome/bool2/InOrder.html:1
 msgid "InOrder"
 msgstr "Dans l'ordre"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/inorder/InOrder.html:2
+#: src/lessons/welcome/bool2/InOrder.html:2
 msgid ""
 "Given three ints, a b c, return true if b is greater than a, and c is "
 "greater than b. However, with the exception that if \"bOk\" is true, b does "
@@ -10787,12 +11356,12 @@ msgstr ""
 "n'a pas besoin d'être plus grand que a."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/lastdigit2/LastDigit2.html:1
+#: src/lessons/welcome/bool2/LastDigit2.html:1
 msgid "LastDigit 2"
 msgstr "L'autre dernier chiffre"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/lastdigit2/LastDigit2.html:2
+#: src/lessons/welcome/bool2/LastDigit2.html:2
 msgid ""
 "Given three ints, a b c, return true if two or more of them have the same "
 "rightmost digit. The ints are non-negative. Note: the % \"mod\" operator "
@@ -10803,12 +11372,12 @@ msgstr ""
 "% \"mod\" calcule le reste, i.e. 17 % 10 vaut 7."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/lessby10/LessBy10.html:1
+#: src/lessons/welcome/bool2/LessBy10.html:1
 msgid "LessBy10"
 msgstr "Plus petit par 10"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/lessby10/LessBy10.html:2
+#: src/lessons/welcome/bool2/LessBy10.html:2
 msgid ""
 "Given three ints, a b c, return true if one of them is 10 or more less than "
 "one of the others."
@@ -10831,12 +11400,12 @@ msgstr ""
 "com/doc/ifboolean.html."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/maxmod5/MaxMod5.html:1
+#: src/lessons/welcome/bool2/MaxMod5.html:1
 msgid "MaxMod5"
 msgstr "Maximum Mod 5"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/maxmod5/MaxMod5.html:2
+#: src/lessons/welcome/bool2/MaxMod5.html:2
 msgid ""
 "Given two int values, return whichever value is larger. However if the two "
 "values have the same remainder when divided by 5, then the return the "
@@ -10850,12 +11419,12 @@ msgstr ""
 "reste, i.e. 7 % 5 vaut 2."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/nearten/NearTen.html:1
+#: src/lessons/welcome/bool2/NearTen.html:1
 msgid "NearTen"
 msgstr "Près de dix"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/nearten/NearTen.html:2
+#: src/lessons/welcome/bool2/NearTen.html:2
 msgid ""
 "Given a non-negative number \"num\", return true if num is within 2 of a "
 "multiple of 10. Note: (a % b) is the remainder of dividing a by b, so (7 % "
@@ -10866,12 +11435,12 @@ msgstr ""
 "(7 % 5) vaut 2."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/ticket/red/RedTicket.html:1
+#: src/lessons/welcome/bool2/RedTicket.html:1
 msgid "RedTicket"
 msgstr "Ticket rouge"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/ticket/red/RedTicket.html:2
+#: src/lessons/welcome/bool2/RedTicket.html:2
 msgid ""
 "You have a red lottery ticket showing ints a, b, and c, each of which is 0, "
 "1, or 2. If they are all the value 2, the result is 10. Otherwise if they "
@@ -10885,12 +11454,12 @@ msgstr ""
 "0."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/sharedigit/ShareDigit.html:1
+#: src/lessons/welcome/bool2/ShareDigit.html:1
 msgid "ShareDigit"
 msgstr "Chiffre partagé"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/sharedigit/ShareDigit.html:2
+#: src/lessons/welcome/bool2/ShareDigit.html:2
 msgid ""
 "Given two ints, each in the range 10..99, return true if there is a digit "
 "that appears in both numbers, such as the 2 in 12 and 23. (Note: division, e."
@@ -10903,12 +11472,12 @@ msgstr ""
 "\" n%10 renvoye le bon chiffre.)"
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/sortasum/SortaSum.html:1
+#: src/lessons/welcome/bool2/SortaSum.html:1
 msgid "SortaSum"
 msgstr "Sommes d'entiers"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/sortasum/SortaSum.html:2
+#: src/lessons/welcome/bool2/SortaSum.html:2
 msgid ""
 "Given 2 ints, a and b, return their sum. However, sums in the range 10..19 "
 "inclusive, are forbidden, so in that case just return 20."
@@ -10917,12 +11486,12 @@ msgstr ""
 "10 et 19 inclus sont interdites, dans ce cas, renvoyez 20."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.html:1
+#: src/lessons/welcome/bool2/SquirrelPlay.html:1
 msgid "SquirrelPlay"
 msgstr "Jeu de l'écureuil"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.html:2
+#: src/lessons/welcome/bool2/SquirrelPlay.html:2
 msgid ""
 "The squirrels in Palo Alto spend most of the day playing. In particular, "
 "they play if the temperature is between 60 and 90 (inclusive). Unless it is "
@@ -10937,12 +11506,12 @@ msgstr ""
 "Renvoyez vrai si les écureuils jouent et faux sinon."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/party/tea/TeaParty.html:1
+#: src/lessons/welcome/bool2/TeaParty.html:1
 msgid "TeaParty"
 msgstr "Goûter"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/party/tea/TeaParty.html:2
+#: src/lessons/welcome/bool2/TeaParty.html:2
 msgid ""
 "We are having a party with amounts of tea and candy. Return the int outcome "
 "of the party encoded as 0=bad, 1=good, or 2=great. A party is good (1) if "
@@ -10960,12 +11529,12 @@ msgstr ""
 "(0)."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/teensum/TeenSum.html:1
+#: src/lessons/welcome/bool2/TeenSum.html:1
 msgid "TeenSum"
 msgstr "Somme d'ados"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/teensum/TeenSum.html:2
+#: src/lessons/welcome/bool2/TeenSum.html:2
 msgid ""
 "Given 2 ints, a and b, return their sum. However, \"teen\" values in the "
 "range 13..19 inclusive, are extra lucky. So if either value is a teen, just "
@@ -10976,12 +11545,12 @@ msgstr ""
 "Donc, si l'un des nombres est ado, retournez simplement 19."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/twoasone/TwoAsOne.html:1
+#: src/lessons/welcome/bool2/TwoAsOne.html:1
 msgid "TwoAsOne"
 msgstr "Deux pour un"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/twoasone/TwoAsOne.html:2
+#: src/lessons/welcome/bool2/TwoAsOne.html:2
 msgid ""
 "Given three ints, a b c, return true if it is possible to add two of the "
 "ints to get the third."
@@ -10990,12 +11559,12 @@ msgstr ""
 "deux d'entre eux pour obtenir le troisième."
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.html:1
+#: src/lessons/welcome/bool2/WithoutDoubles.html:1
 msgid "WithoutDoubles"
 msgstr "Sans double"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.html:2
+#: src/lessons/welcome/bool2/WithoutDoubles.html:2
 msgid ""
 "Return the sum of two 6-sided dice rolls, each in the range 1..6. However, "
 "if noDoubles is true, if the two dice show the same value, increment one die "
@@ -11070,7 +11639,7 @@ msgid ""
 msgstr ""
 "Les chaînes de caractères (\"String\") sont les plus simples des types de "
 "données complexes :) Elles fournissent différentes opérations, comme obtenir "
-"la logueur de la chaîne ou une sous-chaîne..."
+"la longueur de la chaîne ou une sous-chaîne..."
 
 #. type: Content of: <p>
 #: src/lessons/bat/string1/Main.html:7
@@ -11081,13 +11650,32 @@ msgstr ""
 "Une très bonne introduction à ce type est disponible ici : http://javabat."
 "com/doc/string.html."
 
+#. type: Content of: <h3>
+#: src/lessons/bat/string1/short_desc.html:1
+msgid "Small exercises about strings"
+msgstr "Petits exercices sur les chaînes"
+
+#. type: Content of: <p>
+#: src/lessons/bat/string1/short_desc.html:3
+msgid ""
+"These are some training exercises around strings. But unfortunately, its "
+"integration within JLM is still ongoing."
+msgstr ""
+"Il s'agit d'exercices d'entraînement au sujet des chaînes de caractères. "
+"Mais malheureusement, leur intégration à JLM est encore en cours."
+
+#. type: Content of: <p>
+#: src/lessons/bat/string1/short_desc.html:6
+msgid "Please be patient with us."
+msgstr "Merci de votre patience."
+
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/altpairs/AltPairs.html:1
+#: src/lessons/bat/string1/AltPairs.html:1
 msgid "AltPairs"
 msgstr "Sans les paires"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/altpairs/AltPairs.html:2
+#: src/lessons/bat/string1/AltPairs.html:2
 msgid ""
 "Given a string, return a string made of the chars at indexes 0,1, 4,5, "
 "8,9 ... so \"kittens\" yields \"kien\"."
@@ -11096,66 +11684,12 @@ msgstr ""
 "aux index 0,1,4,5,8,9 ... par exemple \"kittens\" devient \"kien\"."
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/array123/Array123.html:1
-msgid "Array123"
-msgstr "Tableau123"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/array123/Array123.html:2
-msgid ""
-"Given an array of ints, return true if .. 1, 2, 3, .. appears in the array "
-"somewhere."
-msgstr ""
-"Soit un tableau d'entiers, renvoyez vrai si .. 1, 2, 3, .. apparaissent "
-"quelquepart dans le tableau."
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/array667/Array667.html:1
-msgid "Array667"
-msgstr "Tableau667"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/array667/Array667.html:2
-msgid ""
-"Given an array of ints, return the number of times that two 6's are next to "
-"each other in the array. Also count instances where the second \"6\" is "
-"actually a 7."
-msgstr ""
-"Soit un tableau d'entiers, renvoyez le nombre de fois que deux 6 sont l'un à "
-"la suite de l'autre dans le tableau. Comptez également le nombre de fois où "
-"le deuxième \"6\" esten fait un 7."
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/arraycount9/ArrayCount9.html:1
-msgid "ArrayCount9"
-msgstr "Comptage de 9"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/arraycount9/ArrayCount9.html:2
-msgid "Given an array of ints, return the number of 9's in the array."
-msgstr "Soit un tableau d'entiers, renvoyez le nombre de 9 dans ce tableau."
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/arrayfront9/ArrayFront9.html:1
-msgid "ArrayFront9"
-msgstr "Tableau commençant par 9"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/arrayfront9/ArrayFront9.html:2
-msgid ""
-"Given an array of ints, return true if one of the first 4 elements in the "
-"array is a 9. The array length may be less than 4."
-msgstr ""
-"Soit un tableau d'entiers, renvoyez vrai si l'un des 4 premiers éléments "
-"dans ce tableau est un 9. Le tableau peut contenir moins de 4 éléments."
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/fronttimes/FrontTimes.html:1
+#: src/lessons/bat/string1/FrontTimes.html:1
 msgid "FrontTimes"
 msgstr "Multiplication de début"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/fronttimes/FrontTimes.html:2
+#: src/lessons/bat/string1/FrontTimes.html:2
 msgid ""
 "Given a string and a non-negative int n, we'll say that the front of the "
 "string is the first 3 chars, or whatever is there if the string is less than "
@@ -11167,63 +11701,30 @@ msgstr ""
 "Renvoyez n copies du début de la chaîne."
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/has271/Has271.html:1
-msgid "Has271"
-msgstr "Contient 271"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/has271/Has271.html:2
-msgid ""
-"Given an array of ints, 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."
-msgstr ""
-"Soit un tableau d'entiers, renvoyez vrai si il contient schéma 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."
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/last2/Last2.html:1
+#: src/lessons/bat/string1/Last2.html:1
 msgid "Last2"
 msgstr "Deux derniers"
 
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/last2/Last2.html:2
-msgid ""
-"Given a string, return the count of the number of times that a substring "
-"length 2 appears in the string and also as the last 2 chars of the string, "
-"so \"hixxxhi\" yields 1 (we won't count the end substring)."
-msgstr ""
-"Soit une chaîne de caractères.\n"
-"Renvoyez combien de fois une sous-chaîne de longueur 2 apparait dans la "
-"chaîne et aussi en tant que 2 derniers caractères de la chaîne.\n"
-"Par exemple, \"hixxxhi\" renvoie 1 ( on ne compte pas le dernière sous-"
-"chaîne )."
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/notriples/NoTriples.html:1
-msgid "NoTriples"
-msgstr "Pas de triplet"
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/notriples/NoTriples.html:2
+#. type: Content of: <p>
+#: src/lessons/bat/string1/Last2.html:3
 msgid ""
-"Given an array of ints, we'll say that a triple is a value appearing 3 times "
-"in a row in the array. Return true if the array does not contain any triples."
+"Given a string, return the amount of times that the two last letters appear "
+"as a substring of the string. So \"hixxxhi\" yields 1 (we won't count the "
+"end substring) while \"aaaNaa\" yields 2 (substrings may overlap)."
 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 "
-"pas de triplet."
+"Étant donné une chaîne de caractères, retournez le nombre de fois que les "
+"deux\n"
+"dernières lettres apparaissent. Par exemple, \"hixxxhi\" renvoie 1 (on ne "
+"compte pas la dernière sous-chaîne) tandis que \"aaaNaa\" renvoie 2 (les "
+"occurences peuvent se chevaucher partiellement)."
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/bits/StringBits.html:1
+#: src/lessons/bat/string1/StringBits.html:1
 msgid "StringBits"
 msgstr "Éclats de chaîne"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/bits/StringBits.html:2
+#: src/lessons/bat/string1/StringBits.html:2
 msgid ""
 "Given a string, return a new string made of every other char starting with "
 "the first, so \"Hello\" yields \"Hlo\"."
@@ -11235,12 +11736,12 @@ msgstr ""
 "caractère. Ainsi, \"Bonjour\" donne \"Bnor\"."
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/match/StringMatch.html:1
+#: src/lessons/bat/string1/StringMatch.html:1
 msgid "StringMatch"
 msgstr "Comparaison de chaînes"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/match/StringMatch.html:2
+#: src/lessons/bat/string1/StringMatch.html:2
 msgid ""
 "Given 2 strings, a and b, return the number of the positions where they "
 "contain the same length 2 substring. So \"xxcaazz\" and \"xxbaaz\" yields 3, "
@@ -11255,12 +11756,12 @@ msgstr ""
 "chaînes."
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/splosion/StringSplosion.html:1
+#: src/lessons/bat/string1/StringSplosion.html:1
 msgid "StringSplosion"
 msgstr "Explosion de chaîne"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/splosion/StringSplosion.html:2
+#: src/lessons/bat/string1/StringSplosion.html:2
 msgid ""
 "Given a non-empty string like \"Code\" return a string like \"CCoCodCode\"."
 msgstr ""
@@ -11268,12 +11769,12 @@ msgstr ""
 "Renvoyez une chaîne de caractères comme \"CCoCodCode\"."
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/times/StringTimes.html:1
+#: src/lessons/bat/string1/StringTimes.html:1
 msgid "StringTimes"
 msgstr "Multiplication de chaînes"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/times/StringTimes.html:2
+#: src/lessons/bat/string1/StringTimes.html:2
 msgid ""
 "Given a string and a non-negative int n, return a larger string that is n "
 "copies of the original string."
@@ -11283,12 +11784,12 @@ msgstr ""
 "originale."
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/stringx/StringX.html:1
+#: src/lessons/bat/string1/StringX.html:1
 msgid "StringX"
 msgstr "Chaîne X"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/stringx/StringX.html:2
+#: src/lessons/bat/string1/StringX.html:2
 msgid ""
 "Given a string, return a version where all the \"x\" have been removed. "
 "Except an \"x\" at the very start or end should not be removed."
@@ -11298,21 +11799,25 @@ msgstr ""
 "Seuls les \"x\" au tout début ou en toute fin ne doivent pas être supprimés."
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/yak/StringYak.html:1
+#: src/lessons/bat/string1/StringYak.html:1
 msgid "StringYak"
 msgstr "String Yak"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/yak/StringYak.html:2
+#: src/lessons/bat/string1/StringYak.html:2
 msgid ""
 "Suppose the string \"yak\" is unlucky. Given a string, return a version "
 "where all the \"yak\" are removed, but the \"a\" can be any char. The \"yak"
 "\" strings will not overlap."
 msgstr ""
-"Supposer la chaîne \"yak\" comme malchanceuse.\n"
-"Soit une chaîne de caractères, renvoyez une version où tous les \"yak\" sont "
-"supprimées, mais le \"a\" peut être n'importe quel caractère. La \"yak\" "
-"chaîne ne sera pas pétinée."
+"La chaîne \"yak\" n'a pas de chance. Soit une chaîne de caractères, renvoyez "
+"une version où tous les \"yak\" sont supprimées (quel que soit le caractère "
+"à la place du 'a'). Les différentes chaînes \"yak\" ne se chevauchent pas."
+
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/basics/Array.html:1
+msgid "Knotting and sequences"
+msgstr "Tricots et séquences"
 
 #. type: Content of: outside any tag (error?)
 #: src/lessons/welcome/array/basics/Array.html:3
@@ -11336,27 +11841,24 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array.html:11
 msgid ""
 "One solution is to read the next cell, and go copy it in position before "
-"comming back to read the second cell. But since it is forbiden to use the "
+"coming back to read the second cell. But since it is forbidden to use the "
 "methods to teleport the buggle to a specific position (<code>setPos()</code> "
 "and similar), this approach will be a pain to implement."
 msgstr ""
 "Une possibilité est de lire la prochaine case, puis d'aller la recopier en "
-"position, avant de revenir lire la case suivate, etc. Mais comme vous n'avez "
-"pas le droit d'utiliser les méthodes permettant de téléporter la buggle à "
-"une case particulière (<code>setPos()</code> et autres), cette façon de "
-"faire va être très pénible à mettre en place."
+"position, avant de revenir lire la case suivante, etc. Mais comme vous "
+"n'avez pas le droit d'utiliser les méthodes permettant de téléporter la "
+"buggle à une case particulière (<code>setPos()</code> et autres), cette "
+"façon de faire va être très pénible à mettre en place."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/basics/Array.html:16
-msgid "The simplest is to store the whole color pattern in an <b>array</b>."
+msgid ""
+"The simplest is to store the sequence of colors that constitute the whole "
+"pattern in an <b>array</b>."
 msgstr ""
-"Le plus simple est de stocker l'enchainement de couleurs dans un <b>tableau</"
-"b>."
-
-#. type: Content of: <p><h2>
-#: src/lessons/welcome/array/basics/Array.html:18
-msgid "Arrays in Java"
-msgstr "Les tableaux en Java"
+"Le plus simple est de stocker l'enchainement de couleurs constituant le "
+"motif dans un <b>tableau</b>."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/basics/Array.html:19
@@ -11369,8 +11871,39 @@ msgstr ""
 "valeurs de même type (une par emplacement). C'est donc une séquence de cases "
 "de même type :"
 
+#. type: Content of: <p>
+#: src/lessons/welcome/array/basics/Array.html:24
+msgid ""
+"The simplest is to store the sequence of colors that constitute the whole in "
+"a <b>list</b>."
+msgstr ""
+"Le plus simple est de stocker l'enchainement de couleurs constituant le "
+"motif dans une <b>liste</b>."
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/array/basics/Array.html:26
+msgid "Lists"
+msgstr "Les listes"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/basics/Array.html:27
+msgid ""
+"A list is an array of positions in which one can store values. Each cell is "
+"a variable on its own. A list is then a sequence of values. Lists can even "
+"mix values of differing types, such as integer values in some cells and "
+"colors in other cells.  At the end, a list is very similar to a storage "
+"shelve, where each level can store a separate value."
+msgstr ""
+"Une liste est une séquence d'emplacements dans lesquels on peut mettre des "
+"valeurs (une par emplacement). Chaque cellule est une variable à part "
+"entière. La liste est donc une séquence de valeurs. Il est même possible de "
+"stoquer des valeurs de type différentes dans une liste, avec par exemple des "
+"entiers dans certaines cases et des couleurs dans d'autres cases. En quelque "
+"sorte, une liste ressemble un peu à une étagère où chaque étage peut "
+"contenir une valeur donnée."
+
 #. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:28
+#: src/lessons/welcome/array/basics/Array.html:38
 msgid ""
 "T is the array's name, T[0] is the name of the first cell, T[1] the name of "
 "the second cell, T[2] the third one, etc. And yes, the first cell in "
@@ -11381,34 +11914,50 @@ msgstr ""
 "est T[0] et la dernière case d'un tableau de dimension N est T[N - 1]."
 
 #. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:32
+#: src/lessons/welcome/array/basics/Array.html:41
+msgid ""
+"T is the list's name, T[0] is the name of the first cell, T[1] the name of "
+"the second cell, T[2] the third one, etc. And yes, the first cell in "
+"numbered T[0] and the last one of a list of size N is T[N-1]. It may seem "
+"funny to count starting from 0 and not from 1 as usual, but some historical "
+"reasons make it unavoidable here."
+msgstr ""
+"T est le nom de la liste, T[0] est le nom de la première case, T[1] de la "
+"deuxième case, T[2] de la troisième case, etc... Et oui, la première case "
+"est T[0] et la dernière case d'une liste de taille N est T[N - 1]. Cela peut "
+"sembler étrange de commencer à compter à partir de 0 et non de 1, mais c'est "
+"ainsi (et cela s'explique par des raisons historiques obscures)."
+
+#. type: Content of: <br><p>
+#: src/lessons/welcome/array/basics/Array.html:47
 msgid ""
-"We can use an integer variable <i>i</i> to access with T[i] to the array's "
-"cells: when the value of <i>i</i> is 0, then T[i] accesses T[0], when the "
-"value of <i>i</i> is 10, then T[i] accesses T[10]. <i>i</i> is said to be "
-"the indice in the array T."
+"We can use an integer variable <i>i</i> to access with T[i] to the cells: "
+"when the value of <i>i</i> is 0, then T[i] accesses T[0], when the value of "
+"<i>i</i> is 10, then T[i] accesses T[10]. <i>i</i> is said to be the index "
+"in T."
 msgstr ""
 "On peut utiliser une variable entière <i>i</i> pour accéder avec T[i] aux "
-"cases d'un tableau : lorsque <i>i</i> vaut 0 alors T[i] dénote la case T[0], "
-"lorsque <i>i</i> vaut 10, T[i] dénote T[10]. On dit alors que <i>i</i> est "
-"un <b>indice</b> dans le tableau T ."
+"cases : lorsque <i>i</i> vaut 0 alors T[i] dénote la case T[0], lorsque "
+"<i>i</i> vaut 10, T[i] dénote T[10]. On dit alors que <i>i</i> est un "
+"<b>indice</b> dans le tableau T ."
 
-#. type: Content of: <br><p><h2>
-#: src/lessons/welcome/array/basics/Array.html:37
-msgid "Initializing an array"
-msgstr "Remplissage d'un tableau"
+#. type: Content of: <br><p><h3>
+#: src/lessons/welcome/array/basics/Array.html:52
+msgid "Initialization"
+msgstr "Initialisation"
 
-#. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:38
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:53
 msgid ""
-"Let <code>T</code> be an array of 10 integer elements. It can then be "
-"initialized this way:"
+"If <code>T</code> contains 10 elements, then each cell can be initialized "
+"with a simple loop:"
 msgstr ""
-"Supposons que <code>T</code> soit un tableau de 10 éléments entiers.  On "
-"peut alors le remplir de la manière suivante :"
+"Si <code>T</code> contient 10 éléments, on peut alors initialiser son "
+"contenu\n"
+"avec une simple boucle :"
 
 #. type: Content of: <br><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:41
+#: src/lessons/welcome/array/basics/Array.html:56
 #, no-wrap
 msgid ""
 "for (int i = 0; i<10; i++) {\n"
@@ -11419,36 +11968,59 @@ msgstr ""
 "   T[i] = 3;\n"
 "}\n"
 
-#. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:46
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:61
+#, no-wrap
+msgid ""
+"for i in range(10):\n"
+"   T[i] = 3;\n"
+msgstr ""
+"for i in range(10):\n"
+"   T[i] = 3;\n"
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:65
+msgid ""
+"Note that <code>range(max)</code> returns the list of all integers that are "
+"smaller than <code>max</code>, starting with 0. There is exactly max such "
+"values. For example, if <code>max</code> is 3, the returned values are 0, 1 "
+"and 2."
+msgstr ""
+"<code>range(max)</code> renvoie la liste de tous les entiers inférieurs à "
+"<code>max</code>, en commençant à 0. Il y a exactement <code>max</code> "
+"valeurs répondant à ces critères. Par exemple, si <code>max</code> est 3, "
+"les valeurs renvoyées seront 0, 1 et 2."
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:70
 msgid ""
 "<code>T[i]</code> can be used just like a variable. We can set a new value:"
 msgstr "<code>T[i]</code> s'utilise comme une variable. On peut l'affecter :"
 
 #. type: Content of: <br><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:47
+#: src/lessons/welcome/array/basics/Array.html:71
 #, no-wrap
-msgid "T[i] = 78;"
-msgstr "T[i] = 78;"
+msgid "T[i] = 78"
+msgstr "T[i] = 78"
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:49
-msgid "We can access its value:"
-msgstr "On peut lire sa valeur :"
+#: src/lessons/welcome/array/basics/Array.html:73
+msgid "We can retrieve and use its value:"
+msgstr "On peut réutiliser et tester cette valeur :"
 
-#. type: Content of: <br><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:50
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:74
 #, no-wrap
-msgid "x = T[i];"
-msgstr "x = T[i];"
+msgid "x = T[i]"
+msgstr "x = T[i]"
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:52
+#: src/lessons/welcome/array/basics/Array.html:76
 msgid "We can test this value:"
 msgstr "On peut tester cette valeur :"
 
-#. type: Content of: <br><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:54
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:78
 #, no-wrap
 msgid ""
 "if (T[i] > 0 ) {\n"
@@ -11459,24 +12031,86 @@ msgstr ""
 "    // instructions...\n"
 "}\n"
 
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:83
+#, no-wrap
+msgid ""
+"if T[i] > 0:\n"
+"    // instructions...\n"
+msgstr ""
+"if T[i] > 0:\n"
+"    // instructions...\n"
+
 #. type: Content of: <br><p><h3>
-#: src/lessons/welcome/array/basics/Array.html:59
+#: src/lessons/welcome/array/basics/Array.html:87
 msgid "Declaring an array"
 msgstr "Déclaration d'un tableau"
 
-#. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:60
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:88
+msgid ""
+"If you know beforehand the content of your list, you can affect these values "
+"all together.  Just put them between square braces and separated by commas "
+"as follows:"
+msgstr ""
+"Si vous connaissez à l'avance le contenu de votre liste, vous pouvez "
+"affecter ces valeurs directement. Placez-les simplement entre crochets et "
+"séparées par des virgules comme ceci :"
+
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:91
+#, no-wrap
+msgid ""
+"L = [1, 3, 5, 7, 9] \n"
+"# L is now an array of 5 values, all of them being integers\n"
+msgstr ""
+"L = [1, 3, 5, 7, 9] \n"
+"# L est maintenant une liste de 5 valeurs, toutes des entiers\n"
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:94
+msgid ""
+"Otherwise, you probably want to create an empty list and then append each "
+"values separately:"
+msgstr ""
+"Dans le cas contraire, le plus simple est de créer une liste vide puis "
+"d'ajouter chaque valeur séparément :"
+
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:96
+#, no-wrap
+msgid ""
+"L2 = [] \n"
+"# L2 is now an empty list\n"
+"L2.append(1)\n"
+"L2.append(3)\n"
+"L2.append(5)\n"
+"L2.append(7)\n"
+"L2.append(9) \n"
+"# Its content is now the same as L previously\n"
+msgstr ""
+"L2 = [] \n"
+"# L2 est maintenant une liste vide\n"
+"L2.append(1)\n"
+"L2.append(3)\n"
+"L2.append(5)\n"
+"L2.append(7)\n"
+"L2.append(9) \n"
+"# Son contenu est maintenant le même que celui de L ci-dessus\n"
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:106
 msgid "An array can be declared the following way:"
 msgstr "Un tableau se déclare de la manière suivante :"
 
 #. type: Content of: <br><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:61
+#: src/lessons/welcome/array/basics/Array.html:107
 #, no-wrap
 msgid "int[] T;"
 msgstr "int[] T;"
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:63
+#: src/lessons/welcome/array/basics/Array.html:109
 msgid ""
 "<code>int</code> means that the elements of the array are of type integer; "
 "<code>T</code> is the name of the array and <code>[]</code> means that we "
@@ -11490,24 +12124,24 @@ msgstr ""
 "deux écritures sont syntaxiquement équivalente, mais la première est souvent "
 "préférée en Java."
 
-#. type: Content of: <br><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:68
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:114
 #, no-wrap
 msgid "int T[];"
 msgstr "int T[];"
 
 #. type: Content of: <br><p><h3>
-#: src/lessons/welcome/array/basics/Array.html:70
+#: src/lessons/welcome/array/basics/Array.html:116
 msgid "Allocating an array"
 msgstr "Allocation d'un tableau"
 
-#. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:72
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:118
 msgid ""
-"Declaring an array <code>T</code> only reserve the name <code>T</code> for "
-"later use. But the array is not initialized yet: it does not have any value. "
-"What would <code>T[4]</code> mean if we didn't say that the array is at "
-"least 5 cells long?"
+"Declaring a variable <code>T</code> that stores an array only reserve the "
+"name <code>T</code> for later use. But the array is not initialized yet: it "
+"does not have any value. What would <code>T[4]</code> mean if we didn't say "
+"that the array is at least 5 cells long?"
 msgstr ""
 "Déclarer un tableau <code>T</code> nous réserve juste le nom <code>T</code> "
 "pour l'utiliser plus tard. Mais le tableau n'est pas initialisé : il n'a pas "
@@ -11515,18 +12149,18 @@ msgstr ""
 "dit que <code>T</code> est un tableau d'au moins 5 éléments ?"
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:77
+#: src/lessons/welcome/array/basics/Array.html:123
 msgid "First and foremost, we have to give a value to <code>T</code>:"
 msgstr "Avant tout, il faut donc lui affecter une valeur à <code>T</code>:"
 
-#. type: Content of: <br><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:78
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:124
 #, no-wrap
 msgid "T = new int[10];"
 msgstr "T = new int[10];"
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:79
+#: src/lessons/welcome/array/basics/Array.html:126
 msgid ""
 "<code>new</code> means that we want to create something, and <code>int[10]</"
 "code> means that it is an array of 10 integer values. In return, an array of "
@@ -11538,8 +12172,8 @@ msgstr ""
 "un tableau d'entiers de longueur 10 est crée en mémoire, et la variable "
 "<code>T</code> référence ce tableau."
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:84
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:131
 msgid ""
 "The size of an array is fixed and cannot be changed after the creation of "
 "the array. To know the size of a <code>T</code> array, we can consult the "
@@ -11549,34 +12183,25 @@ msgstr ""
 "création du tableau. Pour connapitre la taille d'un tableau <code>T</code>, "
 "on peut consulter la valeur de la variable <code>T.length</code>."
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:89
-msgid "It is forbidden to write:"
-msgstr "On ne peut pas écrire :"
-
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:90
-#, no-wrap
-msgid "int T[10]; // WRONG!!!"
-msgstr "int T[10]; // FAUX !!!"
-
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:91
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:136
 msgid ""
-"You are required to use the <code>new</code> instruction. On the other hand, "
-"you perfectly can specify the size with a variable <code>i</code>."
+"It is forbidden to write something like <code>int T[10];</code> You are "
+"required to use the <code>new</code> instruction. On the other hand, you "
+"perfectly can specify the size with a variable <code>i</code>."
 msgstr ""
-"Il faut absolument utiliser l'instruction <code>new</code>. Par contre, on "
-"peut très bien donner la dimension par une variable <code>i</code>."
+"Il est interdit d'écrire quelque chose comme <code>int T[10]</code>.Il faut "
+"absolument utiliser l'instruction <code>new</code>. Par contre, on peut très "
+"bien donner la dimension par une variable <code>i</code>."
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:93
+#. type: Content of: <br><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:140
 #, no-wrap
 msgid "T = new int[i];"
 msgstr "T = new int[i];"
 
 #. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:94
+#: src/lessons/welcome/array/basics/Array.html:141
 msgid ""
 "In this case, the array's size will be set to the value of <code>i</code> "
 "<b>when <code>new</code> gets called</b>. If the variable changes afterward, "
@@ -11586,35 +12211,35 @@ msgstr ""
 "moment où on a fait le</b> <code>new</code>. Si <code>i</code> change après "
 "coup, cela ne modifie pas la taille du tableau."
 
-#. type: Content of: <br><p><p><p><h4>
-#: src/lessons/welcome/array/basics/Array.html:98
+#. type: Content of: <br><p><p><h4>
+#: src/lessons/welcome/array/basics/Array.html:145
 msgid "Declaration and allocation"
 msgstr "Déclaration et allocation"
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:99
+#. type: Content of: <br><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:146
 #, no-wrap
 msgid "int[] T = new int[10];"
 msgstr "int[] T = new int[10];"
 
 #. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:101
+#: src/lessons/welcome/array/basics/Array.html:148
 msgid "We declare and allocate the array on the same line."
 msgstr "On déclare et alloue le tableau en une seule ligne."
 
-#. type: Content of: <br><p><p><p><h4>
-#: src/lessons/welcome/array/basics/Array.html:103
+#. type: Content of: <br><p><p><h4>
+#: src/lessons/welcome/array/basics/Array.html:150
 msgid "Declaration and initialization"
 msgstr "Déclaration et initialisation"
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:104
+#. type: Content of: <br><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:151
 #, no-wrap
 msgid "int[] T = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };"
 msgstr "int[] T = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };"
 
 #. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:106
+#: src/lessons/welcome/array/basics/Array.html:153
 msgid ""
 "We declare, allocate and initialize the array on the same line. To know the "
 "size of the array to allocate, the compiler counts the provided values. This "
@@ -11625,7 +12250,7 @@ msgstr ""
 "données.  Ce code est équivalent à :"
 
 #. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:110
+#: src/lessons/welcome/array/basics/Array.html:157
 #, no-wrap
 msgid ""
 "int[] T = new int[10];\n"
@@ -11640,13 +12265,13 @@ msgstr ""
 "...\n"
 "T[9] = 10;\n"
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:117
+#. type: Content of: <br><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:164
 msgid "It is also equivalent to:"
 msgstr "C'est aussi équivalent au code :"
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:119
+#. type: Content of: <br><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:166
 #, no-wrap
 msgid ""
 "int[] T = new int[10];\n"
@@ -11659,13 +12284,47 @@ msgstr ""
 "  T[i] = i+1;\n"
 "}\n"
 
-#. type: Content of: <br><p><p><p><h3>
-#: src/lessons/welcome/array/basics/Array.html:125
+#. type: Content of: <br><p><p><p><p><h3>
+#: src/lessons/welcome/array/basics/Array.html:176
+msgid "Lists and method parameters"
+msgstr "Listes et paramètres de méthode"
+
+#. type: Content of: <br><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:177
+msgid ""
+"It is perfectly ok to pass a list to a method as a parameter. This method "
+"can then use this parameter as if it were defined there. Methods can also "
+"return lists as result without any complication. As an example, here is a "
+"method doubling every values of the list received as a parameter:"
+msgstr ""
+"Il est parfaitement autorisé de passer une liste en paramètre à une méthode. "
+"Cette méthode peut ensuite utiliser cette liste comme si elle avait été "
+"définie localement. Les méthodes peuvent même renvoyer des listes en guise "
+"de résultats sans complication particulière. Par exemple, voici une méthode "
+"qui double la valeur de toutes les valeurs de la liste qu'elle reçoit en "
+"paramètre :"
+
+#. type: Content of: <br><p><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:182
+#, no-wrap
+msgid ""
+"L = [1, 3, 5, 7, 9]\n"
+"def doubling(param):\n"
+"  for i in range( len(param) ):\n"
+"    param[i] *= 2\n"
+msgstr ""
+"L = [1, 3, 5, 7, 9]\n"
+"def doubler(param):\n"
+"  for i in range( len(param) ):\n"
+"    param[i] *= 2\n"
+
+#. type: Content of: <br><p><p><p><p><p><h3>
+#: src/lessons/welcome/array/basics/Array.html:189
 msgid "Arrays and method parameters"
 msgstr "Tableaux et paramètres de méthode"
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:126
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:190
 msgid ""
 "It is perfectly ok to pass an array to a method as a parameter. The method "
 "must have a prototype similar to:"
@@ -11673,8 +12332,8 @@ msgstr ""
 "On peut tout à fait passer un tableau en paramètre d'une méthode. La méthode "
 "doit l'indiquer dans son prototype de la façon suivante:"
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:128
+#. type: Content of: <br><p><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:192
 #, no-wrap
 msgid ""
 "void myMethod(int[] values) {\n"
@@ -11685,13 +12344,13 @@ msgstr ""
 "  // faire quelque chose\n"
 "}"
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:132
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:196
 msgid "On the caller side, that also very simple:"
 msgstr "Coté appelant, c'est aussi simple :"
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:134
+#. type: Content of: <br><p><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:198
 #, no-wrap
 msgid ""
 "int[] tab = new int[10];\n"
@@ -11702,14 +12361,14 @@ msgstr ""
 "// initialiser les valeurs\n"
 "maMethode(tab);\n"
 
-#. type: Content of: <br><p><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:139
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:203
 msgid "We can also have methods returns arrays as results:"
 msgstr ""
 "On peut également avoir des méthodes renvoyant des tableaux en résultat :"
 
-#. type: Content of: <br><p><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:140
+#. type: Content of: <br><p><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:204
 #, no-wrap
 msgid ""
 "int[] otherMethod() {\n"
@@ -11724,8 +12383,19 @@ msgstr ""
 "  return resultat;\n"
 "}"
 
-#. type: Content of: <br><p><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:147
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:211
+msgid ""
+"Your code should save the color pattern observed on the first row into a "
+"list.  The easiest is to create an empty list, and then <code>append()</"
+"code> the colors one after the others."
+msgstr ""
+"Votre code devrait sauvegarder dans une liste le motif de couleurs observées "
+"sur la première colonne. Le plus simple est de faire une liste vide, puis "
+"d'ajouter les couleurs les unes après les autres avec <code>append()</code>."
+
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:215
 msgid ""
 "The <code>run()</code> method that you should write must declare an array of "
 "colors (<code>Color[]</code>) and allocate it. Beware, the first world is "
@@ -11738,8 +12408,8 @@ msgstr ""
 "autres. Utilisez donc la méthode <code>getWorldHeight()</code> pour "
 "retrouver le nombre de lignes du monde actuel."
 
-#. type: Content of: <br><p><p><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:153
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:221
 msgid ""
 "Once the array allocated, we have to fill it. For each cel of the row, read "
 "the ground color (with <code>getGroundColor()</code>), and store it in the "
@@ -11749,19 +12419,24 @@ msgstr ""
 "colonne, lisez la couleur du sol (avec <code>getGroundColor()</code>), et "
 "stockez le résultat de cette méthode dans la bonne case du tableau."
 
-#. type: Content of: <br><p><p><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:157
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:225
 msgid ""
-"Once hte array initialized, you have to reapply the pattern on every rows, "
-"for example by excuting <code>getWorldHeight()</code> times a method written "
-"specifically for this."
+"Once you managed to read and save the pattern on the first row, you have to "
+"reapply the pattern on every rows, for example by executing "
+"<code>getWorldHeight()</code> times a method written specifically for this."
 msgstr ""
-"Une fois le tableau initialisé, il faut répliquer le motif sur toutes les "
-"colonnes, par exemple en exécutant <code>getWorldWidth()</code> fois une "
-"méthode écrite tout exprès."
+"Une fois le motif de la première colonne lu et sauvegardé, il faut le "
+"répliquer sur toutes les colonnes, par exemple en exécutant "
+"<code>getWorldWidth()</code> fois une méthode écrite tout exprès."
+
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/basics/Array2.html:1
+msgid "Knotting, sequences and modulo"
+msgstr "Tricots, séquences et modulos"
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/array/basics2/Array2.html:3
+#: src/lessons/welcome/array/basics/Array2.html:3
 msgid ""
 "This exercise is similar to the previous one: you have to reproduce the "
 "color pattern of the first cell into the other ones."
@@ -11770,7 +12445,7 @@ msgstr ""
 "couleurs de la première colonne dans les colonnes suivantes."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/basics2/Array2.html:6
+#: src/lessons/welcome/array/basics/Array2.html:6
 msgid ""
 "The first difference is that the world is bordered of walls: you thus have "
 "to slightly modify your trajectory to ensure that the buggle does not crash "
@@ -11785,7 +12460,7 @@ msgstr ""
 "seulement <code>getWorldHeight()-1</code> pas dans la boucle."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/basics2/Array2.html:12
+#: src/lessons/welcome/array/basics/Array2.html:12
 msgid ""
 "The other difference is that the offset to apply between columns is not "
 "fixed, but written on the first cell of each column. To get the info as an "
@@ -11796,13 +12471,13 @@ msgstr ""
 "obtenir l'information sous forme d'un entier, on peut utiliser:"
 
 #. type: Content of: <p><pre>
-#: src/lessons/welcome/array/basics2/Array2.html:15
+#: src/lessons/welcome/array/basics/Array2.html:15
 #, no-wrap
 msgid "int offset = Integer.parseInt(readMessage())"
 msgstr "int offset = Integer.parseInt(readMessage())"
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/basics2/Array2.html:17
+#: src/lessons/welcome/array/basics/Array2.html:17
 msgid ""
 "<code>readMessage()</code> gets the message on the ground as a String, while "
 "<code>Integer.parseInt()</code> transforms a String into an integer by "
@@ -11812,12 +12487,28 @@ msgstr ""
 "de caractères, tandis que <code>Integer.parseInt()</code> transforme une "
 "chaine de caractères en entiers en la <i>lisant</i>."
 
+#. type: Content of: <p><pre>
+#: src/lessons/welcome/array/basics/Array2.html:21
+#, no-wrap
+msgid "offset = int( readMessage() )"
+msgstr "offset = int( readMessage() )"
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/basics/Array2.html:22
+msgid ""
+"<code>readMessage()</code> gets the message on the ground as a String, while "
+"<code>int()</code> transforms it into an integer value by <i>reading</i> it."
+msgstr ""
+"<code>readMessage()</code> lit l'indication au sol sous forme d'une chaine "
+"de caractères, tandis que <code>int()</code> transforme le résultat en "
+"entier en <i>lisant</i> la chaîne de caractères."
+
 #. type: Content of: <p><p>
-#: src/lessons/welcome/array/basics2/Array2.html:21
+#: src/lessons/welcome/array/basics/Array2.html:25
 msgid ""
 "Then, to pick the right color, the easier is to use the <code>%</code> "
 "(modulo) operator. For example, <code>(i + 5) % size</code> allows to "
-"retrieve teh <code>i</code>th cell of an array of size <code>size</code> "
+"retrieve the <code>i</code>th cell of an array of size <code>size</code> "
 "with an offset of <code>5</code>."
 msgstr ""
 "Ensuite, pour trouver la bonne couleur à utiliser, le plus simple est "
@@ -11828,35 +12519,34 @@ msgstr ""
 
 #. type: Content of: <h1>
 #: src/lessons/welcome/array/indexof/value/IndexOfValue.html:1
-msgid "Searching a given value"
-msgstr "Indice d'une valeur donnée"
+msgid "Searching for a given value"
+msgstr "Chercher une valeur donnée"
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/value/IndexOfValue.html:3
 msgid ""
-"The goal of this exercise is to search the cell of value 17 in an array, and "
-"return its position."
+"The goal of this exercise is to search the cell of a given value, and return "
+"its position."
 msgstr ""
-"L'objectif de cet exercice est de calculer l'indice d'une valeur donnée (17 "
-"dans cet exercice) dans un tableau."
+"L'objectif de cet exercice est de chercher la case contenant une valeur "
+"donnée, et de retourner sa position."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/value/IndexOfValue.html:5
 msgid ""
-"To that extend, you should fill the method <code>indexOf(int[] tab, int "
-"lookingFor)</code>, which parameters are the array to explore, and the value "
-"to search. If the value <code>lookingFor</code> is not in the array "
-"<code>tab</code>, the method should return -1."
+"To that extend, you should fill the method <code>indexOf()</code>, which "
+"parameters are the array to explore, and the value to search. If the value "
+"<code>lookingFor</code> is not in the array <code>tab</code>, the method "
+"should return -1."
 msgstr ""
-"Pour cela, il vous faut remplir le corps de la méthode <code>indexOf(int[] "
-"tab,\n"
-"int lookingFor)</code>. Ses paramètres sont le tableau à explorer et la "
-"valeur\n"
-"à chercher. Si la valeur <code>lookingFor</code> n'est pas dans le tableau\n"
-"<code>tab</code>, la méthode doit renvoyer -1."
+"Pour cela, il vous faut remplir le corps de la méthode <code>indexOf()</"
+"code>. Ses paramètres sont le tableau <code>tab</code> à explorer et la "
+"valeur <code>lookingFor</code> à chercher. Si la valeur <code>lookingFor</"
+"code> n'est pas dans le tableau <code>tab</code>, la méthode doit renvoyer "
+"-1."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:10
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:9
 msgid ""
 "The idea of the algorithm is to sweep over the whole array, checking the "
 "value of each cell. If it's the searched value, you should return the index "
@@ -11868,22 +12558,19 @@ msgstr ""
 "renvoyer l'indice de la case actuellement explorée."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:14
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:13
 msgid ""
-"The first thing to remember about arrays is that their indices begin at 0. "
-"So, if there is 3 cells, their indices will be 0, 1 and 2. There would not "
-"be any cell numbered 3."
+"Remember that indices begin at 0 and not at 1. So, if there is 3 cells, "
+"their indices will be 0, 1 and 2. There would not be any cell numbered 3."
 msgstr ""
-"La première chose dont il faut se souvenir à propos des tableaux est que "
-"leurs\n"
-"indices sont numérotés à partir de 0. Donc, si vous avez 3 cases, leurs "
-"indices\n"
-"seront 0, 1 et 2. Il n'y aura pas de case numérotée 3."
+"N'oubliez pas que les cases sont sont numérotées à partir de 0. Donc, si "
+"vous avez 3 cases, leurs indices seront 0, 1 et 2. Il n'y aura pas de case "
+"numérotée 3."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:18
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:16
 msgid ""
-"Then, remember that the amount of cells in an array can be retrieved using "
+"Remember also that the amount of cells in an array can be retrieved using "
 "the <code>length</code> attribute. So, if your array is called <code>tab</"
 "code>, its size can be retrieved as <code>tab.length</code>.  Note that "
 "there is no () after <code>length</code>. An attribute is a sort of variable "
@@ -11898,12 +12585,32 @@ msgstr ""
 "variable embarquée dans un autre objet (ici, le tableau)."
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:24
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:21
 msgid ""
 "So, the last value of an array is given by <code>tab[tab.length - 1]</code>."
 msgstr ""
-"Donc, la dernière valeur d'un tableau est donnée par <code>tab[tab.length -1]"
-"</code>."
+"Donc, la dernière valeur d'un tableau est donnée par <code>tab[tab.length "
+"-1]</code>."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:23
+msgid ""
+"Remember also that the amount of cells in an array can be retrieved with the "
+"<code>len()</code> function. So, if your array is called <code>tab</code>, "
+"its size can be retrieved as <code>len(tab)</code>."
+msgstr ""
+"Ensuite, souvenez vous que le nombre de cases d'un tableau peut être "
+"retrouvé\n"
+"grâce à la fonction <code>len()</code>. Donc, si votre tableau s'appelle\n"
+"<code>tableau</code>, sa taille sera <code>len(tableau)</code>."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:27
+msgid ""
+"So, the last value of an array is given by <code>tab[ len(tab) - 1]</code>."
+msgstr ""
+"Donc, la dernière valeur d'un tableau est donnée par <code>tab[ len(tab) "
+"-1]</code>."
 
 #. type: Content of: <h1>
 #: src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.html:1
@@ -11913,27 +12620,23 @@ msgstr "Indice de la valeur maximale"
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.html:3
 msgid ""
-"In this exercise, you must compute the indice of the tab cell containing the "
+"In this exercise, you must compute the index of the tab cell containing the "
 "biggest value."
 msgstr ""
-"Dans cet exercice, vous devez calculer l'indice de la case contenant la "
-"plus\n"
+"Dans cet exercice, vous devez calculer l'indice de la case contenant la plus "
 "grande valeur du tableau."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.html:5
 msgid ""
-"For that, fill the <code>indexOfMaximum(int[] tab)</code> method. Its "
-"parameter is the array to explore. Should the array contain the searched "
-"value several times, you should return the indice of the first occurrence."
+"For that, fill the <code>indexOfMaximum()</code> method. Its parameter is "
+"the array to explore. Should the array contain the searched value several "
+"times, you should return the index of the first occurrence."
 msgstr ""
-"Pour cela, remplissez la méthode <code>indexOfMaximum(int[] tab)</code> dont "
-"le\n"
-"paramètre est le tableau à explorer. Si jamais la plus grande des valeurs "
-"du\n"
+"Pour cela, remplissez la méthode <code>indexOfMaximum()</code> dont le "
+"paramètre est le tableau à explorer. Si jamais la plus grande des valeurs du "
 "tableau est répétée plusieurs fois, votre méthode doit renvoyer la position "
-"de\n"
-"la première occurence."
+"de la première occurence."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.html:9
@@ -11969,15 +12672,13 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/welcome/array/averagevalue/AverageValue.html:6
 msgid ""
-"You have to fill the body of the method <code>average(int[] tab)</code> "
-"which takes as parameter the array of integers of which it computes and "
-"returns the average value. Please note that the return type of the method "
-"has type <code>int</code>."
+"You have to fill the body of the method <code>average()</code> which takes "
+"as parameter the array of integers of which it computes and returns the "
+"average value. Please note that this method must return an integer."
 msgstr ""
-"Vous devez donc remplir le corps de la méthode <code>average(int[] tab)</"
-"code> qui prend en paramètre le tableau, et qui retourne en résultat la "
-"valeur moyenne. Notez bien que le résultat de cette méthode est de type "
-"<code>int</code>"
+"Vous devez donc remplir le corps de la méthode <code>average()</code> qui "
+"prend en paramètre le tableau, et qui retourne en résultat la valeur "
+"moyenne. Notez bien que cette méthode doit renvoyer un entier."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/averagevalue/AverageValue.html:8
@@ -11985,17 +12686,33 @@ msgid ""
 "To compute the average value of an integer, it is necessary to traverse the "
 "whole array and to compute the sum of all its values (so you will need a "
 "variable to store this temporary result), then you have to divide this sum "
-"by the size of the array. In Java, you can get the size of an array "
-"<code>myarray</code> by consulting its <code>length</code> attribute (in "
-"other words, <code>myarray.length</code>)."
+"by the size of the array."
 msgstr ""
 "Pour calculer la valeur moyenne d'un tableau, il faut parcourir l'ensemble "
 "des valeurs du tableau, en faire la somme (vous aurez donc besoin d'une "
 "variable pour conserver le résultat intermédiaire), puis diviser cette somme "
-"par le nombre de valeur contenu dans le tableau. On vous rappelle que vous "
-"pouvez obtenir la taille d'un tableau <code>montableau</code> en consultant "
-"la valeur de l'attribut <code>length</code> de ce tableau (autrement dit "
-"<code>montableau.length</code>)."
+"par le nombre de valeur contenu dans le tableau."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/averagevalue/AverageValue.html:10
+msgid ""
+"In Java, you can get the size of an array <code>myarray</code> by consulting "
+"its <code>length</code> attribute (in other words, <code>myarray.length</"
+"code>). Notice that there is no parenthesis after <code>length</code>."
+msgstr ""
+"En Java, vous pouvez retrouver la taille d'un tableau <code>monTableau</"
+"code> en consultant son attribut <code>length</code> (autrement dit, "
+"<code>monTableau.length</code>). Notez qu'il n'y a pas de parenthèses après "
+"<code>length</code>."
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/averagevalue/AverageValue.html:15
+msgid ""
+"In python, retrieving the size of an array <code>myarray</code> is as easy "
+"as calling <code>len(myarray)</code>."
+msgstr ""
+"En python, retrouver la taille d'un tableau est aussi simple qu'appeller "
+"<code>len(monTableau)</code>."
 
 #. type: Content of: <h1>
 #: src/lessons/welcome/array/maxvalue/MaxValue.html:1
@@ -12006,13 +12723,12 @@ msgstr "Valeur maximale"
 #: src/lessons/welcome/array/maxvalue/MaxValue.html:3
 msgid ""
 "In this exercise, you must compute the maximal value contained in an array.  "
-"For that, fill the <code>maximum(int[] tab)</code> method, which parameter "
-"is the array to explore."
+"For that, fill the <code>maximum()</code> method, which parameter is the "
+"array to explore."
 msgstr ""
 "Dans cet exercice, vous devez retrouver le maximum des valeurs stockées dans "
-"un\n"
-"tableau. Pour cela, remplissez le corps de la méthode <code>maximum(int[]\n"
-"tab)</code>, dont le paramètre est le tableau à explorer."
+"un tableau. Pour cela, remplissez le corps de la méthode <code>maximum()</"
+"code>, dont le paramètre est le tableau à explorer."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/maxvalue/MaxValue.html:7
@@ -12020,20 +12736,16 @@ msgid ""
 "To compute this value, sweep over the whole parameter. For each value, if "
 "it's bigger than the biggest value you saw so far, you must save this value "
 "somewhere to remember it afterward. You thus need an extra variable, which "
-"can be initialized to the value of the first array cell. Another possibility "
-"is to initialize it to the smallest integer that Java knows about (which can "
-"be retrieved through <code>Integer.MIN_VALUE</code>)."
+"can be initialized to the value of the first array cell."
 msgstr ""
 "Pour résoudre cet exercice, parcourez le tableau. Pour chaque case, si sa\n"
 "valeur est plus grande que la plus grande des valeurs que vous avez "
 "rencontré\n"
 "jusque là, sauvegardez cette nouvelle championne pour retrouver sa valeur "
 "plus\n"
-"tard. Il vous faut donc une nouvelle variable; la valeur initiale de la\n"
-"championne pourrait être la valeur rangée dans la première case. Une autre\n"
-"possibilité est d'utiliser pour cela la plus petite valeur entière connue "
-"de\n"
-"Java (qui s'écrit <code>Integer.MIN_VALUE</code>)."
+"tard. Il vous faut donc une nouvelle variable, dont la valeur initiale peut "
+"être\n"
+"la valeur de la première case du tableau."
 
 #. type: Content of: <h1>
 #: src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.html:1
@@ -12045,17 +12757,15 @@ msgstr "Occurrences d'une valeur"
 msgid ""
 "In this exercise, you must compute the amount of occurrences of a given "
 "value in an array (that is, the amount of time that this value appears in "
-"the array). For that, fill the <code>occurrences(int[] tab, int lookingFor)</"
-"code> method, which returns the number of occurrence of <code>lookingFor</"
-"code> in <code>tab</code>."
+"the array). For that, fill the <code>occurrences()</code> method, which "
+"returns the number of occurrence of <code>lookingFor</code> in <code>tab</"
+"code>."
 msgstr ""
 "Dans cet exercice, il vous faut calculer le nombre d'occurrences d'une "
-"valeur\n"
-"donnée, c'est à dire le nombre de fois que cette valeur apparaît dans le\n"
-"tableau. Pour cela, remplissez le corps de la méthode <code>occurrences(int"
-"[]\n"
-"tab, int lookingFor)</code>, qui retourne le nombre d'occurrences de\n"
-"<code>lookingFor</code> dans <code>tab</code>."
+"valeur donnée, c'est à dire le nombre de fois que cette valeur apparaît dans "
+"le tableau. Pour cela, remplissez le corps de la méthode "
+"<code>occurrences()</code>, qui retourne le nombre d'occurrences de la "
+"valeur <code>lookingFor</code> dans le tableau <code>tab</code>."
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.html:8
@@ -12070,741 +12780,1875 @@ msgstr ""
 "donc un paramètre supplémentaire pour cela."
 
 #. type: Content of: <h1>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:1
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:1
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:1
+#: src/lessons/welcome/array/array123/Array123.html:1
+msgid "Array123"
+msgstr "Tableau123"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/array123/Array123.html:2
+msgid ""
+"Given an array of integers, return true if .. 1, 2, 3, .. appears in the "
+"array somewhere."
+msgstr ""
+"Soit un tableau d'entiers, renvoyez vrai si .. 1, 2, 3, .. apparaissent "
+"quelquepart dans le tableau."
+
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/array667/Array667.html:1
+msgid "Array667"
+msgstr "Tableau667"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/array667/Array667.html:2
+msgid ""
+"Given an array of integers, return the number of times that two 6's are next "
+"to each other in the array. Also count instances where the second \"6\" is "
+"actually a 7."
+msgstr ""
+"Soit un tableau d'entiers, renvoyez le nombre de fois que deux 6 sont l'un à "
+"la suite de l'autre dans le tableau. Comptez également le nombre de fois où "
+"le deuxième \"6\" est en fait un 7."
+
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/arraycount9/ArrayCount9.html:1
+msgid "ArrayCount9"
+msgstr "Comptage de 9"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/arraycount9/ArrayCount9.html:2
+msgid "Given an array of integers, return the number of 9's in the array."
+msgstr "Soit un tableau d'entiers, renvoyez le nombre de 9 dans ce tableau."
+
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:1
+msgid "ArrayFront9"
+msgstr "Tableau commençant par 9"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:2
+msgid ""
+"Given an array of integers, return true if one of the first 4 elements in "
+"the array is a 9. The array length may be less than 4."
+msgstr ""
+"Soit un tableau d'entiers, renvoyez vrai si l'un des 4 premiers éléments "
+"dans ce tableau est un 9. Le tableau peut contenir moins de 4 éléments."
+
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/notriples/NoTriples.html:1
+msgid "NoTriples"
+msgstr "Pas de triplet"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/notriples/NoTriples.html:2
+msgid ""
+"Given an array of integers, we'll say that a triple is a value appearing 3 "
+"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 "
+"pas de triplet."
+
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/has271/Has271.html:1
+msgid "Has271"
+msgstr "Contient 271"
+
+#. type: Content of: outside any tag (error?)
+#: 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.  "
+"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."
+
+#. type: Content of: <h1>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:1
 msgid "PancakeWorld"
 msgstr "Monde des crêpes"
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:3
-msgid "Functions provided :"
-msgstr "Fonctions fournies :"
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:3
+msgid "This universe is very simple, with only five functions provided."
+msgstr "Cet univers est très simple, avec seulement cinq fonctions fournies."
 
-#. type: Content of: <div><p><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:5
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:11
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:12
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:5
 #, no-wrap
 msgid "int getStackSize()"
 msgstr "int getStackSize()"
 
-#. type: Content of: <div><p>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:7
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:13
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:14
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:6
+#, no-wrap
+msgid "getStackSize()"
+msgstr "getStackSize()"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:7
 msgid ""
-"Returns the size of the stack, in other words the amount of pancakes it "
-"contains."
+"Returns the size of the stack, that is the amount of pancakes it contains."
 msgstr ""
-"Renvoie la taille du tas de crêpes, en d'autres mots, le nombre de crêpes "
-"qui le compose."
+"Renvoie la taille du tas de crêpes, c'est à dire le nombre de crêpes qui le "
+"compose."
 
-#. type: Content of: <div><p><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:9
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:15
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:16
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:9
 #, no-wrap
-msgid "int getPancakeRadius(int pancakeNumber)"
-msgstr "int getPancakeRadius(int pancakeNumber)"
+msgid "int getPancakeRadius(int rank)"
+msgstr "int getPancakeRadius(int rang)"
 
-#. type: Content of: <div><p>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:11
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:18
-msgid "Returns the radius of the pancake you gave in argument."
-msgstr "Renvoie le rayon de la crêpe donnée en argument."
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:10
+#, no-wrap
+msgid "getPancakeRadius(rank)"
+msgstr "getPancakeRadius(rang)"
 
-#. type: Content of: <div><p><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:13
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:19
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:11
+msgid ""
+"Returns the radius of the pancake passed as argument, with the rank of the "
+"top-most pancake being 0."
+msgstr ""
+"Renvoie le rayon de la crêpe passée en argument, sachant que le rang de la "
+"crêpe du haut est 0."
+
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:13
 #, no-wrap
-msgid "boolean isPancakeUpsideDown(int pancakeNumber)"
-msgstr "boolean isPancakeUpsideDown(int pancakeNumber)"
+msgid "boolean isPancakeUpsideDown(int rank)"
+msgstr "boolean isPancakeUpsideDown(int rang)"
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:15
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:14
+#, no-wrap
+msgid "isPancakeUpsideDown(rank)"
+msgstr "isPancakeUpsideDown(rang)"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:15
 msgid ""
-"Returns true if the burned side of the pancake you gave in argument is up, "
-"false if not."
+"Returns whether the pancake passed as argument upside-down, that is, if its "
+"burned side is on top. As usual, the top-most pancake is of rank 0."
 msgstr ""
-"Renvoie vrai si le côté brûlé de la crêpe passée en argument est vers le "
-"haut, faux sinon."
+"Renvoie ssi la crêpe passée en paramètre (la crêpe du haut étant de rang 0) "
+"est à l'envers, c'est-à-dire si sa face brulée est en haut."
+
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:17
+#, no-wrap
+msgid "void flip(int amount)"
+msgstr "void flip(int quantité)"
 
-#. type: Content of: <div><p><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:17
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:23
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:20
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:18
 #, no-wrap
-msgid "void flip(int numberOfPancakes)"
-msgstr "void flip(int numberOfPancakes)"
+msgid "flip(amount)"
+msgstr "flip(quantité)"
 
-#. type: Content of: <div><p>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:19
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:25
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:22
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:19
 msgid ""
-"Flips the <code>numberOfPancakes</code> first pancakes composing the stack, "
-"from the top of it."
+"Flips the <code>amount</code> first pancakes composing the stack, from the "
+"top of it."
 msgstr ""
-"Retourne les <code>numberOfPancakes</code> premières crêpes de la pile, en "
-"partant du sommet de celle-ci."
+"Retourne les <code>quantité</code> premières crêpes de la pile, en partant "
+"du sommet de celle-ci."
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:21
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:21
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:34
 #, no-wrap
 msgid "boolean isSorted()"
 msgstr "boolean isSorted()"
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:23
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:22
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:35
+#, no-wrap
+msgid "isSorted()"
+msgstr "isSorted()"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:23
+msgid "Returns whether the pancake stack is correctly sorted."
+msgstr "Renvoie si la pile de crêpes est correctement triée."
+
+#. type: Content of: <h1>
+#: src/lessons/sort/pancake/Main.html:1
+#: src/lessons/sort/pancake/BasicPancake.html:1
+msgid "Pancake Sorting"
+msgstr "Trier des crêpes"
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:3
 msgid ""
-"Tells if the stack of pancakes is correctly sorted according to the control "
-"freak pancake seller"
+"This activity is inspired by a problem first introduced in 1975 by Harry "
+"Dweighter in the American Mathematical Monthly. The question is not only to "
+"sort the pancakes, but to determine <code>f(n)</code> the <i>minimal</i> "
+"amount of flips mandated to sort any stack of size <code>n</code>."
 msgstr ""
-"Indique si le tas de crêpes est trié correctement au sens du vendeur de "
-"crêpe psychorigide."
+"Cette activité est inspirée d'un problème introduit pour la première fois en "
+"1975 par Harry Dweighter dans le journal de mathématique «American "
+"Mathematical Monthly». La question n'est pas tant de trier les crêpes que de "
+"déterminer <code>f(n)</code>, le nombre <i>minimal</i> de retournements "
+"nécessaires pour trier n'importe quelle pile de taille <code>n</code>. "
 
-#. type: Content of: <h1>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:1
-#: src/lessons/smn/baseball/easy/BaseballGame.html:1
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:1
-msgid "Baseball"
-msgstr "Baseball"
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:7
+msgid ""
+"This problem is now famous because Bill Gates authored (with C. "
+"Papadimitriou) his only scientific publication in 1979 on this topic, "
+"providing a faster algorithm and proving that <code>17n/16 ≤ f(n) ≤ (5n"
+"+5)/3</code>.  This was the only publication of Bill Gates before he "
+"invented Windows and became rich."
+msgstr ""
+"Ce problème est maintenant célèbre car Bill Gates a publié son seul article "
+"scientifique sur ce sujet (avec C. Papadimitriou). Ils ont proposé un "
+"algorithme plus rapide et démontré ainsi que <code>17n/16 ≤ f(n) ≤ (5n+5)</"
+"code>. Ce fut la seule publication de Bill Gates avant qu'il n'invente "
+"Windows et devienne riche. "
 
 #. type: Content of: <p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:3
+#: src/lessons/sort/pancake/Main.html:11
 msgid ""
-"The color of a base is given by its index.  The hole has a color of -1.  The "
-"base which has only one player on the field has <i>getAmountOfBases()-1</i> "
-"as index"
+"Then, David X. Cohen, the inventor of the Futurama comics with many "
+"mathematical references, introduced the variant with burnt pancakes and "
+"studied its complexity with Manuel Blum in 1993."
 msgstr ""
-"La couleur d'un base est donnée par son index.\n"
-"Le trou a -1 comme couleur.\n"
-"La base qui a un seul joueur sur le terrain a <i>getAmountOfBases()-1</i> "
-"comme index"
+"Par la suite, David X. Cohen, l'inventeur du dessin animé Futurama aux "
+"nombreuses références mathématiques, introduit en 1993 la variante des "
+"crêpes brulées et étudie sa complexité avec Manuel Blum."
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:10
-msgid "<u>Functions provided:</u>"
-msgstr "<u>Fonctions fournies :</u>"
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:14
+msgid ""
+"An article of 2012 (by L. Bulteau, G. Fertin and I. Rusu) proved that "
+"determining the minimal amount of flips to sort the stack is a NP-complete "
+"problem. Naturally, the stack sorting problem is not NP-complete since it "
+"can be solved in 2n-3 steps with the naive algorithm and (5n+5)/3 steps with "
+"the Gates algorithm.  That's determining the minimal amount of steps that is "
+"NP."
+msgstr ""
+"Un article de 2013 (par L. Bulteau, G. Fertin and I. Rusu) a prouvé que ce "
+"problème est NP-Complet, c'est à dire qu'il n'existe pas d'algorithme "
+"efficace pour déterminer le nombre minimal de retournements pour toute "
+"taille de pile. Naturellement, le problème du tri de la pile n'est pas NP-"
+"complet en lui-même puisqu'on peut le résoudre en 2n-3 étapes avec "
+"l'algorithme naïf et (5n+5)/3 étapes avec l'algorithme de Gates. C'est la "
+"détermination du nombre minimal de coups qui est NP."
 
-#. type: Content of: <p><div><p><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:12
-#: src/lessons/smn/baseball/easy/BaseballGame.html:25
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:39
-#, no-wrap
-msgid "void move(int baseSrc, int playerSrc)"
-msgstr "void move(int baseSrc, int playerSrc)"
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:19
+msgid "Further information can be found on the wikipedia page, as usual."
+msgstr ""
+"Pour plus d'information, référez vous à la page anglophone de wikipedia "
+"(http://en.wikipedia.org/wiki/Pancake_sorting) ou à cette page, très bien "
+"faite: http://eljjdx.canalblog.com/archives/2013/02/03/26309722.html"
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:14
-#: src/lessons/smn/baseball/easy/BaseballGame.html:27
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:41
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:22
 msgid ""
-"Move the player on position <code>playerLocation</code> from the base "
-"<code>baseSrc</code> to the hole."
+"This activity is also integrated to CSIRL (my repository of <i>free</i> "
+"unplugged activities to introduce computer science, available at http://www."
+"loria.fr/~quinson/Mediation/SMN/), and it may be interesting to run the "
+"unplugged activities before implementing these algorithms in JLM."
 msgstr ""
-"Déplace le joueur de la position <code>playerLocation</code> de la base "
-"<code>baseSrc</code> au trou."
+"Cette activité est également intégrée à SMN (mon dépot d'activités "
+"débranchées <i>libres</i> pour introduire la science informatique, "
+"disponible à l'adresse http://www.loria.fr/~quinson/Mediation/SMN/), et il "
+"peut être intéressant de faire les activités débranchées avant d'implémenter "
+"ces algorithmes dans JLM."
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:16
-#, no-wrap
-msgid " int getPlayerColor(int baseIndex, int playerLocation) "
-msgstr "int getPlayerColor(int baseIndex, int playerLocation) "
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/Main.html:33
+msgid "A temporal view similar to the sorting universe could be helpful"
+msgstr ""
+"Une vue temporelle comme celle de l'univers des tris pourraît être pratique."
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:18
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/Main.html:34
 msgid ""
-"Return the color of the player on position <code>playerLocation</code> ( 0 "
-"or 1 ) from the base <code>baseIndex</code>."
+"Other exercises, for example on the Cohen's algorithm, or on the other ones."
 msgstr ""
-"Renvoie la couleur du joueur de la position <code>playerLocation</code> ( 0 "
-"ou 1 ) de la base <code>baseIndex</code>."
+"D'autres exercices, par exemple sur l'algorithme de Cohen ou sur d'autres."
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:20
-#, no-wrap
-msgid " int getHoleBase() "
-msgstr "int getHoleBase()"
+#. type: Content of: <h3>
+#: src/lessons/sort/pancake/short_desc.html:1
+msgid "The pancake problem"
+msgstr "Le crépier psychorigide"
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/short_desc.html:3
+msgid "Help the poor psychorigid pancakes' chef to sort its pancake stack!"
+msgstr "Aidez le pauvre crépier psychorigide à trier sa pile de crêpes !"
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/short_desc.html:5
+msgid ""
+"This funny problem leads to algorithms that are somewhat more challenging to "
+"implement. You are supposed to master the bases of programming and some "
+"sorting algorithms to take this lesson."
+msgstr ""
+"Ce problème amusant débouche sur des algorithmes un peu plus compliqués à "
+"implémenter. Vous devez maîtriser les bases de la programmation ainsi que "
+"quelques algorithmes de tri avant de tenter cette leçon."
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/BasicPancake.html:3
+msgid ""
+"The pancake sorting problem this is a simple puzzle where you have a set of "
+"pancakes, each of differing size. The chef cooking the pancake is a bit "
+"psychorigid: he hates when the pancakes are not correctly sorted on the "
+"plate. He loves when they are correctly ordered, with the small ones over "
+"the larger ones. As every pancake maker, he masters the pancake flipping "
+"with his spatula. He can flip the pancake on top of the stack, or even "
+"several pancakes at once. The thing is that he has only one plate and the "
+"table is too dirty to place pancakes on it, even temporary. The only allowed "
+"operation is to flip some pancakes that are on top of the stack."
+msgstr ""
+"Le problème du tri des crêpes est un puzzle simple où vous avez une pile de\n"
+"crêpes, toutes de taille différente. Le crêpier étant légèrement "
+"psychorigide,\n"
+"il déteste quand ses crêpes ne sont pas bien ordonnées dans l'assiette. Il "
+"ne se\n"
+"sent bien que quand elles sont bien rangées, avec les petites au dessus des\n"
+"grandes. Comme tous les crêpiers, il est passé maître dans l'art du "
+"retournement\n"
+"de crêpes à la spatule. Il peut retourner une crêpe au sommet de la pile, "
+"ou\n"
+"même plusieurs à la fois. Le truc est qu'il n'a qu'une seule assiette et que "
+"la\n"
+"table est trop sale pour poser des crêpes dessus, même temporairement. La "
+"seule\n"
+"opération autorisée est alors de retourner un certain nombre de crêpes au "
+"sommet\n"
+"de la pile."
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:22
-#: src/lessons/smn/baseball/easy/BaseballGame.html:36
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:50
-msgid "Return the index of the base where the hole is located"
-msgstr "Renvoie l'index de la base où se trouve le trou"
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/BasicPancake.html:12
+msgid ""
+"Your work is to help this poor guy sorting his stack by flipping the "
+"pancakes. Each pancake is defined by its radius and rank within the stack, "
+"where the bottom pancake is at rank 0, and the one above at rank 1."
+msgstr ""
+"Vous devez aider ce pauvre homme à trier sa pile en retournant des\n"
+"crêpes. Chaque crêpe est définie par son rayon et son rang dans la pile. La "
+"pile\n"
+"la plus basse est de rang 0, et celle placée au dessus d'elle est de rang 1."
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:24
-#, no-wrap
-msgid " int getHolePositionInBase()"
-msgstr "int getHolePositionInBase()"
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/BasicPancake.html:16
+msgid ""
+"Note that you can play physically with pieces of paper or wood at first to "
+"get the grasp on this problem. This is even one of the activities that I use "
+"in my CS-IRL (computer science in real life) project to introduce the "
+"concept of algorithm to absolute beginners that wonder about our science. "
+"More information at http://www.loria.fr/~quinson/Mediation/SMN/ (in French)."
+msgstr ""
+"Il est conseillé de commencer par jouer physiquement avec des bouts de "
+"papier ou\n"
+"de carton pour bien comprendre le problème. C'est même l'une des activités "
+"que\n"
+"j'utilise dans mon projet SMN (Sciences Manuelles du Numérique) pour "
+"introduire\n"
+"le concept d'algorithme aux débutants curieux de notre science. Pour plus\n"
+"d'information, allez visiter le site du projet: http://www.loria.fr/~quinson/"
+"Mediation/SMN/ "
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:26
-#: src/lessons/smn/baseball/easy/BaseballGame.html:40
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:54
-msgid "Return the player's position in the base where the hole is located"
-msgstr "Renvoie la position de joueur vide dans la base où se situe le trou"
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:22
+msgid "I don't get it. I need some help."
+msgstr "Je suis perdu, j'ai besoin d'aide."
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:28
-#, no-wrap
-msgid " boolean isBaseSorted( int baseIndex)"
-msgstr "boolean isBaseSorted( int baseIndex )"
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:23
+msgid ""
+"You should try to first move the largest pancake to the bottom, and then the "
+"largest but one pancake on top of it, and then the one just smaller on top, "
+"and so on."
+msgstr ""
+"Vous devez tout d'abord parvenir à placer la plus grande crêpe en bas de la "
+"pile et ensuite placer celle juste plus petite au dessus, puis celle plus "
+"petite et ainsi de suite."
+
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:27
+msgid "The first tip was not enough. I need another one."
+msgstr "Ce premier indice n'était pas suffisant, j'ai besoin de plus d'aide."
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:30
-#: src/lessons/smn/baseball/easy/BaseballGame.html:44
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:58
-msgid "Return TRUE if all players of the base <code>baseSrc</code> are home"
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:28
+msgid ""
+"So first, you need to move the largest pancake at the bottom of the stack."
 msgstr ""
-"Renvoie VRAI si tous les joueurs sur la base <code>baseSrc</code> sont sur "
-"la bonne base."
+"Il vous faut donc amener la plus grande des crêpes tout en bas de la pile."
 
-#. type: Content of: <p><div><p><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:32
-#: src/lessons/smn/baseball/easy/BaseballGame.html:46
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:60
-#, no-wrap
-msgid "int getAmountOfBases()"
-msgstr "int getAmountOfBases()"
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:29
+msgid ""
+"Can you imagine a situation in which you can easily bring this damn large "
+"pancake to the bottom?"
+msgstr ""
+"Est ce que vous pouvez imaginer une situation où il est facile d'emener "
+"cette satanée grande crêpe tout en bas ?"
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:34
-#: src/lessons/smn/baseball/easy/BaseballGame.html:48
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:62
-msgid "Return the amount of bases in the field."
-msgstr "Renvoie le nombre de bases dans le terrain"
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:30
+msgid "How could you reach this situation from the current one?"
+msgstr ""
+"Et comment pourriez vous parvenir à cette situation à partir de la situation "
+"courante?"
 
-#. type: Content of: <p><div><p><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:36
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:65
-#, no-wrap
-msgid "int getLocationsAmount()"
-msgstr "int getLocationsAmount()"
+#. type: Content of: <h1>
+#: src/lessons/sort/pancake/BurnedPancake.html:1
+msgid "Burned Pancakes"
+msgstr "Crêpes brulées"
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:38
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:67
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/BurnedPancake.html:3
 msgid ""
-"Return the amount of players locations available on each base of the field"
+"Hard blow for the chef! The pancakes got burnt on one side! There is no way "
+"he can deliver a stack of pancakes with visibly burnt pancakes! You've got "
+"to help him ensuring that no pancake is upside-down while sorting his stack."
 msgstr ""
-"Renvoie le nombre de positions de joueur disponible sur chaque base du "
-"terrain"
+"Coup dur pour le crèpier! Les crêpes ont brulé sur une face! Il est "
+"strictement impossible qu'il serve une pile de crêpes où l'on voit la face "
+"brulée! Vous devez absolument l'aider à s'assurer qu'aucune face visible ne "
+"soit brulée tandis qu'il trie sa pile."
 
 #. type: Content of: <h1>
-#: src/lessons/smn/Main.html:1
-msgid "Computer Science in Real Life"
-msgstr "Sciences Manuelles du Numérique"
+#: src/lessons/sort/pancake/GatesPancake.html:1
+msgid "Faster Pancake Sorting"
+msgstr "Tri rapide de crêpes"
 
 #. type: Content of: <p>
-#: src/lessons/smn/Main.html:3
-msgid "Few activities developped for Computer Science in Real Life"
+#: src/lessons/sort/pancake/GatesPancake.html:3
+msgid ""
+"Unlike others sorting problem, the expensive operation is not the comparison "
+"of values, but the flipping of pancakes. In this exercise, we will explore "
+"another algorithm that attempt to reduce the amount of stack flipping. The "
+"funny side is that this algorithm was first introduced by Bill Gates, before "
+"invented Windows."
 msgstr ""
-"Différentes activités développées pour les Sciences Manuelles du Numérique"
+"Contrairement aux problèmes classiques de tri, l'opération coûteuse à "
+"économiser n'est pas la comparaison des valeurs, mais le retournement des "
+"crêpes. Dans cet exercice, nous allons explorer un autre algorithme "
+"permettant de réduire le nombre de retournements nécessaires pour trier la "
+"pile. Fait amusant, cet algorithme a été proposé pour la première fois par "
+"Bill Gates, avant qu'il n'invente Windows."
 
 #. type: Content of: <p>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:3
+#: src/lessons/sort/pancake/GatesPancake.html:8
 msgid ""
-"This world implements the control freak pancake seller problem, who wants "
-"his pancakes to be sorted on their plate from the biggest to the smallest, "
-"with the most burned face downside, so that we cannot see it."
+"The basic idea is to grow sequences of sorted pancakes, not necessarily "
+"starting from the bottom.  We say that a sequence of ordered pancakes "
+"constitute a <b>bloc</b> while a pancake that is not part of a bloc is said "
+"to be <b>free</b>. The algorithm then considers the topmost pancake (of "
+"radius <code>t</code>) and search for the <code>t+1</code> or <code>t-1</"
+"code> pancakes (the considered neighbor is noted <code>t+o</code>). Eight "
+"cases may happen:"
 msgstr ""
-"Ce monde implémente le problème du crêpier psychorigide, qui souhaite trier "
-"ses crêpes de la plus grande à la plus petite, et avec la face brûlée cachée "
-"( donc vers le bas, afin que l'on ne puisse pas la voir )."
+"L'idée de base est de faire grandir des séquences de crêpes triées, pas "
+"forcément en commençant du bas de la pile. On dira qu'un ensemble de crêpes "
+"dans l'ordre constitue un <b>block</b> tandis qu'une crêpe qui n'est pas "
+"dans un bloc est dite <b>libre</b>. L'algorithme considère la crêpe tout en "
+"haut de la pile, dont la taille est notée <code>t</code>, et cherche les "
+"deux crêpes de taille <code>t-1</code> et <code>t+1</code> (le voisin ainsi "
+"considéré est noté <code>t+o</code>). Huit cas sont possibles alors :"
 
-#. type: Content of: <p>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:5
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:6
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:15
 msgid ""
-"You are asked to resort a pancakes stack to make him happy. Since it is "
-"obviously forbidden to place a pancake on the dirty table, the only allowed "
-"action is to flip one or more pancakes on the top of the stack.  A pancake "
-"is defined by its radius and position on the stack, from the top to the "
-"bottom. These characteristics are positive integers."
+"<b>Case a</b>: Both <code>t</code> and <code>t+o</code> are free. They are "
+"then merged in one flip."
 msgstr ""
-"Votre mission si vous l'acceptez est de trier un tas de crêpe pour le rendre "
-"heureux.\n"
-"Puisque qu'il est évidemment interdit -- pour des questions d'hygiène -- de "
-"poser une crêpe sur la table, la seule action autorisée est de retourner une "
-"ou plusieures crêpes depuis le haut de la pile.\n"
-"Une crêpe est définie par son rayon et par sa position dans la pile, en "
-"partant du haut.\n"
-"Ces attributs sont des entiers positifs."
+"<b>Cas a</b>: <code>t</code> et <code>t+o</code> sont tous les deux libres. "
+"Ils sont alors fusionnés en un retournement."
 
-#. type: Content of: <div>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:9
-msgid "Only four functions are provided :"
-msgstr "Seulement quatre fonctions vous sont fournies :"
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:19
+msgid ""
+"<b>Case b</b>: <code>t</code> is free, and <code>t+o</code> is the first of "
+"a block. They are merged in one flip."
+msgstr ""
+"<b>Cas b</b>: <code>t</code> est libre, et <code>t+o</code> est le premier "
+"élément d'un bloc. Ils sont fusionnés en un bloc."
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:17
-msgid "Returns the radius of the pancake <code>pancakeNumber</code>."
-msgstr "Renvoie le rayon de la crêpe <code>pancakeNumber</code>."
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:24
+msgid ""
+"<b>Case c</b>: <code>t</code> is free but both <code>t-1</code> and <code>t"
+"+1</code> are the last elements of blocks.  Both blocs and <code>t</code> "
+"are merged all together in 4 flips.  Beware, if either <code>t-1</code> or "
+"<code>t+1</code> does not exist (because <code>t</code> is 0 or max), only "
+"two flips are mandated."
+msgstr ""
+"<b>Cas c</b>: <code>t</code> est libre, mais <code>t-1</code> et <code>t+1</"
+"code> sont tous les deux les derniers éléments de blocs. Ces deux blocs "
+"ainsi que <code>t</code> sont tous fusionnés en 4 retournements. Prenez "
+"garde, si <code>t-1</code> ou <code>t+1</code> n'existe pas (parce que "
+"<code>t</code> est 0 ou max), seulement deux de ces retournements sont "
+"nécessaires."
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:21
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:32
 msgid ""
-"Returns true if the burned side of the pancake <code>pancakeNumber</code> is "
-"up, false if not."
+"<b>Case d</b>: <code>t</code> is in a block but <code>t+o</code> is free. "
+"They are merged in one flip."
 msgstr ""
-"Renvoie vrai si le côté brûlé de la crêpe <code>pancakeNumber</code> est "
-"vers le haut, faux sinon."
+"<b>Cas d</b>: <code>t</code> est dans un bloc, mais <code>t+o</code> est "
+"libre. Ils sont fusionnés en un retournement."
 
-#. type: Content of: <p>
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:3
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:37
 msgid ""
-"This world implements the control freak pancake seller problem, who wants "
-"his pancakes to be sorted on their plate from the biggest to the smallest."
+"<b>Case e</b>: <code>t</code> is in a block and <code>t+o</code> is the "
+"first element of a block. They are merged in one flip."
 msgstr ""
-"Ce monde implémente le problème du crêpier psychorigide, qui souhaite trier "
-"ses crêpes de la plus grande à la plus petite."
+"<b>Cas e</b>: <code>t</code> est dans un bloc, et <code>t+o</code> est le "
+"premier élément d'un bloc. Ils sont fusionnés en un retournement."
 
-#. type: Content of: <div>
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:10
-msgid "Only three functions are provided :"
-msgstr "Seulement trois fonctions sont fournies :"
-
-#. type: Content of: <p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:3
-msgid ""
-"This world implements the baseball game, in which several players want to go "
-"back to their bases. The bases make a circle and have their own colors. "
-"There are two players for one base, except one, which has only one player in "
-"its team.  You are asked to make the players go on the bases which colors "
-"correspond to theirs. The only allowed move is for one of the two players "
-"standing on one of the two bases which are directly next to the base with "
-"only one player to move and fill the hole, leaving a new one on the base it "
-"just left."
-msgstr ""
-"Ce monde implémente le jeu du baseball multicolore, dans lequel plusieurs "
-"joueurs veulent retourner à leur base. Les bases sont dans une disposition "
-"circulaire et ont leur propre couleur. Il y a deux joueurs pour toutes les "
-"bases sauf une, qui ne dispose donc que d'un joueur dans son équipe. Il vous "
-"est demandé de déplacer les joueurs jusqu'à la base qui a la même couleur "
-"que la leur. Le seul mouvement autorisé est, pour l'un des deux joueurs "
-"présents sur l'une des deux bases située à côté de la base ayant un seul "
-"joueur de se déplacer et de remplir le trou, laissant un nouveau trou sur la "
-"base qu'il vient de quitter."
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:41
+msgid ""
+"<b>Case f</b>: <code>t</code> is in a block and <code>t+o</code> is the last "
+"element of another block.  They are merged in 3 flips as follows."
+msgstr ""
+"<b>Cas f</b>: <code>t</code> est dans un bloc, et <code>t+o</code> est le "
+"dernier élément d'un autre bloc. Ils sont fusionnés en trois retournements "
+"comme suit."
 
-#. type: Content of: <p><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:8
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:19
-msgid "Memento:"
-msgstr "Notes:"
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:45
+msgid ""
+"<b>Case g</b>: <code>t</code> is in a block of length k+1 (the last element "
+"is <code>t+ko</code>), <code>t+(k+1)o</code> is either free or the last "
+"element of another block. Both blocks are merged in 2 flips:"
+msgstr ""
+"<b>Cas g</b>: <code>t</code> est dans un bloc de taille k+1 (le dernier "
+"élément est <code>t+ko</code>), <code>t+(k+1)o</code> est soit libre soit le "
+"dernier élément d'un autre bloc. Les deux blocs sont fusionnés en deux "
+"retournements:"
 
-#. type: Content of: <p><p><ul><li>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:11
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:25
-msgid "The color of a base is given by its index."
-msgstr "La couleur d'une base est donnée par son index."
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:48
+msgid ""
+"<b>Case h</b>: <code>t</code> is in a block of length k+1 (the last element "
+"is <code>t+ko</code>), <code>t+(k+1)o</code> is the first element of another "
+"block (the difference with case g is that <code>t+(k+1)o</code> is now the "
+"<i>first</i> element of its block). Both blocks are merged in 2 flips:"
+msgstr ""
+"<b>Cas h</b>: <code>t</code> est dans un bloc de taille k+1 (le dernier "
+"élément est <code>t+ko</code>), <code>t+(k+1)o</code> est le premier élément "
+"d'un autre bloc (la différence avec le cas g est que <code>t+(k+1)o</code> "
+"est maintenant le <i>premier</i> élément de son bloc). Les deux blocs sont "
+"fusionnés en deux retournements:"
 
-#. type: Content of: <p><p><ul><li>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:14
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:28
-msgid "The hole has a color of -1."
-msgstr "Le trou a une couleur de -1."
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:54
+msgid ""
+"<b>Case i</b>: <code>t</code> is in a block of length <code>n</code> (this "
+"block contains all pancakes).  If <code>t</code> is not 1, the whole stack "
+"is fliped. The algorithm then stops."
+msgstr ""
+"<b>Cas i</b>: <code>t</code> est dans un bloc de taille <code>n</code>, qui "
+"contient donc toutes les crêpes. Si <code>t</code> n'est pas 1, toute la "
+"pile est retournée. Ensuite, l'algorithme s'arrête."
 
-#. type: Content of: <p><p><ul><li>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:17
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:31
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/GatesPancake.html:57
 msgid ""
-"The base which has only one player on the field has <i>getAmountOfBases()-1</"
-"i> as index"
+"Each iteration increases the size of the blocks, so the algorithm eventually "
+"halts in all cases. A finer analysis would show that it takes at most "
+"<code>(5n+5)/3</code> steps to sort the stack. That's better than the naïve "
+"algorithm, that requires 2n-3 steps."
 msgstr ""
-"La base qui a un seul joueur sur le terrain a <i>getAmountOfBases()-1</i> "
-"comme index"
+"Chaque itération augmente la taille des blocs, donc la terminaison de "
+"l'algorithme est certaine. Une analyse plus fine montre qu'il prend au plus "
+"<code>(5n+5)/3</code> étapes pour trier la pile. C'est mieux que "
+"l'algorithme naïf, qui nécessite <code>2n-3</code> étapes pour cela."
 
-#. type: Content of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:23
-msgid "There are six methods provided :"
-msgstr "Six méthodes vous sont fournies :"
+#. type: Content of: <h2>
+#: src/lessons/sort/pancake/GatesPancake.html:60
+msgid "Your turn"
+msgstr "À vous de jouer"
 
-#. type: Content of: <p><div><p><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:29
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:43
-#, no-wrap
-msgid "int getPlayerColor(int baseIndex, int playerLocation) "
-msgstr "int getPlayerColor(int baseIndex, int playerLocation) "
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/GatesPancake.html:61
+msgid ""
+"You now have almost enough information to implement this algorithm on your "
+"own. We just have to remove the last remaining ambiguities to ensure that "
+"you implement exactly the same algorithm that the correction. If several "
+"cases apply to your situation, then you should use the first given one. For "
+"example, if both cases a and b apply (e.g., with <code>t-1</code> on case "
+"<b>a</b> and <code>t+1</code> on case <b>b</b>), then you should apply the "
+"flips of case <b>a</b>. If a given case applies for both <code>t+1</code> "
+"and <code>t-1</code>, then you should apply it to <code>t+1</code>."
+msgstr ""
+"Vous avez maintenant quasi assez d'informations pour implémenter cet "
+"algorithme par vous-même. Il faut juste lever les dernières ambiguïtés pour "
+"que vous implémentiez exactement le même algorithme que la correction. Si "
+"plusieurs cas s'appliquent à la situation courante, appliquez le premier. "
+"Par exemple, si les cas a et b s'appliquent (avec <code>t-1</code> pour le "
+"cas a et <code>t+1</code> pour le cas b), vous devez appliquer les "
+"instructions du cas <b>a</b>. Si un cas donné s'applique à la fois pour "
+"<code>t+1</code> et <code>t-1</code>, appliquez le pour <code>t+1</code>."
 
-#. type: Content of: <p><div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:31
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:45
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/GatesPancake.html:67
 msgid ""
-"Return the color of the player on position <code>playerLocation</code> ( 0 "
-"or 1 ) from the base <code>baseIndex</code>.  The color -1 is the hole."
+"Note that it is somehow harder than the other exercises we did so far, so "
+"don't be surprised if you need more time to achieve this.  But do not give "
+"hope, you can do it!"
 msgstr ""
-"Renvoie la couleur du joueur à la position <code>playerLocation</code> ( 0 "
-"ou 1 ) de la base <code>baseIndex</code>.  La couleur -1 correspond au trou."
+"Cet exercice est plus difficile que ceux que nous avons fait jusque là, et "
+"il ne serait pas choquant que vous ayez besoin d'un peu plus de temps que "
+"les autres pour le résoudre. Mais n'abandonnez pas, vous pouvez le faire !"
 
-#. type: Content of: <p><div><p><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:34
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:48
-#, no-wrap
-msgid "int getHoleBase() "
-msgstr "int getHoleBase()"
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:70
+msgid "Well, I need some help to start."
+msgstr "Heu, j'ai besoin d'un peu d'aide pour commencer."
 
-#. type: Content of: <p><div><p><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:38
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:52
-#, no-wrap
-msgid "int getHolePositionInBase()"
-msgstr "int getHolePositionInBase()"
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:71
+msgid ""
+"First write some helper functions such as <code>isFirst()</code> or "
+"<code>isFree()</code>. This will simplify your main algorithm afterward, "
+"that can be written very similarly to the explication above with a bunch of "
+"if conditions. Factorizing code this way often helps making your code more "
+"readable."
+msgstr ""
+"Commencez par écrire des fonctions d'aide, comme <code>estLibre()</code> ou "
+"<code>estPremier()</code>. Cela simplifiera l'écriture de votre algorithme, "
+"qui peut être écrit sous une forme très similaire à l'énoncé si vous faites "
+"les bonnes fonctions d'aide. Factoriser ainsi votre code aide très souvent à "
+"améliorer la lisibilité du code."
 
-#. type: Content of: <p><div><p><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:42
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:56
-#, no-wrap
-msgid "boolean isBaseSorted( int baseIndex)"
-msgstr "boolean isBaseSorted( int baseIndex )"
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:78
+msgid "My code keeps failing and I don't know how to debug it."
+msgstr "Mon code ne fonctionne pas, et je ne sais pas comment le débugger"
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:53
-msgid "Show Tip 1 ( the methods's prototype)"
-msgstr "Montrer l'indice 1 ( le prototype des méthodes à utiliser)"
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:79
+msgid ""
+"To debug one world after the other and avoid that the messages of all worlds "
+"get intermixed, you can write your debug function only if the method "
+"<code>isSelected()</code> returns true. It will be so only for the entity "
+"that is currently selected in the graphical interface, that is probably the "
+"world you are currently debugging. This will help breaking the difficulty in "
+"parts by debugging the situation on after the other."
+msgstr ""
+"Pour débugger un monde après l'autre, il est préférable d'éviter que les "
+"affichages de tous les mondes se mélangent. Le plus simple pour cela est "
+"d'utiliser la méthode <code>isSelected()</code> qui ne renvoi vrai que si le "
+"monde courant est celui sélectionné dans l'interface. Cela aidera à réduire "
+"la complexité en résolvant les problèmes les uns après les autres."
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:54
-msgid "The prototypes of the methods you may use are the followings :"
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:85
+msgid ""
+"In particular, it may help to print textually the state of the world each "
+"time you enter the main loop."
+msgstr ""
+"En particulier, afficher l'état du monde sous forme textuelle à chaque fois "
+"que vous rentrez dans la boucle principale peut aider. "
+
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/Main.html:1
+msgid "The Rainbow Baseball Game"
+msgstr "Le jeu du baseball multicolore"
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/Main.html:3
+msgid ""
+"This activity is inspired from the orange game, from the \"Computer Science "
+"Unplugged\" activities repository.  It was however heavily since then, first "
+"for the CSIRL (my repository of <i>free</i> unplugged activities to "
+"introduce computer science, available at http://www.loria.fr/~quinson/"
+"Mediation/SMN/) and now for JLM."
 msgstr ""
-"Les prototypes des méthodes que vous pouvez utiliser sont les suivants :"
+"Cette activité est inspirée du jeu de l'orange dans le recueil d'activités "
+"«Computer Science Unplugged». Elle a cependant été profondément réarrangée "
+"depuis, d'abord pour SMN (mon recueil d'activités <i>libres</i> pour "
+"introduire la science informatique, disponible depuis http://www.loria.fr/"
+"~quinson/Mediation/SMN/), et maintenant pour JLM."
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:58
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/Main.html:7
 msgid ""
-"private void bringPlayerHome(int baseSrc, int playerSrc, int baseDst, int "
-"playerDst) throws InvalidMoveException"
+"In the literature, the generalized form of this problem is known as the "
+"pebble motion problem (the bases can be connected by any kind of graph, and "
+"the affinity of pebbles with bases may be different). Another variant of "
+"this problem is the well known 15-puzzle, with one player per base, and a "
+"two dimensional square grid. Much more information about these problems can "
+"be found on wikipedia, as usual."
 msgstr ""
-"private void bringPlayerHome(int baseSrc, int playerSrc, int baseDst, int "
-"playerDst) throws InvalidMoveException"
+"Dans la littérature scientifique, la forme généralisée de ce problème se "
+"nomme «le problème du déplacement des galets» (Pebble motion problem). Les "
+"bases peuvent être connectées par un graphe quelconque, et les affinités "
+"entre les galets et les bases peuvent être différentes. La plus connue des "
+"variantes de ce problème est le jeu du taquin, avec un seul joueur par base "
+"et une grille carrée à deux dimensions. On trouve énormément d'informations "
+"sur ces problèmes sur les pages wikipédia anglophones, comme d'habitude."
+
+#. type: Content of: <h3>
+#: src/lessons/sort/baseball/Main.html:12
+msgid ""
+"How do you know that the naive algorithm won't loop on that initial "
+"situation?"
+msgstr ""
+"Comment pouvez vous être sûr que l'algorithme naïf ne boucle pas sur cette "
+"situation initiale? "
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/Main.html:14
+msgid ""
+"Well, we simply tested all possible situations to see when this algorithm "
+"loops and when it finds the correct solution. We found that it works for all "
+"situations where no player is at home (there is 84 such situations for 4 "
+"bases, once you take the symmetries into account). It obviously works for "
+"some situations that do not respect this criteria (such as all situations it "
+"encounters from one of those 84 boards to the final state), but that's "
+"another story. Having such a criteria allows us to generate pseudo-random "
+"initial situations for the first exercise for which the algorithm we propose "
+"is guarenteed to work."
+msgstr ""
+"Et bien, nous avons testé toutes les situations initiales possibles pour "
+"étudier les cas où l'algorithme boucle et ceux où l'algorithme termine "
+"correctement. Nous avons trouvé qu'il fonctionne pour toutes les situations "
+"où aucun joueur ne se trouve dans sa base (il y a 84 situations de ce genre "
+"pour 4 bases, si on élimine les symétries). Bien entendu, l'algorithme "
+"fonctionne correctement pour de nombreuses situations ne respectant pas ce "
+"critère (telles que toutes les situations rencontrées quand on commence de "
+"l'une de ces 84 situations), mais c'est une autre histoire. Avoir un tel "
+"critère nous permet de générer des situations initiales pour ce premier "
+"exercice de manière pseudo-aléatoire tout en étant sûrs que l'algorithme "
+"proposé se comportera correctement."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/Main.html:21
+msgid ""
+"We also explored bigger instances of the problem, and unfortunately, we have "
+"no such criteria for them.  With 5 bases, the algorithm wrongly loops for 24 "
+"of the 1824 possible boards where no player is home (that's 1.31%).  With 6 "
+"bases, it fails on 1251 of the 58860 such boards (2.12%). With 7 bases, it "
+"fails for 84444 out of 2633940 (that's 3.2%). I am still looking for a "
+"criteria ensuring that the algorithm won't loop. If you discover one, please "
+"report it. Ideally, it would be simple to enforce manually so that we can "
+"use it during our unplugged activities."
+msgstr ""
+"Nous avons également exploré des instances plus grande de ce problème, et "
+"malheureusement, nous ne connaissons pas de critère sûr dans ce cas. Avec 5 "
+"bases, l'algorithme part en boucle infinie pour 24 des 1824 plateaux "
+"possibles où aucun joueur n'est à la maison (cela représente 1,31%). Avec 6 "
+"bases, il boucle pour 1251 des 58860 plateaux respectant ce critère (2,12%). "
+"Avec 7 bases, il boucle dans 84444 cas sur 2633940 (càd 3,2%). Nous "
+"cherchons encore un critère permettant de garantir que l'algorithme ne "
+"bouclera pas. Si vous en découvrez un, merci de nous l'indiquer. Ce serait "
+"encore mieux s'il était possible de vérifier le critère de tête afin que les "
+"animateurs puissent s'en servir pendant les activités débranchées."
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:60
+#. type: Content of: <ul><li>
+#: src/lessons/sort/baseball/Main.html:31
 msgid ""
-"Move the player in position <code>playerSrc</code> of the base "
-"<code>baseSrc</code> to the position <code>playerDst</code> from the base "
-"<code>baseDst</code>"
+"Other graphical representations could be proposed, such as a linear one (for "
+"the existing exercises) or other ones (such as a grid or a tree, if an "
+"exercise on this kind of graph proves interesting)."
 msgstr ""
-"Déplace le joueur de la position <code>playerLocation</code> de la base "
-"<code>baseSrc</code> à la position <code>playerDst</code> de la base "
-"<code>baseDst</code>."
+"D'autres représentations graphiques pourraient être proposées, comme une "
+"représentation linéaire (pour les exercices proposés) ou d'autres comme une "
+"grille ou un arbre, si un exercice sur ce type de graphe s'avère intéressant."
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:62
+#. type: Content of: <ul><li>
+#: src/lessons/sort/baseball/Main.html:33
 msgid ""
-"private int[] findNearestPlayer(int colorWanted, int firstBaseToSearch ) "
-"throws InvalidPositionException"
+"Other exercises on other algorithms on this variant, or on other variants "
+"such as the 15-puzzle."
 msgstr ""
-"private int[] findNearestPlayer(int colorWanted, int firstBaseToSearch ) "
-"throws InvalidPositionException"
+"D'autres exercices à propos d'autres algorithmes pour cette variante du "
+"problème, ou bien d'autres variantes comme le jeu du taquin."
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:64
+#. type: Content of: <h3>
+#: src/lessons/sort/baseball/short_desc.html:1
+msgid "Rainbow baseball"
+msgstr "Baseball multicolore"
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/short_desc.html:3
 msgid ""
-"Return the base's number and the position of the nearest player which "
-"has<code>colorWanted</code> as color. It begins the search at the base "
-"<code>firstBaseToSearch</code>"
+"This is another funny variation on the sorting problem, adapting the main "
+"sorting algorithms on an unusual context."
 msgstr ""
-"Renvoie l'index de la base et la position sur celle-ci du joueur le plus "
-"proche ayant <code>colorWanted</code> comme couleur. La recherche commence à "
-"la base d'index <code>firstBaseToSearch</code>"
+"Il s'agit d'un autre problème amusant autour des algorithmes de tri, "
+"adaptant les principaux algorithmes de tri à un contexte inhabituel."
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:66
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:1
+msgid "Rainbow Baseball"
+msgstr "Baseball multicolore"
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:2
 msgid ""
-"private void bringHole(int baseDst, int playerDst , int playerToProtect) "
-"throws InvalidMoveException"
+"The colors are represented by integers, between <code>0</code> and "
+"<code>amount of bases -1</code>.  The hole is represented by the special "
+"value <code>-1</code>.  The color of each base is its rank. So base <code>1</"
+"code> is of color <code>1</code>.  In the graphical interface, the base "
+"<code>0</code> is the dark blue one while the base <code>1</code> is the "
+"fuscia one."
 msgstr ""
-"private void bringHole(int baseDst, int playerDst , int playerToProtect) "
-"throws InvalidMoveException"
+"Les couleurs sont représentées comme des entiers, entre <code>0</code> et "
+"<code>nombre de bases - 1</code>. Le trou est représenté par la valeur "
+"spéciale <code>-1</code>. La couleur de chaque base est son rang, ce qui "
+"fait que la base <code>1</code> est de couleur <code>1</code>. Dans "
+"l'interface graphique, la base <code>0</code> est la bleue foncée tandis que "
+"la base <code>1</code> est celle fuscia."
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:68
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:8
 msgid ""
-"Bring the hole to the position <code>playerDst</code> from the base "
-"<code>baseDst</code> while protecting the position <code>playerToProtect</"
-"code> during the travel"
+"Once every players on the field are in their home base, the hole should be "
+"in the last base, that is of rank <code>getAmountOfBases()-1</code>."
 msgstr ""
-"Amène le trou à la position <code>playerDst</code> de la base <code>baseDst</"
-"code> tout en protégeant la position <code>playerToProtect</code> durant le "
-"trajet"
+"Une fois que tous les joueurs du terrain sont chez eux, le trou se trouve "
+"dans la dernière base, celle de rang <code>getAmountOfBases()-1</code>."
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:75
-msgid "Show Tip 2 (Pseudo-code of solve)"
-msgstr "Montrer l'indice 2 (le pseudo-code de la fonction solve)"
+#. type: Content of: <h2>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:10
+msgid "Functions to retrieve the world's dimensions"
+msgstr "Fonctions pour découvrir les dimensions du monde"
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:76
-msgid "The algorithm of the solve method is the following:"
-msgstr "L'algorithme de la méthode solve est le suivant :"
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:12
+#, no-wrap
+msgid "int getBasesAmount()"
+msgstr "int getBasesAmount()"
 
-#. type: Content of: <div><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:78
-#, no-wrap
-msgid ""
-"BEGIN\n"
-"\tcolorWanted <- getBaseColor(baseIndex)\n"
-"\tIF getPlayerColor(baseIndex, 0) != colorWanted \n"
-"\tTHEN\n"
-"\t\tIF getPlayerColor(baseIndex,1) == colorWanted\n"
-"\t\tTHEN\n"
-"\t\t\tbringHole(baseIndex, 0, 1)\n"
-"\t\t\tmove(baseIndex, 1)\n"
-"\t\tELSE\n"
-"\t\t\twantedPlayerLocation <- findNearestPlayer(colorWanted, baseIndex+1 )\n"
-"\t\t\tbringHole( wantedPlayerLocation[0]-1 , 0,wantedPlayerLocation[1] )\n"
-"\t\t\tbringPlayerHome(wantedPlayerLocation[0], wantedPlayerLocation[1], baseIndex,0)\n"
-"\t\tEND_IF\n"
-"\tEND_IF\n"
-"\tIF getPlayerColor(baseIndex, 1) != colorWanted \n"
-"\tTHEN\n"
-"\t\twantedPlayerLocation <- this.findNearestPlayer(colorWanted, baseIndex+1)\n"
-"\t\tbringHole( wantedPlayerLocation[0]-1 , 1 , wantedPlayerLocation[1] )\n"
-"\t\tbringPlayerHome( wantedPlayerLocation[0] , wantedPlayerLocation[1] , baseIndex , 1 )\n"
-"\tEND_IF\n"
-"END\n"
-msgstr ""
-"BEGIN\n"
-"\tcolorWanted <- getBaseColor(baseIndex)\n"
-"\tIF getPlayerColor(baseIndex, 0) != colorWanted \n"
-"\tTHEN\n"
-"\t\tIF getPlayerColor(baseIndex,1) == colorWanted\n"
-"\t\tTHEN\n"
-"\t\t\tbringHole(baseIndex, 0, 1)\n"
-"\t\t\tmove(baseIndex, 1)\n"
-"\t\tELSE\n"
-"\t\t\twantedPlayerLocation <- findNearestPlayer(colorWanted, baseIndex+1 )\n"
-"\t\t\tbringHole( wantedPlayerLocation[0]-1 , 0,wantedPlayerLocation[1] )\n"
-"\t\t\tbringPlayerHome(wantedPlayerLocation[0], wantedPlayerLocation[1], baseIndex,0)\n"
-"\t\tEND_IF\n"
-"\tEND_IF\n"
-"\tIF getPlayerColor(baseIndex, 1) != colorWanted \n"
-"\tTHEN\n"
-"\t\twantedPlayerLocation <- this.findNearestPlayer(colorWanted, baseIndex+1)\n"
-"\t\tbringHole( wantedPlayerLocation[0]-1 , 1 , wantedPlayerLocation[1] )\n"
-"\t\tbringPlayerHome( wantedPlayerLocation[0] , wantedPlayerLocation[1] , baseIndex , 1 )\n"
-"\tEND_IF\n"
-"END\n"
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:13
+#, no-wrap
+msgid "getBasesAmount()"
+msgstr "getBasesAmount()"
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:104
-msgid "Show Tip 3 ( Pseudo-code of bringHole )"
-msgstr "Montrer l'indice 3 (le pseudo-code de bringHole)"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:14
+msgid "Returns the amount of bases on this field."
+msgstr "Retourne le nombre de bases dans le terrain."
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:105
-msgid "The algorithm of the bringHole method is the following:"
-msgstr "L'algorithme de la méthode bringHole est le suivant :"
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:16
+#, no-wrap
+msgid "int getPositionsAmount()"
+msgstr "int getPositionsAmount()"
 
-#. type: Content of: <div><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:107
-#, no-wrap
-msgid ""
-"BEGIN\n"
-"\tholeBaseLocation[0] <- getHoleBase()\n"
-"\tholeBaseLocation[1] <- getHolePositionInBase()\n"
-"\tIF baseDst > holeLocation[0]\n"
-"\tTHEN\n"
-"\t\tFOR i FROM holeLocation[0]+1 TO baseDst BY 1\n"
-"\t\tDO\n"
-"\t\t\tmove(i, playerDst)\n"
-"\t\tEND_FOR\n"
-"\tELSE \n"
-"\t\tIF baseDst < holeLocation[0]\n"
-"\t\tTHEN\n"
-"\t\t\tFOR i FROM holeLocation[0]-1 DOWNTO baseDst+1 BY -1\n"
-"\t\t\tDO\n"
-"\t\t\t\tmove(i,1-playerToProtect)\n"
-"\t\t\tEND_FOR\n"
-"\t\t\tmove(baseDst,playerDst);\n"
-"\t\tELSE \n"
-"\t\t\tIF baseDst == holeLocation[0] AND playerDst != holeLocation[1]\n"
-"\t\t\tTHEN\n"
-"\t\t\t\tmove(baseDst,playerDst);\n"
-"\t\t\tEND_IF\n"
-"\t\tEND_IF\n"
-"\tEND_IF\n"
-"END\n"
-msgstr ""
-"BEGIN\n"
-"\tholeBaseLocation[0] <- getHoleBase()\n"
-"\tholeBaseLocation[1] <- getHolePositionInBase()\n"
-"\tIF baseDst > holeLocation[0]\n"
-"\tTHEN\n"
-"\t\tFOR i FROM holeLocation[0]+1 TO baseDst BY 1\n"
-"\t\tDO\n"
-"\t\t\tmove(i, playerDst)\n"
-"\t\tEND_FOR\n"
-"\tELSE \n"
-"\t\tIF baseDst < holeLocation[0]\n"
-"\t\tTHEN\n"
-"\t\t\tFOR i FROM holeLocation[0]-1 DOWNTO baseDst+1 BY -1\n"
-"\t\t\tDO\n"
-"\t\t\t\tmove(i,1-playerToProtect)\n"
-"\t\t\tEND_FOR\n"
-"\t\t\tmove(baseDst,playerDst);\n"
-"\t\tELSE \n"
-"\t\t\tIF baseDst == holeLocation[0] AND playerDst != holeLocation[1]\n"
-"\t\t\tTHEN\n"
-"\t\t\t\tmove(baseDst,playerDst);\n"
-"\t\t\tEND_IF\n"
-"\t\tEND_IF\n"
-"\tEND_IF\n"
-"END\n"
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:17
+#, no-wrap
+msgid "getPositionsAmount()"
+msgstr "getPositionsAmount()"
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:137
-msgid "Show Tip 4 ( Pseudo-code of findNearestPlayer)"
-msgstr "Montrer l'indice 4 (le pseudo-code de findNearestPlayer)"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:18
+msgid "Returns the amount of player's positions per base on this field:"
+msgstr "Retourne le nombre de positions disponibles par base."
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:138
-msgid "The algorithm of the findNearestPlayer method is the following :"
-msgstr "L'algorithme de la méthode findNearestPlayer est le suivant :"
+#. type: Content of: <h2>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:20
+msgid "Functions to retrieve the world's state"
+msgstr "Fonctions pour découvrir l'état du monde"
 
-#. type: Content of: <div><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:140
-#, no-wrap
-msgid ""
-"BEGIN\n"
-"\tnbBases <- getAmountOfBases()\n"
-"\tfound <- false;\n"
-"\ti <- firstBaseToSearch\n"
-"\tWHILE i < nbBases AND !found\n"
-"\tDO\n"
-"\t\tFOR j FROM 0 TO 1 BY 1\n"
-"\t\tDO\n"
-"\t\t\tIF getPlayerColor(i, j)== colorWanted AND !found\n"
-"\t\t\tTHEN\n"
-"\t\t\t\tlocation[0] <- i;\n"
-"\t\t\t\tlocation[1] <- j;\n"
-"\t\t\t\tfound <- true;\n"
-"\t\t\tEND_IF\n"
-"\t\tEND_FOR\n"
-"\t\ti <- i+1\n"
-"\tEND_WHILE\n"
-"\tRETURN location\n"
-"END\n"
-msgstr ""
-"BEGIN\n"
-"\tnbBases <- getAmountOfBases()\n"
-"\tfound <- false;\n"
-"\ti <- firstBaseToSearch\n"
-"\tWHILE i < nbBases AND !found\n"
-"\tDO\n"
-"\t\tFOR j FROM 0 TO 1 BY 1\n"
-"\t\tDO\n"
-"\t\t\tIF getPlayerColor(i, j)== colorWanted AND !found\n"
-"\t\t\tTHEN\n"
-"\t\t\t\tlocation[0] <- i;\n"
-"\t\t\t\tlocation[1] <- j;\n"
-"\t\t\t\tfound <- true;\n"
-"\t\t\tEND_IF\n"
-"\t\tEND_FOR\n"
-"\t\ti <- i+1\n"
-"\tEND_WHILE\n"
-"\tRETURN location\n"
-"END\n"
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:22
+#, no-wrap
+msgid "int getHoleBase()"
+msgstr "int getHoleBase()"
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:162
-msgid "Show tip 5 ( Pseudo-code of bringPlayerHome)"
-msgstr "Montrer l'indice 5(le pseudo-code de bringPlayerHome)"
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:23
+#, no-wrap
+msgid "getHoleBase()"
+msgstr "getHoleBase()"
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:163
-msgid "The algorithm of the bringPlayerHome method is the following :"
-msgstr "L'algorithme de la méthode bringPlayerHome est le suivant :"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:24
+msgid "Returns the base in which the hole is located."
+msgstr "Retourne l'index de la base où se trouve le trou."
 
-#. type: Content of: <div><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:165
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:26
+#, no-wrap
+msgid " int getHolePosition()"
+msgstr " int getHolePosition()"
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:27
+#, no-wrap
+msgid "getHolePosition()"
+msgstr "getHolePosition()"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:28
+msgid "Returns the hole position within its base"
+msgstr "Retourne la position du trou dans sa base."
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:30
+#, no-wrap
+msgid " int getPlayerColor(int base, int position)"
+msgstr " int getPlayerColor(int base, int position)"
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:31
+#, no-wrap
+msgid "getPlayerColor(base, position)"
+msgstr "getPlayerColor(base, position)"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:32
+msgid "Returns the color of the player at a given location."
+msgstr "Retourne la couleur d'un joueur donné à partir de sa position."
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:36
+msgid "Returns whether all players of the field are at home."
+msgstr "Retourne si tous les joueurs présents sur le terrain sont chez eux."
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:38
+#, no-wrap
+msgid "boolean isBaseSorted(int base)"
+msgstr "boolean isBaseSorted(int base)"
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:39
+#, no-wrap
+msgid "isBaseSorted(base)"
+msgstr "isBaseSorted(base)"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:40
+msgid "Returns whether all players of a given base are at home."
+msgstr "Retourne si tous les joueurs d'une base donnée sont chez eux."
+
+#. type: Content of: <h2>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:42
+msgid "Functions to change the world"
+msgstr "Fonctions pour changer le monde"
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:44
+#, no-wrap
+msgid "void move(int base, int position)"
+msgstr "void move(int base, int position)"
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:45
 #, no-wrap
+msgid "move(base, position)"
+msgstr "move(base, position)"
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:46
 msgid ""
-"PRECONDITION: the hole is on the base of index baseSrc-1\n"
-"BEGIN\n"
-"\t\tmove( baseSrc,playerSrc)\n"
-"\t\tFOR i FROM baseSrc-1 DOWNTO baseDst+1 BY -1\n"
-"\t\tDO\n"
-"\t\t\tmove(i,1-playerDst)\n"
-"\t\t\tmove(i-1,playerDst)\n"
-"\t\t\tmove(i,playerDst)\n"
-"\t\tEND_FOR\n"
+"Moves a given player into the hole. This throws an IllegalArgumentException "
+"if the specified player is not near the hole (at most one base away)."
 msgstr ""
-"PRECONDITION: the hole is on the base of index baseSrc-1\n"
-"BEGIN\n"
-"\t\tmove( baseSrc,playerSrc)\n"
-"\t\tFOR i FROM baseSrc-1 DOWNTO baseDst+1 BY -1\n"
-"\t\tDO\n"
-"\t\t\tmove(i,1-playerDst)\n"
-"\t\t\tmove(i-1,playerDst)\n"
-"\t\t\tmove(i,playerDst)\n"
-"\t\tEND_FOR\n"
+"Déplace un joueur dans le trou. Une exception IllegalArgumentException est "
+"levée si le joueur indiqué n'est pas suffisamment près du trou. Il peut être "
+"au plus à une base du trou."
+
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/NaiveBaseball.html:1
+msgid "Naive Rainbow Baseball"
+msgstr "Baseball multicolore naïf"
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:3
+msgid ""
+"Today, the buggles decided to play a baseball game, but they are rather out "
+"of luck, actually.  First, kinda forgot the rules, and ... well ... they "
+"cannot find the ball and bats again.  So they decided to \"adapt a bit\" the "
+"rules. As the are no ball, the buggles can only running around the field, "
+"what they do happily: for a while, all attending buggle run at full speed in "
+"all directions around the field."
+msgstr ""
+"Aujourd'hui, les buggles ont décidé de faire une partie de baseball, mais il "
+"faut avouer que ce n'est pas très bien engagé : elles ne se souviennent plus "
+"très bien des règles, et ... euh ... elles ont perdu les battes et les "
+"balles. Elles ont donc décidé «d'adapter un peu» les règles. Comme il n'y a "
+"plus de balle, la seule chose qu'elles peuvent faire est de courir sur le "
+"terrain. C'est d'ailleurs ce qu'elles ont fait pendant un moment : toutes "
+"les buggles présentes se sont mises à courir en tous sens sur le terrain."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:9
+msgid ""
+"But after a few collisions, they decide to invent new rules to organize a "
+"bit the game: They make one team per base and two players per team. One of "
+"the teams has only one player so that its base has an empty location. Then, "
+"the players are dispatched randomly around the bases, and the game for them "
+"is to reach their home base. The whole game stops when all players are "
+"home.  There is no winning team: either all players win, or they all lose. "
+"Actually, this game is very different from the original baseball. The only "
+"rule that remains is that you can only run around the field, from one base "
+"to the next one, without crossing middle of the field."
+msgstr ""
+"Mais après quelques collisions plus ou moins douloureuses, elles décident "
+"d'inventer de nouvelles règles pour organiser la partie. Elles décident de "
+"faire une équipe par base sur le terrain et deux joueurs par équipes. L'une "
+"des équipes n'a qu'un seul joueur pour que l'une des bases ait un "
+"emplacement vide. Ensuite, les joueurs se répartissent aléatoirement sur les "
+"bases, et le jeu est de faire en sorte que chaque joueur retourne sur sa "
+"base. La partie s'arrềte quand tous les joueurs sont chez eux. Il n'y a pas "
+"d'équipe gagnante : soit tous les joueurs remportent la partie, soit ils la "
+"perdent tous. Oui, c'est vrai, ce jeu est très différent du baseball "
+"habituel. La seule règle qui reste est qu'il faut courir autour du terrain, "
+"de base en base, sans jamais passer au centre du terrain."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:17
+msgid ""
+"Now, they are asking you to help them deciding who and when should move so "
+"that each player returns to its base. Only one buggle can move at each "
+"round, from its position to the empty spot.  The maximal distance that a "
+"buggle can cover in one round is of one base."
+msgstr ""
+"Maintenant, les buggles ont besoin de vous pour décider qui doit bouger à "
+"quel moment de façon à ce que chacune rejoigne sa base. Une seule buggle "
+"peut bouger à chaque tour, de sa position jusqu'à l'emplacement vide. De "
+"plus, la distance maximale qu'une buggle peut parcourir en un tour est de "
+"une seule base."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:21
+msgid ""
+"So, at each round, the empty spot is on one base (say <code>B</code>), and "
+"you should decide which buggle enters that empty spot. There is four "
+"candidates (two from base <code>B-1</code> and two from base <code>B+1</"
+"code>). Actually, there is a fifth candidate since the buggle that is on the "
+"same base than the empty spot can change its position, but that's not really "
+"helping."
+msgstr ""
+"Ainsi, à chaque tour, l'emplacement vide se trouve sur une base (disons "
+"<code>B</code>), et vous devez décider quelle buggle occupera cette place. "
+"Il y a quatre candidates : deux de la base <code>B-1<code>, et deux de la "
+"base <code>B+1</code>. En fait, il y a une cinquième candidate puisque la "
+"buggle qui se trouve sur la même base que le trou peut aller l'occuper, mais "
+"ça ne fait pas vraiment avancer le problème."
+
+#. type: Content of: <h3>
+#: src/lessons/sort/baseball/NaiveBaseball.html:26
+msgid "The Naïve algorithm"
+msgstr "Algorithme naïf"
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:28
+msgid ""
+"In this exercise, we will first explore a very simple algorithm. To decide "
+"which of the four candidate buggles should enter the empty spot, we first "
+"restrict ourselves and decide that buggles can only turn clockwise. Then, "
+"from the two remaining candidates, we pick the one that has the largest "
+"distance to cover to reach its base (turning clockwise). Click on the demo "
+"button: this works rather well in practice."
+msgstr ""
+"Dans cet exercice, nous allons explorer un premier algorithme très simple. "
+"Pour décider laquelle des quatre candidates doit aller occuper l'emplacement "
+"vide, nous commençons par nous restreindre à tourner dans le sens des "
+"aiguilles d'une montre. Ensuite, parmi les deux candidates restantes, nous "
+"prenons celle qui a encore le plus de chemin à parcourir jusqu'à sa base "
+"(dans le sens des aiguilles d'une montre). Essayez la démonstration : cela "
+"marche plutôt bien en pratique."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:34
+msgid ""
+"It's hard to find a simpler algorithm for this problem: While it's not "
+"sorted, search for the base containing the candidate buggles: if the hole is "
+"in base <code>B</code>, it's the base <code>B+1</code>, modulo the amount of "
+"bases. Then, compute the distance that each buggle of that base still has to "
+"run to reach its base (0 if it's already home). Once you found the buggle "
+"that should enter the empty spot, just use the <code>move</code> method on "
+"it, and iterate."
+msgstr ""
+"Il est difficile d'imaginer un algorithme plus simple pour ce problème : "
+"tant que ce n'est pas trié, chercher la base contenant les candidates. Si le "
+"trou est sur la base <code>B</code>, il s'agit de la base <code>B+1</code> "
+"(modulo le nombre de bases). Ensuite, il faut calculer la distance que "
+"chacune des buggles de cette base doit encore parcourir (0 si elle est déjà "
+"chez elle). Une fois que vous avez sélectionné l'heureuse élue, utilisez la "
+"méthode <code>move</code> pour la faire bouger, avant de passer à "
+"l'itération suivante."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:40
+msgid ""
+"The main difficulty should be to get the few equations right: determining "
+"the base next to the hole should be easy, but determining the distance that "
+"a player has to cover may reveal a bit more challenging. Don't hesitate to "
+"draw pictures on a paper to cover all possible cases. It should not be that "
+"difficult either: there is not that many cases after all."
+msgstr ""
+"La principale difficulté est peut-être d'écrire les quelques équations "
+"nécessaires sans se tromper. Trouver quelle est la base après le trou "
+"devrait être assez facile, mais calculer la distance que chaque joueur doit "
+"encore parcourir peut s'avérer plus problématique. N'hésitez pas à faire des "
+"dessins pour vérifier que votre équation marche dans tous les cas, il n'y a "
+"pas tant de cas possibles que cela après tout."
+
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/SelectBaseball.html:1
+msgid "Selection Baseball"
+msgstr "Baseball par selection"
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:3
+#: src/lessons/sort/baseball/SelectBaseball.html:3
 msgid ""
-"Like the previous world, this world implements a baseball world. But now, "
-"you have more than two players on each base.  Like before, your mission is "
-"to bring everyone home."
+"The previous algorithm is very pleasant: it's rather simple and rather fast "
+"to implement, but unfortunately, it is also rather wrong! In some cases, it "
+"never stops, which is obviously bad. If you don't believe it, just copy "
+"paste your previous code, and hit the run button. The first world of this "
+"exercise is one of these unfortunate situations that drives our previous "
+"algorithm crazy."
 msgstr ""
-"A l'instar du monde précédent, ce monde implémente un monde de baseball. "
-"Mais maintenant, vous avez plus de deux joueurs sur chaque base. Comme "
-"auparavant, votre mission est d'amener chaque joueur à sa base."
+"L'algorithme précédent est très plaisant : il est plutôt simple, assez "
+"rapide à implémenter, mais malheureusement, il est également carrément faux. "
+"Dans certains cas, il ne s'arrête jamais, ce qui n'est pas très bon. Si vous "
+"ne le croyez pas, copie/collez votre code et appuyez sur le bouton "
+"«Exécuter». Le premier monde de cet exercice est l'un de ces cas malheureux "
+"où notre algorithme devient fou."
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:7
+#: src/lessons/sort/baseball/SelectBaseball.html:9
 msgid ""
-"This exercise is trying to show you one thing : you have to do a change that "
-"you haven't anticipated, and you need to make this change without breaking "
-"your code and without changing too many thing, because the algorithm is "
-"still great."
+"So we have to find another algorithm, preferably one that works in all cases."
 msgstr ""
-"Cet exercice essaye de vous montrer une chose : vous avez à faire un "
-"changement que vous n'aviez pas anticipé, et il faut le faire sans casser "
-"votre code et sans le modifier trop en profondeur, puisque votre algorithme "
-"est toujours correct."
+"Il nous faut donc trouver un autre algorithme. De préférence un qui marche "
+"dans tous les cas."
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:11
+#: src/lessons/sort/baseball/SelectBaseball.html:11
 msgid ""
-"The previous algorithm was only able to deal with two players per base, you "
-"have to change it so you can handle n players per base, with n greater or "
-"equals at two."
+"For that, the best solution is to start from a well known algorithm instead "
+"of trying to invent a new one from scratch as we just did. When you think a "
+"bit about this problem, this can is very similar to a sorting problem: Just "
+"make sure that the players are sorted by their colors and you're set. And "
+"while we are at it, let's generalize the game to allow more that 4 bases."
 msgstr ""
-"L'algorithme précédent était seulement capable de gérer deux joueurs par "
-"base, vous avez à le modifier afin qu'il puisse gérer n joueurs par base, "
-"avec n supérieur ou égal à deux."
+"Pour cela, la meilleure solution est d'adapter un algorithme connu au lieu "
+"de tenter de partir de zéro comme nous venons de faire. Quand on réfléchi un "
+"peu à ce problème, on reconnaît un certain air de famille avec le problème "
+"du tri : il suffit de <b>trier</b> les joueurs en fonction de leur couleur "
+"pour le résoudre. Et tant que nous y sommes, nous pouvons généraliser un peu "
+"le problème en utilisant plus de quatre bases."
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:15
+#: src/lessons/sort/baseball/SelectBaseball.html:17
 msgid ""
-"You can be wondering why you didn't have to write directly an flawless "
-"algorithm. It's just that sometimes, it's way too hard.  Sometimes, you just "
-"need to take a particular case and generalize your solution. It's sometimes "
-"easier to generalize than to try to find a general algorithm from scratch. "
-"Remember that improving is way more easier than creating."
+"Let's adapt the selection sort to our situation. The big lines of the "
+"algorithm is then \"for each base, select the players that should occupy "
+"this base and make sure that they come to their position\". This way, we "
+"will grow an sorted area where all players are already sorted (and never "
+"changed) while the unsorted area shrinks."
 msgstr ""
-"Vous pouvez vous demander pourquoi vous n'avez pas eu à écrire directement "
-"un algorithme sans ce défaut. C'est juste que parfois, c'est beaucoup trop "
-"difficile. Parfois, il suffit de prendre un cas particulier et de "
-"généraliser la solution. C'est bien souvent plus simple de généraliser que "
-"de trouver un algorithme général à partir de rien. Souvenez-vous "
-"qu'améliorer est plus facile que créer."
+"Adaptons le tri par sélection à notre situation. Les grandes lignes de cet "
+"algorithme sont les suivantes : «pour chaque base, trouver dans la zone pas "
+"encore triée les joueurs qui doivent occuper cette base, puis les y placer». "
+"De la sorte, on va faire grandir une zone triée qu'on ne modifie plus "
+"jamais, tout en faisant réduire la taille de la zone pas encore triée."
 
-#. type: Content of: <p><p><ul><li>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:22
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:23
 msgid ""
-"You can have access to the number of locations available on each base by "
-"using the getLocationsAmount() method."
+"Selecting the player should be no problem; Do not hesitate to define some "
+"methods such as <code>findPlayer()</code> or <code>findPlayerBase()</code>. "
+"This will ensure that your code remains understandable."
 msgstr ""
-"Vous pouvez avoir accès au nombre de positions disponibles sur chaque base "
-"en utilisant la méthode getLocationsAmount()."
+"Choisir les joueurs à déplacer ne devrait pas poser de problème. N'hésitez "
+"pas à définir quelques fonctions comme <code>trouveJoueur</code> ou "
+"<code>trouveBaseJoueur()</code>. Cela améliorera la lisibilité de votre "
+"code, ce qui est toujours une bonne chose."
 
-#. type: Content of: <p><div>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:37
-msgid "There are seven methods provided :"
-msgstr "Sept méthodes vous sont fournies :"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:27
+msgid ""
+"The most problematic aspect is to move the selected players into position. "
+"For that, you have to move the hole to the position where the player is, and "
+"then move both the player and the hole to the base that is next to the "
+"player's goal (probably in a loop), and finally put the player in the right "
+"position of its target base."
+msgstr ""
+"L'aspect le plus problématique est de déplacer les joueurs sélectionnés "
+"jusqu'à leur position. Pour cela, il vous faut déplacer le trou jusqu'à la "
+"base où se trouve le joueur, puis bouger ensuite le trou et le joueur de "
+"base en base jusqu'à celle avant la cible (au moyen d'une boucle). Enfin, on "
+"peut mettre le joueur dans la bonne case de sa base de prédilection."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:32
+msgid ""
+"As often in programming, the devil is in the details: there is a bunch of "
+"corner cases that you should detect and deal with correctly, such as the "
+"cases where the player is already in the base (but not in the position that "
+"you would like), or when the hole is on the right of the player (probably "
+"when you sort the first base). But you will find and hunt these while "
+"debugging your code."
+msgstr ""
+"Comme souvent en programmation, le diable est dans les détails, et il y a un "
+"certain nombre de cas particuliers à détecter et à gérer correctement, comme "
+"quand le joueur est déjà dans sa base de prédilection (mais pas dans la "
+"bonne position), ou quand le trou se trouve en fait à droite du joueur "
+"(probablement quand vous triez la première base). Mais vous allez trouver et "
+"résoudre ces problèmes quand vous débugguerez votre code."
+
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/InsertBaseball.html:1
+msgid "Insertion Baseball"
+msgstr "Baseball par insertion"
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:3
+msgid ""
+"The good point of adapting the selection sort to the baseball problem is "
+"that we know that it works (provided that our adaptation is correct). That's "
+"much better than the first naive algorithm, that was unable to converge to "
+"the solution in some situations. But actually, the selection sort is not "
+"perfect either as it requires a lot of swaps: we have to bring the hole to "
+"the selected player and then both the player and hole in position, and more. "
+"We can do better."
+msgstr ""
+"Le coté positif d'adapter le tri par sélection à notre problème est que nous "
+"savons que cela fonctionne (à condition que notre adaptation soit correcte). "
+"C'est bien mieux que notre premier algorithme naïf, qui était incapable de "
+"converger vers la solution dans certains cas. Cependant, le tri par "
+"sélection n'est pas parfait non plus, puisqu'il requiert beaucoup "
+"d'échanges : il faut amener le trou jusqu'au joueur sélectionné puis amener "
+"le joueur ET le trou vers la bonne base. On doit pouvoir faire mieux."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:9
+msgid ""
+"For example, each player can run quite a long way from its initial position "
+"to its target solution.  Instead, it may be more interesting to split the "
+"field in two parts: one on the left where all players are sorted relatively "
+"to each others, and one on the right where the players are still at their "
+"initial positions. Then, at each iteration, we take the player at the border "
+"between the sorted and unsorted areas (that is, the left-most player of the "
+"unsorted area) and move it to the left (within the sorted area) until it "
+"reaches its position (that is, until the position where it's bigger that its "
+"left neighbor). This would at least reduce the travel of players to the "
+"sorted area as we use the first one on the border."
+msgstr ""
+"Par exemple, chaque joueur peut avoir à parcourir un chemin relativement "
+"long pour arriver à sa position finale. Au lieu de cela, il serait peut-être "
+"intéressant de couper le terrain en deux parties : l'une à gauche où tous "
+"les joueurs sont triés relativement les uns aux autres, et une autre à "
+"droite où les joueurs n'ont pas encore bougé de leur position de départ. "
+"Ensuite, à chaque itération, on prend le joueur à la frontière entre les "
+"deux zones (c'est à dire, le joueur le plus à gauche de la zone non triée) "
+"et on le déplace vers la gauche jusqu'à sa position dans la zone triée "
+"(c'est à dire, jusqu'à ce qu'il soit plus grand que son voisin de gauche). "
+"Cela réduirait au moins la distance que les joueurs doivent parcourir pour "
+"rentrer dans la zone triée, puisqu'on prend systématiquement le joueur à la "
+"frontière."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:18
+msgid ""
+"Actually, that's exactly what an insertion sort would do: maintain a sorted "
+"area on the left, and put iteratively the player on the border to its "
+"position within the sorted area. This is good, as we know that our algorithm "
+"is not inherently flawed since we adapt a well known one."
+msgstr ""
+"En fait, c'est exactement ce qu'un tri par insertion ferait: maintenir une "
+"zone triée à gauche, et y insérer à chaque itération l'élément qui se trouve "
+"à la frontière en le décalant vers la gauche jusqu'à sa position dans la "
+"zone triée. C'est une bonne chose, car cela veut dire que notre algorithme "
+"n'est pas fondamentalement faux, puisqu'il s'agit d'une adaptation d'un "
+"algorithme connu. "
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:22
+msgid ""
+"The easiest to adapt the insertion sort to the baseball problem is to "
+"consider all positions as adjacent and forget about bases. For that, we "
+"define the methods <code>getColor(pos)</code>, <code>move(pos)</code> and "
+"<code>getHole()</code> that all use a unique integer to designate a given "
+"position. These functions simply convert between the way to specify a "
+"position and then call the usual functions to interact with the world. If "
+"you have an <code>index</code> and want to convert it into a <code>base,pos</"
+"code>, then <code>base=index/2</code> and <code>pos=index%2</code>. To "
+"compute the reverse, <code>index=base*2+pos</code> (this works because "
+"<code>getPositionsAmount()</code> always returns 2)."
+msgstr ""
+"Le plus simple pour adapter le tri par insertion au problème du baseball est "
+"de considérer toutes les positions comme adjacentes sans tenir compte des "
+"différentes bases. Pour cela, il faut définir les méthodes "
+"<code>couleurJoueur(pos)</code>, <code>deplace(pos)</code> et "
+"<code>trouveTrou()</code> qui utilisent un seul entier pour désigner une "
+"position donnée et appellent les fonctions de base de cet univers pour faire "
+"leur travail. Pour convertir une position encodée sur un seul entier "
+"<code>index</code> en une position encodée sur deux entiers <code>base,pos</"
+"code>, il faut appliquer les formules suivantes: <code>base=index/2</code> "
+"et <code>pos=index%2</code>. Pour faire le calcul inverse, il faut utiliser "
+"<code>index=base*2+pos</code> (qui fonctionne car il y a deux positions par "
+"base)."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:31
+msgid ""
+"For the algorithm itself, you should first move the hole to the position 1. "
+"The position 0 is considered to be the sorted area (of size 1 for now) while "
+"the area above 2 is the unsorted area.  Then comes an iteration to sort each "
+"element of the unsorted area. Since this iteration is a bit complex, you "
+"should think of its loop invariant, that is, the condition that is true "
+"before and after the loop and which explains that the loop fulfills its "
+"goal. Here, the loop invariant is twofold: First, the hole is between the "
+"sorted area and the unsorted area, and then, the every elements of the "
+"sorted area are ... well sorted relatively to their neighbors."
+msgstr ""
+"Pour l'algorithme lui-même, vous devriez tout d'abord bouger le trou en "
+"position 1. On considère alors que la zone triée se limite pour l'instant à "
+"la position 0 (elle est alors de taille 1) tandis que la zone non triée "
+"commence à partir de la position 2. Ensuite, on fait une itération par "
+"élément à trier. Comme le corps de cet itération est un peu plus compliqué "
+"que ce que nous avons écrit jusque là, vous devriez réfléchir à l'invariant "
+"de cette boucle, c'est à dire à la condition qui est vraie avant et après un "
+"passage dans la boucle, et qui fait que la boucle fait son travail. Ici, "
+"l'invariant a deux parties : tout d'abord, l'emplacement vide se trouve "
+"entre les parties triées et non triées, et ensuite, la zone triée est ... "
+"triée, c'est à dire que tous les éléments de cette zone sont bien triés par "
+"rapport à leurs voisins."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:39
+msgid ""
+"Then, the loop body to sort an element should first descend the hole and the "
+"elements within the sorted area until the element is larger than the element "
+"before in the sorted area (2 moves per position to travel), and then move "
+"the hole back to its position between the sorted and unsorted areas (1 move "
+"per position)."
+msgstr ""
+"Ensuite, le corps de la boucle devrait trier un élément en descendant cet "
+"élément et le trou dans la zone triée jusqu'au point où l'élément est à sa "
+"place dans la zone triée (cela demande deux déplacements par case à "
+"parcourir), avant de remonter le trou à sa place à la frontière (un "
+"déplacement par case à parcourir)."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:43
+msgid ""
+"Once you insert the last element within the sorted area, your whole set is "
+"sorted and you're done.  I preserve the surprise of the border cases that "
+"will require some little adjustments to your algorithm to make it work "
+"properly :)"
+msgstr ""
+"Une fois que vous avez inséré le dernier élément dans la zone triée, tout "
+"votre ensemble est trié et vous avez fini. Je vous laisse la surprise des "
+"cas limites nécessitant de petits ajustements à votre algorithme pour lui "
+"permettre de fonctionner dans tous les cas :)"
+
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/BubbleBaseball.html:1
+msgid "Bubble Baseball"
+msgstr "Baseball à bulle"
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/BubbleBaseball.html:3
+msgid ""
+"Crap, we adapted the insertion sort because our selection sort required too "
+"much moves to get the selected players to their position, but the insertion "
+"sort requires an inordinate amount of changes to get the border elements to "
+"their position within the sorted area without mixing the already sorted "
+"elements. At the end of the day, our selection variant was more efficient "
+"with at most <code>3*amountOfBase</code> moves to sort one element (1 to get "
+"the hole alongside with the player, and 2 to get the hole+player in "
+"position) while our insertion variant requires at most "
+"<code>3*amountOfPlayers</code> to sort one element (2 to descend the hole "
+"and player in position, 1 to get the hole back to its position). That's "
+"twice as bad as there is two players per base. It may be possible to improve "
+"the insertion sort by moving by more than one element when descending, but "
+"it seems uneasy (at least, while not mixing the already sorted elements) and "
+"it would probably only ensure that our insertion variant becomes as "
+"efficient as our selection variant, not dramatically better."
+msgstr ""
+"Zut, nous avions adapté le tri par insertion parce que notre tri par "
+"sélection nécessitait trop de déplacements pour mener les joueurs "
+"sélectionnés à leur position, mais le tri par insertion impose une quantité "
+"déraisonnable de déplacements pour déplacer les joueurs de la frontière "
+"jusqu'à leur place dans la section triée. Au final, notre variante par "
+"sélection était plus efficace, avec au pire <code>3*nombre de bases</code> "
+"déplacement par élément à trier (1 pour apporter le trou jusqu'au joueur à "
+"bouger, et 2 pour amener le joueur et le trou jusqu'à leur position "
+"finale).  De son coté, notre variante par insertion nécessite au pire "
+"<code>3*nombre de joueurs</code> déplacements pour trier un élément (2 pour "
+"descendre le joueur et le trou à leur place, et 1 pour remonter le trou). "
+"C'est deux fois pire puisqu'il y a deux joueurs par base. Il serait "
+"probablement possible d'améliorer un peu notre variante par insertion en "
+"descendant plus vite le trou et le joueur, mais cela semble assez difficile "
+"(il ne faut pas mélanger les éléments déjà triés pendant la descente), et "
+"cela ne permettrait que de rendre cette variante aussi efficace que celle "
+"par sélection, pas de faire vraiment mieux. "
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/BubbleBaseball.html:15
+msgid ""
+"If we cannot make the sort faster, we can make it easier. If you think about "
+"it, it seems rather natural to adapt the bubble sort to this problem: the "
+"hole becomes the bubble that moves up and down, sorting a bit the array "
+"during each traversal. The big lines are simply: \"while it's not sorted, "
+"move the hole down to base 0 (moving the biggest player of each base at each "
+"step) and then back to the maximal base (moving the smallest player of each "
+"base)\". After a while, <code>isSorted()</code> will return true and your "
+"algorithm will stop."
+msgstr ""
+"Si nous ne pouvons pas rendre ce tri plus rapide, au moins nous pouvons le "
+"faire plus simplement. Quand on y pense, il semble assez naturel d'adapter "
+"le tri à bulle à ce problème : le trou devient la bulle qui monte et qui "
+"descend, en sortant peu à peu le tableau. Les grandes lignes de l'algorithme "
+"sont très simples : «tant que ce n'est pas trier, déplacer le trou vers le "
+"bas puis vers le haut. À chaque pas, c'est le plus petit des deux joueurs de "
+"la base qui descend, et le plus grand des deux qui monte (en fonction du "
+"sens de déplacement).». Après un moment, <code>isSorted()</code> devient "
+"vrai, et votre algorithme s'arrête."
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/BubbleBaseball.html:21
+msgid ""
+"This is so easy that we introduce another variant of the problem, with more "
+"than two players per base.  But actually, that shouldn't block you very "
+"long, should it?"
+msgstr ""
+"C'est tellement simple que nous pouvons nous payer le luxe d'une autre "
+"variante du problème, avec plus de deux joueurs par base. Mais cela ne va "
+"pas vous ralentir longtemps, n'est ce pas?"
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/BubbleBaseball.html:24
+msgid ""
+"Surprisingly, the bubble sort variant requires ways less moves than the "
+"other variants. This is astonishing because usually, the bubble sort "
+"performs much worse than the others sorts, but it comes from the very good "
+"match between its big lines and the baseball universe. It actually happens "
+"rather often that a pleasantly written algorithm performs very decently. But "
+"this is not an universal rule either, as demonstrated by the naive algorithm "
+"of the first exercise, that was nice, simple and wrong ;)"
+msgstr ""
+"De manière étonnante, la variante à bulle semble nécessiter beaucoup moins "
+"de déplacements que les autres variantes. C'est assez surprenant car "
+"habituellement, le tri à bulle est la pire des variantes possibles, mais "
+"cela s'explique sans peine par les analogies entre cet algorithme et le "
+"problème du baseball multicolore. Il est relativement courant qu'un "
+"algorithme écrit simplement et naturellement se comporte bien en pratique. "
+"Il ne s'agit cependant pas d'une règle absolue, comme prouvé par "
+"l'algorithme simple et faux du premier exercice !"
+
+#~ msgid "Creating a new JLM world"
+#~ msgstr "Créer un nouveau monde JLM (\"World\")"
+
+#~ msgid ""
+#~ "Welcome to the JLM Meta-Lesson. Its goal is to teach you how to write new "
+#~ "universes in JLM. For that, we will reimplement the Hanoi world "
+#~ "(available in the recursion lesson) step-by-step. This lesson covers "
+#~ "quite advanced topics and suppose that you are fluent in Java and "
+#~ "confident with the use of the JLM framework already. If you are not used "
+#~ "to the framework already, you probably want to take another lesson "
+#~ "before, like the welcome one or (maybe more fun) the maze one."
+#~ msgstr ""
+#~ "Bienvenue dans la Meta-Leçon JLM. Son but est de vous apprendre comment "
+#~ "écrire de nouveaux univers dans la JLM. Pour ce faire, nous allons "
+#~ "réimplanter le monde des tours de Hanoï ( disponible dans la leçon "
+#~ "récursion ) pas à pas. Cette leçon couvre des sujets assez avancés et "
+#~ "supporse que vous êtes à l'aise en Java et que vous connaissez déjà bien "
+#~ "l'utilisation du framework de la JLM. Si vous n'êtes pas déjà habitué au "
+#~ "frameword, vous voudrez probablement suivre une autre leçon avant, comme "
+#~ "Welcome ou ( sans doute plus amusant ) Maze."
+
+#~ msgid "Every JLM universe is composed of 4 main components:"
+#~ msgstr "Chaque univers JLM est composé de quatre composants principaux"
+
+#~ msgid "<b>The world</b>: it contains the state of the universe."
+#~ msgstr "<b>Le monde (\"world\")</b> : il contient l'état de l'univers."
+
+#~ msgid ""
+#~ "<b>The view</b>: it allows to draw the world and the entities on the "
+#~ "screen."
+#~ msgstr ""
+#~ "<b>La vue (\"View\")</b>: elle permet de dessiner le monde et les "
+#~ "entitées à l'écran."
+
+#~ msgid ""
+#~ "<b>The entity ancestor</b>: the code written by the student will derive "
+#~ "from this class, which contains some state specific to the entity, and "
+#~ "every accessor to let the entity interact with its world."
+#~ msgstr ""
+#~ "<b>L' \"entity ancestor\"</b> :  le code écrit par l'étudiant sera dérivé "
+#~ "de cette classe, qui contient certains états spécifiques à l'entité, et "
+#~ "chaque accesseur pour permettre à l'entité d'intéragir avec le monde."
+
+#~ msgid ""
+#~ "<b>The entity interactive control panel</b>: this is the little panel "
+#~ "displayed under the world view in the JLM interface. It allows to "
+#~ "interactively control the selected entity. As you can see from the "
+#~ "existing universes, this is optional, and if you don't provide any, the "
+#~ "panel will remain blank, preventing the users from interactively "
+#~ "controlling the entities."
+#~ msgstr ""
+#~ "<b>Le panneau de contrôle interactif de l'entité</b> : c'est le petit "
+#~ "panneau affiché en dessous de la vue du monde dans l'interface de la JLM. "
+#~ "Il permet de contrôler interactivement l'entité sélectionnée. Comme vous "
+#~ "pouvez le voir avec les univers existants, c'est optionnel, et si vous "
+#~ "n'en fournissez pas, le panneau restera vide, empêchant l'utilisateur de "
+#~ "controler interactivement l'entité."
+
+#~ msgid ""
+#~ "In addition, worlds are used by exercises, themselves sorted in lessons."
+#~ msgstr ""
+#~ "De plus, les mondes sont utilisés pas les exercices, eux-mêmes rangés en "
+#~ "leçons."
+
+#~ msgid ""
+#~ "<b>Lessons</b> are just a list of exercise. They can be sequential "
+#~ "(meaning that the student has to finish one exercise before being allowed "
+#~ "to see the next one in the list), altrough most of them are not (ie, "
+#~ "students are free to attempt the exercises in the order they like)."
+#~ msgstr ""
+#~ "<b>Les leçons (\"Lessons\")</b> sont juste une liste d'exercices. Elles "
+#~ "peuvent être séquentielles (ce qui signifie que l'étudiant doit finir "
+#~ "l'exercise avant de pouvoir voir le suivant ), même si la grande majorité "
+#~ "des leçons ne le sont pas ( ie, les étudiants sont libre d'essayer les "
+#~ "exercices dans l'ordre qu'ils souhaitent)."
+
+#~ msgid ""
+#~ "In the future, we would like to have richer exercise ordering schema, "
+#~ "where the requirements to fulfill to be allowed to try an exercise could "
+#~ "be more complex.  The dependencies would probably turn into a graph "
+#~ "instead of a chain.  But this is still to be done."
+#~ msgstr ""
+#~ "A l'avenir, nous aimerions disposer d'un ordonnancement d'exercices plus "
+#~ "riche, où les conditions à remplir pour pouvoir essayer un exercice "
+#~ "pourrait être plus complexes. Les dépendances deviendraient probablement "
+#~ "un graphe au lieu d'être une chaîne. Mais cela reste encore à réaliser."
+
+#~ msgid ""
+#~ "The main element of each lesson is a class classically called Main, which "
+#~ "simply contains a constructor adding each exercise of the lesson in row."
+#~ msgstr ""
+#~ "L'élément principal de chaque leçon est la classe communément appelée "
+#~ "Main, qui contient simplement un constructeur ajoutant chaque exercice de "
+#~ "la leçon l'un à la suite de l'autre."
+
+#~ msgid ""
+#~ "Each <b>exercise</b> object is in charge of instantiating the worlds "
+#~ "used, set them up (adding walls and baggles in BuggleWorld, or changing "
+#~ "the elevation and adding lamps in the LightBotWorld, etc), and populate "
+#~ "them with entities correctly setup (location, color, etc)."
+#~ msgstr ""
+#~ "Chaque objet <b>exercise</b> a pour mission d'instancier les mondes "
+#~ "utilisés, de les initialiser ( ajouter des murs et des baggles dans "
+#~ "BuggleWorld, ou changer l'altitude et ajouter des lampes dans "
+#~ "LightBotWorld, etc), et les peupler avec des correctement initialisées "
+#~ "( emplacement, couleur, etc) ."
+
+#~ msgid ""
+#~ "Most of the exercises also provide a specific <b>answer entity</b> able "
+#~ "to solve the exercise.  It serve both to compute the initial content of "
+#~ "the code editor, and to compute the objective world. We will come back on "
+#~ "this in a latter exercise of this meta-lesson."
+#~ msgstr ""
+#~ "La plupart des exercices fournissent aussi une <b>entité réponse "
+#~ "<b>(\"answer entity\")</b> capable de résoudre l'exercice. Cela sert à la "
+#~ "fois à afficher le contenu initial de l'éditeur de code, et à calculer le "
+#~ "monde objectif. Nous reviendrons là-dessus plus tard dans un exercice de "
+#~ "cette meta-leçon."
+
+#~ msgid ""
+#~ "The very first element you want to write in a new JLM universe is a "
+#~ "partial world implementation including the internal state. In subsequent "
+#~ "exercises, we will complete the World class to provide entities ways to "
+#~ "interact and modify their world, and we will also implement the other "
+#~ "elements of the universe."
+#~ msgstr ""
+#~ "Le premier élément que vous voulez écrire dans un nouvel univers de la "
+#~ "JLM est une implémentation partielle du monde incluant l'état interne. "
+#~ "Dans des exercices ultérieurs, nous complèterons la classe World pour "
+#~ "fournir aux entités des moyens d'intéragir et de modifier leur monde, et "
+#~ "nous implémenterons aussi les autres éléments de l'univers."
+
+#~ msgid ""
+#~ "Before you jump in writing your World implementation, you should "
+#~ "understand the big JLM picture, and how worlds are used internally."
+#~ msgstr ""
+#~ "Avant que vous vous jetiez dans l'écriture de votre implémentation de "
+#~ "World, vous devez comprendre le schéma de la JLM, et comment les mondes "
+#~ "sont utilisés en interne."
+
+#~ msgid "JLM worlds big picture"
+#~ msgstr "Schéma des mondes de la JLM"
+
+#~ msgid ""
+#~ "As you know, every JLM exercise can contain one or several worlds, each "
+#~ "containing one or several entities. The code written by the student is "
+#~ "executed in the entities, which must interact with their world to change "
+#~ "it from its initial state to its goal state."
+#~ msgstr ""
+#~ "Comme vous le savez, chaque exercice de la JLM peut contenir un ou "
+#~ "plusieurs mondes, chacun contenant une ou plusieures entitées. Le code "
+#~ "écrit par les étudiants est éxécutés dans les entitées, qui doivent "
+#~ "intéragir avec leur monde pour le faire passer de son état initial à "
+#~ "l'état objectif."
+
+#~ msgid ""
+#~ "This multiplication of worlds and entities is used to test the student "
+#~ "code in several conditions. It can thus be parallelized to test cases, "
+#~ "aiming at full testing coverage of the student code."
+#~ msgstr ""
+#~ "La multiplication des mondes et des entitées est utilisé pour tester le "
+#~ "code de l'étudiant dans différentes conditions. Cela peut être comparé à "
+#~ "des cas de tests, cherchant à tester entièrement le code de l'étudiant."
+
+#~ msgid ""
+#~ "Technically, in a given exercise, for every world accessible from the "
+#~ "relevant combobox, there is three World objects. They live in jlm.lesson."
+#~ "Exercise:"
+#~ msgstr ""
+#~ "Techniquement, dans un exercice donné, pour chaque monde accessible "
+#~ "depuis la liste déroulante, il y a trois objets World. Ils se trouvent "
+#~ "dans jlm.lesson.Exercise."
+
+#~ msgid ""
+#~ "protected World [] initialWorld; \n"
+#~ "protected World [] currentWorld; \n"
+#~ "protected World [] answerWorld;  \n"
+#~ msgstr ""
+#~ "protected World [] initialWorld; \n"
+#~ "protected World [] currentWorld; \n"
+#~ "protected World [] answerWorld;  \n"
+
+#~ msgid ""
+#~ "The line number of the combobox gives the index to use in these arrays.  "
+#~ "Each <code>initialWorld</code> is created by the exercise constructor."
+#~ msgstr ""
+#~ "Le numéro de ligne de la liste déroulante donne l'index utilisé dans ces "
+#~ "tableaux. Chaque <code>initialWorld</code> est crée par le constructeur "
+#~ "de l'exercice."
+
+#~ msgid ""
+#~ "<code>currentWorld</code> is the one displayed in the \"World\" tab of "
+#~ "the interface. At the beginning, it is a plain copy of the initialWorld, "
+#~ "but it gets modified when the student uses the interactive controls or "
+#~ "when the program gets run. The \"Reset\" button reset it to be a perfect "
+#~ "copy of the initial world."
+#~ msgstr ""
+#~ "<code>currentWorld</code> est celui affiché dans l'onglet \"World\" de "
+#~ "l'interface. Au début, il s'agit d'une simple copie de initialWorld, mais "
+#~ "il est modifié quand l'étudiant utilise les contrôles interactifs ou "
+#~ "quand le programme est lancé. Le bouton \"Reset\" le remet à zéro afin "
+#~ "qu'il redevienne une copie parfaite du monde initial."
+
+#~ msgid ""
+#~ "<code>answerWorld</code> is the one displayed by the \"Objective\" world. "
+#~ "Basically, it's a copy of the initial world, on which we let the specific "
+#~ "answer entity of this exercise run.  This default behavior can be "
+#~ "overloaded by exercises, but you'll probably never have to do so. We will "
+#~ "come back on this in a subsequent exercise."
+#~ msgstr ""
+#~ "<code>answerWorld</code> est celui affiché par le monde \"Objective\". "
+#~ "Concrètement, il s'agit d'une copie du monde initial, sur lequel on a "
+#~ "lancé le programme de l'\"answer entity\" de l'exercice. Ce comportement "
+#~ "par défaut peut être modifié par les exercices, mais vous n'aurez "
+#~ "probablement jamais à le faire. Nous reviendrons là dessus dans un "
+#~ "exercice ultérieur."
+
+#~ msgid "Implementing basic Worlds"
+#~ msgstr "Implémenter des mondes basiques"
+
+#~ msgid ""
+#~ "The internal use of Worlds hidden, but the important point is that every "
+#~ "World object has extend the jlm.universe.World class and define the "
+#~ "following methods and constructors:"
+#~ msgstr ""
+#~ "L'utilisation interne des mondes est cachée, mais le point important est "
+#~ "que chaque objet World hérite de la classe jlm.universe.World et définit "
+#~ "les méthodes et constructeurs suivants :"
+
+#~ msgid ""
+#~ "<b>a copy constructor</b> which is used to copy initial worlds into "
+#~ "currentWorld and answerWorld.  Its argument must be of the exact same "
+#~ "type than the class itself, not Object (this is because we use Java "
+#~ "introspection mechanism to search for such a constructor of the class).  "
+#~ "For example, if you create a TotoWorld, your copy constructor must be "
+#~ "declared as this:"
+#~ msgstr ""
+#~ "<b>un constructeur copie</b> qui est utilisé pour copier le monde initial "
+#~ "en currentWorld et answerWorld. Son argument doit être du même type que "
+#~ "la classe elle-même, et non pas de type Object ( c'est parce que nous "
+#~ "utilisons le mécanisme d'introspection Java pour rechercher un tel "
+#~ "constructeur dans la classe). Par exemple, si vous créer un TotWorl, "
+#~ "votre constructeur votre constructeur copie doit être déclaré ainsi :"
+
+#~ msgid ""
+#~ "public TotoWorld(TotoWorld other) {...} // Correct\n"
+#~ "public TotoWorld(Object other) {...} // FALSE\n"
+#~ "public TotoWorld(World other) {...} // also FALSE\n"
+#~ msgstr ""
+#~ "public TotoWorld(TotoWorld other) {...} // Correct\n"
+#~ "public TotoWorld(Object other) {...} // Faux\n"
+#~ "public TotoWorld(World other) {...} // Faux\n"
+
+#~ msgid ""
+#~ "The content of this constructor is usually a simple call to the "
+#~ "<code>super(World w)</code> constructor, but this constructor cannot be "
+#~ "omitted."
+#~ msgstr ""
+#~ "Le contenu de ce constructeur est généralement un simple appel au "
+#~ "constructeur<code>super(World w)</code>, mais ce constructeur copie doit "
+#~ "exister."
+
+#~ msgid ""
+#~ "One or several <b>regular constructors</b> initializing the state of the "
+#~ "object. They will be used by the exercise constructor to instantiate your "
+#~ "world. Since you usually write both the world and the lessons, you are "
+#~ "completely free to specify the parameters you want to your constructor. "
+#~ "It should use the <code>super(String name)</code> constructor to setup "
+#~ "the very basic elements of your world."
+#~ msgstr ""
+#~ "Un ou plusieurs <b>constructeurs normaux</b> initialisant l'état de "
+#~ "l'objet. Ils seront utilisés par le constructeur de l'exercice pour "
+#~ "instancier votre monde. Puisque vous écrivez généralement le monde et les "
+#~ "leçons, vous êtes complètement libre de spécifier les paramètres que vous "
+#~ "voulez pour votre constructeur. Il doit néanmoins utilise le constructeur "
+#~ "<code>super(String name)</code> pour initialiser les éléments basiques de "
+#~ "votre monde."
+
+#~ msgid ""
+#~ "Optionally, you may also want to use the <code>setDelay(int delay)</code> "
+#~ "method to change the initial animation delay. For example, the "
+#~ "SortingWorld set this to 1 to speed animations up. This is the delay in "
+#~ "milliseconds between each animation step during a continuous run."
+#~ msgstr ""
+#~ "Vous pouvez, de manière facultative, utiliser la méthode "
+#~ "<code>setdelay(int delay)</code> pour changer le délai initial de "
+#~ "l'animation. Par exemple, dans SortingWorld, mettez le à 1 pour accélérer "
+#~ "l'animation. C'est le délai en millisecondes entre chaque pas d'animation "
+#~ "durant un programme continu."
+
+#~ msgid ""
+#~ "A <b>reset() method</b> taking one World as parameter, and in charge of "
+#~ "copying the state of the parameter into the current world. This is "
+#~ "naturally used when you press the \"Reset\" button, or at the beginning "
+#~ "of each run."
+#~ msgstr ""
+#~ "Une méthode <b>reset()</b> prenant un World en paramètre, et ayant pour "
+#~ "mission d'affecter l'état du paramètre dans le monde courant. C'est "
+#~ "naturellement utilisé quand vous appuyez sur le bouton \"Reset\", ou au "
+#~ "début de chaque lancement de programme."
+
+#~ msgid ""
+#~ "The length of this method naturally depends on the complexity of your "
+#~ "world state. In hanoi, there is only 3 slots containing a list of disc so "
+#~ "that will be quite easy, but this can be quite complicated for complex "
+#~ "worlds such as BuggleWorld."
+#~ msgstr ""
+#~ "La longueur de cette méthode dépend naturellemetn de la complexité de "
+#~ "l'état de votre monde. Dans Hanoi, il y a seulement trois tours contenant "
+#~ "une liste de disques, cela sera donc très facile, mais cela peut être "
+#~ "bien plus compliqué avec des mondes complexes comme BuggleWorld."
+
+#~ msgid "Allowing the graphical rendering of Worlds"
+#~ msgstr "Permettre le rendu graphique des mondes"
+
+#~ msgid ""
+#~ "Some specific steps naturally must be taken so that JLM can graphically "
+#~ "display your world. Usually, you must write a specific class extending "
+#~ "jlm.universe.WorldView, and provide some protected methods so that the "
+#~ "View can retrieve the state to display. In this particular exercise, the "
+#~ "view is provided (you will write you own one in next exercise), so you "
+#~ "only have to implement the right accessor."
+#~ msgstr ""
+#~ "Certaines étapes spécifiques doivent naturellement être prise afin que la "
+#~ "JLM puisse afficher graphique votre monde. Usuellement, vous devez écrire "
+#~ "une classe spécifique héritant de jlm.universe.WorldView, et fournissant "
+#~ "des méthodes \"protected\", afin que la vue puisse récupérer l'état à "
+#~ "afficher. Dans cet exercice particulier, la vue vous est fournie ( vous "
+#~ "en écrirez une dans le prochain exercice ), donc vous n'avez qu'à "
+#~ "implémenter le bon accesseur."
+
+#~ msgid "Implementing your HanoiWorld"
+#~ msgstr "Implémenter votre HanoiWorld"
+
+#~ msgid ""
+#~ "The main task of this exercise is to modify the provided template to "
+#~ "store the state of the world. Since the exercise provides a view and "
+#~ "automatically instantiate your world, you cannot change the instantiation "
+#~ "constructor, nor the rendering accessor (see the code template for there "
+#~ "prototype). But you are completely free about how you actually store the "
+#~ "state in your object."
+#~ msgstr ""
+#~ "La tâche principale de cet exercice est de modifié le code fourni pour "
+#~ "sauvegarder l'état du monde. Puisque l'exercice fournit une  vue et "
+#~ "instancie automatiquement le monde, vous ne pouvez pas changer le "
+#~ "constructeur d'instanciation, ni l'accesseur de rendu graphique "
+#~ "( regardez le code fourni pour leurs prototypes ). Mais vous êtes "
+#~ "complètement libre sur comment vous allez sauvegarder l'état dans votre "
+#~ "object."
+
+#~ msgid ""
+#~ "During the implementation of the Hanoi world, I changed my internal "
+#~ "representation several times, to adapt to the code needs. My first try "
+#~ "was only simply three ArrayList<Integer>, for each slots, while the "
+#~ "final design used an inner class called HanoiSlot, containing an integer "
+#~ "array and providing friendly functions such as <code>push()</code>, "
+#~ "<code>pop()</code> and <code>top()</code>. Even if it really becomes "
+#~ "necessary when implementing the action methods allowing the entities to "
+#~ "interact with their world, I advise you to design an inner class from the "
+#~ "beginning."
+#~ msgstr ""
+#~ "Pendant l'implémentation du monde des Tours de Hanoï, j'ai changé ma "
+#~ "représentation interne à plusieures reprises, afin de l'adapter aux "
+#~ "besoins du code. Mon premier essai était simplement trois ArrayList<"
+#~ "Integer>, une pour chaque tour, tandis que la version finale fournit une "
+#~ "classe interne, nommé HanoiSlot, contenant un tableau d'entier et "
+#~ "fournissant des fonctions sympathiques telles que <code>push()</code>, "
+#~ "<code>pop()</code> and <code>top()</code>. Même si cela ne devient "
+#~ "réellement nécessaire que quand vous implémenter les méthodes d'actions "
+#~ "permettant aux entitées d'intéragir avec leur monde, je vous conseille de "
+#~ "concevoir une classe interne dès le départ."
+
+#~ msgid ""
+#~ "You probably want to add 3 fields to your World, one for each slot (we "
+#~ "will never try to have worlds with more than 3 slots), store the content "
+#~ "of each slot in the instantiation constructor, and retrieve the content "
+#~ "of a specific slot in the rendering accessor (<code>Integer[] "
+#~ "values(Integer i)</code>)."
+#~ msgstr ""
+#~ "Vous voudrez probablement ajouter trois champs à votre monde, un pour "
+#~ "chaque tour (on n'essayera jamais d'avoir des mondes avec plus de trois "
+#~ "tours), sauvegarder le contenu de chaque tour dans le construction "
+#~ "d'instanciation, et récupérer le contenu d'une tour donnée dans "
+#~ "l'accesseur de rendu graphique (<code>Integer[] values(Integer i)</code>)."
+
+#~ msgid ""
+#~ "That seems quite a lot of code to write compared to the other JLM "
+#~ "exercises, but at the end, my HanoiWorld implementation is less than 100 "
+#~ "lines long, which is not that much."
+#~ msgstr ""
+#~ "Cela semble être beaucoup de code à écrire comparé aux autres exercices "
+#~ "de la JLM, mais en fin de compte, mon implémentation de HanoiWorld fait "
+#~ "moints de cent lignes, ce qui n'est pas beaucoup."
+
+#~ msgid "Meta lesson"
+#~ msgstr "Meta leçon"
+
+#~ msgid ""
+#~ "The purpose of this lesson is to teach you how to write lessons for JLM."
+#~ msgstr ""
+#~ "Le but de cette leçon est de vous apprendre comment écrire des leçons "
+#~ "pour la JLM."
diff --git a/lib/l10n/jlm.pot b/lib/l10n/jlm.pot
index 694c652..df0e1df 100644
--- a/lib/l10n/jlm.pot
+++ b/lib/l10n/jlm.pot
@@ -7,7 +7,7 @@
 msgid ""
 msgstr ""
 "Project-Id-Version: PACKAGE VERSION\n"
-"POT-Creation-Date: 2013-05-25 09:13+0300\n"
+"POT-Creation-Date: 2013-08-04 11:27+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"
@@ -239,117 +239,169 @@ msgstr ""
 msgid "<b>Cost</b>"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <table><tr><td><div>
 #: src/jlm/universe/sort/SortingWorld.html:11
 msgid "int getValueCount()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:12
+msgid "getValueCount()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:11
+#: src/jlm/universe/sort/SortingWorld.html:13
 msgid "Returns the amount of values in the array"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:11
+#: src/jlm/universe/sort/SortingWorld.html:13 src/jlm/universe/sort/SortingWorld.html:38
 msgid "none"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:13
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:15
 msgid "boolean isSmaller(int i, int j)"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:16
+msgid "isSmaller(i, j)"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:13
+#: src/jlm/universe/sort/SortingWorld.html:17
 msgid ""
 "Returns true if the content of cell i is strictly smaller than the one of "
 "cell j"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:13
+#: src/jlm/universe/sort/SortingWorld.html:17
 msgid "two reads"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:14
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:18
 msgid "boolean isSmallerThan(int i, int val)"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:19
+msgid "isSmallerThan(i, val)"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:14
+#: src/jlm/universe/sort/SortingWorld.html:20
 msgid ""
 "Returns true if the content of cell i is strictly smaller than value "
 "<code>val</code>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:14 src/jlm/universe/sort/SortingWorld.html:19
+#: src/jlm/universe/sort/SortingWorld.html:20 src/jlm/universe/sort/SortingWorld.html:31
 msgid "one read"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:16
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:22
 msgid "void swap(int i, int j)"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:23
+msgid "swap(i, j)"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:16
+#: src/jlm/universe/sort/SortingWorld.html:24
 msgid "Swaps the content of cell i and the one of cell j"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:16
+#: src/jlm/universe/sort/SortingWorld.html:24
 msgid "two reads, two writes"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:17
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:25
 msgid "void copy(int from, int to)"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:26
+msgid "copy(from, to)"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:17
+#: src/jlm/universe/sort/SortingWorld.html:27
 msgid "Copy the content of cell 'from' into the cell 'to'"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:17
+#: src/jlm/universe/sort/SortingWorld.html:27
 msgid "one read, one write"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:19
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:29
 msgid "int getValue(int idx)"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:30
+msgid "getValue(idx)"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:19
+#: src/jlm/universe/sort/SortingWorld.html:31
 msgid "Returns the value of cell idx"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:20
-msgid "void setValue(int idx,int val)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:32
+msgid "void setValue(int idx, int val)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/sort/SortingWorld.html:33
+msgid "setValue(idx, val)"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:20
+#: src/jlm/universe/sort/SortingWorld.html:34
 msgid "Sets cell 'idx' to the value 'val'"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/sort/SortingWorld.html:20
+#: src/jlm/universe/sort/SortingWorld.html:34
 msgid "one write"
 msgstr ""
 
+#. type: Content of: <pre>
+#: src/jlm/universe/sort/SortingWorld.html:36 src/jlm/universe/turtles/TurtleWorld.html:72 src/jlm/universe/bugglequest/BuggleWorld.html:35 src/lessons/recursion/hanoi/universe/HanoiWorld.html:25 src/lessons/sort/pancake/universe/PancakeWorld.html:25
+#, no-wrap
+msgid "boolean isSelected()"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/sort/SortingWorld.html:37 src/jlm/universe/turtles/TurtleWorld.html:73 src/jlm/universe/bugglequest/BuggleWorld.html:35 src/lessons/recursion/hanoi/universe/HanoiWorld.html:26 src/lessons/sort/pancake/universe/PancakeWorld.html:26
+#, no-wrap
+msgid "isSelected()"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/sort/SortingWorld.html:38 src/lessons/recursion/hanoi/universe/HanoiWorld.html:27 src/lessons/sort/pancake/universe/PancakeWorld.html:27
+msgid "Returns whether the current world is selected in the graphical interface."
+msgstr ""
+
 #. type: Content of: <h2>
-#: src/jlm/universe/sort/SortingWorld.html:24
+#: src/jlm/universe/sort/SortingWorld.html:42
 msgid "History view"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/jlm/universe/sort/SortingWorld.html:25 src/lessons/sort/bubble1/AlgBubbleSort1.html:7
+#: src/jlm/universe/sort/SortingWorld.html:43 src/lessons/sort/bubble/AlgBubbleSort1.html:7
 msgid ""
 "It is not enough to sort the array to pass the exercises. Your solution must "
 "strictly follow the expected behavior of each exercise. This is enforced by "
@@ -360,23 +412,32 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/jlm/universe/sort/SortingWorld.html:32 src/lessons/sort/bubble1/AlgBubbleSort1.html:14
+#: src/jlm/universe/sort/SortingWorld.html:50
 msgid ""
-"To help in this process, it is posible to graphically explore the history of "
-"your sorting algorithm. Switch to the Objective view and use the contextual "
-"menu (right clic) to switch from the the view of the current state to the "
-"view of its history."
+"To help in this process, it is possible to graphically explore the history "
+"of your sorting algorithm. Switch to the Objective view and use the "
+"contextual menu (right click) to switch from the the view of the current "
+"state to the view of its history."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/jlm/universe/sort/SortingWorld.html:37 src/lessons/sort/bubble1/AlgBubbleSort1.html:19
+#: src/jlm/universe/sort/SortingWorld.html:55 src/lessons/sort/bubble/AlgBubbleSort1.html:19
 msgid ""
 "The history view is a bit hairly at the first glance, but actually rather "
 "simple: The time flows from left to right on this graph, and each row is a "
 "cell of your array. The curved lines that go navigate between rows represent "
 "a given data value. When two lines cross, this means that two values were "
-"swapped at this time stamp. This view, first introduced by Aldo Cortesi, "
-"reveals very helpful understand the inner behavior of sorting algorithms."
+"swapped at this time stamp; A line fork represent a value copy; When a value "
+"is magenta and followed by an interrogation mark (?), it was read using "
+"getValue(); If the value is red and followed with an exclamation point (!), "
+"it was written using setValue()."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/jlm/universe/sort/SortingWorld.html:64
+msgid ""
+"This view, inspired from Aldo Cortesi, reveals very helpful understand the "
+"inner behavior of sorting algorithms."
 msgstr ""
 
 #. type: Content of: <h1>
@@ -384,110 +445,257 @@ msgstr ""
 msgid "TurtleWorld"
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
-#: src/jlm/universe/turtles/TurtleWorld.html:2
-msgid ""
-"This world is directly inspired from the work of the mathematician Seymour "
-"Papert in the 60's. Inspirated from the swiss psycholog Jean Piaget, he came "
-"up with a learning method called LOGO to teach programming to young "
-"childs. The world is full of turtles which leave a painting where they go "
-"and which respond to simple orders."
+#. type: Content of: <p>
+#: src/jlm/universe/turtles/TurtleWorld.html:3
+msgid "This universe is an adaptation of LOGO for the Java Learning Machine."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/jlm/universe/turtles/TurtleWorld.html:8
-msgid "This world is an adaptation of LOGO for the Java Learning Machine."
+#: src/jlm/universe/turtles/TurtleWorld.html:5
+msgid ""
+"It is directly inspired from the work of the mathematician Seymour Papert in "
+"the 60's. Inspired from the swiss psycholog Jean Piaget, he came up with a "
+"learning method called LOGO to teach programming to young childs. The world "
+"is full of turtles which leave a painting where they go and which respond to "
+"simple orders."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/jlm/universe/turtles/TurtleWorld.html:10
-msgid "Methods understood by turtles"
+#: src/jlm/universe/turtles/TurtleWorld.html:11
+msgid "Functions to move the turtle"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <pre>
 #: src/jlm/universe/turtles/TurtleWorld.html:13
-msgid "<b>Moving forward</b> <code>public void forward(double stepAmount);</code>"
-msgstr ""
-
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:14
-msgid "<b>Moving backward</b> <code>public void backward(double stepAmount);</code>"
+#, no-wrap
+msgid ""
+"void forward(double steps)\n"
+"void backward(double steps)"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: <pre>
 #: src/jlm/universe/turtles/TurtleWorld.html:15
+#, no-wrap
 msgid ""
-"<b>Turn left</b> <code>public void turnLeft(double angle);</code> (in "
-"degree)"
+"forward(steps)\n"
+"backward(steps)"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
+#. type: Content of: outside any tag (error?)
 #: src/jlm/universe/turtles/TurtleWorld.html:17
-msgid "<b>Turn right</b> <code>public void turnRight(double angle);</code>"
+msgid "Moves forward or backward of the requested amount of steps."
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:18
-msgid "<b>Pen up</b> <code>public void penUp();</code>"
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:19
+#, no-wrap
+msgid ""
+"void turnRight(double angle)\n"
+"void turnLeft(double angle)"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:19
-msgid "<b>Pen down</b> <code>public void penDown();</code>"
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:21
+#, no-wrap
+msgid ""
+"turnRight(angle)\n"
+"turnLeft(angle)"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:20
-msgid "<b>Get pen position</b> <code>public boolean isPenDown();</code>"
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:23
+msgid "Turns left or right of the given angle (in degrees)."
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:21
-msgid "(turtles have pens, not brushes as buggles)"
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:25
+#, no-wrap
+msgid ""
+"double getX()\n"
+"double getY()"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:22
-msgid "<b>Get heading</b> <code>public double getHeading();</code>"
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:27
+#, no-wrap
+msgid ""
+"getX()\n"
+"getY()"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:23
-msgid "<b>Change heading</b> <code>public void setHeading(double angle);</code>"
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:29
+msgid "Returns the current position of the turtle."
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:24
-msgid "<b>Get color</b> <code>public Color getColor();</code>"
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:31
+#, no-wrap
+msgid ""
+"void setX(double x)\n"
+"void setY(double y)\n"
+"void setPos(double x, double y)"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:25
-msgid "<b>Set color</b> <code>public void setColor(Color color);</code>"
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:34
+#, no-wrap
+msgid ""
+"setX(x)\n"
+"setY(y)\n"
+"setPos(x,y)"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:26
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:37
+msgid "Teleports the turtle to a new position."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:39
+#, no-wrap
+msgid "double getHeading()"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:40
+#, no-wrap
+msgid "getHeading()"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:41
+msgid "Returns the current heading of the turtle (in degrees)."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:43
+#, no-wrap
+msgid "void getHeading(double angle)"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:44
+#, no-wrap
+msgid "getHeading(angle)"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:45
+msgid "Sets a new heading to the turtle (in degrees)."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/jlm/universe/turtles/TurtleWorld.html:47
+msgid "Functions about the pen"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:49
+#, no-wrap
+msgid "void penUp()"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:50
+#, no-wrap
+msgid "penUp()"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:51
 msgid ""
-"<b>Get position</b> <code>public double getX();</code> <code>public double "
-"getY();</code>"
+"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: <table><tr><td>
-#: src/jlm/universe/turtles/TurtleWorld.html:28
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:54
+#, no-wrap
+msgid "void penDown()"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:55
+#, no-wrap
+msgid "penDown()"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:56
 msgid ""
-"<b>Set position</b> <code>public void setX(double x);</code> \t <code>public "
-"void setY(double y);</code> <code>public void setPos(double x, double "
-"y);</code>"
+"Moves the pen down. The turtle will leave a trace during its subsequent "
+"moves."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:58
+#, no-wrap
+msgid "boolean isPenDown()"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:59
+#, no-wrap
+msgid "isPenDown()"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:60
+msgid "Returns the current pen position as a boolean."
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/jlm/universe/turtles/TurtleWorld.html:62 src/jlm/universe/bugglequest/BuggleWorld.html:25 src/lessons/turmites/universe/TurmiteWorld.html:18
+#, no-wrap
+msgid "Color getColor()"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/turtles/TurtleWorld.html:63 src/jlm/universe/bugglequest/BuggleWorld.html:25
+#, no-wrap
+msgid "getColor()"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:64
+msgid "Returns the current pen color."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:66
+#, no-wrap
+msgid "void setColor(Color color)"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/jlm/universe/turtles/TurtleWorld.html:67
+#, no-wrap
+msgid "getColor(color)"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:68
+msgid "Changes the pen color."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/jlm/universe/turtles/TurtleWorld.html:70
+msgid "Other functions"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/jlm/universe/turtles/TurtleWorld.html:74
+msgid "Returns whether the current turtle is selected in the graphical interface."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:1 src/jlm/universe/turmite/TurmiteWorld.html:1
+#: src/jlm/universe/bugglequest/BuggleWorld.html:1 src/lessons/turmites/universe/TurmiteWorld.html:1
 msgid "BuggleWorld"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/jlm/universe/bugglequest/BuggleWorld.html:2 src/jlm/universe/turmite/TurmiteWorld.html:2
+#: src/jlm/universe/bugglequest/BuggleWorld.html:2 src/lessons/turmites/universe/TurmiteWorld.html:2
 msgid ""
 "This world was invented by Lyn Turbak, at Wellesley College. It is full of "
 "Buggles, little animals understanding simple orders, and offers numerous "
@@ -496,357 +704,502 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:7 src/jlm/universe/turmite/TurmiteWorld.html:7
+#: src/jlm/universe/bugglequest/BuggleWorld.html:7 src/lessons/turmites/universe/TurmiteWorld.html:7
 msgid "Methods understood by buggles"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:9 src/jlm/universe/turmite/TurmiteWorld.html:9
+#: src/jlm/universe/bugglequest/BuggleWorld.html:9 src/lessons/turmites/universe/TurmiteWorld.html:9
 msgid "<b>Moving</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:9 src/jlm/universe/turmite/TurmiteWorld.html:9
+#: src/jlm/universe/bugglequest/BuggleWorld.html:9 src/lessons/turmites/universe/TurmiteWorld.html:9
 msgid "(See also the note on exceptions, below)"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "<b>Turn left"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "Turn right"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "Turn back"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "Moving forward"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/jlm/universe/turmite/TurmiteWorld.html:10
+#: src/jlm/universe/bugglequest/BuggleWorld.html:10 src/lessons/turmites/universe/TurmiteWorld.html:10
 msgid "Moving back</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:11 src/jlm/universe/turmite/TurmiteWorld.html:11
+#: src/jlm/universe/bugglequest/BuggleWorld.html:11 src/lessons/turmites/universe/TurmiteWorld.html:11
 msgid "void turnLeft()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:11
+msgid "turnLeft()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:11 src/jlm/universe/turmite/TurmiteWorld.html:11
+#: src/jlm/universe/bugglequest/BuggleWorld.html:12 src/lessons/turmites/universe/TurmiteWorld.html:11
 msgid "void turnRight()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:12
+msgid "turnRight()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:11 src/jlm/universe/turmite/TurmiteWorld.html:11
+#: src/jlm/universe/bugglequest/BuggleWorld.html:13 src/lessons/turmites/universe/TurmiteWorld.html:11
 msgid "void turnBack()"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:12 src/jlm/universe/turmite/TurmiteWorld.html:12
-msgid "void forward() or void forward(int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:13
+msgid "turnBack()"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:12 src/jlm/universe/turmite/TurmiteWorld.html:12
-msgid "void backward() or void backward(int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:14
+msgid "void forward() or void forward(int steps)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:14
+msgid "forward() or forward(steps)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:15
+msgid "void backward() or void backward(int steps)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:15
+msgid "backward() or backward(steps)"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13 src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16 src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "<b>Get X coordinate"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13 src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16 src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "Get Y coordinate"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13 src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16 src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "Set X coordinate"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13 src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16 src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "Set Y coordinate"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:13 src/jlm/universe/turmite/TurmiteWorld.html:13
+#: src/jlm/universe/bugglequest/BuggleWorld.html:16 src/lessons/turmites/universe/TurmiteWorld.html:13
 msgid "Set position</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14 src/jlm/universe/turmite/TurmiteWorld.html:14
+#: src/jlm/universe/bugglequest/BuggleWorld.html:17 src/lessons/turmites/universe/TurmiteWorld.html:14
 msgid "int getX()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:17
+msgid "getX()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14 src/jlm/universe/turmite/TurmiteWorld.html:14
+#: src/jlm/universe/bugglequest/BuggleWorld.html:18 src/lessons/turmites/universe/TurmiteWorld.html:14
 msgid "int getY()"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14 src/jlm/universe/turmite/TurmiteWorld.html:14
-msgid "void setX(int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:18
+msgid "getY()"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14 src/jlm/universe/turmite/TurmiteWorld.html:14
-msgid "void setY(int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:19
+msgid "void setX(int x)"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:14 src/jlm/universe/turmite/TurmiteWorld.html:14
-msgid "void setPos(int,int)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:19
+msgid "setX(x)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:20
+msgid "void setY(int y)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:20
+msgid "setY(y)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:21
+msgid "void setPos(int x,int y)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:21
+msgid "setPos(x,y)"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:16 src/jlm/universe/turmite/TurmiteWorld.html:16
+#: src/jlm/universe/bugglequest/BuggleWorld.html:23 src/lessons/turmites/universe/TurmiteWorld.html:16
 msgid "<b>Information on the buggle</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:17 src/jlm/universe/turmite/TurmiteWorld.html:17
+#: src/jlm/universe/bugglequest/BuggleWorld.html:24 src/lessons/turmites/universe/TurmiteWorld.html:17
 msgid "<b>Get the color"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:17 src/jlm/universe/turmite/TurmiteWorld.html:17
+#: src/jlm/universe/bugglequest/BuggleWorld.html:24 src/lessons/turmites/universe/TurmiteWorld.html:17
 msgid "Set the color</b>"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:18 src/jlm/universe/turmite/TurmiteWorld.html:18
-msgid "Color getColor()"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:26
+msgid "void setColor(Color c)"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:18 src/jlm/universe/turmite/TurmiteWorld.html:18
-msgid "void setColor(Color)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:26
+msgid "setColor(color)"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:19 src/jlm/universe/turmite/TurmiteWorld.html:19
+#: src/jlm/universe/bugglequest/BuggleWorld.html:27 src/lessons/turmites/universe/TurmiteWorld.html:19
 msgid "<b>Look for a wall forward"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:19 src/jlm/universe/turmite/TurmiteWorld.html:19
+#: src/jlm/universe/bugglequest/BuggleWorld.html:27 src/lessons/turmites/universe/TurmiteWorld.html:19
 msgid "Look for a wall backward</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:20 src/jlm/universe/turmite/TurmiteWorld.html:20
+#: src/jlm/universe/bugglequest/BuggleWorld.html:28 src/lessons/turmites/universe/TurmiteWorld.html:20
 msgid "boolean isFacingWall()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:28
+msgid "isFacingWall()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:20 src/jlm/universe/turmite/TurmiteWorld.html:20
+#: src/jlm/universe/bugglequest/BuggleWorld.html:29 src/lessons/turmites/universe/TurmiteWorld.html:20
 msgid "boolean isBackingWall()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:29
+msgid "isBackingWall()"
+msgstr ""
+
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:21 src/jlm/universe/turmite/TurmiteWorld.html:21
+#: src/jlm/universe/bugglequest/BuggleWorld.html:30 src/lessons/turmites/universe/TurmiteWorld.html:21
 msgid "<b>Get heading"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:21 src/jlm/universe/turmite/TurmiteWorld.html:21
+#: src/jlm/universe/bugglequest/BuggleWorld.html:30 src/lessons/turmites/universe/TurmiteWorld.html:21
 msgid "Set heading</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:21 src/jlm/universe/turmite/TurmiteWorld.html:21
+#: src/jlm/universe/bugglequest/BuggleWorld.html:30 src/lessons/turmites/universe/TurmiteWorld.html:21
 msgid "valid directions are:"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:22 src/jlm/universe/turmite/TurmiteWorld.html:22
+#: src/jlm/universe/bugglequest/BuggleWorld.html:31 src/lessons/turmites/universe/TurmiteWorld.html:22
 msgid "Direction getDirection()"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:22 src/jlm/universe/turmite/TurmiteWorld.html:22
-msgid "void setDirection(Direction)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:31
+msgid "getDirection()"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:32
+msgid "void setDirection(Direction dir)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:32
+msgid "setDirection(direction)"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:22 src/jlm/universe/turmite/TurmiteWorld.html:22
+#: src/jlm/universe/bugglequest/BuggleWorld.html:33 src/lessons/turmites/universe/TurmiteWorld.html:22
 msgid "Direction.NORTH, Direction.EAST, Direction.SOUTH and Direction.WEST"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:24 src/jlm/universe/turmite/TurmiteWorld.html:24
+#: src/jlm/universe/bugglequest/BuggleWorld.html:34
+msgid "Check whether the buggle is currently <b>selected in the interface</b>"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:37 src/lessons/turmites/universe/TurmiteWorld.html:24
 msgid "<b>About the brush</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:25 src/jlm/universe/turmite/TurmiteWorld.html:25
+#: src/jlm/universe/bugglequest/BuggleWorld.html:38 src/lessons/turmites/universe/TurmiteWorld.html:25
 msgid "<b>Brush down"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:25 src/jlm/universe/turmite/TurmiteWorld.html:25
+#: src/jlm/universe/bugglequest/BuggleWorld.html:38 src/lessons/turmites/universe/TurmiteWorld.html:25
 msgid "Brush up"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:25 src/jlm/universe/turmite/TurmiteWorld.html:25
+#: src/jlm/universe/bugglequest/BuggleWorld.html:38 src/lessons/turmites/universe/TurmiteWorld.html:25
 msgid "Get brush position</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:26 src/jlm/universe/turmite/TurmiteWorld.html:26
+#: src/jlm/universe/bugglequest/BuggleWorld.html:39 src/lessons/turmites/universe/TurmiteWorld.html:26
 msgid "void brushUp()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:39
+msgid "brushUp()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:26 src/jlm/universe/turmite/TurmiteWorld.html:26
+#: src/jlm/universe/bugglequest/BuggleWorld.html:40 src/lessons/turmites/universe/TurmiteWorld.html:26
 msgid "void brushDown()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:40
+msgid "brushDown()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:26 src/jlm/universe/turmite/TurmiteWorld.html:26
+#: src/jlm/universe/bugglequest/BuggleWorld.html:41 src/lessons/turmites/universe/TurmiteWorld.html:26
 msgid "boolean isBrushDown()"
 msgstr ""
 
-#. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:27 src/jlm/universe/turmite/TurmiteWorld.html:27
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:41
+msgid "isBrushDown()"
+msgstr ""
+
+#. type: Content of: <table><tr><td><b>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:42 src/lessons/turmites/universe/TurmiteWorld.html:27
 msgid "<b>Change the brush color"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:27 src/jlm/universe/turmite/TurmiteWorld.html:27
+#: src/jlm/universe/bugglequest/BuggleWorld.html:42 src/lessons/turmites/universe/TurmiteWorld.html:27
 msgid "Get the color of the brush</b>"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:28 src/jlm/universe/turmite/TurmiteWorld.html:28
-msgid "void setBrushColor(Color)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:43
+msgid "void setBrushColor(Color c)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:43
+msgid "setBrushColor(color)"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:28 src/jlm/universe/turmite/TurmiteWorld.html:28
+#: src/jlm/universe/bugglequest/BuggleWorld.html:44 src/lessons/turmites/universe/TurmiteWorld.html:28
 msgid "Color getBrushColor()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:44
+msgid "getBrushColor()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:30 src/jlm/universe/turmite/TurmiteWorld.html:30
+#: src/jlm/universe/bugglequest/BuggleWorld.html:46 src/lessons/turmites/universe/TurmiteWorld.html:30
 msgid "<b>Interacting with the world</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:31 src/jlm/universe/turmite/TurmiteWorld.html:31
+#: src/jlm/universe/bugglequest/BuggleWorld.html:47 src/lessons/turmites/universe/TurmiteWorld.html:31
 msgid "<b>Get the color of the ground</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:31 src/jlm/universe/turmite/TurmiteWorld.html:31
+#: src/jlm/universe/bugglequest/BuggleWorld.html:48 src/lessons/turmites/universe/TurmiteWorld.html:31
 msgid "Color getGroundColor()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:48
+msgid "getGroundColor()"
+msgstr ""
+
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:33 src/jlm/universe/turmite/TurmiteWorld.html:33
+#: src/jlm/universe/bugglequest/BuggleWorld.html:50 src/lessons/turmites/universe/TurmiteWorld.html:33
 msgid "<b>Look for a baggle on the ground"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:33 src/jlm/universe/turmite/TurmiteWorld.html:33
+#: src/jlm/universe/bugglequest/BuggleWorld.html:50 src/lessons/turmites/universe/TurmiteWorld.html:33
 msgid "Look for a baggle in bag"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:33 src/jlm/universe/turmite/TurmiteWorld.html:33
+#: src/jlm/universe/bugglequest/BuggleWorld.html:50 src/lessons/turmites/universe/TurmiteWorld.html:33
 msgid "Pickup a baggle"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:33 src/jlm/universe/turmite/TurmiteWorld.html:33
+#: src/jlm/universe/bugglequest/BuggleWorld.html:50 src/lessons/turmites/universe/TurmiteWorld.html:33
 msgid "Drop a baggle</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:34 src/jlm/universe/turmite/TurmiteWorld.html:34
+#: src/jlm/universe/bugglequest/BuggleWorld.html:51 src/lessons/turmites/universe/TurmiteWorld.html:34
 msgid "(see the note on exceptions)"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:35 src/jlm/universe/turmite/TurmiteWorld.html:35
+#: src/jlm/universe/bugglequest/BuggleWorld.html:52 src/lessons/turmites/universe/TurmiteWorld.html:35
 msgid "boolean isOverBaggle()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:52
+msgid "isOverBaggle()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:35 src/jlm/universe/turmite/TurmiteWorld.html:35
+#: src/jlm/universe/bugglequest/BuggleWorld.html:53 src/lessons/turmites/universe/TurmiteWorld.html:35
 msgid "boolean isCarryingBaggle()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:53
+msgid "isCarryingBaggle()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:35 src/jlm/universe/turmite/TurmiteWorld.html:35
-msgid "void pickUpBaggle()"
+#: src/jlm/universe/bugglequest/BuggleWorld.html:54 src/lessons/turmites/universe/TurmiteWorld.html:35
+msgid "void pickupBaggle()"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:54
+msgid "pickupBaggle()"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:35 src/jlm/universe/turmite/TurmiteWorld.html:35
+#: src/jlm/universe/bugglequest/BuggleWorld.html:55 src/lessons/turmites/universe/TurmiteWorld.html:35
 msgid "void dropBaggle()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:55
+msgid "dropBaggle()"
+msgstr ""
+
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:37 src/jlm/universe/turmite/TurmiteWorld.html:37
+#: src/jlm/universe/bugglequest/BuggleWorld.html:57 src/lessons/turmites/universe/TurmiteWorld.html:37
 msgid "<b>Look for a message"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:37 src/jlm/universe/turmite/TurmiteWorld.html:37
+#: src/jlm/universe/bugglequest/BuggleWorld.html:57 src/lessons/turmites/universe/TurmiteWorld.html:37
 msgid "Add a message"
 msgstr ""
 
 #. type: Content of: <table><tr><td><b>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:37 src/jlm/universe/turmite/TurmiteWorld.html:37
+#: src/jlm/universe/bugglequest/BuggleWorld.html:57 src/lessons/turmites/universe/TurmiteWorld.html:37
 msgid "Read the message"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:37 src/jlm/universe/turmite/TurmiteWorld.html:37
+#: src/jlm/universe/bugglequest/BuggleWorld.html:57 src/lessons/turmites/universe/TurmiteWorld.html:37
 msgid "Erase the message</b>"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:38 src/jlm/universe/turmite/TurmiteWorld.html:38
+#: src/jlm/universe/bugglequest/BuggleWorld.html:58 src/lessons/turmites/universe/TurmiteWorld.html:38
 msgid "boolean isOverMessage()"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:38 src/jlm/universe/turmite/TurmiteWorld.html:38
-msgid "void writeMessage(String)"
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:58
+msgid "isOverMessage()"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:59
+msgid "void writeMessage(String msg)"
+msgstr ""
+
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:59
+msgid "writeMessage(msg)"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:38 src/jlm/universe/turmite/TurmiteWorld.html:38
+#: src/jlm/universe/bugglequest/BuggleWorld.html:60 src/lessons/turmites/universe/TurmiteWorld.html:38
 msgid "String readMessage()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:60
+msgid "readMessage()"
+msgstr ""
+
 #. type: Content of: <table><tr><td>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:38 src/jlm/universe/turmite/TurmiteWorld.html:38
+#: src/jlm/universe/bugglequest/BuggleWorld.html:61 src/lessons/turmites/universe/TurmiteWorld.html:38
 msgid "void clearMessage()"
 msgstr ""
 
+#. type: Content of: <table><tr><td><div>
+#: src/jlm/universe/bugglequest/BuggleWorld.html:61
+msgid "clearMessage()"
+msgstr ""
+
 #. type: Content of: <h2>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:41 src/jlm/universe/turmite/TurmiteWorld.html:41
+#: src/jlm/universe/bugglequest/BuggleWorld.html:64 src/lessons/turmites/universe/TurmiteWorld.html:41
 msgid "Note on exceptions"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/jlm/universe/bugglequest/BuggleWorld.html:42 src/jlm/universe/turmite/TurmiteWorld.html:42
+#: src/jlm/universe/bugglequest/BuggleWorld.html:65 src/lessons/turmites/universe/TurmiteWorld.html:42
 msgid ""
 "Regular buggles throw a BuggleWallException exception if you ask them to "
 "traverse a wall.  They throw a NoBaggleUnderBuggleException exception if you "
@@ -857,57 +1210,13 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/jlm/universe/bugglequest/BuggleWorld.html:48 src/jlm/universe/turmite/TurmiteWorld.html:48
+#: src/jlm/universe/bugglequest/BuggleWorld.html:71 src/lessons/turmites/universe/TurmiteWorld.html:48
 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."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/jlm/universe/hanoi/HanoiWorld.html:1
-msgid "HanoiWorld"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/jlm/universe/hanoi/HanoiWorld.html:3
-msgid ""
-"This world implements the ultra-classical Hanoi problem. You are asked to "
-"move the disk pile from the stick where they are to the target stick (given "
-"as second parameter in the world's name -- number 1 for the default "
-"world). There is some extra constraint: you can only move one disk at a "
-"time, and you cannot move a big disk over a smaller one.  Only 2 functions "
-"are provided:"
-msgstr ""
-
-#. type: Content of: <pre>
-#: src/jlm/universe/hanoi/HanoiWorld.html:11
-#, no-wrap
-msgid "public void move(int src, int dst) throws HanoiInvalidMove;"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/jlm/universe/hanoi/HanoiWorld.html:13
-msgid ""
-"It moves one disk from the stick <code>src</code> onto the stick "
-"<code>dst</code>. As you can see, if you try to do an invalid move (like "
-"laying a disk over a smaller one), an exception is thrown."
-msgstr ""
-
-#. type: Content of: <pre>
-#: src/jlm/universe/hanoi/HanoiWorld.html:17
-#, no-wrap
-msgid "int getSlotSize(int slot);"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/jlm/universe/hanoi/HanoiWorld.html:19
-msgid ""
-"It returns the amount of disks placed on the specified slot. This is mainly "
-"used to initialize the recursion and set the amount of recursive call to "
-"execute."
-msgstr ""
-
-#. type: Content of: <h1>
 #: src/lessons/backtracking/Main.html:1
 msgid "Backtracking lesson"
 msgstr ""
@@ -1135,347 +1444,16 @@ msgid ""
 "others."
 msgstr ""
 
-#. type: Content of: <h1>
-#: src/lessons/meta/HanoiCreateWorld.html:1
-msgid "Creating a new JLM world"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:4
-msgid ""
-"Welcome to the JLM Meta-Lesson. Its goal is to teach you how to write new "
-"universes in JLM. For that, we will reimplement the Hanoi world (available "
-"in the recursion lesson) step-by-step. This lesson covers quite advanced "
-"topics and suppose that you are fluent in Java and confident with the use of "
-"the JLM framework already. If you are not used to the framework already, you "
-"probably want to take another lesson before, like the welcome one or (maybe "
-"more fun) the maze one."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:12
-msgid "Every JLM universe is composed of 4 main components:"
-msgstr ""
-
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:14
-msgid "<b>The world</b>: it contains the state of the universe."
-msgstr ""
-
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:15
-msgid "<b>The view</b>: it allows to draw the world and the entities on the screen."
-msgstr ""
-
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:17
-msgid ""
-"<b>The entity ancestor</b>: the code written by the student will derive from "
-"this class, which contains some state specific to the entity, and every "
-"accessor to let the entity interact with its world."
-msgstr ""
-
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:20
-msgid ""
-"<b>The entity interactive control panel</b>: this is the little panel "
-"displayed under the world view in the JLM interface. It allows to "
-"interactively control the selected entity. As you can see from the existing "
-"universes, this is optional, and if you don't provide any, the panel will "
-"remain blank, preventing the users from interactively controlling the "
-"entities."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:28
-msgid "In addition, worlds are used by exercises, themselves sorted in lessons."
-msgstr ""
-
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:30
-msgid ""
-"<b>Lessons</b> are just a list of exercise. They can be sequential (meaning "
-"that the student has to finish one exercise before being allowed to see the "
-"next one in the list), altrough most of them are not (ie, students are free "
-"to attempt the exercises in the order they like)."
-msgstr ""
-
-#. type: Content of: <ul><li><p>
-#: src/lessons/meta/HanoiCreateWorld.html:35
-msgid ""
-"In the future, we would like to have richer exercise ordering schema, where "
-"the requirements to fulfill to be allowed to try an exercise could be more "
-"complex.  The dependencies would probably turn into a graph instead of a "
-"chain.  But this is still to be done."
-msgstr ""
-
-#. type: Content of: <ul><li><p>
-#: src/lessons/meta/HanoiCreateWorld.html:40
-msgid ""
-"The main element of each lesson is a class classically called Main, which "
-"simply contains a constructor adding each exercise of the lesson in row."
-msgstr ""
-
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:43
-msgid ""
-"Each <b>exercise</b> object is in charge of instantiating the worlds used, "
-"set them up (adding walls and baggles in BuggleWorld, or changing the "
-"elevation and adding lamps in the LightBotWorld, etc), and populate them "
-"with entities correctly setup (location, color, etc)."
-msgstr ""
-
-#. type: Content of: <ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:48
-msgid ""
-"Most of the exercises also provide a specific <b>answer entity</b> able to "
-"solve the exercise.  It serve both to compute the initial content of the "
-"code editor, and to compute the objective world. We will come back on this "
-"in a latter exercise of this meta-lesson."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:53
-msgid ""
-"The very first element you want to write in a new JLM universe is a partial "
-"world implementation including the internal state. In subsequent exercises, "
-"we will complete the World class to provide entities ways to interact and "
-"modify their world, and we will also implement the other elements of the "
-"universe."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:58
-msgid ""
-"Before you jump in writing your World implementation, you should understand "
-"the big JLM picture, and how worlds are used internally."
-msgstr ""
-
-#. type: Content of: <h2>
-#: src/lessons/meta/HanoiCreateWorld.html:61
-msgid "JLM worlds big picture"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:64
-msgid ""
-"As you know, every JLM exercise can contain one or several worlds, each "
-"containing one or several entities. The code written by the student is "
-"executed in the entities, which must interact with their world to change it "
-"from its initial state to its goal state."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:69
-msgid ""
-"This multiplication of worlds and entities is used to test the student code "
-"in several conditions. It can thus be parallelized to test cases, aiming at "
-"full testing coverage of the student code."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:73
-msgid ""
-"Technically, in a given exercise, for every world accessible from the "
-"relevant combobox, there is three World objects. They live in "
-"jlm.lesson.Exercise:"
-msgstr ""
-
-#. type: Content of: <p><pre>
-#: src/lessons/meta/HanoiCreateWorld.html:76
-#, no-wrap
-msgid ""
-"protected World [] initialWorld; \n"
-"protected World [] currentWorld; \n"
-"protected World [] answerWorld;  \n"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:83
-msgid ""
-"The line number of the combobox gives the index to use in these arrays.  "
-"Each <code>initialWorld</code> is created by the exercise constructor."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:87
-msgid ""
-"<code>currentWorld</code> is the one displayed in the \"World\" tab of the "
-"interface. At the beginning, it is a plain copy of the initialWorld, but it "
-"gets modified when the student uses the interactive controls or when the "
-"program gets run. The \"Reset\" button reset it to be a perfect copy of the "
-"initial world."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:93
-msgid ""
-"<code>answerWorld</code> is the one displayed by the \"Objective\" "
-"world. Basically, it's a copy of the initial world, on which we let the "
-"specific answer entity of this exercise run.  This default behavior can be "
-"overloaded by exercises, but you'll probably never have to do so. We will "
-"come back on this in a subsequent exercise."
-msgstr ""
-
-#. type: Content of: <h3>
-#: src/lessons/meta/HanoiCreateWorld.html:98
-msgid "Implementing basic Worlds"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:100
-msgid ""
-"The internal use of Worlds hidden, but the important point is that every "
-"World object has extend the jlm.universe.World class and define the "
-"following methods and constructors:"
-msgstr ""
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:103
-msgid ""
-"<b>a copy constructor</b> which is used to copy initial worlds into "
-"currentWorld and answerWorld.  Its argument must be of the exact same type "
-"than the class itself, not Object (this is because we use Java introspection "
-"mechanism to search for such a constructor of the class).  For example, if "
-"you create a TotoWorld, your copy constructor must be declared as this:"
-msgstr ""
-
-#. type: Content of: <p><ul><li><pre>
-#: src/lessons/meta/HanoiCreateWorld.html:108
-#, no-wrap
-msgid ""
-"public TotoWorld(TotoWorld other) {...} // Correct\n"
-"public TotoWorld(Object other) {...} // FALSE\n"
-"public TotoWorld(World other) {...} // also FALSE\n"
-msgstr ""
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:112
-msgid ""
-"The content of this constructor is usually a simple call to the "
-"<code>super(World w)</code> constructor, but this constructor cannot be "
-"omitted."
-msgstr ""
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:115
-msgid ""
-"One or several <b>regular constructors</b> initializing the state of the "
-"object. They will be used by the exercise constructor to instantiate your "
-"world. Since you usually write both the world and the lessons, you are "
-"completely free to specify the parameters you want to your constructor. It "
-"should use the <code>super(String name)</code> constructor to setup the very "
-"basic elements of your world."
-msgstr ""
-
-#. type: Content of: <p><ul><li><p>
-#: src/lessons/meta/HanoiCreateWorld.html:120
-msgid ""
-"Optionally, you may also want to use the <code>setDelay(int delay)</code> "
-"method to change the initial animation delay. For example, the SortingWorld "
-"set this to 1 to speed animations up. This is the delay in milliseconds "
-"between each animation step during a continuous run."
-msgstr ""
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/meta/HanoiCreateWorld.html:124
-msgid ""
-"A <b>reset() method</b> taking one World as parameter, and in charge of "
-"copying the state of the parameter into the current world. This is naturally "
-"used when you press the \"Reset\" button, or at the beginning of each run."
-msgstr ""
-
-#. type: Content of: <p><ul><li><p>
-#: src/lessons/meta/HanoiCreateWorld.html:127
-msgid ""
-"The length of this method naturally depends on the complexity of your world "
-"state. In hanoi, there is only 3 slots containing a list of disc so that "
-"will be quite easy, but this can be quite complicated for complex worlds "
-"such as BuggleWorld."
-msgstr ""
-
 #. type: Content of: <h3>
-#: src/lessons/meta/HanoiCreateWorld.html:132
-msgid "Allowing the graphical rendering of Worlds"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:134
-msgid ""
-"Some specific steps naturally must be taken so that JLM can graphically "
-"display your world. Usually, you must write a specific class extending "
-"jlm.universe.WorldView, and provide some protected methods so that the View "
-"can retrieve the state to display. In this particular exercise, the view is "
-"provided (you will write you own one in next exercise), so you only have to "
-"implement the right accessor."
-msgstr ""
-
-#. type: Content of: <h2>
-#: src/lessons/meta/HanoiCreateWorld.html:139
-msgid "Implementing your HanoiWorld"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:141
-msgid ""
-"The main task of this exercise is to modify the provided template to store "
-"the state of the world. Since the exercise provides a view and automatically "
-"instantiate your world, you cannot change the instantiation constructor, nor "
-"the rendering accessor (see the code template for there prototype). But you "
-"are completely free about how you actually store the state in your object."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:146
-msgid ""
-"During the implementation of the Hanoi world, I changed my internal "
-"representation several times, to adapt to the code needs. My first try was "
-"only simply three ArrayList<Integer>, for each slots, while the final "
-"design used an inner class called HanoiSlot, containing an integer array and "
-"providing friendly functions such as <code>push()</code>, <code>pop()</code> "
-"and <code>top()</code>. Even if it really becomes necessary when "
-"implementing the action methods allowing the entities to interact with their "
-"world, I advise you to design an inner class from the beginning."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:153
-msgid ""
-"You probably want to add 3 fields to your World, one for each slot (we will "
-"never try to have worlds with more than 3 slots), store the content of each "
-"slot in the instantiation constructor, and retrieve the content of a "
-"specific slot in the rendering accessor (<code>Integer[] values(Integer "
-"i)</code>)."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/meta/HanoiCreateWorld.html:157
-msgid ""
-"That seems quite a lot of code to write compared to the other JLM exercises, "
-"but at the end, my HanoiWorld implementation is less than 100 lines long, "
-"which is not that much."
-msgstr ""
-
-#. type: Content of: <h1>
-#: src/lessons/meta/Main.html:1
-msgid "Meta lesson"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/meta/Main.html:2
-msgid "The purpose of this lesson is to teach you how to write lessons for JLM."
-msgstr ""
-
-#. type: Content of: <h1>
-#: src/lessons/welcome/Main.html:1
+#: src/lessons/welcome/Main.html:1 src/lessons/welcome/short_desc.html:1
 msgid "First steps"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
 #: src/lessons/welcome/Main.html:3
 msgid ""
-"This first lesson will lead your first steps in Java programming. It is "
-"intended for beginners. List of seen notions per exercise:"
+"This first lesson will lead your first steps in programming. It is intended "
+"for beginners. List of seen notions per exercise:"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
@@ -1528,8 +1506,8 @@ msgstr ""
 msgid "Switch"
 msgstr ""
 
-#. type: Content of: <table><tr><td>
-#: src/lessons/welcome/Main.html:18 src/lessons/welcome/Main.html:101 src/lessons/welcome/Main.html:184 src/lessons/welcome/Main.html:264 src/lessons/welcome/Main.html:358 src/lessons/welcome/Main.html:438 src/lessons/welcome/Main.html:478
+#. type: Content of: <h2>
+#: src/lessons/welcome/Main.html:18 src/lessons/welcome/Main.html:101 src/lessons/welcome/Main.html:184 src/lessons/welcome/Main.html:264 src/lessons/welcome/Main.html:358 src/lessons/welcome/Main.html:438 src/lessons/welcome/Main.html:478 src/lessons/welcome/array/basics/Array.html:18
 msgid "Arrays"
 msgstr ""
 
@@ -1614,12 +1592,12 @@ msgid "Buggle Dance Revolution 2"
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/Main.html:322 src/lessons/welcome/slug/hunting/SlugHunting.html:1
+#: src/lessons/welcome/Main.html:322 src/lessons/welcome/slug/SlugHunting.html:1
 msgid "Slug Hunting"
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/Main.html:335 src/lessons/welcome/slug/tracking/SlugTracking.html:1
+#: src/lessons/welcome/Main.html:335 src/lessons/welcome/slug/SlugTracking.html:1
 msgid "Slug Tracking"
 msgstr ""
 
@@ -1628,13 +1606,13 @@ msgstr ""
 msgid "Snake World"
 msgstr ""
 
-#. type: Content of: <h1>
-#: src/lessons/welcome/Main.html:375 src/lessons/welcome/array/basics/Array.html:1
+#. type: Content of: <table><tr><td>
+#: src/lessons/welcome/Main.html:375
 msgid "Knitting and Arrays"
 msgstr ""
 
-#. type: Content of: <h1>
-#: src/lessons/welcome/Main.html:389 src/lessons/welcome/array/basics2/Array2.html:1
+#. type: Content of: <table><tr><td>
+#: src/lessons/welcome/Main.html:389
 msgid "Knitting, Arrays and modulos"
 msgstr ""
 
@@ -1683,6 +1661,20 @@ msgstr ""
 msgid "Concept not mandated by the exercise"
 msgstr ""
 
+#. type: Content of: <p>
+#: src/lessons/welcome/short_desc.html:2
+msgid ""
+"This first lesson will lead your first steps in programming. It is intended "
+"for beginners."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/short_desc.html:5
+msgid ""
+"If you are not sure, go for this lesson that will teach you the bases of "
+"programming."
+msgstr ""
+
 #. type: Content of: outside any tag (error?)
 #: src/lessons/welcome/environment/Environment.html:3
 msgid ""
@@ -1699,7 +1691,7 @@ msgstr ""
 msgid "In this first lesson, the buggles will lead your first steps in programming."
 msgstr ""
 
-#. type: Content of: <p><h3>
+#. type: Content of: <h3>
 #: src/lessons/welcome/environment/Environment.html:11
 msgid "The <i>buggles</i>? What is this??"
 msgstr ""
@@ -1714,16 +1706,16 @@ msgid ""
 "that by checking the difference between the <i>World</i> view and the "
 "<i>Objective</i> one.  Depending on the lessons (and your settings in the "
 "Language menu), your code must be written in either Java, JavaScript, Python "
-"or Ruby."
+"or Ruby (depending on the exercise)."
 msgstr ""
 
-#. type: Content of: <p><h3>
-#: src/lessons/welcome/environment/Environment.html:21
+#. type: Content of: <h3>
+#: src/lessons/welcome/environment/Environment.html:22
 msgid "Working environment"
 msgstr ""
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/environment/Environment.html:23
+#. type: Content of: <p>
+#: src/lessons/welcome/environment/Environment.html:24
 msgid ""
 "Before going any further, get familiar with the working environment. Have a "
 "look at the several elements composing the main window, move your mouse over "
@@ -1735,8 +1727,8 @@ msgid ""
 "Keep posted to the progress of your friends by following @jlmlovers :)"
 msgstr ""
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/environment/Environment.html:32
+#. type: Content of: <p>
+#: src/lessons/welcome/environment/Environment.html:33
 msgid ""
 "If your code contains errors (and code always do at some point), the "
 "computer will display error messages in the console. You obviously have to "
@@ -1747,13 +1739,13 @@ msgid ""
 "cryptic messages. You'll see, with a bit of habit, we get used to it."
 msgstr ""
 
-#. type: Content of: <p><p><h3>
-#: src/lessons/welcome/environment/Environment.html:40
+#. type: Content of: <p><h3>
+#: src/lessons/welcome/environment/Environment.html:41
 msgid "What am I supposed to do?"
 msgstr ""
 
-#. type: Content of: <p><p><p>
-#: src/lessons/welcome/environment/Environment.html:42
+#. type: Content of: <p><p>
+#: src/lessons/welcome/environment/Environment.html:43
 msgid ""
 "It's time to write your first program. Simply ask your buggle to move one "
 "step forward using the Source Code pane. For that, simply write the "
@@ -1762,34 +1754,34 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/environment/Environment.html:46 src/lessons/welcome/basics/Basics.html:50
+#: src/lessons/welcome/environment/Environment.html:47 src/lessons/welcome/basics/Basics.html:50
 #, no-wrap
 msgid "forward();"
 msgstr ""
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/environment/Environment.html:47 src/lessons/welcome/basics/Basics.html:50
+#: src/lessons/welcome/environment/Environment.html:48 src/lessons/welcome/basics/Basics.html:50
 #, no-wrap
 msgid "forward()"
 msgstr ""
 
-#. type: Content of: <p><p><p><p>
-#: src/lessons/welcome/environment/Environment.html:48
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/environment/Environment.html:49
 msgid ""
 "Do not forget the final <code>;</code> which tells the compiler that the "
 "instruction is over (yes, computers are so dumb that they cannot "
 "<i>guess</i> obvious stuff like this)."
 msgstr ""
 
-#. type: Content of: <p><p><p><p>
-#: src/lessons/welcome/environment/Environment.html:52
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/environment/Environment.html:53
 msgid ""
 "Once done, clic on run, and proceed to next exercise using the File menu "
 "entry"
 msgstr ""
 
-#. type: Content of: <p><p><p>
-#: src/lessons/welcome/environment/Environment.html:54
+#. type: Content of: <p><p>
+#: src/lessons/welcome/environment/Environment.html:55
 msgid "(or keep around to experiment further if you feel so)."
 msgstr ""
 
@@ -1947,7 +1939,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h3>
-#: src/lessons/welcome/basics/Basics.html:77 src/lessons/welcome/conditions/Conditions.html:147 src/lessons/welcome/baggleseeker/BaggleSeeker.html:8 src/lessons/welcome/variables/Variables.html:72 src/lessons/welcome/loop/forloop/LoopFor.html:73 src/lessons/welcome/loop/whileloop/LoopWhile.html:26 src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:17 src/lessons/welcome/methods/basics/Methods.html:59 src/lessons/welcome/methods/doghouse/MethodsDogHouse.html:49 src/lessons/welcome/meth [...]
+#: src/lessons/welcome/basics/Basics.html:77 src/lessons/welcome/conditions/Conditions.html:147 src/lessons/welcome/baggleseeker/BaggleSeeker.html:8 src/lessons/welcome/variables/Variables.html:72 src/lessons/welcome/loop/forloop/LoopFor.html:73 src/lessons/welcome/loop/whileloop/LoopWhile.html:26 src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:26 src/lessons/welcome/methods/basics/Methods.html:59 src/lessons/welcome/methods/doghouse/MethodsDogHouse.html:49 src/lessons/welcome/meth [...]
 msgid "Exercise goal"
 msgstr ""
 
@@ -2361,7 +2353,7 @@ msgid ""
 "The buggle world can sometimes contain some <i>baggles</i>, which are little "
 "biscuits that buggles can carry from one point to another. For that, they "
 "have to use specific methods such as <code>isOverBaggle(), "
-"isCarryingBaggle(), pickUpBaggle()</code> or "
+"isCarryingBaggle(), pickupBaggle()</code> or "
 "<code>dropBaggle()</code>. Check their documentation in \"Help/About this "
 "world\" for more details."
 msgstr ""
@@ -2654,22 +2646,59 @@ msgstr ""
 msgid "It's your turn now!"
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/welcome/loop/forloop/LoopFor.html:3
-msgid ""
-"While loops are well adapted to situations where you want to achieve an "
-"action while a condition stays true, but it is less adapted to achieve a "
-"given action a predetermined amount of time. For example, when we wanted to "
-"move <code>stepAmount</code> steps backward in previous exercise, you had to "
-"create a new variable, initialize it, and move backward until the new "
-"variable became equal to <code>stepAmount</code>, incrementing the new "
-"variable manually at the end of the loop."
+#. type: Content of: <h2>
+#: src/lessons/welcome/variables/RunFour.html:1
+msgid "Run Four bases"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/loop/forloop/LoopFor.html:11
+#: src/lessons/welcome/variables/RunFour.html:3
 msgid ""
-"In such situations, <code>for</code> loops become handy. Their syntax is the "
+"Today is a great day for the buggles: the Big Buggles' Race begun. It's a "
+"traditional competition in which young buggles prove their value to the "
+"tribe. Both force and intelligence is exercised: you have to rush forward, "
+"but stop as soon as you reach your fourth baggle.  Please help the buggles "
+"to move forward while counting the baggles and to determine when to stop."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/variables/RunHalf.html:1
+msgid "The Four Halves run"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/variables/RunHalf.html:3
+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>."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/variables/RunHalf.html:8
+msgid ""
+"You can determine whether you are over a orange cell with the "
+"<code>isOverOrange()</code> method."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopFor.html:3
+msgid ""
+"While loops are well adapted to situations where you want to achieve an "
+"action while a condition stays true, but it is less adapted to achieve a "
+"given action a predetermined amount of time. For example, when we wanted to "
+"move <code>stepAmount</code> steps backward in previous exercise, you had to "
+"create a new variable, initialize it, and move backward until the new "
+"variable became equal to <code>stepAmount</code>, incrementing the new "
+"variable manually at the end of the loop."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopFor.html:11
+msgid ""
+"In such situations, <code>for</code> loops become handy. Their syntax is the "
 "following:"
 msgstr ""
 
@@ -2808,6 +2837,82 @@ msgstr ""
 msgid "Once done, proceed to next exercise."
 msgstr ""
 
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/forloop/LoopStairs.html:1
+msgid "Stairway to Heaven"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopStairs.html:3
+msgid ""
+"Your buggle feels a bit depressed today, but it's currently facing a magic "
+"stair: It leads directly to heaven, and each time you walk on it, joyful "
+"colors spur all around."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopStairs.html:6
+msgid ""
+"Your goal is to take this stair, one step after the other.  First devise the "
+"four instructions you have to give you buggle to take one stair step, and "
+"then put them in a loop to take the whole stair."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopStairs.html:10
+msgid ""
+"And before that, walk a bit forward to reach that stair, and ensure that you "
+"are in the right situation for your loop content to run properly. And once "
+"you reach the heaven, take some steps in your new home."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/forloop/LoopCourse.html:1
+msgid "Training Buggle"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopCourse.html:3
+msgid ""
+"Today, your buggle wants to get some serious exercise: It wants to run 'till "
+"the track burns! Its super-shoes are just perfect to run like hell, but "
+"unfortunately, they can actually damage the track on the long run..."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopCourse.html:6
+msgid ""
+"Your goal is to run the track 10 times, no matter what happens.  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."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/forloop/LoopCourseForest.html:1
+msgid "Outdoor Training Buggle"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopCourseForest.html:3
+msgid ""
+"Well, our last training didn't went that well. The track actually burned, "
+"and we are now banned from there.  This time, our buggle decided to practice "
+"outdoor, in the middle of the forest, with its good old shoes instead.  The "
+"problem is that you have to be careful to not fall into water. The track on "
+"which you can run is rather narrow: One side is now 4 steps forward, 2 steps "
+"to the left, 4 steps to the right, 2 steps to the right, 4 steps to the "
+"left, and you want to run 7 around."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/forloop/LoopCourseForest.html:9
+msgid ""
+"Oh crap, running on the grass seems to destroy it too! So just take your 7 "
+"loops around the garden, and move along to the next exercise before anyone "
+"notices the damage you made..."
+msgstr ""
+
 #. type: Content of: <p>
 #: src/lessons/welcome/loop/whileloop/LoopWhile.html:3
 msgid ""
@@ -2882,6 +2987,37 @@ msgid ""
 "  moveForward()"
 msgstr ""
 
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/whileloop/WhileMoria.html:1
+msgid "Lost in the Moria"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/whileloop/WhileMoria.html:3
+msgid ""
+"You buggle got stuck in a mine! Some rocks are blocking the exit, and you "
+"will have to clear your way to the exit. Well of course these are only "
+"baggles and you could simply walk away, but it will be easier to program "
+"your buggle so that it moves those \"rocks\" than convincing your buggle "
+"that it could easily walk away without solving the problem..."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/whileloop/WhileMoria.html:9
+msgid ""
+"So, you have to find the first baggle blocking the exit (simply walk to the "
+"east until you are over a baggle), take it and move it back to the other "
+"side of the tunnel (walk to the west while you are not over a baggle, and "
+"then move back one step to the east and drop your baggle), and iterate until "
+"you find the exit (that is, the wall to the east side). Afterward, move out "
+"as in the objective world."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/whileloop/WhileMoria.html:16
+msgid "Once you manage to escape this trap, move forward to the next exercise."
+msgstr ""
+
 #. type: Content of: <p>
 #: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:3
 msgid ""
@@ -2895,6 +3031,25 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:7
 msgid ""
+"A bad solution would be to duplicate the loop content before the loop, but "
+"code duplication is a <b>very</b> bad habit, and you should always avoid "
+"it. A better solution is to have a dedicated variable indicating whether we "
+"are taking the loop for the first time, as follows:"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:10
+#, no-wrap
+msgid ""
+"firstTime = True\n"
+"while firstTime or (other conditions):\n"
+"  firstTime = False\n"
+"  (loop body)\n"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:16
+msgid ""
 "In a <tt>while</tt> loop, the condition is evaluated before anything else, "
 "and if it's false, the loop body is never evaluated. Sometimes (although not "
 "that often), you would prefer the loop body to get evaluated at least once, "
@@ -2903,7 +3058,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><pre>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:13
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:22
 #, no-wrap
 msgid ""
 "do {\n"
@@ -2911,35 +3066,143 @@ msgid ""
 "} while (<b>condition</b>);"
 msgstr ""
 
-#. type: Content of: <a>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:17
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:27
 msgid ""
-"<a name=\"Objectives\"> Some cells of the world are yellow, but your buggle "
-"cannot stand being in such cells as it is right now. Write the code needed "
-"to move forward until the ground gets white. You can use for that the "
-"isGroundWhite() method, that only the buggle of this exercise knows. The "
-"trick is that even if the ground is white on the first cell, you still want "
-"to move forward to the next cell."
+"Some cells of the world are yellow, but your buggle cannot stand being in "
+"such cells. Write the necessary code to move forward until the ground gets "
+"white. For that, use the provided method <code>isGroundWhite()</code>."
 msgstr ""
 
-#. type: Content of: <a><p>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:23
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:31
+msgid ""
+"The trick is that most buggles of this world are currently on this yellow "
+"ground that they dislike so much. That is why they are in panic, and every "
+"buggle rushes one cell forward, even the buggle that was not on a yellow "
+"cell at first. In other worlds, even if the ground is white on the first "
+"cell, you still want to move forward to the next cell."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:36
 msgid "The general idea is to do something like:"
 msgstr ""
 
-#. type: Content of: <a><p><pre>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:24
+#. type: Content of: <p><pre>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:37
 #, no-wrap
 msgid "move forward until located in a white cell"
 msgstr ""
 
-#. type: Content of: <a><p><p>
-#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:26
+#. type: Content of: <p><p>
+#: src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html:39
 msgid ""
 "<i>Remark:</i> it is also possible to solve this exercise with a classical "
 "<tt>while</tt> loop, but it's not the goal."
 msgstr ""
 
+#. type: Content of: <h2>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:1
+msgid "Tracks of buggles"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:3
+msgid ""
+"Your buggle got lost in a strange maze, and you must help it finding the "
+"exit that is represented in orange.  You cannot simply explain the path to "
+"the exit in something like "
+"<code>turnRight();forward;forward();forward()</code> because you have to "
+"save two buggles at the same time, that are lost in similar but not "
+"identical worlds.  You can switch to the other world by using the combobox "
+"above the world representation (where it's written 'Deep Forest' right now), "
+"and selecting the other entry (that should read 'Deeper Forest')."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:9
+msgid ""
+"The good news is that the path to the exit is written on the ground. As you "
+"can see, the world is made of several corridors, with baggles on the "
+"ground. After each corridor, you should turn left if the corridor contains "
+"three baggels or more, and you have to turn right if there is only 2 baggles "
+"or less."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:13
+msgid ""
+"So, the general form of your code must be something like \"while I did not "
+"find the exit, take the next corridor to decide whether I should turn left "
+"or right at the next intersection\". You can determine whether you are on "
+"the exit cell (that is orange) with the provided <code>exitReached()</code> "
+"method."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:17
+msgid ""
+"To take one corridor, you simply have to run from one intersection to "
+"another while counting the baggles you see on your path. The method "
+"<code>crossing()</code> tells you whether your buggle currently stands on an "
+"intersection.  The extra complexity is that at the beginning of a corridor, "
+"you obviously stand on an intersection, but you still want to move on."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:22
+msgid ""
+"For that, the easiest is to use a <code>do / while</code> loop instead of a "
+"regular <code>while</code> loop to move until the next intersection."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:25
+msgid ""
+"For that, use an extra variable indicating whether you already entered the "
+"corridor, as follows. This will ensure that you execute the loop body at "
+"least once (when <code>firstTime</code> is true)  before we actually use the "
+"value returned by <code>crossing()</code> to determine to continue or not."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:28
+#, no-wrap
+msgid ""
+"firstTime = True\n"
+"while firstTime or not crossing():\n"
+"  firstTime = False\n"
+"  <your body>  \n"
+msgstr ""
+
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:34
+msgid "I cannot imagine how to count the baggles I see."
+msgstr ""
+
+#. type: Content of: <p><div>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:35
+msgid ""
+"You need a variable that is initialized to 0, and incremented each time you "
+"see a baggle on the ground. A variable used this way is often called "
+"<i>accumulator</i>."
+msgstr ""
+
+#. type: Content of: <p><div>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:37
+msgid ""
+"Don't forget to reset your accumulator to 0 at the beginning of each "
+"corridor!"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/loop/dowhileloop/Poucet.html:40
+msgid ""
+"Oh, and when you reach the exit, don't forget to take an extra step to "
+"actually exit the maze!"
+msgstr ""
+
 #. type: Content of: <p>
 #: src/lessons/welcome/methods/basics/Methods.html:4
 msgid ""
@@ -3194,7 +3457,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/methods/doghouse/MethodsDogHouse.html:54 src/lessons/maze/randommouse/RandomMouseMaze.html:41 src/lessons/welcome/array/basics/Array.html:161 src/lessons/welcome/array/basics2/Array2.html:26
+#: src/lessons/welcome/methods/doghouse/MethodsDogHouse.html:54 src/lessons/welcome/array/basics/Array.html:229 src/lessons/welcome/array/basics/Array2.html:30
 msgid "You're up."
 msgstr ""
 
@@ -3682,7 +3945,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/methods/picture3/MethodsPicture3.html:11 src/lessons/welcome/snake/Snake.html:44 src/lessons/welcome/traversal/column/TraversalByColumn.html:49 src/lessons/welcome/traversal/line/TraversalByLine.html:10 src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:10 src/lessons/welcome/traversal/zigzag/TraversalZigZag.html:6
+#: src/lessons/welcome/methods/picture3/MethodsPicture3.html:11 src/lessons/welcome/snake/Snake.html:46 src/lessons/welcome/traversal/column/TraversalByColumn.html:52 src/lessons/welcome/traversal/line/TraversalByLine.html:10 src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html:10 src/lessons/welcome/traversal/zigzag/TraversalZigZag.html:6
 msgid "Your turn..."
 msgstr ""
 
@@ -3712,12 +3975,12 @@ msgid "Good luck!"
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/bdr/basics/BDR.html:1
+#: src/lessons/welcome/bdr/BDR.html:1
 msgid "Buggle Dance Revolution (BDR)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:3
+#: src/lessons/welcome/bdr/BDR.html:3
 msgid ""
 "Today is a great day: we will learn the buggles to play Dance Revolution, "
 "this game beloved of some students where the player has to move its feet on "
@@ -3726,12 +3989,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:8
+#: src/lessons/welcome/bdr/BDR.html:8
 msgid "Conditionals without curly braces"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:10
+#: src/lessons/welcome/bdr/BDR.html:10
 msgid ""
 "There is one detail we omitted about the conditional syntax: if a branch "
 "contains only one instruction, then the curly braces become optional. So, "
@@ -3739,7 +4002,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:14
+#: src/lessons/welcome/bdr/BDR.html:14
 #, no-wrap
 msgid ""
 "if (<b>condition</b>) {\n"
@@ -3750,7 +4013,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:19
+#: src/lessons/welcome/bdr/BDR.html:19
 #, no-wrap
 msgid ""
 "if (<b>condition</b>) \n"
@@ -3760,14 +4023,14 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:24
+#: src/lessons/welcome/bdr/BDR.html:24
 msgid ""
 "But beware, this becomes dangerous if you chain the <tt>if</tt> instructions "
 "like this:"
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:26
+#: src/lessons/welcome/bdr/BDR.html:26
 #, no-wrap
 msgid ""
 "if (isOverBaggle())    \n"
@@ -3779,7 +4042,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:33
+#: src/lessons/welcome/bdr/BDR.html:33
 msgid ""
 "In fact, it does not turn right when there is no baggle on the ground AND x "
 "equals 5, but when the buggle found a baggle on the ground and x equals "
@@ -3789,7 +4052,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:38
+#: src/lessons/welcome/bdr/BDR.html:38
 #, no-wrap
 msgid ""
 "if (isOverBaggle())    \n"
@@ -3801,7 +4064,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:45
+#: src/lessons/welcome/bdr/BDR.html:45
 msgid ""
 "The first lesson of this is that the indentation is very helpful to help "
 "humans understanding, but it's of no importance for the actual meaning of "
@@ -3813,13 +4076,13 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:53
+#: src/lessons/welcome/bdr/BDR.html:53
 #, no-wrap
 msgid "if (isOverBaggle()) if (x == 5) turnLeft(); else turnRight(); forward();"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:55
+#: src/lessons/welcome/bdr/BDR.html:55
 msgid ""
 "The second lesson is that a <tt>else</tt> branch always connects to the "
 "closest <tt>if</tt>. This may be a bit troublesome in some case, and it may "
@@ -3827,17 +4090,17 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:59
+#: src/lessons/welcome/bdr/BDR.html:59
 msgid "Chaining conditionals"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:61
+#: src/lessons/welcome/bdr/BDR.html:61
 msgid "You sometimes want to ask the buggle something similar to:"
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:62
+#: src/lessons/welcome/bdr/BDR.html:62
 #, no-wrap
 msgid ""
 "if it's raining, take an umbrella;\n"
@@ -3846,7 +4109,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:66
+#: src/lessons/welcome/bdr/BDR.html:66
 msgid ""
 "The trap is that we want at most one of these actions to be taken. That is "
 "to say, if it's raining a very hot July 4th, we don't want the buggle to get "
@@ -3855,7 +4118,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:71
+#: src/lessons/welcome/bdr/BDR.html:71
 #, no-wrap
 msgid ""
 "if (rainy()) {\n"
@@ -3870,7 +4133,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:81
+#: src/lessons/welcome/bdr/BDR.html:81
 #, no-wrap
 msgid ""
 "if rainy():\n"
@@ -3882,7 +4145,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:90
+#: src/lessons/welcome/bdr/BDR.html:90
 msgid ""
 "Indeed, since the conditions are evaluated one after the other, there is a "
 "risk that you go to the July 4th march on a rainy day. Instead, we should "
@@ -3890,7 +4153,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:94
+#: src/lessons/welcome/bdr/BDR.html:94
 #, no-wrap
 msgid ""
 "if (rainy()) {\n"
@@ -3907,7 +4170,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:106
+#: src/lessons/welcome/bdr/BDR.html:106
 #, no-wrap
 msgid ""
 "if rainy():\n"
@@ -3921,7 +4184,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:117
+#: src/lessons/welcome/bdr/BDR.html:117
 msgid ""
 "Such a cascade of conditionals are quite difficult to read, and it is better "
 "to omit the curly braces for the <tt>else</tt> statements. Some languages "
@@ -3930,7 +4193,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:121
+#: src/lessons/welcome/bdr/BDR.html:121
 #, no-wrap
 msgid ""
 "if (rainy()) {\n"
@@ -3943,7 +4206,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:129
+#: src/lessons/welcome/bdr/BDR.html:129
 msgid ""
 "Such a cascade of conditionals are quite difficult to read, and it is better "
 "to omit extra indentation for the <tt>else</tt> statements. In Python, there "
@@ -3951,7 +4214,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><pre>
-#: src/lessons/welcome/bdr/basics/BDR.html:132
+#: src/lessons/welcome/bdr/BDR.html:132
 #, no-wrap
 msgid ""
 "if rainy():\n"
@@ -3963,40 +4226,40 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:140
+#: src/lessons/welcome/bdr/BDR.html:140
 msgid "Graffitis in the Buggle World"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/basics/BDR.html:142
+#: src/lessons/welcome/bdr/BDR.html:142
 msgid ""
 "Buggles can write graffitis on the ground of their world. For that, they use "
 "the four following methods:"
 msgstr ""
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:146
+#: src/lessons/welcome/bdr/BDR.html:146
 msgid ""
 "<code>boolean isOverMessage()</code>: returns <code>true</code> if and only "
 "if there is a message on the ground."
 msgstr ""
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:148
+#: src/lessons/welcome/bdr/BDR.html:148
 msgid ""
 "<code>boolean isOverMessage()</code>: returns <code>True</code> if and only "
 "if there is a message on the ground."
 msgstr ""
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:150
+#: src/lessons/welcome/bdr/BDR.html:150
 msgid ""
 "<code>String readMessage()</code>: returns the message written on the ground "
 "(or an empty string if nothing is written)."
 msgstr ""
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:152
+#: src/lessons/welcome/bdr/BDR.html:152
 msgid ""
 "<code>void writeMessage(String msg)</code>: writes the specified message "
 "down on the ground. If there is already a message on the ground, the new "
@@ -4004,12 +4267,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><ul><li>
-#: src/lessons/welcome/bdr/basics/BDR.html:155
+#: src/lessons/welcome/bdr/BDR.html:155
 msgid "<code>void clearMessage()</code>: clears what is written on the ground."
 msgstr ""
 
 #. type: Content of: <p><a>
-#: src/lessons/welcome/bdr/basics/BDR.html:159
+#: src/lessons/welcome/bdr/BDR.html:159
 msgid ""
 "<a name=\"Objectives\">The goal is then to organize a BDR game between the "
 "buggles by learning them to move according to the instructions written on "
@@ -4018,186 +4281,186 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:165 src/lessons/welcome/bdr/extended/BDR2.html:127
+#: src/lessons/welcome/bdr/BDR.html:165 src/lessons/welcome/bdr/BDR2.html:127
 msgid "Message"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:166 src/lessons/welcome/bdr/extended/BDR2.html:128
+#: src/lessons/welcome/bdr/BDR.html:166 src/lessons/welcome/bdr/BDR2.html:128
 msgid "What to do"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:167
+#: src/lessons/welcome/bdr/BDR.html:167
 msgid "Mnemonic"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:169 src/lessons/welcome/bdr/extended/BDR2.html:130 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:30 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:33
+#: src/lessons/welcome/bdr/BDR.html:169 src/lessons/welcome/bdr/BDR2.html:130 src/lessons/turmites/turmitecreator/TurmiteCreator.html:30 src/lessons/turmites/turmitecreator/TurmiteCreator.html:33
 msgid "R"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:169 src/lessons/welcome/bdr/extended/BDR2.html:130
+#: src/lessons/welcome/bdr/BDR.html:169 src/lessons/welcome/bdr/BDR2.html:130
 msgid "Turn right and move one step forward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:169
+#: src/lessons/welcome/bdr/BDR.html:169
 msgid "Right"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:170 src/lessons/welcome/bdr/extended/BDR2.html:131
+#: src/lessons/welcome/bdr/BDR.html:170 src/lessons/welcome/bdr/BDR2.html:131
 msgid "L"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:170 src/lessons/welcome/bdr/extended/BDR2.html:131
+#: src/lessons/welcome/bdr/BDR.html:170 src/lessons/welcome/bdr/BDR2.html:131
 msgid "Turn left and move one step forward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:170
+#: src/lessons/welcome/bdr/BDR.html:170
 msgid "Left"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:171 src/lessons/welcome/bdr/extended/BDR2.html:132
+#: src/lessons/welcome/bdr/BDR.html:171 src/lessons/welcome/bdr/BDR2.html:132
 msgid "I"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:171
+#: src/lessons/welcome/bdr/BDR.html:171
 msgid "Turn back (U-turn) and move one step forward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:171
+#: src/lessons/welcome/bdr/BDR.html:171
 msgid "Inverse"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:173 src/lessons/welcome/bdr/extended/BDR2.html:134
+#: src/lessons/welcome/bdr/BDR.html:173 src/lessons/welcome/bdr/BDR2.html:134
 msgid "A"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:173 src/lessons/welcome/bdr/extended/BDR2.html:134
+#: src/lessons/welcome/bdr/BDR.html:173 src/lessons/welcome/bdr/BDR2.html:134
 msgid "Move one step forward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:173
+#: src/lessons/welcome/bdr/BDR.html:173
 msgid "First letter of the alphabet"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:174 src/lessons/welcome/bdr/extended/BDR2.html:135
+#: src/lessons/welcome/bdr/BDR.html:174 src/lessons/welcome/bdr/BDR2.html:135
 msgid "B"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:174 src/lessons/welcome/bdr/extended/BDR2.html:135
+#: src/lessons/welcome/bdr/BDR.html:174 src/lessons/welcome/bdr/BDR2.html:135
 msgid "Move two steps forward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:174
+#: src/lessons/welcome/bdr/BDR.html:174
 msgid "Second letter of the alphabet"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:175 src/lessons/welcome/bdr/extended/BDR2.html:136
+#: src/lessons/welcome/bdr/BDR.html:175 src/lessons/welcome/bdr/BDR2.html:136
 msgid "C"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:175 src/lessons/welcome/bdr/extended/BDR2.html:136
+#: src/lessons/welcome/bdr/BDR.html:175 src/lessons/welcome/bdr/BDR2.html:136
 msgid "Move three steps forward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:175
+#: src/lessons/welcome/bdr/BDR.html:175
 msgid "Third letter of the alphabet"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:177 src/lessons/welcome/bdr/extended/BDR2.html:141
+#: src/lessons/welcome/bdr/BDR.html:177 src/lessons/welcome/bdr/BDR2.html:141
 msgid "Z"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:177 src/lessons/welcome/bdr/extended/BDR2.html:141
+#: src/lessons/welcome/bdr/BDR.html:177 src/lessons/welcome/bdr/BDR2.html:141
 msgid "Move one step backward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:177
+#: src/lessons/welcome/bdr/BDR.html:177
 msgid "One letter before the end of the alphabet"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:178 src/lessons/welcome/bdr/extended/BDR2.html:142
+#: src/lessons/welcome/bdr/BDR.html:178 src/lessons/welcome/bdr/BDR2.html:142
 msgid "Y"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:178 src/lessons/welcome/bdr/extended/BDR2.html:142
+#: src/lessons/welcome/bdr/BDR.html:178 src/lessons/welcome/bdr/BDR2.html:142
 msgid "Move two steps backward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:178
+#: src/lessons/welcome/bdr/BDR.html:178
 msgid "Two letters before the end of the alphabet"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:179 src/lessons/welcome/bdr/extended/BDR2.html:143
+#: src/lessons/welcome/bdr/BDR.html:179 src/lessons/welcome/bdr/BDR2.html:143
 msgid "X"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:179 src/lessons/welcome/bdr/extended/BDR2.html:143
+#: src/lessons/welcome/bdr/BDR.html:179 src/lessons/welcome/bdr/BDR2.html:143
 msgid "Move three steps backward"
 msgstr ""
 
 #. type: Content of: <p><a><table><tr><td>
-#: src/lessons/welcome/bdr/basics/BDR.html:179
+#: src/lessons/welcome/bdr/BDR.html:179
 msgid "Three letters before the end of the alphabet"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:182 src/lessons/welcome/bdr/extended/BDR2.html:149
+#: src/lessons/welcome/bdr/BDR.html:182 src/lessons/welcome/bdr/BDR2.html:149
 msgid "In any other case, you should stop"
 msgstr ""
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:184
+#: src/lessons/welcome/bdr/BDR.html:184
 msgid ""
 "Write the code of the dance in the <code>run()</code> method which prototype "
 "is already in the editor."
 msgstr ""
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:187
+#: src/lessons/welcome/bdr/BDR.html:187
 msgid "Write the code of the dance directly in the editor, out of any function."
 msgstr ""
 
 #. type: Content of: <p><a><h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:190
+#: src/lessons/welcome/bdr/BDR.html:190
 msgid "Indications"
 msgstr ""
 
 #. type: Content of: <p><a>
-#: src/lessons/welcome/bdr/basics/BDR.html:192
+#: src/lessons/welcome/bdr/BDR.html:192
 msgid ""
 "This exercise may seem a bit complex at the first glance, but it comes down "
 "to summarizing the information above in a sequence of conditionals."
 msgstr ""
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:197
+#: src/lessons/welcome/bdr/BDR.html:197
 msgid ""
 "The first subtlety is that we use the <code>char getIndication()</code> "
 "instead of <code>String readMessage()</code>. This method, only known by the "
@@ -4206,7 +4469,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:202
+#: src/lessons/welcome/bdr/BDR.html:202
 msgid ""
 "The other subtlety is to keep working as long as there is some work to do, "
 "i.e., as long as we did not find a cell which content is not described in "
@@ -4219,7 +4482,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:209
+#: src/lessons/welcome/bdr/BDR.html:209
 msgid ""
 "The other subtlety is to keep working as long as there is some work to do, "
 "i.e., as long as we did not find a cell which content is not described in "
@@ -4232,7 +4495,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:217
+#: src/lessons/welcome/bdr/BDR.html:217
 msgid ""
 "The functions having <code>void</code> as return type can contain some "
 "<tt>return</tt> without any associated value. It interrupts immediately "
@@ -4240,12 +4503,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><a><h3>
-#: src/lessons/welcome/bdr/basics/BDR.html:221
+#: src/lessons/welcome/bdr/BDR.html:221
 msgid "Tips and Hints"
 msgstr ""
 
 #. type: Content of: <p><a>
-#: src/lessons/welcome/bdr/basics/BDR.html:223
+#: src/lessons/welcome/bdr/BDR.html:223
 msgid ""
 "If you fail understanding why the buggle does not execute the expected "
 "steps, try adding <code>brushDown()</code> in your method. This asks the "
@@ -4256,17 +4519,17 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><a><p>
-#: src/lessons/welcome/bdr/basics/BDR.html:230
+#: src/lessons/welcome/bdr/BDR.html:230
 msgid "When your program finally works, move on to the next exercise."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/bdr/extended/BDR2.html:1
+#: src/lessons/welcome/bdr/BDR2.html:1
 msgid "Buggle Dance Revolution 2 (BDR2)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:3
+#: src/lessons/welcome/bdr/BDR2.html:3
 msgid ""
 "BDR is cool, but it's a bit chaotic. First, the buggles giggle in any "
 "directions, and then the code you had to write to let them move is rather "
@@ -4276,19 +4539,19 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><h3>
-#: src/lessons/welcome/bdr/extended/BDR2.html:9
+#: src/lessons/welcome/bdr/BDR2.html:9
 msgid "<tt>switch</tt> conditionals"
 msgstr ""
 
 #. type: Content of: <p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:12
+#: src/lessons/welcome/bdr/BDR2.html:12
 msgid ""
 "The hardest part of previous code is certainly the conditional "
 "cascading. Somewhere in your code, you certainly had something similar to:"
 msgstr ""
 
 #. type: Content of: <p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:15
+#: src/lessons/welcome/bdr/BDR2.html:15
 #, no-wrap
 msgid ""
 "if (getIndication() == 'R') {\n"
@@ -4307,7 +4570,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:31
+#: src/lessons/welcome/bdr/BDR2.html:31
 msgid ""
 "When you review this code, it may not be clear at the first glance that it "
 "is simply a choice with 4 branches depending on the value of "
@@ -4316,7 +4579,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:37
+#: src/lessons/welcome/bdr/BDR2.html:37
 #, no-wrap
 msgid ""
 "switch (<b>expression</b>) {\n"
@@ -4336,7 +4599,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:53
+#: src/lessons/welcome/bdr/BDR2.html:53
 msgid ""
 "Observe that each branch of a <tt>switch</tt> must be ended by a "
 "<code>break</code>. If you forget this, the machine keeps going and execute "
@@ -4345,14 +4608,14 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:58
+#: src/lessons/welcome/bdr/BDR2.html:58
 msgid ""
 "It is then possible to rewrite previous BDR code in a cleaner way using the "
 "<tt>switch</tt> construct:"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:61
+#: src/lessons/welcome/bdr/BDR2.html:61
 #, no-wrap
 msgid ""
 "switch (getIndication()) {\n"
@@ -4374,31 +4637,31 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><p><h2>
-#: src/lessons/welcome/bdr/extended/BDR2.html:79
+#: src/lessons/welcome/bdr/BDR2.html:79
 msgid "Variables shared between methods"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:82
+#: src/lessons/welcome/bdr/BDR2.html:82
 msgid ""
 "Another issue in your code is that it begins to be a bit long to be written "
 "as a single method. We would like to split it up in two methods:"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><ul><li>
-#: src/lessons/welcome/bdr/extended/BDR2.html:85
+#: src/lessons/welcome/bdr/BDR2.html:85
 msgid "<code>danceOneStep()</code> would take care of achieving a single dance step"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><ul><li>
-#: src/lessons/welcome/bdr/extended/BDR2.html:86
+#: src/lessons/welcome/bdr/BDR2.html:86
 msgid ""
 "<code>run()</code> would take care of the dance as a whole. It would do the "
 "steps while we didn't encounter a cell not asking any further move."
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:90
+#: src/lessons/welcome/bdr/BDR2.html:90
 msgid ""
 "The difficulty is to make sure that <tt>danceOneStep()</tt> keeps "
 "<tt>run()</tt> informed that there is no further dance step to achieve. The "
@@ -4408,13 +4671,13 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:95
+#: src/lessons/welcome/bdr/BDR2.html:95
 #, no-wrap
 msgid "boolean moreMusic = true;"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:97
+#: src/lessons/welcome/bdr/BDR2.html:97
 msgid ""
 "Note that it is possible to write variable declarations out of any methods, "
 "but that instructions must be in a method. In Java such <i>global</i> "
@@ -4422,7 +4685,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:101
+#: src/lessons/welcome/bdr/BDR2.html:101
 msgid ""
 "Then, the <tt>danceOneStep()</tt> must be changed to update this variable to "
 "<tt>false</tt> when there is nothing more to do. For that, simply add "
@@ -4430,12 +4693,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:105
+#: src/lessons/welcome/bdr/BDR2.html:105
 msgid "It is then possible to use the following <tt>run()</tt> method:"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><pre>
-#: src/lessons/welcome/bdr/extended/BDR2.html:106
+#: src/lessons/welcome/bdr/BDR2.html:106
 #, no-wrap
 msgid ""
 "public void run() {\n"
@@ -4445,17 +4708,17 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <a>
-#: src/lessons/welcome/bdr/extended/BDR2.html:111 src/lessons/maze/randommouse/RandomMouseMaze.html:23
+#: src/lessons/welcome/bdr/BDR2.html:111 src/lessons/maze/randommouse/RandomMouseMaze.html:24
 msgid "<a name=\"Objectives\">"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:112
+#: src/lessons/welcome/bdr/BDR2.html:112
 msgid "Apply the improvement we just saw to rewrite your buggle code."
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:114
+#: src/lessons/welcome/bdr/BDR2.html:114
 msgid ""
 "You don't have to write the <tt>run()</tt> method since the buggle already "
 "know it. If you put it anyway, the compiler will complain about this "
@@ -4465,187 +4728,200 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:120
+#: src/lessons/welcome/bdr/BDR2.html:120
 msgid ""
 "This dance step is slightly more complex but actually better looking. Beside "
 "of that, that's the same old story."
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:123
+#: src/lessons/welcome/bdr/BDR2.html:123
 msgid ""
 "Here are the ground indications to use for BDR2. Note that we can now move a "
 "buggle up to 6 cells in one dance step."
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:132
+#: src/lessons/welcome/bdr/BDR2.html:132
 msgid "Turn back and move one step forward"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:137
+#: src/lessons/welcome/bdr/BDR2.html:137
 msgid "D"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:137
+#: src/lessons/welcome/bdr/BDR2.html:137
 msgid "Move four cells forward"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:138
+#: src/lessons/welcome/bdr/BDR2.html:138
 msgid "E"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:138
+#: src/lessons/welcome/bdr/BDR2.html:138
 msgid "Move five cells forward"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:139
+#: src/lessons/welcome/bdr/BDR2.html:139
 msgid "F"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:139
+#: src/lessons/welcome/bdr/BDR2.html:139
 msgid "Move six cells forward"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:144
+#: src/lessons/welcome/bdr/BDR2.html:144
 msgid "W"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:144
+#: src/lessons/welcome/bdr/BDR2.html:144
 msgid "Move four cells backward"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:145
+#: src/lessons/welcome/bdr/BDR2.html:145
 msgid "V"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:145
+#: src/lessons/welcome/bdr/BDR2.html:145
 msgid "Move five cells backward"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:146
+#: src/lessons/welcome/bdr/BDR2.html:146
 msgid "U"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><table><tr><td>
-#: src/lessons/welcome/bdr/extended/BDR2.html:146
+#: src/lessons/welcome/bdr/BDR2.html:146
 msgid "Move six cells backward"
 msgstr ""
 
 #. type: Content of: <p><p><p><p><p><p><p><p><a><p><p>
-#: src/lessons/welcome/bdr/extended/BDR2.html:151
+#: src/lessons/welcome/bdr/BDR2.html:151
 msgid "When you program works again, proceed to next exercise."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:4
+#: src/lessons/welcome/slug/SlugHunting.html:3
 msgid ""
-"After all this excitation of dance revolution, we will move on to a slower "
-"activity : the slug hunting. Your buggle just happened to found the trail of "
-"a slug: a green dribbling tracks. If it manage to follow it to its end, it "
-"will find a baggle representing an appetizing slug (from a buggle point of "
-"view)."
+"Now that your <code>isFacingTrail()</code> method is working, it's time to "
+"write the code to organize the hunting party. Copy/paste your code from the "
+"previous exercise, and complete the <code>hunt()</code> method."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:12
+#: src/lessons/welcome/slug/SlugHunting.html:7
 msgid ""
-"To reach that goal, you have a boolean method <tt>isFacingTrail</tt>, which "
-"determine whether we are facing a green cell or not. Of course, if we are "
-"facing a wall, it returns false.In addition, this method preserve the state "
-"of the calling buggle and of the world. Such a method is said to have no "
-"<b>side effect</b>."
+"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."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:20
+#: src/lessons/welcome/slug/SlugHunting.html:11
 msgid ""
-"It takes the color of the trail we want to follow as an argument. Slugs "
-"leave green trails, but other prey leave trails of other colors. In Java, "
-"there is a <i>data type</i> <tt>Color</tt> to indicate the colors. The green "
-"color is defined by <code>Color.green</code>."
+"To ensure that you don't mix the track you come from with the one in front "
+"of you, the easier is to erase the track when you follow it. Use the method "
+"<code>brushDown()</code> to put your brush down and mark the ground, and "
+"<code>brushUp()</code> to move it up again."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:25
+#: src/lessons/welcome/slug/SlugHunting.html:15
+msgid ""
+"Finally, do not forget to capture your prey once you found it (using "
+"<code>pickupBaggle()</code>)."
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/slug/SlugHunting.html:19
 msgid ""
-"In order to hunt your prey, you should not mistake the part of the tracks to "
-"follow with the one your buggle comes from, you should ask your buggle to "
-"leave a tracks behind it. Don't forget to use the <code>brushDown()</code> "
-"method to put your brush down and <code>brushUp()</code> to move it up "
-"again."
+"<a name=\"Objectives\"> Complete the <code>hunt()</code> method. You "
+"probably want to copy over the <code>isFacingTrail()</code> method that you "
+"wrote in previous exercise.  </a>"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:30
+#: src/lessons/welcome/slug/SlugTracking.html:3
 msgid ""
-"A buggle can know the color of the cell it is over using the <code>Color "
-"getGroundColor()</code> method."
+"Your buggle is super happy! It just found the green dribbling trail, "
+"certainly left by a big yummy slug.  At its end, the buggle is certain to "
+"entertain itself with this appetizing slug (represented as a baggle)."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:33
+#: src/lessons/welcome/slug/SlugTracking.html:7
 msgid ""
-"Finally, do not forget to capture your prey once you found it (using "
-"<code>pickUpBaggle()</code>)."
+"To reach that goal, you had to write a boolean method "
+"<tt>isFacingTrail</tt>, which determines whether we are facing a green cell "
+"or not. Of course, if we are facing a wall, it should return false without "
+"bumping into it. You should make sure that this method has no <b>side "
+"effect</b>, i.e. that it does not change the state of the calling buggle nor "
+"of its world."
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/slug/hunting/SlugHunting.html:38
+#. type: Content of: <p>
+#: src/lessons/welcome/slug/SlugTracking.html:12
 msgid ""
-"<a name=\"Objectives\"> Complete the <code>hunt()</code> method (which gets "
-"called by <code>run()</code> automatically). You should use the "
-"<code>isFacingTrail()</code> method that is provided.  </a>"
+"Your tool to that end is the <code>getGroundColor()</code> that returns the "
+"color of the current cell. Just go to the cell you want to test and run that "
+"function. You cannot test whether this color is equal to "
+"<code>Color.green</code> with an <code>==</code> sign but instead you have "
+"to write something like "
+"<code>getGroundColor().equals(Color.green)</code>. This is because green is "
+"an <i>object</i> in Java, and <code>.equals()</code> is the way to go to "
+"test equality between Java objects."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:3
+#: src/lessons/welcome/slug/SlugTracking.html:18
 msgid ""
-"After all this excitation of slug hunting, we will have to learn how to "
-"track their trail. Your buggle just happened to found the trail of a slug: a "
-"green dribbling tracks. If it manage to follow it to its end, it will find a "
-"baggle representing an appetizing slug (from a buggle point of view)."
+"Your tool to that end is the <code>getGroundColor()</code> that returns the "
+"color of the current cell. Just go to the cell you want to test and run that "
+"function."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:9
+#: src/lessons/welcome/slug/SlugTracking.html:22
 msgid ""
-"To reach that goal, you had to write the previously given boolean method "
-"<tt>isFacingTrail</tt>, which should determine whether we are facing a green "
-"cell or not. Of course, if we are facing a wall, it should return false. It "
-"would be great if this method could have no <b>side effect</b>.  on the "
-"calling buggle and on the world."
+"Complete the <code>isFacingTrail()</code> method (which gets called "
+"automatically)."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/slug/SlugSnail.html:1
+msgid "Slugs and Snails"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:15
+#: src/lessons/welcome/slug/SlugSnail.html:3
 msgid ""
-"Remember that this method takes the color of the trail we want to follow as "
-"an argument. Slugs leave green trails, but other prey leave trails of other "
-"colors. In Java, there is a <i>data type</i> <tt>Color</tt> to indicate the "
-"colors. The green color is defined by <code>Color.green</code>."
+"Yuhu! This time, your buggle found the tracks of much more preys! In the "
+"first world, that's a yummy Kitty Slug (leaving a pink trail) while on the "
+"second world, that's a big fat snail that awaits your buggle at the end of "
+"the orange trail."
 msgstr ""
 
-#. type: Content of: <a>
-#: src/lessons/welcome/slug/tracking/SlugTracking.html:21
+#. type: Content of: <p>
+#: src/lessons/welcome/slug/SlugSnail.html:7
 msgid ""
-"<a name=\"Objectives\">Complete the <code>isFacingTrail()</code> method "
-"(which gets called by <code>hunt()</code> automatically). You don't have to "
-"write the <code>hunt()</code> method."
+"You have to copy/paste your code again, and change it so that your methods "
+"take the color of the trail to follow as a parameter. Beside of this, your "
+"code should work as earlier."
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:3
 msgid ""
 "We will now teach the buggle to explore its world. Its initial position is "
@@ -4663,7 +4939,7 @@ msgid ""
 "   move like a snake\n"
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:13
 msgid "The prototype of this method (its first line) must be:"
 msgstr ""
@@ -4674,7 +4950,7 @@ msgstr ""
 msgid "public void run()"
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
+#. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:15
 msgid ""
 "(we will come back later on the meaning of <code>public</code>). We thus "
@@ -4685,15 +4961,15 @@ msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:20
-msgid "We reached the final position if and only if:"
+msgid "We reached the final position if and only if both conditions are true:"
 msgstr ""
 
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/welcome/snake/Snake.html:22
 msgid "We are facing a wall"
 msgstr ""
 
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/welcome/snake/Snake.html:23
 msgid ""
 "There is a wall on the north of the buggle. So, if the buggle is facing "
@@ -4701,7 +4977,7 @@ msgid ""
 "buggle is facing west, you should check on the right side."
 msgstr ""
 
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/welcome/snake/Snake.html:26
 msgid ""
 "We can get the current heading of the buggle using the "
@@ -4709,7 +4985,7 @@ msgid ""
 "<code>getDirection() == Direction.EAST</code> (WEST for west)."
 msgstr ""
 
-#. type: Content of: <p><ul><li>
+#. type: Content of: <ul><li>
 #: src/lessons/welcome/snake/Snake.html:29
 msgid ""
 "For the checking itself, nothing magical: you have to turn the buggle and "
@@ -4731,25 +5007,37 @@ msgid ""
 "testing function returns false. Their is thus two way of writing it:"
 msgstr ""
 
-#. type: Content of: <p><pre>
+#. type: Content of: <pre>
 #: src/lessons/welcome/snake/Snake.html:39
 #, no-wrap
 msgid "while (testingFunction() == false)"
 msgstr ""
 
-#. type: Content of: <p>
+#. type: Content of: <pre>
 #: src/lessons/welcome/snake/Snake.html:40
-msgid "or"
+#, no-wrap
+msgid "while testingFunction() == False:"
 msgstr ""
 
-#. type: Content of: <p><pre>
+#. type: Content of: <p>
 #: src/lessons/welcome/snake/Snake.html:41
+msgid "or"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/welcome/snake/Snake.html:42
 #, no-wrap
 msgid "while (! testingFunction())"
 msgstr ""
 
+#. type: Content of: <pre>
+#: src/lessons/welcome/snake/Snake.html:43
+#, no-wrap
+msgid "while not testingFunction():"
+msgstr ""
+
 #. type: Content of: <p>
-#: src/lessons/welcome/snake/Snake.html:42
+#: src/lessons/welcome/snake/Snake.html:44
 msgid "It works because the exclamation mark (!) means in Java a boolean negation."
 msgstr ""
 
@@ -4767,8 +5055,13 @@ msgid ""
 "something like:"
 msgstr ""
 
-#. type: Content of: <p><pre>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:9
+#. type: Content of: <p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:8
+msgid "The main loop of your code should be something like:"
+msgstr ""
+
+#. type: Content of: <p><p><p><p><p><pre>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:10
 #, no-wrap
 msgid ""
 " while we are not on the final position\n"
@@ -4776,19 +5069,19 @@ msgid ""
 "   label the cell with its number\n"
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:14
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:15
 msgid ""
 "In contrary to the exercises we saw so far, we won't use the "
 "<code>forward()</code>, <code>backward()</code> and similar "
 "methods. Instead, we will compute the coordinate of the next buggle position "
-"and use the <code>setPos(int, int)</code> method to <i>teleport</i> the "
-"buggle directly to this position. For example, <code>setPos(3, 5)</code> "
-"teleports the buggle to the cell where x=3 and y=5."
+"and use the <code>setPos(x, y)</code> method to <i>teleport</i> the buggle "
+"directly to this position. For example, <code>setPos(3, 5)</code> teleports "
+"the buggle to the cell where x=3 and y=5."
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:21
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:22
 msgid ""
 "Your first task is thus to write a boolean function indicating whether the "
 "buggle the final position or not, ie if it reached the bottom right corner "
@@ -4799,13 +5092,13 @@ msgid ""
 "world dimensions."
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:28
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:29
 msgid "Beware, the first line and column are numbered 0 and not 1..."
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:30
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:31
 msgid ""
 "Then, you have to write the code to reach the next position. In this "
 "exercise, you have to traverse the world row after row. So, if you are at "
@@ -4813,32 +5106,39 @@ msgid ""
 "to move to the cell below else."
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:35
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:36
 msgid ""
 "At this point, you can launch your program to check that the buggle "
 "correctly traverse the world in the expected order, and that it stops when "
 "it has to. Use the <b>stop</b> button if the buggle does not stop correctly."
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:39
+#. type: Content of: <p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:40
 msgid ""
 "It is now time to write done the cell numbers. For that, you will need a "
 "counter initialiser to zero at the begining of your <code>run()</code> "
-"method, and incremented by one at each step (for example with "
-"<code>counter++;</code>). Then, you have to write the value on the ground, "
-"for example with <code>writeMessage(counter);</code>."
+"method, and incremented by one at each step (for example with <code>counter "
+"+= 1;</code>). Then, you have to write the value on the ground, for example "
+"with <code>writeMessage(counter);</code>."
 msgstr ""
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/traversal/column/TraversalByColumn.html:45
+#. type: Content of: <p><p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:46
 msgid ""
 "You probably need to write the first or last value out of the main loop, "
 "depending on whether you prefer to use a <code>while {}</code> or a <code>do "
 "{} while</code>..."
 msgstr ""
 
+#. type: Content of: <p><p><p><p><p><p>
+#: src/lessons/welcome/traversal/column/TraversalByColumn.html:50
+msgid ""
+"You may want to write the first value out of the main <code>while "
+"...:</code> loop."
+msgstr ""
+
 #. type: Content of: outside any tag (error?)
 #: src/lessons/welcome/traversal/line/TraversalByLine.html:3
 msgid ""
@@ -4872,106 +5172,167 @@ msgid ""
 "world for more details on the requested traversal order."
 msgstr ""
 
-#. type: Content of: <h2>
-#: src/lessons/welcome/turmites/langton/Langton.html:1
-msgid "Langton's ant"
+#. type: Content of: <h3>
+#: src/lessons/turmites/Main.html:1 src/lessons/turmites/short_desc.html:1
+msgid "The turmites"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:3
+#: src/lessons/turmites/Main.html:3
 msgid ""
-"In this exercise, you will turn your buggle into a <i>Langton's "
-"ant</i>. These artificial little animals are very interesting because they "
-"are given simple rules that depend only on their local environment, and "
-"after a period of apparent chaotic behavior, a general pattern "
-"<i>emerges</i>."
+"This set of activities lets you play with Langton's ants, that are 2D turing "
+"machines. They constitute very simple application problems, achievable by "
+"beginners, and open the door to an amazing world."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:8
+#: src/lessons/turmites/Main.html:7
 msgid ""
-"The rules are absolutely trivial: to compute what the next step should be, "
-"you should check the current color of the ground (using "
-"<code>getGroundColor()</code>). If it's white, change it to black, turn "
-"right and move forward by one cell. If the ground is currently black, change "
-"it to white, turn left and move forward by one cell."
+"This mechanism were invented in 1986 by Chris Langton, and later generalized "
+"in several ways (as we shall see in the next exercises). It was proven in "
+"2000 that the ant's trajectory can be used to compute any boolean circuit, "
+"and thus that the ant is capable of universal computation (ie, any possible "
+"computation can be achieved using the ant as a computing device). Yet "
+"another subject of fascination..."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:14
+#: src/lessons/turmites/Main.html:13
 msgid ""
-"It's hard to come up with simpler rules isn't it? Well, let's go and code it "
-"now. You have to complete the <code>step()</code> method, which encodes the "
-"behavior of the ant at each step. You will probably use the "
-"<code>getGroundColor()</code> method to retrieve the color of the cell on "
-"which the ant is currently. To compare colors, you cannot use the equal sign "
-"(=), because these things are not scalar values but objects. Instead, you "
-"need to write something like the following:"
+"Multicolor Langton's ants were discovered in 1995 by Propp et Al. Another "
+"funny fact is that the ants which name is a list of consecutive pair of "
+"identical letters (LL and RR) produce symmetric patterns. This fact was even "
+"formally proved."
 msgstr ""
 
-#. type: Content of: <pre>
-#: src/lessons/welcome/turmites/langton/Langton.html:22
-#, no-wrap
+#. type: Content of: <p>
+#: src/lessons/turmites/Main.html:18
 msgid ""
-"Color c /* = some initialization */;\n"
-"if (c.equals(Color.black)) {\n"
-"  /* that's equal */\n"
-"} else {\n"
-"  /* that was not equal */\n"
-"}\n"
+"Check the corresponding wikipedia web page, of which this exercise is "
+"inspired, for further details."
+msgstr ""
+
+#. type: Content of: <h3>
+#: src/lessons/turmites/Main.html:21 src/lessons/sort/pancake/Main.html:29 src/lessons/sort/baseball/Main.html:27
+msgid "What can I do to improve this JLM universe?"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:30
+#: src/lessons/turmites/Main.html:23 src/lessons/sort/pancake/Main.html:31 src/lessons/sort/baseball/Main.html:29
 msgid ""
-"Changing the ground color is not difficult, but a bit long: you have to "
-"change the brush color of your buggle, set the brush down (to mark the "
-"current cell -- with <code>brushDown()</code>), and set the brush back up "
-"(with <code>brushUp()</code>) to avoid further issues when the buggle will "
-"move. You are naturally free of organizing your code the way you want, but "
-"you may want to write a <code>void setGroundColor(Color c)</code> method to "
-"factorize things a bit."
+"As usual, there are several things that could be done in the code of this "
+"universe to improve it:"
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/turmites/Main.html:25
+msgid ""
+"We are probably missing some good exercises. The turmite creator exercise is "
+"a bit harsh: we could introduce the patterns in a more friendly manner."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/turmites/Main.html:27
+msgid "We may want to write an exercise on the busy beaver, maybe?"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/short_desc.html:2
+msgid "Discover the Langton's ants, that are 2D turing machines."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/short_desc.html:4
+msgid ""
+"These activities are very simple application problems, achievable by "
+"beginners, and open the door to an amazing world."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/langton/Langton.html:38
-msgid "More information on Langton's ant"
+#: src/lessons/turmites/langton/Langton.html:1
+msgid "Langton's ant"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:40
+#: src/lessons/turmites/langton/Langton.html:3
 msgid ""
-"As you can see from the execution of this exercise, the interest in this "
-"algorithm is that after about 10000 steps of relative chaotic behavior, the "
-"ant start building a regular pattern. This emergence of a regular pattern "
-"from the chaos is rather fascinating, isn't it?"
+"In this exercise, you will turn your buggle into a <i>Langton's "
+"ant</i>. These artificial little animals are very interesting because they "
+"are given simple rules that depend only on their local environment, and "
+"after a period of apparent chaotic behavior, a general pattern "
+"<i>emerges</i>."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:45
+#: src/lessons/turmites/langton/Langton.html:8
 msgid ""
-"This mechanism were invented in 1986 by Chris Langton, and later generalized "
-"in several ways (as we shall see in the next exercises). It was proven in "
-"2000 that the ant's trajectory can be used to compute any boolean circuit, "
-"and thus that the ant is capable of universal computation (ie, any possible "
-"computation can be achieved using the ant as a computing device). Yet "
-"another subject of fascination..."
+"The rules are absolutely trivial: to compute what the next step should be, "
+"you should check the current color of the ground (using "
+"<code>getGroundColor()</code>). If it's white, change it to black, turn "
+"right and move forward by one cell. If the ground is currently black, change "
+"it to white, turn left and move forward by one cell."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langton/Langton.html:51
+#: src/lessons/turmites/langton/Langton.html:14
 msgid ""
-"Check the corresponding wikipedia web page, of which this exercise is "
-"inspired, for further details."
+"It's hard to come up with simpler rules isn't it? Well, let's go and code it "
+"now. You have to complete the <code>step()</code> method, which encodes the "
+"behavior of the ant at each step. You will probably use the "
+"<code>getGroundColor()</code> method to retrieve the color of the cell on "
+"which the ant is currently.  Colors of interest are simply named "
+"<code>Color.black</code> and <code>Color.white</code>."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/langton/Langton.html:20
+msgid ""
+"To compare colors, you cannot use the equal sign (=), because these things "
+"are not scalar values but objects. Instead, you need to write something like "
+"the following:"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/turmites/langton/Langton.html:24
+#, no-wrap
+msgid ""
+"Color c /* = some initialization */;\n"
+"if (c.equals(Color.black)) {\n"
+"  /* that's equal */\n"
+"} else {\n"
+"  /* that was not equal */\n"
+"}\n"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/langton/Langton.html:32
+msgid ""
+"Changing the ground color is not difficult, but a bit long: you have to "
+"change the brush color of your buggle, set the brush down (to mark the "
+"current cell -- with <code>brushDown()</code>), and set the brush back up "
+"(with <code>brushUp()</code>) to avoid further issues when the buggle will "
+"move. You are naturally free of organizing your code the way you want, but "
+"you may want to write a <code>setGroundColor(color)</code> method to "
+"factorize things a bit."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/langton/Langton.html:39
+msgid ""
+"As you can see from the execution of this exercise, the interest in this "
+"algorithm is that after about 10000 steps of relative chaotic behavior, the "
+"ant start building a regular pattern. This emergence of a regular pattern "
+"from the chaos is rather fascinating, isn't it? Move on to the next exercise "
+"to see more of them."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:1
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:1
 msgid "Multicolor Langton's ant"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:3
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:3
 msgid ""
 "There is several ways to extend the concept of Langton's ant. In this "
 "exercise, we explore first one, using more than two colors. It remains very "
@@ -4985,7 +5346,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:12
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:12
 msgid ""
 "Some of these ants draw fascinating patterns (switch the world to see them): "
 "LLRR build a symmetric figure resembling loosely to a ball, LRRRRRLLR draws "
@@ -4994,7 +5355,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:17
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:17
 msgid ""
 "Changing your buggle into a generic Langton's ant is not very complicated, "
 "although it is not completely trivial. As previously, you have to write a "
@@ -5006,60 +5367,58 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:24
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:24
+msgid ""
+"Changing your buggle into a generic Langton's ant is not very complicated, "
+"although it is not completely trivial. As previously, you have to write a "
+"<code>step</code> function. But this time, it receives two arrays as "
+"parameters.  The first one defines the rules to follow depending on the "
+"ground color while the second one gives the sequence of colors to use. For "
+"example, the basic ant would have <code>['R', 'L']</code> and "
+"<code>[Color.white, Color.black]</code> as arguments."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:31
 msgid "At each step, you thus have to apply the following pseudo-code:"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:26
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:33
 msgid "Find the position of the ground color in the color sequence;"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:27
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:34
 msgid ""
 "Turn left or right depending on the content of the rule array at that "
 "position;"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:28
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:35
 msgid ""
 "Mark the current ground with the next color in the sequence (the last color "
 "being followed by the first one);"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:29
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:36
 msgid "Move forward by one step."
 msgstr ""
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:32 src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:52
-msgid "You now should have enough information to succeed."
-msgstr ""
-
-#. type: Content of: <p><h2>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:34 src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:54
-msgid "Bibliographical notes"
-msgstr ""
-
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/langtoncolors/LangtonColors.html:35
-msgid ""
-"According to wikipedia, multicolor Langton's ants were discovered in 1995 by "
-"Propp et Al. Another funny fact is that the ants which name is a list of "
-"consecutive pair of identical letters (LL and RR) produce symmetric "
-"patterns. This fact was even formally proved."
+#: src/lessons/turmites/langtoncolors/LangtonColors.html:39 src/lessons/turmites/helloturmite/HelloTurmite.html:70
+msgid "You now should have enough information to succeed."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:1
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:1
 msgid "Turmites"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:3
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:3
 msgid ""
 "This exercise explores a new way to extend the concept of Langton's "
 "ant. Now, the behavior of the ant not only depends on the color on the "
@@ -5072,54 +5431,58 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:12
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:12
 msgid ""
 "Once again, you just have to write the <code>step()</code> method, in charge "
 "of doing one turmite's step. Once again, you should first find the rank of "
-"the current's cell ground color in the color sequence. The "
-"<code>colors</code> array is not passed as parameter but declared as global "
-"variable. It shouldn't change anything for us since this array was never "
-"modified during the execution. This trick to pass constant parameters is not "
-"very clean, but it should help performance a bit."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:20
-msgid ""
-"The second step is to use the <code>rule</code> data depending on the "
-"current color and the current state. <code>rule</code> actually contains 3 "
-"information in each situation: the color to write, the move to do, and the "
-"next state value. For example, rule[1][0] contains the informations to use "
-"when <code>state==1</code> and <code>color==0</code>. In other worlds, you "
-"can retrieve the information relative to your current situation by using "
+"the current's cell ground color in the color sequence. But this time, the "
+"<code>rule</code> data depends both on the current color and the current "
+"state.  <code>rule</code> actually contains 3 information in each situation: "
+"the color to write, the move to do, and the next state value. For example, "
+"rule[1][0] contains the informations to use when <code>state==1</code> and "
+"<code>color==0</code>. In other worlds, you can retrieve the information "
+"relative to your current situation by using "
 "<code>rule[state][currentColor]</code>."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:27
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:22
 msgid ""
 "Each such information set contains 3 values. The first one is the rank of "
 "the color to write on the ground. The second is the move to do, with the "
 "following notation: 0=stop, 1=noturn, 2=right, 4=u-turn, 8=left. Note that "
 "if the command is stop, you shouldn't even move forward on that step (but "
-"you shouldn't stop your program either: the next steps can do something "
-"else). Finally, the third integer is the next <code>state</code> value to go "
-"into after this iteration."
+"you shouldn't stop your program either: the next steps can do something else "
+"in a future state). Finally, the third integer is the next "
+"<code>state</code> value to go into after this iteration."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:34
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:29
 msgid ""
 "Since these arbitrary notations are somehow difficult to remember, the "
 "template code defines a set of constants that you should use instead of the "
 "direct numerical values. Their names are NOTURN, LEFT, RIGHT and so on. The "
 "modifiers <code>final static</code> before their type is the way to mark "
 "variables as constant in Java (sorry if the notation seems complex). Using "
-"such constants greatly help making the code easier to read, since"
+"such constants greatly help making the code easier to read. This allows to "
+"write things this way:"
 msgstr ""
 
-#. type: Content of: <p><pre>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:41
+#. type: Content of: <p>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:35
+msgid ""
+"Since these arbitrary notations are somehow difficult to remember, the "
+"template code defines a set of constants that you should use instead of the "
+"direct numerical values. Their names are NOTURN, LEFT, RIGHT and so on. By "
+"convention, such constant variables are written in upper case in "
+"python. Technically, you can still modify them, but that would be a very bad "
+"idea. Using such constants greatly help making the code easier to read, as "
+"it allows to write things this way:"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:42
 #, no-wrap
 msgid ""
 "  if (rule[state][currentColor][NEXT_MOVE] == LEFT) {\n"
@@ -5127,13 +5490,21 @@ msgid ""
 "  }\n"
 msgstr ""
 
+#. type: Content of: <pre>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:47
+#, no-wrap
+msgid ""
+"  if rule[state][currentColor][NEXT_MOVE] == LEFT:\n"
+"    turnLeft()\n"
+msgstr ""
+
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:45
-msgid "is much more easier to read than"
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:50
+msgid "This is much more easier to read than the following way:"
 msgstr ""
 
-#. type: Content of: <p><pre>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:47
+#. type: Content of: <pre>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:52
 #, no-wrap
 msgid ""
 "  if (rule[x][y][1] == 2) {\n"
@@ -5141,8 +5512,35 @@ msgid ""
 "  }\n"
 msgstr ""
 
-#. type: Content of: <p><p>
-#: src/lessons/welcome/turmites/helloturmite/HelloTurmite.html:55
+#. type: Content of: <pre>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:57
+#, no-wrap
+msgid ""
+"  if rule[x][y][1] == 2:\n"
+"    turnLeft()\n"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:61
+msgid ""
+"Finally, you probably want to write a <code>elif</code> branch for the "
+"<code>STOP</code> condition too. Having a <code>else</code> branch "
+"displaying an error message such as \"unknown case\" is a good practice: it "
+"makes your assumptions about your code more explicit, and you will get an "
+"error message if they fall short. When doing so, the next problem is that "
+"you have nothing to do in the <code>STOP</code> case, but python do not "
+"allows you to write empty <code>elif</code> branches. You should use the "
+"<code>pass</code> instruction as a placeholder: it says python that you have "
+"a branch here, and that it does not contain anything."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:72
+msgid "Bibliographical notes"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/helloturmite/HelloTurmite.html:73
 msgid ""
 "According to wikipedia, turmites were invented independently by the end of "
 "the eighties. It has been shown that turmites in general are exactly "
@@ -5153,12 +5551,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:1
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:1
 msgid "Creating Turmites"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:3
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:3
 msgid ""
 "This exercise allows you to build your own turmites. To pass the exercise, "
 "you should simply write a <code>init()</code> method which initializes the "
@@ -5167,59 +5565,59 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:10
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:10
 msgid "Current color"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:13 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:28 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:31 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:39 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:41 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:42
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:13 src/lessons/turmites/turmitecreator/TurmiteCreator.html:28 src/lessons/turmites/turmitecreator/TurmiteCreator.html:31 src/lessons/turmites/turmitecreator/TurmiteCreator.html:39 src/lessons/turmites/turmitecreator/TurmiteCreator.html:41 src/lessons/turmites/turmitecreator/TurmiteCreator.html:42
 msgid "0"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:14 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:29 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:32 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:34 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:37 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:44
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:14 src/lessons/turmites/turmitecreator/TurmiteCreator.html:29 src/lessons/turmites/turmitecreator/TurmiteCreator.html:32 src/lessons/turmites/turmitecreator/TurmiteCreator.html:34 src/lessons/turmites/turmitecreator/TurmiteCreator.html:37 src/lessons/turmites/turmitecreator/TurmiteCreator.html:44
 msgid "1"
 msgstr ""
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:18 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:21
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:18 src/lessons/turmites/turmitecreator/TurmiteCreator.html:21
 msgid "Write color"
 msgstr ""
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:19 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:22
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:19 src/lessons/turmites/turmitecreator/TurmiteCreator.html:22
 msgid "Turn"
 msgstr ""
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:20 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:23
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:20 src/lessons/turmites/turmitecreator/TurmiteCreator.html:23
 msgid "Next state"
 msgstr ""
 
 #. type: Content of: <table><tr><th>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:26
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:26
 msgid "Current state"
 msgstr ""
 
 #. type: Content of: <table><tr><td>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:40 src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:43
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:40 src/lessons/turmites/turmitecreator/TurmiteCreator.html:43
 msgid "N"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:48
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:48
 msgid ""
 "where the direction to turn is one of <b>L</b> (90° left), <b>R</b> (90° "
 "right), <b>N</b> (no turn) and <b>U</b> (180° U-turn)."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:50
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:50
 msgid "Going further"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:51
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:51
 msgid ""
 "This exercise is naturally an excuse to let you experiment with your own "
 "turmites.  Feel free to change the transition table and the amount of steps "
@@ -5229,104 +5627,124 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:57
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:57
 msgid ""
 "In addition, wikipedia is desperately missing some good looking colorful "
 "turmites: only black and white ones are depicted.  You should consider "
 "submitting your creations directly to the free encyclopedia."
 msgstr ""
 
+#. type: Content of: <p>
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:62
+msgid ""
+"Here are some 2-color turmites, extracted from "
+"http://demonstrations.wolfram.com/Turmites/ They are not written using the "
+"python syntax, but converting them should be easy."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:64
+msgid ""
+"Here are some 2-color turmites, extracted from "
+"http://demonstrations.wolfram.com/Turmites/"
+msgstr ""
+
 #. type: Content of: <pre>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:63
-#, no-wrap
-msgid ""
-"EdPeggJrTurmiteLibrary = [\n"
-"# source: http://demonstrations.wolfram.com/Turmites/\n"
-"# Translated into his later notation: 1=noturn, 2=right, 4=u-turn, 8=left\n"
-"# (all these are 2-color patterns)\n"
-"\"{{{1, 2, 0}, {0, 8, 0}}}\",  # 1: Langton's ant\n"
-"\"{{{1, 2, 0}, {0, 1, 0}}}\",  # 2: binary counter\n"
-"\"{{{0, 8, 1}, {1, 2, 1}}, {{1, 1, 0}, {1, 1, 1}}}\", # 3: (filled "
-"triangle)\n"
-"\"{{{0, 1, 1}, {0, 8, 1}}, {{1, 2, 0}, {0, 1, 1}}}\", # 4: spiral in a box\n"
-"\"{{{0, 2, 1}, {0, 8, 0}}, {{1, 8, 1}, {0, 2, 0}}}\", # 5: stripe-filled "
-"spiral\n"
-"\"{{{0, 2, 1}, {0, 8, 0}}, {{1, 8, 1}, {1, 1, 0}}}\", # 6: stepped pyramid\n"
-"\"{{{0, 2, 1}, {0, 1, 1}}, {{1, 2, 1}, {1, 8, 0}}}\", # 7: contoured "
-"island\n"
-"\"{{{0, 2, 1}, {0, 2, 1}}, {{1, 1, 0}, {0, 2, 1}}}\", # 8: woven placemat\n"
-"\"{{{0, 2, 1}, {1, 2, 1}}, {{1, 8, 1}, {1, 8, 0}}}\", # 9: snowflake-ish\n"
-"\"{{{1, 8, 0}, {0, 1, 1}}, {{0, 8, 0}, {0, 8, 1}}}\", # 10: slow city "
-"builder\n"
-"\"{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 0}, {0, 8, 1}}}\", # 11: framed computer "
-"art\n"
-"\"{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 1}, {1, 8, 0}}}\", # 12: balloon bursting "
-"(makes a spreading highway)\n"
-"\"{{{1, 8, 1}, {0, 8, 0}}, {{1, 1, 0}, {0, 1, 0}}}\", # 13: makes a "
-"horizontal highway\n"
-"\"{{{1, 8, 1}, {0, 8, 0}}, {{1, 2, 1}, {1, 2, 0}}}\", # 14: makes a 45 "
-"degree highway\n"
-"\"{{{1, 8, 1}, {0, 8, 1}}, {{1, 2, 1}, {0, 8, 0}}}\", # 15: makes a 45 "
-"degree highway\n"
-"\"{{{1, 8, 1}, {0, 1, 0}}, {{1, 1, 0}, {1, 2, 0}}}\", # 16: spiral in a "
-"filled box\n"
-"\"{{{1, 8, 1}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 17: glaciers\n"
-"\"{{{1, 8, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 1, 0}}}\", # 18: golden "
-"rectangle!\n"
-"\"{{{1, 8, 1}, {1, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 19: fizzy spill\n"
-"\"{{{1, 8, 1}, {1, 2, 1}}, {{1, 1, 0}, {0, 1, 1}}}\", # 20: nested "
-"cabinets\n"
-"\"{{{1, 1, 1}, {0, 8, 1}}, {{1, 2, 0}, {1, 1, 1}}}\", # 21: (cross)\n"
-"\"{{{1, 1, 1}, {0, 1, 0}}, {{0, 2, 0}, {1, 8, 0}}}\", # 22: saw-tipped "
-"growth\n"
-"\"{{{1, 1, 1}, {0, 1, 1}}, {{1, 2, 1}, {0, 1, 0}}}\", # 23: curves in blocks "
-"growth\n"
-"\"{{{1, 1, 1}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}\", # 24: textured "
-"growth\n"
-"\"{{{1, 1, 1}, {0, 2, 1}}, {{1, 8, 0}, {1, 2, 0}}}\", # 25: (diamond "
-"growth)\n"
-"\"{{{1, 1, 1}, {1, 8, 0}}, {{1, 2, 1}, {0, 1, 0}}}\", # 26: coiled rope\n"
-"\"{{{1, 2, 0}, {0, 8, 1}}, {{1, 8, 0}, {0, 1, 1}}}\", # 27: (growth)\n"
-"\"{{{1, 2, 0}, {0, 8, 1}}, {{1, 8, 0}, {0, 2, 1}}}\", # 28: (square "
-"spiral)\n"
-"\"{{{1, 2, 0}, {1, 2, 1}}, {{0, 1, 0}, {0, 1, 1}}}\", # 29: loopy growth "
-"with holes\n"
-"\"{{{1, 2, 1}, {0, 8, 1}}, {{1, 1, 0}, {0, 1, 0}}}\", # 30: Lanton's Ant "
-"drawn with squares\n"
-"\"{{{1, 2, 1}, {0, 2, 0}}, {{0, 8, 1}, {1, 8, 0}}}\", # 31: growth with "
-"curves and blocks\n"
-"\"{{{1, 2, 1}, {0, 2, 0}}, {{0, 1, 0}, {1, 2, 1}}}\", # 32: distracted "
-"spiral builder\n"
-"\"{{{1, 2, 1}, {0, 2, 1}}, {{1, 1, 0}, {1, 1, 1}}}\", # 33: cauliflower "
-"stalk (45 deg highway)\n"
-"\"{{{1, 2, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 2, 0}}}\", # 34: worm trails "
-"(eventually turns cyclic!)\n"
-"\"{{{1, 2, 1}, {1, 1, 0}}, {{1, 1, 0}, {0, 1, 1}}}\", # 35: eventually makes "
-"a two-way highway!\n"
-"\"{{{1, 2, 1}, {1, 2, 0}}, {{0, 1, 0}, {0, 1, 0}}}\", # 36: almost symmetric "
-"mould bloom\n"
-"\"{{{1, 2, 1}, {1, 2, 0}}, {{0, 2, 0}, {1, 1, 1}}}\", # 37: makes a 1 in 2 "
-"gradient highway\n"
-"\"{{{1, 2, 1}, {1, 2, 1}}, {{1, 8, 1}, {0, 2, 0}}}\", # 38: immediately "
-"makes a 1 in 3 highway\n"
-"\"{{{0, 2, 1}, {1, 2, 1}}, {{0, 8, 2}, {0, 8, 0}}, {{1, 2, 2}, {1, 8, "
-"0}}}\", # 39: squares and diagonals growth\n"
-"\"{{{1, 8, 1}, {0, 1, 0}}, {{0, 2, 2}, {1, 8, 0}}, {{1, 2, 1}, {1, 1, "
-"0}}}\", # 40: streak at approx. an 8.1 in 1 gradient\n"
-"\"{{{1, 8, 1}, {0, 1, 2}}, {{0, 2, 2}, {1, 1, 1}}, {{1, 2, 1}, {1, 1, "
-"0}}}\", # 41: streak at approx. a 1.14 in 1 gradient\n"
-"\"{{{1, 8, 1}, {1, 8, 1}}, {{1, 1, 0}, {0, 1, 2}}, {{0, 8, 1}, {1, 1, "
-"1}}}\", # 42: maze-like growth\n"
-"\"{{{1, 8, 2}, {0, 2, 0}}, {{1, 8, 0}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, "
-"1}}}\", # 43: growth by cornices \n"
-"\"{{{1, 2, 0}, {0, 2, 2}}, {{0, 8, 0}, {0, 2, 0}}, {{0, 1, 1}, {1, 8, "
-"0}}}\", # 44: makes a 1 in 7 highway\n"
-"\"{{{1, 2, 1}, {0, 8, 0}}, {{1, 2, 2}, {0, 1, 0}}, {{1, 8, 0}, {0, 8, "
-"0}}}\", # 45: makes a 4 in 1 highway\n"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:114
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:67
+#, no-wrap
+msgid ""
+"{{{1, RIGHT , 0}, {0, LEFT  , 0}}}  # 1: Langton's ant\n"
+"{{{1, RIGHT , 0}, {0, NOTURN, 0}}}  # 2: binary counter\n"
+"{{{0, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 3: "
+"(filled triangle)\n"
+"{{{0, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {0, NOTURN, 1}}} # 4: "
+"spiral in a box\n"
+"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 5: "
+"stripe-filled spiral\n"
+"{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {1, NOTURN, 0}}} # 6: "
+"stepped pyramid\n"
+"{{{0, RIGHT , 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {1, LEFT  , 0}}} # 7: "
+"contoured island\n"
+"{{{0, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {0, RIGHT , 1}}} # 8: "
+"woven placemat\n"
+"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {1, LEFT  , 0}}} # 9: "
+"snowflake-ish\n"
+"{{{1, LEFT  , 0}, {0, NOTURN, 1}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 10: "
+"slow city builder\n"
+"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 0}, {0, LEFT  , 1}}} # 11: "
+"framed computer art\n"
+"{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 1}, {1, LEFT  , 0}}} # 12: "
+"balloon bursting (makes a spreading highway)\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 13: "
+"makes a horizontal highway\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 1}, {1, RIGHT , 0}}} # 14: "
+"makes a 45 degree highway\n"
+"{{{1, LEFT  , 1}, {0, LEFT  , 1}}, {{1, RIGHT , 1}, {0, LEFT  , 0}}} # 15: "
+"makes a 45 degree highway\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{1, NOTURN, 0}, {1, RIGHT , 0}}} # 16: "
+"spiral in a filled box\n"
+"{{{1, LEFT  , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 17: "
+"glaciers\n"
+"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 18: "
+"golden rectangle!\n"
+"{{{1, LEFT  , 1}, {1, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 19: "
+"fizzy spill\n"
+"{{{1, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 20: "
+"nested cabinets\n"
+"{{{1, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {1, NOTURN, 1}}} # 21: "
+"(cross)\n"
+"{{{1, NOTURN, 1}, {0, NOTURN, 0}}, {{0, RIGHT , 0}, {1, LEFT  , 0}}} # 22: "
+"saw-tipped growth\n"
+"{{{1, NOTURN, 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 23: "
+"curves in blocks growth\n"
+"{{{1, NOTURN, 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 24: "
+"textured growth\n"
+"{{{1, NOTURN, 1}, {0, RIGHT , 1}}, {{1, LEFT  , 0}, {1, RIGHT , 0}}} # 25: "
+"(diamond growth)\n"
+"{{{1, NOTURN, 1}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 26: "
+"coiled rope\n"
+"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, NOTURN, 1}}} # 27: "
+"(growth)\n"
+"{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, RIGHT , 1}}} # 28: "
+"(square spiral)\n"
+"{{{1, RIGHT , 0}, {1, RIGHT , 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}} # 29: "
+"loopy growth with holes\n"
+"{{{1, RIGHT , 1}, {0, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 30: "
+"Lanton's Ant drawn with squares\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 1}, {1, LEFT  , 0}}} # 31: "
+"growth with curves and blocks\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, NOTURN, 0}, {1, RIGHT , 1}}} # 32: "
+"distracted spiral builder\n"
+"{{{1, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 33: "
+"cauliflower stalk (45 deg highway)\n"
+"{{{1, RIGHT , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, RIGHT , 0}}} # 34: "
+"worm trails (eventually turns cyclic!)\n"
+"{{{1, RIGHT , 1}, {1, NOTURN, 0}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 35: "
+"eventually makes a two-way highway!\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, NOTURN, 0}, {0, NOTURN, 0}}} # 36: "
+"almost symmetric mould bloom\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, RIGHT , 0}, {1, NOTURN, 1}}} # 37: "
+"makes a 1 in 2 gradient highway\n"
+"{{{1, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 38: "
+"immediately makes a 1 in 3 highway\n"
+"{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{0, LEFT  , 2}, {0, LEFT  , 0}}, {{1, "
+"RIGHT , 2}, {1, LEFT  , 0}}} # 39: squares and diagonals growth\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{0, RIGHT , 2}, {1, LEFT  , 0}}, {{1, "
+"RIGHT , 1}, {1, NOTURN, 0}}} # 40: streak at approx. an 8.1 in 1 gradient\n"
+"{{{1, LEFT  , 1}, {0, NOTURN, 2}}, {{0, RIGHT , 2}, {1, NOTURN, 1}}, {{1, "
+"RIGHT , 1}, {1, NOTURN, 0}}} # 41: streak at approx. a 1.14 in 1 gradient\n"
+"{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 2}}, {{0, "
+"LEFT  , 1}, {1, NOTURN, 1}}} # 42: maze-like growth\n"
+"{{{1, LEFT  , 2}, {0, RIGHT , 0}}, {{1, LEFT  , 0}, {0, RIGHT , 0}}, {{0, "
+"LEFT  , 0}, {0, LEFT  , 1}}} # 43: growth by cornices \n"
+"{{{1, RIGHT , 0}, {0, RIGHT , 2}}, {{0, LEFT  , 0}, {0, RIGHT , 0}}, {{0, "
+"NOTURN, 1}, {1, LEFT  , 0}}} # 44: makes a 1 in 7 highway\n"
+"{{{1, RIGHT , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {0, NOTURN, 0}}, {{1, "
+"LEFT  , 0}, {0, LEFT  , 0}}} # 45: makes a 4 in 1 highway\n"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:114
 msgid ""
 "Langton's ants may not share the expressiveness power of the turmites, but "
 "they remain fascinating too. You can experiment with them using the "
@@ -5338,7 +5756,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:121
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:121
 msgid ""
 "Quite a lot of Langton's ants build highways: RL, of course, but also "
 "RLRLRLLRLR (about 2500 steps).  The chaotic behavior of ants before the "
@@ -5352,7 +5770,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:129
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:129
 msgid ""
 "Some ants fill solid sectors, such as RRLLLRLLLRRR (16,000 steps), "
 "RRLLLRLLLRRR (30,000 steps), RRLLLRRRRRLR (125,000 steps) or RRLRLLRRRRRR "
@@ -5365,7 +5783,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:136
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:136
 msgid ""
 "Finally, some ants are just build artistic patterns. You should check this "
 "video for some beautiful ones: "
@@ -5376,7 +5794,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html:141
+#: src/lessons/turmites/turmitecreator/TurmiteCreator.html:141
 msgid ""
 "As you can see by exploring the above set of turmites, they are usually not "
 "as colorful as the ants, but this may be because very few colors suffice to "
@@ -5389,8 +5807,53 @@ msgid ""
 "http://code.google.com/p/ruletablerepository/wiki/TwoDimensionalTuringMachines"
 msgstr ""
 
-#. type: Content of: <h1>
-#: src/lessons/sort/Main.html:1
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:12
+msgid "void forward() or void forward(int)"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:12
+msgid "void backward() or void backward(int)"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:14
+msgid "void setX(int)"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:14
+msgid "void setY(int)"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:14
+msgid "void setPos(int,int)"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:18
+msgid "void setColor(Color)"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:22
+msgid "void setDirection(Direction)"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:28
+msgid "void setBrushColor(Color)"
+msgstr ""
+
+#. type: Content of: <table><tr><td>
+#: src/lessons/turmites/universe/TurmiteWorld.html:38
+msgid "void writeMessage(String)"
+msgstr ""
+
+#. type: Content of: <h3>
+#: src/lessons/sort/Main.html:1 src/lessons/sort/short_desc.html:1
 msgid "Sorting Algorithms"
 msgstr ""
 
@@ -5408,17 +5871,30 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/sort/Main.html:10
 msgid ""
-"An exercise on recursive sorting algorithms (such as QuickSort and "
-"MergeSort) is planned for the future."
+"More exercises are planned for the future, on recursive sorting algorithms "
+"(such as QuickSort and MergeSort) or using other microworlds to apply these "
+"algorithms to other contexts."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/short_desc.html:3
+msgid ""
+"This lesson allows to experiment with some classical sorting algorithms (and "
+"some less common variant of them :)"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/short_desc.html:6 src/lessons/recursion/short_desc.html:5 src/lessons/maze/short_desc.html:5
+msgid "You are supposed to master the bases of programming to take this lesson."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:1 src/lessons/sort/bubble2/AlgBubbleSort2.html:1 src/lessons/sort/bubble3/AlgBubbleSort3.html:1
-msgid "BubbleSort and variations"
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:1
+msgid "BubbleSort"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:3
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:3
 msgid ""
 "Welcome to the sorting world. It allows you to experiment with the existing "
 "sorting algorithms. The list of buildins that you can use in your algorithms "
@@ -5426,13 +5902,22 @@ msgid ""
 "world\")."
 msgstr ""
 
+#. type: Content of: <p>
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:14
+msgid ""
+"To help in this process, it is posible to graphically explore the history of "
+"your sorting algorithm. Switch to the Objective view and use the contextual "
+"menu (right click) to switch from the the view of the current state to the "
+"view of its history."
+msgstr ""
+
 #. type: Content of: <h2>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:27
-msgid "BubbleSort"
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:28
+msgid "First attempt at BubbleSort"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:29
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:30
 msgid ""
 "This first sorting algorithm is the most simple one: Bubble sort consists in "
 "progressively moving up the smaller elements of the array, as if they were "
@@ -5447,17 +5932,17 @@ msgid ""
 msgstr ""
 
 #. type: Attribute 'alt' of: <div>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:39 src/lessons/sort/bubble2/AlgBubbleSort2.html:13
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:40 src/lessons/sort/bubble/AlgBubbleSort2.html:11
 msgid "Show Tip (Pseudo-code)"
 msgstr ""
 
 #. type: Content of: <div><p>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:40
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:41
 msgid "The pseudo-code of the BubbleSort algorithm is the following:"
 msgstr ""
 
 #. type: Content of: <div><pre>
-#: src/lessons/sort/bubble1/AlgBubbleSort1.html:41
+#: src/lessons/sort/bubble/AlgBubbleSort1.html:42
 #, no-wrap
 msgid ""
 "do: \n"
@@ -5466,13 +5951,13 @@ msgid ""
 "while we swapped something during last traversal\n"
 msgstr ""
 
-#. type: Content of: <h2>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:3
-msgid "BubbleSort2"
+#. type: Content of: <h1>
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:1
+msgid "BubbleSort (take 2)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:5
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:3
 msgid ""
 "If you look carefully at the behavior of BubbleSort, a first easy "
 "optimization appears: after one traversal, the last element of the array "
@@ -5484,12 +5969,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <div><p>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:14
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:12
 msgid "The pseudo-code of the BubbleSort2 algorithm is the following:"
 msgstr ""
 
 #. type: Content of: <div><pre>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:15
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:13
 #, no-wrap
 msgid ""
 "For all i in [len-2,0] (traversing from biggest to smallest)\n"
@@ -5498,7 +5983,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:21
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:19
 msgid ""
 "When we run this algorithm, it is quite disappointing to see that it runs "
 "approximately at the same speed than the basic version of BubbleSort. This "
@@ -5511,20 +5996,20 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble2/AlgBubbleSort2.html:30
+#: src/lessons/sort/bubble/AlgBubbleSort2.html:28
 msgid ""
 "From the asymptotic complexity point of view, there is absolutely no "
 "difference: this variation is still in O(n^2) on average (our gain is only "
 "on the constant term, ignored when computing the asymptotic complexity)."
 msgstr ""
 
-#. type: Content of: <h2>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:3
-msgid "BubbleSort3"
+#. type: Content of: <h1>
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:1
+msgid "BubbleSort (take 3)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:5
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:3
 msgid ""
 "Let's now reintroduce the little optimization we removed at previous step: "
 "if a traversal does not swap any element, it means that the array is already "
@@ -5532,7 +6017,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:9
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:7
 msgid ""
 "For that, simply use the <code>break</code> keyword, which breaks the "
 "current loop.  Beware, if you have several embedded loops, this will apply "
@@ -5540,12 +6025,12 @@ msgid ""
 msgstr ""
 
 #. type: Attribute 'alt' of: <div>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:12
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:10
 msgid "If you want, this tip shows the pseudo-code."
 msgstr ""
 
 #. type: Content of: <div><pre>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:14
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:12
 #, no-wrap
 msgid ""
 "For all i in [len-2,0] (traversing from biggest to smallest)\n"
@@ -5555,24 +6040,19 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/bubble3/AlgBubbleSort3.html:21
+#: src/lessons/sort/bubble/AlgBubbleSort3.html:19
 msgid ""
 "This optimization is even more disappointing: it only provide a gain of a "
 "few percents on the amount of reads over BubbleSort2."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:1 src/lessons/sort/cocktail2/AlgCocktailSort2.html:1 src/lessons/sort/cocktail3/AlgCocktailSort3.html:1
-msgid "CocktailSort and variations"
-msgstr ""
-
-#. type: Content of: <h2>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:3
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:1
 msgid "CocktailSort"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:5
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:3
 msgid ""
 "To improve further the BubbleSort algorithm, we need to look closer its "
 "behavior. One can notice that big elements are moved very quickly in "
@@ -5582,7 +6062,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:11
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:9
 msgid ""
 "To help the turtles moving faster, the cocktail sort traverse alternatively "
 "the array from right to left and from left to right. Here is the "
@@ -5590,7 +6070,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:16
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:14
 #, no-wrap
 msgid ""
 "Do\n"
@@ -5602,20 +6082,20 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail1/AlgCocktailSort1.html:24
+#: src/lessons/sort/cocktail/AlgCocktailSort1.html:22
 msgid ""
 "One can see that cocktail sort achieves exactly the same amount of swaps "
 "than the bubble sort, but improves slightly on read amount. It is however "
 "still worse than BubbleSort2 to that extend."
 msgstr ""
 
-#. type: Content of: <h2>
-#: src/lessons/sort/cocktail2/AlgCocktailSort2.html:3
-msgid "CocktailSort2"
+#. type: Content of: <h1>
+#: src/lessons/sort/cocktail/AlgCocktailSort2.html:1
+msgid "CocktailSort (take 2)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail2/AlgCocktailSort2.html:5
+#: src/lessons/sort/cocktail/AlgCocktailSort2.html:3
 msgid ""
 "We will now apply to CocktailSort the same optimization than BubbleSort2 did "
 "to BubbleSort. We must remember the limits of the array part not being "
@@ -5624,7 +6104,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/sort/cocktail2/AlgCocktailSort2.html:10
+#: src/lessons/sort/cocktail/AlgCocktailSort2.html:8
 #, no-wrap
 msgid ""
 "beg=0; end=len-2\n"
@@ -5638,13 +6118,13 @@ msgid ""
 "while at least one of the traversal swapped an element\n"
 msgstr ""
 
-#. type: Content of: <h2>
-#: src/lessons/sort/cocktail3/AlgCocktailSort3.html:3
-msgid "CocktailSort3"
+#. type: Content of: <h1>
+#: src/lessons/sort/cocktail/AlgCocktailSort3.html:1
+msgid "CocktailSort (take 3)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/cocktail3/AlgCocktailSort3.html:5
+#: src/lessons/sort/cocktail/AlgCocktailSort3.html:3
 msgid ""
 "Even if the asymptotic complexity of CocktailSort2 is the same than the one "
 "of BubbleSort, it seem to perform better in practice. It is even possible to "
@@ -5655,24 +6135,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:1 src/lessons/sort/shell/AlgShellSort.html:1
-msgid "Insertion algorithms and variations"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:4
-msgid ""
-"This exercise allows you to experiment with the insertion sort and its major "
-"variations."
-msgstr ""
-
-#. type: Content of: <h2>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:7
+#: src/lessons/sort/insertion/AlgInsertionSort.html:1
 msgid "InsertionSort"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:9
+#: src/lessons/sort/insertion/AlgInsertionSort.html:4
 msgid ""
 "This sorting algorithm is quite simple to understand and write, even if it "
 "is not as efficient as possible. Its asymptotic complexity is in O(n2), but "
@@ -5681,7 +6149,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:14
+#: src/lessons/sort/insertion/AlgInsertionSort.html:9
 msgid ""
 "The idea is to traverse all elements of the array, and to insert each of "
 "them into its proper position in the already sorted part of the array. When "
@@ -5691,17 +6159,17 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:22
+#: src/lessons/sort/insertion/AlgInsertionSort.html:17
 msgid "Once this is done, the situation is the following:"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:26
+#: src/lessons/sort/insertion/AlgInsertionSort.html:21
 msgid "The pseudo-code of this algorithm is thus the following:"
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:27
+#: src/lessons/sort/insertion/AlgInsertionSort.html:22
 #, no-wrap
 msgid ""
 "For each i in [1,len]\n"
@@ -5715,14 +6183,14 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:37
+#: src/lessons/sort/insertion/AlgInsertionSort.html:32
 msgid ""
 "Naturally, you should use a loop to write the big permutation within the "
 "given loop. Writing it this way would be really ... counter-productive."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:40
+#: src/lessons/sort/insertion/AlgInsertionSort.html:35
 msgid ""
 "If you've always wondered what computer science researchers do nowadays, "
 "here is part of the answer: They improve fundamental algorithms so that "
@@ -5730,12 +6198,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:44
+#: src/lessons/sort/insertion/AlgInsertionSort.html:39
 msgid "Other variation of insertion sort"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:46
+#: src/lessons/sort/insertion/AlgInsertionSort.html:41
 msgid ""
 "TreeSort builds a binary search tree to sort them. It leads to a O(n log(n))  "
 "on average, but O(n^2) in worst cases. We won't study this algorithm here "
@@ -5744,7 +6212,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:51
+#: src/lessons/sort/insertion/AlgInsertionSort.html:46
 msgid ""
 "There is other variations over the insertion sort, such as PatienceSort "
 "which builds piles of values and sort each pile afterward. This algorithm "
@@ -5755,19 +6223,19 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/insertion/AlgInsertionSort.html:58
+#: src/lessons/sort/insertion/AlgInsertionSort.html:53
 msgid ""
 "Wikipedia provides a detailled description of all these algorithms we cannot "
 "present here because of time constraints."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/sort/shell/AlgShellSort.html:3
+#: src/lessons/sort/shell/AlgShellSort.html:1
 msgid "ShellSort"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/sort/shell/AlgShellSort.html:5
+#: src/lessons/sort/shell/AlgShellSort.html:3
 msgid ""
 "This algorithm is named after its author, Donald Shell, who published it in "
 "1959. It can be seen as an application of the CombSort idea (let elements "
@@ -5782,14 +6250,14 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/shell/AlgShellSort.html:16
+#: src/lessons/sort/shell/AlgShellSort.html:14
 msgid ""
 "Donald Shell propose <code>len/2</code> as initial value of the gap, and "
 "then to divide it by 2 at each step. The pseudo-code is thus the following:"
 msgstr ""
 
 #. type: Content of: <p><pre>
-#: src/lessons/sort/shell/AlgShellSort.html:19
+#: src/lessons/sort/shell/AlgShellSort.html:17
 #, no-wrap
 msgid ""
 "gap=len/2\n"
@@ -5799,7 +6267,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p>
-#: src/lessons/sort/shell/AlgShellSort.html:24
+#: src/lessons/sort/shell/AlgShellSort.html:22
 msgid ""
 "Just like in CombSort, the sequence of values taken by the gap is crucial "
 "for Shell sort performance. In some rare pathological cases, the sequence we "
@@ -5813,7 +6281,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p>
-#: src/lessons/sort/shell/AlgShellSort.html:34
+#: src/lessons/sort/shell/AlgShellSort.html:32
 msgid ""
 "In our case, the array are ways too small to benefit of these "
 "optimizations. If you ever need to do so, take as initial gap the biggest "
@@ -5822,7 +6290,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><p>
-#: src/lessons/sort/shell/AlgShellSort.html:39
+#: src/lessons/sort/shell/AlgShellSort.html:37
 msgid ""
 "Interesingly enough, determining the best gap sequence for shell sort turns "
 "into a contemporary research issue in computer science. For example, an "
@@ -5878,17 +6346,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/sort/comb/AlgCombSort.html:1 src/lessons/sort/comb11/AlgCombSort11.html:1 src/lessons/sort/gnome/AlgGnomeSort.html:1
-msgid "Miscellaneous sorting"
-msgstr ""
-
-#. type: Content of: <h2>
-#: src/lessons/sort/comb/AlgCombSort.html:3
+#: src/lessons/sort/comb/AlgCombSort.html:1
 msgid "CombSort"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/comb/AlgCombSort.html:5
+#: src/lessons/sort/comb/AlgCombSort.html:3
 msgid ""
 "We saw that CocktailSort improve a bit for turtles (i.e. small values near "
 "to the end of the array), but it is still possible to achieve "
@@ -5903,7 +6366,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <pre>
-#: src/lessons/sort/comb/AlgCombSort.html:17
+#: src/lessons/sort/comb/AlgCombSort.html:15
 #, no-wrap
 msgid ""
 "gap = len;\n"
@@ -5919,20 +6382,20 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/comb/AlgCombSort.html:28
+#: src/lessons/sort/comb/AlgCombSort.html:26
 msgid ""
 "This algorithm was invented by Wlodek Dobosiewicz in 1980, and later "
 "rediscovered and popularized by Stephen Lacey and Richard Box, who described "
 "it in Byte Magazine in April 1991."
 msgstr ""
 
-#. type: Content of: <h2>
-#: src/lessons/sort/comb11/AlgCombSort11.html:3
+#. type: Content of: <h1>
+#: src/lessons/sort/comb/AlgCombSort11.html:1
 msgid "CombSort11"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/comb11/AlgCombSort11.html:5
+#: src/lessons/sort/comb/AlgCombSort11.html:3
 msgid ""
 "The authors of this algorithm observed that the performance is increased if "
 "we make sure that the last values of the gap are (11, 8, 6, 4, 3, 2, 1)  "
@@ -5941,13 +6404,13 @@ msgid ""
 "should use 11 instead."
 msgstr ""
 
-#. type: Content of: <h2>
-#: src/lessons/sort/gnome/AlgGnomeSort.html:3
+#. type: Content of: <h1>
+#: src/lessons/sort/gnome/AlgGnomeSort.html:1
 msgid "GnomeSort"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/gnome/AlgGnomeSort.html:5
+#: src/lessons/sort/gnome/AlgGnomeSort.html:3
 msgid ""
 "The Gnome sort is similar to insertion sort, but the elements are moved in "
 "position by a serie of swaps just like in bubble sort. It is named after the "
@@ -5956,7 +6419,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/sort/gnome/AlgGnomeSort.html:10
+#: src/lessons/sort/gnome/AlgGnomeSort.html:8
 msgid ""
 "Gnome Sort is based on the technique used by the standard Dutch Garden Gnome "
 "(Du.: tuinkabouter). Here is how a garden gnome sorts a line of flower "
@@ -5985,6 +6448,18 @@ msgid ""
 "within the sorting lesson."
 msgstr ""
 
+#. type: Content of: <h3>
+#: src/lessons/recursion/short_desc.html:1
+msgid "Bases of recursion"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/recursion/short_desc.html:2
+msgid ""
+"Discover the recursive way of thinking by drawing trees and other figures "
+"with the Logo turtle."
+msgstr ""
+
 #. type: Content of: <h2>
 #: src/lessons/recursion/square/Square.html:1
 msgid "The small cousines of Buggles"
@@ -6058,8 +6533,8 @@ msgid ""
 "(double) 17 // Value = 17.0 (“casted to double”, converted to double)\n"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><p><h2>
-#: src/lessons/recursion/square/Square.html:43 src/lessons/recursion/circle/Circle.html:14 src/lessons/recursion/hanoiboard/HanoiBoard.html:20 src/lessons/welcome/array/basics/Array.html:146
+#. type: Content of: <br><p><p><p><p><p><h2>
+#: src/lessons/recursion/square/Square.html:43 src/lessons/recursion/circle/Circle.html:14 src/lessons/recursion/hanoi/HanoiBoard.html:20 src/lessons/welcome/array/basics/Array.html:210
 msgid "Goal of this exercise"
 msgstr ""
 
@@ -6109,7 +6584,7 @@ msgid "void polygonFractal (int levels, int sides, double length, double shrink)
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/polygonfractal/PolygonFractal.html:7 src/lessons/recursion/sierpinski/Sierpinski.html:8 src/lessons/recursion/dragoncurve1/DragonCurve1.html:27 src/lessons/recursion/dragoncurve2/DragonCurve2.html:50
+#: src/lessons/recursion/polygonfractal/PolygonFractal.html:7 src/lessons/recursion/sierpinski/Sierpinski.html:8 src/lessons/recursion/dragoncurve/DragonCurve1.html:27 src/lessons/recursion/dragoncurve/DragonCurve2.html:50
 msgid ""
 "Have a look at each world's objective view to understand how to write the "
 "function."
@@ -6321,28 +6796,81 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:1
-msgid "Dragon curve (1)"
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:3
-msgid "The dragon curve is a classical example of recursive method."
+#: src/lessons/recursion/spiral/SpiralUse.html:1
+msgid "Drawing spirals"
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:5
-msgid "The definition of this curve is the following:"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/recursion/spiral/SpiralUse.html:3
+msgid ""
+"Can you reproduce the provided patterns of this exercise using the "
+"<code>spiral()</code> method?"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:6
-msgid "the dragon curve of order 1 is a vector between to arbitrary points P and Q,"
+#: src/lessons/recursion/spiral/SpiralUse.html:6
+msgid ""
+"You must provide a method called <code>doit(int)</code> taking the number of "
+"the page to draw as parameter. Its code is as following, with A0, B0, etc "
+"being integers. The goal of this exercise is to find the good values for "
+"each page."
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:7
-msgid ""
+#. type: Content of: <pre>
+#: src/lessons/recursion/spiral/SpiralUse.html:12
+#, no-wrap
+msgid ""
+"void doit(int page) {\n"
+"  switch (page) {\n"
+"    case 0: /* Drawing of the first page, dubbed \"One\" */\n"
+"      spiral(A0,B0,C0,D0);\n"
+"      break;\n"
+"    case 1: /* Drawing of the second page, dubbed \"Two\" */\n"
+"      spiral(A1,B1,C1,D1);\n"
+"      break;\n"
+"    case 2: /* Drawing of the page dubbed \"Three\" */\n"
+"      spiral(A2,B2,C2,D2);\n"
+"      break;\n"
+"    case 3: /* Drawing of the page dubbed \"Four\" */\n"
+"      spiral(A3,B3,C3,D3);\n"
+"      break;\n"
+"    case 4: /* Drawing of the page dubbed \"Five\" */\n"
+"      spiral(A4,B4,C4,D4);\n"
+"      break;\n"
+"  }\n"
+"}\n"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/recursion/spiral/SpiralUse.html:34
+msgid ""
+"No need to copy over the method of <code>spiral()</code>, the turtle of this "
+"exercise already knows it."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:1
+msgid "Dragon curve (1)"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:3
+msgid "The dragon curve is a classical example of recursive method."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:5
+msgid "The definition of this curve is the following:"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:6
+msgid "the dragon curve of order 1 is a vector between to arbitrary points P and Q,"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:7
+msgid ""
 "the dragon curve of order n is the dragon curve of order n-1 between P and "
 "R, followed by the same curve of order n-1 between R and Q (reverse side), "
 "where PRQ is an isoscele triangle with angle R being a right angle, and R "
@@ -6351,7 +6879,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><pre>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:13 src/lessons/recursion/dragoncurve2/DragonCurve2.html:27
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:13 src/lessons/recursion/dragoncurve/DragonCurve2.html:27
 #, no-wrap
 msgid ""
 "u = (x + z)/2 + (t - y)/2\n"
@@ -6359,18 +6887,18 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:19
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:19
 msgid "The prototype of the method drawing the curve is the following:"
 msgstr ""
 
 #. type: Content of: <p><pre>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:20 src/lessons/recursion/dragoncurve2/DragonCurve2.html:22
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:20 src/lessons/recursion/dragoncurve/DragonCurve2.html:22
 #, no-wrap
 msgid "void dragon(int ordre, double x, double y, double z, double t)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve1/DragonCurve1.html:23
+#: src/lessons/recursion/dragoncurve/DragonCurve1.html:23
 msgid ""
 "You should use the method <code>setPos(x,y)</code> to put your turtle at "
 "coordinates (x,y) and the method <code>moveTo(z,t)</code> to draw a line "
@@ -6378,12 +6906,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:1
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:1
 msgid "The dragon curve (2)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:3
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:3
 msgid ""
 "Previous solution induce that the turtle teleports to other location, or at "
 "the very least, that it moves its pen up during the drawing. Indeed, the end "
@@ -6393,7 +6921,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:9
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:9
 msgid ""
 "In this lesson, you will write a recursive method allowing to draw the "
 "dragon curve without taking the pen up. For that, we need another recursive "
@@ -6401,7 +6929,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:13
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:13
 msgid ""
 "The method <code>dragon()</code> is then recursively defined using itself "
 "and <code>dragonReverse()</code>. Likewise, the method "
@@ -6410,39 +6938,39 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:20
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:20
 msgid ""
 "The prototype of the <code>dragon()</code> method remains unchanged from "
 "previous exercise:"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:24
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:24
 msgid ""
 "The new point's coordinate (u, v) introduced by the <code>dragon()</code> "
 "are:"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:33
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:33
 msgid "The prototype of the method <code>dragonReverse</code> is similar:"
 msgstr ""
 
 #. type: Content of: <p><pre>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:34
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:34
 #, no-wrap
 msgid "void dragonReverse(int ordre, double x, double y, double z, double t)"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:36
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:36
 msgid ""
 "The new point's coordinate (u, v) introduced by the "
 "<code>dragonReverse()</code> are:"
 msgstr ""
 
 #. type: Content of: <p><pre>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:39
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:39
 #, no-wrap
 msgid ""
 "u = (x + z)/2 - (t - y)/2\n"
@@ -6450,7 +6978,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/dragoncurve2/DragonCurve2.html:45
+#: src/lessons/recursion/dragoncurve/DragonCurve2.html:45
 msgid ""
 "To make the work of each method recursiv more visible, the line painted by "
 "the <code>dragon()</code> must be red (<code>Color.red</code>) while the "
@@ -6458,66 +6986,38 @@ msgid ""
 "(<code>Color.blue</code>)."
 msgstr ""
 
-#. type: Content of: <h2>
-#: src/lessons/recursion/spiraluse/SpiralUse.html:1
-msgid "Drawing spirals"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/recursion/spiraluse/SpiralUse.html:3
-msgid ""
-"Can you reproduce the provided patterns of this exercise using the "
-"<code>spiral()</code> method?"
+#. type: Content of: <h3>
+#: src/lessons/recursion/hanoi/Main.html:1 src/lessons/recursion/hanoi/short_desc.html:1
+msgid "Hanoi towers"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/spiraluse/SpiralUse.html:6
+#: src/lessons/recursion/hanoi/Main.html:2
 msgid ""
-"You must provide a method called <code>doit(int)</code> taking the number of "
-"the page to draw as parameter. Its code is as following, with A0, B0, etc "
-"being integers. The goal of this exercise is to find the good values for "
-"each page."
+"Here comes the super classical exercise on recursion. It's not very "
+"developped here, I'm not sure of what I could add to this lesson. If you "
+"have any idea, please submit them."
 msgstr ""
 
-#. type: Content of: <pre>
-#: src/lessons/recursion/spiraluse/SpiralUse.html:12
-#, no-wrap
-msgid ""
-"void doit(int page) {\n"
-"  switch (page) {\n"
-"    case 0: /* Drawing of the first page, dubbed \"One\" */\n"
-"      spiral(A0,B0,C0,D0);\n"
-"      break;\n"
-"    case 1: /* Drawing of the second page, dubbed \"Two\" */\n"
-"      spiral(A1,B1,C1,D1);\n"
-"      break;\n"
-"    case 2: /* Drawing of the page dubbed \"Three\" */\n"
-"      spiral(A2,B2,C2,D2);\n"
-"      break;\n"
-"    case 3: /* Drawing of the page dubbed \"Four\" */\n"
-"      spiral(A3,B3,C3,D3);\n"
-"      break;\n"
-"    case 4: /* Drawing of the page dubbed \"Five\" */\n"
-"      spiral(A4,B4,C4,D4);\n"
-"      break;\n"
-"  }\n"
-"}\n"
+#. type: Content of: <p>
+#: src/lessons/recursion/hanoi/short_desc.html:2
+msgid "Here comes the super classical exercise on recursion."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/recursion/spiraluse/SpiralUse.html:34
+#: src/lessons/recursion/hanoi/short_desc.html:4
 msgid ""
-"No need to copy over the method of <code>spiral()</code>, the turtle of this "
-"exercise already knows it."
+"This is an application exercise of recursion, that you should master to take "
+"this lesson."
 msgstr ""
 
 #. type: Content of: <h2>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:1
+#: src/lessons/recursion/hanoi/HanoiBoard.html:1
 msgid "Tower of Hanoi"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:3
+#: src/lessons/recursion/hanoi/HanoiBoard.html:3
 msgid ""
 "The Tower of Hanoi or Towers of Hanoi , also called the Tower of Brahma or "
 "Towers of Brahma, is a mathematical game or puzzle. It consists of three "
@@ -6529,12 +7029,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:11
+#: src/lessons/recursion/hanoi/HanoiBoard.html:11
 msgid "Only one disk may be moved at a time."
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:13
+#: src/lessons/recursion/hanoi/HanoiBoard.html:13
 msgid ""
 "Each move consists of taking the upper disk from one of the rods and sliding "
 "it onto another rod, on top of the other disks that may already be present "
@@ -6542,12 +7042,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:17
+#: src/lessons/recursion/hanoi/HanoiBoard.html:17
 msgid "No disk may be placed on top of a smaller disk."
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:22
+#: src/lessons/recursion/hanoi/HanoiBoard.html:22
 msgid ""
 "Write the core of the method: <code>public void solve(int src, int dst, int "
 "height) throws HanoiInvalidMove</code> This method will recursively solve "
@@ -6562,48 +7062,108 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:36
+#: src/lessons/recursion/hanoi/HanoiBoard.html:36
 msgid "label the pegs A, B, C (these labels may move at different steps)"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:37
+#: src/lessons/recursion/hanoi/HanoiBoard.html:37
 msgid "let n be the total number of discs (the height of the initial tower)"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:38
+#: src/lessons/recursion/hanoi/HanoiBoard.html:38
 msgid "number the discs from 1 (smallest, topmost) to n (largest, bottommost)"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:41
+#: src/lessons/recursion/hanoi/HanoiBoard.html:41
 msgid "To move n discs from peg A to peg C:"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:43
+#: src/lessons/recursion/hanoi/HanoiBoard.html:43
 msgid "move n−1 discs from A to B. This leaves disc #n alone on peg A"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:44
+#: src/lessons/recursion/hanoi/HanoiBoard.html:44
 msgid "move disc #n from A to C"
 msgstr ""
 
 #. type: Content of: <ul><li>
-#: src/lessons/recursion/hanoiboard/HanoiBoard.html:45
+#: src/lessons/recursion/hanoi/HanoiBoard.html:45
 msgid "move n−1 discs from B to C so they sit on disc #n"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/maze/Main.html:1
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:1
+msgid "HanoiWorld"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:4
+msgid ""
+"This world implements the ultra-classical Hanoi problem. You are asked to "
+"move the disk pile from the stick where they are to the target stick (given "
+"as second parameter in the world's name -- number 1 for the default "
+"world). There is some extra constraint: you can only move one disk at a "
+"time, and you cannot move a big disk over a smaller one."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:11
+msgid "Only 3 functions are provided:"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:13
+#, no-wrap
+msgid "void move(int src, int dst)"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:14
+#, no-wrap
+msgid "move(src, dst) throws HanoiInvalidMove"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:16
+msgid ""
+"Moves one disk from the stick <code>src</code> onto the stick "
+"<code>dst</code>. If you try to do an invalid move (like laying a disk over "
+"a smaller one), an IllegalArgumentException is thrown."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:20
+#, no-wrap
+msgid "int getSlotSize(int slot);"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:21
+#, no-wrap
+msgid "getSlotSize(slot)"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/recursion/hanoi/universe/HanoiWorld.html:22
+msgid ""
+"Returns the amount of disks placed on the specified slot. This is mainly "
+"used to initialize the recursion and set the amount of recursive call to "
+"execute."
+msgstr ""
+
+#. type: Content of: <h3>
+#: src/lessons/maze/Main.html:1 src/lessons/maze/short_desc.html:1
 msgid "Labyrinths"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/Main.html:3
-msgid "This lesson propose several exercises about labyrinths in the buggle world."
+#: src/lessons/maze/Main.html:3 src/lessons/maze/short_desc.html:3
+msgid "This lesson proposes several exercises about labyrinths in the buggle world."
 msgstr ""
 
 #. type: Content of: <h2>
@@ -6636,29 +7196,20 @@ msgstr ""
 #: src/lessons/maze/randommouse/RandomMouseMaze.html:18
 msgid ""
 "While the buggle didn't find the path to the escape, it must proceed the "
-"following way: pick a random integer between 0 and 2 by using the "
+"following way: pick a random integer between 0 and 2 by using the provided "
 "<code>random3()</code> method and make one of the following actions: moving "
 "forward if possible, turn left or turn right."
 msgstr ""
 
 #. type: Content of: <a><p>
-#: src/lessons/maze/randommouse/RandomMouseMaze.html:26
+#: src/lessons/maze/randommouse/RandomMouseMaze.html:27
 msgid ""
 "This exercise's objective is to write an algorithm allowing the buggle to "
-"find its path out of the maze. Do not forget to let your buggle pick up the "
-"baggle once it found the way out."
+"find its path out of the maze."
 msgstr ""
 
 #. type: Content of: <a><p>
 #: src/lessons/maze/randommouse/RandomMouseMaze.html:32
-msgid ""
-"Write the <code>run()</code> method so that your buggle takes a random "
-"decision (forward, turn left or turn right). You can use the "
-"<code>random3()</code> method which returns randomly either 0, 1 or 2."
-msgstr ""
-
-#. type: Content of: <a><p>
-#: src/lessons/maze/randommouse/RandomMouseMaze.html:38
 msgid "Don't forget to pick up the baggle once you've reached it."
 msgstr ""
 
@@ -6677,19 +7228,19 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:6
 msgid ""
-"Hopefully, this maze is simpler that it seems at the first glance: every "
-"wall are connected to each other. To get out of this kind of maze, the "
-"buggle only have to follow a wall (the one on its left or the one on its "
-"right, it doesn't matter).  While keeping a paw on the wall, the buggle must "
-"move forward until it finds the maze exit and this biscuit it loves so much."
+"The good news is that this maze is simpler that it seems at the first "
+"glance: every wall are connected to each other. To get out of this kind of "
+"maze, the buggle only have to follow a wall (the one on its left or the one "
+"on its right, it doesn't matter).  While keeping a paw on the wall, the "
+"buggle must move forward until it finds the maze exit and this biscuit it "
+"loves so much."
 msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:13
 msgid ""
-"This algorithm works here because there is no island of isolated walls, so "
-"our buggle cannot loop around for ever without encountering the baggle it "
-"looks for."
+"This works here because there is no island of isolated walls, so our buggle "
+"cannot loop around for ever without encountering its baggle."
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
@@ -6702,29 +7253,28 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:20
 msgid ""
-"As said in the introduction, it is exactly the same if you decide to follow "
-"the left wall or the right one. Simply, the demo follows the left one, so "
-"you should do the same in your solution to ease the comparison of your "
-"solution and the demo."
+"As said earlier, it does not matter whether you decide to follow the left "
+"wall or the right one. Simply, the demo follows the left one, so you should "
+"do the same in your solution to ease the comparison of your solution and the "
+"demo."
 msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:25
 msgid ""
-"Write a method <code>void keepHandOnSideWall()</code> which lets the buggle "
-"move one step forward while keeping the paw on the wall of the selected "
-"side. You thus have to ensure that the buggle always keep the paw on the "
-"wall, but also that it won't crash into a wall. You can check the tip for "
-"more info on this, but only do so if you're stuck. Try to do it without the "
-"tip first."
+"Write a method <code>keepHandOnSideWall()</code> which lets the buggle move "
+"one step forward while keeping the paw on the wall of the selected side. You "
+"must ensure that the buggle always keep the paw on the wall, but also that "
+"it won't crash into a wall. You can check the tip for more info on this, but "
+"only do so if you're stuck. Try to do it without the tip first."
 msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:32
 msgid ""
-"Then, write a <code>run()</code> method which traverse the maze step by step "
-"(using <code>void keepHandOnSideWall()</code>) until it finds the biscuit "
-"and the exit. Don't forget to pick the baggle up once you've found it."
+"Then, write the whole algorithm to traverse the maze step by step (using "
+"<code>keepHandOnSideWall()</code>) until it finds the biscuit and the "
+"exit. Don't forget to pick the baggle up once you've found it."
 msgstr ""
 
 #. type: Attribute 'alt' of: <div>
@@ -6770,7 +7320,7 @@ msgstr ""
 #: src/lessons/maze/wallfollower/WallFollowerMaze.html:60
 msgid ""
 "If you do a <code>turnRight()</code> in any case at the end of your "
-"function, it's possible to write it in 3 lines with a <code>while()</code> "
+"function, it's possible to write it in 3 lines with a <code>while</code> "
 "loop."
 msgstr ""
 
@@ -6784,21 +7334,22 @@ msgstr ""
 msgid ""
 "Once again, you thought that your algorithm were good enough to escape the "
 "maze, and once again, you buggle is now in a maze where your previous "
-"algorithm fails. Just give it a try: hit the \"Run\" button and see your "
-"creation fail. The trap is shaped like an upper case \"G\". The buggle "
-"enters the trap and follows the inner border. At some point, it finds the "
-"north direction free, run into that direction, and falls again in the trap."
+"algorithm fails. Just give it a try: copy/paste your code and hit the "
+"\"Run\" button and see your creation fail. The trap is shaped like an upper "
+"case \"G\". The buggle enters the trap and follows the inner border. At some "
+"point, it finds the north direction free, run into that direction, and falls "
+"again in the trap."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:12
+#: src/lessons/maze/pledge/PledgeMaze.html:13
 msgid ""
 "The Pledge's algorithm (named after Jon Pledge of Exeter) can solve this "
 "maze."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:15
+#: src/lessons/maze/pledge/PledgeMaze.html:16
 msgid ""
 "This algorithm is a modification of the previous one thought to avoid "
 "obstacles. It randomly picks a heading and let the buggle move in that "
@@ -6810,7 +7361,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:23
+#: src/lessons/maze/pledge/PledgeMaze.html:24
 msgid ""
 "Note that the use of \"total turning\" rather than just the \"current "
 "direction\" allows the algorithm to avoid G-shapped traps. If one proceeds "
@@ -6821,7 +7372,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:30
+#: src/lessons/maze/pledge/PledgeMaze.html:31
 msgid ""
 "The Pledge's algorithm does not leave the rightmost wall due to the total "
 "turning not being zero at that point. It follows the wall all the way "
@@ -6829,33 +7380,32 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:37
+#: src/lessons/maze/pledge/PledgeMaze.html:38
 msgid ""
 "<a name=\"Objective\"/>You now have to modify your solution to implement the "
 "Pledge algorithm to escape this maze."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:40
+#: src/lessons/maze/pledge/PledgeMaze.html:41
 msgid ""
-"Change your <code>void keepHandOnSideWall()</code> method to count the "
-"amount of turns done by the buggle (+1 when it turns left, and -1 when it "
-"turns right). This counting may require the addition of an "
-"<code>angleSum</code> integer value in your program."
+"Change your <code>keepHandOnSideWall()</code> method to count the amount of "
+"turns done by the buggle (+1 when it turns left, and -1 when it turns "
+"right). This counting may require the addition of an <code>angleSum</code> "
+"integer value in your program."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/pledge/PledgeMaze.html:45
+#: src/lessons/maze/pledge/PledgeMaze.html:46
 msgid ""
-"Write a <code>boolean isChosenDirectionFree()</code> method indicating if "
-"the arbitrary direction you picked up is free, ie, if you can move in that "
-"direction. (Note that the demo uses the NORTH direction for that).  You can "
-"retrieve the current direction of the buggle using the <code>Direction "
-"getDirection()</code> method. You can change your direction (without moving) "
-"using <code>void setDirection(Direction d)</code>. Don't forget to store the "
-"previous direction of your buggle (in a variable of type Direction) before "
-"checking if your favorite direction is free in order to restore your state "
-"afterward."
+"Write a boolean method <code>isDirectionFree(dir)</code> indicating if the "
+"provided direction is free, ie, if you can move in that direction (Note that "
+"the demo uses the NORTH direction for that).  You can retrieve the current "
+"direction of the buggle using the method <code>getDirection()</code>. You "
+"can change your direction (without moving) using "
+"<code>setDirection(dir)</code>. Don't forget to store the previous direction "
+"of your buggle (in a dedicated variable) before checking if your favorite "
+"direction is free in order to restore your state afterward."
 msgstr ""
 
 #. type: Content of: <p>
@@ -6865,21 +7415,39 @@ msgid ""
 "remain limited."
 msgstr ""
 
-#. type: Attribute 'alt' of: <div>
+#. type: Content of: <p>
 #: src/lessons/maze/pledge/PledgeMaze.html:58
+msgid ""
+"Don't forget that if you have a method modifying a global variable (such as "
+"angleSum), you should ensure that it declares this variable as "
+"global. Without it, the method creates a new variable of the same name, and "
+"the global never gets modified."
+msgstr ""
+
+#. type: Content of: <div><pre>
+#: src/lessons/maze/pledge/PledgeMaze.html:62
+#, no-wrap
+msgid ""
+"def myMethod():\n"
+"  global angleSum\n"
+"  ...\n"
+"  angleSum = angleSum + 1\n"
+msgstr ""
+
+#. type: Attribute 'alt' of: <div>
+#: src/lessons/maze/pledge/PledgeMaze.html:68
 msgid "Show an additional tip"
 msgstr ""
 
 #. type: Content of: <div>
-#: src/lessons/maze/pledge/PledgeMaze.html:59
-msgid ""
-"The <code>void run()</code> method should move in your favorite direction "
-"(NORTH is advised). Then, you should write the algorithm main loop. In other "
-"words, while your buggle did not find its biscuit, you have to move forward "
-"until next obstacle in the favorite direction. Then, put a paw on a wall "
-"(using (<code>void keepHandOnSideWall()</code>) while the sum of turns is "
-"not null and the favorite direction is not free. Do that until you find your "
-"baggle."
+#: src/lessons/maze/pledge/PledgeMaze.html:69
+msgid ""
+"You should set your direction to your favorite one (NORTH is advised). Then, "
+"you should write the algorithm main loop. In other words, while your buggle "
+"did not find its biscuit, you have to move forward until next obstacle in "
+"the favorite direction. Then, put a paw on a wall (using "
+"(<code>keepHandOnSideWall()</code>) while the sum of turns is not null and "
+"the favorite direction is not free. Do that until you find your baggle."
 msgstr ""
 
 #. type: Content of: <h2>
@@ -6909,8 +7477,8 @@ msgid ""
 "That is why the previous strategy would let the buggle round around for "
 "ever. Indeed, the maze you should now escape from contains islands, and the "
 "buggle does not start along one of the external walls. Just give it a try if "
-"you want: push the run button and see your previous solution fail "
-"miserabily."
+"you want: copy your code over, push the run button and see your previous "
+"solution failing miserabily."
 msgstr ""
 
 #. type: Content of: <p><p>
@@ -6953,27 +7521,35 @@ msgstr ""
 #: src/lessons/maze/island/IslandMaze.html:40
 #, no-wrap
 msgid ""
-"\t<code>int state=0;\n"
+"\t<code div=\"Java\">int state=0;\n"
 "switch (state) {\n"
-"  case 0: \n"
+"  case 0: // North runner\n"
 "     ...\n"
 "     state = 1;\n"
 "     break;\n"
-"  case 1:\n"
+"  case 1: // Left follower\n"
 "     ...\n"
 "     state = 0;\n"
 "     break;\n"
 "}\n"
 "</code>\n"
+"<code div=\"python\">northRunner = True\n"
+"if northRunner:\n"
+"     ...\n"
+"     northRunner = False\n"
+"else: # left follower\n"
+"     ...\n"
+"     northRunner = True\n"
+"</code>\n"
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/maze/island/IslandMaze.html:55
+#: src/lessons/maze/island/IslandMaze.html:63
 msgid "Don't forget to let the buggle pick the baggle at the end of your code."
 msgstr ""
 
 #. type: Content of: <p><p><p>
-#: src/lessons/maze/island/IslandMaze.html:58
+#: src/lessons/maze/island/IslandMaze.html:66
 msgid ""
 "You're up. That should be enough for you to figure out how to escape this "
 "maze, but if not, you can always request for the tip. But you do not need "
@@ -6997,92 +7573,57 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:7
 msgid ""
-"By using method <code>BuggleWorld getMyWorld()</code> he can retrieve "
-"information about the world he is leaving in."
+"Without even leaving his position, he can retrieve information about the "
+"world he is leaving in, with the following functions:"
 msgstr ""
 
-#. type: Content of: <p>
+#. type: Content of: <ul><li>
 #: src/lessons/maze/shortestpath/ShortestPathMaze.html:9
-msgid ""
-"A <code>BuggleWorld</code> object is an object on which you can perform the "
-"following operations:"
-msgstr ""
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:11
-msgid "<code>int getHeight()</code> to know the height of the world."
-msgstr ""
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:12
-msgid "<code>int getWidth()</code> to know the width of the world."
+msgid "<code>getWorldWidth()</code> gives the width of its world."
 msgstr ""
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:13
-msgid ""
-"<code>BuggleWorldCell getCell(int x, int y)</code> to retrieve the "
-"<code>BuggleWorldCell</code> object located at a specific position in the "
-"world."
-msgstr ""
-
-#. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:19
-msgid ""
-"A <code>BuggleWorldCell</code> is an object that represents a cell of the "
-"world. On an object of this type, it is possible to call the following "
-"methods:"
-msgstr ""
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:22
-msgid ""
-"<code>boolean hasContent()</code> to know if something is written on the "
-"floor of this cell."
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:10
+msgid "<code>getWorldHeight()</code> gives the height of its world."
 msgstr ""
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:23
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:11
 msgid ""
-"<code>void setContentFromInt(int v)</code> to write an integer value on the "
-"floor of this cell."
+"<code>hasTopWall(x,y)</code> tells whether the cell (x,y) of this world has "
+"a wall on top."
 msgstr ""
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:24
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:12
 msgid ""
-"<code>int getContentAsInt()</code> to retrieve the integer value which is "
-"written on the floor of this cell."
-msgstr ""
-
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:25
-msgid "<code>void emptyContent()</code> to clean the floor of this cell."
+"<code>hasLeftWall(x,y)</code> tells whether the cell (x,y) of this world has "
+"a wall on the left."
 msgstr ""
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:26
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:13
 msgid ""
-"<code>boolean hasTopWall()</code> to know if a wall is built on the top edge "
-"of this cell."
+"<code>hasBaggle(x,y)</code> tells whether the cell (x,y) of this world has a "
+"baggle."
 msgstr ""
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:27
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:14
 msgid ""
-"<code>boolean hasLeftWall()</code> to know if a wall is built on the left "
-"edge of this cell."
+"<code>setIndication(x,y,i)</code> adds the integer indication <code>i</code> "
+"to the cell (x,y)."
 msgstr ""
 
-#. type: Content of: <p><ul><li>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:28
+#. type: Content of: <ul><li>
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:15
 msgid ""
-"<code>boolean hasBaggle()</code> to know if a baggle is present on this "
-"cell."
+"<code>getIndication(x,y,i)</code> retrieves the integer indication of the "
+"cell (x,y) (or 9999 if there is no indication)."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:32
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:18
 msgid ""
 "It has to be noted that it is not possible to build a wall on the bottom "
 "edge or on the right edge of a cell.  Therefore when such wall exists, it "
@@ -7092,44 +7633,40 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:38
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:24
 msgid ""
-"<a name=\"Objective\"/>Write a method <code>evaluatePaths()</code> which "
-"computes a very basic shortest path algorithm. This algorithm will write on "
-"each world cell (or at least the one that are useful) the distance from this "
-"cell to the maze exit."
+"Your buggle should first write the distance to the exit on each cell (or at "
+"least the useful ones)."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:41
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:25
 msgid ""
-"To achieve this objective, your algorithm has to find the exit of the maze "
-"on the map. Then, for every cells next to the cell where the exit is "
-"located, it has to mark these cells with a integer value of 1 (indicating "
-"the distance). Then, it has to iterate the same process to mark the cells "
-"which are at a distance of 2 and so on until it marks the cell where the "
-"buggle is located."
+"For that, find the exit and write 0 there.  Then, write 1 on every "
+"neighboring cells that is not separated from the exit with a wall.  And then "
+"mark every cells from which you can reach the exit in 2 steps, and iterate "
+"for all cells until you mark the cell where the buggle is located."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:46
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:30
 msgid ""
-"Write a method <code>followShortestPath()</code> that will make the jedi "
-"buggle to follow the shortest path.  Basically the buggle has only to walk "
-"on each case with the lesser distance from the exit. You can use the method "
-"<code>void setDirection(Direction d)</code> to make your buggle look at the "
+"Once the cells are marked, get your jedi buggle to follow the shortest "
+"path.  Basically the buggle has only to walk on each case with the lesser "
+"distance from the exit. You can use the method "
+"<code>setDirection(direction)</code> to make your buggle look at the "
 "specific direction such as <code>Direction.NORTH</code> or "
 "<code>Direction.EAST</code>."
 msgstr ""
 
 #. type: Attribute 'alt' of: <div>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:51
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:35
 msgid "I'm lost now. Please give me some extra indications."
 msgstr ""
 
 #. type: Content of: <div>
-#: src/lessons/maze/shortestpath/ShortestPathMaze.html:52
-msgid "Use the Force Luke!"
+#: src/lessons/maze/shortestpath/ShortestPathMaze.html:36
+msgid "Use the Force, Luke!"
 msgstr ""
 
 #. type: Content of: <h2>
@@ -7149,11 +7686,10 @@ msgstr ""
 #: src/lessons/maze/wallfindfollow/WallFindFollowMaze.html:7
 msgid ""
 "As a result, the method you wrote for the previous exercise probably don't "
-"work for this one. If you click on the run button with no modification, your "
-"buggle probably start looping over the four free cells around its start "
-"position (if that's not the case, well, you didn't really stick to the "
-"mission on previous exercise. Feel lucky and move to the next one once "
-"you've read this text)."
+"work for this one. If you use it here with no modification, your buggle "
+"probably start looping over the four free cells around its start position "
+"(if that's not the case, well, you didn't really stick to the mission on "
+"previous exercise. Feel lucky and proceed to the next :)"
 msgstr ""
 
 #. type: Content of: <p>
@@ -7172,8 +7708,8 @@ msgstr ""
 msgid ""
 "Fixing the problem should be very easy. Simply make sure that the "
 "pre-condition of <code>keepHandOnSideWall()</code> is verified before "
-"calling it. For that, update your run() method to first look for a wall on "
-"its left before the big <code>while</code> loop."
+"calling it. For that, update your code to first look for a wall on its left "
+"before the big <code>while</code> loop."
 msgstr ""
 
 #. type: Content of: <h1>
@@ -7273,8 +7809,8 @@ msgid ""
 "Yaroslavski (Coolio-Niato), the original idea being of Matt Chase."
 msgstr ""
 
-#. type: Content of: <h1>
-#: src/lessons/lightbot/Main.html:1
+#. type: Content of: <h3>
+#: src/lessons/lightbot/Main.html:1 src/lessons/lightbot/short_desc.html:1
 msgid "LightBot"
 msgstr ""
 
@@ -7290,13 +7826,27 @@ msgstr ""
 msgid "See the <i>About this world</i> dialog for more details."
 msgstr ""
 
+#. type: Content of: <p>
+#: src/lessons/lightbot/short_desc.html:3
+msgid ""
+"This lesson constitutes a little brain teaser for programmers. You have to "
+"instruct your robot to turn off all lights. The trick is that you program "
+"your robot graphically, and that you are limited in the amount of "
+"instructions."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/lightbot/short_desc.html:8
+msgid "No previous experience is expected to take this lesson."
+msgstr ""
+
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:1
+#: src/lessons/lightbot/Board01TwoSteps.html:1
 msgid "Welcome"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:3
+#: src/lessons/lightbot/Board01TwoSteps.html:3
 msgid ""
 "Welcome to the lightbot world. This is merely a programmer puzzle rather "
 "than a real lesson (although some use it to teach programming).  The robot "
@@ -7305,170 +7855,170 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><</p><p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:6
+#: src/lessons/lightbot/Board01TwoSteps.html:6
 msgid ""
 "The goal of each board is simply to switch on every lights of the board "
 "using your little robot."
 msgstr ""
 
 #. type: Content of: <p><</p><p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:8
+#: src/lessons/lightbot/Board01TwoSteps.html:8
 msgid ""
 "This is a introduction exercise, which should be solvable by only moving "
 "forward and switching the light, using respectively"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:8 src/lessons/lightbot/mission2/Board02Turn.html:3 src/lessons/lightbot/mission6/Board06Func.html:3
+#: src/lessons/lightbot/Board01TwoSteps.html:10 src/lessons/lightbot/Board02Turn.html:4 src/lessons/lightbot/Board06Func.html:3
 msgid "and"
 msgstr ""
 
 #. type: Content of: <p><</p><p>
-#: src/lessons/lightbot/mission1/Board01TwoSteps.html:8
+#: src/lessons/lightbot/Board01TwoSteps.html:10
 msgid "."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission2/Board02Turn.html:1
+#: src/lessons/lightbot/Board02Turn.html:1
 msgid "Turn around"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission2/Board02Turn.html:3
+#: src/lessons/lightbot/Board02Turn.html:3
 msgid "Now, you probably need to turn in addition (using"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission2/Board02Turn.html:3
+#: src/lessons/lightbot/Board02Turn.html:4
 msgid ")."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission3/Board03Jump.html:1
+#: src/lessons/lightbot/Board03Jump.html:1
 msgid "Jump"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission3/Board03Jump.html:3
+#: src/lessons/lightbot/Board03Jump.html:3
 msgid "You can also jump using"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission3/Board03Jump.html:3
+#: src/lessons/lightbot/Board03Jump.html:3
 msgid ""
 "to pass obstacles. You can either jump one level up or any amount of levels "
 "down, but you cannot jump to go on a cell of the same height."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission4/Board04Stairs.html:1
+#: src/lessons/lightbot/Board04Stairs.html:1
 msgid "Stairs"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission4/Board04Stairs.html:3
+#: src/lessons/lightbot/Board04Stairs.html:3
 msgid "Can you pass these stairs?"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission5/Board05Higher.html:1
+#: src/lessons/lightbot/Board05Higher.html:1
 msgid "Higher"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission5/Board05Higher.html:3
+#: src/lessons/lightbot/Board05Higher.html:3
 msgid "Let's go higher"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission6/Board06Func.html:1
+#: src/lessons/lightbot/Board06Func.html:1
 msgid "Functions"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission6/Board06Func.html:3
+#: src/lessons/lightbot/Board06Func.html:3
 msgid "You can use"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission6/Board06Func.html:3
+#: src/lessons/lightbot/Board06Func.html:3
 msgid ""
 "to call respectively the first and second functions. Define their code in "
 "their own tab."
 msgstr ""
 
 #. type: Content of: <p><p>
-#: src/lessons/lightbot/mission6/Board06Func.html:5
+#: src/lessons/lightbot/Board06Func.html:5
 msgid "This is great if you get out of space in your main function"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission7/Board07Repeat.html:1
+#: src/lessons/lightbot/Board07Repeat.html:1
 msgid "Repetitive tasks"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission7/Board07Repeat.html:3
+#: src/lessons/lightbot/Board07Repeat.html:3
 msgid "Functions are also of great use for repetitive tasks"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission8/Board08Rec.html:1
+#: src/lessons/lightbot/Board08Rec.html:1
 msgid "Calling functions from functions"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission8/Board08Rec.html:3
+#: src/lessons/lightbot/Board08Rec.html:3
 msgid "It is perfectly okay to call a function from within a function!"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission9/Board09Castle.html:1
+#: src/lessons/lightbot/Board09Castle.html:1
 msgid "Castle"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission9/Board09Castle.html:3
+#: src/lessons/lightbot/Board09Castle.html:3
 msgid "You're getting good at this..."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission10/Board10Wall.html:1
+#: src/lessons/lightbot/Board10Wall.html:1
 msgid "Wall"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission10/Board10Wall.html:3
+#: src/lessons/lightbot/Board10Wall.html:3
 msgid "Ready to climb the wall?"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission11/Board11Sea.html:1
+#: src/lessons/lightbot/Board11Sea.html:1
 msgid "Sea"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission11/Board11Sea.html:3
+#: src/lessons/lightbot/Board11Sea.html:3
 msgid "You now have to surf these waves of lamps."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/lightbot/mission12/Board12Escher.html:1
+#: src/lessons/lightbot/Board12Escher.html:1
 msgid "Escher Castle"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/lightbot/mission12/Board12Escher.html:3
+#: src/lessons/lightbot/Board12Escher.html:3
 msgid "This one aint easy."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/close10/Close10.html:1
+#: src/lessons/welcome/bool1/Close10.html:1
 msgid "Close to 10"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bool1/close10/Close10.html:2
+#: src/lessons/welcome/bool1/Close10.html:2
 msgid ""
 "Given 2 int values, return whichever value is nearest to the value 10, or "
 "return 0 in the event of a tie. Note that Math.abs(n) returns the absolute "
@@ -7476,104 +8026,100 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bool1/close10/Close10.html:5
+#: src/lessons/welcome/bool1/Close10.html:5
 msgid ""
 "Given 2 int values, return whichever value is nearest to the value 10, or "
 "return 0 in the event of a tie. Note that math.fabs(n) returns the absolute "
-"value of a number."
+"value of a number. Note also that this function can only be used if you "
+"imported the math module."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bool1/close10/Close10.html:9 src/lessons/welcome/bool1/diff21/Diff21.html:5 src/lessons/welcome/bool1/hasteen/HasTeen.html:6 src/lessons/welcome/bool1/icyhot/IcyHot.html:5 src/lessons/welcome/bool1/in1020/In1020.html:5 src/lessons/welcome/bool1/in3050/In3050.html:5 src/lessons/welcome/bool1/lastdigit/LastDigit.html:9 src/lessons/welcome/bool1/loneteen/LoneTeen.html:6 src/lessons/welcome/bool1/Main.html:11 src/lessons/welcome/bool1/makes10/Makes10.html:5 src/lessons [...]
+#: src/lessons/welcome/bool1/Close10.html:10 src/lessons/welcome/bool1/Diff21.html:5 src/lessons/welcome/bool1/HasTeen.html:6 src/lessons/welcome/bool1/IcyHot.html:5 src/lessons/welcome/bool1/In1020.html:5 src/lessons/welcome/bool1/In3050.html:5 src/lessons/welcome/bool1/LastDigit.html:9 src/lessons/welcome/bool1/LoneTeen.html:6 src/lessons/welcome/bool1/Main.html:11 src/lessons/welcome/bool1/Makes10.html:5 src/lessons/welcome/bool1/Max1020.html:8 src/lessons/welcome/bool1/MonkeyTrouble. [...]
 msgid ""
 "This exercise was converted to JLM from the excellent exercising site "
 "http://javabat.com/"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/countteen/CountTeen.html:1
+#: src/lessons/welcome/bool1/CountTeen.html:1
 msgid "Count Teen"
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/countteen/CountTeen.html:2
+#. type: Content of: <p>
+#: src/lessons/welcome/bool1/CountTeen.html:2
 msgid ""
 "We'll say that a number is \"teen\" if it is in the range 13..19 "
 "inclusive. Given 4 int values, return the amount of teen ones."
 msgstr ""
 
-#. type: Content of: <p>
-#: src/lessons/welcome/bool1/countteen/CountTeen.html:5
-msgid "This exercise was written by Martin Quinson."
-msgstr ""
-
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/diff21/Diff21.html:1
+#: src/lessons/welcome/bool1/Diff21.html:1
 msgid "Diff 21"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/diff21/Diff21.html:2
+#: src/lessons/welcome/bool1/Diff21.html:2
 msgid ""
 "Given an int n, return the absolute difference between n and 21, except "
 "return double the absolute difference if n is over 21."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/hasteen/HasTeen.html:1
+#: src/lessons/welcome/bool1/HasTeen.html:1
 msgid "Has Teen"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/hasteen/HasTeen.html:2
+#: src/lessons/welcome/bool1/HasTeen.html:2
 msgid ""
 "We'll say that a number is \"teen\" if it is in the range 13..19 "
 "inclusive. Given 3 int values, return true if 1 or more of them are teen."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/icyhot/IcyHot.html:1
+#: src/lessons/welcome/bool1/IcyHot.html:1
 msgid "Icy Hot"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/icyhot/IcyHot.html:2
+#: src/lessons/welcome/bool1/IcyHot.html:2
 msgid ""
 "Given two temperatures, return true if one is less than 0 and the other is "
 "greater than 100."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/in1020/In1020.html:1
+#: src/lessons/welcome/bool1/In1020.html:1
 msgid "In [10;20]"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/in1020/In1020.html:2
+#: src/lessons/welcome/bool1/In1020.html:2
 msgid ""
 "Given 2 int values, return true if either of them is in the range 10..20 "
 "inclusive."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/in3050/In3050.html:1
+#: src/lessons/welcome/bool1/In3050.html:1
 msgid "In [30;50]"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/in3050/In3050.html:2
+#: src/lessons/welcome/bool1/In3050.html:2
 msgid ""
 "Given 2 int values, return true if they are both in the range 30..40 "
 "inclusive, or they are both in the range 40..50 inclusive."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/lastdigit/LastDigit.html:1
+#: src/lessons/welcome/bool1/LastDigit.html:1
 msgid "LastDigit"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/lastdigit/LastDigit.html:2
+#: src/lessons/welcome/bool1/LastDigit.html:2
 msgid ""
 "Given two non-negative int values, return true if they have the same last "
 "digit, such as with 27 and 57. Note that the % \"mod\" operator computes "
@@ -7581,12 +8127,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/loneteen/LoneTeen.html:1
+#: src/lessons/welcome/bool1/LoneTeen.html:1
 msgid "Lone Teen"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/loneteen/LoneTeen.html:2
+#: src/lessons/welcome/bool1/LoneTeen.html:2
 msgid ""
 "We'll say that a number is \"teen\" if it is in the range 13..19 "
 "inclusive. Given 2 int values, return true if one or the other is teen, but "
@@ -7614,36 +8160,36 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/makes10/Makes10.html:1
+#: src/lessons/welcome/bool1/Makes10.html:1
 msgid "Makes 10"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/makes10/Makes10.html:2
+#: src/lessons/welcome/bool1/Makes10.html:2
 msgid ""
 "Given 2 ints, a and b, return true if one if them is 10 or if their sum is "
 "10."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/max1020/Max1020.html:1
+#: src/lessons/welcome/bool1/Max1020.html:1
 msgid "Max1020"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/max1020/Max1020.html:2
+#: src/lessons/welcome/bool1/Max1020.html:2
 msgid ""
 "Given 2 positive int values, return the larger value that is in the range "
 "10..20 inclusive, or return 0 if neither is in that range."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.html:1
+#: src/lessons/welcome/bool1/MonkeyTrouble.html:1
 msgid "MonkeyTrouble"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.html:3
+#: src/lessons/welcome/bool1/MonkeyTrouble.html:3
 msgid ""
 "We have two monkeys, a and b, and the parameters aSmile and bSmile indicate "
 "if each is smiling.  We are in trouble if they are both smiling or if "
@@ -7651,24 +8197,24 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/nearhundred/NearHundred.html:1
+#: src/lessons/welcome/bool1/NearHundred.html:1
 msgid "Near Hundred"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/bool1/nearhundred/NearHundred.html:2
+#: src/lessons/welcome/bool1/NearHundred.html:2
 msgid ""
 "Given an int n, return true if it is within 10 of 100 or 200. Note "
 "Math.abs(n) returns the absolute value of a number."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/parottrouble/ParotTrouble.html:1
+#: src/lessons/welcome/bool1/ParotTrouble.html:1
 msgid "Parot Trouble"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/parottrouble/ParotTrouble.html:3
+#: src/lessons/welcome/bool1/ParotTrouble.html:3
 msgid ""
 "We have a loud talking parrot. The \"hour\" parameter is the current hour "
 "time in the range 0..23. We are in trouble if the parrot is talking and the "
@@ -7676,24 +8222,24 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/posneg/PosNeg.html:1
+#: src/lessons/welcome/bool1/PosNeg.html:1
 msgid "Positive Negative"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/posneg/PosNeg.html:2
+#: src/lessons/welcome/bool1/PosNeg.html:2
 msgid ""
 "Given 2 int values, return true if one is negative and one is "
 "positive. Unless negative is true, then they both must be negative."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/sleepin/SleepIn.html:1
+#: src/lessons/welcome/bool1/SleepIn.html:1
 msgid "SleepDay"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/sleepin/SleepIn.html:3
+#: src/lessons/welcome/bool1/SleepIn.html:3
 msgid ""
 "The parameter weekday is true if it is a weekday, and the parameter vacation "
 "is true if we are on vacation. We sleep in if it is not a weekday or we're "
@@ -7701,24 +8247,24 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool1/sumdouble/SumDouble.html:1
+#: src/lessons/welcome/bool1/SumDouble.html:1
 msgid "Sum Double"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool1/sumdouble/SumDouble.html:2
+#: src/lessons/welcome/bool1/SumDouble.html:2
 msgid ""
 "Given two int values, return their sum. Unless the two values are the same, "
 "then return double their sum."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/alarmclock/AlarmClock.html:1
+#: src/lessons/welcome/bool2/AlarmClock.html:1
 msgid "AlarmClock"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/alarmclock/AlarmClock.html:2
+#: src/lessons/welcome/bool2/AlarmClock.html:2
 msgid ""
 "Given a day of the week encoded as 0=Sun, 1=Mon, 2=Tue, ...6=Sat, and a "
 "boolean indicating if we are on vacation, return a string of the form "
@@ -7729,12 +8275,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/answercell/AnswerCell.html:1
+#: src/lessons/welcome/bool2/AnswerCell.html:1
 msgid "AnswerCell"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/answercell/AnswerCell.html:2
+#: src/lessons/welcome/bool2/AnswerCell.html:2
 msgid ""
 "Your cell phone rings. Return true if you should answer it. Normally you "
 "answer, except in the morning you only answer if it is your mom calling. In "
@@ -7742,12 +8288,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/ticket/blue/BlueTicket.html:1
+#: src/lessons/welcome/bool2/BlueTicket.html:1
 msgid "BlueTicket"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/ticket/blue/BlueTicket.html:2
+#: src/lessons/welcome/bool2/BlueTicket.html:2
 msgid ""
 "You have a blue lottery ticket, with ints a, b, and c on it. This makes "
 "three pairs, which we'll call ab, bc, and ac. Consider the sum of the "
@@ -7757,12 +8303,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.html:1
+#: src/lessons/welcome/bool2/CaughtSpeeding.html:1
 msgid "CaughtSpeeding"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.html:2
+#: src/lessons/welcome/bool2/CaughtSpeeding.html:2
 msgid ""
 "You are driving a little too fast, and a police officer stops you. Write "
 "code to compute the result, encoded as an int value: 0=no ticket, 1=small "
@@ -7773,12 +8319,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/party/cigar/CigarParty.html:1
+#: src/lessons/welcome/bool2/CigarParty.html:1
 msgid "CigarParty"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/party/cigar/CigarParty.html:2
+#: src/lessons/welcome/bool2/CigarParty.html:2
 msgid ""
 "When squirrels get together for a party, they like to have cigars. A "
 "squirrel party is successful when the number of cigars is between 40 and 60, "
@@ -7787,12 +8333,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/datefashion/DateFashion.html:1
+#: src/lessons/welcome/bool2/DateFashion.html:1
 msgid "DateFashion"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/datefashion/DateFashion.html:2
+#: src/lessons/welcome/bool2/DateFashion.html:2
 msgid ""
 "You and your date are trying to get a table at a restaurant. The parameter "
 "\"you\" is the stylishness of your clothes, in the range 0..10, and \"date\" "
@@ -7804,12 +8350,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/ticket/green/GreenTicket.html:1
+#: src/lessons/welcome/bool2/GreenTicket.html:1
 msgid "GreenTicket"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/ticket/green/GreenTicket.html:2
+#: src/lessons/welcome/bool2/GreenTicket.html:2
 msgid ""
 "You have a green lottery ticket, with ints a, b, and c on it. If the numbers "
 "are all different from each other, the result is 0. If all of the numbers "
@@ -7818,12 +8364,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/in1to10/In1To10.html:1
+#: src/lessons/welcome/bool2/In1To10.html:1
 msgid "In1To10"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/in1to10/In1To10.html:2
+#: src/lessons/welcome/bool2/In1To10.html:2
 msgid ""
 "Given a number n, return true if n is in the range 1..10, inclusive. Unless "
 "\"outsideMode\" is true, in which case return true if the number is less or "
@@ -7831,12 +8377,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/inorderequals/InOrderEqual.html:1
+#: src/lessons/welcome/bool2/InOrderEqual.html:1
 msgid "InOrderEqual"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/inorderequals/InOrderEqual.html:2
+#: src/lessons/welcome/bool2/InOrderEqual.html:2
 msgid ""
 "Given three ints, a b c, return true if they are in strict increasing order, "
 "such as 2 5 11, or 5 6 7, but not 6 5 7 or 5 5 7. However, with the "
@@ -7845,12 +8391,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/inorder/InOrder.html:1
+#: src/lessons/welcome/bool2/InOrder.html:1
 msgid "InOrder"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/inorder/InOrder.html:2
+#: src/lessons/welcome/bool2/InOrder.html:2
 msgid ""
 "Given three ints, a b c, return true if b is greater than a, and c is "
 "greater than b. However, with the exception that if \"bOk\" is true, b does "
@@ -7858,12 +8404,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/lastdigit2/LastDigit2.html:1
+#: src/lessons/welcome/bool2/LastDigit2.html:1
 msgid "LastDigit 2"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/lastdigit2/LastDigit2.html:2
+#: src/lessons/welcome/bool2/LastDigit2.html:2
 msgid ""
 "Given three ints, a b c, return true if two or more of them have the same "
 "rightmost digit. The ints are non-negative. Note: the % \"mod\" operator "
@@ -7871,12 +8417,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/lessby10/LessBy10.html:1
+#: src/lessons/welcome/bool2/LessBy10.html:1
 msgid "LessBy10"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/lessby10/LessBy10.html:2
+#: src/lessons/welcome/bool2/LessBy10.html:2
 msgid ""
 "Given three ints, a b c, return true if one of them is 10 or more less than "
 "one of the others."
@@ -7895,12 +8441,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/maxmod5/MaxMod5.html:1
+#: src/lessons/welcome/bool2/MaxMod5.html:1
 msgid "MaxMod5"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/maxmod5/MaxMod5.html:2
+#: src/lessons/welcome/bool2/MaxMod5.html:2
 msgid ""
 "Given two int values, return whichever value is larger. However if the two "
 "values have the same remainder when divided by 5, then the return the "
@@ -7909,12 +8455,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/nearten/NearTen.html:1
+#: src/lessons/welcome/bool2/NearTen.html:1
 msgid "NearTen"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/nearten/NearTen.html:2
+#: src/lessons/welcome/bool2/NearTen.html:2
 msgid ""
 "Given a non-negative number \"num\", return true if num is within 2 of a "
 "multiple of 10. Note: (a % b) is the remainder of dividing a by b, so (7 % "
@@ -7922,12 +8468,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/ticket/red/RedTicket.html:1
+#: src/lessons/welcome/bool2/RedTicket.html:1
 msgid "RedTicket"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/ticket/red/RedTicket.html:2
+#: src/lessons/welcome/bool2/RedTicket.html:2
 msgid ""
 "You have a red lottery ticket showing ints a, b, and c, each of which is 0, "
 "1, or 2. If they are all the value 2, the result is 10. Otherwise if they "
@@ -7936,12 +8482,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/sharedigit/ShareDigit.html:1
+#: src/lessons/welcome/bool2/ShareDigit.html:1
 msgid "ShareDigit"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/sharedigit/ShareDigit.html:2
+#: src/lessons/welcome/bool2/ShareDigit.html:2
 msgid ""
 "Given two ints, each in the range 10..99, return true if there is a digit "
 "that appears in both numbers, such as the 2 in 12 and 23. (Note: division, "
@@ -7950,24 +8496,24 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/sortasum/SortaSum.html:1
+#: src/lessons/welcome/bool2/SortaSum.html:1
 msgid "SortaSum"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/sortasum/SortaSum.html:2
+#: src/lessons/welcome/bool2/SortaSum.html:2
 msgid ""
 "Given 2 ints, a and b, return their sum. However, sums in the range 10..19 "
 "inclusive, are forbidden, so in that case just return 20."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.html:1
+#: src/lessons/welcome/bool2/SquirrelPlay.html:1
 msgid "SquirrelPlay"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.html:2
+#: src/lessons/welcome/bool2/SquirrelPlay.html:2
 msgid ""
 "The squirrels in Palo Alto spend most of the day playing. In particular, "
 "they play if the temperature is between 60 and 90 (inclusive). Unless it is "
@@ -7977,12 +8523,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/party/tea/TeaParty.html:1
+#: src/lessons/welcome/bool2/TeaParty.html:1
 msgid "TeaParty"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/party/tea/TeaParty.html:2
+#: src/lessons/welcome/bool2/TeaParty.html:2
 msgid ""
 "We are having a party with amounts of tea and candy. Return the int outcome "
 "of the party encoded as 0=bad, 1=good, or 2=great. A party is good (1) if "
@@ -7993,12 +8539,12 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/teensum/TeenSum.html:1
+#: src/lessons/welcome/bool2/TeenSum.html:1
 msgid "TeenSum"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/teensum/TeenSum.html:2
+#: src/lessons/welcome/bool2/TeenSum.html:2
 msgid ""
 "Given 2 ints, a and b, return their sum. However, \"teen\" values in the "
 "range 13..19 inclusive, are extra lucky. So if either value is a teen, just "
@@ -8006,24 +8552,24 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/twoasone/TwoAsOne.html:1
+#: src/lessons/welcome/bool2/TwoAsOne.html:1
 msgid "TwoAsOne"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/twoasone/TwoAsOne.html:2
+#: src/lessons/welcome/bool2/TwoAsOne.html:2
 msgid ""
 "Given three ints, a b c, return true if it is possible to add two of the "
 "ints to get the third."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.html:1
+#: src/lessons/welcome/bool2/WithoutDoubles.html:1
 msgid "WithoutDoubles"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.html:2
+#: src/lessons/welcome/bool2/WithoutDoubles.html:2
 msgid ""
 "Return the sum of two 6-sided dice rolls, each in the range 1..6. However, "
 "if noDoubles is true, if the two dice show the same value, increment one die "
@@ -8087,191 +8633,139 @@ msgid ""
 "http://javabat.com/doc/string.html."
 msgstr ""
 
+#. type: Content of: <h3>
+#: src/lessons/bat/string1/short_desc.html:1
+msgid "Small exercises about strings"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/bat/string1/short_desc.html:3
+msgid ""
+"These are some training exercises around strings. But unfortunately, its "
+"integration within JLM is still ongoing."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/bat/string1/short_desc.html:6
+msgid "Please be patient with us."
+msgstr ""
+
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/altpairs/AltPairs.html:1
+#: src/lessons/bat/string1/AltPairs.html:1
 msgid "AltPairs"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/altpairs/AltPairs.html:2
+#: src/lessons/bat/string1/AltPairs.html:2
 msgid ""
 "Given a string, return a string made of the chars at indexes 0,1, 4,5, 8,9 "
 "... so \"kittens\" yields \"kien\"."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/array123/Array123.html:1
-msgid "Array123"
+#: src/lessons/bat/string1/FrontTimes.html:1
+msgid "FrontTimes"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/array123/Array123.html:2
+#: src/lessons/bat/string1/FrontTimes.html:2
 msgid ""
-"Given an array of ints, return true if .. 1, 2, 3, .. appears in the array "
-"somewhere."
+"Given a string and a non-negative int n, we'll say that the front of the "
+"string is the first 3 chars, or whatever is there if the string is less than "
+"length 3. Return n copies of the front;"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/array667/Array667.html:1
-msgid "Array667"
+#: src/lessons/bat/string1/Last2.html:1
+msgid "Last2"
 msgstr ""
 
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/array667/Array667.html:2
+#. type: Content of: <p>
+#: src/lessons/bat/string1/Last2.html:3
 msgid ""
-"Given an array of ints, return the number of times that two 6's are next to "
-"each other in the array. Also count instances where the second \"6\" is "
-"actually a 7."
+"Given a string, return the amount of times that the two last letters appear "
+"as a substring of the string. So \"hixxxhi\" yields 1 (we won't count the "
+"end substring) while \"aaaNaa\" yields 2 (substrings may overlap)."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/arraycount9/ArrayCount9.html:1
-msgid "ArrayCount9"
+#: src/lessons/bat/string1/StringBits.html:1
+msgid "StringBits"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/arraycount9/ArrayCount9.html:2
-msgid "Given an array of ints, return the number of 9's in the array."
+#: src/lessons/bat/string1/StringBits.html:2
+msgid ""
+"Given a string, return a new string made of every other char starting with "
+"the first, so \"Hello\" yields \"Hlo\"."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/arrayfront9/ArrayFront9.html:1
-msgid "ArrayFront9"
+#: src/lessons/bat/string1/StringMatch.html:1
+msgid "StringMatch"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/arrayfront9/ArrayFront9.html:2
+#: src/lessons/bat/string1/StringMatch.html:2
 msgid ""
-"Given an array of ints, return true if one of the first 4 elements in the "
-"array is a 9. The array length may be less than 4."
+"Given 2 strings, a and b, return the number of the positions where they "
+"contain the same length 2 substring. So \"xxcaazz\" and \"xxbaaz\" yields 3, "
+"since the \"xx\", \"aa\", and \"az\" substrings appear in the same place in "
+"both strings."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/fronttimes/FrontTimes.html:1
-msgid "FrontTimes"
+#: src/lessons/bat/string1/StringSplosion.html:1
+msgid "StringSplosion"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/fronttimes/FrontTimes.html:2
-msgid ""
-"Given a string and a non-negative int n, we'll say that the front of the "
-"string is the first 3 chars, or whatever is there if the string is less than "
-"length 3. Return n copies of the front;"
+#: src/lessons/bat/string1/StringSplosion.html:2
+msgid "Given a non-empty string like \"Code\" return a string like \"CCoCodCode\"."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/has271/Has271.html:1
-msgid "Has271"
+#: src/lessons/bat/string1/StringTimes.html:1
+msgid "StringTimes"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/has271/Has271.html:2
+#: src/lessons/bat/string1/StringTimes.html:2
 msgid ""
-"Given an array of ints, 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."
+"Given a string and a non-negative int n, return a larger string that is n "
+"copies of the original string."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/last2/Last2.html:1
-msgid "Last2"
+#: src/lessons/bat/string1/StringX.html:1
+msgid "StringX"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/last2/Last2.html:2
-msgid ""
-"Given a string, return the count of the number of times that a substring "
-"length 2 appears in the string and also as the last 2 chars of the string, "
-"so \"hixxxhi\" yields 1 (we won't count the end substring)."
-msgstr ""
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/notriples/NoTriples.html:1
-msgid "NoTriples"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/notriples/NoTriples.html:2
-msgid ""
-"Given an array of ints, we'll say that a triple is a value appearing 3 times "
-"in a row in the array. Return true if the array does not contain any "
-"triples."
-msgstr ""
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/bits/StringBits.html:1
-msgid "StringBits"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/bits/StringBits.html:2
-msgid ""
-"Given a string, return a new string made of every other char starting with "
-"the first, so \"Hello\" yields \"Hlo\"."
-msgstr ""
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/match/StringMatch.html:1
-msgid "StringMatch"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/match/StringMatch.html:2
-msgid ""
-"Given 2 strings, a and b, return the number of the positions where they "
-"contain the same length 2 substring. So \"xxcaazz\" and \"xxbaaz\" yields 3, "
-"since the \"xx\", \"aa\", and \"az\" substrings appear in the same place in "
-"both strings."
-msgstr ""
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/splosion/StringSplosion.html:1
-msgid "StringSplosion"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/splosion/StringSplosion.html:2
-msgid "Given a non-empty string like \"Code\" return a string like \"CCoCodCode\"."
-msgstr ""
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/times/StringTimes.html:1
-msgid "StringTimes"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/times/StringTimes.html:2
-msgid ""
-"Given a string and a non-negative int n, return a larger string that is n "
-"copies of the original string."
-msgstr ""
-
-#. type: Content of: <h1>
-#: src/lessons/bat/string1/stringx/StringX.html:1
-msgid "StringX"
-msgstr ""
-
-#. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/stringx/StringX.html:2
+#: src/lessons/bat/string1/StringX.html:2
 msgid ""
 "Given a string, return a version where all the \"x\" have been "
 "removed. Except an \"x\" at the very start or end should not be removed."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/bat/string1/yak/StringYak.html:1
+#: src/lessons/bat/string1/StringYak.html:1
 msgid "StringYak"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/bat/string1/yak/StringYak.html:2
+#: src/lessons/bat/string1/StringYak.html:2
 msgid ""
 "Suppose the string \"yak\" is unlucky. Given a string, return a version "
 "where all the \"yak\" are removed, but the \"a\" can be any char. The "
 "\"yak\" strings will not overlap."
 msgstr ""
 
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/basics/Array.html:1
+msgid "Knotting and sequences"
+msgstr ""
+
 #. type: Content of: outside any tag (error?)
 #: src/lessons/welcome/array/basics/Array.html:3
 msgid ""
@@ -8288,19 +8782,16 @@ msgstr ""
 #: src/lessons/welcome/array/basics/Array.html:11
 msgid ""
 "One solution is to read the next cell, and go copy it in position before "
-"comming back to read the second cell. But since it is forbiden to use the "
+"coming back to read the second cell. But since it is forbidden to use the "
 "methods to teleport the buggle to a specific position (<code>setPos()</code> "
 "and similar), this approach will be a pain to implement."
 msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/basics/Array.html:16
-msgid "The simplest is to store the whole color pattern in an <b>array</b>."
-msgstr ""
-
-#. type: Content of: <p><h2>
-#: src/lessons/welcome/array/basics/Array.html:18
-msgid "Arrays in Java"
+msgid ""
+"The simplest is to store the sequence of colors that constitute the whole "
+"pattern in an <b>array</b>."
 msgstr ""
 
 #. type: Content of: <p>
@@ -8311,8 +8802,30 @@ msgid ""
 "kind:"
 msgstr ""
 
+#. type: Content of: <p>
+#: src/lessons/welcome/array/basics/Array.html:24
+msgid ""
+"The simplest is to store the sequence of colors that constitute the whole in "
+"a <b>list</b>."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/welcome/array/basics/Array.html:26
+msgid "Lists"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/basics/Array.html:27
+msgid ""
+"A list is an array of positions in which one can store values. Each cell is "
+"a variable on its own. A list is then a sequence of values. Lists can even "
+"mix values of differing types, such as integer values in some cells and "
+"colors in other cells.  At the end, a list is very similar to a storage "
+"shelve, where each level can store a separate value."
+msgstr ""
+
 #. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:28
+#: src/lessons/welcome/array/basics/Array.html:38
 msgid ""
 "T is the array's name, T[0] is the name of the first cell, T[1] the name of "
 "the second cell, T[2] the third one, etc. And yes, the first cell in "
@@ -8320,28 +8833,38 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:32
+#: src/lessons/welcome/array/basics/Array.html:41
 msgid ""
-"We can use an integer variable <i>i</i> to access with T[i] to the array's "
-"cells: when the value of <i>i</i> is 0, then T[i] accesses T[0], when the "
-"value of <i>i</i> is 10, then T[i] accesses T[10]. <i>i</i> is said to be "
-"the indice in the array T."
+"T is the list's name, T[0] is the name of the first cell, T[1] the name of "
+"the second cell, T[2] the third one, etc. And yes, the first cell in "
+"numbered T[0] and the last one of a list of size N is T[N-1]. It may seem "
+"funny to count starting from 0 and not from 1 as usual, but some historical "
+"reasons make it unavoidable here."
 msgstr ""
 
-#. type: Content of: <br><p><h2>
-#: src/lessons/welcome/array/basics/Array.html:37
-msgid "Initializing an array"
+#. type: Content of: <br><p>
+#: src/lessons/welcome/array/basics/Array.html:47
+msgid ""
+"We can use an integer variable <i>i</i> to access with T[i] to the cells: "
+"when the value of <i>i</i> is 0, then T[i] accesses T[0], when the value of "
+"<i>i</i> is 10, then T[i] accesses T[10]. <i>i</i> is said to be the index "
+"in T."
 msgstr ""
 
-#. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:38
+#. type: Content of: <br><p><h3>
+#: src/lessons/welcome/array/basics/Array.html:52
+msgid "Initialization"
+msgstr ""
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:53
 msgid ""
-"Let <code>T</code> be an array of 10 integer elements. It can then be "
-"initialized this way:"
+"If <code>T</code> contains 10 elements, then each cell can be initialized "
+"with a simple loop:"
 msgstr ""
 
 #. type: Content of: <br><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:41
+#: src/lessons/welcome/array/basics/Array.html:56
 #, no-wrap
 msgid ""
 "for (int i = 0; i<10; i++) {\n"
@@ -8349,35 +8872,52 @@ msgid ""
 "}\n"
 msgstr ""
 
-#. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:46
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:61
+#, no-wrap
+msgid ""
+"for i in range(10):\n"
+"   T[i] = 3;\n"
+msgstr ""
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:65
+msgid ""
+"Note that <code>range(max)</code> returns the list of all integers that are "
+"smaller than <code>max</code>, starting with 0. There is exactly max such "
+"values. For example, if <code>max</code> is 3, the returned values are 0, 1 "
+"and 2."
+msgstr ""
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:70
 msgid "<code>T[i]</code> can be used just like a variable. We can set a new value:"
 msgstr ""
 
 #. type: Content of: <br><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:47
+#: src/lessons/welcome/array/basics/Array.html:71
 #, no-wrap
-msgid "T[i] = 78;"
+msgid "T[i] = 78"
 msgstr ""
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:49
-msgid "We can access its value:"
+#: src/lessons/welcome/array/basics/Array.html:73
+msgid "We can retrieve and use its value:"
 msgstr ""
 
-#. type: Content of: <br><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:50
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:74
 #, no-wrap
-msgid "x = T[i];"
+msgid "x = T[i]"
 msgstr ""
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:52
+#: src/lessons/welcome/array/basics/Array.html:76
 msgid "We can test this value:"
 msgstr ""
 
-#. type: Content of: <br><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:54
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:78
 #, no-wrap
 msgid ""
 "if (T[i] > 0 ) {\n"
@@ -8385,24 +8925,69 @@ msgid ""
 "}\n"
 msgstr ""
 
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:83
+#, no-wrap
+msgid ""
+"if T[i] > 0:\n"
+"    // instructions...\n"
+msgstr ""
+
 #. type: Content of: <br><p><h3>
-#: src/lessons/welcome/array/basics/Array.html:59
+#: src/lessons/welcome/array/basics/Array.html:87
 msgid "Declaring an array"
 msgstr ""
 
-#. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:60
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:88
+msgid ""
+"If you know beforehand the content of your list, you can affect these values "
+"all together.  Just put them between square braces and separated by commas "
+"as follows:"
+msgstr ""
+
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:91
+#, no-wrap
+msgid ""
+"L = [1, 3, 5, 7, 9] \n"
+"# L is now an array of 5 values, all of them being integers\n"
+msgstr ""
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:94
+msgid ""
+"Otherwise, you probably want to create an empty list and then append each "
+"values separately:"
+msgstr ""
+
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:96
+#, no-wrap
+msgid ""
+"L2 = [] \n"
+"# L2 is now an empty list\n"
+"L2.append(1)\n"
+"L2.append(3)\n"
+"L2.append(5)\n"
+"L2.append(7)\n"
+"L2.append(9) \n"
+"# Its content is now the same as L previously\n"
+msgstr ""
+
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:106
 msgid "An array can be declared the following way:"
 msgstr ""
 
 #. type: Content of: <br><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:61
+#: src/lessons/welcome/array/basics/Array.html:107
 #, no-wrap
 msgid "int[] T;"
 msgstr ""
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:63
+#: src/lessons/welcome/array/basics/Array.html:109
 msgid ""
 "<code>int</code> means that the elements of the array are of type integer; "
 "<code>T</code> is the name of the array and <code>[]</code> means that we "
@@ -8411,39 +8996,39 @@ msgid ""
 "prefered in Java."
 msgstr ""
 
-#. type: Content of: <br><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:68
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:114
 #, no-wrap
 msgid "int T[];"
 msgstr ""
 
 #. type: Content of: <br><p><h3>
-#: src/lessons/welcome/array/basics/Array.html:70
+#: src/lessons/welcome/array/basics/Array.html:116
 msgid "Allocating an array"
 msgstr ""
 
-#. type: Content of: <br><p>
-#: src/lessons/welcome/array/basics/Array.html:72
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:118
 msgid ""
-"Declaring an array <code>T</code> only reserve the name <code>T</code> for "
-"later use. But the array is not initialized yet: it does not have any "
-"value. What would <code>T[4]</code> mean if we didn't say that the array is "
-"at least 5 cells long?"
+"Declaring a variable <code>T</code> that stores an array only reserve the "
+"name <code>T</code> for later use. But the array is not initialized yet: it "
+"does not have any value. What would <code>T[4]</code> mean if we didn't say "
+"that the array is at least 5 cells long?"
 msgstr ""
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:77
+#: src/lessons/welcome/array/basics/Array.html:123
 msgid "First and foremost, we have to give a value to <code>T</code>:"
 msgstr ""
 
-#. type: Content of: <br><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:78
+#. type: Content of: <br><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:124
 #, no-wrap
 msgid "T = new int[10];"
 msgstr ""
 
 #. type: Content of: <br><p><p>
-#: src/lessons/welcome/array/basics/Array.html:79
+#: src/lessons/welcome/array/basics/Array.html:126
 msgid ""
 "<code>new</code> means that we want to create something, and "
 "<code>int[10]</code> means that it is an array of 10 integer values. In "
@@ -8451,75 +9036,65 @@ msgid ""
 "<code>T</code> variable reference this array."
 msgstr ""
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:84
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:131
 msgid ""
 "The size of an array is fixed and cannot be changed after the creation of "
 "the array. To know the size of a <code>T</code> array, we can consult the "
 "value of the variable <code>T.length</code>."
 msgstr ""
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:89
-msgid "It is forbidden to write:"
-msgstr ""
-
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:90
-#, no-wrap
-msgid "int T[10]; // WRONG!!!"
-msgstr ""
-
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:91
+#. type: Content of: <br><p><p>
+#: src/lessons/welcome/array/basics/Array.html:136
 msgid ""
-"You are required to use the <code>new</code> instruction. On the other hand, "
-"you perfectly can specify the size with a variable <code>i</code>."
+"It is forbidden to write something like <code>int T[10];</code> You are "
+"required to use the <code>new</code> instruction. On the other hand, you "
+"perfectly can specify the size with a variable <code>i</code>."
 msgstr ""
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:93
+#. type: Content of: <br><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:140
 #, no-wrap
 msgid "T = new int[i];"
 msgstr ""
 
 #. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:94
+#: src/lessons/welcome/array/basics/Array.html:141
 msgid ""
 "In this case, the array's size will be set to the value of <code>i</code> "
 "<b>when <code>new</code> gets called</b>. If the variable changes afterward, "
 "it won't change the array's size."
 msgstr ""
 
-#. type: Content of: <br><p><p><p><h4>
-#: src/lessons/welcome/array/basics/Array.html:98
+#. type: Content of: <br><p><p><h4>
+#: src/lessons/welcome/array/basics/Array.html:145
 msgid "Declaration and allocation"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:99
+#. type: Content of: <br><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:146
 #, no-wrap
 msgid "int[] T = new int[10];"
 msgstr ""
 
 #. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:101
+#: src/lessons/welcome/array/basics/Array.html:148
 msgid "We declare and allocate the array on the same line."
 msgstr ""
 
-#. type: Content of: <br><p><p><p><h4>
-#: src/lessons/welcome/array/basics/Array.html:103
+#. type: Content of: <br><p><p><h4>
+#: src/lessons/welcome/array/basics/Array.html:150
 msgid "Declaration and initialization"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:104
+#. type: Content of: <br><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:151
 #, no-wrap
 msgid "int[] T = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };"
 msgstr ""
 
 #. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:106
+#: src/lessons/welcome/array/basics/Array.html:153
 msgid ""
 "We declare, allocate and initialize the array on the same line. To know the "
 "size of the array to allocate, the compiler counts the provided values. This "
@@ -8527,7 +9102,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:110
+#: src/lessons/welcome/array/basics/Array.html:157
 #, no-wrap
 msgid ""
 "int[] T = new int[10];\n"
@@ -8537,13 +9112,13 @@ msgid ""
 "T[9] = 10;\n"
 msgstr ""
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:117
+#. type: Content of: <br><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:164
 msgid "It is also equivalent to:"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:119
+#. type: Content of: <br><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:166
 #, no-wrap
 msgid ""
 "int[] T = new int[10];\n"
@@ -8552,20 +9127,44 @@ msgid ""
 "}\n"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><h3>
-#: src/lessons/welcome/array/basics/Array.html:125
+#. type: Content of: <br><p><p><p><p><h3>
+#: src/lessons/welcome/array/basics/Array.html:176
+msgid "Lists and method parameters"
+msgstr ""
+
+#. type: Content of: <br><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:177
+msgid ""
+"It is perfectly ok to pass a list to a method as a parameter. This method "
+"can then use this parameter as if it were defined there. Methods can also "
+"return lists as result without any complication. As an example, here is a "
+"method doubling every values of the list received as a parameter:"
+msgstr ""
+
+#. type: Content of: <br><p><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:182
+#, no-wrap
+msgid ""
+"L = [1, 3, 5, 7, 9]\n"
+"def doubling(param):\n"
+"  for i in range( len(param) ):\n"
+"    param[i] *= 2\n"
+msgstr ""
+
+#. type: Content of: <br><p><p><p><p><p><h3>
+#: src/lessons/welcome/array/basics/Array.html:189
 msgid "Arrays and method parameters"
 msgstr ""
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:126
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:190
 msgid ""
 "It is perfectly ok to pass an array to a method as a parameter. The method "
 "must have a prototype similar to:"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:128
+#. type: Content of: <br><p><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:192
 #, no-wrap
 msgid ""
 "void myMethod(int[] values) {\n"
@@ -8573,13 +9172,13 @@ msgid ""
 "}"
 msgstr ""
 
-#. type: Content of: <br><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:132
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:196
 msgid "On the caller side, that also very simple:"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:134
+#. type: Content of: <br><p><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:198
 #, no-wrap
 msgid ""
 "int[] tab = new int[10];\n"
@@ -8587,13 +9186,13 @@ msgid ""
 "myMethod(tab);\n"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:139
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:203
 msgid "We can also have methods returns arrays as results:"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><p><pre>
-#: src/lessons/welcome/array/basics/Array.html:140
+#. type: Content of: <br><p><p><p><p><p><pre>
+#: src/lessons/welcome/array/basics/Array.html:204
 #, no-wrap
 msgid ""
 "int[] otherMethod() {\n"
@@ -8603,8 +9202,16 @@ msgid ""
 "}"
 msgstr ""
 
-#. type: Content of: <br><p><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:147
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:211
+msgid ""
+"Your code should save the color pattern observed on the first row into a "
+"list.  The easiest is to create an empty list, and then "
+"<code>append()</code> the colors one after the others."
+msgstr ""
+
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:215
 msgid ""
 "The <code>run()</code> method that you should write must declare an array of "
 "colors (<code>Color[]</code>) and allocate it. Beware, the first world is "
@@ -8613,31 +9220,36 @@ msgid ""
 "current world."
 msgstr ""
 
-#. type: Content of: <br><p><p><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:153
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:221
 msgid ""
 "Once the array allocated, we have to fill it. For each cel of the row, read "
 "the ground color (with <code>getGroundColor()</code>), and store it in the "
 "right cell of the array."
 msgstr ""
 
-#. type: Content of: <br><p><p><p><p><p>
-#: src/lessons/welcome/array/basics/Array.html:157
+#. type: Content of: <br><p><p><p><p><p><p>
+#: src/lessons/welcome/array/basics/Array.html:225
 msgid ""
-"Once hte array initialized, you have to reapply the pattern on every rows, "
-"for example by excuting <code>getWorldHeight()</code> times a method written "
-"specifically for this."
+"Once you managed to read and save the pattern on the first row, you have to "
+"reapply the pattern on every rows, for example by executing "
+"<code>getWorldHeight()</code> times a method written specifically for this."
+msgstr ""
+
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/basics/Array2.html:1
+msgid "Knotting, sequences and modulo"
 msgstr ""
 
 #. type: Content of: outside any tag (error?)
-#: src/lessons/welcome/array/basics2/Array2.html:3
+#: src/lessons/welcome/array/basics/Array2.html:3
 msgid ""
 "This exercise is similar to the previous one: you have to reproduce the "
 "color pattern of the first cell into the other ones."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/basics2/Array2.html:6
+#: src/lessons/welcome/array/basics/Array2.html:6
 msgid ""
 "The first difference is that the world is bordered of walls: you thus have "
 "to slightly modify your trajectory to ensure that the buggle does not crash "
@@ -8647,7 +9259,7 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/basics2/Array2.html:12
+#: src/lessons/welcome/array/basics/Array2.html:12
 msgid ""
 "The other difference is that the offset to apply between columns is not "
 "fixed, but written on the first cell of each column. To get the info as an "
@@ -8655,51 +9267,64 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p><pre>
-#: src/lessons/welcome/array/basics2/Array2.html:15
+#: src/lessons/welcome/array/basics/Array2.html:15
 #, no-wrap
 msgid "int offset = Integer.parseInt(readMessage())"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/basics2/Array2.html:17
+#: src/lessons/welcome/array/basics/Array2.html:17
 msgid ""
 "<code>readMessage()</code> gets the message on the ground as a String, while "
 "<code>Integer.parseInt()</code> transforms a String into an integer by "
 "<i>reading</i> it."
 msgstr ""
 
+#. type: Content of: <p><pre>
+#: src/lessons/welcome/array/basics/Array2.html:21
+#, no-wrap
+msgid "offset = int( readMessage() )"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/basics/Array2.html:22
+msgid ""
+"<code>readMessage()</code> gets the message on the ground as a String, while "
+"<code>int()</code> transforms it into an integer value by <i>reading</i> it."
+msgstr ""
+
 #. type: Content of: <p><p>
-#: src/lessons/welcome/array/basics2/Array2.html:21
+#: src/lessons/welcome/array/basics/Array2.html:25
 msgid ""
 "Then, to pick the right color, the easier is to use the <code>%</code> "
 "(modulo) operator. For example, <code>(i + 5) % size</code> allows to "
-"retrieve teh <code>i</code>th cell of an array of size <code>size</code> "
+"retrieve the <code>i</code>th cell of an array of size <code>size</code> "
 "with an offset of <code>5</code>."
 msgstr ""
 
 #. type: Content of: <h1>
 #: src/lessons/welcome/array/indexof/value/IndexOfValue.html:1
-msgid "Searching a given value"
+msgid "Searching for a given value"
 msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/value/IndexOfValue.html:3
 msgid ""
-"The goal of this exercise is to search the cell of value 17 in an array, and "
-"return its position."
+"The goal of this exercise is to search the cell of a given value, and return "
+"its position."
 msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/value/IndexOfValue.html:5
 msgid ""
-"To that extend, you should fill the method <code>indexOf(int[] tab, int "
-"lookingFor)</code>, which parameters are the array to explore, and the value "
-"to search. If the value <code>lookingFor</code> is not in the array "
-"<code>tab</code>, the method should return -1."
+"To that extend, you should fill the method <code>indexOf()</code>, which "
+"parameters are the array to explore, and the value to search. If the value "
+"<code>lookingFor</code> is not in the array <code>tab</code>, the method "
+"should return -1."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:10
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:9
 msgid ""
 "The idea of the algorithm is to sweep over the whole array, checking the "
 "value of each cell. If it's the searched value, you should return the index "
@@ -8707,17 +9332,16 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:14
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:13
 msgid ""
-"The first thing to remember about arrays is that their indices begin at "
-"0. So, if there is 3 cells, their indices will be 0, 1 and 2. There would "
-"not be any cell numbered 3."
+"Remember that indices begin at 0 and not at 1. So, if there is 3 cells, "
+"their indices will be 0, 1 and 2. There would not be any cell numbered 3."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:18
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:16
 msgid ""
-"Then, remember that the amount of cells in an array can be retrieved using "
+"Remember also that the amount of cells in an array can be retrieved using "
 "the <code>length</code> attribute. So, if your array is called "
 "<code>tab</code>, its size can be retrieved as <code>tab.length</code>.  "
 "Note that there is no () after <code>length</code>. An attribute is a sort "
@@ -8725,10 +9349,23 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:24
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:21
 msgid "So, the last value of an array is given by <code>tab[tab.length - 1]</code>."
 msgstr ""
 
+#. type: Content of: <p>
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:23
+msgid ""
+"Remember also that the amount of cells in an array can be retrieved with the "
+"<code>len()</code> function. So, if your array is called <code>tab</code>, "
+"its size can be retrieved as <code>len(tab)</code>."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/indexof/value/IndexOfValue.html:27
+msgid "So, the last value of an array is given by <code>tab[ len(tab) - 1]</code>."
+msgstr ""
+
 #. type: Content of: <h1>
 #: src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.html:1
 msgid "Index of the maximum value"
@@ -8737,16 +9374,16 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.html:3
 msgid ""
-"In this exercise, you must compute the indice of the tab cell containing the "
+"In this exercise, you must compute the index of the tab cell containing the "
 "biggest value."
 msgstr ""
 
 #. type: Content of: <p>
 #: src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.html:5
 msgid ""
-"For that, fill the <code>indexOfMaximum(int[] tab)</code> method. Its "
-"parameter is the array to explore. Should the array contain the searched "
-"value several times, you should return the indice of the first occurrence."
+"For that, fill the <code>indexOfMaximum()</code> method. Its parameter is "
+"the array to explore. Should the array contain the searched value several "
+"times, you should return the index of the first occurrence."
 msgstr ""
 
 #. type: Content of: <p>
@@ -8773,10 +9410,9 @@ msgstr ""
 #. type: Content of: <p>
 #: src/lessons/welcome/array/averagevalue/AverageValue.html:6
 msgid ""
-"You have to fill the body of the method <code>average(int[] tab)</code> "
-"which takes as parameter the array of integers of which it computes and "
-"returns the average value. Please note that the return type of the method "
-"has type <code>int</code>."
+"You have to fill the body of the method <code>average()</code> which takes "
+"as parameter the array of integers of which it computes and returns the "
+"average value. Please note that this method must return an integer."
 msgstr ""
 
 #. type: Content of: <p>
@@ -8785,9 +9421,23 @@ msgid ""
 "To compute the average value of an integer, it is necessary to traverse the "
 "whole array and to compute the sum of all its values (so you will need a "
 "variable to store this temporary result), then you have to divide this sum "
-"by the size of the array. In Java, you can get the size of an array "
-"<code>myarray</code> by consulting its <code>length</code> attribute (in "
-"other words, <code>myarray.length</code>)."
+"by the size of the array."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/averagevalue/AverageValue.html:10
+msgid ""
+"In Java, you can get the size of an array <code>myarray</code> by consulting "
+"its <code>length</code> attribute (in other words, "
+"<code>myarray.length</code>). Notice that there is no parenthesis after "
+"<code>length</code>."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/welcome/array/averagevalue/AverageValue.html:15
+msgid ""
+"In python, retrieving the size of an array <code>myarray</code> is as easy "
+"as calling <code>len(myarray)</code>."
 msgstr ""
 
 #. type: Content of: <h1>
@@ -8799,8 +9449,8 @@ msgstr ""
 #: src/lessons/welcome/array/maxvalue/MaxValue.html:3
 msgid ""
 "In this exercise, you must compute the maximal value contained in an array.  "
-"For that, fill the <code>maximum(int[] tab)</code> method, which parameter "
-"is the array to explore."
+"For that, fill the <code>maximum()</code> method, which parameter is the "
+"array to explore."
 msgstr ""
 
 #. type: Content of: <p>
@@ -8809,9 +9459,7 @@ msgid ""
 "To compute this value, sweep over the whole parameter. For each value, if "
 "it's bigger than the biggest value you saw so far, you must save this value "
 "somewhere to remember it afterward. You thus need an extra variable, which "
-"can be initialized to the value of the first array cell. Another possibility "
-"is to initialize it to the smallest integer that Java knows about (which can "
-"be retrieved through <code>Integer.MIN_VALUE</code>)."
+"can be initialized to the value of the first array cell."
 msgstr ""
 
 #. type: Content of: <h1>
@@ -8824,9 +9472,9 @@ msgstr ""
 msgid ""
 "In this exercise, you must compute the amount of occurrences of a given "
 "value in an array (that is, the amount of time that this value appears in "
-"the array). For that, fill the <code>occurrences(int[] tab, int "
-"lookingFor)</code> method, which returns the number of occurrence of "
-"<code>lookingFor</code> in <code>tab</code>."
+"the array). For that, fill the <code>occurrences()</code> method, which "
+"returns the number of occurrence of <code>lookingFor</code> in "
+"<code>tab</code>."
 msgstr ""
 
 #. type: Content of: <p>
@@ -8838,545 +9486,1072 @@ msgid ""
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:1 src/lessons/smn/pancake/burned/BurnedPancakePlate.html:1 src/lessons/smn/pancake/raw/RawPancakePlate.html:1
-msgid "PancakeWorld"
+#: src/lessons/welcome/array/array123/Array123.html:1
+msgid "Array123"
 msgstr ""
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:3
-msgid "Functions provided :"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/array123/Array123.html:2
+msgid ""
+"Given an array of integers, return true if .. 1, 2, 3, .. appears in the "
+"array somewhere."
 msgstr ""
 
-#. type: Content of: <div><p><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:5 src/lessons/smn/pancake/burned/BurnedPancakePlate.html:11 src/lessons/smn/pancake/raw/RawPancakePlate.html:12
-#, no-wrap
-msgid "int getStackSize()"
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/array667/Array667.html:1
+msgid "Array667"
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:7 src/lessons/smn/pancake/burned/BurnedPancakePlate.html:13 src/lessons/smn/pancake/raw/RawPancakePlate.html:14
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/array667/Array667.html:2
 msgid ""
-"Returns the size of the stack, in other words the amount of pancakes it "
-"contains."
+"Given an array of integers, return the number of times that two 6's are next "
+"to each other in the array. Also count instances where the second \"6\" is "
+"actually a 7."
 msgstr ""
 
-#. type: Content of: <div><p><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:9 src/lessons/smn/pancake/burned/BurnedPancakePlate.html:15 src/lessons/smn/pancake/raw/RawPancakePlate.html:16
-#, no-wrap
-msgid "int getPancakeRadius(int pancakeNumber)"
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/arraycount9/ArrayCount9.html:1
+msgid "ArrayCount9"
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:11 src/lessons/smn/pancake/raw/RawPancakePlate.html:18
-msgid "Returns the radius of the pancake you gave in argument."
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/arraycount9/ArrayCount9.html:2
+msgid "Given an array of integers, return the number of 9's in the array."
 msgstr ""
 
-#. type: Content of: <div><p><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:13 src/lessons/smn/pancake/burned/BurnedPancakePlate.html:19
-#, no-wrap
-msgid "boolean isPancakeUpsideDown(int pancakeNumber)"
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:1
+msgid "ArrayFront9"
 msgstr ""
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:15
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/arrayfront9/ArrayFront9.html:2
 msgid ""
-"Returns true if the burned side of the pancake you gave in argument is up, "
-"false if not."
+"Given an array of integers, return true if one of the first 4 elements in "
+"the array is a 9. The array length may be less than 4."
 msgstr ""
 
-#. type: Content of: <div><p><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:17 src/lessons/smn/pancake/burned/BurnedPancakePlate.html:23 src/lessons/smn/pancake/raw/RawPancakePlate.html:20
-#, no-wrap
-msgid "void flip(int numberOfPancakes)"
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/notriples/NoTriples.html:1
+msgid "NoTriples"
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:19 src/lessons/smn/pancake/burned/BurnedPancakePlate.html:25 src/lessons/smn/pancake/raw/RawPancakePlate.html:22
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/notriples/NoTriples.html:2
 msgid ""
-"Flips the <code>numberOfPancakes</code> first pancakes composing the stack, "
-"from the top of it."
+"Given an array of integers, we'll say that a triple is a value appearing 3 "
+"times in a row in the array. Return true if the array does not contain any "
+"triples."
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:21
-#, no-wrap
-msgid "boolean isSorted()"
+#. type: Content of: <h1>
+#: src/lessons/welcome/array/has271/Has271.html:1
+msgid "Has271"
 msgstr ""
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/pancake/PancakeWorld.html:23
+#. type: Content of: outside any tag (error?)
+#: src/lessons/welcome/array/has271/Has271.html:2
 msgid ""
-"Tells if the stack of pancakes is correctly sorted according to the control "
-"freak pancake seller"
+"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."
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:1 src/lessons/smn/baseball/easy/BaseballGame.html:1 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:1
-msgid "Baseball"
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:1
+msgid "PancakeWorld"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:3
-msgid ""
-"The color of a base is given by its index.  The hole has a color of -1.  The "
-"base which has only one player on the field has <i>getAmountOfBases()-1</i> "
-"as index"
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:3
+msgid "This universe is very simple, with only five functions provided."
 msgstr ""
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:10
-msgid "<u>Functions provided:</u>"
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:5
+#, no-wrap
+msgid "int getStackSize()"
 msgstr ""
 
-#. type: Content of: <p><div><p><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:12 src/lessons/smn/baseball/easy/BaseballGame.html:25 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:39
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:6
 #, no-wrap
-msgid "void move(int baseSrc, int playerSrc)"
+msgid "getStackSize()"
 msgstr ""
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:14 src/lessons/smn/baseball/easy/BaseballGame.html:27 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:41
-msgid ""
-"Move the player on position <code>playerLocation</code> from the base "
-"<code>baseSrc</code> to the hole."
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:7
+msgid "Returns the size of the stack, that is the amount of pancakes it contains."
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:16
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:9
 #, no-wrap
-msgid " int getPlayerColor(int baseIndex, int playerLocation) "
+msgid "int getPancakeRadius(int rank)"
 msgstr ""
 
-#. type: Content of: <div>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:18
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:10
+#, no-wrap
+msgid "getPancakeRadius(rank)"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:11
 msgid ""
-"Return the color of the player on position <code>playerLocation</code> ( 0 "
-"or 1 ) from the base <code>baseIndex</code>."
+"Returns the radius of the pancake passed as argument, with the rank of the "
+"top-most pancake being 0."
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:20
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:13
 #, no-wrap
-msgid " int getHoleBase() "
+msgid "boolean isPancakeUpsideDown(int rank)"
 msgstr ""
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:22 src/lessons/smn/baseball/easy/BaseballGame.html:36 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:50
-msgid "Return the index of the base where the hole is located"
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:14
+#, no-wrap
+msgid "isPancakeUpsideDown(rank)"
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:24
-#, no-wrap
-msgid " int getHolePositionInBase()"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:15
+msgid ""
+"Returns whether the pancake passed as argument upside-down, that is, if its "
+"burned side is on top. As usual, the top-most pancake is of rank 0."
 msgstr ""
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:26 src/lessons/smn/baseball/easy/BaseballGame.html:40 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:54
-msgid "Return the player's position in the base where the hole is located"
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:17
+#, no-wrap
+msgid "void flip(int amount)"
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:28
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:18
 #, no-wrap
-msgid " boolean isBaseSorted( int baseIndex)"
+msgid "flip(amount)"
 msgstr ""
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:30 src/lessons/smn/baseball/easy/BaseballGame.html:44 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:58
-msgid "Return TRUE if all players of the base <code>baseSrc</code> are home"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:19
+msgid ""
+"Flips the <code>amount</code> first pancakes composing the stack, from the "
+"top of it."
 msgstr ""
 
-#. type: Content of: <p><div><p><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:32 src/lessons/smn/baseball/easy/BaseballGame.html:46 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:60
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:21 src/lessons/sort/baseball/universe/BaseballWorld.html:34
 #, no-wrap
-msgid "int getAmountOfBases()"
+msgid "boolean isSorted()"
 msgstr ""
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:34 src/lessons/smn/baseball/easy/BaseballGame.html:48 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:62
-msgid "Return the amount of bases in the field."
+#. type: Content of: <pre>
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:22 src/lessons/sort/baseball/universe/BaseballWorld.html:35
+#, no-wrap
+msgid "isSorted()"
 msgstr ""
 
-#. type: Content of: <p><div><p><pre>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:36 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:65
-#, no-wrap
-msgid "int getLocationsAmount()"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/pancake/universe/PancakeWorld.html:23
+msgid "Returns whether the pancake stack is correctly sorted."
 msgstr ""
 
-#. type: Content of: <p><div><p>
-#: src/jlm/universe/smn/baseball/BaseballWorld.html:38 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:67
-msgid "Return the amount of players locations available on each base of the field"
+#. type: Content of: <h1>
+#: src/lessons/sort/pancake/Main.html:1 src/lessons/sort/pancake/BasicPancake.html:1
+msgid "Pancake Sorting"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:3
+msgid ""
+"This activity is inspired by a problem first introduced in 1975 by Harry "
+"Dweighter in the American Mathematical Monthly. The question is not only to "
+"sort the pancakes, but to determine <code>f(n)</code> the <i>minimal</i> "
+"amount of flips mandated to sort any stack of size <code>n</code>."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:7
+msgid ""
+"This problem is now famous because Bill Gates authored (with "
+"C. Papadimitriou) his only scientific publication in 1979 on this topic, "
+"providing a faster algorithm and proving that <code>17n/16 ≤ f(n) ≤ "
+"(5n+5)/3</code>.  This was the only publication of Bill Gates before he "
+"invented Windows and became rich."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:11
+msgid ""
+"Then, David X. Cohen, the inventor of the Futurama comics with many "
+"mathematical references, introduced the variant with burnt pancakes and "
+"studied its complexity with Manuel Blum in 1993."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:14
+msgid ""
+"An article of 2012 (by L. Bulteau, G. Fertin and I. Rusu) proved that "
+"determining the minimal amount of flips to sort the stack is a NP-complete "
+"problem. Naturally, the stack sorting problem is not NP-complete since it "
+"can be solved in 2n-3 steps with the naive algorithm and (5n+5)/3 steps with "
+"the Gates algorithm.  That's determining the minimal amount of steps that is "
+"NP."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:19
+msgid "Further information can be found on the wikipedia page, as usual."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/Main.html:22
+msgid ""
+"This activity is also integrated to CSIRL (my repository of <i>free</i> "
+"unplugged activities to introduce computer science, available at "
+"http://www.loria.fr/~quinson/Mediation/SMN/), and it may be interesting to "
+"run the unplugged activities before implementing these algorithms in JLM."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/Main.html:33
+msgid "A temporal view similar to the sorting universe could be helpful"
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/Main.html:34
+msgid "Other exercises, for example on the Cohen's algorithm, or on the other ones."
+msgstr ""
+
+#. type: Content of: <h3>
+#: src/lessons/sort/pancake/short_desc.html:1
+msgid "The pancake problem"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/short_desc.html:3
+msgid "Help the poor psychorigid pancakes' chef to sort its pancake stack!"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/short_desc.html:5
+msgid ""
+"This funny problem leads to algorithms that are somewhat more challenging to "
+"implement. You are supposed to master the bases of programming and some "
+"sorting algorithms to take this lesson."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/BasicPancake.html:3
+msgid ""
+"The pancake sorting problem this is a simple puzzle where you have a set of "
+"pancakes, each of differing size. The chef cooking the pancake is a bit "
+"psychorigid: he hates when the pancakes are not correctly sorted on the "
+"plate. He loves when they are correctly ordered, with the small ones over "
+"the larger ones. As every pancake maker, he masters the pancake flipping "
+"with his spatula. He can flip the pancake on top of the stack, or even "
+"several pancakes at once. The thing is that he has only one plate and the "
+"table is too dirty to place pancakes on it, even temporary. The only allowed "
+"operation is to flip some pancakes that are on top of the stack."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/BasicPancake.html:12
+msgid ""
+"Your work is to help this poor guy sorting his stack by flipping the "
+"pancakes. Each pancake is defined by its radius and rank within the stack, "
+"where the bottom pancake is at rank 0, and the one above at rank 1."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/BasicPancake.html:16
+msgid ""
+"Note that you can play physically with pieces of paper or wood at first to "
+"get the grasp on this problem. This is even one of the activities that I use "
+"in my CS-IRL (computer science in real life) project to introduce the "
+"concept of algorithm to absolute beginners that wonder about our "
+"science. More information at http://www.loria.fr/~quinson/Mediation/SMN/ (in "
+"French)."
+msgstr ""
+
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:22
+msgid "I don't get it. I need some help."
+msgstr ""
+
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:23
+msgid ""
+"You should try to first move the largest pancake to the bottom, and then the "
+"largest but one pancake on top of it, and then the one just smaller on top, "
+"and so on."
+msgstr ""
+
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:27
+msgid "The first tip was not enough. I need another one."
+msgstr ""
+
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:28
+msgid "So first, you need to move the largest pancake at the bottom of the stack."
+msgstr ""
+
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:29
+msgid ""
+"Can you imagine a situation in which you can easily bring this damn large "
+"pancake to the bottom?"
+msgstr ""
+
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/BasicPancake.html:30
+msgid "How could you reach this situation from the current one?"
 msgstr ""
 
 #. type: Content of: <h1>
-#: src/lessons/smn/Main.html:1
-msgid "Computer Science in Real Life"
+#: src/lessons/sort/pancake/BurnedPancake.html:1
+msgid "Burned Pancakes"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/Main.html:3
-msgid "Few activities developped for Computer Science in Real Life"
+#: src/lessons/sort/pancake/BurnedPancake.html:3
+msgid ""
+"Hard blow for the chef! The pancakes got burnt on one side! There is no way "
+"he can deliver a stack of pancakes with visibly burnt pancakes! You've got "
+"to help him ensuring that no pancake is upside-down while sorting his stack."
+msgstr ""
+
+#. type: Content of: <h1>
+#: src/lessons/sort/pancake/GatesPancake.html:1
+msgid "Faster Pancake Sorting"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:3
+#: src/lessons/sort/pancake/GatesPancake.html:3
 msgid ""
-"This world implements the control freak pancake seller problem, who wants "
-"his pancakes to be sorted on their plate from the biggest to the smallest, "
-"with the most burned face downside, so that we cannot see it."
+"Unlike others sorting problem, the expensive operation is not the comparison "
+"of values, but the flipping of pancakes. In this exercise, we will explore "
+"another algorithm that attempt to reduce the amount of stack flipping. The "
+"funny side is that this algorithm was first introduced by Bill Gates, before "
+"invented Windows."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:5 src/lessons/smn/pancake/raw/RawPancakePlate.html:6
+#: src/lessons/sort/pancake/GatesPancake.html:8
 msgid ""
-"You are asked to resort a pancakes stack to make him happy. Since it is "
-"obviously forbidden to place a pancake on the dirty table, the only allowed "
-"action is to flip one or more pancakes on the top of the stack.  A pancake "
-"is defined by its radius and position on the stack, from the top to the "
-"bottom. These characteristics are positive integers."
+"The basic idea is to grow sequences of sorted pancakes, not necessarily "
+"starting from the bottom.  We say that a sequence of ordered pancakes "
+"constitute a <b>bloc</b> while a pancake that is not part of a bloc is said "
+"to be <b>free</b>. The algorithm then considers the topmost pancake (of "
+"radius <code>t</code>) and search for the <code>t+1</code> or "
+"<code>t-1</code> pancakes (the considered neighbor is noted "
+"<code>t+o</code>). Eight cases may happen:"
 msgstr ""
 
-#. type: Content of: <div>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:9
-msgid "Only four functions are provided :"
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:15
+msgid ""
+"<b>Case a</b>: Both <code>t</code> and <code>t+o</code> are free. They are "
+"then merged in one flip."
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:17
-msgid "Returns the radius of the pancake <code>pancakeNumber</code>."
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:19
+msgid ""
+"<b>Case b</b>: <code>t</code> is free, and <code>t+o</code> is the first of "
+"a block. They are merged in one flip."
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/pancake/burned/BurnedPancakePlate.html:21
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:24
+msgid ""
+"<b>Case c</b>: <code>t</code> is free but both <code>t-1</code> and "
+"<code>t+1</code> are the last elements of blocks.  Both blocs and "
+"<code>t</code> are merged all together in 4 flips.  Beware, if either "
+"<code>t-1</code> or <code>t+1</code> does not exist (because <code>t</code> "
+"is 0 or max), only two flips are mandated."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:32
+msgid ""
+"<b>Case d</b>: <code>t</code> is in a block but <code>t+o</code> is "
+"free. They are merged in one flip."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:37
 msgid ""
-"Returns true if the burned side of the pancake <code>pancakeNumber</code> is "
-"up, false if not."
+"<b>Case e</b>: <code>t</code> is in a block and <code>t+o</code> is the "
+"first element of a block. They are merged in one flip."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:41
+msgid ""
+"<b>Case f</b>: <code>t</code> is in a block and <code>t+o</code> is the last "
+"element of another block.  They are merged in 3 flips as follows."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:45
+msgid ""
+"<b>Case g</b>: <code>t</code> is in a block of length k+1 (the last element "
+"is <code>t+ko</code>), <code>t+(k+1)o</code> is either free or the last "
+"element of another block. Both blocks are merged in 2 flips:"
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:48
+msgid ""
+"<b>Case h</b>: <code>t</code> is in a block of length k+1 (the last element "
+"is <code>t+ko</code>), <code>t+(k+1)o</code> is the first element of another "
+"block (the difference with case g is that <code>t+(k+1)o</code> is now the "
+"<i>first</i> element of its block). Both blocks are merged in 2 flips:"
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/pancake/GatesPancake.html:54
+msgid ""
+"<b>Case i</b>: <code>t</code> is in a block of length <code>n</code> (this "
+"block contains all pancakes).  If <code>t</code> is not 1, the whole stack "
+"is fliped. The algorithm then stops."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:3
+#: src/lessons/sort/pancake/GatesPancake.html:57
 msgid ""
-"This world implements the control freak pancake seller problem, who wants "
-"his pancakes to be sorted on their plate from the biggest to the smallest."
+"Each iteration increases the size of the blocks, so the algorithm eventually "
+"halts in all cases. A finer analysis would show that it takes at most "
+"<code>(5n+5)/3</code> steps to sort the stack. That's better than the naïve "
+"algorithm, that requires 2n-3 steps."
 msgstr ""
 
-#. type: Content of: <div>
-#: src/lessons/smn/pancake/raw/RawPancakePlate.html:10
-msgid "Only three functions are provided :"
+#. type: Content of: <h2>
+#: src/lessons/sort/pancake/GatesPancake.html:60
+msgid "Your turn"
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:3
+#: src/lessons/sort/pancake/GatesPancake.html:61
 msgid ""
-"This world implements the baseball game, in which several players want to go "
-"back to their bases. The bases make a circle and have their own "
-"colors. There are two players for one base, except one, which has only one "
-"player in its team.  You are asked to make the players go on the bases which "
-"colors correspond to theirs. The only allowed move is for one of the two "
-"players standing on one of the two bases which are directly next to the base "
-"with only one player to move and fill the hole, leaving a new one on the "
-"base it just left."
+"You now have almost enough information to implement this algorithm on your "
+"own. We just have to remove the last remaining ambiguities to ensure that "
+"you implement exactly the same algorithm that the correction. If several "
+"cases apply to your situation, then you should use the first given one. For "
+"example, if both cases a and b apply (e.g., with <code>t-1</code> on case "
+"<b>a</b> and <code>t+1</code> on case <b>b</b>), then you should apply the "
+"flips of case <b>a</b>. If a given case applies for both <code>t+1</code> "
+"and <code>t-1</code>, then you should apply it to <code>t+1</code>."
 msgstr ""
 
-#. type: Content of: <p><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:8 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:19
-msgid "Memento:"
+#. type: Content of: <p>
+#: src/lessons/sort/pancake/GatesPancake.html:67
+msgid ""
+"Note that it is somehow harder than the other exercises we did so far, so "
+"don't be surprised if you need more time to achieve this.  But do not give "
+"hope, you can do it!"
 msgstr ""
 
-#. type: Content of: <p><p><ul><li>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:11 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:25
-msgid "The color of a base is given by its index."
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:70
+msgid "Well, I need some help to start."
 msgstr ""
 
-#. type: Content of: <p><p><ul><li>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:14 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:28
-msgid "The hole has a color of -1."
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:71
+msgid ""
+"First write some helper functions such as <code>isFirst()</code> or "
+"<code>isFree()</code>. This will simplify your main algorithm afterward, "
+"that can be written very similarly to the explication above with a bunch of "
+"if conditions. Factorizing code this way often helps making your code more "
+"readable."
 msgstr ""
 
-#. type: Content of: <p><p><ul><li>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:17 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:31
+#. type: Attribute 'alt' of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:78
+msgid "My code keeps failing and I don't know how to debug it."
+msgstr ""
+
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:79
 msgid ""
-"The base which has only one player on the field has "
-"<i>getAmountOfBases()-1</i> as index"
+"To debug one world after the other and avoid that the messages of all worlds "
+"get intermixed, you can write your debug function only if the method "
+"<code>isSelected()</code> returns true. It will be so only for the entity "
+"that is currently selected in the graphical interface, that is probably the "
+"world you are currently debugging. This will help breaking the difficulty in "
+"parts by debugging the situation on after the other."
 msgstr ""
 
-#. type: Content of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:23
-msgid "There are six methods provided :"
+#. type: Content of: <p><div>
+#: src/lessons/sort/pancake/GatesPancake.html:85
+msgid ""
+"In particular, it may help to print textually the state of the world each "
+"time you enter the main loop."
 msgstr ""
 
-#. type: Content of: <p><div><p><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:29 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:43
-#, no-wrap
-msgid "int getPlayerColor(int baseIndex, int playerLocation) "
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/Main.html:1
+msgid "The Rainbow Baseball Game"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/Main.html:3
+msgid ""
+"This activity is inspired from the orange game, from the \"Computer Science "
+"Unplugged\" activities repository.  It was however heavily since then, first "
+"for the CSIRL (my repository of <i>free</i> unplugged activities to "
+"introduce computer science, available at "
+"http://www.loria.fr/~quinson/Mediation/SMN/) and now for JLM."
 msgstr ""
 
-#. type: Content of: <p><div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:31 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:45
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/Main.html:7
 msgid ""
-"Return the color of the player on position <code>playerLocation</code> ( 0 "
-"or 1 ) from the base <code>baseIndex</code>.  The color -1 is the hole."
+"In the literature, the generalized form of this problem is known as the "
+"pebble motion problem (the bases can be connected by any kind of graph, and "
+"the affinity of pebbles with bases may be different). Another variant of "
+"this problem is the well known 15-puzzle, with one player per base, and a "
+"two dimensional square grid. Much more information about these problems can "
+"be found on wikipedia, as usual."
 msgstr ""
 
-#. type: Content of: <p><div><p><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:34 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:48
+#. type: Content of: <h3>
+#: src/lessons/sort/baseball/Main.html:12
+msgid ""
+"How do you know that the naive algorithm won't loop on that initial "
+"situation?"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/Main.html:14
+msgid ""
+"Well, we simply tested all possible situations to see when this algorithm "
+"loops and when it finds the correct solution. We found that it works for all "
+"situations where no player is at home (there is 84 such situations for 4 "
+"bases, once you take the symmetries into account). It obviously works for "
+"some situations that do not respect this criteria (such as all situations it "
+"encounters from one of those 84 boards to the final state), but that's "
+"another story. Having such a criteria allows us to generate pseudo-random "
+"initial situations for the first exercise for which the algorithm we propose "
+"is guarenteed to work."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/Main.html:21
+msgid ""
+"We also explored bigger instances of the problem, and unfortunately, we have "
+"no such criteria for them.  With 5 bases, the algorithm wrongly loops for 24 "
+"of the 1824 possible boards where no player is home (that's 1.31%).  With 6 "
+"bases, it fails on 1251 of the 58860 such boards (2.12%). With 7 bases, it "
+"fails for 84444 out of 2633940 (that's 3.2%). I am still looking for a "
+"criteria ensuring that the algorithm won't loop. If you discover one, please "
+"report it. Ideally, it would be simple to enforce manually so that we can "
+"use it during our unplugged activities."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/baseball/Main.html:31
+msgid ""
+"Other graphical representations could be proposed, such as a linear one (for "
+"the existing exercises) or other ones (such as a grid or a tree, if an "
+"exercise on this kind of graph proves interesting)."
+msgstr ""
+
+#. type: Content of: <ul><li>
+#: src/lessons/sort/baseball/Main.html:33
+msgid ""
+"Other exercises on other algorithms on this variant, or on other variants "
+"such as the 15-puzzle."
+msgstr ""
+
+#. type: Content of: <h3>
+#: src/lessons/sort/baseball/short_desc.html:1
+msgid "Rainbow baseball"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/short_desc.html:3
+msgid ""
+"This is another funny variation on the sorting problem, adapting the main "
+"sorting algorithms on an unusual context."
+msgstr ""
+
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:1
+msgid "Rainbow Baseball"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:2
+msgid ""
+"The colors are represented by integers, between <code>0</code> and "
+"<code>amount of bases -1</code>.  The hole is represented by the special "
+"value <code>-1</code>.  The color of each base is its rank. So base "
+"<code>1</code> is of color <code>1</code>.  In the graphical interface, the "
+"base <code>0</code> is the dark blue one while the base <code>1</code> is "
+"the fuscia one."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:8
+msgid ""
+"Once every players on the field are in their home base, the hole should be "
+"in the last base, that is of rank <code>getAmountOfBases()-1</code>."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:10
+msgid "Functions to retrieve the world's dimensions"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:12
 #, no-wrap
-msgid "int getHoleBase() "
+msgid "int getBasesAmount()"
 msgstr ""
 
-#. type: Content of: <p><div><p><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:38 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:52
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:13
 #, no-wrap
-msgid "int getHolePositionInBase()"
+msgid "getBasesAmount()"
 msgstr ""
 
-#. type: Content of: <p><div><p><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:42 src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:56
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:14
+msgid "Returns the amount of bases on this field."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:16
 #, no-wrap
-msgid "boolean isBaseSorted( int baseIndex)"
+msgid "int getPositionsAmount()"
 msgstr ""
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:53
-msgid "Show Tip 1 ( the methods's prototype)"
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:17
+#, no-wrap
+msgid "getPositionsAmount()"
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:54
-msgid "The prototypes of the methods you may use are the followings :"
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:18
+msgid "Returns the amount of player's positions per base on this field:"
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:20
+msgid "Functions to retrieve the world's state"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:22
+#, no-wrap
+msgid "int getHoleBase()"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:23
+#, no-wrap
+msgid "getHoleBase()"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:24
+msgid "Returns the base in which the hole is located."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:26
+#, no-wrap
+msgid " int getHolePosition()"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:27
+#, no-wrap
+msgid "getHolePosition()"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:28
+msgid "Returns the hole position within its base"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:30
+#, no-wrap
+msgid " int getPlayerColor(int base, int position)"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:31
+#, no-wrap
+msgid "getPlayerColor(base, position)"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:32
+msgid "Returns the color of the player at a given location."
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:36
+msgid "Returns whether all players of the field are at home."
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:38
+#, no-wrap
+msgid "boolean isBaseSorted(int base)"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:39
+#, no-wrap
+msgid "isBaseSorted(base)"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:40
+msgid "Returns whether all players of a given base are at home."
+msgstr ""
+
+#. type: Content of: <h2>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:42
+msgid "Functions to change the world"
 msgstr ""
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:58
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:44
+#, no-wrap
+msgid "void move(int base, int position)"
+msgstr ""
+
+#. type: Content of: <pre>
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:45
+#, no-wrap
+msgid "move(base, position)"
+msgstr ""
+
+#. type: Content of: outside any tag (error?)
+#: src/lessons/sort/baseball/universe/BaseballWorld.html:46
 msgid ""
-"private void bringPlayerHome(int baseSrc, int playerSrc, int baseDst, int "
-"playerDst) throws InvalidMoveException"
+"Moves a given player into the hole. This throws an IllegalArgumentException "
+"if the specified player is not near the hole (at most one base away)."
+msgstr ""
+
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/NaiveBaseball.html:1
+msgid "Naive Rainbow Baseball"
 msgstr ""
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:60
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:3
 msgid ""
-"Move the player in position <code>playerSrc</code> of the base "
-"<code>baseSrc</code> to the position <code>playerDst</code> from the base "
-"<code>baseDst</code>"
+"Today, the buggles decided to play a baseball game, but they are rather out "
+"of luck, actually.  First, kinda forgot the rules, and ... well ... they "
+"cannot find the ball and bats again.  So they decided to \"adapt a bit\" the "
+"rules. As the are no ball, the buggles can only running around the field, "
+"what they do happily: for a while, all attending buggle run at full speed in "
+"all directions around the field."
 msgstr ""
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:62
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:9
 msgid ""
-"private int[] findNearestPlayer(int colorWanted, int firstBaseToSearch ) "
-"throws InvalidPositionException"
+"But after a few collisions, they decide to invent new rules to organize a "
+"bit the game: They make one team per base and two players per team. One of "
+"the teams has only one player so that its base has an empty location. Then, "
+"the players are dispatched randomly around the bases, and the game for them "
+"is to reach their home base. The whole game stops when all players are "
+"home.  There is no winning team: either all players win, or they all "
+"lose. Actually, this game is very different from the original baseball. The "
+"only rule that remains is that you can only run around the field, from one "
+"base to the next one, without crossing middle of the field."
 msgstr ""
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:64
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:17
 msgid ""
-"Return the base's number and the position of the nearest player which "
-"has<code>colorWanted</code> as color. It begins the search at the base "
-"<code>firstBaseToSearch</code>"
+"Now, they are asking you to help them deciding who and when should move so "
+"that each player returns to its base. Only one buggle can move at each "
+"round, from its position to the empty spot.  The maximal distance that a "
+"buggle can cover in one round is of one base."
 msgstr ""
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:66
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:21
 msgid ""
-"private void bringHole(int baseDst, int playerDst , int playerToProtect) "
-"throws InvalidMoveException"
+"So, at each round, the empty spot is on one base (say <code>B</code>), and "
+"you should decide which buggle enters that empty spot. There is four "
+"candidates (two from base <code>B-1</code> and two from base "
+"<code>B+1</code>). Actually, there is a fifth candidate since the buggle "
+"that is on the same base than the empty spot can change its position, but "
+"that's not really helping."
 msgstr ""
 
-#. type: Content of: <div><pre><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:68
+#. type: Content of: <h3>
+#: src/lessons/sort/baseball/NaiveBaseball.html:26
+msgid "The Naïve algorithm"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:28
 msgid ""
-"Bring the hole to the position <code>playerDst</code> from the base "
-"<code>baseDst</code> while protecting the position "
-"<code>playerToProtect</code> during the travel"
+"In this exercise, we will first explore a very simple algorithm. To decide "
+"which of the four candidate buggles should enter the empty spot, we first "
+"restrict ourselves and decide that buggles can only turn clockwise. Then, "
+"from the two remaining candidates, we pick the one that has the largest "
+"distance to cover to reach its base (turning clockwise). Click on the demo "
+"button: this works rather well in practice."
 msgstr ""
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:75
-msgid "Show Tip 2 (Pseudo-code of solve)"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:34
+msgid ""
+"It's hard to find a simpler algorithm for this problem: While it's not "
+"sorted, search for the base containing the candidate buggles: if the hole is "
+"in base <code>B</code>, it's the base <code>B+1</code>, modulo the amount of "
+"bases. Then, compute the distance that each buggle of that base still has to "
+"run to reach its base (0 if it's already home). Once you found the buggle "
+"that should enter the empty spot, just use the <code>move</code> method on "
+"it, and iterate."
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:76
-msgid "The algorithm of the solve method is the following:"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/NaiveBaseball.html:40
+msgid ""
+"The main difficulty should be to get the few equations right: determining "
+"the base next to the hole should be easy, but determining the distance that "
+"a player has to cover may reveal a bit more challenging. Don't hesitate to "
+"draw pictures on a paper to cover all possible cases. It should not be that "
+"difficult either: there is not that many cases after all."
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:78
-#, no-wrap
-msgid ""
-"BEGIN\n"
-"\tcolorWanted <- getBaseColor(baseIndex)\n"
-"\tIF getPlayerColor(baseIndex, 0) != colorWanted \n"
-"\tTHEN\n"
-"\t\tIF getPlayerColor(baseIndex,1) == colorWanted\n"
-"\t\tTHEN\n"
-"\t\t\tbringHole(baseIndex, 0, 1)\n"
-"\t\t\tmove(baseIndex, 1)\n"
-"\t\tELSE\n"
-"\t\t\twantedPlayerLocation <- findNearestPlayer(colorWanted, baseIndex+1 "
-")\n"
-"\t\t\tbringHole( wantedPlayerLocation[0]-1 , 0,wantedPlayerLocation[1] )\n"
-"\t\t\tbringPlayerHome(wantedPlayerLocation[0], wantedPlayerLocation[1], "
-"baseIndex,0)\n"
-"\t\tEND_IF\n"
-"\tEND_IF\n"
-"\tIF getPlayerColor(baseIndex, 1) != colorWanted \n"
-"\tTHEN\n"
-"\t\twantedPlayerLocation <- this.findNearestPlayer(colorWanted, "
-"baseIndex+1)\n"
-"\t\tbringHole( wantedPlayerLocation[0]-1 , 1 , wantedPlayerLocation[1] )\n"
-"\t\tbringPlayerHome( wantedPlayerLocation[0] , wantedPlayerLocation[1] , "
-"baseIndex , 1 )\n"
-"\tEND_IF\n"
-"END\n"
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/SelectBaseball.html:1
+msgid "Selection Baseball"
 msgstr ""
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:104
-msgid "Show Tip 3 ( Pseudo-code of bringHole )"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:3
+msgid ""
+"The previous algorithm is very pleasant: it's rather simple and rather fast "
+"to implement, but unfortunately, it is also rather wrong! In some cases, it "
+"never stops, which is obviously bad. If you don't believe it, just copy "
+"paste your previous code, and hit the run button. The first world of this "
+"exercise is one of these unfortunate situations that drives our previous "
+"algorithm crazy."
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:105
-msgid "The algorithm of the bringHole method is the following:"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:9
+msgid ""
+"So we have to find another algorithm, preferably one that works in all "
+"cases."
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:107
-#, no-wrap
-msgid ""
-"BEGIN\n"
-"\tholeBaseLocation[0] <- getHoleBase()\n"
-"\tholeBaseLocation[1] <- getHolePositionInBase()\n"
-"\tIF baseDst > holeLocation[0]\n"
-"\tTHEN\n"
-"\t\tFOR i FROM holeLocation[0]+1 TO baseDst BY 1\n"
-"\t\tDO\n"
-"\t\t\tmove(i, playerDst)\n"
-"\t\tEND_FOR\n"
-"\tELSE \n"
-"\t\tIF baseDst < holeLocation[0]\n"
-"\t\tTHEN\n"
-"\t\t\tFOR i FROM holeLocation[0]-1 DOWNTO baseDst+1 BY -1\n"
-"\t\t\tDO\n"
-"\t\t\t\tmove(i,1-playerToProtect)\n"
-"\t\t\tEND_FOR\n"
-"\t\t\tmove(baseDst,playerDst);\n"
-"\t\tELSE \n"
-"\t\t\tIF baseDst == holeLocation[0] AND playerDst != holeLocation[1]\n"
-"\t\t\tTHEN\n"
-"\t\t\t\tmove(baseDst,playerDst);\n"
-"\t\t\tEND_IF\n"
-"\t\tEND_IF\n"
-"\tEND_IF\n"
-"END\n"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:11
+msgid ""
+"For that, the best solution is to start from a well known algorithm instead "
+"of trying to invent a new one from scratch as we just did. When you think a "
+"bit about this problem, this can is very similar to a sorting problem: Just "
+"make sure that the players are sorted by their colors and you're set. And "
+"while we are at it, let's generalize the game to allow more that 4 bases."
 msgstr ""
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:137
-msgid "Show Tip 4 ( Pseudo-code of findNearestPlayer)"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:17
+msgid ""
+"Let's adapt the selection sort to our situation. The big lines of the "
+"algorithm is then \"for each base, select the players that should occupy "
+"this base and make sure that they come to their position\". This way, we "
+"will grow an sorted area where all players are already sorted (and never "
+"changed) while the unsorted area shrinks."
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:138
-msgid "The algorithm of the findNearestPlayer method is the following :"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:23
+msgid ""
+"Selecting the player should be no problem; Do not hesitate to define some "
+"methods such as <code>findPlayer()</code> or "
+"<code>findPlayerBase()</code>. This will ensure that your code remains "
+"understandable."
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:140
-#, no-wrap
-msgid ""
-"BEGIN\n"
-"\tnbBases <- getAmountOfBases()\n"
-"\tfound <- false;\n"
-"\ti <- firstBaseToSearch\n"
-"\tWHILE i < nbBases AND !found\n"
-"\tDO\n"
-"\t\tFOR j FROM 0 TO 1 BY 1\n"
-"\t\tDO\n"
-"\t\t\tIF getPlayerColor(i, j)== colorWanted AND !found\n"
-"\t\t\tTHEN\n"
-"\t\t\t\tlocation[0] <- i;\n"
-"\t\t\t\tlocation[1] <- j;\n"
-"\t\t\t\tfound <- true;\n"
-"\t\t\tEND_IF\n"
-"\t\tEND_FOR\n"
-"\t\ti <- i+1\n"
-"\tEND_WHILE\n"
-"\tRETURN location\n"
-"END\n"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:27
+msgid ""
+"The most problematic aspect is to move the selected players into "
+"position. For that, you have to move the hole to the position where the "
+"player is, and then move both the player and the hole to the base that is "
+"next to the player's goal (probably in a loop), and finally put the player "
+"in the right position of its target base."
 msgstr ""
 
-#. type: Attribute 'alt' of: <div>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:162
-msgid "Show tip 5 ( Pseudo-code of bringPlayerHome)"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/SelectBaseball.html:32
+msgid ""
+"As often in programming, the devil is in the details: there is a bunch of "
+"corner cases that you should detect and deal with correctly, such as the "
+"cases where the player is already in the base (but not in the position that "
+"you would like), or when the hole is on the right of the player (probably "
+"when you sort the first base). But you will find and hunt these while "
+"debugging your code."
 msgstr ""
 
-#. type: Content of: <div><p>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:163
-msgid "The algorithm of the bringPlayerHome method is the following :"
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/InsertBaseball.html:1
+msgid "Insertion Baseball"
 msgstr ""
 
-#. type: Content of: <div><pre>
-#: src/lessons/smn/baseball/easy/BaseballGame.html:165
-#, no-wrap
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:3
 msgid ""
-"PRECONDITION: the hole is on the base of index baseSrc-1\n"
-"BEGIN\n"
-"\t\tmove( baseSrc,playerSrc)\n"
-"\t\tFOR i FROM baseSrc-1 DOWNTO baseDst+1 BY -1\n"
-"\t\tDO\n"
-"\t\t\tmove(i,1-playerDst)\n"
-"\t\t\tmove(i-1,playerDst)\n"
-"\t\t\tmove(i,playerDst)\n"
-"\t\tEND_FOR\n"
+"The good point of adapting the selection sort to the baseball problem is "
+"that we know that it works (provided that our adaptation is correct). That's "
+"much better than the first naive algorithm, that was unable to converge to "
+"the solution in some situations. But actually, the selection sort is not "
+"perfect either as it requires a lot of swaps: we have to bring the hole to "
+"the selected player and then both the player and hole in position, and "
+"more. We can do better."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:3
+#: src/lessons/sort/baseball/InsertBaseball.html:9
 msgid ""
-"Like the previous world, this world implements a baseball world. But now, "
-"you have more than two players on each base.  Like before, your mission is "
-"to bring everyone home."
+"For example, each player can run quite a long way from its initial position "
+"to its target solution.  Instead, it may be more interesting to split the "
+"field in two parts: one on the left where all players are sorted relatively "
+"to each others, and one on the right where the players are still at their "
+"initial positions. Then, at each iteration, we take the player at the border "
+"between the sorted and unsorted areas (that is, the left-most player of the "
+"unsorted area) and move it to the left (within the sorted area) until it "
+"reaches its position (that is, until the position where it's bigger that its "
+"left neighbor). This would at least reduce the travel of players to the "
+"sorted area as we use the first one on the border."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:7
+#: src/lessons/sort/baseball/InsertBaseball.html:18
 msgid ""
-"This exercise is trying to show you one thing : you have to do a change that "
-"you haven't anticipated, and you need to make this change without breaking "
-"your code and without changing too many thing, because the algorithm is "
-"still great."
+"Actually, that's exactly what an insertion sort would do: maintain a sorted "
+"area on the left, and put iteratively the player on the border to its "
+"position within the sorted area. This is good, as we know that our algorithm "
+"is not inherently flawed since we adapt a well known one."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:11
+#: src/lessons/sort/baseball/InsertBaseball.html:22
 msgid ""
-"The previous algorithm was only able to deal with two players per base, you "
-"have to change it so you can handle n players per base, with n greater or "
-"equals at two."
+"The easiest to adapt the insertion sort to the baseball problem is to "
+"consider all positions as adjacent and forget about bases. For that, we "
+"define the methods <code>getColor(pos)</code>, <code>move(pos)</code> and "
+"<code>getHole()</code> that all use a unique integer to designate a given "
+"position. These functions simply convert between the way to specify a "
+"position and then call the usual functions to interact with the world. If "
+"you have an <code>index</code> and want to convert it into a "
+"<code>base,pos</code>, then <code>base=index/2</code> and "
+"<code>pos=index%2</code>. To compute the reverse, "
+"<code>index=base*2+pos</code> (this works because "
+"<code>getPositionsAmount()</code> always returns 2)."
 msgstr ""
 
 #. type: Content of: <p>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:15
+#: src/lessons/sort/baseball/InsertBaseball.html:31
 msgid ""
-"You can be wondering why you didn't have to write directly an flawless "
-"algorithm. It's just that sometimes, it's way too hard.  Sometimes, you just "
-"need to take a particular case and generalize your solution. It's sometimes "
-"easier to generalize than to try to find a general algorithm from "
-"scratch. Remember that improving is way more easier than creating."
+"For the algorithm itself, you should first move the hole to the position "
+"1. The position 0 is considered to be the sorted area (of size 1 for now) "
+"while the area above 2 is the unsorted area.  Then comes an iteration to "
+"sort each element of the unsorted area. Since this iteration is a bit "
+"complex, you should think of its loop invariant, that is, the condition that "
+"is true before and after the loop and which explains that the loop fulfills "
+"its goal. Here, the loop invariant is twofold: First, the hole is between "
+"the sorted area and the unsorted area, and then, the every elements of the "
+"sorted area are ... well sorted relatively to their neighbors."
 msgstr ""
 
-#. type: Content of: <p><p><ul><li>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:22
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:39
 msgid ""
-"You can have access to the number of locations available on each base by "
-"using the getLocationsAmount() method."
+"Then, the loop body to sort an element should first descend the hole and the "
+"elements within the sorted area until the element is larger than the element "
+"before in the sorted area (2 moves per position to travel), and then move "
+"the hole back to its position between the sorted and unsorted areas (1 move "
+"per position)."
 msgstr ""
 
-#. type: Content of: <p><div>
-#: src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html:37
-msgid "There are seven methods provided :"
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/InsertBaseball.html:43
+msgid ""
+"Once you insert the last element within the sorted area, your whole set is "
+"sorted and you're done.  I preserve the surprise of the border cases that "
+"will require some little adjustments to your algorithm to make it work "
+"properly :)"
+msgstr ""
+
+#. type: Content of: <h1>
+#: src/lessons/sort/baseball/BubbleBaseball.html:1
+msgid "Bubble Baseball"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/BubbleBaseball.html:3
+msgid ""
+"Crap, we adapted the insertion sort because our selection sort required too "
+"much moves to get the selected players to their position, but the insertion "
+"sort requires an inordinate amount of changes to get the border elements to "
+"their position within the sorted area without mixing the already sorted "
+"elements. At the end of the day, our selection variant was more efficient "
+"with at most <code>3*amountOfBase</code> moves to sort one element (1 to get "
+"the hole alongside with the player, and 2 to get the hole+player in "
+"position) while our insertion variant requires at most "
+"<code>3*amountOfPlayers</code> to sort one element (2 to descend the hole "
+"and player in position, 1 to get the hole back to its position). That's "
+"twice as bad as there is two players per base. It may be possible to improve "
+"the insertion sort by moving by more than one element when descending, but "
+"it seems uneasy (at least, while not mixing the already sorted elements) and "
+"it would probably only ensure that our insertion variant becomes as "
+"efficient as our selection variant, not dramatically better."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/BubbleBaseball.html:15
+msgid ""
+"If we cannot make the sort faster, we can make it easier. If you think about "
+"it, it seems rather natural to adapt the bubble sort to this problem: the "
+"hole becomes the bubble that moves up and down, sorting a bit the array "
+"during each traversal. The big lines are simply: \"while it's not sorted, "
+"move the hole down to base 0 (moving the biggest player of each base at each "
+"step) and then back to the maximal base (moving the smallest player of each "
+"base)\". After a while, <code>isSorted()</code> will return true and your "
+"algorithm will stop."
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/BubbleBaseball.html:21
+msgid ""
+"This is so easy that we introduce another variant of the problem, with more "
+"than two players per base.  But actually, that shouldn't block you very "
+"long, should it?"
+msgstr ""
+
+#. type: Content of: <p>
+#: src/lessons/sort/baseball/BubbleBaseball.html:24
+msgid ""
+"Surprisingly, the bubble sort variant requires ways less moves than the "
+"other variants. This is astonishing because usually, the bubble sort "
+"performs much worse than the others sorts, but it comes from the very good "
+"match between its big lines and the baseball universe. It actually happens "
+"rather often that a pleasantly written algorithm performs very decently. But "
+"this is not an universal rule either, as demonstrated by the naive algorithm "
+"of the first exercise, that was nice, simple and wrong ;)"
 msgstr ""
diff --git a/lib/resources/jlm.configuration.properties b/lib/resources/jlm.configuration.properties
index 9862256..b9bbe86 100644
--- a/lib/resources/jlm.configuration.properties
+++ b/lib/resources/jlm.configuration.properties
@@ -1,29 +1,33 @@
-#Fri, 31 May 2013 09:47:22 +0200
+#Sun, 04 Aug 2013 21:26:51 +0200
 # JLM default configuration
-jlm.major.version=1.98
-jlm.minor.version=20130531
-jlm.configuration.teacher=false
-
-# output.capture = false # if equal to true, the output is not
-                         # captured into the logging area, but 
-			 # remains on standard stdout/stderr
+jlm.major.version=2.0
+jlm.minor.version=20130804
 
-jlm.default.programminglanguage=Java
+# This should be self explanatory, actually
+# Its value is automatically updated and saved in the personal property file
+jlm.programmingLanguage=Java
 
+# These are used for our XMPP chatting feature. We may want to kill it
 jlm.xmpp.hostname=jabber.org
 jlm.xmpp.port=5222
 jlm.xmpp.username=jlmlovers at jabber.org
 jlm.xmpp.password=jlmforever
 
+# Yeah, having the pass in clear text as is is a really bad thing
 jlm.identica.username=jlmlovers
 jlm.identica.password=jlmforever
 
 jlm.appengine.url=http\://jlmserver-chmod0.appspot.com
 
+# 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 JLM shouldn't be used for coercitive
+# exercises anyway.
+jlm.configuration.teacher=false
+
+# This is for twitter. This is not as bad as having the pass in clear
+# text as we have for identica, but this still feels somehow wrong
 jlm.oauth.consumerKey=ibVls7COiCHxwMd5NoFThQ
 jlm.oauth.consumerSecret=XLcE0kSWDKV4iojSs6KySl5iNFqaUBF1b0CuklmU
 jlm.oauth.accessToken=75057670-caayoZpQWVbVQl3da4js1cvpL906UM3JeoOiKhk
 jlm.oauth.tokenSecret=GgZGRA48c8ylWkwIkPWy9vTtEis7VL3xbtklpniTklM
-
-jlm.logfile.path=
-
diff --git a/po4a.conf b/po4a.conf
index 12a8f7a..a9197db 100644
--- a/po4a.conf
+++ b/po4a.conf
@@ -8,28 +8,31 @@
 [type: html] src/jlm/universe/sort/SortingWorld.html	$lang:src/jlm/universe/sort/SortingWorld.$lang.html
 [type: html] src/jlm/universe/turtles/TurtleWorld.html	$lang:src/jlm/universe/turtles/TurtleWorld.$lang.html
 [type: html] src/jlm/universe/bugglequest/BuggleWorld.html	$lang:src/jlm/universe/bugglequest/BuggleWorld.$lang.html
-[type: html] src/jlm/universe/hanoi/HanoiWorld.html		$lang:src/jlm/universe/hanoi/HanoiWorld.$lang.html
-[type: html] src/jlm/universe/turmite/TurmiteWorld.html        $lang:src/jlm/universe/turmite/TurmiteWorld.$lang.html
 
 [type: html] src/lessons/backtracking/Main.html		$lang:src/lessons/backtracking/Main.$lang.html
 
 [type: html] src/lessons/chooser/LessonChooser.html     $lang:src/lessons/chooser/LessonChooser.$lang.html
 [type: html] src/lessons/chooser/Main.html     $lang:src/lessons/chooser/Main.$lang.html
 
-[type: html] src/lessons/meta/HanoiCreateWorld.html		$lang:src/lessons/meta/HanoiCreateWorld.$lang.html	
-[type: html] src/lessons/meta/Main.html					$lang:src/lessons/meta/Main.$lang.html	
-
-[type: html] src/lessons/welcome/Main.html		$lang:src/lessons/welcome/Main.$lang.html
+[type: html] src/lessons/welcome/Main.html			$lang:src/lessons/welcome/Main.$lang.html
+[type: html] src/lessons/welcome/short_desc.html		$lang:src/lessons/welcome/short_desc.$lang.html
 [type: html] src/lessons/welcome/environment/Environment.html	$lang:src/lessons/welcome/environment/Environment.$lang.html
 [type: html] src/lessons/welcome/basics/Basics.html		$lang:src/lessons/welcome/basics/Basics.$lang.html
 [type: html] src/lessons/welcome/basicsdrawg/BasicsDrawG.html	$lang:src/lessons/welcome/basicsdrawg/BasicsDrawG.$lang.html
 [type: html] src/lessons/welcome/conditions/Conditions.html	$lang:src/lessons/welcome/conditions/Conditions.$lang.html
 [type: html] src/lessons/welcome/baggleseeker/BaggleSeeker.html	$lang:src/lessons/welcome/baggleseeker/BaggleSeeker.$lang.html
-[type: html] src/lessons/welcome/variables/Variables.html		$lang:src/lessons/welcome/variables/Variables.$lang.html
+[type: html] src/lessons/welcome/variables/Variables.html	$lang:src/lessons/welcome/variables/Variables.$lang.html
+[type: html] src/lessons/welcome/variables/RunFour.html		$lang:src/lessons/welcome/variables/RunFour.$lang.html
+[type: html] src/lessons/welcome/variables/RunHalf.html		$lang:src/lessons/welcome/variables/RunHalf.$lang.html
 
 [type: html] src/lessons/welcome/loop/forloop/LoopFor.html		$lang:src/lessons/welcome/loop/forloop/LoopFor.$lang.html
+[type: html] src/lessons/welcome/loop/forloop/LoopStairs.html		$lang:src/lessons/welcome/loop/forloop/LoopStairs.$lang.html
+[type: html] src/lessons/welcome/loop/forloop/LoopCourse.html		$lang:src/lessons/welcome/loop/forloop/LoopCourse.$lang.html
+[type: html] src/lessons/welcome/loop/forloop/LoopCourseForest.html	$lang:src/lessons/welcome/loop/forloop/LoopCourseForest.$lang.html
 [type: html] src/lessons/welcome/loop/whileloop/LoopWhile.html		$lang:src/lessons/welcome/loop/whileloop/LoopWhile.$lang.html
+[type: html] src/lessons/welcome/loop/whileloop/WhileMoria.html		$lang:src/lessons/welcome/loop/whileloop/WhileMoria.$lang.html
 [type: html] src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html	$lang:src/lessons/welcome/loop/dowhileloop/LoopDoWhile.$lang.html
+[type: html] src/lessons/welcome/loop/dowhileloop/Poucet.html		$lang:src/lessons/welcome/loop/dowhileloop/Poucet.$lang.html
 
 [type: html] src/lessons/welcome/methods/basics/Methods.html		$lang:src/lessons/welcome/methods/basics/Methods.$lang.html
 [type: html] src/lessons/welcome/methods/doghouse/MethodsDogHouse.html	$lang:src/lessons/welcome/methods/doghouse/MethodsDogHouse.$lang.html
@@ -40,11 +43,12 @@
 [type: html] src/lessons/welcome/methods/picture3/MethodsPicture3.html	$lang:src/lessons/welcome/methods/picture3/MethodsPicture3.$lang.html
 [type: html] src/lessons/welcome/methods/picture4/MethodsPicture4.html	$lang:src/lessons/welcome/methods/picture4/MethodsPicture4.$lang.html
 
-[type: html] src/lessons/welcome/bdr/basics/BDR.html		$lang:src/lessons/welcome/bdr/basics/BDR.$lang.html
-[type: html] src/lessons/welcome/bdr/extended/BDR2.html		$lang:src/lessons/welcome/bdr/extended/BDR2.$lang.html
+[type: html] src/lessons/welcome/bdr/BDR.html		$lang:src/lessons/welcome/bdr/BDR.$lang.html
+[type: html] src/lessons/welcome/bdr/BDR2.html		$lang:src/lessons/welcome/bdr/BDR2.$lang.html
 
-[type: html] src/lessons/welcome/slug/hunting/SlugHunting.html	$lang:src/lessons/welcome/slug/hunting/SlugHunting.$lang.html
-[type: html] src/lessons/welcome/slug/tracking/SlugTracking.html	$lang:src/lessons/welcome/slug/tracking/SlugTracking.$lang.html
+[type: html] src/lessons/welcome/slug/SlugHunting.html	$lang:src/lessons/welcome/slug/SlugHunting.$lang.html
+[type: html] src/lessons/welcome/slug/SlugTracking.html	$lang:src/lessons/welcome/slug/SlugTracking.$lang.html
+[type: html] src/lessons/welcome/slug/SlugSnail.html	$lang:src/lessons/welcome/slug/SlugSnail.$lang.html
 
 [type: html] src/lessons/welcome/snake/Snake.html		$lang:src/lessons/welcome/snake/Snake.$lang.html
 
@@ -53,26 +57,31 @@
 [type: html] src/lessons/welcome/traversal/diagonal/TraversalDiagonal.html	$lang:src/lessons/welcome/traversal/diagonal/TraversalDiagonal.$lang.html
 [type: html] src/lessons/welcome/traversal/zigzag/TraversalZigZag.html	$lang:src/lessons/welcome/traversal/zigzag/TraversalZigZag.$lang.html
 
-[type: html] src/lessons/welcome/turmites/langton/Langton.html		$lang:src/lessons/welcome/turmites/langton/Langton.$lang.html
-[type: html] src/lessons/welcome/turmites/langtoncolors/LangtonColors.html	$lang:src/lessons/welcome/turmites/langtoncolors/LangtonColors.$lang.html
-[type: html] src/lessons/welcome/turmites/helloturmite/HelloTurmite.html	$lang:src/lessons/welcome/turmites/helloturmite/HelloTurmite.$lang.html
-[type: html] src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html	$lang:src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.$lang.html
-
-[type: html] src/lessons/sort/Main.html			$lang:src/lessons/sort/Main.$lang.html
-[type: html] src/lessons/sort/bubble1/AlgBubbleSort1.html	$lang:src/lessons/sort/bubble1/AlgBubbleSort1.$lang.html
-[type: html] src/lessons/sort/bubble2/AlgBubbleSort2.html	$lang:src/lessons/sort/bubble2/AlgBubbleSort2.$lang.html
-[type: html] src/lessons/sort/bubble3/AlgBubbleSort3.html	$lang:src/lessons/sort/bubble3/AlgBubbleSort3.$lang.html
-[type: html] src/lessons/sort/cocktail1/AlgCocktailSort1.html	$lang:src/lessons/sort/cocktail1/AlgCocktailSort1.$lang.html
-[type: html] src/lessons/sort/cocktail2/AlgCocktailSort2.html	$lang:src/lessons/sort/cocktail2/AlgCocktailSort2.$lang.html
-[type: html] src/lessons/sort/cocktail3/AlgCocktailSort3.html	$lang:src/lessons/sort/cocktail3/AlgCocktailSort3.$lang.html
+[type: html] src/lessons/turmites/Main.html        			$lang:src/lessons/turmites/Main.$lang.html
+[type: html] src/lessons/turmites/short_desc.html        		$lang:src/lessons/turmites/short_desc.$lang.html
+[type: html] src/lessons/turmites/langton/Langton.html			$lang:src/lessons/turmites/langton/Langton.$lang.html
+[type: html] src/lessons/turmites/langtoncolors/LangtonColors.html	$lang:src/lessons/turmites/langtoncolors/LangtonColors.$lang.html
+[type: html] src/lessons/turmites/helloturmite/HelloTurmite.html	$lang:src/lessons/turmites/helloturmite/HelloTurmite.$lang.html
+[type: html] src/lessons/turmites/turmitecreator/TurmiteCreator.html	$lang:src/lessons/turmites/turmitecreator/TurmiteCreator.$lang.html
+[type: html] src/lessons/turmites/universe/TurmiteWorld.html        	$lang:src/lessons/turmites/universe/TurmiteWorld.$lang.html
+
+[type: html] src/lessons/sort/Main.html				$lang:src/lessons/sort/Main.$lang.html
+[type: html] src/lessons/sort/short_desc.html			$lang:src/lessons/sort/short_desc.$lang.html
+[type: html] src/lessons/sort/bubble/AlgBubbleSort1.html	$lang:src/lessons/sort/bubble/AlgBubbleSort1.$lang.html
+[type: html] src/lessons/sort/bubble/AlgBubbleSort2.html	$lang:src/lessons/sort/bubble/AlgBubbleSort2.$lang.html
+[type: html] src/lessons/sort/bubble/AlgBubbleSort3.html	$lang:src/lessons/sort/bubble/AlgBubbleSort3.$lang.html
+[type: html] src/lessons/sort/cocktail/AlgCocktailSort1.html	$lang:src/lessons/sort/cocktail/AlgCocktailSort1.$lang.html
+[type: html] src/lessons/sort/cocktail/AlgCocktailSort2.html	$lang:src/lessons/sort/cocktail/AlgCocktailSort2.$lang.html
+[type: html] src/lessons/sort/cocktail/AlgCocktailSort3.html	$lang:src/lessons/sort/cocktail/AlgCocktailSort3.$lang.html
 [type: html] src/lessons/sort/insertion/AlgInsertionSort.html	$lang:src/lessons/sort/insertion/AlgInsertionSort.$lang.html
 [type: html] src/lessons/sort/shell/AlgShellSort.html	$lang:src/lessons/sort/shell/AlgShellSort.$lang.html
 [type: html] src/lessons/sort/selection/AlgSelectionSort.html	$lang:src/lessons/sort/selection/AlgSelectionSort.$lang.html
 [type: html] src/lessons/sort/comb/AlgCombSort.html	$lang:src/lessons/sort/comb/AlgCombSort.$lang.html
-[type: html] src/lessons/sort/comb11/AlgCombSort11.html	$lang:src/lessons/sort/comb11/AlgCombSort11.$lang.html
+[type: html] src/lessons/sort/comb/AlgCombSort11.html	$lang:src/lessons/sort/comb/AlgCombSort11.$lang.html
 [type: html] src/lessons/sort/gnome/AlgGnomeSort.html	$lang:src/lessons/sort/gnome/AlgGnomeSort.$lang.html
 
-[type: html] src/lessons/recursion/Main.html		$lang:src/lessons/recursion/Main.$lang.html
+[type: html] src/lessons/recursion/Main.html			$lang:src/lessons/recursion/Main.$lang.html
+[type: html] src/lessons/recursion/short_desc.html		$lang:src/lessons/recursion/short_desc.$lang.html
 [type: html] src/lessons/recursion/square/Square.html		$lang:src/lessons/recursion/square/Square.$lang.html
 [type: html] src/lessons/recursion/polygonfractal/PolygonFractal.html	$lang:src/lessons/recursion/polygonfractal/PolygonFractal.$lang.html
 [type: html] src/lessons/recursion/koch/Koch.html		$lang:src/lessons/recursion/koch/Koch.$lang.html
@@ -81,12 +90,17 @@
 [type: html] src/lessons/recursion/tree/Tree.html		$lang:src/lessons/recursion/tree/Tree.$lang.html
 [type: html] src/lessons/recursion/sierpinski/Sierpinski.html	$lang:src/lessons/recursion/sierpinski/Sierpinski.$lang.html
 [type: html] src/lessons/recursion/spiral/Spiral.html		$lang:src/lessons/recursion/spiral/Spiral.$lang.html
-[type: html] src/lessons/recursion/dragoncurve1/DragonCurve1.html	$lang:src/lessons/recursion/dragoncurve1/DragonCurve1.$lang.html
-[type: html] src/lessons/recursion/dragoncurve2/DragonCurve2.html	$lang:src/lessons/recursion/dragoncurve2/DragonCurve2.$lang.html
-[type: html] src/lessons/recursion/spiraluse/SpiralUse.html	$lang:src/lessons/recursion/spiraluse/SpiralUse.$lang.html
-[type: html] src/lessons/recursion/hanoiboard/HanoiBoard.html	$lang:src/lessons/recursion/hanoiboard/HanoiBoard.$lang.html
+[type: html] src/lessons/recursion/spiral/SpiralUse.html	$lang:src/lessons/recursion/spiral/SpiralUse.$lang.html
+[type: html] src/lessons/recursion/dragoncurve/DragonCurve1.html	$lang:src/lessons/recursion/dragoncurve/DragonCurve1.$lang.html
+[type: html] src/lessons/recursion/dragoncurve/DragonCurve2.html	$lang:src/lessons/recursion/dragoncurve/DragonCurve2.$lang.html
+
+[type: html] src/lessons/recursion/hanoi/Main.html			$lang:src/lessons/recursion/hanoi/Main.$lang.html
+[type: html] src/lessons/recursion/hanoi/short_desc.html		$lang:src/lessons/recursion/hanoi/short_desc.$lang.html
+[type: html] src/lessons/recursion/hanoi/HanoiBoard.html		$lang:src/lessons/recursion/hanoi/HanoiBoard.$lang.html
+[type: html] src/lessons/recursion/hanoi/universe/HanoiWorld.html	$lang:src/lessons/recursion/hanoi/universe/HanoiWorld.$lang.html
 
-[type: html] src/lessons/maze/Main.html			$lang:src/lessons/maze/Main.$lang.html
+[type: html] src/lessons/maze/Main.html				$lang:src/lessons/maze/Main.$lang.html
+[type: html] src/lessons/maze/short_desc.html			$lang:src/lessons/maze/short_desc.$lang.html
 [type: html] src/lessons/maze/randommouse/RandomMouseMaze.html	$lang:src/lessons/maze/randommouse/RandomMouseMaze.$lang.html
 [type: html] src/lessons/maze/wallfollower/WallFollowerMaze.html	$lang:src/lessons/maze/wallfollower/WallFollowerMaze.$lang.html
 [type: html] src/lessons/maze/pledge/PledgeMaze.html		$lang:src/lessons/maze/pledge/PledgeMaze.$lang.html
@@ -96,6 +110,7 @@
 
 [type: html] src/jlm/universe/lightbot/LightBotWorld.html $lang:src/jlm/universe/lightbot/LightBotWorld.$lang.html
 [type: html] src/lessons/lightbot/Main.html		  $lang:src/lessons/lightbot/Main.$lang.html
+[type: html] src/lessons/lightbot/short_desc.html	  $lang:src/lessons/lightbot/short_desc.$lang.html
 [type: html] src/lessons/lightbot/Board01TwoSteps.html	  $lang:src/lessons/lightbot/Board01TwoSteps.$lang.html
 [type: html] src/lessons/lightbot/Board02Turn.html	  $lang:src/lessons/lightbot/Board02Turn.$lang.html
 [type: html] src/lessons/lightbot/Board03Jump.html	  $lang:src/lessons/lightbot/Board03Jump.$lang.html
@@ -109,63 +124,65 @@
 [type: html] src/lessons/lightbot/Board11Sea.html	  $lang:src/lessons/lightbot/Board11Sea.$lang.html
 [type: html] src/lessons/lightbot/Board12Escher.html	  $lang:src/lessons/lightbot/Board12Escher.$lang.html
 
-[type: html] src/lessons/welcome/bool1/close10/Close10.html         $lang:src/lessons/welcome/bool1/close10/Close10.$lang.html
-[type: html] src/lessons/welcome/bool1/countteen/CountTeen.html       $lang:src/lessons/welcome/bool1/countteen/CountTeen.$lang.html
-[type: html] src/lessons/welcome/bool1/diff21/Diff21.html          $lang:src/lessons/welcome/bool1/diff21/Diff21.$lang.html
-[type: html] src/lessons/welcome/bool1/hasteen/HasTeen.html         $lang:src/lessons/welcome/bool1/hasteen/HasTeen.$lang.html
-[type: html] src/lessons/welcome/bool1/icyhot/IcyHot.html          $lang:src/lessons/welcome/bool1/icyhot/IcyHot.$lang.html
-[type: html] src/lessons/welcome/bool1/in1020/In1020.html          $lang:src/lessons/welcome/bool1/in1020/In1020.$lang.html
-[type: html] src/lessons/welcome/bool1/in3050/In3050.html          $lang:src/lessons/welcome/bool1/in3050/In3050.$lang.html
-[type: html] src/lessons/welcome/bool1/lastdigit/LastDigit.html       $lang:src/lessons/welcome/bool1/lastdigit/LastDigit.$lang.html
-[type: html] src/lessons/welcome/bool1/loneteen/LoneTeen.html        $lang:src/lessons/welcome/bool1/loneteen/LoneTeen.$lang.html
+[type: html] src/lessons/welcome/bool1/Close10.html         $lang:src/lessons/welcome/bool1/Close10.$lang.html
+[type: html] src/lessons/welcome/bool1/CountTeen.html       $lang:src/lessons/welcome/bool1/CountTeen.$lang.html
+[type: html] src/lessons/welcome/bool1/Diff21.html          $lang:src/lessons/welcome/bool1/Diff21.$lang.html
+[type: html] src/lessons/welcome/bool1/HasTeen.html         $lang:src/lessons/welcome/bool1/HasTeen.$lang.html
+[type: html] src/lessons/welcome/bool1/IcyHot.html          $lang:src/lessons/welcome/bool1/IcyHot.$lang.html
+[type: html] src/lessons/welcome/bool1/In1020.html          $lang:src/lessons/welcome/bool1/In1020.$lang.html
+[type: html] src/lessons/welcome/bool1/In3050.html          $lang:src/lessons/welcome/bool1/In3050.$lang.html
+[type: html] src/lessons/welcome/bool1/LastDigit.html       $lang:src/lessons/welcome/bool1/LastDigit.$lang.html
+[type: html] src/lessons/welcome/bool1/LoneTeen.html        $lang:src/lessons/welcome/bool1/LoneTeen.$lang.html
 [type: html] src/lessons/welcome/bool1/Main.html            $lang:src/lessons/welcome/bool1/Main.$lang.html
-[type: html] src/lessons/welcome/bool1/makes10/Makes10.html         $lang:src/lessons/welcome/bool1/makes10/Makes10.$lang.html
-[type: html] src/lessons/welcome/bool1/max1020/Max1020.html         $lang:src/lessons/welcome/bool1/max1020/Max1020.$lang.html
-[type: html] src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.html   $lang:src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.$lang.html
-[type: html] src/lessons/welcome/bool1/nearhundred/NearHundred.html     $lang:src/lessons/welcome/bool1/nearhundred/NearHundred.$lang.html
-[type: html] src/lessons/welcome/bool1/parottrouble/ParotTrouble.html    $lang:src/lessons/welcome/bool1/parottrouble/ParotTrouble.$lang.html
-[type: html] src/lessons/welcome/bool1/posneg/PosNeg.html          $lang:src/lessons/welcome/bool1/posneg/PosNeg.$lang.html
-[type: html] src/lessons/welcome/bool1/sleepin/SleepIn.html         $lang:src/lessons/welcome/bool1/sleepin/SleepIn.$lang.html
-[type: html] src/lessons/welcome/bool1/sumdouble/SumDouble.html       $lang:src/lessons/welcome/bool1/sumdouble/SumDouble.$lang.html
-
-[type: html] src/lessons/welcome/bool2/alarmclock/AlarmClock.html      $lang:src/lessons/welcome/bool2/alarmclock/AlarmClock.$lang.html
-[type: html] src/lessons/welcome/bool2/answercell/AnswerCell.html      $lang:src/lessons/welcome/bool2/answercell/AnswerCell.$lang.html
-[type: html] src/lessons/welcome/bool2/ticket/blue/BlueTicket.html      $lang:src/lessons/welcome/bool2/ticket/blue/BlueTicket.$lang.html
-[type: html] src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.html  $lang:src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.$lang.html
-[type: html] src/lessons/welcome/bool2/party/cigar/CigarParty.html      $lang:src/lessons/welcome/bool2/party/cigar/CigarParty.$lang.html
-[type: html] src/lessons/welcome/bool2/datefashion/DateFashion.html     $lang:src/lessons/welcome/bool2/datefashion/DateFashion.$lang.html
-[type: html] src/lessons/welcome/bool2/ticket/green/GreenTicket.html     $lang:src/lessons/welcome/bool2/ticket/green/GreenTicket.$lang.html
-[type: html] src/lessons/welcome/bool2/in1to10/In1To10.html         $lang:src/lessons/welcome/bool2/in1to10/In1To10.$lang.html
-[type: html] src/lessons/welcome/bool2/inorderequals/InOrderEqual.html    $lang:src/lessons/welcome/bool2/inorderequals/InOrderEqual.$lang.html
-[type: html] src/lessons/welcome/bool2/inorder/InOrder.html         $lang:src/lessons/welcome/bool2/inorder/InOrder.$lang.html
-[type: html] src/lessons/welcome/bool2/lastdigit2/LastDigit2.html      $lang:src/lessons/welcome/bool2/lastdigit2/LastDigit2.$lang.html
-[type: html] src/lessons/welcome/bool2/lessby10/LessBy10.html        $lang:src/lessons/welcome/bool2/lessby10/LessBy10.$lang.html
+[type: html] src/lessons/welcome/bool1/Makes10.html         $lang:src/lessons/welcome/bool1/Makes10.$lang.html
+[type: html] src/lessons/welcome/bool1/Max1020.html         $lang:src/lessons/welcome/bool1/Max1020.$lang.html
+[type: html] src/lessons/welcome/bool1/MonkeyTrouble.html   $lang:src/lessons/welcome/bool1/MonkeyTrouble.$lang.html
+[type: html] src/lessons/welcome/bool1/NearHundred.html     $lang:src/lessons/welcome/bool1/NearHundred.$lang.html
+[type: html] src/lessons/welcome/bool1/ParotTrouble.html    $lang:src/lessons/welcome/bool1/ParotTrouble.$lang.html
+[type: html] src/lessons/welcome/bool1/PosNeg.html          $lang:src/lessons/welcome/bool1/PosNeg.$lang.html
+[type: html] src/lessons/welcome/bool1/SleepIn.html         $lang:src/lessons/welcome/bool1/SleepIn.$lang.html
+[type: html] src/lessons/welcome/bool1/SumDouble.html       $lang:src/lessons/welcome/bool1/SumDouble.$lang.html
+
+[type: html] src/lessons/welcome/bool2/AlarmClock.html      $lang:src/lessons/welcome/bool2/AlarmClock.$lang.html
+[type: html] src/lessons/welcome/bool2/AnswerCell.html      $lang:src/lessons/welcome/bool2/AnswerCell.$lang.html
+[type: html] src/lessons/welcome/bool2/BlueTicket.html      $lang:src/lessons/welcome/bool2/BlueTicket.$lang.html
+[type: html] src/lessons/welcome/bool2/CaughtSpeeding.html  $lang:src/lessons/welcome/bool2/CaughtSpeeding.$lang.html
+[type: html] src/lessons/welcome/bool2/CigarParty.html      $lang:src/lessons/welcome/bool2/CigarParty.$lang.html
+[type: html] src/lessons/welcome/bool2/DateFashion.html     $lang:src/lessons/welcome/bool2/DateFashion.$lang.html
+[type: html] src/lessons/welcome/bool2/GreenTicket.html     $lang:src/lessons/welcome/bool2/GreenTicket.$lang.html
+[type: html] src/lessons/welcome/bool2/In1To10.html         $lang:src/lessons/welcome/bool2/In1To10.$lang.html
+[type: html] src/lessons/welcome/bool2/InOrderEqual.html    $lang:src/lessons/welcome/bool2/InOrderEqual.$lang.html
+[type: html] src/lessons/welcome/bool2/InOrder.html         $lang:src/lessons/welcome/bool2/InOrder.$lang.html
+[type: html] src/lessons/welcome/bool2/LastDigit2.html      $lang:src/lessons/welcome/bool2/LastDigit2.$lang.html
+[type: html] src/lessons/welcome/bool2/LessBy10.html        $lang:src/lessons/welcome/bool2/LessBy10.$lang.html
 [type: html] src/lessons/welcome/bool2/Main.html            $lang:src/lessons/welcome/bool2/Main.$lang.html
-[type: html] src/lessons/welcome/bool2/maxmod5/MaxMod5.html         $lang:src/lessons/welcome/bool2/maxmod5/MaxMod5.$lang.html
-[type: html] src/lessons/welcome/bool2/nearten/NearTen.html         $lang:src/lessons/welcome/bool2/nearten/NearTen.$lang.html
-[type: html] src/lessons/welcome/bool2/ticket/red/RedTicket.html       $lang:src/lessons/welcome/bool2/ticket/red/RedTicket.$lang.html
-[type: html] src/lessons/welcome/bool2/sharedigit/ShareDigit.html      $lang:src/lessons/welcome/bool2/sharedigit/ShareDigit.$lang.html
-[type: html] src/lessons/welcome/bool2/sortasum/SortaSum.html        $lang:src/lessons/welcome/bool2/sortasum/SortaSum.$lang.html
-[type: html] src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.html    $lang:src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.$lang.html
-[type: html] src/lessons/welcome/bool2/party/tea/TeaParty.html        $lang:src/lessons/welcome/bool2/party/tea/TeaParty.$lang.html
-[type: html] src/lessons/welcome/bool2/teensum/TeenSum.html         $lang:src/lessons/welcome/bool2/teensum/TeenSum.$lang.html
-[type: html] src/lessons/welcome/bool2/twoasone/TwoAsOne.html        $lang:src/lessons/welcome/bool2/twoasone/TwoAsOne.$lang.html
-[type: html] src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.html  $lang:src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.$lang.html
+[type: html] src/lessons/welcome/bool2/MaxMod5.html         $lang:src/lessons/welcome/bool2/MaxMod5.$lang.html
+[type: html] src/lessons/welcome/bool2/NearTen.html         $lang:src/lessons/welcome/bool2/NearTen.$lang.html
+[type: html] src/lessons/welcome/bool2/RedTicket.html       $lang:src/lessons/welcome/bool2/RedTicket.$lang.html
+[type: html] src/lessons/welcome/bool2/ShareDigit.html      $lang:src/lessons/welcome/bool2/ShareDigit.$lang.html
+[type: html] src/lessons/welcome/bool2/SortaSum.html        $lang:src/lessons/welcome/bool2/SortaSum.$lang.html
+[type: html] src/lessons/welcome/bool2/SquirrelPlay.html    $lang:src/lessons/welcome/bool2/SquirrelPlay.$lang.html
+[type: html] src/lessons/welcome/bool2/TeaParty.html        $lang:src/lessons/welcome/bool2/TeaParty.$lang.html
+[type: html] src/lessons/welcome/bool2/TeenSum.html         $lang:src/lessons/welcome/bool2/TeenSum.$lang.html
+[type: html] src/lessons/welcome/bool2/TwoAsOne.html        $lang:src/lessons/welcome/bool2/TwoAsOne.$lang.html
+[type: html] src/lessons/welcome/bool2/WithoutDoubles.html  $lang:src/lessons/welcome/bool2/WithoutDoubles.$lang.html
 
 [type: html] src/jlm/universe/bat/BatWorld.html			$lang:src/jlm/universe/bat/BatWorld.$lang.html
+
 [type: html] src/lessons/bat/string1/Main.html          $lang:src/lessons/bat/string1/Main.$lang.html
-[type: html] src/lessons/bat/string1/altpairs/AltPairs.html      $lang:src/lessons/bat/string1/altpairs/AltPairs.$lang.html
-[type: html] src/lessons/bat/string1/fronttimes/FrontTimes.html    $lang:src/lessons/bat/string1/fronttimes/FrontTimes.$lang.html
-[type: html] src/lessons/bat/string1/last2/Last2.html         $lang:src/lessons/bat/string1/last2/Last2.$lang.html
-[type: html] src/lessons/bat/string1/bits/StringBits.html    $lang:src/lessons/bat/string1/bits/StringBits.$lang.html
-[type: html] src/lessons/bat/string1/match/StringMatch.html   $lang:src/lessons/bat/string1/match/StringMatch.$lang.html
-[type: html] src/lessons/bat/string1/splosion/StringSplosion.html $lang:src/lessons/bat/string1/splosion/StringSplosion.$lang.html
-[type: html] src/lessons/bat/string1/times/StringTimes.html   $lang:src/lessons/bat/string1/times/StringTimes.$lang.html
-[type: html] src/lessons/bat/string1/stringx/StringX.html       $lang:src/lessons/bat/string1/stringx/StringX.$lang.html
-[type: html] src/lessons/bat/string1/yak/StringYak.html     $lang:src/lessons/bat/string1/yak/StringYak.$lang.html
+[type: html] src/lessons/bat/string1/short_desc.html    $lang:src/lessons/bat/string1/short_desc.$lang.html
+[type: html] src/lessons/bat/string1/AltPairs.html      $lang:src/lessons/bat/string1/AltPairs.$lang.html
+[type: html] src/lessons/bat/string1/FrontTimes.html    $lang:src/lessons/bat/string1/FrontTimes.$lang.html
+[type: html] src/lessons/bat/string1/Last2.html         $lang:src/lessons/bat/string1/Last2.$lang.html
+[type: html] src/lessons/bat/string1/StringBits.html    $lang:src/lessons/bat/string1/StringBits.$lang.html
+[type: html] src/lessons/bat/string1/StringMatch.html   $lang:src/lessons/bat/string1/StringMatch.$lang.html
+[type: html] src/lessons/bat/string1/StringSplosion.html $lang:src/lessons/bat/string1/StringSplosion.$lang.html
+[type: html] src/lessons/bat/string1/StringTimes.html   $lang:src/lessons/bat/string1/StringTimes.$lang.html
+[type: html] src/lessons/bat/string1/StringX.html       $lang:src/lessons/bat/string1/StringX.$lang.html
+[type: html] src/lessons/bat/string1/StringYak.html     $lang:src/lessons/bat/string1/StringYak.$lang.html
 
 [type: html] src/lessons/welcome/array/basics/Array.html		$lang:src/lessons/welcome/array/basics/Array.$lang.html
-[type: html] src/lessons/welcome/array/basics2/Array2.html		$lang:src/lessons/welcome/array/basics2/Array2.$lang.html
+[type: html] src/lessons/welcome/array/basics/Array2.html		$lang:src/lessons/welcome/array/basics/Array2.$lang.html
 [type: html] src/lessons/welcome/array/indexof/value/IndexOfValue.html $lang:src/lessons/welcome/array/indexof/value/IndexOfValue.$lang.html
 [type: html] src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.html $lang:src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.$lang.html
 [type: html] src/lessons/welcome/array/averagevalue/AverageValue.html $lang:src/lessons/welcome/array/averagevalue/AverageValue.$lang.html
@@ -178,11 +195,17 @@
 [type: html] src/lessons/welcome/array/notriples/NoTriples.html     $lang:src/lessons/welcome/array/notriples/NoTriples.$lang.html
 [type: html] src/lessons/welcome/array/has271/Has271.html        $lang:src/lessons/welcome/array/has271/Has271.$lang.html
 
-[type: html] src/jlm/universe/smn/pancake/PancakeWorld.html	$lang:src/jlm/universe/smn/pancake/PancakeWorld.$lang.html
-[type: html] src/jlm/universe/smn/baseball/BaseballWorld.html	$lang:src/jlm/universe/smn/baseball/BaseballWorld.$lang.html
-
-[type: html] src/lessons/smn/Main.html		$lang:src/lessons/smn/Main.$lang.html
-[type: html] src/lessons/smn/pancake/burned/BurnedPancakePlate.html	$lang:src/lessons/smn/pancake/burned/BurnedPancakePlate.$lang.html
-[type: html] src/lessons/smn/pancake/raw/RawPancakePlate.html	$lang:src/lessons/smn/pancake/raw/RawPancakePlate.$lang.html
-[type: html] src/lessons/smn/baseball/easy/BaseballGame.html	$lang:src/lessons/smn/baseball/easy/BaseballGame.$lang.html
-[type: html] src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html	$lang:src/lessons/smn/baseball/medium/BaseballGameMorePlayers.$lang.html
+[type: html] src/lessons/sort/pancake/universe/PancakeWorld.html	$lang:src/lessons/sort/pancake/universe/PancakeWorld.$lang.html
+[type: html] src/lessons/sort/pancake/Main.html				$lang:src/lessons/sort/pancake/Main.$lang.html
+[type: html] src/lessons/sort/pancake/short_desc.html			$lang:src/lessons/sort/pancake/short_desc.$lang.html
+[type: html] src/lessons/sort/pancake/BasicPancake.html			$lang:src/lessons/sort/pancake/BasicPancake.$lang.html
+[type: html] src/lessons/sort/pancake/BurnedPancake.html		$lang:src/lessons/sort/pancake/BurnedPancake.$lang.html
+[type: html] src/lessons/sort/pancake/GatesPancake.html			$lang:src/lessons/sort/pancake/GatesPancake.$lang.html
+
+[type: html] src/lessons/sort/baseball/Main.html			$lang:src/lessons/sort/baseball/Main.$lang.html
+[type: html] src/lessons/sort/baseball/short_desc.html			$lang:src/lessons/sort/baseball/short_desc.$lang.html
+[type: html] src/lessons/sort/baseball/universe/BaseballWorld.html	$lang:src/lessons/sort/baseball/universe/BaseballWorld.$lang.html
+[type: html] src/lessons/sort/baseball/NaiveBaseball.html		$lang:src/lessons/sort/baseball/NaiveBaseball.$lang.html
+[type: html] src/lessons/sort/baseball/SelectBaseball.html		$lang:src/lessons/sort/baseball/SelectBaseball.$lang.html
+[type: html] src/lessons/sort/baseball/InsertBaseball.html		$lang:src/lessons/sort/baseball/InsertBaseball.$lang.html
+[type: html] src/lessons/sort/baseball/BubbleBaseball.html		$lang:src/lessons/sort/baseball/BubbleBaseball.$lang.html
diff --git a/src/jlm/core/ExoTest.java b/src/jlm/core/ExoTest.java
index 2ad0022..950d6e3 100644
--- a/src/jlm/core/ExoTest.java
+++ b/src/jlm/core/ExoTest.java
@@ -3,10 +3,11 @@ package jlm.core;
 import static org.junit.Assert.fail;
 
 import java.util.Collection;
+import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.Locale;
+import java.util.Set;
 
-import jlm.core.model.FileUtils;
 import jlm.core.model.Game;
 import jlm.core.model.lesson.ExecutionProgress;
 import jlm.core.model.lesson.Exercise;
@@ -14,6 +15,7 @@ import jlm.core.model.lesson.Exercise.WorldKind;
 import jlm.core.model.lesson.ExerciseTemplated;
 import jlm.core.model.lesson.Lecture;
 import jlm.core.model.lesson.Lesson;
+import jlm.core.utils.FileUtils;
 import jlm.universe.Entity;
 import jlm.universe.World;
 import jlm.universe.bat.BatExercise;
@@ -29,11 +31,10 @@ import org.junit.runners.Parameterized.Parameters;
 @RunWith(Parameterized.class)
 public class ExoTest {
 	static private String[] lessons = new String[] { 
-		"lessons.welcome", 
-//		"lessons.maze","lessons.bat.string1", 
-//		"lessons.sort", "lessons.recursion",
+		"lessons.welcome", "lessons.turmites", "lessons.maze","lessons.bat.string1", 
+		"lessons.sort", "lessons.sort.baseball", "lessons.sort.pancake",  
+		"lessons.recursion", "lessons.recursion.hanoi",
 		// "lessons.lightbot", // Well, testing this requires testing the swing directly I guess
-//		"lessons.smn"
 		};
 
 	@BeforeClass
@@ -47,19 +48,29 @@ public class ExoTest {
 		
 		FileUtils.setLocale(new Locale("en"));
 		Game g = Game.getInstance();
-		g.switchDebug();
 
 		/* Compute the answers with the java entities */
 		Game.getInstance().setProgramingLanguage(Game.JAVA);
+		Set<Lecture> allExercises = new HashSet<Lecture>();  
 		for (String lessonName : lessons) { 
-			System.err.println("Loading lesson "+lessonName);
-			g.switchLesson(lessonName);
-			System.err.println("Lesson "+lessonName+" loaded");
-			
+			g.switchLesson(lessonName,true);
+			System.out.println("Lesson "+lessonName+" loaded ("+g.getCurrentLesson().getExerciseCount()+" exercises)");
+			if (g.getCurrentLesson().getExerciseCount() == 0) {
+				System.err.println("Cannot find any exercise in "+lessonName+". Something's wrong here");
+				System.exit(1);
+			}
 			for (Lecture l : g.getCurrentLesson().exercises()) 
-				if (l instanceof Exercise)
+				if (l instanceof Exercise) {
 					result.add(new Object[] {Game.getInstance().getCurrentLesson(), l});
+					if (allExercises.contains(l)) {
+						System.err.println("Warning, I tried to add the exercise "+l.getName()+" twice. Something's wrong here");
+						System.exit(1);
+					}
+					allExercises.add(l);
+				}
 		}
+		System.out.println("There is currently "+result.size()+" exercises in our database. Yes sir.");
+		g.switchDebug();
 		
 		g.setLocale(new Locale("en"));
 		return result;
@@ -99,9 +110,12 @@ public class ExoTest {
 		
 		if (exo.lastResult.totalTests == 0 
 				|| exo.lastResult.totalTests != exo.lastResult.passedTests 
-				|| !exo.lastResult.details.equals("")) 
+				|| !exo.lastResult.details.equals("")) {
+			System.out.println(""+exo.getClass().getName()+" failed in "+Game.getProgrammingLanguage()+": "+exo.lastResult.details);
 			fail(exo.getClass().getSimpleName()+": failed exercise ("+
 				exo.lastResult.passedTests+"/"+exo.lastResult.totalTests+" passed): '"+exo.lastResult.details+"'");
+		}
+		System.out.println(""+exo.getClass().getName()+" passed in "+Game.getProgrammingLanguage());
 
 	}
 	
@@ -118,7 +132,6 @@ public class ExoTest {
 //			return;
 			fail("Exercise "+exo.getClass().getName()+" does not support python");
 		}
-		
 		Game.getInstance().setProgramingLanguage(Game.PYTHON);
 		testCorrectionEntity();
 	}
diff --git a/src/jlm/core/model/CourseAppEngine.java b/src/jlm/core/model/CourseAppEngine.java
index 50c575f..4921eea 100644
--- a/src/jlm/core/model/CourseAppEngine.java
+++ b/src/jlm/core/model/CourseAppEngine.java
@@ -24,8 +24,8 @@ public class CourseAppEngine extends Course {
     public CourseAppEngine(String id) {
         super(id);
         try {
-            teacherServer = new URL(Game.getProperty("jlm.appengine.url") + "/teacher");
-            courseServer = new URL(Game.getProperty("jlm.appengine.url") + "/course");
+            teacherServer = new URL(Game.getProperty(Game.PROP_APPENGINE_URL) + "/teacher");
+            courseServer = new URL(Game.getProperty(Game.PROP_APPENGINE_URL) + "/course");
         } catch (MalformedURLException e) {
             e.printStackTrace();
         }
@@ -34,8 +34,8 @@ public class CourseAppEngine extends Course {
     public CourseAppEngine(String id, String password) {
         super(id, password);
         try {
-            teacherServer = new URL(Game.getProperty("jlm.appengine.url") + "/teacher");
-            courseServer = new URL(Game.getProperty("jlm.appengine.url") + "/course");
+            teacherServer = new URL(Game.getProperty(Game.PROP_APPENGINE_URL) + "/teacher");
+            courseServer = new URL(Game.getProperty(Game.PROP_APPENGINE_URL) + "/course");
         } catch (MalformedURLException e) {
             e.printStackTrace();
         }
diff --git a/src/jlm/core/model/FileUtils.java b/src/jlm/core/model/FileUtils.java
deleted file mode 100644
index 0c7c1db..0000000
--- a/src/jlm/core/model/FileUtils.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package jlm.core.model;
-
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileNotFoundException;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.InputStreamReader;
-import java.io.UnsupportedEncodingException;
-import java.util.Locale;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-
-/** This class is in charge of loading the resources from disk into memory
- * 
- * 	It solves 2 main difficulties. The first one is to find the files in any case, be 
- *  them in the distributed jar file, or on the disk (as it happens when we develop JLM: 
- *  we don't build a jar for each run, we directly from our source tree). It also deals 
- *  with the windows/unix incompatibilities about directory separators (/ or \).
- * 
- *  The second problem it deals with is about translations. When looking for a help file, 
- *  it first seach for a suitable translated version. If not found, it fallbacks to the 
- *  english version. This is done through the locale static variable. Yeah, that's not 
- *  clean but it just works.
- */
-public class FileUtils {
-	private static Locale locale;
-	
-	private final static String[] directories = { "", "lib/", "src/" };                
-
-	
-	/** Specifies the locale that we have to use when looking for translated files */
-	public static void setLocale(Locale l) {
-		locale = l;
-	}
-	public static Locale getLocale() {
-		return locale==null?new Locale("en"):locale;
-	}
-	
-	public static BufferedReader newFileReader(String file, String extension, boolean translatable) throws FileNotFoundException, UnsupportedEncodingException {
-        String fileName = file.replace('.','/');
-        if (translatable) {
-            if (locale == null) 
-                throw new RuntimeException("locale is null: you cannot request for translated material (yet)");
-            if (! locale.getLanguage().equals("en")) {
-                fileName = fileName + "." + locale.getLanguage();
-            }
-        }
-        fileName = fileName + (extension != null ? "." + extension : "");
-                               
-        int i = 0;
-        boolean found = false;
-        while (!found && i<directories.length) {
-        	if ((new File(directories[i] + fileName)).exists()) {
-        		found = true;
-        		fileName = directories[i] + fileName;
-        	} else {
-        		i++;
-        	}   	
-        }
-        
-        if (found) {
-        	//System.out.println("[DEBUG] I found "+fileName+" on the filesystem.");
-        	return new BufferedReader(new FileReader(fileName));
-        } else {
- 			// external HTML file of this exercise not found on file system. Give as resource, in case we are in a jar file
-			String resourceName = "/"+fileName;
-			resourceName = resourceName.replace('\\', '/'); /* just in case we're passed a windows path */
-
-			InputStream s = ExerciseTemplated.class.getResourceAsStream(resourceName);
-			if (s == null) {
-				// file not found, give up. No logs here, as it is ok that some entities do not exist in some languages 
-				throw new FileNotFoundException(file + "with extension " + extension + " could not be found.");
-			}
-
-			BufferedReader br = null;
-			try {
-				br = new BufferedReader(new InputStreamReader(s, "UTF-8"));
-			} catch (UnsupportedEncodingException e1) {
-				e1.printStackTrace();
-				System.err.println("File encoding of " + fileName + " is not supported on this platform (please report this bug)");
-				//return null;
-				throw e1;
-				//throw new FileNotFoundException(file + "with extension " + extension + " is encoded in an unsupported encoding.");
-			}
-			return br;
-		}
-	}	
-	
-	public static StringBuffer readContentAsText(String file, String extension, boolean translatable) throws FileNotFoundException, UnsupportedEncodingException {
-		BufferedReader br = FileUtils.newFileReader(file, extension, translatable);
-		String newLine = System.getProperty("line.separator");
-		
-		StringBuffer sb = new StringBuffer();
-		try {
-			String s;
-			s = br.readLine();
-			while (s != null) {
-				sb.append(s);
-				sb.append(newLine);
-				s = br.readLine();
-			}
-			
-		} catch (IOException e) {
-			e.printStackTrace();			
-		} finally {
-			try {
-				br.close();
-			} catch (IOException e) {
-				e.printStackTrace();
-			}
-		}
-		return sb;
-	}
-}
diff --git a/src/jlm/core/model/Game.java b/src/jlm/core/model/Game.java
index ba5a7c9..8615cb8 100644
--- a/src/jlm/core/model/Game.java
+++ b/src/jlm/core/model/Game.java
@@ -37,10 +37,14 @@ import jlm.core.model.session.ISessionKit;
 import jlm.core.model.session.SessionDB;
 import jlm.core.model.session.ZipSessionKit;
 import jlm.core.model.tracking.HeartBeatSpy;
+import jlm.core.model.tracking.IdenticaSpy;
 import jlm.core.model.tracking.LocalFileSpy;
 import jlm.core.model.tracking.ProgressSpyListener;
+import jlm.core.model.tracking.ServerSpyAppEngine;
+import jlm.core.model.tracking.TwitterSpy;
 import jlm.core.ui.MainFrame;
 import jlm.core.ui.ResourcesCache;
+import jlm.core.utils.FileUtils;
 import jlm.universe.Entity;
 import jlm.universe.IWorldView;
 import jlm.universe.World;
@@ -83,10 +87,22 @@ public class Game implements IWorldView {
 	public static final ProgrammingLanguage RUBY =       new ProgrammingLanguage("Ruby","rb",ResourcesCache.getIcon("img/lang_ruby.png"));
 	public static final ProgrammingLanguage LIGHTBOT =   new ProgrammingLanguage("lightbot","ignored",ResourcesCache.getIcon("img/lightbot_light.png"));
 	public static final ProgrammingLanguage[] programmingLanguages = new ProgrammingLanguage[] {
-		JAVA, JAVASCRIPT, PYTHON, RUBY, LIGHTBOT
-	};
+		JAVA, PYTHON, RUBY, LIGHTBOT // TODO: re-add JAVASCRIPT to this list once it works at least a bit
+	}; 
 	private ProgrammingLanguage programmingLanguage = JAVA;
 
+	/* TODO: document these values elsewhere */
+	public static final String PROP_OUTPUT_CAPTURE = "output.capture"; // Whether to redirect stdout and stderr to the graphical console. Defaults to true
+	public static final String PROP_ANSWER_CACHE = "answers.cache"; // Whether to use the cache of answers worlds on disk, defaults to true. 
+	                                                                // Turning to false will slow down the startup process, but avoid out of date files
+	
+	public static final String PROP_PROGRESS_TWITTER = "jlm.progress.twitter";     //  
+	public static final String PROP_PROGRESS_IDENTICA = "jlm.progress.identica";   // Whether the progresses should be posted to identica (default: true)
+	public static final String PROP_PROGRESS_APPENGINE = "jlm.progress.appengine"; // Whether the progresses should be posted to the appengine (default: false)
+	public static final String PROP_APPENGINE_URL = "jlm.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 PROP_PROGRAMING_LANGUAGE = "jlm.programingLanguage";
+
 	private List<GameListener> listeners = new ArrayList<GameListener>();
 	private World selectedWorld;
 	private World answerOfSelectedWorld;
@@ -115,21 +131,22 @@ public class Game implements IWorldView {
 			ongoingInitialization = true;
 			Game.instance = new Game();
 			ongoingInitialization = false;
+			Game.instance.loadSession();
 		}
 		return Game.instance;
 	}
 
 	private Game() {
-		Game.loadProperties();
-		loadSession();
-
-		// set default programming language according to jlm properties
-		// may crash if one exercise do not support the default language
-		String defaultProgrammingLanguage = Game.getProperty("jlm.default.programminglanguage","Java");
-		if (!defaultProgrammingLanguage.equalsIgnoreCase(Game.JAVA.getLang())) 
-			System.err.println("Warning, the default programming language is not 'Java' but '"+defaultProgrammingLanguage+"'.\n"+
-					"   This language will be used to setup the worlds, possibly leading to severe issues for the exercises that don't expect it.\n"+
-					"   You can change this variable either in $HOME/.jlm/jlm.properties or resource/jlm.configuration.properties");
+		i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",FileUtils.getLocale(), I18nFactory.FALLBACK);
+		loadProperties();
+
+		String defaultProgrammingLanguage = Game.getProperty(PROP_PROGRAMING_LANGUAGE,"Java",true);
+		if (!defaultProgrammingLanguage.equalsIgnoreCase(Game.JAVA.getLang()) &&
+			!defaultProgrammingLanguage.equalsIgnoreCase(Game.PYTHON.getLang())) 
+			System.err.println(i18n.tr("Warning, the default programming language is neither ''Java'' nor ''python'' but {0}.\n"+
+					"   This language will be used to setup the worlds, possibly leading to severe issues for the exercises that don''t expect it.\n" +
+					"   It is safer to change the current language, and restart JLM before proceeding.\n"+
+					"   Alternatively, the property {1} can be changed in your configuration file ($HOME/.jlm/jlm.properties",defaultProgrammingLanguage,PROP_PROGRAMING_LANGUAGE));
 		for (ProgrammingLanguage pl : Game.getProgrammingLanguages()) {
 			if (pl.getLang().equals(defaultProgrammingLanguage)) {
 				setProgramingLanguage(pl);
@@ -138,15 +155,23 @@ public class Game implements IWorldView {
 		}
 
 		addProgressSpyListener(new LocalFileSpy(SAVE_DIR));
-		System.err.println("Student progression listeners are disabled in this version."); // FIXME: use property files to disable it
-		return;
-		/* 
-		addProgressSpyListener(new IdenticaSpy());
-		addProgressSpyListener(new TwitterSpy());
-        addProgressSpyListener(new ServerSpyAppEngine());
+		
+		if (getProperty(PROP_PROGRESS_IDENTICA, "true",true).equalsIgnoreCase("true")){
+			System.err.println(i18n.tr("Your progress will be posted to http://identi.ca/jlmlovers This can be turned off through the property {0}",Game.PROP_PROGRESS_IDENTICA));
+			addProgressSpyListener(new IdenticaSpy());
+		} else {
+			System.err.println(i18n.tr("Your progress will NOT be posted to identica, as requested by the property {0}",Game.PROP_PROGRESS_IDENTICA));			
+		}
+		if (getProperty(PROP_PROGRESS_TWITTER, "true",true).equalsIgnoreCase("true")) {
+			System.err.println(i18n.tr("Your progress will be posted to https://twitter.com/jlmlovers This can be turned off through the property {0}",Game.PROP_PROGRESS_TWITTER));
+			addProgressSpyListener(new TwitterSpy());
+		} else {
+			System.err.println(i18n.tr("Your progress will NOT be posted to twitter, as requested by the property {0}",Game.PROP_PROGRESS_TWITTER));			
+		}
+		if (getProperty(PROP_PROGRESS_APPENGINE, "false",true).equalsIgnoreCase("true"))
+			addProgressSpyListener(new ServerSpyAppEngine());
 
         currentCourse = new CourseAppEngine();
-        */
 	}
 	
 	
@@ -154,7 +179,7 @@ public class Game implements IWorldView {
 	 * Load the chooser, stored in jlm.core.ui.chooser
 	 */
 	public void loadChooser() {
-		Game.instance.switchLesson(lessonChooser);
+		Game.instance.switchLesson(lessonChooser,false);
 	}
 	
 	
@@ -166,11 +191,15 @@ public class Game implements IWorldView {
 	 * @param lessonName package name of the lesson to load 
 	 */
 	
-	public Lesson switchLesson(String lessonName) {
-		statusArgAdd("Load lesson " + lessonName);
+	public Lesson switchLesson(String lessonName, boolean failOnError) {
+		if (stepModeEnabled())
+			disableStepMode();
 		
+		this.setState(GameState.LOADING);
 		// Try caching the lesson to avoid the possibly long loading time during which we compute the solution of each exercise  
 		Lesson lesson = lessons.get(lessonName);
+		statusArgAdd(lessonName);
+		
 		if (lesson == null) { // we have to load it 
 			try {
 				// This is where we assume here that each lesson contains a Main object, instantiating the Lesson class.
@@ -184,8 +213,10 @@ public class Game implements IWorldView {
 			} catch (IllegalAccessException e) {
 				e.printStackTrace();
 			} catch (ClassNotFoundException e) {
-				System.err.println("Cannot switch to lesson "+lessonName+": class Main not found.");
-				statusArgRemove("Load lesson "+lessonName);				
+				if (failOnError)
+					throw new RuntimeException(Game.i18n.tr("Cannot switch to lesson {0}: class Main not found.",lessonName));
+				System.err.println(Game.i18n.tr("Cannot switch to lesson {0}: class Main not found.",lessonName));
+				statusArgRemove(Game.i18n.tr("Load lesson {0}",lessonName));				
 				return getCurrentLesson();
 			}
 		}
@@ -199,7 +230,9 @@ public class Game implements IWorldView {
 			e.printStackTrace();
 		}
 		setCurrentLesson(lesson);
-		statusArgRemove("Load lesson "+lessonName);
+		
+		this.setState(GameState.LOADING_DONE);
+
 		return lesson;
 	}
 	private Set<String> usedJARs = new HashSet<String>(); // cache used in loadLessonFromJAR()
@@ -256,7 +289,7 @@ public class Game implements IWorldView {
 			throw new LessonLoadingException("Invalid lesson file (Attribute 'LessonPackage' not found in Manifest): "+jar.getName());
 		
 		// We are ready to launch this lesson
-		Game.getInstance().switchLesson("lessons." + lessonPackage);
+		Game.getInstance().switchLesson("lessons." + lessonPackage,false);
     }//end method
 
 	
@@ -361,7 +394,7 @@ public class Game implements IWorldView {
 			}
 			fireSelectedWorldHasChanged(world);
 		} else {
-			throw new RuntimeException("The lecture "+lect+" has no world that I can select");
+			throw new RuntimeException(Game.i18n.tr("The lecture {0} has no world that I can select",lect));
 		}
 	}
 
@@ -386,6 +419,9 @@ public class Game implements IWorldView {
 		runner.start();
 	}
 	public void stopExerciseExecution() {
+		if (stepModeEnabled()) 
+			disableStepMode();
+
 		if (runner != null)
 			runner.stopAll();
 		
@@ -444,7 +480,7 @@ public class Game implements IWorldView {
 
 	public void setOutputWriter(LogWriter writer) {
 		this.outputWriter = writer;
-		if (!getProperty("output.capture", "false").equals("true")) {
+		if (!getProperty(PROP_OUTPUT_CAPTURE, "false",true).equals("true")) {
 			Logger l = new Logger(outputWriter);
 			System.setOut(l);
 			System.setErr(l);
@@ -482,7 +518,7 @@ public class Game implements IWorldView {
 			for (Lecture lect : l.exercises())
 				if (lect instanceof Exercise)
 					for (ProgrammingLanguage lang:((Exercise) lect).getProgLanguages()) 
-						Game.getInstance().studentWork.setPassed(lect.getId(), lang, false);
+						Game.getInstance().studentWork.setPassed(lect, lang, false);
 
 		fireCurrentExerciseChanged(currentLesson.getCurrentExercise());
 	}
@@ -550,7 +586,7 @@ public class Game implements IWorldView {
 		}
 	}
 
-	public static void storeProperties() throws UserAbortException {
+	public static void storeProperties() {
 		Game.localGamePropertiesLoadedFile = new File(SAVE_DIR + File.separator + Game.LOCAL_PROPERTIES_FILENAME);
 		FileOutputStream fo;
 		try {
@@ -562,16 +598,26 @@ public class Game implements IWorldView {
 			e.printStackTrace();
 		}
 	}
+	public static void setProperty(String key, String value) {
+		Game.localGameProperties.setProperty(key, value);
+	}
 
 	public static String getProperty(String key) {
-		return Game.getProperty(key, "");
+		return Game.getProperty(key, "", false);
 	}
 
-	public static String getProperty(String key, String defaultValue) {
+	/** 
+	 * Gets the value from either the local properties set (in ~/.jlm) or the global one (in the jar file).
+	 * If the value is not defined in either of them, use the default value. If so and if the save parameter is true, this is saved back to the local properties file. 
+	 */
+	public static String getProperty(String key, String defaultValue, boolean save) {
 		if (Game.localGameProperties.containsKey(key)) {
 			return Game.localGameProperties.getProperty(key);
 		} else {
-			return Game.defaultGameProperties.getProperty(key, defaultValue);
+			String res = Game.defaultGameProperties.getProperty(key, defaultValue);
+			if (save)
+				setProperty(key, res);
+			return res;
 		}
 	}
 
@@ -590,6 +636,9 @@ public class Game implements IWorldView {
 	}
 
     protected void fireCurrentExerciseChanged(Lecture lect) {
+		if (stepModeEnabled())
+			disableStepMode();
+
         for (GameListener v : this.listeners) {
             v.currentExerciseHasChanged(lect);
         }
@@ -689,18 +738,19 @@ public class Game implements IWorldView {
 		}
 	}
 	private void statusChanged() {
-		String str = stateTxt;
+		StringBuffer sb = new StringBuffer(stateTxt);
 		boolean first = true;
 		for (String s:statusArgs) {
 			if (first)
 				first = false;
 			else
-				str += ", ";
-			str+= s;
-		}
-		for (StatusStateListener l : this.statusStateListeners) {
-			l.stateChanged(str);
+				sb.append(", ");
+			sb.append(s);
 		}
+		
+		String msg = first ? "" : sb.toString(); // remove everything if no argument at all 
+		for (StatusStateListener l : this.statusStateListeners) 
+			l.stateChanged(msg);
 	}
 	public void setLocale(Locale lang) {
 		FileUtils.setLocale(lang);
@@ -739,6 +789,8 @@ public class Game implements IWorldView {
 			//System.out.println("Switch programming language to "+newLanguage);
 			this.programmingLanguage = newLanguage;
 			fireProgLangChange(newLanguage);
+			// TODO: do that only if the selected language is stable enough as this language will be used to compute all answers at the next startup
+			setProperty(PROP_PROGRAMING_LANGUAGE, newLanguage.lang);
 			return;
 		}
 		throw new RuntimeException("Ignoring request to switch the programming language to the unknown "+newLanguage);
@@ -792,8 +844,8 @@ public class Game implements IWorldView {
 			System.out.println("Saving location: "+SAVE_DIR.getAbsolutePath());
 			System.out.println("Lesson: "+(l==null?"None loaded yet":l.getName()));
 			System.out.println("Exercise: "+(l==null?"None loaded yet":l.getCurrentExercise().getName()));
-			System.out.println("JLM version: "+Game.getProperty("jlm.major.version","internal")+" ("+Game.getProperty("jlm.major.version","internal")+"."+Game.getProperty("jlm.minor.version","")+")");
-			System.out.println("Java version: "+System.getProperty("java.version")+" (VM version: "+ System.getProperty("java.vm.version")+")");
+			System.out.println("JLM version: "+Game.getProperty("jlm.major.version","internal",false)+" ("+Game.getProperty("jlm.major.version","internal",false)+"."+Game.getProperty("jlm.minor.version","",false)+")");
+			System.out.println("Java version: "+System.getProperty("java.version")+" (VM: "+ System.getProperty("java.vm.name")+" "+ System.getProperty("java.vm.version")+")");
 			System.out.println("System: " +System.getProperty("os.name")+" (version: "+System.getProperty("os.version")+"; arch: "+ System.getProperty("os.arch")+")");
 		}
 	}
@@ -865,24 +917,24 @@ public class Game implements IWorldView {
 						if (res.canWrite()) {
 							return res;
 						} else {
-							System.out.println(res.getAbsolutePath()+" is not writable");
+							System.out.println(i18n.tr("{0} is not writable",res.getAbsolutePath()));
 							continue;
 						}
 					} else {
-						System.out.println(res.getAbsolutePath()+" is not a directory");
+						System.out.println(i18n.tr("{0} is not a directory",res.getAbsolutePath()));
 						continue;
 					}
 				}
 				if (res.mkdir())
 					return res;
 				else {
-					System.out.println("Cannot create "+res.getAbsolutePath());
+					System.out.println(i18n.tr("Cannot create {0}",res.getAbsolutePath()));
 				}
 			} catch (SecurityException e) {
 				e.getLocalizedMessage();
 			}
 		}
-		throw new RuntimeException("Impossible to find a path for JLM datas. Tested "+sb.toString());
+		throw new RuntimeException(i18n.tr("Impossible to find a path for JLM datas. Tested {0}",sb.toString()));
 	}
 	public static String getSavingLocation() {
 		return SAVE_DIR.getPath();
diff --git a/src/jlm/core/model/HelpAppEngine.java b/src/jlm/core/model/HelpAppEngine.java
index 0054f55..746df4f 100644
--- a/src/jlm/core/model/HelpAppEngine.java
+++ b/src/jlm/core/model/HelpAppEngine.java
@@ -18,10 +18,10 @@ public class HelpAppEngine extends HelpServer {
     private static URL helpServer;
 
     public HelpAppEngine() {
-    	String url = Game.getProperty("jlm.appengine.url");
+    	String url = Game.getProperty(Game.PROP_APPENGINE_URL);
     	if (! url.equals("")) { // no configuration were provided
     		try {
-    			helpServer = new URL(Game.getProperty("jlm.appengine.url") + "/student");
+    			helpServer = new URL(Game.getProperty(Game.PROP_APPENGINE_URL) + "/student");
     		} catch (MalformedURLException e) {
     			e.printStackTrace();
     		}
diff --git a/src/jlm/core/model/LessonRunner.java b/src/jlm/core/model/LessonRunner.java
index c4cb242..76b3b80 100644
--- a/src/jlm/core/model/LessonRunner.java
+++ b/src/jlm/core/model/LessonRunner.java
@@ -13,6 +13,7 @@ import jlm.core.model.lesson.Exercise;
 import jlm.core.model.lesson.Lecture;
 import jlm.core.ui.ExerciseFailedDialog;
 import jlm.core.ui.ResourcesCache;
+import jlm.core.utils.FileUtils;
 
 import org.xnap.commons.i18n.I18n;
 import org.xnap.commons.i18n.I18nFactory;
@@ -80,22 +81,40 @@ public class LessonRunner extends Thread {
 		
 		if (   exo.lastResult.totalTests > 0 
 			&& exo.lastResult.totalTests == exo.lastResult.passedTests) {
-			Game.getInstance().studentWork.setPassed(exo.getId(), null, true);
+			Game.getInstance().studentWork.setPassed(exo, null, true);
 			
 			Vector<Lecture> nextExercises =  exo.getDependingLectures();	
 			if ( nextExercises.size() == 0) {
-				JOptionPane.showMessageDialog(null, 
-						i18n.tr("Congratulations, you passed this exercise.\n {0} tests passed.\n",
-								exo.lastResult.passedTests) + exo.lastResult.details, 
-						i18n.tr("Exercice passed \\o/"), 
-						JOptionPane.PLAIN_MESSAGE, ResourcesCache.getIcon("img/trophy.png"));
+				if (exo.lastResult.passedTests > 1) {
+					JOptionPane.showMessageDialog(null, 
+							i18n.tr("Congratulations, you passed this exercise.\n{0} tests passed.",
+									exo.lastResult.passedTests) + exo.lastResult.details, 
+									i18n.tr("Exercice passed \\o/"), 
+									JOptionPane.PLAIN_MESSAGE, ResourcesCache.getIcon("img/trophy.png"));
+				} else {
+					JOptionPane.showMessageDialog(null, 
+							i18n.tr("Congratulations, you passed this exercise.",
+									exo.lastResult.passedTests) + exo.lastResult.details, 
+									i18n.tr("Exercice passed \\o/"), 
+									JOptionPane.PLAIN_MESSAGE, ResourcesCache.getIcon("img/trophy.png"));
+				}
 			} else {
-				
-				Lecture selectedValue = (Lecture) JOptionPane.showInputDialog(null, 
-						i18n.tr("Congratulations, you passed this test. Which exercise will you do now?\n"), 
-						i18n.tr("Exercice passed \\o/"),
-						JOptionPane.PLAIN_MESSAGE, ResourcesCache.getIcon("img/trophy.png"),
-						nextExercises.toArray(), nextExercises.get(0));
+				Lecture selectedValue;
+				if (exo.lastResult.passedTests > 1) {
+
+					selectedValue = (Lecture) JOptionPane.showInputDialog(null, 
+							i18n.tr("Congratulations, you passed this exercise.\n({0} tests passed)\nWhich exercise will you do now?"), 
+							i18n.tr("Exercice passed \\o/"),
+							JOptionPane.PLAIN_MESSAGE, ResourcesCache.getIcon("img/trophy.png"),
+							nextExercises.toArray(), nextExercises.get(0));
+				} else {
+					selectedValue = (Lecture) JOptionPane.showInputDialog(null, 
+							i18n.tr("Congratulations, you passed this exercise.\nWhich exercise will you do now?"), 
+							i18n.tr("Exercice passed \\o/"),
+							JOptionPane.PLAIN_MESSAGE, ResourcesCache.getIcon("img/trophy.png"),
+							nextExercises.toArray(), nextExercises.get(0));
+					
+				}
 				if (selectedValue != null) 
 					Game.getInstance().setCurrentExercise(selectedValue);
 			}
diff --git a/src/jlm/core/model/ProgrammingLanguage.java b/src/jlm/core/model/ProgrammingLanguage.java
index a6214af..b1d969e 100644
--- a/src/jlm/core/model/ProgrammingLanguage.java
+++ b/src/jlm/core/model/ProgrammingLanguage.java
@@ -1,12 +1,12 @@
 package jlm.core.model;
 
-import javax.swing.Icon;
+import javax.swing.ImageIcon;
 
 public class ProgrammingLanguage implements Comparable<ProgrammingLanguage> {
 	String lang;
 	String ext;
-	Icon icon;
-	public ProgrammingLanguage(String l, String ext, Icon i) {
+	ImageIcon icon;
+	public ProgrammingLanguage(String l, String ext, ImageIcon i) {
 		lang = l;
 		this.ext = ext;
 		this.icon = i;
@@ -41,7 +41,7 @@ public class ProgrammingLanguage implements Comparable<ProgrammingLanguage> {
 			return res;
 		return ext.compareTo(o.ext);
 	}
-	public Icon getIcon() {
+	public ImageIcon getIcon() {
 		return icon;
 	}
 }
diff --git a/src/jlm/core/model/lesson/ExerciseTemplated.java b/src/jlm/core/model/lesson/ExerciseTemplated.java
index 066f2ac..001170f 100644
--- a/src/jlm/core/model/lesson/ExerciseTemplated.java
+++ b/src/jlm/core/model/lesson/ExerciseTemplated.java
@@ -1,5 +1,6 @@
 package jlm.core.model.lesson;
 
+import java.io.File;
 import java.io.IOException;
 import java.util.HashMap;
 import java.util.List;
@@ -8,9 +9,9 @@ import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import jlm.core.model.FileUtils;
 import jlm.core.model.Game;
 import jlm.core.model.ProgrammingLanguage;
+import jlm.core.utils.FileUtils;
 import jlm.universe.BrokenWorldFileException;
 import jlm.universe.Entity;
 import jlm.universe.World;
@@ -20,27 +21,13 @@ import jlm.universe.World;
 public abstract class ExerciseTemplated extends Exercise {
 
 	protected String tabName = getClass().getSimpleName(); /** Name of the tab in editor -- must be a valid java identifier */
+	protected String worldFileName = getClass().getCanonicalName(); /** Name of the save files */
 	protected String nameOfCorrectionEntity = getClass().getCanonicalName()+"Entity"; /** name of the entity class computing the answer. Usually no need to redefine this */
 
 	public ExerciseTemplated(Lesson lesson) {
 		super(lesson);
 	}
-
-	protected void loadMap(World intoWorld, String path) {
-		try {
-			intoWorld.readFromFile(path);
-		} catch (IOException ex) {
-			ex.printStackTrace();
-			throw new RuntimeException("Unable to load "+path+".map");	
-		} catch (BrokenWorldFileException e) {
-			throw new RuntimeException("File "+path+".map is broken",e);	
-		}
-	}
-
-	protected void loadMap(World intoWorld) {
-		loadMap(intoWorld, getClass().getCanonicalName());
-	}
-
+	
 	public void newSourceFromFile(ProgrammingLanguage lang, String name, String filename) throws NoSuchEntityException {
 		newSourceFromFile(lang, name, filename, "");
 	}
@@ -51,7 +38,7 @@ public abstract class ExerciseTemplated extends Exercise {
 		try {
 			sb = FileUtils.readContentAsText(filename, lang.getExt(), false);
 		} catch (IOException ex) {
-			throw new NoSuchEntityException("Source file "+filename+"."+lang.getExt()+" not found.");			
+			throw new NoSuchEntityException(Game.i18n.tr("Source file {0}.{1} not found.",filename,lang.getExt()));			
 		}
 
 
@@ -97,7 +84,10 @@ public abstract class ExerciseTemplated extends Exercise {
 				}
 				break;
 			case 1: /* template head */
-				if (line.contains("public class "))
+				if (line.contains("BEGIN TEMPLATE")) {
+					System.out.println(i18n.tr("{0}: BEGIN TEMPLATE within the template. Please fix your entity.",shownFilename));
+					state = 4;
+				} else if (line.contains("public class "))
 					templateHead.append(line.replaceAll("public class \\S*", "public class "+name)+"\n");
 				else if (line.contains("END TEMPLATE")) {
 					state = 4;
@@ -115,7 +105,7 @@ public abstract class ExerciseTemplated extends Exercise {
 				break;
 			case 2: /* solution */
 				if (line.contains("END TEMPLATE")) {
-					System.out.println(shownFilename+": BEGIN SOLUTION is closed with END TEMPLATE. Please fix your entity.");
+					System.out.println(i18n.tr("{0}: BEGIN SOLUTION is closed with END TEMPLATE. Please fix your entity.",shownFilename));
 					state = 4;
 				} else if (line.contains("END SOLUTION")) {
 					state = 3;  
@@ -129,11 +119,11 @@ public abstract class ExerciseTemplated extends Exercise {
 			case 3: /* template tail */
 				if (line.contains("END TEMPLATE")) {
 					if (!seenTemplate)
-						System.out.println(shownFilename+": END TEMPLATE with no matching BEGIN TEMPLATE. Please fix your entity.");
+						System.out.println(i18n.tr("{0}: END TEMPLATE with no matching BEGIN TEMPLATE. Please fix your entity.",shownFilename));
 						
 					state = 4;
 				} else if (line.contains("BEGIN SOLUTION")) {
-					throw new RuntimeException(shownFilename+": Begin solution in template tail. Change it to BEGIN HIDDEN");
+					throw new RuntimeException(i18n.tr("{0}: Begin solution in template tail. Change it to BEGIN HIDDEN",shownFilename));
 				} else if (line.contains("BEGIN SKEL")) {
 					savedState = state;
 					state = 6; 
@@ -160,9 +150,14 @@ public abstract class ExerciseTemplated extends Exercise {
 				}
 				break;
 			default: 	
-				throw new RuntimeException("Parser error in "+filename+". This is a parser bug (state="+state+"), please report.");	
+				throw new RuntimeException(i18n.tr("Parser error in file {0}. This is a parser bug (state={1}), please report.",filename,state));	
 			}
 		}
+		if (state == 3) {
+			if (seenTemplate)
+				System.out.println(i18n.tr("{0}: End of file unexpected after the solution but within the template. Please fix your entity.",shownFilename,state));
+		} else if (state != 4)
+			System.out.println(i18n.tr("{0}: End of file unexpected (state: {1}). Did you forget to close your template or solution? Please fix your entity.",shownFilename,state));
 
 		String initialContent = templateHead.toString() + templateTail.toString();
 		String skelContent;
@@ -176,10 +171,42 @@ public abstract class ExerciseTemplated extends Exercise {
 		}
 
 		String template = (headContent+"$body"+tail);
+		
+		/* Remove the unnecessary leading spaces from the initial content */
+		Pattern newLinePattern = Pattern.compile("\n",Pattern.MULTILINE);
+		if (lang != Game.PYTHON) {
+			initialContent = initialContent.replaceAll("\t","    ");
+			String[] ctn = newLinePattern.split(initialContent);
+			/* Compute the minimal amount of leading spaces on all lines */
+			int minAmountOfLeadingSpace = -1;
+			for (String line:ctn) {
+				if (line.equals(""))
+					continue;
+				int len = 0;
+				for (char c:line.toCharArray())
+					if (c == ' ') {
+						len ++;
+					} else { 
+						break;
+					} 
+				if (minAmountOfLeadingSpace == -1 || len<minAmountOfLeadingSpace)
+					minAmountOfLeadingSpace = len;
+			}
+			if (minAmountOfLeadingSpace > 0) {
+				/* Remove that amount of leading spaces on all lines, and rebuilds initialContent */
+				StringBuffer sbCtn = new StringBuffer();
+				for (String line : ctn) 
+					if (line.equals(""))
+						sbCtn.append("\n");
+					else 
+						sbCtn.append(line.substring(minAmountOfLeadingSpace)+"\n");
+				/* Rebuild the initial content */
+				initialContent = sbCtn.toString();
+			}
+		}
 
 		/* remove any \n from template to not desynchronize line numbers between compiler and editor */ 
 		if (lang != Game.PYTHON) {
-			Pattern newLinePattern = Pattern.compile("\n",Pattern.MULTILINE);
 			Matcher newLineMatcher = newLinePattern.matcher(template);
 			template = newLineMatcher.replaceAll(" ");
 		}
@@ -222,8 +249,6 @@ public abstract class ExerciseTemplated extends Exercise {
 		setupWorlds(ws);
 
 		for (ProgrammingLanguage lang: Game.getProgrammingLanguages()) {
-			if (Game.getInstance().isDebugEnabled())
-				System.err.println("Look for a templating entity in "+lang);
 			boolean foundThisLanguage = false;
 			String searchedName = null;
 			for (SourceFile sf : getSourceFilesList(lang)) {
@@ -250,8 +275,11 @@ public abstract class ExerciseTemplated extends Exercise {
 						System.out.println("Found suitable templating entity "+nameOfCorrectionEntity+" in "+lang);
 
 				} catch (NoSuchEntityException e) {
+					if (lang.equals(Game.PYTHON))
+						System.out.println("Cannnot find any suitable templating entity "+nameOfCorrectionEntity+" in "+lang+":\n  "+e);
+						
 					if (getProgLanguages().contains(lang)) 
-						throw new RuntimeException("Exercise "+getName()+" is said to be compatible with language "+lang+", but I fail to find an entity for this language",e);					
+						throw new RuntimeException("Exercise "+getName()+" is said to be compatible with language "+lang+", but I fail to find an entity for this language",e);
 					/* Ok, this language does not work for this exercise but didn't promise anything. I can deal with it */
 				}
 			} else {
@@ -259,14 +287,47 @@ public abstract class ExerciseTemplated extends Exercise {
 			}
 		}
 		if (!foundALanguage) {
-			throw new RuntimeException("Cannot find an entity for this exercise. You should fix your paths and such");
+			throw new RuntimeException("Cannot find an entity for exercise "+getName()+". You should fix your paths and such");
 		}
 		computeAnswer();
 	}
+	
 	protected void computeAnswer() {
 		Thread t = new Thread() {
 			@Override
 			public void run() {
+				Game.getInstance().statusArgAdd(getClass().getSimpleName());
+				boolean allFound = true;
+				if (answerWorld.get(0).haveIO()) {
+					if (Game.getProperty(Game.PROP_ANSWER_CACHE, "true",true).equalsIgnoreCase("true")) {
+						Vector<World> newAnswer = new Vector<World>();
+						int rank = 0;
+						for (World aw:answerWorld) {
+							String name = worldFileName+"-answer"+(rank++);
+							try {
+								World nw = aw.readFromFile(name);
+								newAnswer.add(nw);
+							} catch (BrokenWorldFileException bwfe) {
+								System.err.println(i18n.tr("World {0} is broken ({1}). Recompute all answer worlds.",name,bwfe.getLocalizedMessage()) );
+								allFound = false;
+								break;
+							} catch (IOException ioe) {
+								System.err.println(i18n.tr("IO exception while reading world {0} ({1}). Recompute all answer worlds.",name,ioe.getLocalizedMessage()));
+								allFound = false;
+								break;
+							}
+						}
+						if (allFound) {
+							answerWorld = newAnswer;
+							Game.getInstance().statusArgRemove(getClass().getSimpleName());
+							return;
+						}
+					} else {
+						System.out.println(i18n.tr("Recompute the answer of {0} despite the cache file, as requested by the property {1}",worldFileName,Game.PROP_ANSWER_CACHE));
+					}
+				}
+				
+				/* I/O didn't work. We have to load the files manually */
 				ExecutionProgress progress = new ExecutionProgress();
 				
 				mutateCorrection(WorldKind.ANSWER);
@@ -274,6 +335,26 @@ public abstract class ExerciseTemplated extends Exercise {
 				for (World aw : answerWorld) 
 					for (Entity ent: aw.getEntities()) 
 						ent.runIt(progress);
+				
+				/* Try to write all files for next time */
+				if (answerWorld.get(0).haveIO()) {
+					int rank = 0;
+					for (World aw:answerWorld) {
+						String name = "src/"+worldFileName+"-answer"+(rank++);
+						name = name.replaceAll("\\.", "/") + ".map";
+						if (new File(name).getParentFile().canWrite()) {
+							try {
+								aw.writeToFile(new File(name));
+							} catch (Exception e) {
+								System.err.println(i18n.tr("Error while writing answer world of {0}:",name));
+								e.printStackTrace();
+							}
+						} else {
+							System.err.println(i18n.tr("Cannot write answer world of {0}. Please check the permissions.",name));
+						}
+					}
+				}
+				Game.getInstance().statusArgRemove(getClass().getSimpleName());
 			}
 		};
 		t.start();
@@ -322,7 +403,6 @@ public abstract class ExerciseTemplated extends Exercise {
 			mutateEntities(worlds,nameOfCorrectionEntity);
 		} else {
 			for (World aw : worlds) {
-				aw.setDelay(0);
 				for (Entity ent: aw.getEntities()) {
 					StringBuffer sb = null;
 					try {
diff --git a/src/jlm/core/model/lesson/Lecture.java b/src/jlm/core/model/lesson/Lecture.java
index e8f12bd..8b9f220 100644
--- a/src/jlm/core/model/lesson/Lecture.java
+++ b/src/jlm/core/model/lesson/Lecture.java
@@ -12,7 +12,8 @@ import javax.swing.tree.DefaultMutableTreeNode;
 
 import jlm.core.model.Game;
 import jlm.core.model.ProgrammingLanguage;
-import jlm.core.model.FileUtils;
+import jlm.core.ui.JlmHtmlEditorKit;
+import jlm.core.utils.FileUtils;
 
 /** Represents an element of the pedagogic sequence, be it a lecture or 
  * an exercise. A better name would be useful, but I feel limited in 
@@ -41,7 +42,6 @@ public abstract class Lecture {
 			"</head>\n";
 	private String name = "<no name>";                     /** indicate whether this Exercise was successfully done or not */
 	private String mission = "";                        /** The text to display to present the lesson */
-	private static Map<ProgrammingLanguage,String> css; /** The CSS to use for a given language */
 	private Lesson lesson;
 	
 	protected Map<String, String> tips = new HashMap<String, String>();
@@ -66,45 +66,9 @@ public abstract class Lecture {
 		return this.lesson;
 	}
 
-	protected static String getCSS(ProgrammingLanguage lang) {
-		if (css==null) 
-			 css = new HashMap<ProgrammingLanguage, String>();
-		String res = css.get(lang);
-		if (res == null) {
-			res =		"  <style type=\"text/css\">\n"+
-				        "    body { font-family: tahoma, \"Times New Roman\", serif; font-size:10px; margin:10px; }\n"+
-				        "    code { background:#EEEEEE; }\n"+
-				        "    pre { background: #EEEEEE;\n"+
-				        "          margin: 5px;\n"+
-				        "          padding: 6px;\n"+
-				        "          border: 1px inset;\n"+
-				        "          width: 640px;\n"+
-				        "          overflow: auto;\n"+
-				        "          text-align: left;\n"+
-				        "          font-family: \"Courrier New\", \"Courrier\", monospace; }\n"+
-				        "   .comment { background:#EEEEEE;\n"+
-				        "              font-family: \"Times New Roman\", serif;\n"+
-				        "              color:#00AA00;\n"+
-				        "              font-style: italic; }\n";
-			for (ProgrammingLanguage l2 : Game.programmingLanguages) {
-				if (!lang.equals(l2)) {
-					//FIXME: red color for HTML content that are specific to a particular programming language
-					res += "."+l2.getLang()+" {display: none; color:#FF0000;}\n";
-					res += "."+l2.getLang().toLowerCase()+" {display: none; color:#FF0000;}\n";
-				} else {
-					/* DEBUG ONLY, to see the specific elements*/ 
-					//theCSS += "."+l2.getLang()+" {visibility: visible; color:#00AA00;}\n";
-					//theCSS += "."+l2.getLang().toLowerCase()+" {visibility: visible; color:#00AA00;}\n";
-				}
-			}
-			res +=  "  </style>\n";
-			css.put(lang, res);
-		}
-		return res;
-	}
 
 	public String getMission(ProgrammingLanguage lang) {
-		String res = "<html><head>"+getCSS(lang)+"</head><body>"+this.mission+"</body></html>";
+		String res = "<html><head>"+JlmHtmlEditorKit.getCSS(lang)+"</head><body>"+this.mission+"</body></html>";
 		return res;
 	}
 	public void setMission(String mission) {
@@ -121,7 +85,7 @@ public abstract class Lecture {
 		try {
 			sb = FileUtils.readContentAsText(filename, "html",true);
 		} catch (IOException ex) {
-			setMission("File "+filename+" not found.");
+			setMission(Game.i18n.tr("File {0}.html not found.",filename));
 			return;			
 		}
 		String str = sb.toString();
@@ -130,7 +94,7 @@ public abstract class Lecture {
 		Pattern p =  Pattern.compile("<h[123]>([^<]*)<");
 		Matcher m = p.matcher(str);
 		if (!m.find())
-			System.out.println("Cannot find the name of mission in "+filename+".html");
+			System.out.println(Game.i18n.tr("Cannot find the name of mission in {0}.html",filename));
 		setName( m.group(1) );
 	
 		/* prepare the tips, if any */
@@ -154,11 +118,14 @@ public abstract class Lecture {
 	}
 
 	protected Vector<Lecture> dependingLectures = new Vector<Lecture>(); /* To display the graph */
-	public DefaultMutableTreeNode makeNode() {
-		DefaultMutableTreeNode res = new DefaultMutableTreeNode(this);
-		for (Lecture l : dependingLectures)
-			res.add(l.makeNode());
-		return res;
+	private DefaultMutableTreeNode myNode;
+	public DefaultMutableTreeNode getNode() {
+		if (myNode == null) {
+			myNode = new DefaultMutableTreeNode(this);
+			for (Lecture l : dependingLectures)
+				myNode.add(l.getNode());
+		}
+		return myNode;
 	}
 	public Vector<Lecture> getDependingLectures() {
 		return dependingLectures;
diff --git a/src/jlm/core/model/lesson/Lesson.java b/src/jlm/core/model/lesson/Lesson.java
index baf0f0a..8a83833 100644
--- a/src/jlm/core/model/lesson/Lesson.java
+++ b/src/jlm/core/model/lesson/Lesson.java
@@ -8,7 +8,10 @@ import java.util.Vector;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
-import jlm.core.model.FileUtils;
+import jlm.core.model.Game;
+import jlm.core.model.ProgrammingLanguage;
+import jlm.core.utils.FileUtils;
+import jlm.universe.BrokenWorldFileException;
 
 
 public abstract class Lesson {
@@ -32,17 +35,34 @@ public abstract class Lesson {
 	+ "              color:#00AA00;\n" + "              font-style: italic; }\n" + "  </style>\n" + "</head>\n";
 
 	public Lesson() {
-		loadExercises(); /* FIXME: remove this line when session savers can deal with laziness */
+		id = getClass().getCanonicalName().replaceAll(".Main$","");
+		id = id.replaceAll("^lessons.", "");
 		
-		id = getClass().getCanonicalName();
-		Pattern namePattern = Pattern.compile(".Main$");
-		Matcher nameMatcher = namePattern.matcher(id);
-		id = nameMatcher.replaceAll("");
-
-		namePattern = Pattern.compile("^lessons.");
-		nameMatcher = namePattern.matcher(id);
-		id = nameMatcher.replaceAll("");
-
+		try {
+			loadExercises(); /* FIXME: remove this line when session savers can deal with laziness */
+		} catch (IOException e) {
+			System.err.println("Cannot load the exercises. This lesson is severely broken..");
+			e.printStackTrace();
+		} catch (BrokenWorldFileException e) {
+			System.err.println("Cannot load the exercises. This lesson is severely broken..");
+			e.printStackTrace();
+		} 
+		for (ProgrammingLanguage lang: Game.programmingLanguages) {
+			int possible = 0;
+			int passed = 0;
+			for (Lecture l: lectures) {
+				if (l instanceof Exercise) {
+					Exercise exo = (Exercise) l;
+					if (exo.getProgLanguages().contains(lang)) {
+						possible++;
+						if (Game.getInstance().studentWork.getPassed(l, lang))
+							passed++;
+					}
+				}
+			}
+			Game.getInstance().studentWork.setPassedExercises(id, lang, passed);
+			Game.getInstance().studentWork.setPossibleExercises(id, lang, possible);
+		}
 	}
 	public String getId() {
 		return id;
@@ -61,7 +81,7 @@ public abstract class Lesson {
 		try {
 			sb = FileUtils.readContentAsText(filename,"html",true);
 		} catch (IOException ex) {
-			about = "File "+filename+".html not found.";
+			about = Game.i18n.tr("File {0}.html not found.",filename);
 			name = filename;
 			return;
 		}
@@ -71,7 +91,7 @@ public abstract class Lesson {
 		Pattern p =  Pattern.compile("<h[123]>([^<]*)<");
 		Matcher m = p.matcher(str);
 		if (!m.find())
-			System.out.println("Cannot find the name of mission in "+filename+".html");
+			System.out.println(Game.i18n.tr("Cannot find the name of mission in {0}.html",filename));
 		name = m.group(1);
 		/* get the mission explanation */
 		about = "<html>"+LessonHeader+"<body>\n"+str+"</body>\n</html>\n";		
@@ -89,10 +109,6 @@ public abstract class Lesson {
 	}
 
 	Lecture rootExo, lastAdded;
-	@Deprecated
-	public Lecture getRootExo() {
-		return rootExo;
-	}
 	public Vector<Lecture> getRootLectures() {
 		return rootLectures;
 	}
@@ -124,11 +140,14 @@ public abstract class Lesson {
 		return this.currentExercise;
 	}
 
-	abstract protected void loadExercises();
+	abstract protected void loadExercises() throws IOException, BrokenWorldFileException;
 
 	public void setCurrentExercise(Lecture exo) {
 		this.currentExercise = exo;
 	}
+	public void setCurrentExercise(String exoName) {
+		this.currentExercise = getExercise(exoName);
+	}
 	
 	public int exerciseCount() {
 		return this.lectures.size();
@@ -140,15 +159,12 @@ public abstract class Lesson {
 	public Lecture getExercise(String name) {
 		String searchedName = getClass().getPackage().getName()+"."+name;
 		for (Lecture l: lectures) {
-			if (l.getClass().getCanonicalName().equals(searchedName))
+			if (l.getClass().getCanonicalName().equals(searchedName) ||
+					l.getClass().getCanonicalName().equals(name))
 				return l;
 		}
 		return null;
 	}
-	@Deprecated
-	public Lecture getExercise(int index) { // FIXME: killme
-		return this.lectures.get(index); 
-	}
 	public int getExerciseCount() {
 		return this.lectures.size();
 	}
diff --git a/src/jlm/core/model/lesson/SourceFile.java b/src/jlm/core/model/lesson/SourceFile.java
index 3b8b614..37ed427 100644
--- a/src/jlm/core/model/lesson/SourceFile.java
+++ b/src/jlm/core/model/lesson/SourceFile.java
@@ -66,7 +66,7 @@ public class SourceFile {
 						System.out.println("pattern key: "+pattern.getKey());
 						System.out.println("pattern value: "+pattern.getValue());
 						System.out.println("Exercise: "+Game.getInstance().getCurrentLesson().getCurrentExercise().getName());
-						System.out.println("JLM version: "+Game.getProperty("jlm.major.version","internal")+" ("+Game.getProperty("jlm.major.version","internal")+"."+Game.getProperty("jlm.minor.version","")+")");
+						System.out.println("JLM version: "+Game.getProperty("jlm.major.version","internal",false)+" ("+Game.getProperty("jlm.major.version","internal",false)+"."+Game.getProperty("jlm.minor.version","",false)+")");
 						System.out.println("Java version: "+System.getProperty("java.version")+" (VM version: "+ System.getProperty("java.vm.version")+")");
 						System.out.println("System: " +System.getProperty("os.name")+" (version: "+System.getProperty("os.version")+"; arch: "+ System.getProperty("os.arch")+")");
 					}
diff --git a/src/jlm/core/model/session/FileSessionKit.java b/src/jlm/core/model/session/FileSessionKit.java
index 4d87048..3e617b5 100644
--- a/src/jlm/core/model/session/FileSessionKit.java
+++ b/src/jlm/core/model/session/FileSessionKit.java
@@ -55,7 +55,7 @@ public class FileSessionKit /* FIXME implements ISessionKit  */ {
 						// create file DONE if exercise has been successfully passed
 						for (ProgrammingLanguage lang: exercise.getProgLanguages()) {
 							File exerciseFile = new File(exerciseDir, "DONE."+lang.getExt());
-							if (Game.getInstance().studentWork.getPassed(exercise.getId(), lang)) {
+							if (Game.getInstance().studentWork.getPassed(exercise, lang)) {
 								if (!exerciseFile.exists()) {
 									try {
 										exerciseFile.createNewFile();
@@ -127,7 +127,7 @@ public class FileSessionKit /* FIXME implements ISessionKit  */ {
 					for (ProgrammingLanguage lang:exercise.getProgLanguages()) {
 						File exerciseFile = new File(exerciseDir, "DONE"+lang.getExt());
 						if (exerciseFile.exists()) {
-							Game.getInstance().studentWork.setPassed(lecture.getId(), lang, true);
+							Game.getInstance().studentWork.setPassed(lecture, lang, true);
 						}
 						
 						for (int i = 0; i < exercise.getSourceFileCount(lang); i++) {
diff --git a/src/jlm/core/model/session/SessionDB.java b/src/jlm/core/model/session/SessionDB.java
index b72a511..7986ab0 100644
--- a/src/jlm/core/model/session/SessionDB.java
+++ b/src/jlm/core/model/session/SessionDB.java
@@ -2,24 +2,30 @@ package jlm.core.model.session;
 
 import java.util.HashMap;
 import java.util.Map;
+import java.util.Set;
 
 import jlm.core.model.Game;
 import jlm.core.model.ProgrammingLanguage;
+import jlm.core.model.lesson.Lecture;
 
 public class SessionDB {
 	private Map<String, Map<ProgrammingLanguage, Map<String, String>>> body = new HashMap<String, Map<ProgrammingLanguage,Map<String,String>>>(); 
 	private Map<String, Map<ProgrammingLanguage, Boolean>> passed = new HashMap<String, Map<ProgrammingLanguage,Boolean>>();
 	
-	public void setBody(String exo, ProgrammingLanguage lang, String sourceName, String _body) {
+	/* Per lesson summary */
+	private Map<String, Map<ProgrammingLanguage, Integer>> passedExercises = new HashMap<String, Map<ProgrammingLanguage,Integer>>();
+	private Map<String, Map<ProgrammingLanguage, Integer>> possibleExercises = new HashMap<String, Map<ProgrammingLanguage,Integer>>();
+	
+	public void setBody(Lecture exo, ProgrammingLanguage lang, String sourceName, String _body) {
 		if (exo == null)
-			exo = Game.getInstance().getCurrentLesson().getCurrentExercise().getId();
+			exo = Game.getInstance().getCurrentLesson().getCurrentExercise();
 		if (lang == null)
 			lang = Game.getProgrammingLanguage();
 
 		Map<ProgrammingLanguage, Map<String, String>> bodyE = body.get(exo);
 		if (bodyE == null) {
 			bodyE = new HashMap<ProgrammingLanguage,Map<String, String>>();
-			body.put(exo, bodyE);
+			body.put(exo.getId(), bodyE);
 		}
 		Map<String, String> bodyLEP = bodyE.get(lang);
 		if (bodyLEP == null) {
@@ -29,13 +35,13 @@ public class SessionDB {
 		
 		bodyLEP.put(sourceName, _body);
 	}
-	public String getBody(String exo, ProgrammingLanguage lang, String sourceName) {
+	public String getBody(Lecture exo, ProgrammingLanguage lang, String sourceName) {
 		if (exo == null)
-			exo = Game.getInstance().getCurrentLesson().getCurrentExercise().getId();
+			exo = Game.getInstance().getCurrentLesson().getCurrentExercise();
 		if (lang == null)
 			lang = Game.getProgrammingLanguage();
 
-		Map<ProgrammingLanguage, Map<String, String>> bodyE = body.get(exo);
+		Map<ProgrammingLanguage, Map<String, String>> bodyE = body.get(exo.getId());
 		if (bodyE == null) 
 			return null;
 		Map<String, String> bodyEP = bodyE.get(lang);
@@ -45,27 +51,33 @@ public class SessionDB {
 	}
 
 
-	public void setPassed(String exo, ProgrammingLanguage lang, boolean _passed) {
+	public void setPassed(Lecture exo, ProgrammingLanguage lang, boolean _passed) {
 		if (exo == null)
-			exo = Game.getInstance().getCurrentLesson().getCurrentExercise().getId();
+			exo = Game.getInstance().getCurrentLesson().getCurrentExercise();
 		if (lang == null)
 			lang = Game.getProgrammingLanguage();
 		
-		Map<ProgrammingLanguage, Boolean> passedE = passed.get(exo);
+		if (getPassed(exo, lang) == _passed)
+			return;
+		
+		setPassedExercises(exo.getLesson().getId(), lang, getPassedExercises(exo.getLesson().getId(), lang) + (_passed?1:-1));
+		
+		Map<ProgrammingLanguage, Boolean> passedE = passed.get(exo.getId());
 		if (passedE == null) {
 			passedE = new HashMap<ProgrammingLanguage, Boolean>();
-			passed.put(exo, passedE);
+			passed.put(exo.getId(), passedE);
 		}
-		passedE.put(lang,_passed);
+		passedE.put(lang,_passed);		
 	}
+	
 	/** If the exercise was never attempted (not present in DB), it returns false */
-	public boolean getPassed(String exo, ProgrammingLanguage lang) {
+	public boolean getPassed(Lecture exo, ProgrammingLanguage lang) {
 		if (exo == null)
-			exo = Game.getInstance().getCurrentLesson().getCurrentExercise().getId();
+			exo = Game.getInstance().getCurrentLesson().getCurrentExercise();
 		if (lang == null)
 			lang = Game.getProgrammingLanguage();
 
-		Map<ProgrammingLanguage, Boolean> passedE = passed.get(exo);
+		Map<ProgrammingLanguage, Boolean> passedE = passed.get(exo.getId());
 		if (passedE == null)
 			return false;
 		
@@ -74,4 +86,65 @@ public class SessionDB {
 			return false;
 		return res;
 	}
+	public Integer getPossibleExercises(String lesson, ProgrammingLanguage lang) {
+		if (lesson == null)
+			lesson = Game.getInstance().getCurrentLesson().getId();
+		if (lang == null)
+			lang = Game.getProgrammingLanguage();
+
+		Map<ProgrammingLanguage, Integer> passedL = possibleExercises.get(lesson);
+		if (passedL == null)
+			return 0;
+		
+		Integer res = passedL.get(lang);
+		if (res == null) 
+			return 0;
+		return res;
+	}
+	public void setPassedExercises(String lesson, ProgrammingLanguage lang, int val) {
+		if (lesson == null)
+			lesson = Game.getInstance().getCurrentLesson().getId();
+		if (lang == null)
+			lang = Game.getProgrammingLanguage();
+
+		Map<ProgrammingLanguage, Integer> passedL = passedExercises.get(lesson);
+		if (passedL == null) {
+			passedL = new HashMap<ProgrammingLanguage, Integer>();
+			passedExercises.put(lesson, passedL);
+		}
+		
+		passedL.put(lang, val);
+	}
+	public void setPossibleExercises(String lesson, ProgrammingLanguage lang, int val) {
+		if (lesson == null)
+			lesson = Game.getInstance().getCurrentLesson().getId();
+		if (lang == null)
+			lang = Game.getProgrammingLanguage();
+
+		Map<ProgrammingLanguage, Integer> possibleL = possibleExercises.get(lesson);
+		if (possibleL == null) {
+			possibleL = new HashMap<ProgrammingLanguage, Integer>();
+			possibleExercises.put(lesson, possibleL);
+		}
+		
+		possibleL.put(lang,val);
+	}
+	public Integer getPassedExercises(String lesson, ProgrammingLanguage lang) {
+		if (lesson == null)
+			lesson = Game.getInstance().getCurrentLesson().getId();
+		if (lang == null)
+			lang = Game.getProgrammingLanguage();
+
+		Map<ProgrammingLanguage, Integer> passedL = passedExercises.get(lesson);
+		if (passedL == null)
+			return 0;
+		
+		Integer res = passedL.get(lang);
+		if (res == null) 
+			return 0;
+		return res;
+	}
+	public Set<String> getLessonsNames() {
+		return possibleExercises.keySet();
+	}
 }
diff --git a/src/jlm/core/model/session/ZipSessionKit.java b/src/jlm/core/model/session/ZipSessionKit.java
index 146bad4..1dcb2b9 100644
--- a/src/jlm/core/model/session/ZipSessionKit.java
+++ b/src/jlm/core/model/session/ZipSessionKit.java
@@ -23,6 +23,10 @@ import jlm.core.model.lesson.Lesson;
 import jlm.core.model.lesson.SourceFile;
 import jlm.core.model.lesson.SourceFileRevertable;
 
+import org.json.simple.JSONObject;
+import org.json.simple.JSONValue;
+import org.json.simple.parser.ParseException;
+
 /**
  * Implementation of the {@link ISessionKit} saving the student data in a zip file.
  * 
@@ -40,16 +44,128 @@ public class ZipSessionKit implements ISessionKit {
 		return new File(path, "jlm-"+lesson.getId()+".zip");
 	}
 
+	@SuppressWarnings("unchecked")
 	@Override
 	public void storeAll(File path) throws UserAbortException {
-		for (Lesson lesson : this.game.getLessons())
+		/* First save the bodies */
+		for (Lesson lesson : this.game.getLessons()) 
 			storeLesson(path, lesson);
+			
+		/* Save the per lesson summaries */
+		JSONObject allLessons = new JSONObject();
+		for (String lessonName : this.game.studentWork.getLessonsNames()) {
+			JSONObject allLangs = new JSONObject();
+			for (ProgrammingLanguage lang: Game.getProgrammingLanguages()) {
+				int possible = Game.getInstance().studentWork.getPossibleExercises(lessonName, lang);
+				int passed = Game.getInstance().studentWork.getPassedExercises(lessonName, lang);
+
+				if (possible>0) {
+					JSONObject oneLang = new JSONObject();
+					oneLang.put("possible",possible);
+					oneLang.put("passed",passed);
+					allLangs.put(lang.getLang(),oneLang);
+				}
+			}
+			if (allLangs.size()>0) 
+				allLessons.put(lessonName, allLangs);
+		}
+		//System.out.println("JSON written: "+allLessons.toJSONString());
+		
+
+		ZipOutputStream zos = null;
+		try {
+			zos = new ZipOutputStream(new FileOutputStream(new File(path, "overview.zip")));
+			zos.setMethod(ZipOutputStream.DEFLATED);
+			zos.setLevel(Deflater.BEST_COMPRESSION);
+
+			zos.putNextEntry(new ZipEntry("passed"));
+			zos.write(allLessons.toJSONString().getBytes());
+			zos.closeEntry();
+		} catch (IOException ex) { // FileNotFoundException or IOException
+			// It's ok to loose this data as it will be recomputed when the lessons are actually loaded
+
+		} finally {
+			try {
+				if (zos != null)
+					zos.close();
+			} catch (IOException ioe) {
+				ioe.printStackTrace();
+			}
+		}
 	}
 
 	@Override
 	public void loadAll(File path) {
+		/* First get the bodies */
 		for (Lesson lesson : this.game.getLessons())
 			loadLesson(path, lesson);
+		
+		/* Also get the per lesson summaries */
+		
+		// get the zip content
+		String content = null;
+		ZipFile zf = null;
+		BufferedReader br = null;
+		try {
+			zf = new ZipFile(new File(path, "overview.zip"));
+			ZipEntry entry = zf.getEntry("passed");
+			if (entry == null) 
+				return;
+			
+			InputStream is = zf.getInputStream(entry);
+
+			br = new BufferedReader(new InputStreamReader(is));
+			String s;
+			StringBuffer b = new StringBuffer();
+
+			while ((s = br.readLine()) != null) 
+				b.append(s);
+
+			content = b.toString();
+		} catch (IOException e) {
+			e.printStackTrace();
+		} finally {
+			try {
+				if (zf != null)
+					zf.close();
+				if (br != null)
+					br.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		if (content == null)
+			return;
+		//System.out.println("JSON Read: "+content);
+		
+		// now parse it
+		Object value = null;
+		try {
+			value = JSONValue.parseWithException(content);
+		} catch (ParseException e) {
+			System.err.println("Parse error while reading the scores from disk:");
+			e.printStackTrace();
+		}
+		if (! (value instanceof JSONObject)) {
+			System.err.println("Retrieved passed-values is not a JSONObject: "+value);
+			return;
+		}
+		JSONObject allLessons = (JSONObject) value; 
+		for (Object lessonName: allLessons.keySet()) {
+			JSONObject allLangs = (JSONObject) allLessons.get(lessonName);
+			for (Object langName: allLangs.keySet()) {
+				ProgrammingLanguage lang = null;
+				for (ProgrammingLanguage l:Game.getProgrammingLanguages())
+					if (l.getLang().equals(langName))
+						lang = l;
+				
+				JSONObject oneLang = (JSONObject) allLangs.get(langName);
+				int possible = Integer.parseInt(""+oneLang.get("possible"));
+				int passed = Integer.parseInt(""+oneLang.get("passed"));
+				Game.getInstance().studentWork.setPossibleExercises((String) lessonName, lang, possible);
+				Game.getInstance().studentWork.setPassedExercises((String) lessonName, lang, passed);
+			}
+		}
 	}
 
 	@Override
@@ -88,7 +204,7 @@ public class ZipSessionKit implements ISessionKit {
 					Exercise exercise = (Exercise) lecture;
 					for (ProgrammingLanguage lang:exercise.getProgLanguages()) {
 						// flag successfully passed exercise
-						if (Game.getInstance().studentWork.getPassed(exercise.getId(), lang)) {
+						if (Game.getInstance().studentWork.getPassed(exercise, lang)) {
 							ZipEntry ze = new ZipEntry(exercise.getId() + "/DONE."+lang.getExt());
 							zos.putNextEntry(ze);
 							byte[] bytes = new byte[1];
@@ -124,6 +240,10 @@ public class ZipSessionKit implements ISessionKit {
 					} // foreach lang
 				} // is exercise
 			} // end-for lecture
+			ZipEntry ze = new ZipEntry("currently_selected_exercise");
+			zos.putNextEntry(ze);
+			zos.write(lesson.getCurrentExercise().getClass().getCanonicalName().getBytes());
+			zos.closeEntry();
 
 		} catch (IOException ex) { // FileNotFoundException or IOException
 			// FIXME: should raise an exception and not show a dialog (it is not a UI class)
@@ -168,7 +288,7 @@ public class ZipSessionKit implements ISessionKit {
 					for (ProgrammingLanguage lang:exercise.getProgLanguages()) {
 						ZipEntry entry = zf.getEntry(exercise.getId() + "/DONE."+lang.getExt());
 						if (entry != null) {
-							Game.getInstance().studentWork.setPassed(exercise.getId(), lang, true);
+							Game.getInstance().studentWork.setPassed(exercise, lang, true);
 						}
 
 						for (int i = 0; i < exercise.getSourceFileCount(lang); i++) {
@@ -209,6 +329,26 @@ public class ZipSessionKit implements ISessionKit {
 				} // is exercise
 			} // end-for lecture
 
+			/* Get the previously selected exercise */
+			ZipEntry entry = zf.getEntry("currently_selected_exercise");
+			if (entry != null) {
+				BufferedReader br = null;
+				try {
+					br = new BufferedReader(new InputStreamReader(zf.getInputStream(entry)));
+					String exoName = br.readLine();
+
+					lesson.setCurrentExercise(exoName);
+				} catch (IOException e) {
+					e.printStackTrace();
+				} finally {
+					try {
+						br.close();
+					} catch (IOException e) {
+						e.printStackTrace();
+					}
+				}
+			}
+			
 		} catch (IOException ex) { // ZipExecption or IOException
 			// FIXME: should raise an exception and not show a dialog (it is not a UI class)
 			ex.printStackTrace();
diff --git a/src/jlm/core/model/tracking/IdenticaSpy.java b/src/jlm/core/model/tracking/IdenticaSpy.java
index 0b69b7a..dd611f2 100644
--- a/src/jlm/core/model/tracking/IdenticaSpy.java
+++ b/src/jlm/core/model/tracking/IdenticaSpy.java
@@ -28,7 +28,7 @@ public class IdenticaSpy implements ProgressSpyListener {
 
     @Override
     public void executed(Exercise exo) {
-        if (Game.getInstance().studentWork.getPassed(exo.getId(), exo.lastResult.language)) {
+        if (Game.getInstance().studentWork.getPassed(exo, exo.lastResult.language)) {
 
             DefaultHttpClient httpclient = new DefaultHttpClient();
             try {
diff --git a/src/jlm/core/model/tracking/LocalFileSpy.java b/src/jlm/core/model/tracking/LocalFileSpy.java
index 7a3a71e..0c682c3 100644
--- a/src/jlm/core/model/tracking/LocalFileSpy.java
+++ b/src/jlm/core/model/tracking/LocalFileSpy.java
@@ -29,7 +29,7 @@ public class LocalFileSpy implements ProgressSpyListener {
 
     @Override
     public void executed(Exercise exo) {
-        if (Game.getInstance().studentWork.getPassed(exo.getId(), exo.lastResult.language)) {
+        if (Game.getInstance().studentWork.getPassed(exo, exo.lastResult.language)) {
             write(username + " solved " + exo.getName() + " in "
                     + exo.lastResult.language + "!");
         } else {
diff --git a/src/jlm/core/model/tracking/ServerSpyAppEngine.java b/src/jlm/core/model/tracking/ServerSpyAppEngine.java
index 185a045..76a24e0 100644
--- a/src/jlm/core/model/tracking/ServerSpyAppEngine.java
+++ b/src/jlm/core/model/tracking/ServerSpyAppEngine.java
@@ -23,7 +23,7 @@ public class ServerSpyAppEngine extends ServerSpy {
         super();
 
         try {
-            server = new URL(Game.getProperty("jlm.appengine.url") + "/student");
+            server = new URL(Game.getProperty(Game.PROP_APPENGINE_URL) + "/student");
         } catch (MalformedURLException e) {
             e.printStackTrace();
         }
diff --git a/src/jlm/core/model/tracking/TwitterSpy.java b/src/jlm/core/model/tracking/TwitterSpy.java
index 21a900a..bdf9b7e 100644
--- a/src/jlm/core/model/tracking/TwitterSpy.java
+++ b/src/jlm/core/model/tracking/TwitterSpy.java
@@ -25,7 +25,7 @@ public class TwitterSpy implements ProgressSpyListener {
 
 	@Override
 	public void executed(Exercise exo) {
-		if (Game.getInstance().studentWork.getPassed(exo.getId(), exo.lastResult.language)) {
+		if (Game.getInstance().studentWork.getPassed(exo, exo.lastResult.language)) {
 			try {
 				twitter.updateStatus(username+" solved "+exo.getName()+" in "+exo.lastResult.language+"!");
 			} catch (Exception e) {
diff --git a/src/jlm/core/ui/AboutJLMDialog.java b/src/jlm/core/ui/AboutJLMDialog.java
index 2280f45..ad67b1b 100644
--- a/src/jlm/core/ui/AboutJLMDialog.java
+++ b/src/jlm/core/ui/AboutJLMDialog.java
@@ -47,8 +47,8 @@ public class AboutJLMDialog extends JDialog {
 		
 		JLabel text = new JLabel(
 				"<html>"+
-				"<h3 style=\"color:#666666;margin:0px;padding:0px;\">version "+Game.getProperty("jlm.major.version","internal")+" "+
-				"<span style=\"font-size:8px; color:#AAAAAA;margin:0px;padding:0px;\">("+Game.getProperty("jlm.major.version","internal")+"."+Game.getProperty("jlm.minor.version","")+")</span>"+
+				"<h3 style=\"color:#666666;margin:0px;padding:0px;\">version "+Game.getProperty("jlm.major.version","internal",false)+" "+
+				"<span style=\"font-size:8px; color:#AAAAAA;margin:0px;padding:0px;\">("+Game.getProperty("jlm.major.version","internal",false)+"."+Game.getProperty("jlm.minor.version","",false)+")</span>"+
 				"</h3>"+
 				"<br/>"+
 				"© 2008-2011 Contributors. All rights reserved.<br/>"+
diff --git a/src/jlm/core/ui/AboutWorldDialog.java b/src/jlm/core/ui/AboutWorldDialog.java
index 0dffbc7..9a6dd77 100644
--- a/src/jlm/core/ui/AboutWorldDialog.java
+++ b/src/jlm/core/ui/AboutWorldDialog.java
@@ -2,7 +2,9 @@ package jlm.core.ui;
 
 import javax.swing.JFrame;
 
+import jlm.core.ProgLangChangesListener;
 import jlm.core.model.Game;
+import jlm.core.model.ProgrammingLanguage;
 import jlm.core.model.lesson.Exercise;
 import jlm.core.model.lesson.Lecture;
 import jlm.core.model.lesson.Exercise.WorldKind;
@@ -11,7 +13,7 @@ import org.xnap.commons.i18n.I18n;
 import org.xnap.commons.i18n.I18nFactory;
 
 
-public class AboutWorldDialog extends AbstractAboutDialog {
+public class AboutWorldDialog extends AbstractAboutDialog implements ProgLangChangesListener {
 
 	private static final long serialVersionUID = 1766486738385426108L;
 
@@ -20,15 +22,15 @@ public class AboutWorldDialog extends AbstractAboutDialog {
 	public AboutWorldDialog(JFrame parent) {
 		super(parent);
 		currentExerciseHasChanged(Game.getInstance().getCurrentLesson().getCurrentExercise());
+		Game.getInstance().addProgLangListener(this);
 	}
 
 	@Override
 	public void currentExerciseHasChanged(Lecture lecture) {
 		if (lecture instanceof Exercise) {
 			Exercise exo = (Exercise) lecture;
-			setTitle(i18n.tr("About world - ")
-					+ exo.getWorlds(WorldKind.CURRENT).get(0).getClass()
-					.getSimpleName());
+			setTitle(i18n.tr("About world - {0}",
+					exo.getWorlds(WorldKind.CURRENT).get(0).getClass().getSimpleName()));
 			area.setText(exo.getWorlds(WorldKind.CURRENT).get(0).getAbout());
 			area.setCaretPosition(0);
 		} else {
@@ -36,4 +38,11 @@ public class AboutWorldDialog extends AbstractAboutDialog {
 			setVisible(false);
 		}
 	}
+
+	@Override
+	public void currentProgrammingLanguageHasChanged(ProgrammingLanguage newLang) {
+		int pos = area.getCaretPosition();
+		area.setText(((Exercise) Game.getInstance().getCurrentLesson().getCurrentExercise()).getWorlds(WorldKind.CURRENT).get(0).getAbout());
+		area.setCaretPosition(pos);
+	}
 }
diff --git a/src/jlm/core/ui/ChooseLectureDialog.java b/src/jlm/core/ui/ChooseLectureDialog.java
index e2150b4..11e51a1 100644
--- a/src/jlm/core/ui/ChooseLectureDialog.java
+++ b/src/jlm/core/ui/ChooseLectureDialog.java
@@ -11,6 +11,8 @@ import javax.swing.event.TreeSelectionEvent;
 import javax.swing.event.TreeSelectionListener;
 import javax.swing.tree.DefaultMutableTreeNode;
 import javax.swing.tree.DefaultTreeCellRenderer;
+import javax.swing.tree.TreeNode;
+import javax.swing.tree.TreePath;
 import javax.swing.tree.TreeSelectionModel;
 
 import jlm.core.model.Game;
@@ -24,8 +26,9 @@ public class ChooseLectureDialog implements TreeSelectionListener {
 	public ChooseLectureDialog() {
 		Lesson l = Game.getInstance().getCurrentLesson();
 		DefaultMutableTreeNode root = new DefaultMutableTreeNode();
-		for (Lecture lect : l.getRootLectures())  
-			root.add(lect.makeNode());
+		for (Lecture lect : l.getRootLectures()) 
+			root.add(lect.getNode());
+		
 		tree = new JTree(root);
 		tree.getSelectionModel().setSelectionMode(TreeSelectionModel.SINGLE_TREE_SELECTION);
 		tree.setRootVisible(false);
@@ -44,11 +47,7 @@ public class ChooseLectureDialog implements TreeSelectionListener {
 				ImageIcon icon = null;
 				if (lect instanceof Exercise) {
 					Exercise exo = (Exercise) lect;
-					//					if (exo.passed()) { // FIXME 
-					//						ico = ResourcesCache.getStarIcon(exo.getWorld(0).getView()[0].getIcon(), exo.getWorld(0).getView()[0].getClass().getCanonicalName());
-					//					} else {
-					icon = exo.getWorld(0).getView().getIcon();
-					//					}
+					icon = ResourcesCache.getStarredIcon(exo.getWorld(0).getIcon(), exo);
 				} else {
 					icon = ResourcesCache.getIcon("img/world_lesson.png");
 					if (lect != null && (! (lect instanceof Lecture))) // null may occur -- ignore but don't fail 
@@ -58,6 +57,14 @@ public class ChooseLectureDialog implements TreeSelectionListener {
 				return this;
 			}
 		});
+		
+		/* Build the selection */
+		tree.setExpandsSelectedPaths(true);
+		TreeNode[] nodes = l.getCurrentExercise().getNode().getPath();
+		TreePath path = new TreePath(nodes);
+        tree.scrollPathToVisible(path);
+		tree.setSelectionPath(path);
+		
 		JScrollPane jsp = new JScrollPane(tree);
 
 		JPanel p = new JPanel();
@@ -69,13 +76,10 @@ public class ChooseLectureDialog implements TreeSelectionListener {
 			if (node != null) {
 				Object selection = node.getUserObject();
 
-				if (selection instanceof Lecture) {
+				if (selection instanceof Lecture) 
 					Game.getInstance().setCurrentExercise((Lecture) selection);
-				}
 				else 
-					System.out.println("selection is no lecture: "+selection);
-			} else {
-				System.out.println("Nothing selected; not switching");
+					System.out.println("selection is not a lecture: "+selection);
 			}
 		}
 
diff --git a/src/jlm/core/ui/DelayBoundedRangeModel.java b/src/jlm/core/ui/DelayBoundedRangeModel.java
deleted file mode 100644
index 6adfca0..0000000
--- a/src/jlm/core/ui/DelayBoundedRangeModel.java
+++ /dev/null
@@ -1,177 +0,0 @@
-package jlm.core.ui;
-
-import javax.swing.BoundedRangeModel;
-import javax.swing.event.ChangeEvent;
-import javax.swing.event.ChangeListener;
-import javax.swing.event.EventListenerList;
-
-import jlm.core.GameListener;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lecture;
-import jlm.universe.World;
-
-public class DelayBoundedRangeModel implements BoundedRangeModel, GameListener {
-
-	public static int MIN_DELAY = 0;
-	public static int DEFAULT_DELAY = 100;
-	public static int MAX_DELAY = 500;
-
-	protected EventListenerList listenerList = new EventListenerList();
-	protected transient ChangeEvent changeEvent = null;
-
-	private int extent = 0;
-	private int min = MIN_DELAY;
-	private int max = MAX_DELAY;
-	private boolean isAdjusting = false;
-
-	private Game game;
-
-	public DelayBoundedRangeModel(Game game) {
-		this.game = game;
-		this.game.addGameListener(this);
-	}
-
-	@Override
-	public int getMaximum() {
-		return this.max;
-	}
-
-	@Override
-	public void setMaximum(int newMaximum) {
-		this.max = newMaximum;
-	}
-
-	@Override
-	public int getMinimum() {
-		return this.min;
-	}
-
-	@Override
-	public void setMinimum(int newMinimum) {
-		this.min = newMinimum;
-	}
-
-	@Override
-	public int getValue() {
-		return game.getSelectedWorld() == null? 0: game.getSelectedWorld().getDelay();
-	}
-
-	@Override
-	public void setValue(int n) {
-		if (game.getSelectedWorld() != null) {
-			n = Math.min(n, Integer.MAX_VALUE - extent);
-
-			int newValue = Math.max(n, min);
-			if (newValue + extent > max) {
-				newValue = max - extent;
-			}
-			setRangeProperties(newValue, extent, min, max, isAdjusting);
-		}
-	}
-
-	@Override
-	public boolean getValueIsAdjusting() {
-		return isAdjusting;
-	}
-
-	@Override
-	public void setValueIsAdjusting(boolean b) {
-		setRangeProperties(game.getSelectedWorld().getDelay(), extent, min, max, b);
-	}
-
-	@Override
-	public int getExtent() {
-		return this.extent;
-	}
-
-	@Override
-	public void setExtent(int n) {
-        int newExtent = Math.max(0, n);
-        int value = game.getSelectedWorld().getDelay();
-        if(value + newExtent > max) {
-            newExtent = max - value;
-        }
-        setRangeProperties(value, newExtent, min, max, isAdjusting);
-	}
-
-	@Override
-	public void setRangeProperties(int newValue, int newExtent, int newMin, int newMax, boolean adjusting) {
-		if (newMin > newMax) {
-			newMin = newMax;
-		}
-		if (newValue > newMax) {
-			newMax = newValue;
-		}
-		if (newValue < newMin) {
-			newMin = newValue;
-		}
-
-		/*
-		 * Convert the addends to long so that extent can be Integer.MAX_VALUE
-		 * without rolling over the sum. A JCK test covers this, see bug
-		 * 4097718.
-		 */
-		if (((long) newExtent + (long) newValue) > newMax) {
-			newExtent = newMax - newValue;
-		}
-
-		if (newExtent < 0) {
-			newExtent = 0;
-		}
-
-		boolean isChange = (newValue != game.getSelectedWorld().getDelay()) || (newExtent != extent)
-				|| (newMin != min) || (newMax != max) || (adjusting != isAdjusting);
-
-		if (isChange) {
-			for (World w:game.getSelectedWorlds())
-				w.setDelay(newValue);
-			extent = newExtent;
-			min = newMin;
-			max = newMax;
-			isAdjusting = adjusting;
-
-			fireStateChanged();
-		}
-	}
-
-	@Override
-	public void addChangeListener(ChangeListener x) {
-		listenerList.add(ChangeListener.class, x);
-	}
-
-	@Override
-	public void removeChangeListener(ChangeListener x) {
-		listenerList.remove(ChangeListener.class, x);
-	}
-
-	protected void fireStateChanged() {
-		Object[] listeners = listenerList.getListenerList();
-		for (int i = listeners.length - 2; i >= 0; i -= 2) {
-			if (listeners[i] == ChangeListener.class) {
-				if (changeEvent == null) {
-					changeEvent = new ChangeEvent(this);
-				}
-				((ChangeListener) listeners[i + 1]).stateChanged(changeEvent);
-			}
-		}
-	}
-
-	@Override
-	public void currentExerciseHasChanged(Lecture lect) { /* don't care */ }
-
-	@Override
-	public void currentLessonHasChanged() { /* don't care */ }
-
-	@Override
-	public void selectedWorldHasChanged(World w) {
-		fireStateChanged();
-	}
-
-	@Override
-	public void selectedEntityHasChanged() { /* don't care */ }
-
-	@Override
-	public void selectedWorldWasUpdated() {
-		fireStateChanged();
-	}
-}
diff --git a/src/jlm/core/ui/ExerciseView.java b/src/jlm/core/ui/ExerciseView.java
index 931bb91..96b7e60 100644
--- a/src/jlm/core/ui/ExerciseView.java
+++ b/src/jlm/core/ui/ExerciseView.java
@@ -5,6 +5,7 @@ import java.awt.KeyboardFocusManager;
 import java.util.HashSet;
 import java.util.Set;
 
+import javax.swing.BoundedRangeModel;
 import javax.swing.InputMap;
 import javax.swing.JComboBox;
 import javax.swing.JComponent;
@@ -13,6 +14,9 @@ import javax.swing.JSlider;
 import javax.swing.JSplitPane;
 import javax.swing.JTabbedPane;
 import javax.swing.KeyStroke;
+import javax.swing.event.ChangeEvent;
+import javax.swing.event.ChangeListener;
+import javax.swing.event.EventListenerList;
 
 import jlm.core.GameListener;
 import jlm.core.model.Game;
@@ -52,10 +56,6 @@ public class ExerciseView extends JPanel implements GameListener {
 	}
 
 	public void setEnabledControl(boolean enabled) {
-		if (entityComboBox == null) 
-			return;
-		// worldComboBox.setEnabled(enabled);
-		entityComboBox.setEnabled(enabled);
 		if (buttonPanel != null)
 			buttonPanel.setEnabledControl(enabled);
 	}
@@ -211,4 +211,170 @@ public class ExerciseView extends JPanel implements GameListener {
 		return tabPane;
 	}
 	 
-}
\ No newline at end of file
+}
+
+class DelayBoundedRangeModel implements BoundedRangeModel, GameListener {
+
+	public static int MIN_DELAY = 0;
+	public static int DEFAULT_DELAY = 100;
+	public static int MAX_DELAY = 500;
+
+	protected EventListenerList listenerList = new EventListenerList();
+	protected transient ChangeEvent changeEvent = null;
+
+	private int extent = 0;
+	private int min = MIN_DELAY;
+	private int max = MAX_DELAY;
+	private boolean isAdjusting = false;
+
+	private Game game;
+
+	public DelayBoundedRangeModel(Game game) {
+		this.game = game;
+		this.game.addGameListener(this);
+	}
+
+	@Override
+	public int getMaximum() {
+		return this.max;
+	}
+
+	@Override
+	public void setMaximum(int newMaximum) {
+		this.max = newMaximum;
+	}
+
+	@Override
+	public int getMinimum() {
+		return this.min;
+	}
+
+	@Override
+	public void setMinimum(int newMinimum) {
+		this.min = newMinimum;
+	}
+
+	@Override
+	public int getValue() {
+		return game.getSelectedWorld() == null? 0: game.getSelectedWorld().getDelay();
+	}
+
+	@Override
+	public void setValue(int n) {
+		if (game.getSelectedWorld() != null) {
+			n = Math.min(n, Integer.MAX_VALUE - extent);
+
+			int newValue = Math.max(n, min);
+			if (newValue + extent > max) {
+				newValue = max - extent;
+			}
+			setRangeProperties(newValue, extent, min, max, isAdjusting);
+		}
+	}
+
+	@Override
+	public boolean getValueIsAdjusting() {
+		return isAdjusting;
+	}
+
+	@Override
+	public void setValueIsAdjusting(boolean b) {
+		setRangeProperties(game.getSelectedWorld().getDelay(), extent, min, max, b);
+	}
+
+	@Override
+	public int getExtent() {
+		return this.extent;
+	}
+
+	@Override
+	public void setExtent(int n) {
+        int newExtent = Math.max(0, n);
+        int value = game.getSelectedWorld().getDelay();
+        if(value + newExtent > max) {
+            newExtent = max - value;
+        }
+        setRangeProperties(value, newExtent, min, max, isAdjusting);
+	}
+
+	@Override
+	public void setRangeProperties(int newValue, int newExtent, int newMin, int newMax, boolean adjusting) {
+		if (newMin > newMax) {
+			newMin = newMax;
+		}
+		if (newValue > newMax) {
+			newMax = newValue;
+		}
+		if (newValue < newMin) {
+			newMin = newValue;
+		}
+
+		/*
+		 * Convert the addends to long so that extent can be Integer.MAX_VALUE
+		 * without rolling over the sum. A JCK test covers this, see bug
+		 * 4097718.
+		 */
+		if (((long) newExtent + (long) newValue) > newMax) {
+			newExtent = newMax - newValue;
+		}
+
+		if (newExtent < 0) {
+			newExtent = 0;
+		}
+
+		boolean isChange = (newValue != game.getSelectedWorld().getDelay()) || (newExtent != extent)
+				|| (newMin != min) || (newMax != max) || (adjusting != isAdjusting);
+
+		if (isChange) {
+			for (World w:game.getSelectedWorlds())
+				w.setDelay(newValue);
+			extent = newExtent;
+			min = newMin;
+			max = newMax;
+			isAdjusting = adjusting;
+
+			fireStateChanged();
+		}
+	}
+
+	@Override
+	public void addChangeListener(ChangeListener x) {
+		listenerList.add(ChangeListener.class, x);
+	}
+
+	@Override
+	public void removeChangeListener(ChangeListener x) {
+		listenerList.remove(ChangeListener.class, x);
+	}
+
+	protected void fireStateChanged() {
+		Object[] listeners = listenerList.getListenerList();
+		for (int i = listeners.length - 2; i >= 0; i -= 2) {
+			if (listeners[i] == ChangeListener.class) {
+				if (changeEvent == null) {
+					changeEvent = new ChangeEvent(this);
+				}
+				((ChangeListener) listeners[i + 1]).stateChanged(changeEvent);
+			}
+		}
+	}
+
+	@Override
+	public void currentExerciseHasChanged(Lecture lect) { /* don't care */ }
+
+	@Override
+	public void currentLessonHasChanged() { /* don't care */ }
+
+	@Override
+	public void selectedWorldHasChanged(World w) {
+		fireStateChanged();
+	}
+
+	@Override
+	public void selectedEntityHasChanged() { /* don't care */ }
+
+	@Override
+	public void selectedWorldWasUpdated() {
+		fireStateChanged();
+	}
+}
diff --git a/src/jlm/core/ui/FeedbackDialog.java b/src/jlm/core/ui/FeedbackDialog.java
new file mode 100644
index 0000000..4287e19
--- /dev/null
+++ b/src/jlm/core/ui/FeedbackDialog.java
@@ -0,0 +1,179 @@
+package jlm.core.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.URI;
+import java.util.ArrayList;
+import java.util.List;
+
+import javax.swing.JButton;
+import javax.swing.JDialog;
+import javax.swing.JEditorPane;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.ScrollPaneConstants;
+
+import jlm.core.model.Game;
+
+import org.apache.http.HttpResponse;
+import org.apache.http.NameValuePair;
+import org.apache.http.client.entity.UrlEncodedFormEntity;
+import org.apache.http.client.methods.HttpPost;
+import org.apache.http.impl.client.DefaultHttpClient;
+import org.apache.http.message.BasicNameValuePair;
+import org.xnap.commons.i18n.I18n;
+import org.xnap.commons.i18n.I18nFactory;
+
+public class FeedbackDialog extends JDialog {
+
+	private static final long serialVersionUID = 0;
+	private static FeedbackDialog instance = null;
+	
+	public I18n i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",getLocale(), I18nFactory.FALLBACK);
+
+	
+	public static FeedbackDialog getInstance() {
+		if (FeedbackDialog.instance == null)
+			FeedbackDialog.instance = new FeedbackDialog();
+		return FeedbackDialog.instance;
+	}
+	
+	private FeedbackDialog() {
+		super(MainFrame.getInstance(), "Report your feedback", true);
+		this.setTitle(i18n.tr("Report your feedback"));
+		initComponent();
+	}
+	
+	
+	public void initComponent() {
+		
+		setLayout(new BorderLayout());
+		JEditorPane explain = new JEditorPane("text/html", "");
+		explain.setText(i18n.tr(
+				"<html><p>Thanks for your feedback on JLM. We deeply need this to make the tool match <br>" +
+				"your needs, so please don't hesitate to report any suggestion, such as typos and <br/>" +
+				"unclear parts in the mission texts, other improvement to the existing exercises<br/>" +
+				"or prospective exercises. We will do our best to integrate your suggestions.</p>" +
+				"<p>Please write here your suggestion (if possible in english or french), with all<br/>" +
+				"necessary details, and then click on 'Send' below.</p>" +
+				"<p><b>Please provide your email address so that we can contact you back</b> but <br/>" +
+				"NEVER DISCLOSE A PASSWORD while reporting issues.</p>" +
+				"<p>Note that some technical information (such as your version of JLM and Java) will <br/>" +
+				"automatically be added to your feedback. None of these automatic information <br/>" +
+				"are personal and you still have to identify yourself if you want to.</p>" +
+
+				"<p>Alternatively, you can use the <a href='http://github.com/oster/JLM/issues'>github interface</a> for feedback.</p></html>"));
+		explain.setBackground(new Color(235,235,235));
+		explain.setOpaque(true);
+		explain.setEditable(false);
+		add(explain, BorderLayout.NORTH);
+		
+		final JEditorPane feedback = new JEditorPane("text/plain",
+				i18n.tr("(your feedback comes here)"));
+		
+		feedback.setBackground(Color.white);
+		feedback.setOpaque(true);
+		feedback.setEditable(true);
+		JScrollPane jsp =new JScrollPane(feedback);
+		jsp.setHorizontalScrollBarPolicy(ScrollPaneConstants.HORIZONTAL_SCROLLBAR_NEVER);
+		jsp.setVerticalScrollBarPolicy(ScrollPaneConstants.VERTICAL_SCROLLBAR_AS_NEEDED);
+		add(jsp,BorderLayout.CENTER);
+		
+		
+		final JButton cancelBtn = new JButton(i18n.tr("Cancel"));
+		cancelBtn.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				int dialogResult = JOptionPane.showConfirmDialog(cancelBtn, 
+						i18n.tr("Do you really want to cancel your feedback and lose any edit?"),
+						i18n.tr("are you sure?"),
+						JOptionPane.YES_NO_OPTION);
+				if(dialogResult==JOptionPane.YES_OPTION)
+					dispose();
+			}
+		});
+		
+		final JButton sendBtn = new JButton(i18n.tr("Send feedback"));
+		sendBtn.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				
+	            DefaultHttpClient httpclient = new DefaultHttpClient();
+	            try {
+	                HttpPost post = new HttpPost(new URI("http://www.loria.fr/~quinson/JLM-feedback/report.php"));
+
+	                List<NameValuePair> formparams = new ArrayList<NameValuePair>();
+	                formparams.add(new BasicNameValuePair("lesson", Game.getInstance().getCurrentLesson().getId()));
+	                formparams.add(new BasicNameValuePair("exercise", Game.getInstance().getCurrentLesson().getCurrentExercise().getId()));
+	                formparams.add(new BasicNameValuePair("language", Game.getProgrammingLanguage().getLang()));
+	                formparams.add(new BasicNameValuePair("locale", Game.getInstance().getLocale().getDisplayName()));
+	                formparams.add(new BasicNameValuePair("java", System.getProperty("java.version")+" (VM: "+System.getProperty("java.vm.name")+"; version: "+System.getProperty("java.vm.version")+")"));
+	                
+	                formparams.add(new BasicNameValuePair("os", System.getProperty("os.name")+" (version: "+System.getProperty("os.version")+"; arch: "+ System.getProperty("os.arch")+")"));
+	                formparams.add(new BasicNameValuePair("jlm", Game.getProperty("jlm.major.version","internal",false)+" ("+
+	                		Game.getProperty("jlm.minor.version","internal",false)+")"));
+	                
+	                formparams.add(new BasicNameValuePair("text", feedback.getText()));
+
+	                UrlEncodedFormEntity entity = new UrlEncodedFormEntity(formparams, "UTF-8");
+	                post.setEntity(entity);
+
+	                HttpResponse response = httpclient.execute(post);
+	                
+	                
+	                BufferedReader reader = new BufferedReader(
+	                        new InputStreamReader(response.getEntity().getContent()));
+	                StringBuffer ctn = new StringBuffer();
+	                while (true) {
+	                	String s = reader.readLine();
+	                	if (s == null)
+	                		break;
+	                	ctn.append(s);
+	                } 
+	                if (response.getStatusLine().getStatusCode() == 200) {
+	    				JOptionPane.showMessageDialog(cancelBtn, 
+	    						ctn.toString(),
+	    						i18n.tr("Thank you for your feedback"),
+	    						JOptionPane.INFORMATION_MESSAGE);
+	    				dispose();	                	
+	                } else {
+	    				JOptionPane.showMessageDialog(cancelBtn, 
+	    						ctn.toString(),
+	    						i18n.tr("Error while uploading your feedback"),
+	    						JOptionPane.ERROR_MESSAGE);
+	                }
+	            } catch (Exception ex) {
+	            	StringBuffer ctn = new StringBuffer(ex.getLocalizedMessage()+"\n");
+	            	for (StackTraceElement elm : ex.getStackTrace())
+	            		ctn.append(elm.toString());
+    				JOptionPane.showMessageDialog(cancelBtn, 
+    						ctn.toString(),
+    						i18n.tr("Error while uploading your feedback"),
+    						JOptionPane.ERROR_MESSAGE);
+	                ex.printStackTrace();
+	            }
+
+			}
+		});
+		
+		JPanel toolbar = new JPanel();
+		toolbar.add(cancelBtn);
+		toolbar.add(sendBtn);
+		add(toolbar,BorderLayout.SOUTH);
+		
+		setDefaultCloseOperation(JDialog.DISPOSE_ON_CLOSE);
+		pack();
+		setMinimumSize(new Dimension(200, 600));
+		setPreferredSize(new Dimension(500, 800));
+		setResizable(true);
+				
+		setLocationRelativeTo(getParent());
+	}
+	
+}
diff --git a/src/jlm/core/ui/JavaLearningMachine.java b/src/jlm/core/ui/JavaLearningMachine.java
index 9af739b..f74a01c 100644
--- a/src/jlm/core/ui/JavaLearningMachine.java
+++ b/src/jlm/core/ui/JavaLearningMachine.java
@@ -3,7 +3,7 @@ package jlm.core.ui;
 import javax.swing.JFrame;
 
 import jlm.core.model.Game;
-import jlm.core.model.FileUtils;
+import jlm.core.utils.FileUtils;
 
 
 public class JavaLearningMachine {
@@ -15,9 +15,12 @@ public class JavaLearningMachine {
 			System.setProperty("com.apple.mrj.application.apple.menu.about.name", "JLM");
 		}
 		
+		
 		FileUtils.setLocale(new JFrame().getLocale());
 		
 		Game.getInstance().loadChooser();
-		Game.getInstance().setLocale(MainFrame.getInstance().getLocale());
+		MainFrame.getInstance().setVisible(false);		
+		new LessonChooser();
+		
 	}
 }
diff --git a/src/jlm/core/ui/JlmHtmlEditorKit.java b/src/jlm/core/ui/JlmHtmlEditorKit.java
index 2e298f2..9959f7a 100644
--- a/src/jlm/core/ui/JlmHtmlEditorKit.java
+++ b/src/jlm/core/ui/JlmHtmlEditorKit.java
@@ -5,6 +5,8 @@ import java.awt.Shape;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.io.InputStream;
+import java.util.HashMap;
+import java.util.Map;
 
 import javax.imageio.ImageIO;
 import javax.swing.Icon;
@@ -21,6 +23,8 @@ import javax.swing.text.html.HTML;
 import javax.swing.text.html.HTMLEditorKit;
 
 import jlm.core.model.Game;
+import jlm.core.model.ProgrammingLanguage;
+import jlm.core.model.lesson.Lecture;
 
 
 public class JlmHtmlEditorKit extends HTMLEditorKit {
@@ -46,16 +50,61 @@ public class JlmHtmlEditorKit extends HTMLEditorKit {
 			if (tagName instanceof HTML.Tag) {
 				HTML.Tag tag = (HTML.Tag) tagName;
 				if (tag == HTML.Tag.IMG)
-					return new MyIconView(element);
+					return new MyIconView(element, baseExercise);
 			}
 			return super.create(element);
 		}
 	}
 
+	protected static Lecture baseExercise = null;
+	public JlmHtmlEditorKit() {
+		baseExercise = null;
+	}
+
+	public JlmHtmlEditorKit(Lecture _baseExercise) {
+		baseExercise = _baseExercise;
+	}
+
 	@Override
 	public ViewFactory getViewFactory() {
 		return new HTMLFactoryX();
 	}
+	private static Map<ProgrammingLanguage,String> css; /** The CSS to use for a given language */
+	public static String getCSS(ProgrammingLanguage lang) {
+		if (css==null) 
+			 css = new HashMap<ProgrammingLanguage, String>();
+		String res = css.get(lang);
+		if (res == null) {
+			res =		"  <style type=\"text/css\">\n"+
+				        "    body { font-family: tahoma, \"Times New Roman\", serif; font-size:10px; margin:10px; }\n"+
+				        "    code { background:#EEEEEE; }\n"+
+				        "    pre { background: #EEEEEE;\n"+
+				        "          margin: 5px;\n"+
+				        "          padding: 6px;\n"+
+				        "          border: 1px inset;\n"+
+				        "          width: 640px;\n"+
+				        "          overflow: auto;\n"+
+				        "          text-align: left;\n"+
+				        "          font-family: \"Courrier New\", \"Courrier\", monospace; }\n"+
+				        "   .comment { background:#EEEEEE;\n"+
+				        "              font-family: \"Times New Roman\", serif;\n"+
+				        "              color:#00AA00;\n"+
+				        "              font-style: italic; }\n";
+			for (ProgrammingLanguage l2 : Game.programmingLanguages) {
+				if (!lang.equals(l2)) {
+					res += "."+l2.getLang()+" {display: none; color:#FF0000;}\n";
+					res += "."+l2.getLang().toLowerCase()+" {display: none; color:#FF0000;}\n";
+				} else {
+					/* DEBUG ONLY, to see the specific elements*/ 
+					res += "."+l2.getLang()+" {visibility: visible; color:#000000;}\n";
+					res += "."+l2.getLang().toLowerCase()+" {visibility: visible; color:#000000;}\n";
+				}
+			}
+			res +=  "  </style>\n";
+			css.put(lang, res);
+		}
+		return res;
+	}
 }
 
 class EmptyView extends IconView {
@@ -83,16 +132,21 @@ class MyIconView extends View {
 	 * Creates a new icon view that represents an element.
 	 *
 	 * @param elem the element to create a view for
+	 * @param baseExercise 
 	 * @throws FileNotFoundException 
 	 */
-	public MyIconView(Element elem) {
+	public MyIconView(Element elem, Lecture baseExercise) {
 		super(elem);
 		String filename = (String) elem.getAttributes().getAttribute(HTML.Attribute.SRC);
 		if (filename == null) {
-			System.err.println("<img> tag without src attribute");
+			System.err.println(Game.i18n.tr("<img> tag without src attribute in exercise {0}",baseExercise.getName()));
 			c = (Icon) UIManager.getLookAndFeelDefaults().get("html.missingImage");
 		} else {
-			c = ResourcesCache.getIcon(filename);
+			c = ResourcesCache.getIcon(filename,true);
+			if (c != null)
+				return;
+			if (baseExercise != null) 
+				c = ResourcesCache.getIcon(baseExercise, filename);
 			if (c != null)
 				return;
 			
diff --git a/src/jlm/core/ui/LessonChooser.java b/src/jlm/core/ui/LessonChooser.java
new file mode 100644
index 0000000..d78eb75
--- /dev/null
+++ b/src/jlm/core/ui/LessonChooser.java
@@ -0,0 +1,256 @@
+package jlm.core.ui;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.FlowLayout;
+import java.awt.GridBagConstraints;
+import java.awt.GridBagLayout;
+import java.awt.Insets;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.io.File;
+import java.io.IOException;
+
+import javax.swing.Icon;
+import javax.swing.JButton;
+import javax.swing.JEditorPane;
+import javax.swing.JFileChooser;
+import javax.swing.JFrame;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+import javax.swing.JScrollPane;
+import javax.swing.JSplitPane;
+import javax.swing.filechooser.FileNameExtensionFilter;
+
+import jlm.core.model.Game;
+import jlm.core.model.LessonLoadingException;
+import jlm.core.model.ProgrammingLanguage;
+import jlm.core.utils.FileUtils;
+
+import org.xnap.commons.i18n.I18n;
+import org.xnap.commons.i18n.I18nFactory;
+
+public class LessonChooser extends JFrame {
+	private static final long serialVersionUID = 1L;
+	I18n i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",getLocale(), I18nFactory.FALLBACK);
+
+	public LessonChooser() {
+		super();
+		setTitle(i18n.tr("Choose your lesson"));
+		FileUtils.setLocale(this.getLocale());
+		initComponents(Game.getInstance());
+	}
+
+	private void initComponents(Game g) {
+		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); 
+
+		setBackground(Color.white);
+		setLayout(new BorderLayout());
+
+		JEditorPane blurb = new JEditorPane("text/html", "");
+		blurb.setEditable(false);
+		blurb.setEditorKit(new JlmHtmlEditorKit());
+		blurb.setText(i18n.tr("<table border=\"0\" align=\"center\"><tr>\n" +
+				"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n" +
+				"<td valign=\"center\">  <font size=\"+2\">Welcome to the Java Learning Machine</font>  </td>\n" +
+				"<td valign=\"center\"><img src=\"img/world_buggle.png\" /></td>\n" +
+				"</tr></table>\n" +
+				"\n" +
+				"<p><font size=\"+1\">The JLM is a Learning Management System (LMS) aiming at teaching the art of computer " +
+				"programming through interactive exercises. It offers an extensive set of varied " +
+				"exercises, allowing you to practice at your own pace.</font></p><br/>"));
+
+		LessonOverview overview = new LessonOverview(this);
+		
+		LessonMatrix matrix = new LessonMatrix(overview, new String[][] { // WARNING, keep ExoTest.lessons synchronized
+				{"lessons/welcome","lessons/turmites","lessons/maze", "lessons/bat/string1"},
+				{"lessons/sort", "lessons/sort/baseball", "lessons/sort/pancake"},
+				{"lessons/recursion", "lessons/recursion/hanoi" },
+				{"lessons/lightbot" },
+		    }); 
+	
+
+		add(blurb,BorderLayout.NORTH);
+
+		JSplitPane mainPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
+
+		mainPane.setBackground(Color.white);
+		mainPane.setLeftComponent(matrix);
+		mainPane.setRightComponent(overview);
+		
+		add(mainPane, BorderLayout.CENTER);
+
+		pack();
+		setSize(700, 500);
+		setVisible(true);
+		setResizable(false);
+	}
+}
+
+
+class LessonMatrix extends JPanel {
+	private I18n i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",getLocale(), I18nFactory.FALLBACK);
+
+	private static final long serialVersionUID = 1L;
+
+	public LessonMatrix(LessonOverview overview, String[][] lessons) {
+		setBackground(Color.white);
+		GridBagLayout gl = new GridBagLayout(); 
+		setLayout(gl);
+		
+        GridBagConstraints c = new GridBagConstraints();
+        c.insets = new Insets(3, 3, 3, 3);
+        c.gridwidth = 1;
+
+        int maxCol=0;
+        for (int row = 0; row < lessons.length; row++) {
+        	for (int col=0; col < lessons[row].length; col++) {
+        		LessonButton btLesson = new LessonButton(overview, lessons[row][col]);
+        		
+        		c.gridy = row;
+        		c.gridx = col;
+        		gl.setConstraints(btLesson, c);
+        		add(btLesson);
+        	}
+        	if (row < lessons.length) {
+        		if (lessons[row].length>maxCol)
+        			maxCol = lessons[row].length-1;
+        	} else if (lessons[row].length>maxCol) // React correctly to when the last line is longer than the others
+    			maxCol = lessons[row].length;
+        }
+        /* add a load lesson button */
+        JButton btLoadLesson = new JButton();
+        btLoadLesson.setIcon(ResourcesCache.getIcon("img/bt-load-lesson.png")); 
+		btLoadLesson.setSize(50,50);
+		btLoadLesson.setBackground(Color.white);
+		btLoadLesson.addActionListener(new ActionListener() {
+			
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				JFileChooser fc = new JFileChooser();
+				fc.setFileFilter(new FileNameExtensionFilter(i18n.tr("JLM lesson files"), "jlm"));
+				fc.setDialogType(JFileChooser.OPEN_DIALOG);
+				fc.showOpenDialog(MainFrame.getInstance());
+				File selectedFile = fc.getSelectedFile();
+
+				try {
+					if (selectedFile != null)
+						Game.getInstance().loadLessonFromJAR(fc.getSelectedFile());
+				} catch (LessonLoadingException lle) {
+					JOptionPane.showMessageDialog(null, lle.getMessage(), i18n.tr("Error"), JOptionPane.ERROR_MESSAGE); 
+				}
+			}
+		});
+		c.gridy = lessons.length-1;
+		c.gridx = maxCol;
+		gl.setConstraints(btLoadLesson, c);
+		add(btLoadLesson);
+	}
+	
+}
+
+class LessonOverview extends JPanel {
+	private static final long serialVersionUID = 1L;
+	
+	private JButton btGo;
+	private String path;
+	private JEditorPane desc;
+	private I18n i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",getLocale(), I18nFactory.FALLBACK);
+
+	public LessonOverview(final LessonChooser lc) {
+		setLayout(new BorderLayout());
+		
+		setBackground(Color.white);
+		desc = new JEditorPane("text/html", "");
+		desc.setEditable(false);
+		desc.setEditorKit(new JlmHtmlEditorKit());
+		desc.setText(i18n.tr("<h1>Please pick a lesson</h1>\n" +
+				"<p>Please click on an icon on the left to select a lesson.</p>\n" +
+				"<p>Lessons located above are generally simpler than the ones located below.</p>"));
+
+		JScrollPane descScrol = new JScrollPane(desc);
+		JPanel descPanel = new JPanel(new BorderLayout());
+		descPanel.add(descScrol,BorderLayout.CENTER);
+		descPanel.setBackground(Color.white);
+		descPanel.setSize(new Dimension(27, 15));
+		descPanel.doLayout();
+		add(descPanel,BorderLayout.CENTER);
+		
+		btGo = new JButton(i18n.tr("Go"));
+		btGo.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				Game.getInstance().switchLesson(path.replaceAll("/", "."),false);
+				MainFrame.getInstance().setVisible(true);
+				lc.dispose();
+			}
+		});
+		btGo.setEnabled(false);
+		
+        JPanel bottomButtons = new JPanel();
+        bottomButtons.setBackground(Color.white);
+        bottomButtons.setLayout(new FlowLayout());
+        bottomButtons.add(btGo);
+
+        add(bottomButtons,BorderLayout.SOUTH);
+	}
+	
+	public void setPath(String path) {
+		btGo.setEnabled(true);
+		btGo.requestFocusInWindow();
+		this.path = path;
+		
+		String filename = path.replace('.',File.separatorChar)+"/short_desc";
+		StringBuffer sb = null;
+		try {
+			sb = FileUtils.readContentAsText(filename, "html",true);
+		} catch (IOException ex) {
+			filename += ".html";
+			sb = new StringBuffer(i18n.tr("<p>(unable to display the short description of this lesson: file {0} not found)</p>",filename));
+		}
+
+		sb.append(i18n.tr("<p><b>Your score:</b> "));
+		String id = path.replaceAll("/", ".").replaceAll("^lessons\\.", "");
+		boolean foundOne = false;
+		for (ProgrammingLanguage lang:Game.programmingLanguages) {
+			int possible = Game.getInstance().studentWork.getPossibleExercises(id, lang);
+			int passed = Game.getInstance().studentWork.getPassedExercises(id, lang);
+			if (possible>0) {
+				if (lang == Game.LIGHTBOT) 
+					sb.append(" "+i18n.tr("{0} out of {1} exercises passed.",passed,possible));
+				else {
+					sb.append("<br/>");
+					sb.append("    <img src=\"img/lang_"+lang.getLang().toLowerCase()+".png\">  ");
+					sb.append(i18n.tr("{0} out of {1} exercises passed in {2}.",passed,possible,lang.getLang()));
+				}
+				foundOne = true;
+			}
+		}
+		if (!foundOne) 
+			sb.append(i18n.tr("You never attempted this lesson."));
+		sb.append("</p>");
+		
+		desc.setText(sb.toString());
+		desc.setCaretPosition(0);
+	}	
+}
+
+class LessonButton extends JButton {
+	private static final long serialVersionUID = 1L;
+
+	public LessonButton(final LessonOverview overview, final String path) {
+		super();
+		Icon icon = ResourcesCache.getIcon(path+"/icon.png"); 
+		setIcon(icon);
+		setSize(icon.getIconWidth(), icon.getIconHeight());
+		this.setBackground(Color.white);
+		addActionListener(new ActionListener() {
+			
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				overview.setPath(path);
+			}
+		});
+	}
+}
\ No newline at end of file
diff --git a/src/jlm/core/ui/MainFrame.java b/src/jlm/core/ui/MainFrame.java
index 477102f..98e90f9 100644
--- a/src/jlm/core/ui/MainFrame.java
+++ b/src/jlm/core/ui/MainFrame.java
@@ -32,7 +32,6 @@ import jlm.core.GameListener;
 import jlm.core.GameStateListener;
 import jlm.core.HumanLangChangesListener;
 import jlm.core.ProgLangChangesListener;
-import jlm.core.model.FileUtils;
 import jlm.core.model.Game;
 import jlm.core.model.LessonLoadingException;
 import jlm.core.model.ProgrammingLanguage;
@@ -52,6 +51,7 @@ import jlm.core.ui.action.StartExecution;
 import jlm.core.ui.action.StepExecution;
 import jlm.core.ui.action.StopExecution;
 import jlm.core.ui.action.SwitchExo;
+import jlm.core.utils.FileUtils;
 import jlm.universe.World;
 
 import org.xnap.commons.i18n.I18n;
@@ -79,7 +79,7 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 
     private JMenu menuLanguage, menuLangHuman, menuLangProg;
     private JMenu menuHelp;
-    private JMenuItem miHelpLesson,miHelpWorld,miHelpAbout;
+    private JMenuItem miHelpFeedback, miHelpLesson,miHelpWorld,miHelpAbout;
         
 	private LoggerPanel outputArea;
 	private MissionEditorTabs met;
@@ -140,7 +140,7 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 
 		pack();
 		setSize(1024, 768);
-		setVisible(true);
+		setVisible(false);
 	}
 
 	private void initMenuBar(Game g) {
@@ -181,7 +181,8 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 
 			@Override
 			public void actionPerformed(ActionEvent e) {
-				game.switchLesson("lessons.chooser");
+				new LessonChooser();
+				MainFrame.getInstance().setVisible(false);		
 			}
 		});
 		miFileSwitch.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_L, ActionEvent.CTRL_MASK));
@@ -301,6 +302,16 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 		menuHelp.setMnemonic(KeyEvent.VK_H);
 		menuBar.add(menuHelp);
 
+		miHelpFeedback = new JMenuItem(new AbstractGameAction(g, i18n.tr("Provide feedback")) {
+			private static final long serialVersionUID = 1L;
+
+			public void actionPerformed(ActionEvent arg0) {
+				FeedbackDialog.getInstance().setVisible(true);
+			}			
+		});
+		miHelpFeedback.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_BACK_SPACE, ActionEvent.CTRL_MASK));
+		menuHelp.add(miHelpFeedback);
+		
 		miHelpLesson = new JMenuItem(new AbstractGameAction(g, i18n.tr("About this lesson")) {
 			private static final long serialVersionUID = 1L;
 			private AbstractAboutDialog dialog = null;
@@ -363,34 +374,34 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 		toolBar.setBorder(BorderFactory.createEtchedBorder());
 
 		ImageIcon ii = ResourcesCache.getIcon("img/btn-start.png");
-		startButton = new PropagatingButton(new StartExecution(g, "RunButton", ii));
+		startButton = new PropagatingButton(new StartExecution(g, i18n.tr("Run"), ii));
 		//shortcut ctrl-r
 		startButton.setMnemonic(KeyEvent.VK_R);
 
-		debugButton = new PropagatingButton(new StepExecution(g, "StepButton", 
+		debugButton = new PropagatingButton(new StepExecution(g, i18n.tr("Step"), 
 				ResourcesCache.getIcon("img/btn-debug.png")));
 		//shortcut ctrl-b
 		debugButton.setMnemonic(KeyEvent.VK_B);
 
-		stopButton = new PropagatingButton(new StopExecution(g, "StopButton", 
+		stopButton = new PropagatingButton(new StopExecution(g, i18n.tr("Stop"), 
 				ResourcesCache.getIcon("img/btn-stop.png")));
 		//shortcut ctrl-s
 		stopButton.setMnemonic(KeyEvent.VK_S);
 		stopButton.setEnabled(false);
 
-		resetButton = new PropagatingButton(new Reset(g, "ResetButton", 
+		resetButton = new PropagatingButton(new Reset(g, i18n.tr("Reset"), 
 				ResourcesCache.getIcon("img/btn-reset.png")));
 		//shortcut ctrl-z
 		resetButton.setMnemonic(KeyEvent.VK_Z);
 		resetButton.setEnabled(true);
 
-		demoButton = new PropagatingButton(new PlayDemo(g, "DemoButton", 
+		demoButton = new PropagatingButton(new PlayDemo(g, i18n.tr("Demo"), 
 				ResourcesCache.getIcon("img/btn-demo.png")));
 		//shortcut ctrl-d
 		demoButton.setMnemonic(KeyEvent.VK_D);
 		demoButton.setEnabled(true);
 
-        helpMeButton = new PropagatingToggleButton(new HelpMe(g, "HelpButton",
+        helpMeButton = new PropagatingToggleButton(new HelpMe(g, i18n.tr("Call for Help"),
                 ResourcesCache.getIcon("img/btn-alert-off.png")));
 
 		toolBar.add(startButton);
@@ -402,7 +413,7 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 
         toolBar.addSeparator();
         
-        exoChangeButton = new PropagatingButton(new SwitchExo(g, "ExerciseButton", ResourcesCache.getIcon("img/btn-switch-exo.png")));
+        exoChangeButton = new PropagatingButton(new SwitchExo(g, i18n.tr("Switch exercise"), ResourcesCache.getIcon("img/btn-switch-exo.png")));
         toolBar.add(exoChangeButton);
         
 		getContentPane().add(toolBar, BorderLayout.NORTH);
@@ -655,6 +666,7 @@ public class MainFrame extends JFrame implements GameStateListener, GameListener
 		menuLangProg.setText(i18n.tr("Computer"));
 		
 		menuHelp.setText(i18n.tr("Help"));
+		miHelpFeedback.setText(i18n.tr("Provide feedback"));
 		miHelpLesson.setText(i18n.tr("About this lesson"));
 		miHelpWorld.setText(i18n.tr("About this world"));
 		if (miHelpAbout != null)
diff --git a/src/jlm/core/ui/MissionEditorTabs.java b/src/jlm/core/ui/MissionEditorTabs.java
index 1f8ca8f..41218d6 100644
--- a/src/jlm/core/ui/MissionEditorTabs.java
+++ b/src/jlm/core/ui/MissionEditorTabs.java
@@ -78,7 +78,7 @@ public class MissionEditorTabs extends JTabbedPane implements GameListener, Prog
 						if (Game.getInstance().isDebugEnabled()) 
 							System.out.println("Following a link to lesson: "+lessonName+( (exoName != null) ? "; exo: "+exoName : " (no exo specified)"));
 								
-						Lesson lesson = Game.getInstance().switchLesson(lessonName);
+						Lesson lesson = Game.getInstance().switchLesson(lessonName,false);
 						Game.getInstance().setCurrentLesson(lesson);
 						if (exoName != null && exoName.length()>0) {
 							Lecture lect = lesson.getExercise(exoName);
@@ -169,6 +169,7 @@ public class MissionEditorTabs extends JTabbedPane implements GameListener, Prog
 				setSelectedIndex(tabPosition);
 		}
 		/* Change the mission text, because the CSS changed */
+		missionTab.setEditorKit(new JlmHtmlEditorKit(game.getCurrentLesson().getCurrentExercise()));
 		missionTab.setText(this.game.getCurrentLesson().getCurrentExercise().getMission(newLang));
 		missionTab.setCaretPosition(0);
 	}
diff --git a/src/jlm/core/ui/ResourcesCache.java b/src/jlm/core/ui/ResourcesCache.java
index a13283d..a80a77a 100644
--- a/src/jlm/core/ui/ResourcesCache.java
+++ b/src/jlm/core/ui/ResourcesCache.java
@@ -9,7 +9,10 @@ import javax.swing.Icon;
 import javax.swing.ImageIcon;
 import javax.swing.UIManager;
 
+import jlm.core.model.Game;
 import jlm.core.model.Logger;
+import jlm.core.model.ProgrammingLanguage;
+import jlm.core.model.lesson.Exercise;
 
 public class ResourcesCache {
 	private static Hashtable<String, ImageIcon> iconsCache = new Hashtable<String, ImageIcon>();
@@ -31,14 +34,25 @@ public class ResourcesCache {
 	private static Boolean warnedAboutBrokenPath = false;
 	/**
 	 * Lazy loading of ImageIcon resources.
-	 * @param path of the image resource to be loaded. 
+	 * @param path of the image resource to be loaded.
 	 * @return the ImageIcon or a blank ImageIcon when resource is not found.
 	 */
 	public static ImageIcon getIcon(String path) {
+		return getIcon(path, false);
+	}
+	/**
+	 * Lazy loading of ImageIcon resources.
+	 * @param path of the image resource to be loaded.
+	 * @param okNull : whether it's ok to return null (useful to search for several paths) 
+	 * @return the ImageIcon or a blank ImageIcon when resource is not found.
+	 */
+	public static ImageIcon getIcon(String path, boolean okNull) {
 		if (!iconsCache.containsKey(path)) {
 			URL url = ResourcesCache.class.getClassLoader().getResource(path);
 			if (url == null) {
-				if (true || !warnedAboutBrokenPath) {
+				if (okNull) 
+					return null;
+				if (!warnedAboutBrokenPath) {
 					Logger.log("jlm.ui.ResourcesCache.getIcon()", "Cannot find path "+path+": classloader returned null.");
 					warnedAboutBrokenPath = true;
 				}
@@ -52,26 +66,11 @@ public class ResourcesCache {
 		return iconsCache.get(path);
 	}
 
-	public static ImageIcon getCombinedIcon(String path1, String path2) {
-		String path = path1+path2;
-		if (!iconsCache.containsKey(path)) {
-
-			ImageIcon img1 = getIcon(path1);			
-			ImageIcon img2 = getIcon(path2);
-			
-			int w = Math.max(img1.getIconWidth(), img2.getIconWidth());
-			int h = Math.max(img1.getIconHeight(), img2.getIconHeight());
-			BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
-			Graphics g = combined.getGraphics();
-			g.drawImage(img1.getImage(), 0, 0, null);
-			g.drawImage(img2.getImage(), 0, 0, null);
-			
-			iconsCache.put(path, new ImageIcon(combined));
-		}
-		return iconsCache.get(path);
+	public static ImageIcon getIcon(Object basePath, String path) {
+		String name = basePath.getClass().getPackage().getName().replaceAll("\\.", "/") 
+		        +"/"+path;
+		return getIcon(name);
 	}
-	
-	
 
 	public static int getBusyIconsSize() {
 		return ResourcesCache.busyIcons.length;
@@ -82,19 +81,45 @@ public class ResourcesCache {
 		return ResourcesCache.busyIcons[busyIconIndex];
 	}
 
-	public static ImageIcon getStarIcon(ImageIcon icon, String name) {
-		String path = name+"-star";
+	public static ImageIcon getStarredIcon(ImageIcon icon, Exercise exo) {
+		String path = exo.getWorld(0).getView().getClass().getCanonicalName();
+		for (ProgrammingLanguage lang : exo.getProgLanguages()) {
+			if (Game.getInstance().studentWork.getPassed(exo, lang))
+				path += "_"+lang.getLang()+"ok";
+			else 
+				path += "_"+lang.getLang()+"nok";
+		}
 		if (!iconsCache.containsKey(path)) {
-
-			ImageIcon img1 = icon;			
-			ImageIcon img2 = getIcon("resources/star.png");
-			
-			int w = Math.max(img1.getIconWidth(), img2.getIconWidth());
-			int h = Math.max(img1.getIconHeight(), img2.getIconHeight());
-			BufferedImage combined = new BufferedImage(w, h, BufferedImage.TYPE_INT_ARGB);
-			Graphics g = combined.getGraphics();
-			g.drawImage(img1.getImage(), 0, 0, null);
-			g.drawImage(img2.getImage(), 0, 0, null);
+			BufferedImage combined;
+			if (exo.getProgLanguages().contains(Game.LIGHTBOT)) {
+				combined = new BufferedImage(icon.getIconWidth(), icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
+				Graphics g = combined.getGraphics();
+				g.drawImage(icon.getImage(), 0, 0, null);
+				
+				ImageIcon star = getIcon("resources/star.png");
+				ImageIcon starNo = getIcon("resources/star_white.png");
+				if (Game.getInstance().studentWork.getPassed(exo, Game.LIGHTBOT))  
+					g.drawImage(star.getImage(), 0, 0, null);
+				else 
+					g.drawImage(starNo.getImage(), 0, 0, null);
+				
+			} else {
+				combined = new BufferedImage(icon.getIconWidth()+10, icon.getIconHeight(), BufferedImage.TYPE_INT_ARGB);
+				Graphics g = combined.getGraphics();
+				g.drawImage(icon.getImage(), 0, 0, null);
+				
+				if (Game.getInstance().studentWork.getPassed(exo, Game.JAVA)) { 
+					g.drawImage(Game.JAVA.getIcon().getImage(), 26, 0, null);
+				} else {
+					//g.drawImage(getIcon("img/lang_java_no.png").getImage(), 26,0,null);
+				}
+				if (Game.getInstance().studentWork.getPassed(exo, Game.PYTHON)) { 
+					g.drawImage(Game.PYTHON.getIcon().getImage(), 26, 16, null);
+				} else {
+					//	g.drawImage(getIcon("img/lang_python_no.png").getImage(), 26,16,null);
+				}
+				
+			}
 			
 			iconsCache.put(path, new ImageIcon(combined));
 		}
diff --git a/src/jlm/core/ui/StatusBar.java b/src/jlm/core/ui/StatusBar.java
index ce96021..694dfad 100644
--- a/src/jlm/core/ui/StatusBar.java
+++ b/src/jlm/core/ui/StatusBar.java
@@ -109,10 +109,6 @@ public class StatusBar extends JPanel implements GameListener,GameStateListener,
 	@Override
 	public void stateChanged(Game.GameState type) {
 		switch (type) {
-		case LOADING:
-			statusMessageLabel.setText(i18n.tr("Loading"));
-			busyIconTimer.start();
-			break;
 		case SAVING:
 			statusMessageLabel.setText(i18n.tr("Saving"));
 			busyIconTimer.start();
@@ -139,6 +135,10 @@ public class StatusBar extends JPanel implements GameListener,GameStateListener,
 			game.statusRootSet(i18n.tr("Playing demo "));
 			busyIconTimer.start();
 			break;		
+		case LOADING:
+			game.statusRootSet(i18n.tr("Loading "));
+			busyIconTimer.start();
+			break;
 		default:
 			statusMessageLabel.setText("");
 			statusAnimationLabel.setIcon(ResourcesCache.getIcon("img/busyicon/idle.png"));
@@ -146,8 +146,10 @@ public class StatusBar extends JPanel implements GameListener,GameStateListener,
 	}
 
 	@Override
-	public void stateChanged(String txt) {
-		statusMessageLabel.setText(txt);		
+	public void stateChanged(final String txt) {
+		statusMessageLabel.setText(txt);
+		//RepaintManager.currentManager(statusMessageLabel).markCompletelyDirty(statusMessageLabel);
+		//RepaintManager.currentManager(statusMessageLabel).paintDirtyRegions();
 	}
 
 	public void setupLanguages(Lecture lecture) {
diff --git a/src/jlm/core/ui/WorldView.java b/src/jlm/core/ui/WorldView.java
index d9b1223..22494e8 100644
--- a/src/jlm/core/ui/WorldView.java
+++ b/src/jlm/core/ui/WorldView.java
@@ -1,6 +1,5 @@
 package jlm.core.ui;
 
-import javax.swing.ImageIcon;
 import javax.swing.JComponent;
 import javax.swing.SwingUtilities;
 
@@ -59,7 +58,4 @@ public abstract class WorldView extends JComponent  implements IWorldView {
 	public String getTip() {
 		return "";
 	}
-
-	public abstract ImageIcon getIcon();
-
 }
diff --git a/src/jlm/core/ui/action/HelpMe.java b/src/jlm/core/ui/action/HelpMe.java
index 7cc5667..65b4fa5 100644
--- a/src/jlm/core/ui/action/HelpMe.java
+++ b/src/jlm/core/ui/action/HelpMe.java
@@ -5,11 +5,11 @@ import java.awt.event.ActionEvent;
 import javax.swing.ImageIcon;
 import javax.swing.JToggleButton;
 
-import jlm.core.model.FileUtils;
 import jlm.core.model.Game;
 import jlm.core.model.HelpAppEngine;
 import jlm.core.model.HelpServer;
 import jlm.core.ui.ResourcesCache;
+import jlm.core.utils.FileUtils;
 
 import org.xnap.commons.i18n.I18n;
 import org.xnap.commons.i18n.I18nFactory;
diff --git a/src/jlm/core/utils/ColorMapper.java b/src/jlm/core/utils/ColorMapper.java
new file mode 100644
index 0000000..9fd15a8
--- /dev/null
+++ b/src/jlm/core/utils/ColorMapper.java
@@ -0,0 +1,48 @@
+package jlm.core.utils;
+
+import java.awt.Color;
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
+
+public class ColorMapper {
+	static String[] choices = {
+		"white","black","blue","cyan","darkGray","gray","green","lightGray","magenta","orange","pink","red","yellow"};
+	static Color[] colors = {
+		Color.white,Color.black,Color.blue,Color.cyan,Color.darkGray,Color.gray,Color.green,Color.lightGray,Color.magenta,Color.orange,Color.pink,Color.red,Color.yellow};
+	static Pattern colorName = Pattern.compile("(\\d+)/(\\d+)/(\\d+)");
+
+	public static Color name2color(String name) throws InvalidColorNameException {
+		for (int i=0; i<choices.length; i++) 
+			if (choices[i].equalsIgnoreCase(name))
+				return colors[i];
+		Matcher m = colorName.matcher(name);
+		if (m.matches()) {
+			try {
+				int r=Integer.parseInt( m.group(1) );
+				int g=Integer.parseInt( m.group(2) );
+				int b=Integer.parseInt( m.group(3) );
+				
+				if (r<0 || r>255) 
+					throw new InvalidColorNameException("Name "+name+" is not a valid color name: Red value is not between 0 and 255");
+				if (g<0 || g>255) 
+					throw new InvalidColorNameException("Name "+name+" is not a valid color name: Green value is not between 0 and 255");
+				if (b<0 || b>255) 
+					throw new InvalidColorNameException("Name "+name+" is not a valid color name: Blue value is not between 0 and 255");
+					
+				return new Color(r,g,b);
+			} catch (NumberFormatException nfe) {
+				throw new InvalidColorNameException("Name "+name+" is not a valid color name since one of its component is not a number",nfe);
+			}
+		} else {
+			throw new InvalidColorNameException("Name "+name+" is not a valid color name");
+		}
+	}
+	
+	public static String color2name(Color c) {
+		for (int i=0; i<choices.length; i++) 
+			if (colors[i].equals(c))
+				return choices[i];
+		return c.getRed()+"/"+c.getGreen()+"/"+c.getBlue();
+	}
+}
diff --git a/src/jlm/core/utils/FileUtils.java b/src/jlm/core/utils/FileUtils.java
new file mode 100644
index 0000000..b75da40
--- /dev/null
+++ b/src/jlm/core/utils/FileUtils.java
@@ -0,0 +1,135 @@
+package jlm.core.utils;
+
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileNotFoundException;
+import java.io.FileReader;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.UnsupportedEncodingException;
+import java.util.Locale;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+
+/** This class is in charge of loading the resources from disk into memory
+ * 
+ * 	It solves 2 main difficulties. The first one is to find the files in any case, be 
+ *  them in the distributed jar file, or on the disk (as it happens when we develop JLM: 
+ *  we don't build a jar for each run, we directly from our source tree). It also deals 
+ *  with the windows/unix incompatibilities about directory separators (/ or \).
+ * 
+ *  The second problem it deals with is about translations. When looking for a help file, 
+ *  it first search for a suitable translated version. If not found, it fallbacks to the 
+ *  English version. This is done through the locale static variable. Yeah, that's not 
+ *  clean but it just works.
+ */
+public class FileUtils {
+	private static Locale locale;
+	
+	private final static String[] directories = { "", "lib/", "src/" };                
+
+	
+	/** Specifies the locale that we have to use when looking for translated files */
+	public static void setLocale(Locale l) {
+		locale = l;
+	}
+	public static Locale getLocale() {
+		return locale==null?new Locale("en"):locale;
+	}
+	
+	public static BufferedReader newFileReader(String file, String extension, boolean translatable) throws FileNotFoundException, UnsupportedEncodingException {
+		/* first check if we can find it unmodified */
+		int i = 0;
+		if (!translatable) { // extension is ignored in this case. That's useful to get it from a file chooser
+			while (i<directories.length) {
+				if ((new File(directories[i] + file)).exists()) {
+					return new BufferedReader(new FileReader(directories[i] + file));
+				} else {
+					i++;
+				}   	
+			}
+		}
+		
+		if (translatable && locale == null)
+			throw new RuntimeException("locale is null: you cannot request for translated material (yet)");
+		
+		/* Build the list of filenames we will iterate (translated if any, and raw) */
+		String[] fileNames;
+		if (translatable && ! locale.getLanguage().equals("en")) {
+			fileNames = new String[] {
+					file.replace('.', '/') + "." + locale.getLanguage(),
+					file.replace('.', '/')
+			};
+		} else { // not translatable, or currently in English: only search for non-translated form
+				fileNames = new String[] {
+						file.replace('.', '/')
+				};
+		}
+		/* Do that iteration */
+		for (String fileName : fileNames ) {        
+			/* change class name to directories */
+			fileName = fileName + (extension != null ? "." + extension : "");
+			
+			i = 0;
+			while (i<directories.length) {
+				if ((new File(directories[i] + fileName)).exists()) {
+					return new BufferedReader(new FileReader(directories[i] + fileName));
+				} else {
+					i++;
+				}   	
+			}
+        
+			// external HTML file of this exercise not found on file system. Try as resource, in case we are in a jar file
+			String resourceName =  "/"+fileName;
+        	resourceName = resourceName.replace('\\', '/'); /* just in case we were passed a windows path */
+
+        	InputStream s = ExerciseTemplated.class.getResourceAsStream(resourceName);
+        	if (s == null) 
+        		continue; // test next name in the list
+
+        	BufferedReader br = null;
+        	try {
+        		br = new BufferedReader(new InputStreamReader(s, "UTF-8"));
+        	} catch (UnsupportedEncodingException e1) {
+        		e1.printStackTrace();
+        		System.err.println("File encoding of " + fileName + " is not supported on this platform (please report this bug)");
+        		//return null;
+        		throw e1;
+        		//throw new FileNotFoundException(file + "with extension " + extension + " is encoded in an unsupported encoding.");
+        	}
+        	if (br != null) 
+				return br;
+        }
+		// file not found, give up. No logs here, as it is ok that some entities do not exist in some languages
+		if (extension == null)
+			throw new FileNotFoundException(file + " (without extension) could not be found.");
+		throw new FileNotFoundException(file + " with extension " + extension + " could not be found.");
+	}	
+	
+	public static StringBuffer readContentAsText(String file, String extension, boolean translatable) throws FileNotFoundException, UnsupportedEncodingException {
+		BufferedReader br = FileUtils.newFileReader(file, extension, translatable);
+		String newLine = System.getProperty("line.separator");
+		
+		StringBuffer sb = new StringBuffer();
+		try {
+			String s;
+			s = br.readLine();
+			while (s != null) {
+				sb.append(s);
+				sb.append(newLine);
+				s = br.readLine();
+			}
+			
+		} catch (IOException e) {
+			e.printStackTrace();			
+		} finally {
+			try {
+				br.close();
+			} catch (IOException e) {
+				e.printStackTrace();
+			}
+		}
+		return sb;
+	}
+}
diff --git a/src/jlm/core/utils/InvalidColorNameException.java b/src/jlm/core/utils/InvalidColorNameException.java
new file mode 100644
index 0000000..ff3fd8a
--- /dev/null
+++ b/src/jlm/core/utils/InvalidColorNameException.java
@@ -0,0 +1,11 @@
+package jlm.core.utils;
+
+public class InvalidColorNameException extends Exception {
+	private static final long serialVersionUID = 1L;
+	public InvalidColorNameException(String msg){
+		super(msg);
+	}
+	public InvalidColorNameException(String msg, Exception e) {
+		super(msg,e);
+	}
+}
diff --git a/src/jlm/universe/Entity.java b/src/jlm/universe/Entity.java
index 6ad1eae..0f05255 100644
--- a/src/jlm/universe/Entity.java
+++ b/src/jlm/universe/Entity.java
@@ -29,11 +29,11 @@ import org.python.core.PyTraceback;
 public abstract class Entity {
 	protected String name;
 	protected World world;
-	
+
 	private Semaphore oneStepSemaphore = new Semaphore(0);
-	
+
 	public Entity() {}
-	
+
 	public Entity(String name) {
 		this.name=name;
 	}
@@ -44,7 +44,7 @@ public abstract class Entity {
 			world.addEntity(this);
 		}
 	}
-	
+
 	public String getName() {
 		return this.name;
 	}
@@ -52,7 +52,7 @@ public abstract class Entity {
 	public void setName(String name) {
 		this.name = name;
 	}	
-	
+
 	public World getWorld() {
 		return world;
 	}
@@ -96,7 +96,7 @@ public abstract class Entity {
 			}
 		}		
 	}
-	
+
 	/** Copy fields of the entity passed in argument */
 	public void copy(Entity other) {
 		setName(other.getName());
@@ -105,7 +105,7 @@ public abstract class Entity {
 	/** Copy constructor */
 	public abstract Entity copy();
 
-	
+
 	/* Stuff related to tracing mechanism.
 	 * 
 	 * This is the ability to highlight the current instruction in step-by-step execution. 
@@ -127,7 +127,7 @@ public abstract class Entity {
 	public StackTraceElement[] getCurrentStack() {
 		return Thread.currentThread().getStackTrace();
 	}
-	
+
 	/** Retrieve one parameter from the world */
 	public Object getParam(int i) {
 		return world.parameters[i];
@@ -135,6 +135,11 @@ public abstract class Entity {
 	protected int getParamsAmount() {
 		return world.parameters.length;
 	}
+	
+	/** Returns whether this is the entity selected in the interface */
+	public boolean isSelected() {
+		return this == Game.getInstance().getSelectedEntity();
+	}
 
 	/** Run this specific entity, encoding the student logic to solve a given exercise. 
 	 * 
@@ -144,7 +149,7 @@ public abstract class Entity {
 	 *    
 	 */
 	protected abstract void run() throws Exception;
-	
+
 	/** Make the entity run, according to the used universe and programming language.
 	 * 
 	 * This task is not trivial given that it depends on the universe and the programming language:
@@ -166,115 +171,138 @@ public abstract class Entity {
 	public void runIt(ExecutionProgress progress) {
 		ProgrammingLanguage progLang = Game.getProgrammingLanguage();
 		ScriptEngine engine ;
-		try {
-			if (progLang.equals(Game.JAVA)||progLang.equals(Game.LIGHTBOT)) {
+		if (progLang.equals(Game.JAVA)||progLang.equals(Game.LIGHTBOT)) {
+			try {
 				run();
-			} else {
+			} catch (Exception e) {
+				String msg = Game.i18n.tr("The execution of your program raised an exception: {0}\n" + 
+						" Please fix your code.\n",e.getLocalizedMessage());
+
+				System.err.println(msg);
+				progress.setCompilationError(msg);
+				e.printStackTrace();
+			}
+		} else {
+			try {
 				/* We could try to optimize here by not starting one engine for each entity but only one per language, in which the entities would be in separate contexts. 
 				 * On the other hand, the garbage collection would be harder this way and it works as is... */
 				ScriptEngineManager manager = new ScriptEngineManager();       
 				engine = manager.getEngineByName(progLang.getLang().toLowerCase());
 				if (engine==null) 
-					throw new RuntimeException("Failed to start an interpreter for "+progLang.getLang().toLowerCase());
+					throw new RuntimeException(Game.i18n.tr("Failed to start an interpreter for {0}",progLang.getLang().toLowerCase()));
 
 				/* Inject the entity into the scripting world so that it can forward script commands to the world */
 				engine.put("entity", this);
 				/* Inject commands' wrappers that forward the calls to the entity */
 				this.getWorld().setupBindings(progLang,engine);
-				
+
 				if (progLang.equals(Game.PYTHON)) 
 					engine.eval(
 							/* getParam is in every Entity, so put it here to not request the universe to call super.setupBinding() */
 							"def getParam(i):\n"+
-							"  return entity.getParam(i)\n"+
-									
-							/* Ugly hack, but print is currently not working! Ugh, taste my axe, bastard! */
-							"import java.lang.System.err\n"+
-							"def log(a):\n"+
-							"  java.lang.System.err.print(\"%s: %s\" %(entity.getName(),a))");									
-					
-				
+							"  return entity.getParam(i)\n" +
+							"def isSelected():\n" +
+							"  return entity.isSelected()\n");									
+
+
 				String script = getScript(progLang);
-				
+
 				if (Game.getInstance().isDebugEnabled())
 					System.err.println("Here is the script >>>>"+script+"<<<<");
-				
+
 				if (script == null) 
-					System.err.println("No "+progLang+" script source for entity "+this);
-				else 
-					engine.eval(script);
-			}
-		} catch (ScriptException e) {
-			if (e.getCause() instanceof PyException) { // This seem to be all exceptions raised by python
-				PyException cause = (PyException) e.getCause();
-				
-				StringBuffer msg = new StringBuffer();
-	
-				if (Game.getInstance().isDebugEnabled()) {
-					System.err.println("CAUSE: "+cause.value.toString());
-					System.err.println("MSG: "+e.getMessage());
-					System.err.println("BT: "+msg);
+					System.err.println(Game.i18n.tr("No {0} script source for entity {1}. Please report that bug against JLM.",progLang,this));
+				else {
+					/* that's not really clean to get the output working when we 
+					 * redirect to the graphical console, but it works. */
+					setScriptOffset(progLang, getScriptOffset(progLang)+7);
+					engine.eval(
+							"import sys;\n" +
+									"import java.lang;\n" +
+									"class JLMOut:\n" +
+									"  def write(obj,msg):\n" +
+									"    java.lang.System.out.print(str(msg))\n" +
+									"sys.stdout = JLMOut()\n"+
+									"sys.stderr = JLMOut()\n"+
+									script);
 				}
-				
-				//if (__builtin__.isinstance(cause.value, Py.SyntaxError)) {
-				//	System.err.println("cleanly found a syntaxerror");
-				//}
-				
-				if (cause.type.toString().equals("<type 'exceptions.SyntaxError'>")) {
-					msg.append("Syntax error at line "+((cause.value.__findattr__("lineno").asInt())-getScriptOffset(Game.PYTHON))
-							+": "+cause.value.__findattr__("msg")+"\n");
-					msg.append("In doubt, check your indentation, and that you don't mix tabs and spaces\n");
-					
-				} else { /* It makes sense to display a backtrace for any errors but syntax ones */
-					
-					if (cause.type.toString().equals("<type 'exceptions.NameError'>")) {
-						msg.append("NameError raised: You seem to use a non-existent identifier; Please check for typos\n");
-						msg.append(cause.value+"\n");
-					} else if (cause.type.toString().equals("<type 'exceptions.TypeError'>")) {
-						msg.append("TypeError raised: you are probably misusing a function or something.\n");
-						msg.append(cause.value+"\n");
-						
-						/* FIXME: how could we factorize the world's error? */ 
-					} else if (cause.type.toString().equals("<type 'jlm.universe.bugglequest.exception.NoBaggleUnderBuggleException'>")) {
-						msg.append("Error: there is no baggle to pickup under the buggle");
-					} else if (cause.type.toString().equals("<type 'jlm.universe.bugglequest.exception.AlreadyHaveBaggleException'>")) {
-						msg.append("Error: a buggle cannot carry more than one baggle at the same time");
-					} else if (cause.type.toString().equals("<type 'jlm.universe.bugglequest.exception.BuggleInOuterSpaceException'>")) {
-						msg.append("Error: your buggle just teleported to the outer space...");
-					} else if (cause.type.toString().equals("<type 'jlm.universe.bugglequest.exception.BuggleWallException'>")) {
-						msg.append("Error: your buggle just hit a wall. That hurts.");
-						
-					} else {
-						msg.append("Unknown error (please report): "+cause.type.toString()+"\n");
-						msg.append("Its value is: "+cause.value+"\n");
+			} catch (ScriptException e) {
+				if (e.getCause() instanceof PyException) { // This seem to be all exceptions raised by python
+					PyException cause = (PyException) e.getCause();
 
-					}
-				
+					StringBuffer msg = new StringBuffer();
+
+					if (cause.type.toString().equals("<type 'exceptions.SyntaxError'>")) {
+						msg.append(Game.i18n.tr("Syntax error at line {0}: {1}\n" +
+								"In doubt, check your indentation, and that you don't mix tabs and spaces\n",
+								((cause.value.__findattr__("lineno").asInt())-getScriptOffset(Game.PYTHON)),
+								cause.value.__findattr__("msg")));
+
+					} else { /* It makes sense to display a backtrace for any errors but syntax ones */
+
+						if (cause.type.toString().equals("<type 'exceptions.NameError'>")) {
+							msg.append(Game.i18n.tr("NameError raised: You seem to use a non-existent identifier; Please check for typos\n"));
+							msg.append(cause.value+"\n");
+						} else if (cause.type.toString().equals("<type 'exceptions.TypeError'>")) {
+							msg.append(Game.i18n.tr("TypeError raised: you are probably misusing a function or something.\n"));
+							msg.append(cause.value+"\n");
+						} else if (cause.type.toString().equals("<type 'exceptions.UnboundLocalError'>")) {
+							msg.append(Game.i18n.tr("UnboundLocalError raised: you are probably using a global variable that is not declared as such.\n"));
+							msg.append(cause.value+"\n");
+
+
+							/* FIXME: how could we factorize the world's error? */ 
+						} else if (cause.type.toString().equals("<type 'jlm.universe.bugglequest.exception.NoBaggleUnderBuggleException'>")) {
+							msg.append(Game.i18n.tr("Error: there is no baggle to pickup under the buggle"));
+						} else if (cause.type.toString().equals("<type 'jlm.universe.bugglequest.exception.AlreadyHaveBaggleException'>")) {
+							msg.append(Game.i18n.tr("Error: a buggle cannot carry more than one baggle at the same time"));
+						} else if (cause.type.toString().equals("<type 'jlm.universe.bugglequest.exception.BuggleInOuterSpaceException'>")) {
+							msg.append(Game.i18n.tr("Error: your buggle just teleported to the outer space..."));
+						} else if (cause.type.toString().equals("<type 'jlm.universe.bugglequest.exception.BuggleWallException'>")) {
+							msg.append(Game.i18n.tr("Error: your buggle just hit a wall. That hurts."));
 
-					/* The following is very inspired from <jython>/src/org/python/core/PyTraceback.java, 
-					 * even if we cannot reuse directly this implementation since we want to change all linenos on the fly. 
-					 */
-					PyTraceback tb = cause.traceback;
-					while (tb != null) {
-						tb.tb_lineno-= getScriptOffset(Game.PYTHON);
-						if (tb.tb_frame == null || tb.tb_frame.f_code == null) {
-							msg.append(String.format("  (no code object) at line %s\n", tb.tb_lineno));
 						} else {
-							msg.append(String.format("  File \"%.500s\", line %d, in %.500s\n",
-									tb.tb_frame.f_code.co_filename, tb.tb_lineno, tb.tb_frame.f_code.co_name));
+							msg.append(Game.i18n.tr("Unknown error (please report): {0}\nIts value is: {1}",
+									cause.type.toString(),cause.value+"\n"));
+
 						}
-						tb = (PyTraceback) tb.tb_next;
+
+
+						/* The following is very inspired from <jython>/src/org/python/core/PyTraceback.java, 
+						 * even if we cannot reuse directly this implementation since we want to change all linenos on the fly. 
+						 */
+						PyTraceback tb = cause.traceback;
+						while (tb != null) {
+							tb.tb_lineno-= getScriptOffset(Game.PYTHON);
+							if (tb.tb_frame == null || tb.tb_frame.f_code == null) {
+								msg.append(String.format("  (no code object) at line %s\n", tb.tb_lineno));
+							} else {
+								msg.append(String.format("  File \"%.500s\", line %d, in %.500s\n",
+										tb.tb_frame.f_code.co_filename, tb.tb_lineno, tb.tb_frame.f_code.co_name));
+							}
+							tb = (PyTraceback) tb.tb_next;
+						}
+					}				
+
+					if (Game.getInstance().isDebugEnabled()) {
+						System.err.println("CAUSE: "+cause.value.toString());
+						System.err.println("MSG: "+e.getMessage());
+						System.err.println("BT: "+msg);
 					}
-				}				
-				progress.setCompilationError(msg.toString());
-			}
-		} catch (Exception e) {
-			String msg = "Script evaluation raised an exception that is not a ScriptEsception but a "+e.getClass()
-							+".\n Please report this as a bug against JLM, with all details allowing to reproduce it.";
 
-			System.err.println(msg);
-			progress.setCompilationError(msg);
-			e.printStackTrace();
+					progress.setCompilationError(msg.toString());
+				}
+			} catch (Exception e) {
+				String msg = Game.i18n.tr("Script evaluation raised an exception that is not a ScriptException but a {0}.\n"+
+						" Please report this as a bug against JLM, with all details allowing to reproduce it.\n" +
+						"Exception message: {1}",e.getClass(),e.getLocalizedMessage());
+				for (StackTraceElement elm : e.getStackTrace()) 
+					msg += elm.toString();
+				
+				System.err.println(msg);
+				progress.setCompilationError(msg);
+				e.printStackTrace();
+			}
 		}
 
 	}
@@ -286,7 +314,7 @@ public abstract class Entity {
 	public String getScript(ProgrammingLanguage lang) {
 		return script.get(lang);
 	}
-	
+
 	private Map<ProgrammingLanguage,Integer> scriptOffset = new HashMap<ProgrammingLanguage, Integer>(); /* the offset to apply to error messages */
 	public void setScriptOffset(ProgrammingLanguage lang, int offset) {
 		scriptOffset.put(lang,  offset);
diff --git a/src/jlm/universe/EntityControlPanel.java b/src/jlm/universe/EntityControlPanel.java
index 11cb1bf..7d457b2 100644
--- a/src/jlm/universe/EntityControlPanel.java
+++ b/src/jlm/universe/EntityControlPanel.java
@@ -17,5 +17,6 @@ public abstract class EntityControlPanel extends JPanel implements HumanLangChan
 	public I18n i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",Game.getInstance().getLocale(), I18nFactory.FALLBACK);
 	
 	public void currentHumanLanguageHasChanged(Locale newLang) {
+		i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",newLang, I18nFactory.FALLBACK);
 	}
 }
diff --git a/src/jlm/universe/GridWorld.java b/src/jlm/universe/GridWorld.java
index 7a1a8de..4d349ef 100644
--- a/src/jlm/universe/GridWorld.java
+++ b/src/jlm/universe/GridWorld.java
@@ -33,7 +33,41 @@ public abstract class GridWorld extends World {
 		this.sizeX = width;
 		this.sizeY = height;
 		this.cells = new GridWorldCell[sizeX][sizeY];
+		for (int i = 0; i < sizeX; i++)
+			for (int j = 0; j < sizeY; j++)
+				setCell(newCell(i, j), i, j) ;
+	}
+	protected abstract GridWorldCell newCell(int x, int y);
+	
+	public void setWidth(int width) {
+		GridWorldCell[][] oldCells = cells;
+		this.cells = new GridWorldCell[width][sizeY];
+		for (int i = 0; i< Math.min(width, sizeX); i++) 
+			for (int j = 0; j < sizeY; j++)
+				cells[i][j] = oldCells[i][j];
+		
+		if (width>sizeX) // need to increase the table size
+			for (int i = sizeX; i< width; i++) 
+				for (int j = 0; j < sizeY; j++)
+					cells[i][j] = newCell(i, j);
+			
+		sizeX = width;
 	}
+
+	public void setHeight(int height) {
+		GridWorldCell[][] oldCells = cells;
+		this.cells = new GridWorldCell[sizeX][height];
+		for (int i = 0; i< sizeX; i++)  {
+			for (int j = 0; j < Math.min(height, sizeY); j++)
+				cells[i][j] = oldCells[i][j];
+			if (height>sizeY) // need to increase the table size
+				for (int j = sizeY; j < height; j++)
+					cells[i][j] = newCell(i, j);
+		}
+		
+		sizeY = height;
+	}
+
 	
 	public GridWorldCell getCell(int x, int y) {
 		return this.cells[x][y];
diff --git a/src/jlm/universe/World.java b/src/jlm/universe/World.java
index c92d572..a837c28 100644
--- a/src/jlm/universe/World.java
+++ b/src/jlm/universe/World.java
@@ -11,12 +11,13 @@ import javax.script.ScriptEngine;
 import javax.script.ScriptException;
 import javax.swing.ImageIcon;
 
-import jlm.core.model.FileUtils;
 import jlm.core.model.Game;
 import jlm.core.model.Logger;
 import jlm.core.model.ProgrammingLanguage;
 import jlm.core.model.lesson.ExecutionProgress;
+import jlm.core.ui.JlmHtmlEditorKit;
 import jlm.core.ui.WorldView;
+import jlm.core.utils.FileUtils;
 
 import org.xnap.commons.i18n.I18n;
 import org.xnap.commons.i18n.I18nFactory;
@@ -104,6 +105,11 @@ public abstract class World {
 		entities.add(b);
 		notifyEntityUpdateListeners();
 	}
+	public void removeEntity(Entity b) {
+		if (!entities.remove(b)) 
+			System.out.println("Ignoring a request to remove an unknown entity");
+		notifyEntityUpdateListeners();		
+	}
 
 	public void emptyEntities() {
 		entities = new ArrayList<Entity>();
@@ -194,7 +200,13 @@ public abstract class World {
 	}
 
 	/* IO related */
-	public void readFromFile(String path) throws IOException, BrokenWorldFileException {}
+	/** Returns whether this universe implements world I/O */
+	public boolean haveIO() { 
+		return false; 
+	}
+	public World readFromFile(String path) throws IOException, BrokenWorldFileException {
+		throw new RuntimeException("This universe does not implement world I/O");
+	}
 
 	public void writeToFile(BufferedWriter f) throws IOException {}
 
@@ -221,11 +233,6 @@ public abstract class World {
 			public boolean isWorldCompatible(World world) {
 				return false;
 			}
-			
-			@Override
-			public ImageIcon getIcon() {
-				return null;
-			}
 		};
 	}
 	public EntityControlPanel getEntityControlPanel() {
@@ -236,6 +243,8 @@ public abstract class World {
 			}
 		};
 	}
+	public abstract ImageIcon getIcon();
+
 
 	@Override
 	public int hashCode() {
@@ -252,7 +261,7 @@ public abstract class World {
 			return true;
 		if (obj == null)
 			return false;
-		if (getClass() != obj.getClass())
+		if ( !(obj instanceof World))
 			return false;
 		World other = (World) obj;
 		if (entities == null) {
@@ -268,15 +277,6 @@ public abstract class World {
 		return true;
 	}
 
-	final static String HTMLMissionHeader = "<head>\n" + "  <meta content=\"text/html; charset=UTF-8\" />\n"
-	+ "  <style>\n"
-	+ "    body { font-family: tahoma, \"Times New Roman\", serif; font-size:10px; margin:10px; }\n"
-	+ "    code { background:#EEEEEE; }\n" + "    pre { background: #EEEEEE;\n" + "          margin: 5px;\n"
-	+ "          padding: 6px;\n" + "          border: 1px inset;\n" + "          width: 640px;\n"
-	+ "          overflow: auto;\n" + "          text-align: left;\n"
-	+ "          font-family: \"Courrier New\", \"Courrier\", monospace; }\n"
-	+ "   .comment { background:#EEEEEE;\n" + "              font-family: \"Times New Roman\", serif;\n"
-	+ "              color:#00AA00;\n" + "              font-style: italic; }\n" + "  </style>\n" + "</head>\n";
 	String about = null;
 
 	public String getAbout() {
@@ -290,9 +290,9 @@ public abstract class World {
 				return about;
 			}
 			/* read it */
-			about = "<html>\n" + HTMLMissionHeader + "<body>\n" + sb.toString() + "</body>\n</html>\n";
+			about = sb.toString();
 		}
-		return about;
+		return "<html>\n" + JlmHtmlEditorKit.getCSS(Game.getProgrammingLanguage()) + "<body>\n" + about + "</body>\n</html>\n";
 	}
 	
 	/**
diff --git a/src/jlm/universe/array/ArrayEntity.java b/src/jlm/universe/array/ArrayEntity.java
deleted file mode 100644
index c89aff2..0000000
--- a/src/jlm/universe/array/ArrayEntity.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package jlm.universe.array;
-
-import jlm.universe.Entity;
-import jlm.universe.World;
-
-public class ArrayEntity extends Entity {
-
-	public int result = Integer.MIN_VALUE;
-	
-	public ArrayEntity() {
-		super();
-	}
-	
-	public ArrayEntity(String name, World w) {
-		super(name,w);
-	}
-	
-	public ArrayEntity(ArrayEntity other) {
-		super();
-		copy(other);
-	}
-
-	@Override
-	public Entity copy() {
-		ArrayEntity e = new ArrayEntity(this);
-		e.result = result;
-		return e;
-	}
-	
-	
-	@Override
-	public void copy(Entity o) {
-		super.copy(o);
-		ArrayEntity other = (ArrayEntity) o;
-		this.result = other.result;
-	}
-	
-
-	public int getResult() {
-		return this.result;
-	}
-	public void setResult(int r) {
-		result = r;
-	}
-	public int[] getValues() {
-		return ((ArrayWorld) world).getValues();
-	}
-	
-	@Override
-	public boolean equals(Object o) {
-		if (!(o instanceof ArrayEntity)) {
-			return false;
-		}
-		ArrayEntity other = (ArrayEntity) o;
-		return (this.result == other.result);
-	}
-	
-	@Override
-	public void run() {
-		// Child implement this
-	}
-
-
-}
diff --git a/src/jlm/universe/array/ArrayWorld.java b/src/jlm/universe/array/ArrayWorld.java
deleted file mode 100644
index a73c235..0000000
--- a/src/jlm/universe/array/ArrayWorld.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package jlm.universe.array;
-
-import java.util.Arrays;
-
-import javax.script.ScriptEngine;
-import javax.script.ScriptException;
-
-import jlm.core.model.Game;
-import jlm.core.model.ProgrammingLanguage;
-import jlm.core.ui.WorldView;
-import jlm.universe.World;
-
-public class ArrayWorld extends World {
-
-	protected int[] values;
-
-	public ArrayWorld(String name) {
-		super(name);
-	}
-
-	public ArrayWorld(String name, int size) {
-		super(name);
-		setDelay(50);
-		this.values = new int[size];
-	}	
-	
-	public ArrayWorld(ArrayWorld anotherWorld) {
-		super(anotherWorld);
-		//reset(anotherWorld);
-	}
-
-	@Override
-	public void reset(World w) {
-		ArrayWorld anotherWorld = (ArrayWorld) w;
-		this.values = new int[anotherWorld.values.length];
-		for (int i=0; i<anotherWorld.values.length; i++ ) {
-			this.values[i] = anotherWorld.values[i];
-		}
-		super.reset(anotherWorld);		
-	}
-	
-	@Override
-	public WorldView getView() {
-		return new ArrayWorldView(this);
-	}
-	
-	@Override
-	public boolean equals(Object o) {
-		if (! (o instanceof ArrayWorld)) {
-			return false;
-		}
-		ArrayWorld anotherWorld = (ArrayWorld) o;
-		return Arrays.equals(this.values, anotherWorld.values) && super.equals(o);
-	}
-	
-	public int[] getValues() {
-		return this.values;
-	}
-	
-	public void setValues(int[] newValues) {
-		this.values = newValues;
-	}
-	@Override
-	public void setupBindings(ProgrammingLanguage lang,ScriptEngine engine) throws ScriptException {
-		if (lang.equals(Game.PYTHON)) {
-			engine.eval(
-					"def getValues():\n"+
-					"	return entity.getValues()\n"+
-					"def setResult(i):\n"+
-					"	return entity.setResult(i)\n"
-					);
-		} else {
-			throw new RuntimeException("No binding of ArrayWorld for "+lang);
-		}
-	}
-
-	@Override
-	public String diffTo(World wrong) {
-		return toString()+" is not "+wrong.toString();
-	}
-	
-	public String toString() {
-		StringBuffer sb = new StringBuffer("[");
-		
-		for (Integer i : values)
-			sb.append(i+",");
-		sb.deleteCharAt(sb.length()-1);
-		sb.append("]->");
-		sb.append(((ArrayEntity)getEntity(0)).result);
-		
-		return sb.toString();
-	}
-	
-}
diff --git a/src/jlm/universe/array/ArrayWorldView.java b/src/jlm/universe/array/ArrayWorldView.java
deleted file mode 100644
index 4244392..0000000
--- a/src/jlm/universe/array/ArrayWorldView.java
+++ /dev/null
@@ -1,91 +0,0 @@
-package jlm.universe.array;
-
-import java.awt.Color;
-import java.awt.Font;
-import java.awt.FontMetrics;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.geom.Rectangle2D;
-
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
-import jlm.core.ui.WorldView;
-import jlm.universe.World;
-
-public class ArrayWorldView extends WorldView {
-
-		private static final long serialVersionUID = 1L;
-
-		public ArrayWorldView(World w) {
-			super(w);
-		}
-		
-		@Override
-		public void paintComponent(Graphics g) {
-			super.paintComponent(g);
-			Graphics2D g2 = (Graphics2D) g;
-			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-			g2.setColor(Color.white);
-			g2.fill(new Rectangle2D.Double(0.,0.,(double)getWidth(),(double)getHeight()));
-
-			int[] values = ((ArrayWorld) world).getValues();
-			int dx = 30; // 30 pixels square
-			
-			int cellsByLineCount = Math.min(getWidth() / dx, values.length);
-			int lineWidth = cellsByLineCount * dx;
-			int xorigin = (getWidth()-lineWidth) / 2;
-			int yorigin = 10;
-			
-			
-			//int rowHeight = (dx+5);
-			//g2.translate(Math.abs((getWidth() - lineWidth) / 2.), 
-			//		Math.abs(getHeight() - rowHeight*(1+(values.length % cellsByLineCount))) / 2.);
-			FontMetrics fm;
-
-			int x = xorigin;
-			int y = yorigin;
-			for (int i=0; i<values.length;  i++) {
-				if (x+dx > getWidth()) {
-					y += dx+20;
-					x = xorigin;
-				}
-				g2.setColor(Color.black);
-				g2.draw(new Rectangle2D.Double(x, 5+y, dx, dx));
-
-				g2.setFont(new Font("Monaco", Font.PLAIN, 9));
-				fm = g2.getFontMetrics();
-				String str = Integer.toString(i);
-				g2.drawString(str, x+(dx-fm.stringWidth(str))/2, y+(dx+fm.getHeight())+2);				
-				
-				g2.setColor(Color.blue);
-				g2.setFont(new Font("Monaco", Font.PLAIN, 14));
-				fm = g2.getFontMetrics();
-				str = Integer.toString(values[i]);
-				g2.drawString(str, x+(dx-fm.stringWidth(str))/2, y+(dx+fm.getHeight())/2+2);				
-				
-				
-				
-				
-				x += dx;
-			}
-	
-			g2.setColor(Color.red);
-			g2.setFont(new Font("Monaco", Font.PLAIN, 18));
-			fm = g2.getFontMetrics();
-
-			ArrayEntity e = (ArrayEntity) world.getEntity(0);			
-			int result = e.getResult();
-			String resultString = "value = "+((result == Integer.MIN_VALUE)?"n/a":Integer.toString(result));
-	
-			y = getHeight() - fm.getHeight();
-			x = (getWidth()-fm.stringWidth(resultString)) / 2 ;
-			g2.drawString(resultString, x, y);
-		}
-
-		@Override
-		public ImageIcon getIcon() {
-			return ResourcesCache.getIcon("img/world_arrays.png");
-		}
-}
diff --git a/src/jlm/universe/array/package-info.java b/src/jlm/universe/array/package-info.java
deleted file mode 100644
index 3415d94..0000000
--- a/src/jlm/universe/array/package-info.java
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- * Universe allowing introductionary exercises on arrays (seach min, seach max, etc).
- */
-package jlm.universe.array;
-
diff --git a/src/jlm/universe/bat/BatWorld.java b/src/jlm/universe/bat/BatWorld.java
index 098c4f2..61177ac 100644
--- a/src/jlm/universe/bat/BatWorld.java
+++ b/src/jlm/universe/bat/BatWorld.java
@@ -4,9 +4,11 @@ import java.util.List;
 import java.util.Vector;
 
 import javax.script.ScriptEngine;
+import javax.swing.ImageIcon;
 
 import jlm.core.model.Game;
 import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.World;
 
@@ -56,6 +58,10 @@ public class BatWorld extends World {
 	public WorldView getView() {
 		return new BatWorldView(this);
 	}
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_bat.png");
+	}
 	
 	/* So that the view can display them */
 	protected List<BatTest> getTests() {
diff --git a/src/jlm/universe/bat/BatWorldView.java b/src/jlm/universe/bat/BatWorldView.java
index 439a9b8..8700672 100644
--- a/src/jlm/universe/bat/BatWorldView.java
+++ b/src/jlm/universe/bat/BatWorldView.java
@@ -7,72 +7,64 @@ import java.awt.RenderingHints;
 import java.awt.geom.Rectangle2D;
 import java.util.List;
 
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.World;
 
 public class BatWorldView extends WorldView {
 
-		private static final long serialVersionUID = 1L;
-		
-		public BatWorldView(World w) {
-			super(w);
-		}
-		
-		@Override
-		public boolean isWorldCompatible(World world) {
-			return world instanceof BatWorld;
-		}
-	
-		@Override
-		public void paintComponent(Graphics g) {
-			
-			super.paintComponent(g);
-			
-			Graphics2D g2 = (Graphics2D) g;
-			g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-			g2.setColor(Color.white);
-			g2.fill(new Rectangle2D.Double(0.,0.,(double)getWidth(),(double)getHeight()));
-			
-			List<BatTest> tests = ((BatWorld) world).getTests();
-			boolean foundError=false;
-			for (int i=0;i<tests.size();i++) {
-				BatTest currTest = tests.get(i);
-				if (!currTest.isVisible() && foundError) 
-					break;
-				
-				if (currTest.isObjective()) {
+	private static final long serialVersionUID = 1L;
+
+	public BatWorldView(World w) {
+		super(w);
+	}
+
+	@Override
+	public boolean isWorldCompatible(World world) {
+		return world instanceof BatWorld;
+	}
+
+	@Override
+	public void paintComponent(Graphics g) {
+
+		super.paintComponent(g);
+
+		Graphics2D g2 = (Graphics2D) g;
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		g2.setColor(Color.white);
+		g2.fill(new Rectangle2D.Double(0.,0.,(double)getWidth(),(double)getHeight()));
+
+		List<BatTest> tests = ((BatWorld) world).getTests();
+		boolean foundError=false;
+		for (int i=0;i<tests.size();i++) {
+			BatTest currTest = tests.get(i);
+			if (!currTest.isVisible() && foundError) 
+				break;
+
+			if (currTest.isObjective()) {
+				if (currTest.isVisible()) 
+					g2.setColor(Color.black);
+				else 
+					g2.setColor(Color.white);
+			} else {
+				if (currTest.isAnswered()) {
+
+					if (currTest.isCorrect()) 
+						g2.setColor(Color.blue);
+					else { 
+						g2.setColor(Color.red);
+						foundError = true;
+					}
+				} else {
 					if (currTest.isVisible()) 
 						g2.setColor(Color.black);
 					else 
-						g2.setColor(Color.white);
-				} else {
-					if (currTest.isAnswered()) {
-						
-						if (currTest.isCorrect()) 
-							g2.setColor(Color.blue);
-						else { 
-							g2.setColor(Color.red);
-							foundError = true;
-						}
-					} else {
-						if (currTest.isVisible()) 
-							g2.setColor(Color.black);
-						else 
-							g2.setColor(Color.white);						
-					}
+						g2.setColor(Color.white);						
 				}
-				g2.drawString(currTest.getName()+"="+currTest.getResult()
-						+(currTest.isAnswered() && !currTest.isCorrect() ?" (expected: "+currTest.expected+")":"")
-						, 0, (i+1)*20);
 			}
-				
-		}
-		
-		@Override
-		public ImageIcon getIcon() {
-			return ResourcesCache.getIcon("img/world_bat.png");
+			g2.drawString(currTest.getName()+"="+currTest.getResult()
+					+(currTest.isAnswered() && !currTest.isCorrect() ?" (expected: "+currTest.expected+")":"")
+					, 0, (i+1)*20);
 		}
+
+	}
 }
diff --git a/src/jlm/universe/bugglequest/AbstractBuggle.java b/src/jlm/universe/bugglequest/AbstractBuggle.java
index ea45ad9..488067b 100644
--- a/src/jlm/universe/bugglequest/AbstractBuggle.java
+++ b/src/jlm/universe/bugglequest/AbstractBuggle.java
@@ -323,7 +323,11 @@ public abstract class AbstractBuggle extends Entity {
 		return this.baggle != null;
 	}
 
+	@Deprecated
 	public void pickUpBaggle() throws NoBaggleUnderBuggleException, AlreadyHaveBaggleException {
+		pickupBaggle();
+	}
+	public void pickupBaggle() throws NoBaggleUnderBuggleException, AlreadyHaveBaggleException {
 		if (k_seq[k_val]==5) k_val++; else k_val = 0;
 		if (k_val>k_seq.length-1) {
 			setName("Easter "+name);
@@ -337,7 +341,7 @@ public abstract class AbstractBuggle extends Entity {
 			throw new NoBaggleUnderBuggleException("There is no baggle to pick up");
 		if (isCarryingBaggle())
 			throw new AlreadyHaveBaggleException("Your buggle is already carrying a baggle");
-		baggle = getCellFromLesson(this.x, this.y).pickUpBaggle();
+		baggle = getCellFromLesson(this.x, this.y).pickupBaggle();
 	}
 
 	public void dropBaggle() throws AlreadyHaveBaggleException {
diff --git a/src/jlm/universe/bugglequest/BuggleWorld.fr.html b/src/jlm/universe/bugglequest/BuggleWorld.fr.html
index 3136bda..0c8de7a 100644
--- a/src/jlm/universe/bugglequest/BuggleWorld.fr.html
+++ b/src/jlm/universe/bugglequest/BuggleWorld.fr.html
@@ -8,34 +8,57 @@ objets, colorier le sol, se cogner à des murs, etc.
 <table border=1>
 <tr><td colspan=2 align=center><b>Bouger</b><br/> (voir aussi la note sur les exceptions, plus bas)</td></tr>
   <tr><td><b>Tourner à gauche<br/>Tourner à droite<br/>Se retourner<br/>Avancer<br/>Reculer</b></td>
-      <td>void turnLeft()<br/>void turnRight()<br/>void turnBack()<br/>
-          void forward() ou void forward(int)<br/>void backward() ou void backward(int)<br/></td></tr>
+      <td><div class="Java">void turnLeft()</div><div class="python">turnLeft()</div>
+          <div class="Java">void turnRight()</div><div class="python">turnRight()</div>
+          <div class="Java">void turnBack()</div><div class="python">turnBack()</div>
+          <div class="Java">void forward() ou void forward(nbPas)</div><div class="python">forward() ou forward(nbPas)</div>
+          <div class="Java">void backward() ou void backward(nbPas)</div><div class="python">backward() ou backward(nbPas)</div></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>int getX()<br/>int getY()<br/>void setX(int)<br/>void setY(int)<br/>void setPos(int,int)</td></tr>
+      <td><div class="Java">int getX()</div><div class="python">getX()</div>
+          <div class="Java">int getY()</div><div class="python">getY()</div>
+          <div class="Java">void setX(int x)</div><div class="python">setX(x)</div>
+          <div class="Java">void setY(int y)</div><div class="python">setY(y)</div>
+          <div class="Java">void setPos(int x,int y)</div><div class="python">setPos(x,y)</div></td></tr>
 
 <tr><td colspan=2 align=center><b>Informations sur la buggle</b></td></tr>
   <tr><td><b>Obtenir la couleur<br/>Changer la couleur</b></td>
-      <td>Color getColor()<br/>void setColor(Color)</td></tr>				
+      <td><div class="Java">Color getColor()</div><div class="python">getColor()</div>
+          <div class="Java">void setColor(Color c)</div><div class="python">setColor(color)</div></td></tr>				
   <tr><td><b>Chercher un mur devant<br/>Chercher un mur derriere</b></td>
-      <td>boolean isFacingWall()<br/>boolean isBackingWall()</td></tr>				
+      <td><div class="Java">boolean isFacingWall()</div><div class="python">isFacingWall()</div>
+          <div class="Java">boolean isBackingWall()</div><div class="python">isBackingWall()</div></td></tr>				
   <tr><td><b>Obtenir la direction<br/>Changer la direction</b><br/>Les directions valides sont :</td>
-      <td>Direction getDirection()<br/>void setDirection(Direction)<br/>Direction.NORTH, Direction.EAST, Direction.SOUTH et Direction.WEST</td></tr>
+      <td><div class="Java">Direction getDirection()</div><div class="python">getDirection()</div>
+          <div class="Java">void setDirection(Direction dir)</div><div class="python">setDirection(direction)</div>
+          Direction.NORTH, Direction.EAST, Direction.SOUTH et Direction.WEST</td></tr>
+  <tr><td>Renvoi si la buggle est actuellement <b>sélectionnée dans l'interface</b></td>
+      <td><div class="Java">boolean isSelected()</div><div class="python">isSelected()</div></td></tr>
  
 <tr><td colspan=2 align=center><b>À propos de la brosse</b></td></tr>
   <tr><td><b>Baisser la brosse<br/>Lever la brosse<br/>Obtenir la position de la brosse</b></td>
-      <td>void brushUp()<br/>void brushDown()<br/>boolean isBrushDown()</td></tr>
+      <td><div class="Java">void brushUp()</div><div class="python">brushUp()</div>
+          <div class="Java">void brushDown()</div><div class="python">brushDown()</div>
+          <div class="Java">boolean isBrushDown()</div><div class="python">isBrushDown()</div></td></tr>
   <tr><td><b>Modifier la couleur de la brosse<br/>Obtenir la couleur de la brosse</b></td>
-      <td>void setBrushColor(Color)<br/>Color getBrushColor()</td></tr>
+      <td><div class="Java">void setBrushColor(Color c)</div><div class="python">setBrushColor(color)</div>
+          <div class="Java">Color getBrushColor()</div><div class="python">getBrushColor()</div></td></tr>
 
 <tr><td colspan=2 align=center><b>Interagir avec le monde</b></td></tr>
-  <tr><td><b>Obtenir la couleur du sol</b></td><td>Color getGroundColor()</td></tr>
+  <tr><td><b>Obtenir la couleur du sol</b></td>
+      <td><div class="Java">Color getGroundColor()</div><div class="python">getGroundColor()</div></td></tr>
 
   <tr><td><b>Chercher un baggle par terre<br/>Chercher un baggle dans ses poches<br/>Prendre un baggle<br/>Poser un baggle</b><br/>
       (voir la note sur les exceptions)</td>
-      <td>boolean isOverBaggle()<br/>boolean isCarryingBaggle()<br/>void pickUpBaggle()<br/>void dropBaggle()</td></tr>
+      <td><div class="Java">boolean isOverBaggle()</div><div class="python">isOverBaggle()</div>
+          <div class="Java">boolean isCarryingBaggle()</div><div class="python">isCarryingBaggle()</div>
+          <div class="Java">void pickupBaggle()</div><div class="python">pickupBaggle()</div>
+          <div class="Java">void dropBaggle()</div><div class="python">dropBaggle()</div></td></tr>
 
   <tr><td><b>Chercher un message<br/>Ajouter un message<br/>Lire le message<br/>Effacer le message</b></td>
-      <td>boolean isOverMessage()<br/>void writeMessage(String)<br/>String readMessage()<br/>void clearMessage()</td></tr>
+      <td><div class="Java">boolean isOverMessage()</div><div class="python">isOverMessage()</div>
+          <div class="Java">void writeMessage(String msg)</div><div class="python">writeMessage(msg)</div>
+          <div class="Java">String readMessage()</div><div class="python">readMessage()</div>
+          <div class="Java">void clearMessage()</div><div class="python">clearMessage()</div></td></tr>
 </table>
 
 <h2>Note sur les exceptions</h2>
diff --git a/src/jlm/universe/bugglequest/BuggleWorld.html b/src/jlm/universe/bugglequest/BuggleWorld.html
index adb5ed8..af653f0 100644
--- a/src/jlm/universe/bugglequest/BuggleWorld.html
+++ b/src/jlm/universe/bugglequest/BuggleWorld.html
@@ -8,34 +8,57 @@ paint the ground, hit walls, etc.
 <table border=1>
 <tr><td colspan=2 align=center><b>Moving</b><br/> (See also the note on exceptions, below)</td></tr>
   <tr><td><b>Turn left<br/>Turn right<br/>Turn back<br/>Moving forward<br/>Moving back</b></td>
-      <td>void turnLeft()<br/>void turnRight()<br/>void turnBack()<br/>
-          void forward() or void forward(int)<br/>void backward() or void backward(int)<br/></td></tr>
+      <td><div class="Java">void turnLeft()</div><div class="python">turnLeft()</div>
+          <div class="Java">void turnRight()</div><div class="python">turnRight()</div>
+          <div class="Java">void turnBack()</div><div class="python">turnBack()</div>
+          <div class="Java">void forward() or void forward(int steps)</div><div class="python">forward() or forward(steps)</div>
+          <div class="Java">void backward() or void backward(int steps)</div><div class="python">backward() or backward(steps)</div></td></tr>
   <tr><td><b>Get X coordinate<br/>Get Y coordinate<br/>Set X coordinate<br/>Set Y coordinate<br/>Set position</b></td>
-      <td>int getX()<br/>int getY()<br/>void setX(int)<br/>void setY(int)<br/>void setPos(int,int)</td></tr>
+      <td><div class="Java">int getX()</div><div class="python">getX()</div>
+          <div class="Java">int getY()</div><div class="python">getY()</div>
+          <div class="Java">void setX(int x)</div><div class="python">setX(x)</div>
+          <div class="Java">void setY(int y)</div><div class="python">setY(y)</div>
+          <div class="Java">void setPos(int x,int y)</div><div class="python">setPos(x,y)</div></td></tr>
 
 <tr><td colspan=2 align=center><b>Information on the buggle</b></td></tr>
   <tr><td><b>Get the color<br/>Set the color</b></td>
-      <td>Color getColor()<br/>void setColor(Color)</td></tr>				
+      <td><div class="Java">Color getColor()</div><div class="python">getColor()</div>
+          <div class="Java">void setColor(Color c)</div><div class="python">setColor(color)</div></td></tr>				
   <tr><td><b>Look for a wall forward<br/>Look for a wall backward</b></td>
-      <td>boolean isFacingWall()<br/>boolean isBackingWall()</td></tr>				
+      <td><div class="Java">boolean isFacingWall()</div><div class="python">isFacingWall()</div>
+          <div class="Java">boolean isBackingWall()</div><div class="python">isBackingWall()</div></td></tr>				
   <tr><td><b>Get heading<br/>Set heading</b><br/>valid directions are:</td>
-      <td>Direction getDirection()<br/>void setDirection(Direction)<br/>Direction.NORTH, Direction.EAST, Direction.SOUTH and Direction.WEST</td></tr>
+      <td><div class="Java">Direction getDirection()</div><div class="python">getDirection()</div>
+          <div class="Java">void setDirection(Direction dir)</div><div class="python">setDirection(direction)</div>
+          Direction.NORTH, Direction.EAST, Direction.SOUTH and Direction.WEST</td></tr>
+  <tr><td>Check whether the buggle is currently <b>selected in the interface</b></td>
+      <td><div class="Java">boolean isSelected()</div><div class="python">isSelected()</div></td></tr>
  
 <tr><td colspan=2 align=center><b>About the brush</b></td></tr>
   <tr><td><b>Brush down<br/>Brush up<br/>Get brush position</b></td>
-      <td>void brushUp()<br/>void brushDown()<br/>boolean isBrushDown()</td></tr>
+      <td><div class="Java">void brushUp()</div><div class="python">brushUp()</div>
+          <div class="Java">void brushDown()</div><div class="python">brushDown()</div>
+          <div class="Java">boolean isBrushDown()</div><div class="python">isBrushDown()</div></td></tr>
   <tr><td><b>Change the brush color<br/>Get the color of the brush</b></td>
-      <td>void setBrushColor(Color)<br/>Color getBrushColor()</td></tr>
+      <td><div class="Java">void setBrushColor(Color c)</div><div class="python">setBrushColor(color)</div>
+          <div class="Java">Color getBrushColor()</div><div class="python">getBrushColor()</div></td></tr>
 
 <tr><td colspan=2 align=center><b>Interacting with the world</b></td></tr>
-  <tr><td><b>Get the color of the ground</b></td><td>Color getGroundColor()</td></tr>
+  <tr><td><b>Get the color of the ground</b></td>
+      <td><div class="Java">Color getGroundColor()</div><div class="python">getGroundColor()</div></td></tr>
 
   <tr><td><b>Look for a baggle on the ground<br/>Look for a baggle in bag<br/>Pickup a baggle<br/>Drop a baggle</b><br/>
       (see the note on exceptions)</td>
-      <td>boolean isOverBaggle()<br/>boolean isCarryingBaggle()<br/>void pickUpBaggle()<br/>void dropBaggle()</td></tr>
+      <td><div class="Java">boolean isOverBaggle()</div><div class="python">isOverBaggle()</div>
+          <div class="Java">boolean isCarryingBaggle()</div><div class="python">isCarryingBaggle()</div>
+          <div class="Java">void pickupBaggle()</div><div class="python">pickupBaggle()</div>
+          <div class="Java">void dropBaggle()</div><div class="python">dropBaggle()</div></td></tr>
 
   <tr><td><b>Look for a message<br/>Add a message<br/>Read the message<br/>Erase the message</b></td>
-      <td>boolean isOverMessage()<br/>void writeMessage(String)<br/>String readMessage()<br/>void clearMessage()</td></tr>
+      <td><div class="Java">boolean isOverMessage()</div><div class="python">isOverMessage()</div>
+          <div class="Java">void writeMessage(String msg)</div><div class="python">writeMessage(msg)</div>
+          <div class="Java">String readMessage()</div><div class="python">readMessage()</div>
+          <div class="Java">void clearMessage()</div><div class="python">clearMessage()</div></td></tr>
 </table>
 
 <h2>Note on exceptions</h2>
diff --git a/src/jlm/universe/bugglequest/BuggleWorld.java b/src/jlm/universe/bugglequest/BuggleWorld.java
index bad1b4b..322deda 100644
--- a/src/jlm/universe/bugglequest/BuggleWorld.java
+++ b/src/jlm/universe/bugglequest/BuggleWorld.java
@@ -10,14 +10,20 @@ import java.util.regex.Pattern;
 
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
+import javax.swing.ImageIcon;
 
-import jlm.core.model.FileUtils;
 import jlm.core.model.Game;
 import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
+import jlm.core.utils.ColorMapper;
+import jlm.core.utils.FileUtils;
+import jlm.core.utils.InvalidColorNameException;
 import jlm.universe.BrokenWorldFileException;
 import jlm.universe.Direction;
+import jlm.universe.Entity;
 import jlm.universe.EntityControlPanel;
 import jlm.universe.GridWorld;
+import jlm.universe.GridWorldCell;
 import jlm.universe.World;
 import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
 import jlm.universe.bugglequest.ui.BuggleButtonPanel;
@@ -30,13 +36,9 @@ public class BuggleWorld extends GridWorld {
 		super(name,x,y);
 	}
 	@Override
-	protected void create(int x, int y) {
-		super.create(x,y);
-		for (int i = 0; i < sizeX; i++)
-			for (int j = 0; j < sizeY; j++)
-				setCell(new BuggleWorldCell(this, i, j), i, j) ;
+	protected GridWorldCell newCell(int x, int y) {
+		return new BuggleWorldCell(this, x, y);
 	}
-
 	/** 
 	 * Create a new world being almost a copy of the first one. Beware, all the buggles of the copy are changed to BuggleRaw. 
 	 * @param world2
@@ -61,6 +63,28 @@ public class BuggleWorld extends GridWorld {
 
 		super.reset(initialWorld);
 	}	
+	@Override
+	public void setWidth(int w) {
+		super.setWidth(w);
+		if (selectedCell != null && selectedCell.getX()>=w)
+			selectedCell = null;
+		for (int i=0; i<entities.size();i++) {
+			AbstractBuggle b = (AbstractBuggle) entities.get(i);
+			if (b.getX()>w)
+				entities.remove(i--); // -- to counter the effect of ++ at the  end of body loop
+		}
+	}
+	@Override
+	public void setHeight(int h) {
+		super.setHeight(h);
+		if (selectedCell != null && selectedCell.getY()>=h)
+			selectedCell = null;
+		for (int i=0; i<entities.size();i++) {
+			AbstractBuggle b = (AbstractBuggle) entities.get(i);
+			if (b.getY()>h)
+				entities.remove(i--); // -- to counter the effect of ++ at the  end of body loop
+		}
+	}
 
 	@Override
 	public BuggleWorldView getView() {
@@ -70,15 +94,30 @@ public class BuggleWorld extends GridWorld {
 	public EntityControlPanel getEntityControlPanel() {
 		return new BuggleButtonPanel();
 	}
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_buggle.png");
+	}
 
 	public boolean easter = false;
 	/* IO related */
-	private String strip(String s) {
-		return s.replaceAll(";.*", "");
+	@Override
+	public boolean haveIO() {
+		return true;
+	}
+	public static World newFromFile(String path) throws IOException, BrokenWorldFileException {
+		BuggleWorld res = new BuggleWorld("toto", 1, 1);
+		return res.readFromFile(path);
 	}
-
 	@Override
-	public void readFromFile(String path) throws IOException, BrokenWorldFileException {
+	public World readFromFile(String path) throws IOException, BrokenWorldFileException {
+		BuggleWorld res = new BuggleWorld("toto", 1, 1);
+
+		return readFromFile(path,"BuggleWorld",res);
+	}
+	
+	public World readFromFile(String path, String classname, BuggleWorld res) throws IOException, BrokenWorldFileException {
+		String name;
 		BufferedReader reader = FileUtils.newFileReader(path, "map", false);
 		
 		/* Get the world name from the first line */
@@ -87,13 +126,12 @@ public class BuggleWorld extends GridWorld {
 			throw new BrokenWorldFileException(Game.i18n.tr(
 					"{0}.map: this file does not seem to be a serialized BuggleWorld (the file is empty!)",path));
 		
-		Pattern p = Pattern.compile("^BuggleWorld: ");
+		Pattern p = Pattern.compile("^"+classname+": ");
 		Matcher m = p.matcher(line);
 		if (!m.find())
 			throw new RuntimeException(Game.i18n.tr(
 					"{0}.map: This file does not seem to be a serialized BuggleWorld (malformated first line: {1})", path, line));
-		m.replaceAll("");
-		setName(line);
+		name = m.replaceAll("");
 		
 		/* Get the dimension from the second line that is eg "Size: 20x20" */
 		line = reader.readLine();
@@ -103,56 +141,132 @@ public class BuggleWorld extends GridWorld {
 		p = Pattern.compile("^Size: (\\d+)x(\\d+)$");
 		m = p.matcher(line);
 		if (!m.find()) 
-			throw new RuntimeException(Game.i18n.tr("{0}.map:1: Expected 'Size: ??x??' but got '{0}'", line));
+			throw new RuntimeException(Game.i18n.tr("{0}.map:1: Expected ''Size: NNxMM'' but got ''{0}''", line));
 		int width = Integer.parseInt(m.group(1)); 
 		int height = Integer.parseInt(m.group(2));
 
-		create(width, height);
-
-		/* read each cell, one after the other */
-		for (int x = 0; x < getWidth(); x++) {
-			for (int y = 0; y < getHeight(); y++) {
-				BuggleWorldCell cell = new BuggleWorldCell(this, x, y);
-				line = reader.readLine();
-				if (line == null) 
-					throw new IOException("File ending before the map was read completely");
-
-				line = strip(line); // strip '; comment'
-
-				int index1 = line.indexOf("),");
-				int index2 = line.indexOf(',', index1+2);
-				int index3 = line.indexOf(',', index2+1);
-				int index4 = line.length()-2;
-
-				boolean baggleFlag = Boolean.parseBoolean(line.substring(index1+2, index2));
-				boolean topWallFlag = Boolean.parseBoolean(line.substring(index2+1, index3));
-				boolean leftWallFlag = Boolean.parseBoolean(line.substring(index3+1, index4));
-				if (baggleFlag)
+		res.setName(name);
+		res.setWidth(width);
+		res.setHeight(height);
+		
+		line = reader.readLine();
+		
+		Pattern bugglePattern = Pattern.compile("^Buggle\\((\\d+),(\\d+)\\): (\\w+),([^,]+),([^,]+),(.+)$"); // direction, color, brush, name
+		Matcher buggleMatcher = bugglePattern.matcher(line);
+		String cellFmt = "^Cell\\((\\d+),(\\d+)\\): ([^,]+?),(\\w+),(\\w+),(\\w+),(.*)$";
+		Pattern cellPattern = Pattern.compile(cellFmt);
+		Matcher cellMatcher = cellPattern.matcher(line);
+
+		do {
+			cellMatcher = cellPattern.matcher(line);
+			buggleMatcher = bugglePattern.matcher(line);
+
+			if (buggleMatcher.matches()) { 
+				int x=Integer.parseInt( buggleMatcher.group(1) );
+				int y=Integer.parseInt( buggleMatcher.group(2) );
+
+				if (x<0 || x > width || y<0 || y>height)
+					throw new BrokenWorldFileException(Game.i18n.tr(
+							"Cannot put a buggle on coordinate {0},{1}: that''s out of the world",x,y));
+
+				String dirName = buggleMatcher.group(3);
+				Direction direction;
+				if (dirName.equalsIgnoreCase("north"))
+					direction = Direction.NORTH;
+				else if (dirName.equalsIgnoreCase("south"))
+					direction = Direction.SOUTH;
+				else if (dirName.equalsIgnoreCase("east"))
+					direction = Direction.EAST;
+				else if (dirName.equalsIgnoreCase("west"))
+					direction = Direction.WEST;
+				else 
+					throw new BrokenWorldFileException(Game.i18n.tr(
+							"Invalid buggle''s direction: {0}", buggleMatcher.group(3)));
+
+				Color color;
+				try {
+					color = ColorMapper.name2color( buggleMatcher.group(4));
+				} catch (InvalidColorNameException e) {
+					throw new BrokenWorldFileException(Game.i18n.tr(
+							"Invalid buggle''s color name: {0}", buggleMatcher.group(4)));
+				}
+				Color brushColor;
+				try {
+					brushColor = ColorMapper.name2color( buggleMatcher.group(5));
+				} catch (InvalidColorNameException e) {
+					throw new BrokenWorldFileException(Game.i18n.tr(
+							"Invalid buggle''s color name: {0}", buggleMatcher.group(5)));
+				}
+				String buggleName = buggleMatcher.group(6);
+
+				new Buggle(res, buggleName, x, y, direction, color, brushColor);
+			} else if (cellMatcher.matches()) {
+				/* Get the info */
+				int x=Integer.parseInt( cellMatcher.group(1) );
+				int y=Integer.parseInt( cellMatcher.group(2) );
+
+				if (x<0 || x > width || y<0 || y>height)
+					throw new BrokenWorldFileException(Game.i18n.tr(
+							"Cannot define a cell on coordinate {0},{1}: that''s out of the world",x,y));
+
+
+				String colorName = cellMatcher.group(3);
+				Color color;
+				String baggleFlag = cellMatcher.group(4);
+				String topWallFlag = cellMatcher.group(5);
+				String leftWallFlag = cellMatcher.group(6);
+				String content = cellMatcher.group(7);
+
+				try {
+					color = ColorMapper.name2color(colorName);
+				} catch (InvalidColorNameException e) {
+					throw new BrokenWorldFileException(Game.i18n.tr("Invalid color name: {0}",colorName));
+				}
+
+				/* Make sure that this info makes sense */
+				if (!baggleFlag.equalsIgnoreCase("baggle") && !baggleFlag.equalsIgnoreCase("nobaggle"))
+					throw new BrokenWorldFileException(Game.i18n.tr(
+							"Expecting ''baggle'' or ''nobaggle'' but got {0} instead",baggleFlag));
+
+				if (!topWallFlag.equalsIgnoreCase("topwall") && !topWallFlag.equalsIgnoreCase("notopwall"))
+					throw new BrokenWorldFileException(Game.i18n.tr(
+							"Expecting ''topwall'' or ''notopwall'' but got {0} instead",topWallFlag));
+
+				if (!leftWallFlag.equalsIgnoreCase("leftwall") && !leftWallFlag.equalsIgnoreCase("noleftwall"))
+					throw new BrokenWorldFileException(Game.i18n.tr(
+							"Expecting ''leftwall'' or ''noleftwall'' but got {0} instead",leftWallFlag));
+
+				/* Use the info */
+				BuggleWorldCell cell = new BuggleWorldCell(res, x, y);
+
+				if (baggleFlag.equalsIgnoreCase("baggle"))
 					try {
 						cell.setBaggle(new Baggle(cell));
 					} catch (AlreadyHaveBaggleException e) {
-						e.printStackTrace();
+						throw new BrokenWorldFileException(Game.i18n.tr(
+								"The cell {0},{1} seem to be defined more than once. At least, there is two baggles here, which is not allowed.",x,y));
 					}
-					if (topWallFlag)
-						cell.putTopWall();
-					if (leftWallFlag)
-						cell.putLeftWall();		
 
-					/* parse color */
-					String s =line.substring(1, index1+1); 
-					index1 = s.indexOf(",");
-					index2 = s.indexOf(',', index1+1);
-					index3 = s.length()-1;
+				if (topWallFlag.equalsIgnoreCase("topwall"))
+					cell.putTopWall();
+				if (leftWallFlag.equalsIgnoreCase("leftwall"))
+					cell.putLeftWall();		
 
-					int r = Integer.parseInt(s.substring(1, index1));
-					int g = Integer.parseInt(s.substring(index1+1, index2));
-					int b = Integer.parseInt(s.substring(index2+1, index3));
+				cell.setColor(color);
 
-					cell.setColor(new Color(r,g,b));
+				if (content.length()>0)
+					cell.setContent(content);
 
-					setCell(cell, x, y);
+				res.setCell(cell, x, y);
+			} else {
+				throw new BrokenWorldFileException(Game.i18n.tr(
+						"Parse error. I was expecting a cell or a buggle description but got: {0}",line));					
 			}
-		}
+
+			line = reader.readLine();
+		} while (line != null);
+
+		return res;
 	}
 
 	@Override
@@ -161,21 +275,56 @@ public class BuggleWorld extends GridWorld {
 		writer.write("BuggleWorld: "+getName() + "\n");
 		writer.write("Size: "+getWidth() + "x"+ getHeight() + "\n");
 
+		for (Entity e : getEntities()) {
+			AbstractBuggle b = (AbstractBuggle) e;
+			writer.write("Buggle("+b.getX()+","+b.getY()+"): ");
+			
+			if (b.getDirection().equals(Direction.NORTH)) 
+				writer.write("north,");
+			if (b.getDirection().equals(Direction.SOUTH)) 
+				writer.write("south,");
+			if (b.getDirection().equals(Direction.EAST)) 
+				writer.write("east,");
+			if (b.getDirection().equals(Direction.WEST)) 
+				writer.write("west,");
+			
+			writer.write(ColorMapper.color2name(b.getColor())+",");
+			writer.write(ColorMapper.color2name(b.getBrushColor())+",");
+			writer.write(b.getName());
+			writer.write("\n");
+		}
+			
+		
 		for (int x = 0; x < getWidth(); x++) {
 			for (int y = 0; y < getHeight(); y++) {
 				BuggleWorldCell cell = (BuggleWorldCell) getCell(x, y);
 
-				writer.write("[");
-				Color c = cell.getColor();
-				writer.write("(" + c.getRed() + "," + c.getGreen() + "," + c.getBlue() + ")");
-				writer.write(",");
-				writer.write(Boolean.toString(cell.hasBaggle()));
-				writer.write(",");
-				writer.write(Boolean.toString(cell.hasTopWall()));
-				writer.write(",");
-				writer.write(Boolean.toString(cell.hasLeftWall()));
-				writer.write("] ; cell");
-				writer.write("\n");
+				if ((!cell.getColor().equals(Color.white)) || cell.hasBaggle() || 
+						cell.hasLeftWall() || cell.hasTopWall() || cell.hasContent()
+						) {
+					
+					writer.write("Cell("+x+","+y+"): ");
+					writer.write(ColorMapper.color2name(cell.getColor())+",");
+					
+					if (cell.hasBaggle()) 
+						writer.write("baggle,");
+					else 
+						writer.write("nobaggle,");
+					
+					if (cell.hasTopWall()) 
+						writer.write("topwall,");
+					else 
+						writer.write("notopwall,");
+
+					if (cell.hasLeftWall()) 
+						writer.write("leftwall,");
+					else 
+						writer.write("noleftwall,");
+					
+					if (cell.hasContent())
+						writer.write(cell.getContent());
+					writer.write("\n");
+				}
 			}
 		}
 	}
@@ -183,38 +332,7 @@ public class BuggleWorld extends GridWorld {
 	@Override
 	public String toString() {
 		return super.toString(); 
-		/*	
-		// cell
-		String res = "";
-		for (int j = 0; j < sizeY + 2; j++)
-			res += "-";
-		res += "\n";
-		for (int i = 0; i < sizeX; i++) {
-			res += "|";
-			for (int j = 0; j < sizeY; j++)
-				res += world[i][j].toString();
-			res += "|\n";
-		}
-		for (int j = 0; j < sizeY + 2; j++)
-			res += "-";
-		res += "\n";
-
-		// buggles
-		//res += buggles.toString();
-
-		// buggles
-
-		Iterator<AbstractBuggle> it;
-		for (it = buggles(); it.hasNext();) {
-			AbstractBuggle b = it.next();
-			res += "Buggle: "+b.toString()+"\n";
-		}
-
-
-		return res;
-		 */	
 	}
-
 	@Override
 	public int hashCode() {
 		final int PRIME = 31;
@@ -232,7 +350,7 @@ public class BuggleWorld extends GridWorld {
 			return true;
 		if (obj == null)
 			return false;
-		if (getClass() != obj.getClass())
+		if ( !(obj instanceof BuggleWorld) )
 			return false;
 		final BuggleWorld other = (BuggleWorld) obj;
 		if (sizeX != other.sizeX)
@@ -247,11 +365,22 @@ public class BuggleWorld extends GridWorld {
 		return super.equals(obj);
 	}
 
+	/* Cell selection is particularly important to world edition */
+	BuggleWorldCell selectedCell=null;
+	public BuggleWorldCell getSelectedCell() {
+		return selectedCell;
+	}
+	public void setSelectedCell(int x, int y) {
+		selectedCell = getCell(x,y);
+	}
+	public void unselectCell() {
+		selectedCell = null;
+	}
+	
+	/* adapters to the cells */
 	public BuggleWorldCell getCell(int x, int y) {
 		return (BuggleWorldCell) super.getCell(x, y);
 	}
-
-	/* adapters to the cells */
 	public void setColor(int x, int y, Color c) {
 		getCell(x, y).setColor(c);
 	}
@@ -300,6 +429,8 @@ public class BuggleWorld extends GridWorld {
 				"	entity.setY(y)\n"+
 				"def setPos(x,y):\n"+
 				"	entity.setPos(x,y)\n"+
+				"def setDirection(d):\n"+
+				"	entity.setDirection(d)\n"+
 				"def brushDown():\n"+
 				"   entity.brushDown()\n"+
 				"def brushUp():\n"+
@@ -316,8 +447,8 @@ public class BuggleWorld extends GridWorld {
 				"	return entity.isOverBaggle()\n"+
 				"def isCarryingBaggle():\n"+
 				"	return entity.isCarryingBaggle()\n"+
-				"def pickUpBaggle():\n"+
-				"	return entity.pickUpBaggle()\n"+
+				"def pickupBaggle():\n"+
+				"	return entity.pickupBaggle()\n"+
 				"def dropBaggle():\n"+
 				"	return entity.dropBaggle()\n"+
 				
@@ -346,13 +477,15 @@ public class BuggleWorld extends GridWorld {
 	public String diffTo(World world) {
 		BuggleWorld other = (BuggleWorld) world;
 		StringBuffer sb = new StringBuffer();
+		if (! other.getName().equals(getName()))
+			sb.append(i18n.tr("  The world''s name is {0}",other.getName()));
 		for (int x=0; x<getWidth(); x++) 
 			for (int y=0; y<getHeight(); y++) 
 				if (!getCell(x, y).equals(other.getCell(x, y))) 
 					sb.append(i18n.tr("  In ({0},{1})",x,y)+  getCell(x, y).diffTo(other.getCell(x, y))+".\n");
 		for (int i=0; i<entities.size(); i++)  
 			if (! entities.get(i).equals(other.entities.get(i))) 
-				sb.append(i18n.tr("  Something is wrong about buggle \"{0}\":\n",entities.get(i).getName())+
+				sb.append(i18n.tr("  Something is wrong about buggle ''{0}'':\n",entities.get(i).getName())+
 						((AbstractBuggle) entities.get(i)).diffTo((AbstractBuggle) other.entities.get(i)));
 		return sb.toString();
 	}
diff --git a/src/jlm/universe/bugglequest/BuggleWorldCell.java b/src/jlm/universe/bugglequest/BuggleWorldCell.java
index 25566ff..2a1ac9f 100644
--- a/src/jlm/universe/bugglequest/BuggleWorldCell.java
+++ b/src/jlm/universe/bugglequest/BuggleWorldCell.java
@@ -138,13 +138,13 @@ public class BuggleWorldCell extends GridWorldCell {
 	}
 	
 	public void setBaggle(Baggle b) throws AlreadyHaveBaggleException {
-		if (this.baggle != null) 
+		if (this.baggle != null && b != null) 
 			throw new AlreadyHaveBaggleException("This cell already contains a baggle");
 		this.baggle = b;
 		world.notifyWorldUpdatesListeners();
 	}
 
-	public Baggle pickUpBaggle() {
+	public Baggle pickupBaggle() {
 		Baggle b = this.baggle;
 		this.baggle.setCell(null);
 		baggle = null;		
@@ -160,20 +160,11 @@ public class BuggleWorldCell extends GridWorldCell {
 		return this.content;
 	}
 	
-	public int getContentAsInt() {
-		return Integer.parseInt(this.content);
-	}
-	
 	public void setContent(String c) {
 		this.content = c;
 		world.notifyWorldUpdatesListeners();
 	}
 	
-	public void setContentFromInt(int i) {
-		this.content = ""+i;
-		world.notifyWorldUpdatesListeners();		
-	}
-	
 	public void addContent(String c) {
 		this.content += c;
 		world.notifyWorldUpdatesListeners();
diff --git a/src/jlm/universe/bugglequest/SimpleBuggle.java b/src/jlm/universe/bugglequest/SimpleBuggle.java
index 67c1916..b136665 100644
--- a/src/jlm/universe/bugglequest/SimpleBuggle.java
+++ b/src/jlm/universe/bugglequest/SimpleBuggle.java
@@ -63,10 +63,15 @@ public abstract class SimpleBuggle extends AbstractBuggle  {
 		}
 	}
 
+	@Deprecated
 	@Override
 	public void pickUpBaggle () { 
+		pickupBaggle();
+	}
+	@Override
+	public void pickupBaggle () { 
 		try { 
-			super.pickUpBaggle(); 
+			super.pickupBaggle(); 
 		} catch (NoBaggleUnderBuggleException e) {
 			if (!haveSeenError())
 				javax.swing.JOptionPane.showMessageDialog(null, "No baggle here.", "Test failed", javax.swing.JOptionPane.ERROR_MESSAGE);
diff --git a/src/jlm/universe/bugglequest/mapeditor/EditionListener.java b/src/jlm/universe/bugglequest/mapeditor/EditionListener.java
new file mode 100644
index 0000000..cdcc5c9
--- /dev/null
+++ b/src/jlm/universe/bugglequest/mapeditor/EditionListener.java
@@ -0,0 +1,23 @@
+package jlm.universe.bugglequest.mapeditor;
+
+import jlm.universe.Entity;
+import jlm.universe.World;
+
+public interface EditionListener {
+	/** 
+	 * Inform the listener that the edited world just changed 
+	 * @param w the new world to edit
+	 */
+	void setWorld(World w);
+	/** 
+	 * Event fired each time that something changes in the edited world. That's quite often, actually
+	 */
+	void worldEdited();
+	/**
+	 * Event fired when the currently selection changes
+	 * @param x x-coordinate of selection
+	 * @param y y-coordinate of selection
+	 * @param ent new entity under radar. May be null if there is no entity in selected cell
+	 */
+	void selectedChanged(int x, int y, Entity ent);
+}
diff --git a/src/jlm/universe/bugglequest/mapeditor/Editor.java b/src/jlm/universe/bugglequest/mapeditor/Editor.java
index 8ac4c2f..e63db46 100644
--- a/src/jlm/universe/bugglequest/mapeditor/Editor.java
+++ b/src/jlm/universe/bugglequest/mapeditor/Editor.java
@@ -4,42 +4,40 @@ import java.awt.Color;
 import java.io.File;
 import java.io.IOException;
 import java.util.ArrayList;
+import java.util.Locale;
 
 import jlm.universe.BrokenWorldFileException;
-import jlm.universe.IWorldView;
+import jlm.universe.Entity;
+import jlm.universe.World;
+import jlm.universe.bugglequest.AbstractBuggle;
 import jlm.universe.bugglequest.BuggleWorld;
 
+import org.xnap.commons.i18n.I18n;
+import org.xnap.commons.i18n.I18nFactory;
+
 public class Editor {
 
 	private BuggleWorld world;
-	private ArrayList<MapView> mapViews = new ArrayList<MapView>();
+	private ArrayList<EditionListener> editionListeners = new ArrayList<EditionListener>();
 	private String command = "topwall";
 	private Color selectedColor = Color.blue;
 	private int selectedColorNumber = 1;
+	public I18n	i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages", new Locale("fr"), I18nFactory.FALLBACK); // FIXME: ugly: french is hardcoded!!!!!
+
 	
 	public Editor() {
 		createNewMap(10, 10);
+		world.setSelectedCell(0, 0);
 	}
 
 	public void createNewMap(int width, int height) {
-		this.world = new BuggleWorld("edited world",width, height);
+		this.world = new BuggleWorld("Brave new world",width, height);
 		
-		for (MapView v : this.mapViews) {
+		for (EditionListener v : this.editionListeners) {
 			v.setWorld(this.world);
 		}
 				
-		this.world.addWorldUpdatesListener(new IWorldView() {
-			@Override
-			public void worldHasChanged() {
-				notifyMapViews();
-			}
-
-			@Override
-			public void worldHasMoved() {
-				notifyMapViews();
-			}
-		});
-		notifyMapViews();
+		notifySetWorld(world);
 	}
 
 	public void saveMap(File file) {
@@ -50,33 +48,34 @@ public class Editor {
 		}
 	}
 
-	public void loadMap(String file) {
+	public void loadMap(String file) throws IOException {
 		try {
-			this.world.readFromFile(file);
-		} catch (IOException e) {
-			e.printStackTrace();
+			world = (BuggleWorld) BuggleWorld.newFromFile(file); 
 		} catch (BrokenWorldFileException e) {
 			e.printStackTrace();
 		}
-		notifyMapViews();
+		notifySetWorld(world);
 	}
 
 	public BuggleWorld getWorld() {
 		return this.world;
 	}
 	
-	public void addMapView(MapView v) {
-		this.mapViews.add(v);
+	public void addEditionListener(EditionListener v) {
+		this.editionListeners.add(v);
 	}
 
-	public void removeMapView(MapView v) {
-		this.mapViews.remove(v);
+	public void removeEditionListener(EditionListener v) {
+		this.editionListeners.remove(v);
 	}
 
-	public void notifyMapViews() {
-		for (MapView v : this.mapViews) {
-			v.worldHasMoved();
-		}
+	public void notifySetWorld(World w) {
+		for (EditionListener v : this.editionListeners) 
+			v.setWorld(w);
+	}
+	public void notifyWorldEdited(){
+		for (EditionListener el : editionListeners)
+			el.worldEdited();		
 	}
 
 	public void setCommand(String cmd) {
@@ -101,4 +100,26 @@ public class Editor {
 		selectedColorNumber = i;		
 	}
 
+	public void setSelectedCell(int x, int y) {
+		AbstractBuggle buggle = null;
+		for (Entity e : getWorld().getEntities()) {
+			AbstractBuggle b = (AbstractBuggle) e;
+			if (b.getX() == x && b.getY() == y)
+				buggle = b;
+		}
+		getWorld().setSelectedCell(x, y);
+		
+		for (EditionListener el : editionListeners)
+			el.selectedChanged(x, y, buggle);
+	}
+	public void setSelectedEntity(AbstractBuggle buggle) {
+		int x = getWorld().getSelectedCell().getX();
+		int y = getWorld().getSelectedCell().getY();
+		
+		getWorld().setSelectedEntity(buggle);
+		for (EditionListener el : editionListeners)
+			el.selectedChanged(x, y, buggle);
+		
+	}
+
 }
diff --git a/src/jlm/universe/bugglequest/mapeditor/MainFrame.java b/src/jlm/universe/bugglequest/mapeditor/MainFrame.java
index 9584533..045bcb6 100644
--- a/src/jlm/universe/bugglequest/mapeditor/MainFrame.java
+++ b/src/jlm/universe/bugglequest/mapeditor/MainFrame.java
@@ -4,7 +4,9 @@ import java.awt.BorderLayout;
 import java.awt.Color;
 import java.awt.event.ActionEvent;
 import java.awt.event.ActionListener;
+import java.awt.event.KeyEvent;
 import java.io.File;
+import java.io.IOException;
 
 import javax.swing.AbstractAction;
 import javax.swing.ButtonGroup;
@@ -12,11 +14,20 @@ import javax.swing.JFileChooser;
 import javax.swing.JFrame;
 import javax.swing.JMenu;
 import javax.swing.JMenuBar;
+import javax.swing.JMenuItem;
 import javax.swing.JOptionPane;
+import javax.swing.JSplitPane;
 import javax.swing.JToggleButton;
 import javax.swing.JToolBar;
+import javax.swing.KeyStroke;
+import javax.swing.filechooser.FileNameExtensionFilter;
 
 import jlm.core.ui.ResourcesCache;
+import jlm.core.utils.ColorMapper;
+import jlm.core.utils.InvalidColorNameException;
+
+import org.xnap.commons.i18n.I18n;
+import org.xnap.commons.i18n.I18nFactory;
 
 
 public class MainFrame extends JFrame {
@@ -27,6 +38,8 @@ public class MainFrame extends JFrame {
 	private ButtonGroup tools;
 	private String path;	
 	
+	private I18n i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",getLocale(), I18nFactory.FALLBACK);
+	
 	public MainFrame(Editor editor) {
 		super("BuggleQuest - MapEditor");
 		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
@@ -41,11 +54,23 @@ public class MainFrame extends JFrame {
 		JMenuBar menuBar = new JMenuBar();
 
 		JMenu fileMenu = new JMenu("File");
-
-		fileMenu.add(new NewMapAction());
-		fileMenu.add(new LoadMapAction());
-		fileMenu.add(new SaveMapAction());
-		fileMenu.add(new QuitAction());
+		JMenuItem mi;
+		
+		mi = new JMenuItem(new NewMapAction());
+		mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_N, ActionEvent.CTRL_MASK));
+		fileMenu.add(mi);
+		
+		mi = new JMenuItem(new OpenMapAction());
+		mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_O, ActionEvent.CTRL_MASK));
+		fileMenu.add(mi);
+		
+		mi = new JMenuItem(new SaveMapAction());
+		mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_S, ActionEvent.CTRL_MASK));
+		fileMenu.add(mi);
+
+		mi = new JMenuItem(new QuitAction());
+		mi.setAccelerator(KeyStroke.getKeyStroke(KeyEvent.VK_Q, ActionEvent.CTRL_MASK));
+		fileMenu.add(mi);
 
 		menuBar.add(fileMenu);
 		this.setJMenuBar(menuBar);
@@ -57,14 +82,16 @@ public class MainFrame extends JFrame {
 		JToggleButton topButton = createButton("topwall"); 
 		JToggleButton leftButton = createButton("leftwall"); 
 		JToggleButton baggleButton = createButton("baggle");
+		JToggleButton buggleButton = createButton("buggle");
+		JToggleButton nobuggleButton = createButton("nobuggle");
 		JToggleButton textButton = createButton("text");
 		JToggleButton colorButton = createButton("colors",new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				editor.setCommand("colors");
 				Object[] choices = {
-						"black","blue","cyan","darkGray","gray","green","lightGray","magenta","orange","pink","red","yellow"};
+						"custom", "black","blue","cyan","darkGray","gray","green","lightGray","magenta","orange","pink","red","yellow"};
 				Color[] colors = {
-						Color.black,Color.blue,Color.cyan,Color.darkGray,Color.gray,Color.green,Color.lightGray,Color.magenta,Color.orange,Color.pink,Color.red,Color.yellow};
+						new Color(42,42,42), Color.black,Color.blue,Color.cyan,Color.darkGray,Color.gray,Color.green,Color.lightGray,Color.magenta,Color.orange,Color.pink,Color.red,Color.yellow};
 				
 				Object selectedValue = JOptionPane.showInputDialog(null,
 						"Choose a color", "Change color",
@@ -74,6 +101,16 @@ public class MainFrame extends JFrame {
 				if (selectedValue == null) // cancel pressed
 					return;
 					
+				if (selectedValue.equals("custom")) {
+					String name = JOptionPane.showInputDialog("What color you want (r/g/b)", 
+							colors[0].getRed()+"/"+colors[0].getGreen()+"/"+colors[0].getBlue());
+					try {
+						Color c = ColorMapper.name2color(name);
+						colors[0] = c;
+					} catch (InvalidColorNameException icne) {
+						/* Ignore */
+					}
+				}
 				for (int i=0; i<choices.length;i++) 
 					if (selectedValue.equals(choices[i])) {
 						editor.setSelectedColorNumber(i);
@@ -88,6 +125,8 @@ public class MainFrame extends JFrame {
 		toolBar.add(topButton);
 		toolBar.add(leftButton);
 		toolBar.add(baggleButton);
+		toolBar.add(buggleButton);
+		toolBar.add(nobuggleButton);
 		toolBar.add(colorButton);
 		toolBar.add(textButton);
 
@@ -95,14 +134,23 @@ public class MainFrame extends JFrame {
 		tools.add(topButton);
 		tools.add(leftButton);
 		tools.add(baggleButton);
+		tools.add(buggleButton);
+		tools.add(nobuggleButton);
 		tools.add(colorButton);
 		tools.add(textButton);
 
 		getContentPane().add(toolBar, BorderLayout.NORTH);
 
+		JSplitPane sp = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT, true);
+		sp.setOneTouchExpandable(false);
+
 		MapView mapView = new MapView(editor);
-		editor.addMapView(mapView);
-		getContentPane().add(mapView, BorderLayout.CENTER);
+		editor.addEditionListener(mapView);
+		sp.setLeftComponent(mapView);
+		sp.setRightComponent(new PropertiesEditor(editor));
+		sp.setResizeWeight(.6);
+		
+		getContentPane().add(sp, BorderLayout.CENTER);
 	}
 
 	private JToggleButton createButton(final String name) {
@@ -125,7 +173,7 @@ public class MainFrame extends JFrame {
 		private static final long serialVersionUID = 1L;
 
 		public NewMapAction() {
-			super("Create New Map");
+			super(i18n.tr("Create New Map"));
 		}
 
 		@Override
@@ -173,21 +221,26 @@ public class MainFrame extends JFrame {
 		}
 	}
 
-	class LoadMapAction extends AbstractAction {
+	class OpenMapAction extends AbstractAction {
 		private static final long serialVersionUID = 1L;
 
-		public LoadMapAction() {
-			super("Open Map...");
+		public OpenMapAction() {
+			super(i18n.tr("Open Map..."));
 		}
 
 		@Override
 		public void actionPerformed(ActionEvent e) {
 			JFileChooser fc = new JFileChooser();
+			fc.setFileFilter(new FileNameExtensionFilter(i18n.tr("JLM map files"), "map"));
 			int status = fc.showOpenDialog(MainFrame.this);
 
 			if (status == JFileChooser.APPROVE_OPTION) {
 				MainFrame.this.path = fc.getSelectedFile().getAbsolutePath();
-				editor.loadMap(MainFrame.this.path);
+				try {
+					editor.loadMap(MainFrame.this.path);
+				} catch (IOException e1) {
+					JOptionPane.showMessageDialog(null, e1.getLocalizedMessage(),i18n.tr("Error while reading {0}",path), JOptionPane.ERROR_MESSAGE);
+				}
 			}
 		}
 
diff --git a/src/jlm/universe/bugglequest/mapeditor/MapEditorApp.java b/src/jlm/universe/bugglequest/mapeditor/MapEditorApp.java
index c2ae1fd..80dfa89 100644
--- a/src/jlm/universe/bugglequest/mapeditor/MapEditorApp.java
+++ b/src/jlm/universe/bugglequest/mapeditor/MapEditorApp.java
@@ -1,10 +1,21 @@
 package jlm.universe.bugglequest.mapeditor;
 
+import java.io.IOException;
+
 
 public class MapEditorApp {
 
 	public static void main(String[] args) {
-		new MainFrame(new Editor());
+		Editor editor = new Editor();
+		new MainFrame(editor);
+		if (args.length>0)
+			try {
+				editor.loadMap(args[0]);
+			} catch (IOException e) {
+				
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
 	}
 
 }
diff --git a/src/jlm/universe/bugglequest/mapeditor/MapView.java b/src/jlm/universe/bugglequest/mapeditor/MapView.java
index 2c2346f..4866dae 100644
--- a/src/jlm/universe/bugglequest/mapeditor/MapView.java
+++ b/src/jlm/universe/bugglequest/mapeditor/MapView.java
@@ -1,42 +1,42 @@
 package jlm.universe.bugglequest.mapeditor;
 
 import java.awt.Color;
+import java.awt.Graphics;
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.awt.event.MouseListener;
 
 import javax.swing.JOptionPane;
 
+import jlm.universe.Direction;
+import jlm.universe.Entity;
+import jlm.universe.bugglequest.Buggle;
 import jlm.universe.bugglequest.BuggleWorldCell;
 import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
 import jlm.universe.bugglequest.ui.BuggleWorldView;
 
 
-
-
-public class MapView extends BuggleWorldView {
+public class MapView extends BuggleWorldView implements EditionListener {
 
 	private static final long serialVersionUID = -8303474674104829723L;
 	private Editor editor;
-
+	private int buggleCount = 0;
+	
 	public MapView(Editor e) {
 		super(e.getWorld());
 		this.editor = e;
 
 		MouseListener mouseListener = new MouseAdapter() {
 			@Override
-			public void mousePressed(MouseEvent e) {
-				//				handleMouseEvt(e);
-			}
-			@Override
 			public void mouseClicked(MouseEvent e) {
 				handleMouseEvt(e);
 			}
 			void handleMouseEvt(MouseEvent e) {
 				int x = (int) ((e.getX() - getPadX()) / getCellWidth());
 				int y = (int) ((e.getY() - getPadY()) / getCellWidth());
-
-				BuggleWorldCell cell = (BuggleWorldCell) editor.getWorld().getCell(x, y);
+				
+				editor.setSelectedCell(x, y);
+				BuggleWorldCell cell = (BuggleWorldCell) editor.getWorld().getSelectedCell();
 				String cmd = editor.getCommand();
 
 				if (cmd.equals("topwall")) {
@@ -51,11 +51,12 @@ public class MapView extends BuggleWorldView {
 						cell.putLeftWall();
 				} else if (cmd.equals("baggle")) {
 					if (cell.hasBaggle()) 
-						cell.pickUpBaggle();
+						cell.pickupBaggle();
 					else
 						try {
 							cell.newBaggle();
 						} catch (AlreadyHaveBaggleException e1) {
+							System.out.println("The impossible did happen (yet again)");
 							e1.printStackTrace();
 						}
 				} else if (cmd.equals("colors")) {
@@ -73,9 +74,70 @@ public class MapView extends BuggleWorldView {
 						return;
 					cell.emptyContent();
 					cell.addContent(inputValue);
+					
+				} else if (cmd.equals("buggle")) {
+					Buggle thebuggle = null;
+					for (Entity ent:editor.getWorld().getEntities()) {
+						Buggle b = (Buggle) ent;
+						if (b.getX() == x && b.getY() == y) {
+							thebuggle = b;
+							break;
+						}
+					}
+					if (thebuggle == null) {
+						thebuggle = new Buggle(editor.getWorld(),"buggle"+(++buggleCount), x,y,Direction.NORTH,Color.black, Color.black);
+					} 
+					editor.setSelectedEntity(thebuggle);
+				} else if (cmd.equals("nobuggle")) {
+					Buggle thebuggle = null;
+					for (Entity ent:editor.getWorld().getEntities()) {
+						Buggle b = (Buggle) ent;
+						if (b.getX() == x && b.getY() == y) {
+							thebuggle = b;
+							break;
+						}
+					}
+					if (thebuggle != null) {
+						editor.getWorld().removeEntity(thebuggle);
+						if (editor.getWorld().getEntities().contains(thebuggle))
+							System.err.println("The entity is still in "+editor.getWorld().getEntities().indexOf(thebuggle)+"!!");
+
+					}
+					editor.setSelectedEntity(null);
 				}
 			}
 		};
 		addMouseListener(mouseListener);
 	}
+
+	@Override
+	public void worldEdited() {
+		worldHasChanged();// use the callbacks of the regular view -- not really clean but efficient
+	}
+
+	@Override
+	public void selectedChanged(int x, int y, Entity ent) {
+		/* I'm too lazy to react to this */
+		this.repaint();
+	}
+	
+	@Override
+	public void paintComponent(Graphics g) {
+		super.paintComponent(g);
+		BuggleWorldCell selection = editor.getWorld().getSelectedCell();
+		if (selection != null) {
+			int padx = (int) getPadX();
+			int pady = (int) getPadY();
+			int ox = (int) (selection.getX()*getCellWidth()); // x-offset of the cell
+			int oy = (int) ((selection.getY())*getCellWidth()); // y-offset of the cell
+			int cellW = (int) getCellWidth();
+
+			g.setColor(Color.RED);
+			g.drawRoundRect(padx+ox+2, pady+oy+2, cellW-4,cellW-4, cellW/10, cellW/10);
+			g.setColor(Color.WHITE);
+			g.drawRoundRect(padx+ox+3, pady+oy+3, cellW-6,cellW-6, cellW/10, cellW/10);
+			g.setColor(Color.RED);
+			g.drawRoundRect(padx+ox+4, pady+oy+4, cellW-8,cellW-8, cellW/10, cellW/10);
+		}
+	}
 }
diff --git a/src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java b/src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java
new file mode 100644
index 0000000..7e39b3f
--- /dev/null
+++ b/src/jlm/universe/bugglequest/mapeditor/PropertiesEditor.java
@@ -0,0 +1,389 @@
+package jlm.universe.bugglequest.mapeditor;
+
+import java.awt.BorderLayout;
+import java.awt.Color;
+import java.awt.Dimension;
+import java.util.Vector;
+
+import javax.swing.JComponent;
+import javax.swing.JScrollPane;
+import javax.swing.JTable;
+import javax.swing.ListSelectionModel;
+import javax.swing.event.TableModelEvent;
+import javax.swing.event.TableModelListener;
+import javax.swing.table.DefaultTableModel;
+
+import jlm.core.utils.ColorMapper;
+import jlm.core.utils.InvalidColorNameException;
+import jlm.universe.Direction;
+import jlm.universe.Entity;
+import jlm.universe.World;
+import jlm.universe.bugglequest.AbstractBuggle;
+import jlm.universe.bugglequest.Baggle;
+import jlm.universe.bugglequest.BuggleWorld;
+import jlm.universe.bugglequest.BuggleWorldCell;
+import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
+
+import org.xnap.commons.i18n.I18n;
+import org.xnap.commons.i18n.I18nFactory;
+
+public class PropertiesEditor extends JComponent implements EditionListener {
+	private static final long serialVersionUID = 3904327915735497696L;
+	private I18n i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",getLocale(), I18nFactory.FALLBACK);
+	
+	private AbstractBuggle selectedBuggle;
+
+	private DefaultTableModel model = new DefaultTableModel() {
+		private static final long serialVersionUID = 1L;
+
+		public boolean isCellEditable(int rowIndex, int colIndex) {
+			return colIndex>0;
+		}
+	};
+	private JTable table = new JTable(model);
+
+	private Editor editor; 
+	private int selectedXRank,selectedYRank,topRank,leftRank,baggleRank;
+
+	Vector<JLMProperty> properties = new Vector<JLMProperty>();
+	
+	public PropertiesEditor(Editor _editor) {
+		editor = _editor;
+		editor.addEditionListener(this);
+
+		setLayout(new BorderLayout());
+		add(new JScrollPane(table), BorderLayout.CENTER);
+
+		model.setColumnCount(2);
+		model.setColumnIdentifiers(new Object[] {i18n.tr("Property"), i18n.tr("Value")});
+		table.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
+		repopulateTable();
+		setVisible(true);
+		setPreferredSize(new Dimension(100, 500));
+
+		model.addTableModelListener(new MyTableModelListener(editor,table,properties));
+	}
+	private void repopulateTable() {
+		while (model.getRowCount()>0)
+			model.removeRow(0);
+		properties.removeAllElements();
+
+		/* The editor for the name */
+		model.insertRow(0, new Object[] {i18n.tr("World name"), new JLMProperty(properties) { 
+			@Override
+			public void setValue(String value) {
+				editor.getWorld().setName(value);
+			}
+			@Override
+			public String toString() {
+				return editor.getWorld().getName();
+			}
+		}});
+
+		/*---------- world width ---------------*/
+		model.addRow(new Object[] {i18n.tr("World width"), new JLMProperty(properties) {
+			@Override
+			public String toString() {
+				return ""+editor.getWorld().getWidth();
+			}
+			@Override
+			public void setValue(String value) {
+				Integer i;
+				try {
+					i = Integer.parseInt(value);
+				} catch (NumberFormatException nfe) {
+					table.setValueAt(""+editor.getWorld().getWidth(),rank,1);
+					return; // silently ignore invalid values
+				}
+				editor.getWorld().setWidth(i);
+				editor.getWorld().notifyWorldUpdatesListeners();
+			}
+		}});
+		
+		/*---------- world height ---------------*/
+		model.addRow(new Object[] {i18n.tr("World height"), new JLMProperty(properties) {
+			@Override
+			public String toString() {
+				return ""+editor.getWorld().getHeight();
+			}
+			@Override
+			public void setValue(String value) {
+				Integer i;
+				try {
+					i = Integer.parseInt(value);
+				} catch (NumberFormatException nfe) {
+					table.setValueAt(""+editor.getWorld().getHeight(),rank,1);
+					return; // silently ignore invalid values
+				}
+				editor.getWorld().setHeight(i);
+				editor.getWorld().notifyWorldUpdatesListeners();
+			}
+		}});
+
+		/*---------- selected cell ---------------*/
+		model.addRow(new Object[] {i18n.tr("Selected cell X"), new JLMProperty(properties) {
+			@Override
+			public String toString() {
+				selectedXRank = rank;
+				return ""+editor.getWorld().getSelectedCell().getX();
+			}
+			@Override
+			public void setValue(String value) {
+				Integer x;
+				try {
+					x = Integer.parseInt(value);
+					if (x>=editor.getWorld().getWidth() || x<0)
+						throw new NumberFormatException("out of world");
+				} catch (NumberFormatException nfe) {
+					table.setValueAt(""+editor.getWorld().getSelectedCell().getX(),rank,1);
+					return; // silently ignore invalid values
+				}
+				editor.setSelectedCell(x, editor.getWorld().getSelectedCell().getY());
+			}
+		}});
+
+		/*---------- selected cell ---------------*/
+		model.addRow(new Object[] {i18n.tr("Selected cell Y"), new JLMProperty(properties) {
+			@Override
+			public String toString() {
+				selectedYRank = rank;
+				return ""+editor.getWorld().getSelectedCell().getY();
+			}
+			@Override
+			public void setValue(String value) {
+				Integer y;
+				try {
+					y = Integer.parseInt(value);
+					if (y>=editor.getWorld().getHeight() || y<0)
+						throw new NumberFormatException("out of world");
+				} catch (NumberFormatException nfe) {
+					table.setValueAt(""+editor.getWorld().getSelectedCell().getY(),rank,1);
+					return; // silently ignore invalid values
+				}
+				editor.setSelectedCell(editor.getWorld().getSelectedCell().getX(),y);
+			}
+		}});
+		/*---------- Ground color ---------------*/
+		model.addRow(new Object[] {i18n.tr("Ground color (name or r/g/b)"), new JLMProperty(properties) {
+			@Override
+			public String toString() {
+				return ColorMapper.color2name( editor.getWorld().getSelectedCell().getColor() );
+			}
+			@Override
+			public void setValue(String value) {
+				try {
+					Color c = ColorMapper.name2color(value);
+					editor.getWorld().getSelectedCell().setColor(c);
+				} catch (InvalidColorNameException icn) {
+					table.setValueAt(ColorMapper.color2name(editor.getWorld().getSelectedCell().getColor()),rank,1);
+				}
+			}
+		}});
+
+		/*---------- top wall cell ---------------*/
+		model.addRow(new Object[] {i18n.tr("Top wall?"), new JLMProperty(properties) {
+			@Override
+			public String toString() {
+				topRank = rank;
+				return editor.getWorld().getSelectedCell().hasTopWall()?"Y":"N";
+			}
+			@Override
+			public void setValue(String value) {
+				if (!value.equalsIgnoreCase("Y") && !value.equalsIgnoreCase("N")) {
+					table.setValueAt(editor.getWorld().getSelectedCell().hasTopWall()?"Y":"N",rank,1);
+					return;
+					
+				} else if (value.equalsIgnoreCase("Y")) {
+					if (!editor.getWorld().getSelectedCell().hasTopWall()) // only update if needed
+						editor.getWorld().getSelectedCell().putTopWall();
+				} else {
+					if (editor.getWorld().getSelectedCell().hasTopWall()) // only update if needed
+						editor.getWorld().getSelectedCell().removeTopWall();
+				}
+			}
+		}});
+		/*---------- left wall cell ---------------*/
+		model.addRow(new Object[] {i18n.tr("Left wall?"), new JLMProperty(properties) {
+			@Override
+			public String toString() {
+				leftRank = rank;
+				return editor.getWorld().getSelectedCell().hasLeftWall()?"Y":"N";
+			}
+			@Override
+			public void setValue(String value) {
+				if (!value.equalsIgnoreCase("Y") && !value.equalsIgnoreCase("N")) {
+					table.setValueAt(editor.getWorld().getSelectedCell().hasLeftWall()?"Y":"N",rank,1);
+					return;
+					
+				} else if (value.equalsIgnoreCase("Y")) {
+					if (!editor.getWorld().getSelectedCell().hasLeftWall()) // only update if needed
+						editor.getWorld().getSelectedCell().putLeftWall();
+				} else {
+					if (editor.getWorld().getSelectedCell().hasLeftWall()) // only update if needed
+						editor.getWorld().getSelectedCell().removeLeftWall();
+				}
+			}
+		}});
+		/*---------- have baggle ---------------*/
+		model.addRow(new Object[] {i18n.tr("Baggle?"), new JLMProperty(properties) {
+			@Override
+			public String toString() {
+				baggleRank = rank;
+				return editor.getWorld().getSelectedCell().hasBaggle()?"Y":"N";
+			}
+			@Override
+			public void setValue(String value) {
+				BuggleWorldCell selected = editor.getWorld().getSelectedCell();
+				
+				try {
+					if (!value.equalsIgnoreCase("Y") && !value.equalsIgnoreCase("N")) {
+						table.setValueAt(editor.getWorld().getSelectedCell().hasBaggle()?"Y":"N",rank,1);
+						return;
+
+					} else if (value.equalsIgnoreCase("Y")) {
+						if (!selected.hasBaggle()) // only update if needed
+							selected.setBaggle(new Baggle(selected));
+					} else {
+						if (selected.hasBaggle()) // only update if needed
+							selected.setBaggle(null);
+					}
+				} catch (AlreadyHaveBaggleException e) { 
+					System.err.println("The impossible happened (yet again)");
+					e.printStackTrace();
+				}
+			}
+		}});
+		
+		if (selectedBuggle != null) {
+			/*---------- Buggle name ---------------*/
+			model.addRow(new Object[] {i18n.tr("Buggle name"), new JLMProperty(properties) {
+				@Override
+				public String toString() {
+					return selectedBuggle.getName();
+				}
+				@Override
+				public void setValue(String value) {
+					selectedBuggle.setName(value);
+				}
+			}});
+			/*---------- Buggle direction ---------------*/
+			model.addRow(new Object[] {i18n.tr("Buggle direction (N|S|E|W)"), new JLMProperty(properties) {
+				@Override
+				public String toString() {
+					if (selectedBuggle.getDirection().equals(Direction.NORTH)) 
+						return "N";
+					if (selectedBuggle.getDirection().equals(Direction.SOUTH))
+						return "S";
+					if (selectedBuggle.getDirection().equals(Direction.EAST))
+						return "E";
+					if (selectedBuggle.getDirection().equals(Direction.WEST))
+						return "W";
+					return "?";
+				}
+				@Override
+				public void setValue(String value) {
+					if (value.equalsIgnoreCase("N"))
+						selectedBuggle.setDirection(Direction.NORTH);
+					if (value.equalsIgnoreCase("S"))
+						selectedBuggle.setDirection(Direction.SOUTH);
+					if (value.equalsIgnoreCase("E"))
+						selectedBuggle.setDirection(Direction.EAST);
+					if (value.equalsIgnoreCase("W"))
+						selectedBuggle.setDirection(Direction.WEST);
+					else {
+						table.setValueAt(this.toString(),rank,1);
+					}
+				}
+			}});
+			/*---------- Buggle color ---------------*/
+			model.addRow(new Object[] {i18n.tr("Buggle color (name or r/g/b)"), new JLMProperty(properties) {
+				@Override
+				public String toString() {
+					return ColorMapper.color2name( selectedBuggle.getColor() );
+				}
+				@Override
+				public void setValue(String value) {
+					try {
+						Color c = ColorMapper.name2color(value);
+						selectedBuggle.setColor(c);
+					} catch (InvalidColorNameException icn) {
+						table.setValueAt(ColorMapper.color2name(selectedBuggle.getColor()),rank,1);
+					}
+				}
+			}});
+			/*---------- Buggle color ---------------*/
+			model.addRow(new Object[] {i18n.tr("Brush color (name or r/g/b)"), new JLMProperty(properties) {
+				@Override
+				public String toString() {
+					return ColorMapper.color2name( selectedBuggle.getBrushColor() );
+				}
+				@Override
+				public void setValue(String value) {
+					try {
+						Color c = ColorMapper.name2color(value);
+						selectedBuggle.setBrushColor(c);
+					} catch (InvalidColorNameException icn) {
+						table.setValueAt(ColorMapper.color2name(selectedBuggle.getBrushColor()),rank,1);
+					}
+				}
+			}});
+		}
+	}
+	@Override
+	public void setWorld(World w) {
+		if (((BuggleWorld) w).getSelectedCell() == null)
+			((BuggleWorld) w).setSelectedCell(0,0);
+		repopulateTable();		
+		
+	}
+	@Override
+	public void worldEdited() {
+		BuggleWorldCell selected = editor.getWorld().getSelectedCell();
+		
+		table.setValueAt(""+selected.getX(),selectedXRank,1);
+		table.setValueAt(""+selected.getY(),selectedYRank,1);
+		table.setValueAt(selected.hasTopWall() ?"Y":"N", topRank, 1);
+		table.setValueAt(selected.hasLeftWall()?"Y":"N", leftRank,1);
+		table.setValueAt(selected.hasBaggle()?"Y":"N", baggleRank,1);
+	}
+	@Override
+	public void selectedChanged(int x, int y, Entity ent) {
+		selectedBuggle = (AbstractBuggle) ent;
+		repopulateTable();
+	}
+}
+
+class MyTableModelListener implements TableModelListener {
+	private JTable table;
+	private Vector<JLMProperty> properties;
+
+	private boolean ongoing = false;
+	
+	MyTableModelListener(Editor e, JTable t, Vector<JLMProperty> props) {
+		table = t;
+		properties = props;
+	}
+	public void tableChanged(TableModelEvent e) {
+		if (ongoing) 
+			return;
+		
+		ongoing = true;
+		int row = e.getFirstRow(); // selections are SINGLE_SELECTION anyway, so ignore getLastRow
+
+		if (e.getType() == TableModelEvent.UPDATE) 
+			for (JLMProperty p : properties) 
+				if (p.rank == row) 
+					p.setValue(""+ table.getModel().getValueAt(row, 1));
+		ongoing = false;
+	}
+}
+
+abstract class JLMProperty {
+	public int rank;
+	public JLMProperty(Vector<JLMProperty> props) {
+		rank = props.size();
+		props.add(this);
+	}
+	public abstract void setValue(String value);
+	public abstract String toString();
+}
diff --git a/src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java b/src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java
index 66cedb1..b874945 100644
--- a/src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java
+++ b/src/jlm/universe/bugglequest/ui/BuggleButtonPanel.java
@@ -221,15 +221,6 @@ public class BuggleButtonPanel extends EntityControlPanel {
 		String message ;
 		String title = i18n.tr("Wall hugging error");
 		message = i18n.tr("Your buggle has collided with a wall, it hurts a lot ! ='(");
-//TODO: remove if validated
-//		if ( FileUtils.getLocale().equals("fr"))
-//		{
-//			message = "Votre buggle est rentr��e dans un mur, ��a fait mal ! ='(";
-//		}
-//		else
-//		{
-//			message = "Your buggle has collided with a wall, it hurts a lot ! ='(";
-//		}
 		JOptionPane.showMessageDialog(null, message,title, JOptionPane.ERROR_MESSAGE);
 	}
 
diff --git a/src/jlm/universe/bugglequest/ui/BuggleColorCellRenderer.java b/src/jlm/universe/bugglequest/ui/BuggleColorCellRenderer.java
index bd3a66e..8b1d2af 100644
--- a/src/jlm/universe/bugglequest/ui/BuggleColorCellRenderer.java
+++ b/src/jlm/universe/bugglequest/ui/BuggleColorCellRenderer.java
@@ -10,7 +10,6 @@ import javax.swing.ListCellRenderer;
 
 /**
  * This cell renderer is used by the combo boxes from BuggleButtonPanel in order to show some fancy colored rectangles.
- * @author Julien BASTIAN 
  * @see ListCellRenderer
  * @see BuggleButtonPanel
  */
diff --git a/src/jlm/universe/bugglequest/ui/BuggleWorldView.java b/src/jlm/universe/bugglequest/ui/BuggleWorldView.java
index f7c1541..c68ee77 100644
--- a/src/jlm/universe/bugglequest/ui/BuggleWorldView.java
+++ b/src/jlm/universe/bugglequest/ui/BuggleWorldView.java
@@ -13,7 +13,6 @@ import java.io.InputStream;
 import javax.imageio.ImageIO;
 import javax.swing.ImageIcon;
 
-import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.Entity;
 import jlm.universe.World;
@@ -39,7 +38,7 @@ public class BuggleWorldView extends WorldView {
 	}
 		
 	protected double getCellWidth() {
-		return (double) Math.min(getHeight(), getWidth()) / Math.max(((BuggleWorld)world).getWidth(), ((BuggleWorld)world).getHeight());
+		return (double) Math.min(getHeight() / ((BuggleWorld)world).getHeight() , getWidth() /  ((BuggleWorld)world).getWidth());
 	}
 	
 	protected double getPadX() {
@@ -316,9 +315,4 @@ public class BuggleWorldView extends WorldView {
 		{ 0,0,0,0,1,1,0,0,0,0,0 },
 		{ 0,0,0,0,0,1,1,1,0,0,0 }
 	}};
-	
-	@Override
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_buggle.png");
-	}
 }
diff --git a/src/jlm/universe/hanoi/HanoiEntity.java b/src/jlm/universe/hanoi/HanoiEntity.java
deleted file mode 100644
index 83c900f..0000000
--- a/src/jlm/universe/hanoi/HanoiEntity.java
+++ /dev/null
@@ -1,64 +0,0 @@
-package jlm.universe.hanoi;
-/* BEGIN TEMPLATE */
-import jlm.universe.Entity;
-import jlm.universe.World;
-
-public class HanoiEntity extends Entity {
-	/** Instantiation Constructor (used by exercises to setup the world) 
-	 * Must call super(name, world). If you had fields to setup, you'd  have to add more parameters
-	 */
-	public HanoiEntity(String name, World world) {
-		/* BEGIN HIDDEN */
-		super(name,world);
-		/* END HIDDEN */
-	}
-
-	/** Part of the copy process 
-	 * Must call super(name)
-	 */
-	public HanoiEntity(String name) {
-		/* BEGIN HIDDEN */
-		super(name);
-		/* END HIDDEN */
-	}
-	/** Must exist too. Calling HanoiEntity("dummy name") is ok */
-	public HanoiEntity() {
-		/* BEGIN HIDDEN */
-		this("Hanoi Entity");
-		/* END HIDDEN */
-	}
-
-	/** Must *NOT* call HanoiEntity(name, world) because it's called in a traversal of the world so you don't want to modify it.
-	 * Instead, call HanoiEntity(name), leaving the world field empty; the JLM will fill it with the right value afterward 
-	 */
-	@Override
-	public Entity copy() {
-		/* BEGIN HIDDEN */
-		return new HanoiEntity(name);
-		/* END HIDDEN */
-	}
-
-	/** Must exist so that exercises can instantiate your entity (Entity is abstract) */
-	@Override
-	public void run() throws HanoiInvalidMove {
-	}
-
-	/** Part of your world logic */
-	public void move(int src, int dst) throws HanoiInvalidMove {
-		/* BEGIN HIDDEN */
-		((HanoiWorld) world).move(src,dst);
-		stepUI();
-		/* END HIDDEN */
-	}
-	public int getSlotSize(int slot) {
-		return ((HanoiWorld) world).getSlotSize(slot);
-	}
-	
-	/* BEGIN HIDDEN */
-	@Override
-	public String toString(){
-		return "HanoiEntity (" + this.getClass().getName() + ")";
-	}
-	/* END HIDDEN */
-}
-/* END TEMPLATE */
diff --git a/src/jlm/universe/hanoi/HanoiInvalidMove.java b/src/jlm/universe/hanoi/HanoiInvalidMove.java
deleted file mode 100644
index ea1d00d..0000000
--- a/src/jlm/universe/hanoi/HanoiInvalidMove.java
+++ /dev/null
@@ -1,10 +0,0 @@
-package jlm.universe.hanoi;
-
-public class HanoiInvalidMove extends Exception {
-	public HanoiInvalidMove(String msg) {
-		super(msg);
-	}
-
-	private static final long serialVersionUID = 1L;
-
-}
diff --git a/src/jlm/universe/hanoi/HanoiMovePanel.java b/src/jlm/universe/hanoi/HanoiMovePanel.java
deleted file mode 100644
index fdaa796..0000000
--- a/src/jlm/universe/hanoi/HanoiMovePanel.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package jlm.universe.hanoi;
-
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-
-import jlm.core.model.Game;
-import jlm.universe.EntityControlPanel;
-
-/**
- * The control panel for the burned pancake world. 
- * It allows you to use to flip the pancake
- * @author Julien BASTIAN
- * @see EntityControlPanel
- * @see HanoiWorld
- */
-public class HanoiMovePanel extends EntityControlPanel {
-
-	private static final long serialVersionUID = 1L;
-	private JComboBox sourceSelector;
-	private JComboBox destinationSelector;
-	private JButton validateButton;
-
-	/**
-	 * Constructor of HanoiMovePanel
-	 * It initializes the command panel
-	 */
-	public HanoiMovePanel() {
-		super();
-		this.add(this.createMovePanel());
-	}
-
-	/**
-	 * Create the command panel of the HanoiMovePanel
-	 * @return a JPanel containing the move panel
-	 */
-	private JPanel createMovePanel() {
-		JPanel movePanel = new JPanel() ;
-
-		movePanel.add(new JLabel("move"));
-
-		this.initSelectors();
-		movePanel.add(this.sourceSelector);
-		movePanel.add(this.destinationSelector);
-
-		this.initValidateButton();
-		movePanel.add(this.validateButton);
-
-		return movePanel;
-	}
-
-	/**
-	 * Initialize the validate button
-	 */
-	private void initValidateButton() {
-		this.validateButton = new JButton("Validate");
-		this.validateButton.addActionListener(new ActionListener() {
-			@Override
-			public void actionPerformed(ActionEvent e) {
-				HanoiEntity he = (HanoiEntity) Game.getInstance().getSelectedEntity();
-				int src = sourceSelector.getSelectedIndex();
-				int dst = destinationSelector.getSelectedIndex();
-				try 
-				{
-					he.move(src, dst);
-				} 
-				catch (HanoiInvalidMove him) 
-				{
-					showInvalidMoveMessageDialog(him);
-				}
-
-			}
-		});
-	}
-
-	/**
-	 * Initialize the source and the destination selectors
-	 */
-	private void initSelectors() {
-		Integer[] values = new Integer[3];
-		for (int i = 0 ; i < 3 ; i++)
-		{
-			values[i] = i;
-		}
-		this.sourceSelector = new JComboBox(values);
-		this.destinationSelector = new JComboBox(values);
-	}
-
-	/**
-	 * Allow to enable or disable each component of the control panel
-	 * @param enabled if the composants shall be enabled or not
-	 */
-	@Override
-	public void setEnabledControl(boolean enabled) {
-		this.sourceSelector.setEnabled(enabled);
-		this.destinationSelector.setEnabled(enabled);
-		this.validateButton.setEnabled(enabled);
-	}
-	
-	/**
-	 * Show a message dialog explaining that the user try to make an invalid move on the field
-	 * @param 
-	 */
-	protected void showInvalidMoveMessageDialog(HanoiInvalidMove him) {
-		String message = him.getLocalizedMessage();;
-		String title = "Invalid move" ;
-		JOptionPane.showMessageDialog(null, message,title, JOptionPane.ERROR_MESSAGE);
-	}
-
-}
diff --git a/src/jlm/universe/hanoi/HanoiWorld.fr.html b/src/jlm/universe/hanoi/HanoiWorld.fr.html
deleted file mode 100644
index acf3fa9..0000000
--- a/src/jlm/universe/hanoi/HanoiWorld.fr.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<h1>Le monde des tours de Hanoï</h1>
-
-Ce monde implémente le problème ultra classique de Hanoï. Il vous est
-demandé
-de déplacer une pile de disques du piquet où ils se trouvent vers un piquet
-cible (passé comme second paramètre dans le nom du monde -- numéro 1 pour le
-monde par défaut). Il y a quelques contraintes supplémentaires: il est
-interdit
-de déplacer plus d'un disque à la fois, ainsi que de placer un disque plus
-grand sur un disque plus petit. Seules deux fonctions sont fournies :
-
-<pre>public void move(int src, int dst) throws HanoiInvalidMove;</pre>
-
-Elle déplace un disque d'un piquet <code>src</code> vers le piquet
-<code>dst</code>. Comme vous le voyez, si vous demandez un déplacement
-invalide (comme le placement d'un disque sur un disque plus petit), une
-exception est levée.
-
-<pre>int getSlotSize(int slot);</pre>
-
-Elle retourne le nombre de disques placés sur un piquet donné. Cette
-fonction
-est surtout utile pour initialiser la récursion et déterminer le nombre
-d'appels récursifs à réaliser.
\ No newline at end of file
diff --git a/src/jlm/universe/hanoi/HanoiWorld.html b/src/jlm/universe/hanoi/HanoiWorld.html
deleted file mode 100644
index 64f1248..0000000
--- a/src/jlm/universe/hanoi/HanoiWorld.html
+++ /dev/null
@@ -1,20 +0,0 @@
-<h1>HanoiWorld</h1>
-
-This world implements the ultra-classical Hanoi problem. You are asked
-to move the disk pile from the stick where they are to the target
-stick (given as second parameter in the world's name -- number 1 for
-the default world). There is some extra constraint: you can only move
-one disk at a time, and you cannot move a big disk over a smaller one.
-
-Only 2 functions are provided:
-
-<pre>public void move(int src, int dst) throws HanoiInvalidMove;</pre>
-
-It moves one disk from the stick <code>src</code> onto the stick
-<code>dst</code>. As you can see, if you try to do an invalid move (like
-laying a disk over a smaller one), an exception is thrown.
-
-<pre>int getSlotSize(int slot);</pre>
-
-It returns the amount of disks placed on the specified slot. This is mainly 
-used to initialize the recursion and set the amount of recursive call to execute.
\ No newline at end of file
diff --git a/src/jlm/universe/hanoi/HanoiWorld.java b/src/jlm/universe/hanoi/HanoiWorld.java
deleted file mode 100644
index 60f979c..0000000
--- a/src/jlm/universe/hanoi/HanoiWorld.java
+++ /dev/null
@@ -1,171 +0,0 @@
-package jlm.universe.hanoi;
-
-import java.util.Vector;
-
-import javax.script.ScriptEngine;
-import javax.script.ScriptException;
-
-import jlm.core.model.Game;
-import jlm.core.model.ProgrammingLanguage;
-import jlm.core.ui.WorldView;
-import jlm.universe.EntityControlPanel;
-import jlm.universe.World;
-
-/* BEGIN TEMPLATE */
-public class HanoiWorld extends World {	
-	/** A copy constructor (mandatory for the internal compilation mechanism to work)
-	 * 
-	 * There is normally no need to change it, but it must be present. 
-	 */ 
-	public HanoiWorld(HanoiWorld other) {
-		super(other);
-	}
-	
-	/** The constructor that the exercises will use to setup the world.
-	 *  
-	 * It must begin by super(name), and the rest is free (depending on the state describing your world).
-	 * It is a good idea to use setDelay to specify the default animation delay, but this is not mandatory.
-	 * 
-	 * You can perfectly have several such constructor. 
-	 * 
-	 * In general, you could even have none of them, but writing exercises will be harder. 
-	 * The metalesson, use this specific constructor, so please don't change its arguments.
-	 */
-	@SuppressWarnings("unchecked")
-	public HanoiWorld(String name, Integer[] A, Integer[] B, Integer[] C) {
-		super(name);
-		setDelay(200); /* Delay (in ms) in default animations */
-		/* Your code here */
-		/* BEGIN HIDDEN */
-		slots = new Vector[] {new Vector<Integer>(), new Vector<Integer>(), new Vector<Integer>()};
-		
-		for (int i=0; i<A.length; i++) 
-			slots[0].add(A[i]);
-		for (int i=0; i<B.length; i++) 
-			slots[1].add(B[i]);
-		for (int i=0; i<C.length; i++) 
-			slots[2].add(C[i]);
-		/* END HIDDEN */
-	}
-	
-	/** Reset the state of the current world to the one passed in argument
-	 * 
-	 * This is mandatory for the JLM good working. Even if the prototype says that the passed object can be 
-	 * any kind of world, you can be sure that it's of the same type than the current world. So, there is 
-	 * no need to check before casting your argument.
-	 * 
-	 * Do not forget to call super.reset(w) afterward, or some internal world fields may not get reset.
-	 */
-	@SuppressWarnings("unchecked")
-	@Override
-	public void reset(World w) {
-		HanoiWorld other = (HanoiWorld)w;
-		/* Your code here */
-		/* BEGIN HIDDEN */
-		slots = new Vector[] {new Vector<Integer>(), new Vector<Integer>(), new Vector<Integer>()};
-		for (int slot=0;slot<3;slot++)
-			for (int i=0; i<other.slots[slot].size(); i++)
-				slots[slot].add( other.slots[slot].elementAt(i));
-		/* END HIDDEN */
-		super.reset(w);		
-	}
-
-	/* BEGIN HIDDEN */
-	/** Returns a component able of displaying the world -- will be used in third exercise 
-	 * You should comment this for the first exercises */
-	@Override
-	public WorldView getView() {
-		return new jlm.universe.hanoi.HanoiWorldView(this);
-	}
-	/* END HIDDEN */
-	
-	/* BEGIN HIDDEN */
-	@Override
-	public String toString(){
-		StringBuffer sb = new StringBuffer();
-		sb.append("HanoiWorld "+getName()+": ");
-		sb.append("A: [");
-		for (Object i:slots[0].toArray()) 
-			sb.append(i+" ");
-		sb.append("] B: [");
-		for (Object i:slots[1].toArray()) 
-			sb.append(i+" ");
-		sb.append("] C: [");
-		for (Object i:slots[2].toArray()) 
-			sb.append(i+" ");
-		sb.append("]");
-		return sb.toString();
-	}
-	/* END HIDDEN */
-
-	/** Used to check whether the student code changed the world in the right state -- see exercise 4 */
-	@Override 
-	public boolean equals(Object o) {
-		/* BEGIN HIDDEN */
-		if (o == null || !(o instanceof HanoiWorld))
-			return false;
-		HanoiWorld other = (HanoiWorld) o;
-		for (int i=0;i<3;i++) {
-			if (!(this.slots[i].equals(other.slots[i])))
-				return false;
-		}
-		/* END HIDDEN */
-		return true;
-	}
-	
-	@Override
-	public String diffTo(World world) {
-		return null; // FIXME: how to represent this textually?
-	}
-	
-	/* Here comes the world logic */
-	/* BEGIN HIDDEN */
-	private Vector<Integer> slots[];
-	
-	/** This function is used by the view to retrieve the data to display */
-	protected Integer[] values(Integer	 i) {
-		return slots[i].toArray(new Integer[slots[i].size()]);
-	}
-	
-	/** This is the main function of the public interface */
-	public void move(Integer src, Integer dst) throws HanoiInvalidMove {
-		if (src < 0 || src > 2 || dst < 0 || dst > 2)
-			throw new HanoiInvalidMove("Cannot move from slot #"+src+" to #"+dst+": the only existing slots are 0, 1 and 2");
-		if (src == dst)
-			throw new HanoiInvalidMove("Cannot move from slot #"+src+" to itself");
-		if (slots[src].size() == 0)
-			throw new HanoiInvalidMove("No disc to move from slot #"+src);
-		
-		if (slots[dst].size() > 0 &&
-				slots[src].lastElement() > slots[dst].lastElement())
-			throw new HanoiInvalidMove("Cannot move disc from slot #"+src+" to #"+dst+": small disk must remain over large ones but "+
-					slots[src].lastElement() +" > "+slots[dst].lastElement());
-		
-		slots[dst].add( slots[src].remove(slots[src].size()-1) );
-	}
-	public int getSlotSize(int slot) {
-		return slots[slot].size();
-	}
-	@Override
-	public void setupBindings(ProgrammingLanguage lang, ScriptEngine e) throws ScriptException {
-		if (lang.equals(Game.PYTHON)) {
-			e.eval( "def move(src,dst):\n"+
-					"  entity.move(src,dst)\n"+
-					"def getSlotSize(slot):\n"+
-					"  return entity.getSlotSize(slot)\n");
-		} else {
-			throw new RuntimeException("No binding of HanoiWorld for "+lang);
-		}
-	}
-	
-	/**
-	 * Return the panel which let the user to interact dynamically with the world
-	 */
-	@Override
-	public EntityControlPanel getEntityControlPanel() {
-		return new HanoiMovePanel();
-	}
-	/* END HIDDEN */
-
-}
-/* END TEMPLATE */
\ No newline at end of file
diff --git a/src/jlm/universe/hanoi/HanoiWorldView.java b/src/jlm/universe/hanoi/HanoiWorldView.java
deleted file mode 100644
index 3e24e55..0000000
--- a/src/jlm/universe/hanoi/HanoiWorldView.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package jlm.universe.hanoi;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.geom.Rectangle2D;
-
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
-import jlm.core.ui.WorldView;
-import jlm.universe.World;
-
-public class HanoiWorldView extends WorldView {
-	private static final long serialVersionUID = 1L;
-	
-	public HanoiWorldView(World w) {
-		super(w);
-	}
-
-	@Override
-	public void paintComponent(Graphics g) {
-		HanoiWorld hw = (HanoiWorld)world;
-		super.paintComponent(g);
-		
-		Graphics2D g2 = (Graphics2D) g;
-
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-		
-		double renderedX = 300.;
-		double renderedY = 250.;		
-		double ratio = Math.min(((double) getWidth()) / renderedX, ((double) getHeight()) / renderedY);
-		g2.translate(Math.abs(getWidth() - ratio * renderedX)/2., Math.abs(getHeight() - ratio * renderedY)/2.);
-		g2.scale(ratio, ratio);
-		
-		/* clear board */
-		g2.setColor(Color.white);
-		g2.fill(new Rectangle2D.Double(0., 0., renderedX, renderedY));
-		
-		
-		drawSlot(g2,hw.values(0), 50.);
-		drawSlot(g2,hw.values(1), 150.);
-		drawSlot(g2,hw.values(2), 250.);
-	}
-	
-	private void drawSlot(Graphics2D g2, Integer[] values, double xoffset) {
-		/* draw bar */
-		g2.setColor(Color.black);
-		g2.fill(new Rectangle2D.Double(xoffset-2, 55.,  2., 125.));
-		
-		if (values==null)
-			return;
-		
-		/* draw discs */
-		int height = 1;
-		for (int size : values) { 
-			g2.setColor(Color.yellow);
-			g2.fill(new Rectangle2D.Double( xoffset-size*5-3, 180-(15.*height),  size*10+3, 10));
-			g2.setColor(Color.black);
-			g2.draw(new Rectangle2D.Double( xoffset-size*5-3, 180-(15.*height),  size*10+3, 10));
-			height++;
-		}
-	}
-
-	@Override
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_hanoi.png");
-	}
-}
-
-
diff --git a/src/jlm/universe/hanoi/package-info.java b/src/jlm/universe/hanoi/package-info.java
deleted file mode 100644
index 1f6436b..0000000
--- a/src/jlm/universe/hanoi/package-info.java
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Simple universe on the Hanoi towers, the ultra-classical recusion problem
- */
-
-package jlm.universe.hanoi;
-
-
diff --git a/src/jlm/universe/lightbot/LightBotWorld.java b/src/jlm/universe/lightbot/LightBotWorld.java
index a2873f7..b8c9bee 100644
--- a/src/jlm/universe/lightbot/LightBotWorld.java
+++ b/src/jlm/universe/lightbot/LightBotWorld.java
@@ -4,8 +4,10 @@ import java.util.Arrays;
 import java.util.Iterator;
 
 import javax.script.ScriptEngine;
+import javax.swing.ImageIcon;
 
 import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.Entity;
 import jlm.universe.GridWorld;
@@ -17,13 +19,10 @@ public class LightBotWorld extends jlm.universe.GridWorld implements Iterable<Li
 		super(name,x,y);
 		setDelay(200);
 	}
-	@Override
-	public void create(int x, int y) {
-		super.create(x,y);
-		for (int i = 0; i < sizeX; i++)
-			for (int j = 0; j < sizeY; j++)
-				setCell(new LightBotWorldCell(this, i, j), i, j) ;
+	protected LightBotWorldCell newCell(int x, int y) {
+		return new LightBotWorldCell(this, x, y);
 	}
+
 	/**
 	 * Create a new world being almost a copy of the first one.
 	 * 
@@ -110,7 +109,11 @@ public class LightBotWorld extends jlm.universe.GridWorld implements Iterable<Li
 //		return new LightBotWorldView2D(this);
 		return new LightBotWorldViewIsometric(this);
 	}
-
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_lightbot.png");
+	}
+	
 	@Override
 	public int hashCode() {
 		final int PRIME = 31;
diff --git a/src/jlm/universe/lightbot/LightBotWorldView2D.java b/src/jlm/universe/lightbot/LightBotWorldView2D.java
index 2dd9d76..241679d 100644
--- a/src/jlm/universe/lightbot/LightBotWorldView2D.java
+++ b/src/jlm/universe/lightbot/LightBotWorldView2D.java
@@ -13,9 +13,6 @@ import java.awt.geom.Arc2D;
 import java.awt.geom.Line2D;
 import java.awt.geom.Rectangle2D;
 
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.Direction;
 import jlm.universe.Entity;
@@ -137,9 +134,4 @@ public class LightBotWorldView2D extends WorldView {
 		g.setColor(LightBotWorldView2D.BOT_COLOR);
 		g.fill(new Arc2D.Double((cx-0.25)*LightBotWorldView2D.CELL_WIDTH,(cy+0.1)*LightBotWorldView2D.CELL_WIDTH,1.5*width,1.5*height,60,60, Arc2D.PIE));		
 	}
-	
-	@Override
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/lightbot_light.png");
-	}
 }
diff --git a/src/jlm/universe/lightbot/LightBotWorldViewIsometric.java b/src/jlm/universe/lightbot/LightBotWorldViewIsometric.java
index 8601324..1c44725 100644
--- a/src/jlm/universe/lightbot/LightBotWorldViewIsometric.java
+++ b/src/jlm/universe/lightbot/LightBotWorldViewIsometric.java
@@ -19,12 +19,10 @@ import java.util.Collections;
 import java.util.Comparator;
 import java.util.List;
 
-import javax.swing.ImageIcon;
 import javax.swing.JButton;
 import javax.swing.JPanel;
 
 import jlm.core.model.Game;
-import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.Direction;
 import jlm.universe.GridWorld;
@@ -311,10 +309,4 @@ public class LightBotWorldViewIsometric extends WorldView {
 		setLayout(new BorderLayout());
 		add(BorderLayout.NORTH, buttonsPanel);
 	}
-	
-	@Override
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_lightbot.png");
-	}
-	
 }
diff --git a/src/jlm/universe/smn/baseball/BaseballBase.java b/src/jlm/universe/smn/baseball/BaseballBase.java
deleted file mode 100644
index 25f17ae..0000000
--- a/src/jlm/universe/smn/baseball/BaseballBase.java
+++ /dev/null
@@ -1,123 +0,0 @@
-package jlm.universe.smn.baseball;
-
-/**
- * @see BaseballPlayer
- */
-
-public class BaseballBase {
-	
-	private BaseballPlayer[] players; // the players on the base
-	private int color; // the color of the base
-	
-	/**
-	 * BaseballBase constructor
-	 * @param color the color of the base you are creating
-	 * @param playerLocationsAmount the amount of player locations available on the base
-	 */
-	public BaseballBase(int color,int playerLocationsAmount) {
-		this.players=new BaseballPlayer[playerLocationsAmount];
-		for ( int i = 0 ; i < playerLocationsAmount ; i++ )
-		{
-			this.players[i] = new BaseballPlayer(color);
-		}
-		this.color=color;
-	}
-	
-
-	/**
-	 * Indicate whether some other object is "equal to" this one
-	 * @return if the two objects are equals
-	 * @param o the reference object with which to compare
-	 * @return TRUE if the bases are the same <br>FALSE else
-	 */
-	public boolean equals(Object o) {
-		boolean sw=true;
-		if (o == null || !(o instanceof BaseballBase) )
-		{
-			sw = false ;
-		}
-		else 
-		{
-			BaseballBase base = (BaseballBase) o;
-			int n = this.getLocationsAmount();
-			if (base.getLocationsAmount() == n )
-			{		
-				for ( int i = 0 ; i < n && sw ; i++)
-				{
-					sw = base.getPlayer(i).equals(this.getPlayer(i));
-				}
-			}
-			else
-			{
-				sw = false;
-			}
-		}
-		return sw;
-	}
-	
-	/**
-	 * Give the color ( in integer ) of the base
-	 * @return The integer corresponding to the color of the base
-	 */
-	public int getColor() {
-		return this.color;
-	}
-	
-	/**
-	 * Give the amount of players locations available on the base
-	 * @return The amount of players locations available on the base
-	 */
-	public int getLocationsAmount(){
-		return this.players.length;
-	}
-	
-	/**
-	 * Returns the wanted player of this base
-	 * @param player the index of the wanted player
-	 */
-	public BaseballPlayer getPlayer(int player) {
-		return this.players[player];
-	}
-
-
-	/**
-	 * Return the color of the player in base baseIndex at position playerLocation
-	 * @param playerLocation the location ( between 0 and getLocationsAmount()-1 ) of the wanted player
-	 * @return the color of the player in base baseIndex at position playerLocation
-	 * @throws InvalidPositionException if playerLocation isn't 0 or 1
-	 */
-	public int getPlayerColor(int playerLocation) throws InvalidPositionException {
-		if ( playerLocation < 0 || playerLocation > this.getLocationsAmount()-1 )
-		{
-			throw new InvalidPositionException("The position of a player must be between 0 and getLocationsAmount()-1.\nIt's sad but "+playerLocation+" isn't one of these values !");
-		}
-		return this.players[playerLocation].getColor();
-	}
-
-
-	/**
-	 * Place the given baseballPlayer at the position player in the base
-	 * @param baseballPlayer : the player that you want to place
-	 * @param position : the position where you want to place the player
-	 */
-	public void setPlayer(int position, BaseballPlayer baseballPlayer) {
-		this.players[position] = baseballPlayer;
-	}
-
-
-	/**
-	 * Return a string representation of the base
-	 * @return A string representation of the base
-	 */
-	public String toString()
-	{
-		int n = getLocationsAmount();
-		String s = "";
-		for ( int i = 0 ; i < n ; i++)
-		{
-			s+="Player "+i+" : "+this.getPlayer(i).getColor()+"\n" ;
-		}
-		return s;
-	}
-
-}
diff --git a/src/jlm/universe/smn/baseball/BaseballEntity.java b/src/jlm/universe/smn/baseball/BaseballEntity.java
deleted file mode 100644
index 6850e44..0000000
--- a/src/jlm/universe/smn/baseball/BaseballEntity.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package jlm.universe.smn.baseball;
-
-import jlm.universe.Entity;
-import jlm.universe.World;
-
-/**
- * @see BaseballWorld
- */
-public class BaseballEntity extends Entity {
-	public BaseballEntity() {
-		super("Baseball Entity");
-	}
-	
-	public BaseballEntity(String name) {
-		super(name);
-	}
-	
-	
-	public BaseballEntity(String name, World world) {
-		super(name,world);
-	}
-
-	@Override
-	public Entity copy() {
-		return new BaseballEntity(this.name);
-	}
-	
-	/**
-	 * Give the number of bases on your field
-	 * @return the number of bases on your field
-	 */
-	public int getAmountOfBases()
-	{
-		return ((BaseballWorld) this.world).getAmountOfBases();
-	}
-	
-	/**
-	 * Return the color of the base located at baseIndex
-	 * @param baseIndex the index of the wanted base
-	 * @return the color of the player in base baseIndex at position playerLocation
-	 * @throws InvalidPositionException if you ask for a base which isn't in the range 0 to amountOfBases-1
-	 */
-	public int getBaseColor( int baseIndex) throws InvalidPositionException
-	{
-		return  ((BaseballWorld) world).getBaseColor(baseIndex);
-	}
-	
-	/** Returns the index of the base where is hole is located */
-	public int getHoleBase() {
-		return ((BaseballWorld) this.world).getHoleBase();
-	}
-	
-	/** Returns the position in the base where is hole is located */
-	public int getHolePositionInBase(){
-		return ((BaseballWorld) this.world).getHolePositionInBase();
-	}
-	
-	/** Returns the amount of players locations available on each base of the field */
-	public int getLocationsAmount() {
-		return ((BaseballWorld) this.world).getLocationsAmount();
-	}
-	
-	/**
-	 * Returns the color of the player in base baseIndex at position playerLocation
-	 * @param baseIndex the index of the wanted base
-	 * @param playerLocation the location ( 0 or 1 ) of the wanted player
-	 * @return the color of the player in base baseIndex at position playerLocation
-	 * @throws InvalidPositionException if playerLocation isn't 0 or 1
-	 */
-	public int getPlayerColor(int baseIndex, int playerLocation) throws InvalidPositionException {
-		return ((BaseballWorld) this.world).getPlayerColor(baseIndex,playerLocation);
-	}
-	
-	/** Returns whether the base at baseIndex is sorted or not */
-	public boolean isBaseSorted(int baseIndex) {
-		return ((BaseballWorld) this.world).isBaseSorted(baseIndex);
-	}
-	
-	/**
-	 * Move the player playerSrc of baseSrc to the hole
-	 * @param baseSrc : index of the base you want to pick a player
-	 * @param playerSrc : index of the player that you want to pick
-	 * @throws InvalidMoveException in case baseSrc is not near the hole 
-	 */
-	public void move(int baseSrc, int playerSrc) throws InvalidMoveException
-	{
-		((BaseballWorld) this.world).move(baseSrc,playerSrc);
-		stepUI();
-	}
-	
-	/** 
-	 * Must exist so that exercises can instantiate the entity (Entity is abstract) 
-	 */
-	@Override
-	public void run() {
-	}
-	
-	/**
-	 * Return a string representation of the world
-	 * @return A string representation of the world
-	 */
-	public String toString(){
-		return "BaseballEntity (" + this.getClass().getName() + ")";
-	}
-}
diff --git a/src/jlm/universe/smn/baseball/BaseballField.java b/src/jlm/universe/smn/baseball/BaseballField.java
deleted file mode 100644
index 53382c0..0000000
--- a/src/jlm/universe/smn/baseball/BaseballField.java
+++ /dev/null
@@ -1,389 +0,0 @@
-package jlm.universe.smn.baseball;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see BaseballBase
- * @see BaseballPlayer
- */
-public class BaseballField
-{
-	/**
-	 * Create a new baseball field
-	 * @param numberOfBases : number of bases you want in your field
-	 * @param playerLocationAmount the amount of player locations available on the base
-	 * @return a new BaseballField
-	 */
-	public static BaseballField create(int numberOfBases,int playerLocationAmount)
-	{
-		BaseballField field = new BaseballField(numberOfBases,playerLocationAmount);
-		field.mix();
-		return field;
-	}
-	
-	private BaseballBase[] bases; // the bases which composed the field
-	private int[] holeContainer; // the current location of the hole
-	private BaseballMove lastMove; // the last move made on the field -- used for graphical purpose only
-
-	/**
-	 * BaseballField constructor
-	 * @param numberOfBases : number of bases in your field
-	 * @param playerLocationAmount the amount of player locations available on the base
-	 */
-	private BaseballField(int numberOfBases,int playerLocationAmount)
-	{
-		// creating the bases
-		this.bases = new BaseballBase[numberOfBases];
-		for (int j = 0 ; j < numberOfBases ; j++)
-		{
-			this.bases[j]=new BaseballBase(j,playerLocationAmount);
-		}
-
-		// add the hole
-		this.bases[this.bases.length-1].setPlayer(0,new BaseballPlayer(-1));
-		
-		// initializing holeContainer
-		this.holeContainer = new int[2];
-		this.holeContainer[0] = this.bases.length-1;
-		this.holeContainer[1] = 1;
-		
-		this.setLastMove(null);
-	}
-	
-	/**
-	 * Make a copy of the given object
-	 * @return A copy of the given object
-	 */
-	public BaseballField copy() {
-		int n = this.getLocationsAmount();
-		BaseballField newField = new BaseballField(this.bases.length,n); // copy the "size" of the current BaseballField
-		newField.setHoleContainer(this.holeContainer);	// copy the hole container
-		// Copy the disposition of the players on the current field
-		for ( int i = 0 ; i < this.bases.length ; i++ )
-		{
-			for ( int j = 0 ; j < n;j++)
-			{
-				newField.bases[i].setPlayer(j,this.bases[i].getPlayer(j));
-			}
-		}
-		return newField;
-	}
-	
-	/**
-	 * Make a textual description of the differences between the caller and field
-	 * @param field : the field with which you want to compare your current field 
-	 * @return A textual description of the differences between the caller and field
-	 */
-	public String diffTo(BaseballField field) {
-		String s="These two fields are identical";
-		if ( !this.equals(field))
-		{
-			int numberOfBases = this.getAmountOfBases();
-			int numberOfPlayers = this.getLocationsAmount();
-			if ( numberOfBases != field.getAmountOfBases())
-			{
-				s = "The number of bases are different in the two fields ( "
-						+numberOfBases+" vs "+field.getAmountOfBases()+" )";
-			}
-			if ( numberOfPlayers != field.getLocationsAmount())
-			{
-				s = "The number of players are different in the two fields ( "
-						+numberOfPlayers+" vs "+field.getLocationsAmount()+" )";
-			}
-			else
-			{
-				s="";
-				for ( int i = 0 ; i < numberOfBases ; i++)
-				{
-					if ( !this.getBase(i).equals(field.getBase(i)))
-					{
-						s+=" Base number "+(i+1)+" : "+this.getBase(i).toString()
-								+" vs "+field.getBase(i).toString();
-						s+="\n";
-					}
-				}
-			}
-		}
-		return s;
-	}
-
-	public boolean equals(Object o) {
-		boolean sw=true;
-		if (o == null || !(o instanceof BaseballField) )
-		{
-			sw = false ;
-		}
-		else
-		{
-			BaseballField other = (BaseballField) o;
-			if ( this.holeContainer[0] == other.holeContainer[0]
-			     && this.holeContainer[1] == other.holeContainer[1]
-				 && this.getAmountOfBases() == other.getAmountOfBases()
-				 && this.getLocationsAmount() == other.getLocationsAmount() )
-			{
-				for ( int i = 0 ; i< this.bases.length && sw ;i++ )
-				{
-					sw = this.bases[i].equals(other.bases[i]);
-				}
-			}
-			else
-			{
-				sw = false;
-			}
-		}
-		return sw;
-	}
-	
-	/**
-	 * Give the number of bases on your field
-	 * @return the number of bases on your field
-	 */
-	public int getAmountOfBases() {
-		return this.bases.length;
-	}
-	
-	/**
-	 * Give a specific base of the field
-	 * @return the wanted base
-	 */
-	public BaseballBase getBase(int i) {
-		return this.bases[i];
-	}
-	
-	/**
-	 * Return the color of the base located at baseIndex
-	 * @param baseIndex the index of the wanted base
-	 * @return the color of the player in base baseIndex at position playerLocation
-	 * @throws InvalidPositionException if you ask for a base which isn't in the range 0 to amountOfBases-1
-	 */
-	public int getBaseColor(int baseIndex) throws InvalidPositionException {
-		if ( baseIndex < 0 || baseIndex>= this.bases.length)
-		{
-			throw new InvalidPositionException("getBaseColor: you ask for a base "+baseIndex+" which isn't in the range 0 to getAmountOfBases()-1.");
-		}
-		return this.bases[baseIndex].getColor();
-	}
-
-	/**
-	 * Return the index of the base where is hole is located
-	 * @return the index of the base where is hole is located
-	 */
-	public int getHoleBase() {
-		return this.holeContainer[0];
-	}
-	
-	/**
-	 * Return the position in the base where is hole is located
-	 * @return the position in the base where is hole is located
-	 */
-	public int getHolePositionInBase(){
-		return this.holeContainer[1];
-	}
-
-	/**
-	 * Return the last move made on the field
-	 * @return the last move made on the field
-	 */
-	public BaseballMove getLastMove() {
-		return lastMove;
-	}
-
-	/**
-	 * Give the amount of players locations available on each base of the field
-	 * @return The amount of players locations available on each base of the field
-	 */
-	public int getLocationsAmount() {
-		return this.bases[0].getLocationsAmount();
-	}
-
-	/**
-	 * Return the color of the player in base baseIndex at position playerLocation
-	 * @param baseIndex the index of the wanted base
-	 * @param playerLocation the location ( between 0 and getLocationsAmount()-1 ) of the wanted player
-	 * @return the color of the player in base baseIndex at position playerLocation
-	 * @throws InvalidPositionException if playerLocation isn't 0 or 1
-	 */
-	public int getPlayerColor(int baseIndex, int playerLocation) throws InvalidPositionException {
-		return this.bases[baseIndex].getPlayerColor(playerLocation);
-	}
-	
-	/**
-	 * Tell if every player of the base is on the base
-	 * @return if every players of the base is on the base
-	 * @param baseIndex the index of the base that you want to check
-	 */
-	public boolean isBaseSorted(int baseIndex) {
-		boolean sw = true;
-		int n = this.getLocationsAmount();
-		if ( baseIndex == this.bases.length-1 )		// it's the base with only one player
-		{
-			for ( int i = 0 ; i < n && sw; i++)
-			{
-				sw =  ( this.bases[baseIndex].getPlayer(i).getColor() == 0 )
-					||( this.bases[baseIndex].getPlayer(i).getColor()== this.bases[baseIndex].getColor() ) ;
-			}
-		}
-		else	// it's a regular base
-		{
-			for ( int i = 0 ; i < n && sw; i++)
-			{
-				sw = ( this.bases[baseIndex].getPlayer(i).getColor() == this.bases[baseIndex].getColor() ) ;
-			}
-		}
-		return sw;
-	}
-	
-	/**
-	 * Tell if every player of every base is on the right base
-	 * @return if every player of every base is on the right base
-	 */
-	private boolean isSorted() {
-		boolean sw = true;
-		for ( int i = 0 ; i < this.bases.length && sw ; i++ )
-		{
-			sw = this.isBaseSorted(i);
-		}
-		return sw;
-	}
-	
-	/**
-	 * Mix the players between the different bases
-	 */
-	private void mix() {
-		int m = this.getLocationsAmount();
-		// mix the base
-		do
-		{		
-			for (int i = 0 ; i < this.bases.length;i++)
-			{
-				this.swap(i,(int) (Math.random()*m),(int) (Math.random()*this.bases.length),(int) (Math.random()*m));
-			}
-		}
-		while(this.isSorted());
-		
-		// update the holeContainer
-		int n = this.getAmountOfBases();
-		boolean found = false;
-		try 
-		{
-			for ( int i = 0 ; i < n && !found ; i++)
-			{
-				for ( int j = 0 ; j < m && !found; j++)
-				{
-					if ( this.bases[i].getPlayerColor(j)==-1)
-					{
-						found = true;
-						this.holeContainer[0] = i;
-						this.holeContainer[1] = j;
-					}
-				}	
-			}	
-		}
-		catch ( InvalidPositionException ipe)
-		{
-			System.out.println("Unexpected InvalidPositionException in getHolePosition: "+ipe.getMessage());
-		}
-	}
-
-	/**
-	 * Moves the specified player into the hole
-	 * @throws InvalidMoveException in case baseSrc is not near the hole
-	 */
-	public void move(int indexBaseSrc, int playerLocation) throws InvalidMoveException
-	{
-		if ( indexBaseSrc >= this.getAmountOfBases() || indexBaseSrc < 0)
-		{
-			throw new InvalidMoveException("The base index must be between 0 and "+(this.getAmountOfBases()-1)+".\nUnfortunatly, "+indexBaseSrc+" isn't");
-		}
-		if ( playerLocation < 0 || playerLocation > this.getLocationsAmount()-1 )
-		{
-			throw new InvalidMoveException("There isn't a position "+playerLocation+".\nIt must be between 0 and getLocationsAmount()-1.");
-		}
-		// must work only if the bases are next to each other
-		if (		( this.holeContainer[0] == indexBaseSrc+1 )
-				||  ( this.holeContainer[0] == indexBaseSrc-1 )
-				||  ( this.holeContainer[0] == 0 && indexBaseSrc == this.getAmountOfBases()-1 )
-				||  ( this.holeContainer[0] == this.getAmountOfBases()-1 && indexBaseSrc == 0 )
-				||  ( this.holeContainer[0] == indexBaseSrc )
-			)
-		{
-			try
-			{
-				this.setLastMove(
-						new BaseballMove(indexBaseSrc, playerLocation, 
-								this.holeContainer[0], this.holeContainer[1], 
-								this.getPlayerColor(indexBaseSrc, playerLocation)));
-			}
-			catch (InvalidPositionException ipe)
-			{
-				System.out.println("Unexpected InvalidPositionException in move");
-			}
-			swap(indexBaseSrc, playerLocation, this.holeContainer[0], this.holeContainer[1]);
-			this.holeContainer[0]= indexBaseSrc;
-			this.holeContainer[1]= playerLocation;
-			
-		}
-		else
-		{
-			throw new InvalidMoveException("The player "+playerLocation+" from base "+indexBaseSrc+" can't move to base "+this.holeContainer[0]+" since it's a lazy guy and he doesn't want to travel more than one base length at once");
-		}
-	}
-
-	/**
-	 * Replace the current holeContainer by hole
-	 * @param hole : the new holeContainer
-	 */
-	private void setHoleContainer(int[] hole) {
-		this.holeContainer = new int[hole.length];
-		for ( int i = 0 ; i < hole.length;i++)
-		{
-			this.holeContainer[i]=hole[i];
-		}
-	}
-
-	/**
-	 * Replace the current last move by baseballMove
-	 * @param baseballMove : the new last move
-	 */
-	private void setLastMove(BaseballMove baseballMove) {
-		this.lastMove = baseballMove;
-	}
-
-	/**
-	 * Swap two players from two bases
-	 * @param indexBaseSrc : the index of the source base
-	 * @param playerSrc : the position of the player that you want to move from the source base
-	 * @param indexBaseDst : the index of the destination base
-	 * @param playerDst : the position of the player that you want to move from the destination base
-	 */
-	private void swap(int indexBaseSrc, int playerSrc, int indexBaseDst, int playerDst) {
-		BaseballPlayer flyingMan = this.bases[indexBaseSrc].getPlayer(playerSrc);
-		this.bases[indexBaseSrc].setPlayer(playerSrc,this.bases[indexBaseDst].getPlayer(playerDst));
-		this.bases[indexBaseDst].setPlayer(playerDst, flyingMan);
-	}
-
-	/**
-	 * Return a string representation of the field
-	 * @return A string representation of the field
-	 */
-	public String toString()
-	{
-		String s = "";
-		int n = this.getLocationsAmount();
-		for (int i = 0 ; i < this.bases.length ; i++)
-		{
-			s+="- Base "+i+"\n";
-			s+="  Color : "+this.bases[i].getColor()+"\n";
-			for ( int j = 0 ; j < n ; j++)
-			{ 
-				s+="  Player "+j+" : "+this.bases[i].getPlayer(j).getColor()+"\n";
-			}
-		}
-		return s;
-	}
-
-
-
-	
-
-	
-}
diff --git a/src/jlm/universe/smn/baseball/BaseballMove.java b/src/jlm/universe/smn/baseball/BaseballMove.java
deleted file mode 100644
index c05565b..0000000
--- a/src/jlm/universe/smn/baseball/BaseballMove.java
+++ /dev/null
@@ -1,94 +0,0 @@
-package jlm.universe.smn.baseball;
-
-public class BaseballMove {
-
-	private int baseSrc;
-	private int playerSrc;
-	private int baseDst;
-	private int playerDst;
-	private int playerColor;
-	
-	public BaseballMove(int baseSrc, int playerSrc, int baseDst, int playerDst, int playerColor){
-		this.setBaseSrc(baseSrc);
-		this.setPlayerSrc(playerSrc);
-		this.setBaseDst(baseDst);
-		this.setPlayerDst(playerDst);
-		this.setPlayerColor(playerColor);
-	}
-
-
-	/**
-	 * @return the baseDst
-	 */
-	public int getBaseDst() {
-		return baseDst;
-	}
-
-	/**
-	 * @return the baseSrc
-	 */
-	public int getBaseSrc() {
-		return baseSrc;
-	}
-
-	/**
-	 * @return the playerColor
-	 */
-	public int getPlayerColor() {
-		return playerColor;
-	}
-
-	/**
-	 * @return the playerDst
-	 */
-	public int getPlayerDst() {
-		return playerDst;
-	}
-
-	/**
-	 * @return the playerSrc
-	 */
-	public int getPlayerSrc() {
-		return playerSrc;
-	}
-
-	/**
-	 * @param baseDst the baseDst to set
-	 */
-	public void setBaseDst(int baseDst) {
-		this.baseDst = baseDst;
-	}
-
-	/**
-	 * @param baseSrc the baseSrc to set
-	 */
-	public void setBaseSrc(int baseSrc) {
-		this.baseSrc = baseSrc;
-	}
-
-	/**
-	 * @param playerColor the playerColor to set
-	 */
-	public void setPlayerColor(int playerColor) {
-		this.playerColor = playerColor;
-	}
-
-
-	/**
-	 * @param playerDst the playerDst to set
-	 */
-	public void setPlayerDst(int playerDst) {
-		this.playerDst = playerDst;
-	}
-
-
-	/**
-	 * @param playerSrc the playerSrc to set
-	 */
-	public void setPlayerSrc(int playerSrc) {
-		this.playerSrc = playerSrc;
-	}
-	
-	
-	
-}
diff --git a/src/jlm/universe/smn/baseball/BaseballMovePanel.java b/src/jlm/universe/smn/baseball/BaseballMovePanel.java
deleted file mode 100644
index 73dd8fc..0000000
--- a/src/jlm/universe/smn/baseball/BaseballMovePanel.java
+++ /dev/null
@@ -1,183 +0,0 @@
-package jlm.universe.smn.baseball;
-
-import java.awt.Component;
-import java.awt.GridLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JOptionPane;
-import javax.swing.JPanel;
-
-import jlm.core.model.FileUtils;
-import jlm.core.model.Game;
-import jlm.universe.EntityControlPanel;
-
-/**
- * The control panel for the burned pancake world. 
- * It allows you to use to flip the pancake
- * @author Julien BASTIAN
- * @see EntityControlPanel
- * @see BaseballWorld
- */
-public class BaseballMovePanel extends EntityControlPanel {
-
-	private static final long serialVersionUID = 1L;
-	private JButton validateButton;	// a validate button
-	private JComboBox baseSelector;	
-	private JComboBox playerSelector;	
-	private JLabel holeBaseLocation;
-	private JLabel holePlayerLocation;
-
-	/**
-	 * Constructor of BaseballMovePanel
-	 * It initializes the command panel
-	 */
-	public BaseballMovePanel() {
-		super();
-		this.setLayout(new GridLayout(2,1));
-		BaseballEntity be = (BaseballEntity) Game.getInstance().getSelectedEntity() ;
-		this.add(this.createMovePanel(be));
-		this.add(this.createHolePanel(be));
-	}
-
-	/**
-	 * Create the panel showing the location of the hole in the world
-	 * @param be The current BaseballEntity
-	 * @return the panel showing the location of the hole in the world
-	 */
-	private Component createHolePanel(BaseballEntity be) {
-		JPanel holePanel = new JPanel();
-
-		this.holeBaseLocation = new JLabel();
-		this.holePlayerLocation = new JLabel();
-
-		this.refreshHoleLocation(be);
-
-		holePanel.add(new JLabel("The hole is located in the base"));
-		holePanel.add(this.holeBaseLocation);
-
-		holePanel.add(new JLabel("at the position"));
-		holePanel.add(this.holePlayerLocation);
-
-		return holePanel;
-	}
-
-	/**
-	 * Create the command panel of the BaseballMovePanel
-	 * @param be The current BaseballEntity
-	 * @return a JPanel containing the move panel
-	 */
-	private Component createMovePanel(BaseballEntity be) {
-		JPanel movePanel = new JPanel();
-
-		movePanel.add(new JLabel("move"));
-
-		this.initBaseSelector(be);
-		movePanel.add(this.baseSelector);
-
-		this.initPlayerSelector(be);
-		movePanel.add(this.playerSelector);
-
-		this.initValidateButton();
-		movePanel.add(this.validateButton);
-
-		return movePanel;
-	}
-
-	/**
-	 * Initialize the combo box containing the list of bases.
-	 * @param be The current BaseballEntity
-	 */
-	private void initBaseSelector(BaseballEntity be) {
-		int baseAmount = be.getAmountOfBases();
-		Integer[] values = new Integer[baseAmount];
-		for (int i = 0 ; i < baseAmount ; i++)
-		{
-			values[i] = i;
-		}
-		this.baseSelector = new JComboBox(values);
-	}
-
-	/**
-	 * Initialize the combo box containing the list of locations of player.
-	 * @param be The current BaseballEntity
-	 */
-	private void initPlayerSelector(BaseballEntity be) {
-		int playerAmount = be.getLocationsAmount();
-		Integer[] values = new Integer[playerAmount];
-		for (int i = 0 ; i < playerAmount ; i++)
-		{
-			values[i] = i;
-		}
-		this.playerSelector = new JComboBox(values);
-	}
-
-	/**
-	 * Initialize the validate button
-	 */
-	private void initValidateButton() {
-		this.validateButton = new JButton("Validate");
-		this.validateButton.addActionListener(new ActionListener() {
-			@Override
-			public void actionPerformed(ActionEvent e) {
-				BaseballEntity be = (BaseballEntity) Game.getInstance().getSelectedEntity();
-				int base = baseSelector.getSelectedIndex();
-				int player = playerSelector.getSelectedIndex();
-				try 
-				{
-					be.move(base, player);
-					refreshHoleLocation(be);
-				}
-				catch (InvalidMoveException e1) 
-				{
-					showInvalidMoveMessageDialog(base,player);
-				}
-			}
-		});
-	}
-
-	/**
-	 * Refresh the location of the hole
-	 * @param be The current BaseballEntity
-	 */
-	private void refreshHoleLocation(BaseballEntity be) {
-		holeBaseLocation.setText(""+be.getHoleBase());
-		holePlayerLocation.setText(""+be.getHolePositionInBase());
-	}
-
-	/**
-	 * Allow to enable or disable each component of the control panel
-	 * @param enabled if the composants shall be enabled or not
-	 */
-	@Override
-	public void setEnabledControl(boolean enabled) {
-		this.validateButton.setEnabled(enabled);
-		this.baseSelector.setEnabled(enabled);
-		this.playerSelector.setEnabled(enabled);
-	}
-
-	/**
-	 * Show a message dialog explaining that the user try to make an invalid move on the field
-	 * @param base The base of the player
-	 * @param player The number of the player try to move
-	 */
-	public void showInvalidMoveMessageDialog(int base,int player) {
-		String message ;
-		String title ;
-		if ( FileUtils.getLocale().equals("fr"))
-		{
-			message = "Le joueur numéro "+player+" de la base numéro "+base+" ne peut pas se déplacer aussi loin !";
-			title = "Déplacement invalide";
-		}
-		else
-		{
-			message = "The player number "+player+" of the base number "+base+" can't move so far on the field !";
-			title = "Invalid move";
-		}
-		JOptionPane.showMessageDialog(null, message,title, JOptionPane.ERROR_MESSAGE);
-	}
-
-}
diff --git a/src/jlm/universe/smn/baseball/BaseballPlayer.java b/src/jlm/universe/smn/baseball/BaseballPlayer.java
deleted file mode 100644
index 80aca11..0000000
--- a/src/jlm/universe/smn/baseball/BaseballPlayer.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package jlm.universe.smn.baseball;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class BaseballPlayer
-{
-	private int color;
-
-	/**
-	 * Builds a player of the passed color
-	 * @param color : the color of the player you are creating (0 means no color)
-	 */
-	public BaseballPlayer(int color)
-	{
-		this.color=color;
-	}
-	
-	/**
-	 * Give the color of the player
-	 * @return the color of the player
-	 */
-	public int getColor()
-	{
-		return this.color;
-	}
-	
-	/**
-	 * Set the player's color at color
-	 * @param color : the wanted color
-	 */
-	public void setColor(int color)
-	{
-		this.color=color;
-	}
-}
diff --git a/src/jlm/universe/smn/baseball/BaseballWorld.fr.html b/src/jlm/universe/smn/baseball/BaseballWorld.fr.html
deleted file mode 100644
index ab091e1..0000000
--- a/src/jlm/universe/smn/baseball/BaseballWorld.fr.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<h1>Baseball</h1>
-<p>
-La couleur d'un base est donnée par son index.
-Le trou a -1 comme couleur.
-La base qui a un seul joueur sur le terrain a <i>getAmountOfBases()-1</i>
-comme index
-</p>
-<div>
-<u>Fonctions fournies :</u>
-
-<pre>void move(int baseSrc, int playerSrc)</pre>
-
-Déplace le joueur de la position <code>playerLocation</code> de la base
-<code>baseSrc</code> au trou.
-
-<pre>int getPlayerColor(int baseIndex, int playerLocation) </pre>
-
-Renvoie la couleur du joueur de la position <code>playerLocation</code> ( 0
-ou 1 ) de la base <code>baseIndex</code>.
-
-<pre>int getHoleBase()</pre>
-
-Renvoie l'index de la base où se trouve le trou
-
-<pre>int getHolePositionInBase()</pre>
-
-Renvoie la position de joueur vide dans la base où se situe le trou
-
-<pre>boolean isBaseSorted( int baseIndex )</pre>
-
-Renvoie VRAI si tous les joueurs sur la base <code>baseSrc</code> sont sur
-la bonne base.  
-
-<pre>int getAmountOfBases()</pre>
-
-Renvoie le nombre de bases dans le terrain
-
-<pre>int getLocationsAmount()</pre>
-
-Renvoie le nombre de positions de joueur disponible sur chaque base du
-terrain
-
-
-</div>
diff --git a/src/jlm/universe/smn/baseball/BaseballWorld.html b/src/jlm/universe/smn/baseball/BaseballWorld.html
deleted file mode 100644
index aa5a2c1..0000000
--- a/src/jlm/universe/smn/baseball/BaseballWorld.html
+++ /dev/null
@@ -1,41 +0,0 @@
-<h1>Baseball</h1>
-<p>
-The color of a base is given by its index. 
-
-The hole has a color of -1.
-
-The base which has only one player on the field has <i>getAmountOfBases()-1</i> as index
-</p>
-<div>
-<u>Functions provided:</u>
-
-<pre>void move(int baseSrc, int playerSrc)</pre>
-
-Move the player on position <code>playerLocation</code> from the base <code>baseSrc</code> to the hole.
-
-<pre> int getPlayerColor(int baseIndex, int playerLocation) </pre>
-
-Return the color of the player on position <code>playerLocation</code> ( 0 or 1 ) from the base <code>baseIndex</code>.
-
-<pre> int getHoleBase() </pre>
-
-Return the index of the base where the hole is located
-
-<pre> int getHolePositionInBase()</pre>
-
-Return the player's position in the base where the hole is located
-
-<pre> boolean isBaseSorted( int baseIndex)</pre>
-
-Return TRUE if all players of the base <code>baseSrc</code> are home  
-
-<pre>int getAmountOfBases()</pre>
-
-Return the amount of bases in the field.
-
-<pre>int getLocationsAmount()</pre>
-
-Return the amount of players locations available on each base of the field
-
-
-</div>
diff --git a/src/jlm/universe/smn/baseball/BaseballWorld.java b/src/jlm/universe/smn/baseball/BaseballWorld.java
deleted file mode 100644
index 733051a..0000000
--- a/src/jlm/universe/smn/baseball/BaseballWorld.java
+++ /dev/null
@@ -1,191 +0,0 @@
-package jlm.universe.smn.baseball;
-
-import javax.script.ScriptEngine;
-
-import jlm.core.model.ProgrammingLanguage;
-import jlm.core.ui.WorldView;
-import jlm.universe.EntityControlPanel;
-import jlm.universe.World;
-
-/**
- * @see BaseballField
- */
-
-public class BaseballWorld extends World
-{
-	protected BaseballField field; // the field of the game
-	
-	/** Copy constructor used internally by JLM */
-	public BaseballWorld(BaseballWorld world) {
-		super(world);
-	}
-	
-	/**
-	 * Returns the panel which let the user to interact dynamically with the world
-	 */
-	@Override
-	public EntityControlPanel getEntityControlPanel() {
-		return new BaseballMovePanel();
-	}
-	
-	/** Regular constructor used by exercises */
-	public BaseballWorld(String name, int numberOfBases, int playerLocationAmount) {
-		super(name);
-		setDelay(200); // Delay (in milliseconds) in default animations
-		this.field = BaseballField.create(numberOfBases,playerLocationAmount);
-	}
-
-	/**
-	 * Makes a textual description of the differences between the caller and world
-	 * @param world : the world with which you want to compare your world
-	 * @return A textual description of the differences between the caller and world
-	 */
-	public String diffTo(World world)
-	{
-		String s ;
-		if (world == null || !(world instanceof BaseballWorld))
-		{
-			s="This is not a baseball world ='( ..."; // it's truly sad =(
-		}
-		else
-		{
-			BaseballWorld other = (BaseballWorld) world;
-			s = this.field.diffTo(other.field);
-		}
-		return s;
-	}
-	
-	public boolean equals(Object o) {
-		boolean sw = true;
-		if (o == null || !(o instanceof BaseballWorld))
-		{
-			sw=false;
-		}
-		else
-		{
-			BaseballWorld other = (BaseballWorld) o;
-			sw = this.field.equals(other.field);
-		}
-		return sw;
-	}
-	
-	/** Returns the number of bases on your field */
-	public int getAmountOfBases() {
-		return this.field.getAmountOfBases();
-	}
-	
-	/** Returns the color of the base located at baseIndex
-	 * @throws InvalidPositionException if you ask for a base which isn't in the range 0 to amountOfBases-1
-	 */
-	public int getBaseColor(int baseIndex) throws InvalidPositionException {
-		return this.field.getBaseColor(baseIndex);
-	}
-	
-	/**
-	 * Return the script except that must be injected within the environment before running user code 
-	 * It should pass all order to the java entity, which were injected independently  
-	 * @return  the script except that must be injected within the environment before running user code 
-	 * @param the programming language used
-	 */
-	@Override
-	public void setupBindings(ProgrammingLanguage lang, ScriptEngine e) {
-		throw new RuntimeException("No binding of BaseballWorld for "+lang);
-	}
-	
-	/**
-	 * Return the index of the base where is hole is located
-	 * @return the index of the base where is hole is located
-	 */
-	public int getHoleBase() {
-		return this.field.getHoleBase();
-	}
-	
-	/**
-	 * Return the position in the base where is hole is located
-	 * @return the position in the base where is hole is located
-	 */
-	public int getHolePositionInBase(){
-		return this.field.getHolePositionInBase();
-	}
-	
-	/**
-	 * Give the amount of players locations available on each base of the field
-	 * @return The amount of players locations available on each base of the field
-	 */
-	public int getLocationsAmount() {
-		return this.field.getLocationsAmount();
-	}
-	
-	/**
-	 * Return the last move made on the field
-	 * @return the last move made on the field
-	 */
-	public BaseballMove getLastMove() {
-		return this.field.getLastMove();
-	}
-	
-	/**
-	 * Return the color of the player in base baseIndex at position playerLocation
-	 * @param baseIndex the index of the wanted base
-	 * @param playerLocation the location ( between 0 and getLocationsAmount()-1 ) of the wanted player
-	 * @return the color of the player in base baseIndex at position playerLocation
-	 * @throws InvalidPositionException if playerLocation isn't 0 or 1
-	 */
-	public int getPlayerColor(int baseIndex, int playerLocation) throws InvalidPositionException {
-		return this.field.getPlayerColor(baseIndex,playerLocation);
-	}
-	
-	/** 
-	 * Return a component able of displaying the world
-	 * @return a component able of displaying the world
-	 */
-	public WorldView getView()
-	{
-		return new BaseballWorldView(this);
-	}
-	
-	/**
-	 * Tell if everyone is at home
-	 * @param baseIndex the index of the base that we want to check
-	 * @return TRUE if the field is okay <br>FALSE else
-	 */
-	public boolean isBaseSorted( int baseIndex)
-	{
-		return this.field.isBaseSorted(baseIndex);
-	}	
-	
-	/**
-	 * Move the player playerSrc of baseSrc to the hole
-	 * @param baseSrc : index of the base you want to pick a player
-	 * @param PlayerSrc : index of the base you want to pick a player
-	 * @throws InvalidMoveException in case baseSrc is not near the hole 
-	 */
-	public void move(int baseSrc, int playerSrc) throws InvalidMoveException
-	{
-		this.field.move(baseSrc, playerSrc);
-	}
-
-	/** 
-	 * Reset the state of the current world to the one passed in argument
-	 * @param the world which must be the new start of your current world
-	 */
-	public void reset(World world)
-	{
-		BaseballWorld other = (BaseballWorld) world;
-		this.field = other.field.copy();
-		super.reset(world);		
-	}
-
-	/**
-	 * Return a string representation of the world
-	 * @return A string representation of the world
-	 */
-	public String toString()
-	{
-		StringBuffer sb = new StringBuffer();
-		sb.append("BaseballWorld "+getName()+":\n");
-		sb.append(this.field.toString());
-		return sb.toString();
-	}
-
-}
diff --git a/src/jlm/universe/smn/baseball/BaseballWorldView.java b/src/jlm/universe/smn/baseball/BaseballWorldView.java
deleted file mode 100644
index 5276675..0000000
--- a/src/jlm/universe/smn/baseball/BaseballWorldView.java
+++ /dev/null
@@ -1,378 +0,0 @@
-package jlm.universe.smn.baseball;
-
-import java.awt.BasicStroke;
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.Stroke;
-import java.awt.geom.QuadCurve2D;
-import java.awt.geom.Rectangle2D;
-
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
-import jlm.core.ui.WorldView;
-import jlm.universe.World;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see WorldView
- * @see BaseballWorld
- */
-public class BaseballWorldView extends WorldView
-{
-	private static final long serialVersionUID = 1L;
-
-	/**
-	 * Constructor of the class BaseballWorldView
-	 * @param w : a world
-	 */
-	public BaseballWorldView(World w){
-		super(w);
-	}
-	
-	/**
-	   * Draws an arrow on the given Graphics2D context
-	   * ( adapted from http://www.bytemycode.com/snippets/snippet/82/ )
-	   * @param g The Graphics2D context to draw on
-	   * @param xTail The x location of the "tail" of the arrow
-	   * @param yTail The y location of the "tail" of the arrow
-	   * @param xHead The x location of the "head" of the arrow
-	   * @param yHead The y location of the "head" of the arrow
-	   */
-	  private void drawArrow( Graphics2D g, int xTail, int yTail, int xHead, int yHead) {
-		  float arrowWidth = 12.0f ;
-		  float theta = 0.6f ;
-		  int[] xPoints = new int[ 3 ] ;
-		  int[] yPoints = new int[ 3 ] ;
-		  float[] vecLine = new float[ 2 ] ;
-		  float[] vecLeft = new float[ 2 ] ;
-		  float fLength;
-		  float th;
-		  float ta;
-		  float baseX, baseY ;
-	
-		  xPoints[ 0 ] = xHead ;
-		  yPoints[ 0 ] = yHead ;
-	
-		  // build the line vector
-		  vecLine[ 0 ] = (float)xPoints[ 0 ] - xTail ;
-		  vecLine[ 1 ] = (float)yPoints[ 0 ] - yTail ;
-
-		  // build the arrow base vector - normal to the line
-		  vecLeft[ 0 ] = -vecLine[ 1 ] ;
-		  vecLeft[ 1 ] = vecLine[ 0 ] ;
-
-		  // setup length parameters
-		  fLength = (float)Math.sqrt( vecLine[0] * vecLine[0] + vecLine[1] * vecLine[1] ) ;
-		  th = arrowWidth / ( 2.0f * fLength ) ;
-		  ta = arrowWidth / ( 2.0f * ( (float)Math.tan( theta ) / 2.0f ) * fLength ) ;
-
-		  // find the base of the arrow
-		  baseX = ( (float)xPoints[ 0 ] - ta * vecLine[0]);
-		  baseY = ( (float)yPoints[ 0 ] - ta * vecLine[1]);
-
-		  // build the points on the sides of the arrow
-		  xPoints[ 1 ] = (int)( baseX + th * vecLeft[0] );
-		  yPoints[ 1 ] = (int)( baseY + th * vecLeft[1] );
-		  xPoints[ 2 ] = (int)( baseX - th * vecLeft[0] );
-		  yPoints[ 2 ] = (int)( baseY - th * vecLeft[1] );
-		  
-		  g.drawLine( xTail, yTail, (int)baseX, (int)baseY ) ;
-		  g.fillPolygon( xPoints, yPoints, 3 ) ;
-	}
-	
-	  /**
-	   * Compute the corners of the base located at polar coordinates ( radius, theta ) and return an array 
-	   * which contains the coordinates of the corners of the base
-	   * @param L A coefficient which adapt the length of the arrow to the total amount of bases
-	   * @param radius the distance between the symmetry center of the rectangle and the point of Cartesian coordinates ( xCenter , yCenter )
-	   * @param theta the angle made between the x-axis of the Cartesian system of origin ( xCenter , yCenter ) and the symmetry center of the rectange
-	   * @param xCenter the x coordinate in the classic coordinate system in graphics of the origin of our Cartesian system
-	   * @param yCenter the y coordinate in the classic coordinate system in graphics of the origin of our Cartesian system
-	   * @param amountOfPlayers the total amount of players on the base
-	   * @return an array containing the coordinates of the four corners of the base
-	   */
-	private int[][] computeCorners(int L, int radius, double theta , int xCenter, int yCenter, int amountOfPlayers ) {
-		int[][] points = new int[4][2];
-		// Prevent some redundancies during the computing
-		double commonPart = L*Math.sin(theta);
-		double rightPart = (radius+L/2)*Math.cos(theta);
-		double leftPart = (radius-L/2)*Math.cos(theta) ;
-		
-		points[0][0] = (int) (xCenter - commonPart + rightPart); // x coordinate of the upper-right point when theta = 0
-		points[1][0] = (int) (xCenter + commonPart + rightPart); // x coordinate of the lower-right point when theta = 0
-		points[2][0] = (int) (xCenter + commonPart + leftPart); // x coordinate of the lower-left point when theta = 0
-		points[3][0] = (int) (xCenter - commonPart + leftPart); // x coordinate of the upper-left point when theta = 0
-		
-		commonPart = L*Math.cos(theta);
-		rightPart = -(radius+L/2)*Math.sin(theta);
-		leftPart = -(radius-L/2)*Math.sin(theta) ;
-		
-		points[0][1] = (int) (yCenter - commonPart + rightPart); // y coordinate of the upper-right point when theta = 0
-		points[1][1] = (int) (yCenter + commonPart + rightPart); // y coordinate of the lower-right point when theta = 0
-		points[2][1] = (int) (yCenter + commonPart + leftPart); // y coordinate of the lower-left point when theta = 0
-		points[3][1] = (int) (yCenter - commonPart + leftPart); // y coordinate of the upper-left point when theta = 0
-		
-		return points;
-	}
-	  
-	/**
-	 * Draw the base and the players
-	 * @param g The Graphics2D context to draw on
-	 * @param L A coefficient which adapt the length of the arrow to the total amount of bases
-	 * @param dist the distance between the symmetry center of the rectangle and the point of Cartesian coordinates ( xCenter , yCenter )
-	 * @paran theta the angle made between the x-axis of the two-dimensional Cartesian system of origin ( xCenter , yCenter ) and the symmetry center of the rectange
-	 * @param xCenter the x coordinate in the classic coordinate system in graphics of the origin of our Cartesian system
-	 * @param yCenter the y coordinate in the classic coordinate system in graphics of the origin of our Cartesian system
-	 * @param base the base that we want to draw
-	 * @param amountOfPlayers the total amount of players on the base
-	 */
-	private void drawBase(Graphics2D g, int L, int dist, double theta, int xCenter, int yCenter, BaseballBase base, int amountOfPlayers) {
-		int[][] points = computeCorners( L, dist, theta, xCenter, yCenter, amountOfPlayers );
-		
-		// draw the base
-		drawRectangle(g,points,obtainColor(base.getColor()));
-		
-		// the radius of the disk representing the player
-		int radius = L/amountOfPlayers-1; 
-		
-		/* 
-		 * This array will contain the coordinates of the middle of the lower segment ( when theta = 0 ) of the base
-		 * 0 => x coordinate ; 1 => y coordinate
-		 */
-		int[] middleLower = new int[2];
-		/* 
-		 * This array will contain the coordinates of the middle of the upper segment ( when theta = 0 ) of the base
-		 * 0 => x coordinate ; 1 => y coordinate
-		 */
-		int[] middleUpper = new int[2];
-		// This array will contain the coordinates of the "step" between two disks -- 0 => x step ; 1 => y step
-		int[] delta = new int[2] ;
-		
-		middleLower[0] = ( points[1][0] + points[2][0] ) /2 ;
-		middleLower[1] = ( points[1][1] + points[2][1] ) /2 ;
-		middleUpper[0] = ( points[0][0] + points[3][0] ) /2 ;
-		middleUpper[1] = ( points[0][1] + points[3][1] ) /2 ;
-		
-		delta[0] = (middleUpper[0] - middleLower[0])/amountOfPlayers ;
-		delta[1] = (middleUpper[1] - middleLower[1])/amountOfPlayers ;
-		
-		/*
-		 *  This array contains the coordinates of the center of the disk representing the player 
-		 *	0 => x coordinate ; 1 => y coordinate
-		 */
-		int centerPlayer[] = new int[2]; 
-		// color of the player
-		Color colorPlayer = null;
-		// Loop which computes the coordinates of the center of the disk and draws the resulting disk
-		for ( int i = 0 ; i < amountOfPlayers ; i++)
-		{
-			centerPlayer[0] = (int) (middleUpper[0] - (i+.5)*delta[0] ); 
-			centerPlayer[1] = (int) (middleUpper[1] - (i+.5)*delta[1]);  
-			
-			colorPlayer = obtainColor(base.getPlayer(i).getColor());	
-			
-			drawDisk(g, centerPlayer, radius, colorPlayer);
-		}
-	}
-
-	/**
-	 * Draw a disk which represent the player
-	 * @param g The Graphics2D context to draw on
-	 * @param centerPlayerOne the center of the disk which will represent the player
-	 * @param color the color with which the disk shall be filled
-	 */
-	private void drawDisk(Graphics2D g, int[] center, int radius,Color color) {
-		g.setColor(Color.BLACK);
-		g.drawOval(center[0]-radius, center[1]-radius, radius*2, radius*2);
-		g.setColor(color);
-		g.fillOval(center[0]-radius, center[1]-radius, radius*2, radius*2);
-	}
-	
-	/**
-	 * Draw an arrow which represent the last movement
-	 * @param g The Graphics2D context to draw on
-	 * @param move The baseball move that we want to draw
-	 * @param r The distance between the center of the screen and end of the line
-	 * @param theta The default angle between two bases
-	 * @param xControl The center of the screen in x-axis
-	 * @param yControl The center of the screen in y-axis
-	 * @param L A coefficient which adapt the length of the arrow to the total amount of bases
-	 */
-	private void drawLastMove(Graphics2D g, BaseballMove move, int r, double theta, double xControl, double yControl , int L, int amountOfPlayers){
-		// Save the previous stroke -- we will need it later
-		Stroke s = g.getStroke();
-		// Set the color to the color of the player who moved
-		g.setColor(obtainColor(move.getPlayerColor()));
-		// Modifies the stroke so the drawing is a dotted line
-		g.setStroke(new BasicStroke(
-				3.0f,						// Width
-				BasicStroke.CAP_ROUND,		// End cap
-				BasicStroke.JOIN_BEVEL,		// Join style
-				10.0f,						// Miter limit
-				new float[] {5.0f,5.0f},	// Dash pattern
-				0.0f						// Dash phase
-		));
-		
-		/*
-		 * This array will contains the coordinates (x,y) of :
-		 * -> the beginning of the arrow ( index 0 )
-		 * -> the end of the tail of the arrow ( index 1 )
-		 * -> the end of the head of the arrow 
-		 */
-		int[][] arrow = new int[3][2];
-		// the step between two players of the same base
-		int[] delta = new int[2] ;
-		// The angle that will be used at each loop iteration
-		double[] thetaBase = { move.getBaseSrc() * theta, move.getBaseDst() * theta, move.getBaseDst() * theta };
-		// The radius that will be used at each loop iteration
-		int[] radius = { r , r-2*L/3, r-L/4};
-		// The players locations within its base
-		int[] players = { move.getPlayerSrc() , move.getPlayerDst() , move.getPlayerDst() } ;
-		// will contains the coordinates of the corners of the current base
-		int[][] points = new int[4][2];
-		// will contains the coordinates of the middle of the lower segment ( when theta = 0 ) of the current base 
-		int[] middleLower = new int[2];
-		// will contains the coordinates of the middle of the upper segment ( when theta = 0 ) of the current base 
-		int[] middleUpper = new int[2];
-		
-		for ( int i = 0 ; i < 3 ; i++)
-		{
-			points = computeCorners(L, radius[i], thetaBase[i] , (int)(xControl),(int) (yControl), amountOfPlayers );
-				
-			middleLower[0] = ( points[1][0] + points[2][0] ) /2 ;
-			middleLower[1] = ( points[1][1] + points[2][1] ) /2 ;
-			middleUpper[0] = ( points[0][0] + points[3][0] ) /2 ;
-			middleUpper[1] = ( points[0][1] + points[3][1] ) /2 ;
-			
-			delta[0] = (middleUpper[0] - middleLower[0])/amountOfPlayers ;
-			delta[1] = (middleUpper[1] - middleLower[1])/amountOfPlayers ;
-			
-			arrow[i][0]= (int) (middleUpper[0] - (players[i]+.5)*delta[0] ); 
-			arrow[i][1]= (int) (middleUpper[1] - (players[i]+.5)*delta[1]) ;  
-		}
-			
-		// Draw the tail of the arrow
-		g.draw(new QuadCurve2D.Double(arrow[0][0], arrow[0][1], xControl, yControl, arrow[1][0], arrow[1][1]));
-		g.setStroke(s);
-		// Draw the head of the arrow
-		drawArrow(g,arrow[1][0], arrow[1][1], arrow[2][0], arrow[2][1]);
-	}
-
-	/**
-	 * Draw a rectangle representing the base. We can't use drawRectangle here.
-	 * @param g The Graphics2D context to draw on
-	 * @param points the four points representing the corners of the rectangle 
-	 * @param yPoints the four y coordinates of the corners of the rectangle 
-	 * @param baseColor the color in which we will draw the base
-	 */
-	private void drawRectangle(Graphics2D g, int[][] points, Color baseColor ) {
-		// will contains the x coordinates of the points
-		int[] xPoints = new int[4];
-		// will contains the y coordinates of the points 
-		int[] yPoints = new int[4];
-		// fill the arrays mentioned earlier
-		for (int i = 0 ; i < 4 ; i++)
-		{
-			xPoints[i] = points[i][0];
-			yPoints[i] = points[i][1];
-		}
-		// draw the shape of the base
-		g.setColor(Color.BLACK);
-		g.drawPolygon(xPoints, yPoints, 4);
-		// fill this shape
-		g.setColor(baseColor);
-		g.fillPolygon(xPoints, yPoints, 4);
-	}
-	
-	/**
-	 * Return the icon of the world
-	 * @return the icon for the exercise selection
-	 */
-	public ImageIcon getIcon()
-	{
-		return ResourcesCache.getIcon("img/world_baseball.png");
-	}
-	
-	/**
-	 * Return the color corresponding to colorIndex
-	 * ( from : http://en.wikipedia.org/wiki/List_of_colors )
-	 * @param colorIndex a 
-	 * @return the color corresponding to colorIndex
-	 */
-	private Color obtainColor(int colorIndex) {
-		Color[] colors = {
-				Color.BLACK, Color.RED, Color.BLUE, Color.YELLOW, 
-				new Color(158,253,56), /* French lime */
-				new Color(255,56,0), /* Coquelicot */ 
-				new Color(204,204,255), /* Lavender blue */
-				new Color(251,206,177), /* Apricot */
-				new Color(0,103,165), /* Blue Persian */
-				new Color(201,0,22), /* Harvard crimson */
-				new Color(111,78,55), /* Coffee */
-				new Color(109,7,26), /* Bordeaux */
-				new Color(155,150,10),
-				new Color(75,0,130), 
-				new Color(150,85,120),
-				Color.GREEN
-		};
-		Color colorSent ;
-		if ( colorIndex < -1 || colorIndex > colors.length-1 )
-		{
-			System.out.println("Unexpected colorIndex : "+colorIndex+"\nYou should add some colors in BaseballWorldView.obtainColor");
-			colorSent = Color.MAGENTA;
-		}
-		else
-		{
-			colorSent = colors[colorIndex+1];
-		}
-		return colorSent;
-	}
-	
-	/**
-	 * Draw the component of the world
-	 * @param g The Graphics2D context to draw on
-	 */
-	public void paintComponent(Graphics g) {
-		super.paintComponent(g);
-		
-		Graphics2D g2 = (Graphics2D) g;
-
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-		
-		double renderedX = 300.;
-		double renderedY = 300.;		
-		double ratio = Math.min(((double) getWidth()) / renderedX, ((double) getHeight()) / renderedY);
-		g2.translate(Math.abs(getWidth() - ratio * renderedX)/2., Math.abs(getHeight() - ratio * renderedY)/2.);
-		g2.scale(ratio, ratio);
-		
-		/* drawn the field */
-		g2.setColor(new Color(58,157,35)); // lawn
-		g2.fill(new Rectangle2D.Double(0., 0., renderedX, renderedY));
-		
-		int radius = 120 ;
-		int[] fieldCenter = {(int) renderedX/2, (int) renderedY/2};
-		drawDisk(g2, fieldCenter , radius+30, new Color(174,74,52)); // draw the play area
-		
-		BaseballWorld myWorld = (BaseballWorld) this.world ;
-		int amountOfBases = myWorld.getAmountOfBases(); // amount of bases
-		double theta = 2*Math.PI / amountOfBases; // angle between center of symmetry of two bases
-		int amountOfPlayers = myWorld.getLocationsAmount(); // amount of players on a base
-		int L = Math.max(3*(20-amountOfBases),10); // adapting the size of the base to the total amount of bases
-		radius+=amountOfBases-5; // adapting the position of the base to the total amount of bases
-		
-		// Draw the bases and the players on each base
-		for ( int i=0 ; i < myWorld.getAmountOfBases();i++)
-		{
-			drawBase(g2, L, radius, theta*i, (int) renderedX/2, (int) renderedY/2 , myWorld.field.getBase(i),amountOfPlayers);
-		}
-		// Draw the last move made on the field if it exists
-		if ( myWorld.getLastMove() != null)
-		{
-			drawLastMove(g2, myWorld.getLastMove(), radius-L/amountOfPlayers, theta, renderedX/2, renderedY/2, L, amountOfPlayers);
-		}
-	}
-
-}
diff --git a/src/jlm/universe/smn/baseball/InvalidMoveException.java b/src/jlm/universe/smn/baseball/InvalidMoveException.java
deleted file mode 100644
index d358f30..0000000
--- a/src/jlm/universe/smn/baseball/InvalidMoveException.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package jlm.universe.smn.baseball;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see BaseballField
- */
-public class InvalidMoveException extends Exception {
-
-	private static final long serialVersionUID = 1L;
-
-	public InvalidMoveException(String message) {
-		super(message);
-	}
-
-}
diff --git a/src/jlm/universe/smn/baseball/InvalidPositionException.java b/src/jlm/universe/smn/baseball/InvalidPositionException.java
deleted file mode 100644
index 6804da5..0000000
--- a/src/jlm/universe/smn/baseball/InvalidPositionException.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package jlm.universe.smn.baseball;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see BaseballBase
- */
-public class InvalidPositionException extends Exception {
-
-	private static final long serialVersionUID = 1L;
-
-	public InvalidPositionException(String message){
-		super(message);
-	}
-	
-}
diff --git a/src/jlm/universe/smn/baseball/package-info.java b/src/jlm/universe/smn/baseball/package-info.java
deleted file mode 100644
index a2a8898..0000000
--- a/src/jlm/universe/smn/baseball/package-info.java
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * Time to play baseball
- */
-
-package jlm.universe.smn.baseball;
-
-
diff --git a/src/jlm/universe/smn/pancake/InvalidPancakeNumber.java b/src/jlm/universe/smn/pancake/InvalidPancakeNumber.java
deleted file mode 100644
index 1db3b75..0000000
--- a/src/jlm/universe/smn/pancake/InvalidPancakeNumber.java
+++ /dev/null
@@ -1,20 +0,0 @@
-package jlm.universe.smn.pancake;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see PancakesStack
- */
-public class InvalidPancakeNumber extends Exception {
-
-	private static final long serialVersionUID = 1L;
-	
-	/**
-	 * Create a InvalidPancakeNumber with errorMessage as message
-	 * @param size : the size of the stack of pancakes 
-	 * @return A new stack of size pancakes
-	 */
-	public InvalidPancakeNumber(String errorMessage) {
-		super(errorMessage);
-	}
-
-}
diff --git a/src/jlm/universe/smn/pancake/Pancake.java b/src/jlm/universe/smn/pancake/Pancake.java
deleted file mode 100644
index ccb71b2..0000000
--- a/src/jlm/universe/smn/pancake/Pancake.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package jlm.universe.smn.pancake;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class Pancake {
-
-	private int radius; // Radius of the pancake
-	private boolean upsideDown; // True if the burned face is facing the sky, else false
-	
-	/**
-	 * Constructor of the class Pancake
-	 * @param radius :the radius of the pancake
-	 */
-	public Pancake(int size) {
-		this.radius = size;
-		this.upsideDown = false;
-	}
-	
-	/**
-	 * Make a copy of the caller
-	 * @return a copy of the method caller
-	 */
-	public Pancake copy() {
-		Pancake p = new Pancake(this.getRadius());
-		if ( this.isUpsideDown())
-		{
-			p.flip();
-		}
-		return p;
-	}
-	
-	/**
-	 * Indicate whether some other pancake is "equal to" this one
-	 * @param burnedMatter if we take care of the position of the burned part
-	 * @param Pancake other: the other pancake with which to compare
-	 * @return If the two pancakes are equals
-	 */
-	public boolean equals(Pancake other, boolean burnedMatter) {
-		return(
-				this.getRadius()==other.getRadius() )
-			&& (this.isUpsideDown()==other.isUpsideDown()
-				|| !burnedMatter);
-	}
-	
-	/**
-	 * Flip a pancake, which leads to changing upsideDown
-	 */
-	public void flip() {
-		this.upsideDown = !this.upsideDown;
-	}
-	
-	/**
-	 * Give the radius of the pancake
-	 * @return The radius of the pancake
-	 */
-	public int getRadius() {
-		return this.radius;
-	}
-	
-	/**
-	 * Tell if the pancake is upside down
-	 * @return If the pancake is upside down or not
-	 */
-	public boolean isUpsideDown() {
-		return this.upsideDown;
-	}
-	
-	/**
-	 * Return a string representation of the pancake
-	 * @return A string representation of the pancake
-	 */
-	public String toString() {
-		String s = "< Radius: "+this.getRadius();
-		if ( this.isUpsideDown())
-		{
-			s+=" , upside down";
-		}
-		s+=" >";
-		return s;
-	}
-	
-}
diff --git a/src/jlm/universe/smn/pancake/PancakeEntity.java b/src/jlm/universe/smn/pancake/PancakeEntity.java
deleted file mode 100644
index e729f8d..0000000
--- a/src/jlm/universe/smn/pancake/PancakeEntity.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package jlm.universe.smn.pancake;
-
-import jlm.universe.Entity;
-import jlm.universe.World;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see PancakeWorld
- * @see Entity
- */
-public class PancakeEntity extends Entity {
-
-	/**
-	 * Must exist. Calling PancakeEntity("dummy name") is ok
-	 * Part of the copy process 
-	 * Must call super(name)
-	 * @return A new instance of PancakeEntity
-	 */
-	public PancakeEntity() {
-		super("Pancake Entity");
-	}
-
-	/**
-	 * Part of the copy process 
-	 * Must call super(name)
-	 * @param name : the name of the entity
-	 * @return A new instance of PancakeEntity
-	 */
-	public PancakeEntity(String name) {
-		super(name);
-	}
-	
-	/** 
-	 * Instantiation Constructor (used by exercises to setup the world) 
-	 * Must call super(name, world). If you had fields to setup, you'd  have to add more parameters
-	 * @param name : the name of the entity
-	 * @param world : a world
-	 * @return A new instance of PancakeEntity
-	 */
-	public PancakeEntity(String name, World world) {
-		super(name,world);
-	}
-	
-	/** 
-	 * A copy method needed by the JLM
-	 * @return a new PancakeEntity with the same name as the caller
-	 */
-	@Override
-	public Entity copy() {
-		return new PancakeEntity(this.name);
-	}
-
-	/**
-	 * Flip a certain amount of pancakes in the stack
-	 * @param numberOfPancakes : the number of pancakes, 
-	 * 			beginning from the top of the stack, that you want to flip.
-	 * @throws InvalidPancakeNumber : in case you ask to flip less than one or 
-	 * 									more than the total amount of pancakes
-	 */
-	public void flip(int numberOfPancakes) throws InvalidPancakeNumber {
-		((PancakeWorld) world).flip(numberOfPancakes);
-		stepUI();
-	}
-
-	/**
-	 * Give the radius of a specific pancake among others
-	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, that you want to get.
-	 * @return The radius of the expected pancake
-	 * @throws InvalidPancakeNumber : in case you ask an invalid pancake number
-	 */
-	public int getPancakeRadius(int pancakeNumber) throws InvalidPancakeNumber{
-		return ((PancakeWorld) world).getPancakeSize(pancakeNumber);
-	}
-
-	/**
-	 * Give the size of the stack of pancakes
-	 * @return The number of pancakes in the stack
-	 */
-	public int getStackSize() {
-		return ((PancakeWorld) world).getStackSize();
-	}
-	
-	/**
-	 * Tell if a specific pancake, among others, is upside down
-	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, that you want to get.
-	 * @return If the specific pancake is upside down or not
-	 * @throws InvalidPancakeNumber : in case you ask an invalid pancake number
-	 */
-	public boolean isPancakeUpsideDown(int pancakeNumber) throws InvalidPancakeNumber {
-		return ((PancakeWorld) world).isPancakeUpsideDown(pancakeNumber);
-	}
-	
-	/**
-	 * Tell if the stack of pancakes is correctly sorted according to the control freak pancake seller
-	 * @return TRUE if the stack is okay <br>FALSE else
-	 */
-	public boolean isSorted() {
-		return ( (PancakeWorld) this.world).isSorted();
-	}
-	
-	/** Must exist so that exercises can instantiate the entity (Entity is abstract) 
-	 * @throws InvalidPancakeNumber : in case you ask to flip less than one or more than the total amount of pancakes
-	 */
-	@Override
-	public void run() throws InvalidPancakeNumber {
-	}
-	
-	/**
-	 * Return a string representation of the world
-	 * @return A string representation of the world
-	 */
-	public String toString(){
-		return "PancakeEntity (" + this.getClass().getName() + ")";
-	}
-}
diff --git a/src/jlm/universe/smn/pancake/PancakeFlipButtonPanel.java b/src/jlm/universe/smn/pancake/PancakeFlipButtonPanel.java
deleted file mode 100644
index e3b3568..0000000
--- a/src/jlm/universe/smn/pancake/PancakeFlipButtonPanel.java
+++ /dev/null
@@ -1,115 +0,0 @@
-package jlm.universe.smn.pancake;
-
-import java.awt.Component;
-import java.awt.FlowLayout;
-import java.awt.event.ActionEvent;
-import java.awt.event.ActionListener;
-
-import javax.swing.JButton;
-import javax.swing.JComboBox;
-import javax.swing.JLabel;
-import javax.swing.JPanel;
-
-import jlm.core.model.Game;
-import jlm.universe.EntityControlPanel;
-
-/**
- * The control panel for the burned pancake world. 
- * It allows you to use to flip the pancake
- * @author Julien BASTIAN
- * @see EntityControlPanel
- * @see PancakeWorld
- */
-public class PancakeFlipButtonPanel extends EntityControlPanel {
-
-	private static final long serialVersionUID = 1L;
-	private JButton validateButton;	// a validate button
-	private JComboBox pancakesAmountComboBox;	// a combobox which let you choose how many pancake you want to flip
-	/**
-     * Constructor of PancakeFlipButtonPanel
-     * It initializes the command panel
-     */
-	public PancakeFlipButtonPanel() {
-		super();
-		PancakeEntity pe = (PancakeEntity) Game.getInstance().getSelectedEntity();
-		this.add(this.createFlipPanel(pe));
-	}
-
-	/**
-	 * Create the command panel of the PancakeFlipButtonPanel
-	 * @param pe The current PancakeEntity
-	 * @return a JPanel containing the command panel
-	 */
-	private Component createFlipPanel(PancakeEntity pe) {
-		JPanel flipPanel = new JPanel();
-		
-		flipPanel.setLayout(new FlowLayout());
-		flipPanel.add(new JLabel("flip"));
-		
-		this.initPancakesAmountComboBox(pe);
-		flipPanel.add(this.pancakesAmountComboBox);
-		
-		this.initValidateButton();
-		flipPanel.add(this.validateButton);
-		
-		return flipPanel;
-	}
-
-	/**
-	 * Initialize the validate button
-	 */
-	private void initValidateButton() {
-		this.validateButton = new JButton("Validate");
-		this.validateButton.addActionListener(new ActionListener() {
-			@Override
-			public void actionPerformed(ActionEvent e) {
-				int amount = (Integer) pancakesAmountComboBox.getSelectedItem();
-				PancakeEntity pe = (PancakeEntity) Game.getInstance().getSelectedEntity();
-				try 
-				{
-					pe.flip(amount);
-				} 
-				catch (InvalidPancakeNumber e1) {
-					System.err.println("Wrong initialization forPancakeFlipButtonPanel");
-					e1.printStackTrace();
-				}
-			}
-	});
-	}
-
-	/**
-	 * Initialize the combo box
-	 * @param pe the current selected PancakeEntity 
-	 * @param burnedPancake 
-	 */
-	private void initPancakesAmountComboBox(PancakeEntity pe) {
-		int n = pe.getStackSize();
-		Integer values[];
-		boolean burnedPancake = ((PancakeWorld) Game.getInstance().getSelectedWorld()).isBurnedPancake(); 
-		if ( burnedPancake)
-		{
-			values = new Integer[n];
-			for ( int i = 0 ; i < n ; i++) {
-				values[i] = i+1;
-			}
-		}
-		else
-		{
-			values = new Integer[n-1];
-			for ( int i = 0 ; i < n-1 ; i++) {
-				values[i] = i+2;
-			}
-		}
-		this.pancakesAmountComboBox = new JComboBox(values) ;
-	}
-	
-	/**
-	 * Allow to enable or disable each component of the control panel
-	 */
-	@Override
-	public void setEnabledControl(boolean enabled) {
-		this.validateButton.setEnabled(enabled);
-		this.pancakesAmountComboBox.setEnabled(enabled);
-	}
-
-}
diff --git a/src/jlm/universe/smn/pancake/PancakeWorld.fr.html b/src/jlm/universe/smn/pancake/PancakeWorld.fr.html
deleted file mode 100644
index d964e83..0000000
--- a/src/jlm/universe/smn/pancake/PancakeWorld.fr.html
+++ /dev/null
@@ -1,28 +0,0 @@
-<h1>Monde des crêpes</h1>
-<div>
-Fonctions fournies :
-
-<pre>int getStackSize()</pre>
-
-Renvoie la taille du tas de crêpes, en d'autres mots, le nombre de crêpes
-qui le compose.
-
-<pre>int getPancakeRadius(int pancakeNumber)</pre>
-
-Renvoie le rayon de la crêpe donnée en argument.
-
-<pre>boolean isPancakeUpsideDown(int pancakeNumber)</pre>
-
-Renvoie vrai si le côté brûlé de la crêpe passée en argument est vers le
-haut, faux sinon.
-
-<pre>void flip(int numberOfPancakes)</pre>
-
-Retourne les <code>numberOfPancakes</code> premières crêpes de la pile, en
-partant du sommet de celle-ci.
-
-<pre>boolean isSorted()</pre>
-
-Indique si le tas de crêpes est trié correctement au sens du vendeur de
-crêpe psychorigide.
-</div>
diff --git a/src/jlm/universe/smn/pancake/PancakeWorld.html b/src/jlm/universe/smn/pancake/PancakeWorld.html
deleted file mode 100644
index d2700fd..0000000
--- a/src/jlm/universe/smn/pancake/PancakeWorld.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<h1>PancakeWorld</h1>
-<div>
-Functions provided :
-
-<pre>int getStackSize()</pre>
-
-Returns the size of the stack, in other words the amount of pancakes it contains.
-
-<pre>int getPancakeRadius(int pancakeNumber)</pre>
-
-Returns the radius of the pancake you gave in argument.
-
-<pre>boolean isPancakeUpsideDown(int pancakeNumber)</pre>
-
-Returns true if the burned side of the pancake you gave in argument is up, false if not.
-
-<pre>void flip(int numberOfPancakes)</pre>
-
-Flips the <code>numberOfPancakes</code> first pancakes composing the stack, from the top of it.
-
-<pre>boolean isSorted()</pre>
-
-Tells if the stack of pancakes is correctly sorted according to the control freak pancake seller
-</div>
diff --git a/src/jlm/universe/smn/pancake/PancakeWorld.java b/src/jlm/universe/smn/pancake/PancakeWorld.java
deleted file mode 100644
index 418910b..0000000
--- a/src/jlm/universe/smn/pancake/PancakeWorld.java
+++ /dev/null
@@ -1,250 +0,0 @@
-package jlm.universe.smn.pancake;
-
-import javax.script.ScriptEngine;
-import javax.script.ScriptException;
-
-import jlm.core.model.Game;
-import jlm.core.model.ProgrammingLanguage;
-import jlm.core.ui.WorldView;
-import jlm.universe.EntityControlPanel;
-import jlm.universe.World;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see PancakesStack
- * @see World
- */
-public class PancakeWorld extends World {
-
-	private PancakesStack stack; // the stack of pancakes
-	private int lastModifiedPancake;
-	private boolean burnedWorld ;
-	
-	/**
-	 * Constructor of the class PancakeWorld
-	 * @param world : a world
-	 * @return A new PancakeWorld
-	 */
-	public PancakeWorld(PancakeWorld world) {
-		super(world);
-	}
-	
-	/**
-	 * Constructor of the class PancakeWorld
-	 * @param name : the name of the world
-	 * @param amountOfPancakes : the amount of pancakes in the stack
-	 * @param burnedPancake : if we take care of the fact that the pancake is burned on one side
-	 * @return A new PancakeWorld
-	 */
-	public PancakeWorld(String name, int amountOfPancakes, boolean burnedPancake) {
-		super(name);
-		setDelay(200); // Delay (in ms) in default animations
-		this.stack =  PancakesStack.create(amountOfPancakes,true);
-		this.lastModifiedPancake = 0 ;
-		this.burnedWorld = burnedPancake;
-	}
-	
-	/**
-	 * Make a textual description of the differences between the caller and world
-	 * @param world : the world with which you want to compare your world
-	 * @return A textual description of the differences between the caller and world
-	 */
-	@Override
-	public String diffTo(World world) {
-		String s ;
-		if (world == null || !(world instanceof PancakeWorld))
-		{
-			s="This is not a world of pancakes ='(...";
-		}
-		else
-		{
-			PancakeWorld other = (PancakeWorld) world;
-			s=this.stack.diffTo(other.stack);
-		}
-		return s;
-	}
-
-	/**
-	 * Indicate whether some other object is "equal to" this one
-	 * @return If the two objects are equal
-	 * @param Object o: the reference object with which to compare
-	 */
-	public boolean equals(Object o) {
-		boolean sw = true;
-		if (o == null || !(o instanceof PancakeWorld))
-		{
-			sw=false;
-		}
-		else
-		{
-			PancakeWorld other = (PancakeWorld) o;
-			sw = this.burnedWorld == other.burnedWorld
-				&& this.stack.equals(other.stack,this.burnedWorld);
-		}
-		return sw;
-	}
-	
-	/**
-	 * Flip a certain amount of pancakes in the stack
-	 * @param numberOfPancakes : the number of pancakes, beginning from the top of the stack, that you want to flip.
-	 * @throws InvalidPancakeNumber : in case you ask to flip less than one or more 
-	 * 									than the total amount of pancakes
-	 */
-	public void flip(int numberOfPancakes) throws InvalidPancakeNumber {
-		this.stack.flip(numberOfPancakes);
-		this.lastModifiedPancake = numberOfPancakes ;
-	}
-	
-	/**
-	 * Return the panel which let the user to interact dynamically with the world
-	 */
-	@Override
-	public EntityControlPanel getEntityControlPanel() {
-		return new PancakeFlipButtonPanel();
-	}
-	
-	/**
-	 * Give the index of the last modified pancakes
-	 * @return pancakeNumber : the index of the pancake, beginning from the top of the stack, that was modified.
-	 */
-	public int getLastModifiedPancake() {
-		return lastModifiedPancake;
-	}
-	
-	/**
-	 * Give the size of a specific pancake among others
-	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, that you want to get.
-	 * @return The radius of the expected pancake
-	 * @throws InvalidPancakeNumber : in case you ask an invalid pancake number
-	 */
-	public int getPancakeSize(int pancakeNumber) throws InvalidPancakeNumber{
-		if ( pancakeNumber < 0 || pancakeNumber >= this.stack.getSize())
-		{
-			throw new InvalidPancakeNumber(
-					"The pancake's number you've asked is not between 0 and the stack size -1"
-					);
-		}
-		else
-		{
-			return this.stack.getPancake(pancakeNumber).getRadius();
-		}
-	}
-	
-	/**
-	 * Getter for the stack of pancakes
-	 * @return return the stack of pancakes
-	 */
-	protected PancakesStack getStack() {
-		return this.stack;
-	}
-
-	/**
-	 * Give the size of the stack of pancakes
-	 * @return The number of pancakes in the stack
-	 */
-	public int getStackSize() {
-		return this.stack.getSize();
-	}
-	
-	/** 
-	 * Return a component able of displaying the world
-	 * @return a component able of displaying the world
-	 */
-	@Override
-	public WorldView getView() {
-		return new PancakeWorldView(this);
-	}
-
-	/**
-	 * Tell the value of flipped which is used for graphic purpose only
-	 * @return the flipped
-	 */
-	public boolean isFlipped() {
-		return this.stack.isFlipped();
-	}
-
-	/**
-	 * Tell if a specific pancake, among others, is upside down
-	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, that you want to get.
-	 * @return If the specific pancake is upside down or not
-	 * @throws InvalidPancakeNumber : in case you ask an invalid pancake number
-	 */
-	public boolean isPancakeUpsideDown(int pancakeNumber) throws InvalidPancakeNumber {
-		if ( pancakeNumber < 0 || pancakeNumber >= this.stack.getSize())
-		{
-			throw new InvalidPancakeNumber(
-					"The pancake's number you've asked is not between 0 and the stack size -1"
-					);
-		}
-		else
-		{
-			return this.stack.getPancake(pancakeNumber).isUpsideDown();
-		}
-	}
-	
-	/**
-	 * Tell if the stack of pancakes is correctly sorted according to the control freak pancake seller
-	 * @return TRUE if the stack is okay <br>FALSE else
-	 */
-	public boolean isSorted() {
-		return this.stack.isSorted(this.burnedWorld);
-	}
-	
-	/** 
-	 * Reset the state of the current world to the one passed in argument
-	 * @param the world which must be the new start of your current world
-	 */
-	@Override
-	public void reset(World world) {
-		PancakeWorld other = (PancakeWorld) world;
-		this.stack = other.stack.copy();
-		this.burnedWorld = other.burnedWorld;
-		this.lastModifiedPancake = other.lastModifiedPancake;
-		super.reset(world);		
-	}
-
-	/**
-	 * Return the script except that must be injected within the environment before running user code 
-	 * It should pass all order to the java entity, which were injected independently  
-	 * @return  the script except that must be injected within the environment before running user code 
-	 * @param the programming language used
-	 * @throws ScriptException 
-	 */
-	@Override
-	public void setupBindings(ProgrammingLanguage lang, ScriptEngine e) throws ScriptException {
-		if (lang.equals(Game.PYTHON)) {
-			e.eval(
-				"def getStackSize():\n" +
-				"  return entity.getStackSize()\n" +
-				"def getPancakeSize(pancakeNumber):\n" +
-				"  return entity.getPancakeSize(pancakeNumber)\n" +
-				"def isPancakeUpsideDown(pancakeNumber):\n"+
-				"  return entity.isPancakeUpsideDown(pancakeNumber)\n" +
-				"def flip(numberOfPancakes):\n" +
-				"  entity.flip(numberOfPancakes)\n"	
-				);
-		} else {
-			throw new RuntimeException("No binding of PancakeWorld for "+lang);
-		}
-	}
-
-	/**
-	 * Return a string representation of the world
-	 * @return A string representation of the world
-	 */
-	public String toString(){
-		StringBuffer sb = new StringBuffer();
-		sb.append("PancakeWorld "+getName()+": ");
-		sb.append(this.stack.toString());
-		return sb.toString();
-	}
-
-	/**
-	 * tell if we pay attention to the burned side or not
-	 * @return if we pay attention to the burned side or not
-	 */
-	public boolean isBurnedPancake() {
-		return this.burnedWorld;
-	}
-
-}
diff --git a/src/jlm/universe/smn/pancake/PancakeWorldView.java b/src/jlm/universe/smn/pancake/PancakeWorldView.java
deleted file mode 100644
index 249a9ae..0000000
--- a/src/jlm/universe/smn/pancake/PancakeWorldView.java
+++ /dev/null
@@ -1,246 +0,0 @@
-package jlm.universe.smn.pancake;
-
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.geom.Rectangle2D;
-
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
-import jlm.core.ui.WorldView;
-import jlm.universe.World;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see PancakeWorld
- * @see WorldView
- */
-public class PancakeWorldView extends WorldView {
-
-	private static final long serialVersionUID = 1L;
-		
-	/**
-	 * Constructor of the class PancakeWorldView
-	 * @param w : a world
-	 */
-	public PancakeWorldView(World w) {
-		super(w);
-	}
-
-	/**
-	   * Draws an arrow on the given Graphics2D context
-	   * ( From http://www.bytemycode.com/snippets/snippet/82/ )
-	   * @param g The Graphics2D context to draw on
-	   * @param x The x location of the "tail" of the arrow
-	   * @param y The y location of the "tail" of the arrow
-	   * @param xx The x location of the "head" of the arrow
-	   * @param yy The y location of the "head" of the arrow
-	   */
-	  private void drawArrow( Graphics2D g, int x, int y, int xx, int yy )
-	  {
-	    float arrowWidth = 10.0f ;
-	    float theta = 0.423f ;
-	    int[] xPoints = new int[ 3 ] ;
-	    int[] yPoints = new int[ 3 ] ;
-	    float[] vecLine = new float[ 2 ] ;
-	    float[] vecLeft = new float[ 2 ] ;
-	    float fLength;
-	    float th;
-	    float ta;
-	    float baseX, baseY ;
-
-	    xPoints[ 0 ] = xx ;
-	    yPoints[ 0 ] = yy ;
-
-	    // build the line vector
-	    vecLine[ 0 ] = (float)xPoints[ 0 ] - x ;
-	    vecLine[ 1 ] = (float)yPoints[ 0 ] - y ;
-
-	    // build the arrow base vector - normal to the line
-	    vecLeft[ 0 ] = -vecLine[ 1 ] ;
-	    vecLeft[ 1 ] = vecLine[ 0 ] ;
-
-	    // setup length parameters
-	    fLength = (float)Math.sqrt( vecLine[0] * vecLine[0] + vecLine[1] * vecLine[1] ) ;
-	    th = arrowWidth / ( 2.0f * fLength ) ;
-	    ta = arrowWidth / ( 2.0f * ( (float)Math.tan( theta ) / 2.0f ) * fLength ) ;
-
-	    // find the base of the arrow
-	    baseX = ( (float)xPoints[ 0 ] - ta * vecLine[0]);
-	    baseY = ( (float)yPoints[ 0 ] - ta * vecLine[1]);
-
-	    // build the points on the sides of the arrow
-	    xPoints[ 1 ] = (int)( baseX + th * vecLeft[0] );
-	    yPoints[ 1 ] = (int)( baseY + th * vecLeft[1] );
-	    xPoints[ 2 ] = (int)( baseX - th * vecLeft[0] );
-	    yPoints[ 2 ] = (int)( baseY - th * vecLeft[1] );
-
-	    g.drawLine( x, y, (int)baseX, (int)baseY ) ;
-	    g.fillPolygon( xPoints, yPoints, 3 ) ;
-	  }
-	
-	/**
-	 * Draw the marker for the flipping
-	 * @param g2 : the Graphics2D context to draw on
-	 * @param xMin : where the arrows should start in the horizontal plan
-	 * @param xMax : where the arrows should stop in the horizontal plan
-	 * @param renderedX : where the lines should stop in the horizontal plan
-	 */
-	private void drawMarker(Graphics2D g2, int xMin, int xMax, int renderedX) {
-		PancakeWorld myWorld = (PancakeWorld) this.world;
-		
-		int yTop = 248 - 8*myWorld.getStackSize();
-		int yBottom = 240 - 8 * ( myWorld.getStackSize() - myWorld.getLastModifiedPancake()) ;
-		
-		int yArrow = Math.max(yTop, yBottom);
-	
-		Color colors[] = new Color[2];
-		if ( myWorld.isFlipped())
-		{
-			colors[0]=Color.blue;
-			colors[1]=Color.red;
-		}
-		else
-		{
-			colors[0]=Color.red;
-			colors[1]=Color.blue;
-		}
-		g2.setColor(colors[0]);
-		g2.drawLine(xMax, yTop, renderedX, yTop);
-		drawArrow(g2,xMin,yTop,xMax,yTop);
-		g2.setColor(colors[1]);
-		g2.drawLine(xMax, yArrow, renderedX, yArrow);
-		drawArrow(g2,xMin,yArrow,xMax,yArrow);
-	}
-
-	
-	/**
-	 * Draw a raw pancake
-	 * @param g2 : an entity of the Graphics2D class
-	 * @param xoffset : the horizontal offset 
-	 * @param p: a pancake
-	 * @param pancakeNumber: the number of the pancake draw
-	 */
-	private void drawRawPancake(Graphics2D g2, double xoffset,Pancake p,int pancakeNumber) {
-		int psize = p.getRadius();
-		g2.setColor(Color.YELLOW);
-		g2.fill(new Rectangle2D.Double( xoffset-psize*5-3, 236-(8.*(pancakeNumber)),  psize*10+3, 8));
-		g2.setColor(Color.black);
-		g2.draw(new Rectangle2D.Double( xoffset-psize*5-3, 236-(8.*(pancakeNumber)),  psize*10+3, 8));
-	}
-	
-	/**
-	 * Draw a pancake with a burned face
-	 * @param g2 : an entity of the Graphics2D class
-	 * @param xoffset : the horizontal offset 
-	 * @param p: a pancake
-	 * @param pancakeNumber: the number of the pancake draw
-	 */
-	private void drawBurnedPancake(Graphics2D g2, double xoffset,Pancake p,int pancakeNumber) {
-		int psize = p.getRadius();
-		if ( p.isUpsideDown())
-		{
-			g2.setColor(Color.YELLOW);
-			g2.fill(new Rectangle2D.Double( xoffset-psize*5-3, 239-(8.*(pancakeNumber)),  psize*10+3, 5));
-			g2.setColor(new Color(91, 59, 17)); // it's brown
-			g2.fill(new Rectangle2D.Double( xoffset-psize*5-3, 236-(8.*(pancakeNumber)),  psize*10+3, 3));
-			g2.setColor(Color.black);
-			g2.draw(new Rectangle2D.Double( xoffset-psize*5-3, 236-(8.*(pancakeNumber)),  psize*10+3, 8));
-		}
-		else
-		{
-			g2.setColor(Color.YELLOW);
-			g2.fill(new Rectangle2D.Double( xoffset-psize*5-3, 236-(8.*(pancakeNumber)),  psize*10+3, 5));
-			g2.setColor(new Color(91, 59, 17)); // it's brown
-			g2.fill(new Rectangle2D.Double( xoffset-psize*5-3, 241-(8.*(pancakeNumber)),  psize*10+3, 3));
-			g2.setColor(Color.black);
-			g2.draw(new Rectangle2D.Double( xoffset-psize*5-3, 236-(8.*(pancakeNumber)),  psize*10+3, 8));
-		}
-	}
-	
-	/**
-	 * Draw some plate
-	 * @param g2 : an entity of the Graphics2D class
-	 * @param xoffset : the horizontal offset 
-	 * @param amountOfPancakes: the total amount of pancakes
-	 */
-	private void drawPlate(Graphics2D g2, double xoffset, int amountOfPancakes) {
-		g2.draw(new Rectangle2D.Double( 0, 244., xoffset*2, 5));
-	}
-	
-	/**
-	 * Draw the plate and the stack of pancakes
-	 * @param g2 : an entity of the Graphics2D class
-	 * @param xoffset : the horizontal offset 
-	 */
-	private void drawStack(Graphics2D g2, double xoffset) {
-		/* draw bar */
-		PancakeWorld w= (PancakeWorld) this.world;
-		PancakesStack stack = w.getStack();
-		boolean burned = w.isBurnedPancake();
-		if (stack!=null)
-		{
-			/* draw pancakes */
-			int amountOfPancakes = stack.getSize();
-			g2.setColor(Color.black);
-			drawPlate(g2,xoffset,amountOfPancakes);
-			if ( burned )
-			{
-				for (int i = 0; i<amountOfPancakes ;i++)
-				{ 
-					Pancake p = stack.getPancake(amountOfPancakes-i-1);
-					drawBurnedPancake(g2,xoffset,p,i);
-				}
-			}
-			else
-			{
-				for (int i = 0; i<amountOfPancakes ;i++)
-				{ 
-					Pancake p = stack.getPancake(amountOfPancakes-i-1);
-					drawRawPancake(g2,xoffset,p,i);
-				}
-			}
-		}
-	}
-	
-	/**
-	 * Return the icon of the world
-	 * @return the icon for the exercise selection
-	 */
-	// http://omgwtflols.deviantart.com/
-	// http://fc06.deviantart.net/fs71/f/2012/118/5/7/pixel_art__pancakes_with_s236rup_b236_omgwtflols-d4xu72c.gif
-	// http://omgwtflols.deviantart.com/art/Pixel-Art-Pancakes-with-syrup-298700868
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_pancake.png");
-	}
-
-	/**
-	 * Draw the component of the world
-	 * @param g : some Graphics
-	 */
-	public void paintComponent(Graphics g) {
-		super.paintComponent(g);
-		
-		Graphics2D g2 = (Graphics2D) g;
-
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-		
-		double renderedX = 310.;
-		double rendered236 = 250.;		
-		double ratio = Math.min(((double) getWidth()) / renderedX, ((double) getHeight()) / rendered236);
-		g2.translate(Math.abs(getWidth() - ratio * renderedX)/2., Math.abs(getHeight() - ratio * rendered236)/2.);
-		g2.scale(ratio, ratio);
-		
-		/* clear board */
-		g2.setColor(Color.white);
-		g2.fill(new Rectangle2D.Double(0., 0., renderedX, rendered236));
-		
-		drawMarker(g2, -20, 0,(int) renderedX);
-		drawStack( g2,  155.);
-	}
-	
-	
-	
-}
diff --git a/src/jlm/universe/smn/pancake/PancakesStack.java b/src/jlm/universe/smn/pancake/PancakesStack.java
deleted file mode 100644
index befea4f..0000000
--- a/src/jlm/universe/smn/pancake/PancakesStack.java
+++ /dev/null
@@ -1,259 +0,0 @@
-package jlm.universe.smn.pancake;
-
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- * @see Pancake
- */
-public class PancakesStack {
-	
-	/**
-	 * Create a new stack of pancakes, which can be mixed or not
-	 * @param size : the size of the stack of pancakes
-	 * @param burnedMatter : if we take care of the position of the burned face
-	 * @return A new stack of size pancakes
-	 */
-	public static PancakesStack create(int size, boolean burnedMatter) {
-		PancakesStack pancakesStack = new PancakesStack(size);
-		pancakesStack.mix(burnedMatter);
-		return pancakesStack;
-	}
-	
-	private boolean flipped; // Used in order to improve the visual of the flipping
-	private Pancake[] pancakeStack; // The stack of pancakes
-	
-	/**
-	 * Constructor of the class PancakesStack
-	 * @param size :the size of the stack of pancakes 
-	 */
-	private PancakesStack(int size) {
-		this.pancakeStack = new Pancake[size];
-		for (int i = 0; i < size; i++) 
-		{
-			this.pancakeStack[i] = new Pancake(i + 1);
-		}
-		this.flipped =false ;
-	}
-	
-	/**
-	 * Make a copy of the given object
-	 * @return A copy of the given object
-	 */
-	public PancakesStack copy() {
-		PancakesStack stack = new PancakesStack(this.getSize());
-		for (int i = 0; i < this.getSize(); i++) 
-		{
-			stack.pancakeStack[i] = this.getPancake(i);
-		}
-		stack.flipped = this.flipped;
-		return stack;
-	}
-	
-	/**
-	 * Make a textual description of the differences between the caller and stack
-	 * @param stack : the stack of pancakes with which you want to compare your current stack 
-	 * @return A textual description of the differences between the caller and stack
-	 */
-	public String diffTo(PancakesStack stack) {
-		String s="These two stacks are identical";
-		if ( !this.equals(stack))
-		{
-			int amountOfPancakes = this.getSize();
-			if ( amountOfPancakes != stack.getSize())
-			{
-				s = "These two stacks don't have the same size ( "+amountOfPancakes+" vs "+ stack.getSize() +" )";
-			}
-			else
-			{
-				s="";
-				for ( int i = 0;i< amountOfPancakes;i++)
-				{
-					if ( !this.getPancake(i).equals(stack.getPancake(i)))
-					{
-						s+=" Pancake number "+(i+1)+" : "+this.getPancake(i).toString() +" vs "+stack.getPancake(i).toString();
-						s+="\n";
-					}
-				}
-			}
-		}
-		return s;
-	}
-	
-	/**
-	 * Indicate whether some other object is "equal to" this one
-	 * @return If the two objects are equals
-	 * @param Object o: the reference object with which to compare
-	 */
-	public boolean equals(Object o,boolean burnedMatter) {
-		boolean sw=true;
-		if (o == null || !(o instanceof PancakesStack) )
-		{
-			sw = false ;
-		}
-		else
-		{
-			PancakesStack other = (PancakesStack) o;
-			int size = this.getSize();
-			sw = other.getSize() == size;
-			for (int i=0;i<size&&sw;i++) 
-			{
-				sw = this.getPancake(i).equals(other.getPancake(i),burnedMatter);
-			}
-		}
-		return sw;
-	}
-
-	/**
-	 * Flip a certain amount of pancakes
-	 * @param numberOfPancakes : the number of pancakes, beginning from the top of the stack, that you want to flip.
-	 * @throws InvalidPancakeNumber : in case you ask to flip less than one or more than the total amount of pancakes
-	 */
-	public void flip(int numberOfPancakes) throws InvalidPancakeNumber {
-		if ( numberOfPancakes < 0 || numberOfPancakes > this.getSize()) {
-			throw new InvalidPancakeNumber(
-					"The number of pancakes must be between 0 and the maximum amount of " +
-					"pancakes in the stack " +
-					"( "+this.getSize() +" here )\n"+ numberOfPancakes +" (the number of pancakes) isn't !");							
-		}
-		int firstPancake = 0 ;
-		int lastPancake = numberOfPancakes-1;
-		while ( firstPancake < lastPancake )
-		{
-			// Swapping time !
-			this.swap(firstPancake, lastPancake);
-			// Changing time !
-			firstPancake++;
-			lastPancake--;
-		}
-		for (int i = 0 ;i<numberOfPancakes;i++)
-		{
-			this.getPancake(i).flip();
-		}
-		this.flipped = !this.flipped;
-		return;
-	}
-
-	/**
-	 * Give a specific pancake among others
-	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, that you want to get.
-	 * @return The expected pancake
-	 */
-	Pancake getPancake(int pancakeNumber) {
-		return this.pancakeStack[pancakeNumber];
-	}
-
-	/**
-	 * Give the radius of a specific pancake among others
-	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, that you want to get.
-	 * @return The radius of the expected pancake
-	 */
-	public int getPancakeRadius(int pancakeNumber){
-		return this.getPancake(pancakeNumber).getRadius();
-	}
-
-	/**
-	 * Give the size of the stack of pancakes
-	 * @return The number of pancakes in the stack
-	 */
-	public int getSize() {
-		return this.pancakeStack.length;
-	}
-	
-	/**
-	 * Tell the value of flipped which is used for graphic purpose only
-	 * @return flipped
-	 */
-	public boolean isFlipped() {
-		return flipped;
-	}
-	
-	/**
-	 * Tell if a specific pancake, among others, is upside down
-	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, that you want to get.
-	 * @return If the specific pancake is upside down or not
-	 */
-	public boolean isPancakeUpsideDown(int pancakeNumber) {
-		return this.getPancake(pancakeNumber).isUpsideDown();
-	}
-
-	/**
-	 * Tell if the stack of pancakes is correctly sorted according to the control freak pancake seller
-	 * @param burnedCare 
-	 * @return TRUE if the stack is okay <br>FALSE else
-	 */
-	public boolean isSorted(boolean burnedCare) {
-		boolean stackSorted = true;
-		int stackSize = this.getSize();
-		for ( int pancakeNumber = 0 ; stackSorted  && pancakeNumber < stackSize ; pancakeNumber++)
-		{
-			Pancake pancake = this.getPancake(pancakeNumber);
-			stackSorted = ( pancake.getRadius() == pancakeNumber+1) && ( !pancake.isUpsideDown() || !burnedCare);
-		}
-		return stackSorted;
-	}
-	
-	/**
-	 * Mix the stack in order to screw the pancake seller
-	 * @param burned 
-	 */
-	public void mix(boolean burned) {
-		int stackSize = this.getSize();
-		// Just to be sure that the stack is a bit mixed
-		while( this.isSorted(burned) )
-		{
-			for ( int pancakeNumber = 0 ; pancakeNumber < stackSize ; pancakeNumber++)
-			{
-				// Flipping time !
-				if ( Math.random() > 0.5)
-				{
-					this.getPancake(pancakeNumber).flip();
-				}
-				// Swapping time !
-				if ( Math.random() > 0.5)
-				{
-					this.swap(pancakeNumber,(int)(Math.random()*stackSize));
-				}
-			}
-		}
-		return;
-	}
-	
-	/**
-	 * Place the given pancake at the given floor in the stack
-	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, where you want to place the pancake.
-	 * @param pancake :the pancake that you want to place in the stack
-	 */
-	private void setPancake(int pancakeNumber, Pancake pancake){
-		this.pancakeStack[pancakeNumber] = pancake.copy();
-		return;
-	}
-	
-	/**
-	 * Swap two pancakes
-	 * @param pancakeOne :the first pancake which will be swapped
-	 * @param pancakeTwo :the second one
-	 */
-	private void swap(int pancakeOne, int pancakeTwo) {
-		Pancake flyingPancake = this.getPancake(pancakeOne);
-		this.setPancake(pancakeOne,this.getPancake(pancakeTwo));
-		this.setPancake(pancakeTwo,flyingPancake);
-		return;
-	}
-
-	/**
-	 * Returns a string representation of the stack of pancakes
-	 * @return A string representation of the stack of pancakes
-	 */
-	@Override
-	public String toString() {
-		int amountOfPancakes = this.getSize();
-		String s = "< Stack size: "+amountOfPancakes + " >";
-		for ( int i =0; i < amountOfPancakes ; i++)
-		{
-			s += "\n";
-			s +=this.getPancake(i).toString();
-		}
-		return s;
-	}
-
-}
diff --git a/src/jlm/universe/smn/pancake/package-info.java b/src/jlm/universe/smn/pancake/package-info.java
deleted file mode 100644
index bb16833..0000000
--- a/src/jlm/universe/smn/pancake/package-info.java
+++ /dev/null
@@ -1,7 +0,0 @@
-/**
- * The problem of the control freak pancake seller
- */
-
-package jlm.universe.smn.pancake;
-
-
diff --git a/src/jlm/universe/sort/CopyVal.java b/src/jlm/universe/sort/CopyVal.java
index 235811e..2230136 100644
--- a/src/jlm/universe/sort/CopyVal.java
+++ b/src/jlm/universe/sort/CopyVal.java
@@ -9,7 +9,6 @@ public class CopyVal extends Operation {
 	 */
 	public CopyVal(int source, int destination){
 		super(source,destination);
-		this.type = 0;
 	}
 
 	/**
diff --git a/src/jlm/universe/sort/GetVal.java b/src/jlm/universe/sort/GetVal.java
new file mode 100644
index 0000000..fe64f18
--- /dev/null
+++ b/src/jlm/universe/sort/GetVal.java
@@ -0,0 +1,28 @@
+package jlm.universe.sort;
+
+public class GetVal extends Operation {
+	
+	public int position;
+
+	/**
+	 * Constructor of the class SetVal
+	 * @param position the source of the operation
+	 * @param destination the destination of the operation
+	 */
+	public GetVal(int position){
+		super(-1,-1);
+		this.position = position; 
+	}
+
+	/**
+	 * Compute an operation on init
+	 * @param init the values on which compute the operation
+	 * @return the array passed as parameter, once the operation is applied to it
+	 */
+	@Override
+	public int[] run(int[] init) {
+		return init;
+	}
+	
+	
+}
diff --git a/src/jlm/universe/sort/Operation.java b/src/jlm/universe/sort/Operation.java
index a5e9276..18fd94c 100644
--- a/src/jlm/universe/sort/Operation.java
+++ b/src/jlm/universe/sort/Operation.java
@@ -1,10 +1,8 @@
 package jlm.universe.sort;
 
-import java.util.ArrayList;
 
 public abstract class Operation {
 	
-	protected int type;	// the type of operation
 	protected int source;	// the source of the operation
 	protected int destination;	// the destination of the operation
 	
@@ -23,19 +21,17 @@ public abstract class Operation {
 	 * @param o the reference object with which to compare
 	 */
 	public boolean equals(Object o) {
-		boolean sw = true;
 		if (o == null || !(o instanceof Operation))
-		{
-			sw=false;
-		}
-		else
-		{
-			Operation other = (Operation) o;
-			sw =   this.destination == other.destination
-				&& this.source == other.destination
-				&& this.type == other.type ;
-		}
-		return sw;
+			return false;
+		
+		Operation other = (Operation) o;
+		if (destination != other.destination)
+			return false;
+		if (!getClass().equals(o.getClass()))
+			return false;
+		if (source != other.source)
+			return false;
+		return true;
 	}
 
 	/**
@@ -51,47 +47,11 @@ public abstract class Operation {
 	public int getDestination() {
 		return this.destination;
 	}
-	
-	/**
-	 * Compute the rang first operations of the list of operations ops on the array init
-	 * @param init the values where apply the operations
-	 * @param ops the list of operations to compute
-	 * @param rang the number of operations to compute
-	 * @return A new array of integer equals to init where the rang first operations of ops have been applied
-	 */
-	public static int[] compute(int[] init, ArrayList<Operation> ops, int rang){
-		int[] current = new int[init.length];
-		current = init;
-		for(int i=0;i<init.length ; i++){
-			current[i] = init[i];
-		}
-		
-		int cmpt=1;
-		for(Operation op : ops){
-			
-			current = op.run(current);
-			if(cmpt==rang){
-				break;
-			}
-			cmpt++;
-		}
 		
-		return current;
-	}
-	
 	/**
 	 * Compute an operation on init
 	 * @param init the values on which compute the operation
 	 * @return a new array of values equals to init where the operation had been computed
 	 */
-	public abstract int[] run(int[] init);
-
-	/**
-	 * Return the type of the operation
-	 * @return the type of the operation
-	 */
-	public int getType() {
-		return type;
-	}
-	
+	public abstract int[] run(int[] init);	
 }
diff --git a/src/jlm/universe/sort/SetVal.java b/src/jlm/universe/sort/SetVal.java
index 0bdc9e0..722a6c8 100644
--- a/src/jlm/universe/sort/SetVal.java
+++ b/src/jlm/universe/sort/SetVal.java
@@ -2,14 +2,16 @@ package jlm.universe.sort;
 
 public class SetVal extends Operation {
 	
+	int value;
+
 	/**
 	 * Constructor of the class SetVal
-	 * @param source the source of the operation
+	 * @param position the source of the operation
 	 * @param destination the destination of the operation
 	 */
-	public SetVal(int source, int destination){
-		super(source,destination);
-		this.type =1;
+	public SetVal(int position, int value){
+		super(position,-1);
+		this.value = value; 
 	}
 
 	/**
@@ -19,7 +21,7 @@ public class SetVal extends Operation {
 	 */
 	@Override
 	public int[] run(int[] init) {
-		init[destination] = source;
+		init[source] = value;
 		
 		return init;
 	}
diff --git a/src/jlm/universe/sort/SortingButtonPanel.java b/src/jlm/universe/sort/SortingButtonPanel.java
index c99e4a8..962ef54 100644
--- a/src/jlm/universe/sort/SortingButtonPanel.java
+++ b/src/jlm/universe/sort/SortingButtonPanel.java
@@ -17,7 +17,6 @@ import org.xnap.commons.i18n.I18nFactory;
 /**
  * The control panel for the sorting world. 
  * It allows you to use the copy, setValue and swap methods interactively.
- * @author Julien BASTIAN
  * @see EntityControlPanel
  * @see SortingWorld
  */
diff --git a/src/jlm/universe/sort/SortingWorld.fr.html b/src/jlm/universe/sort/SortingWorld.fr.html
index e1a9844..c5e1541 100644
--- a/src/jlm/universe/sort/SortingWorld.fr.html
+++ b/src/jlm/universe/sort/SortingWorld.fr.html
@@ -9,18 +9,36 @@ différences d'efficacité entre eux.
 <h2>Méthodes disponibles pour les algorithmes de tri</h2>
 <table border=1>
 <tr><td><b>Méthode</b></td><td><b>Action</b></td><td><b>Coût</b></td></tr>
-<tr><td>int getValueCount()</td><td>Retourne le nombre de valeurs dans le tableau</td><td>aucun</td></tr>
+<tr><td><div class="Java">int getValueCount()</div>
+        <div class="python">getValueCount()</div></td>
+    <td>Retourne le nombre de valeurs dans le tableau</td><td>aucun</td></tr>
 
-<tr><td>boolean isSmaller(int i, int j)</td><td>Returns true if the content of cell i is strictly smaller than the one of
-cell j</td><td>deux lectures</td></tr>
-<tr><td>boolean isSmallerThan(int i, int val)</td><td>Returns true if the content of cell i is strictly smaller than value
-<code>val</code></td><td>une lecture</td></tr>
+<tr><td><div class="Java">boolean isSmaller(int i, int j)</div>
+        <div class="python">isSmaller(i, j)</div></td>
+    <td>Retourne vrai ssi le contenu de la case i est strictement inférieur à celui
+de la case j</td><td>deux lectures</td></tr>
+<tr><td><div class="Java">boolean isSmallerThan(int i, int val)</div>
+        <div class="python">isSmallerThan(i, val)</div></td>
+    <td>Retourne vrai ssi le contenu de la case i est strictement inférieur à la
+valeur val</td><td>une lecture</td></tr>
 
-<tr><td>void swap(int i, int j)</td><td>Echange le contenu de la case i avec celui de la case j</td><td>deux lectures, deux écritures</td></tr>
-<tr><td>void copy(int from, int to)</td><td>Copie le contenu de la case 'from' dans la case 'to'</td><td>une lecture, une écriture</td></tr>
+<tr><td><div class="Java">void swap(int i, int j)</div>
+        <div class="python">swap(i, j)</div></td>
+     <td>Echange le contenu de la case i avec celui de la case j</td><td>deux lectures, deux écritures</td></tr>
+<tr><td><div class="Java">void copy(int from, int to)</div>
+        <div class="python">copy(from, to)</div></td>
+    <td>Copie le contenu de la case 'from' dans la case 'to'</td><td>une lecture, une écriture</td></tr>
 
-<tr><td>int getValue(int idx)</td><td>Retourne la valeur de la case idx</td><td>une lecture</td></tr>
-<tr><td>void setValue(int idx,int val)</td><td>Affecte la valeur 'val' à la case 'idx'</td><td>une écriture</td></tr>
+<tr><td><div class="Java">int getValue(int idx)</div>
+        <div class="python">getValue(idx)</div></td>
+    <td>Retourne la valeur de la case idx</td><td>une lecture</td></tr>
+<tr><td><div class="Java">void setValue(int idx, int val)</div>
+        <div class="python">setValue(idx, val)</div></td>
+    <td>Affecte la valeur 'val' à la case 'idx'</td><td>une écriture</td></tr>
+
+<tr><td><div class="Java">boolean isSelected()</div>
+        <div class="python">isSelected()</div></td>
+    <td>Renvoi si le monde actuel est sélectionné dans l'interface graphique.</td><td>aucun</td></tr>
 
 </table>
 
@@ -42,6 +60,10 @@ première vue. Le temps s'écoule de gauche à droite, et les cases du tableau
 sont représentée de haut en bas. Les lignes de différentes couleurs qui
 serpentent représentent les différentes valeurs contenues dans le
 tableau. Quand deux lignes se croises, cela signifie que les valeurs du
-tableau ont été échangées à ce moment de l'historique. Cette vue, inventée
-par Aldo Cortesi, est très pratique pour comprendre le comportement des
-algorithmes de tri.</p> 
+tableau ont été échangées à ce moment de l'historique; un embranchement
+signifie que la valeur a été copiée; une valeur en violet suivie d'un point
+d'interrogation a été lue avec getValue() et une valeur en rouge suivie d'un
+point d'exclamation a été écrite avec setValue().</p>
+
+<p>Cette vue, inspirée d'Aldo Cortesi, est très pratique pour comprendre le
+comportement des algorithmes de tri.</p> 
diff --git a/src/jlm/universe/sort/SortingWorld.html b/src/jlm/universe/sort/SortingWorld.html
index 2e3f35a..a1a8b50 100644
--- a/src/jlm/universe/sort/SortingWorld.html
+++ b/src/jlm/universe/sort/SortingWorld.html
@@ -8,16 +8,34 @@ helps understanding the differences between each of them.
 <h2>Methods available to sorting algorithms</h2>
 <table border=1>
 <tr><td><b>Method</b></td><td><b>Action</b></td><td><b>Cost</b></td></tr>
-<tr><td>int getValueCount()</td><td>Returns the amount of values in the array</td><td>none</td></tr>
+<tr><td><div class="Java">int getValueCount()</div>
+        <div class="python">getValueCount()</div></td>
+    <td>Returns the amount of values in the array</td><td>none</td></tr>
 
-<tr><td>boolean isSmaller(int i, int j)</td><td>Returns true if the content of cell i is strictly smaller than the one of cell j</td><td>two reads</td></tr>
-<tr><td>boolean isSmallerThan(int i, int val)</td><td>Returns true if the content of cell i is strictly smaller than value <code>val</code></td><td>one read</td></tr>
+<tr><td><div class="Java">boolean isSmaller(int i, int j)</div>
+        <div class="python">isSmaller(i, j)</div></td>
+    <td>Returns true if the content of cell i is strictly smaller than the one of cell j</td><td>two reads</td></tr>
+<tr><td><div class="Java">boolean isSmallerThan(int i, int val)</div>
+        <div class="python">isSmallerThan(i, val)</div></td>
+    <td>Returns true if the content of cell i is strictly smaller than value <code>val</code></td><td>one read</td></tr>
 
-<tr><td>void swap(int i, int j)</td><td>Swaps the content of cell i and the one of cell j</td><td>two reads, two writes</td></tr>
-<tr><td>void copy(int from, int to)</td><td>Copy the content of cell 'from' into the cell 'to'</td><td>one read, one write</td></tr>
+<tr><td><div class="Java">void swap(int i, int j)</div>
+        <div class="python">swap(i, j)</div></td>
+     <td>Swaps the content of cell i and the one of cell j</td><td>two reads, two writes</td></tr>
+<tr><td><div class="Java">void copy(int from, int to)</div>
+        <div class="python">copy(from, to)</div></td>
+    <td>Copy the content of cell 'from' into the cell 'to'</td><td>one read, one write</td></tr>
 
-<tr><td>int getValue(int idx)</td><td>Returns the value of cell idx</td><td>one read</td></tr>
-<tr><td>void setValue(int idx,int val)</td><td>Sets cell 'idx' to the value 'val'</td><td>one write</td></tr>
+<tr><td><div class="Java">int getValue(int idx)</div>
+        <div class="python">getValue(idx)</div></td>
+    <td>Returns the value of cell idx</td><td>one read</td></tr>
+<tr><td><div class="Java">void setValue(int idx, int val)</div>
+        <div class="python">setValue(idx, val)</div></td>
+    <td>Sets cell 'idx' to the value 'val'</td><td>one write</td></tr>
+
+<tr><td><div class="Java">boolean isSelected()</div>
+        <div class="python">isSelected()</div></td>
+    <td>Returns whether the current world is selected in the graphical interface.</td><td>none</td></tr>
 
 </table>
 
@@ -29,15 +47,19 @@ and write operations to sort the array. When they don't match,
 understanding the difference between your code and the expected
 solution can reveal very difficult.</p>
 
-<p>To help in this process, it is posible to graphically explore the
+<p>To help in this process, it is possible to graphically explore the
 history of your sorting algorithm. Switch to the Objective view and
-use the contextual menu (right clic) to switch from the the view of
+use the contextual menu (right click) to switch from the the view of
 the current state to the view of its history.</p>
 
 <p>The history view is a bit hairly at the first glance, but actually rather
 simple: The time flows from left to right on this graph, and each row
 is a cell of your array. The curved lines that go navigate between
 rows represent a given data value. When two lines cross, this means
-that two values were swapped at this time stamp. This view, first
-introduced by Aldo Cortesi, reveals very helpful understand the inner
+that two values were swapped at this time stamp; A line fork represent a 
+value copy; When a value is magenta and followed by an interrogation 
+mark (?), it was read using getValue(); If the value is red and followed with 
+an exclamation point (!), it was written using setValue().</p>
+
+<p>This view, inspired from Aldo Cortesi, reveals very helpful understand the inner
 behavior of sorting algorithms.</p> 
diff --git a/src/jlm/universe/sort/SortingWorld.java b/src/jlm/universe/sort/SortingWorld.java
index f809c84..60207ac 100644
--- a/src/jlm/universe/sort/SortingWorld.java
+++ b/src/jlm/universe/sort/SortingWorld.java
@@ -4,9 +4,11 @@ import java.util.ArrayList;
 
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
+import javax.swing.ImageIcon;
 
 import jlm.core.model.Game;
 import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.EntityControlPanel;
 import jlm.universe.World;
@@ -56,21 +58,28 @@ public class SortingWorld extends World {
 	}
 
 	public boolean equals(Object o) {
-		boolean sw = true;
 		if (o == null || !(o instanceof SortingWorld))
-		{
-			sw=false;
-		}
-		else
-		{
-			SortingWorld other = (SortingWorld) o;
-			sw =   this.initValues.equals(other.initValues)
-			&& this.operations.equals(other.operations)
-			&& this.readCount == other.readCount
-			&& this.writeCount == other.writeCount
-			&& this.values.equals(other.values) ;
-		}
-		return sw;
+			return false;
+
+		SortingWorld other = (SortingWorld) o;
+		if (values.length != other.values.length)
+			return false;
+		for (int i = 0 ; i < this.values.length ; i++) 
+			if ( this.values[i] != other.values[i] )
+				return false;
+		
+		if (operations.size() != other.operations.size())
+			return false;
+		for (int i = 0 ; i < this.operations.size() ; i++) 
+			if (! operations.get(i).equals( other.operations.get(i)) )
+				return false;
+		
+		if (! (this.readCount == other.readCount) )
+			return false;
+		if (! (this.writeCount == other.writeCount) )
+			return false;
+		
+		return true;
 	}
 
 	/**
@@ -115,42 +124,37 @@ public class SortingWorld extends World {
 	@Override
 	public String diffTo(World world) {
 		String s ;
-		if (world == null || !(world instanceof SortingWorld))
-		{
-			s="This is not a world of sorting ='(...";
-		}
-		else
-		{
+		if (world == null || !(world instanceof SortingWorld)) {
+			s="This is not a world of sorting :(";
+		} else {
 			SortingWorld other = (SortingWorld) world;
 			StringBuffer sb = new StringBuffer();
 			if ( this.readCount != other.readCount )
-			{
 				sb.append("Invalid read count : expected "+this.readCount+" found "+other.readCount+"\n");
-			}
+			
 			if ( this.writeCount != other.writeCount )
-			{
 				sb.append("Invalid write count : expected "+this.writeCount+" found "+other.writeCount+"\n");
-			}
+			
 			for (int i = 0 ; i < this.values.length ; i++) 
-			{
 				if ( this.values[i] != other.values[i] )
-				{
 					sb.append("Index "+i+": expected "+this.values[i]+" found "+other.values[i]+"\n");
-				}	
-			}
+					
 			s = sb.toString();
 		}
 		return s;
 	}
 
 
-	/**
-	 * Return the panel which let the user to interact dynamically with the world
-	 */
+	/** Returns the panel which let the user to interact dynamically with the world */
 	@Override
 	public EntityControlPanel getEntityControlPanel() {
 		return new SortingButtonPanel();
 	}
+	/** Returns the icon of the universe */
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_sorting.png");
+	}
 
 	/**
 	 * Returns the initial state of the array
@@ -173,18 +177,6 @@ public class SortingWorld extends World {
 		return this.readCount;
 	}
 
-	/**
-	 * Return the value of index i in the array
-	 * @param i the index wanted in the array
-	 * @return the value of index i in the array
-	 */
-	public int getValue(int i) {
-		if (i<0) throw new RuntimeException("Out of bounds in getValue("+i+"): "+i+"<0");
-		if (i>=getValueCount()) throw new RuntimeException("Out of bounds in getValue("+i+"), "+i+">= value count");
-		readCount++;
-		return values[i];
-	}
-
 	/** Returns the amount of values in the array */
 	public int getValueCount() {
 		return values.length;
@@ -291,7 +283,20 @@ public class SortingWorld extends World {
 			throw new RuntimeException("No binding of SortingWorld for "+lang);
 		}
 	}
-	
+
+	/**
+	 * Return the value of index i in the array
+	 * @param i the index wanted in the array
+	 * @return the value of index i in the array
+	 */
+	public int getValue(int i) {
+		if (i<0) throw new RuntimeException("Out of bounds in getValue("+i+"): "+i+"<0");
+		if (i>=getValueCount()) throw new RuntimeException("Out of bounds in getValue("+i+"), "+i+">= value count");
+		this.operations.add(new GetVal(i));
+		readCount++;
+		return values[i];
+	}
+
 	/**
 	 * Set the value of the case number i of the array at val<br>
 	 * It costs only one write.
diff --git a/src/jlm/universe/sort/SortingWorldView.java b/src/jlm/universe/sort/SortingWorldView.java
index 7fb60a0..c7e9274 100644
--- a/src/jlm/universe/sort/SortingWorldView.java
+++ b/src/jlm/universe/sort/SortingWorldView.java
@@ -14,13 +14,11 @@ import java.awt.event.MouseListener;
 import java.awt.geom.Rectangle2D;
 import java.util.Locale;
 
-import javax.swing.ImageIcon;
 import javax.swing.JMenuItem;
 import javax.swing.JPopupMenu;
 
 import jlm.core.HumanLangChangesListener;
 import jlm.core.model.Game;
-import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.World;
 
@@ -101,22 +99,14 @@ public class SortingWorldView extends WorldView {
 	 */
 	private void drawAlgoChrono(Graphics2D g2, SortingWorld we) {
 		int operationsAmount = we.getOperations().size();	// little optimization
-		//If the array is small enough, we print the values
-		boolean drawStr = operationsAmount <= 50 && we.getValues().length <= 50;
-		/* getWidth()-12 to keep the room to display the very left value */
-		float stepX = ((float)getWidth()-(drawStr?12:0)) / ((float)(Math.max(operationsAmount, 1)));
+		/* getWidth()-12 to keep the room to display the very left value. Do that even if we don't depict them */
+		float stepX = ((float)getWidth()-12) / ((float)(Math.max(operationsAmount, 1)));
 		float stepY = ((float)getHeight()) / ((float)(we.getValueCount()));
 		int x1, y1, x2, y2, tone;
 
-		int[] vals = new int[we.getInitValues().length];
-		int[] prevVals = new int[we.getInitValues().length];
-		for (int i = 0; i < we.getInitValues().length; i++) 
-		{
-			prevVals[i] = we.getInitValues()[i];
-		}
-
-
-
+		// If the array is small enough, we print the values
+		boolean drawStr = (stepX > 12) && (stepY>12);
+		
 		// Case without any operation to draw: initial view
 		if (operationsAmount == 0) {
 
@@ -135,103 +125,113 @@ public class SortingWorldView extends WorldView {
 			return;
 		}
 
-		// Draw the values at the very left of the figure
-		if (drawStr) 
-			for (int valueIdx = 0; valueIdx < we.getValueCount(); valueIdx++) { 
-				y1 = (int) (valueIdx * stepY + stepY/2);
-				tone = getValueColor(we.getInitValues()[valueIdx],we.getValueCount());
-				g2.setColor(new Color(tone, tone, 128));
-				g2.drawString("" + we.getInitValues()[valueIdx], 0, y1);
-			}
-
+		// Draw the values at the very left of the figure (in any case)
+		for (int valueIdx = 0; valueIdx < we.getValueCount(); valueIdx++) { 
+			y1 = (int) (valueIdx * stepY + stepY/2);
+			tone = getValueColor(we.getInitValues()[valueIdx],we.getValueCount());
+			g2.setColor(new Color(tone, tone, 128));
+			g2.drawString("" + we.getInitValues()[valueIdx], 0, y1);
+		}
+		
+		int[] valuesAfter = new int[we.getInitValues().length];
+		int[] valuesBefore = new int[we.getInitValues().length];
+		for (int i = 0; i < we.getInitValues().length; i++) { 
+			valuesBefore[i] = we.getInitValues()[i];
+			valuesAfter[i] = valuesBefore[i];
+		}
+		
 		// Case with several operations
 		for (int opIdx = 0; opIdx < operationsAmount; opIdx++) {
 			Operation op = we.getOperations().get(opIdx);
 
-			vals = Operation.compute(we.getInitValues(), we.getOperations(), opIdx + 1);
-
-			if (op.getType() == 2 ) // op is a Swap
-			{
-				x1 = (int) (opIdx * stepX);
-				x2 = (int) (x1 + stepX);
-				for (int valueIterator=0; valueIterator<we.getValueCount();valueIterator++)
-				{
-					y1 = (int) (valueIterator * stepY + stepY/2);
-
-					if ( op.getSource() != valueIterator && op.getDestination() != valueIterator) {							
-						tone = getValueColor(vals[valueIterator],we.getValueCount());
-						g2.setColor(new Color(tone, tone, 128));
-
-						g2.drawLine(x1, y1, x2, y1);
-					}
-
-					if (drawStr) 
-					{
-						tone = getValueColor(vals[valueIterator],we.getValueCount());
-						g2.setColor(new Color(tone, tone, 128));
-						g2.drawString("" + vals[valueIterator], x2, y1);							
-					}
+			valuesAfter = op.run(valuesAfter);
+			
+			x1 = (int) (opIdx * stepX);
+			x2 = (int) (x1 + stepX);
+
+			/* Draw straight lines for unmodified values */
+			for (int valIdx=0; valIdx<we.getValueCount();valIdx++) {
+				y1 = (int) (valIdx * stepY + stepY/2);
+				
+				if ( op.getSource() != valIdx && op.getDestination() != valIdx) {							
+					tone = getValueColor(valuesAfter[valIdx],we.getValueCount());
+					g2.setColor(new Color(tone, tone, 128));
+					
+					g2.drawLine(x1, y1, x2, y1);
 				}
-
+			}
+			/* Write the values in their new position (if there is not too much values) */
+			if (drawStr) 
+				for (int valIdx=0; valIdx<we.getValueCount();valIdx++) { 
+					y1 = (int) (valIdx * stepY + stepY/2);
+					
+					tone = getValueColor(valuesAfter[valIdx],we.getValueCount());
+					g2.setColor(new Color(tone, tone, 128));
+					g2.drawString("" + valuesAfter[valIdx], x2, y1);		
+				}
+			
+			/* Draw the lines depicting the current operation */
+			if (op instanceof Swap ) { // op is a Swap
+//				System.out.println("Swap "+op.source+" <-> "+op.destination);
+				
 				// draw source->dest
 				y1 = (int) (op.getSource() * stepY + stepY/2);
 				y2 = (int) (op.getDestination() * stepY + stepY/2);
-				tone = getValueColor(vals[op.getDestination()],we.getValueCount());
+				tone = getValueColor(valuesAfter[op.getDestination()],we.getValueCount());
 				g2.setColor(new Color(tone, tone, 128));
 				g2.drawLine(x1, y1, x2, y2);
 
 				// draw dest->source
 				y1 = (int) (op.getDestination() * stepY + stepY/2);
 				y2 = (int) (op.getSource() * stepY + stepY/2);
-				tone = getValueColor(vals[op.getSource()],we.getValueCount());
+				tone = getValueColor(valuesAfter[op.getSource()],we.getValueCount());
 				g2.setColor(new Color(tone, tone, 128));
 				g2.drawLine(x1, y1, x2, y2);
 
-			} 
-			else 
-			{
-				if (!( op.getType() == 0 ) && !(op.getType() == 1 ) )	// op is neither a CopyVal nor a setVal 
-				{
-					System.out.println("Ouch: that's not a swap but a "+op.toString()+" this code was never debugged.");
-				}
-				for (int valueIterator = 0; valueIterator < we.getValueCount(); valueIterator++) 
-				{
-					x1 = (int) (opIdx * stepX);
-					y1 = 0;
-					for (int prevPos = 0; prevPos < prevVals.length; prevPos++) 
-						if (prevVals[prevPos] == valueIterator) 
-							y1 = (int) (prevPos * stepY + stepY/2.);
-
-					x2 = (int) (x1 + stepX);
-					y2 = y1;
-					for (int newPos = 0; newPos < vals.length; newPos++)
-					{
-						if (vals[newPos] == valueIterator)
-						{
-							y2 = (int) (newPos * stepY + stepY/2.);
-						}
-					}
-
-					tone = (int) ((float) ((float) (valueIterator) / ((float) we.getValueCount())) * 255);
-					g2.setColor(new Color(tone, tone, 128));
-
-					g2.drawLine(x1, y1, x2, y2);
-
-					if (drawStr) 
-					{
-						g2.drawString("" + valueIterator, x1, y1);
-
-						//Last array (sorted)
-						if(opIdx==operationsAmount-1)
-							g2.drawString("" + valueIterator, x2, y2);
-					}
+			} else if (op instanceof CopyVal) {
+//				System.out.println("Copy "+op.source+" -> "+op.destination);
+				
+				// draw the value being copied over
+				y1 = (int) (op.getSource() * stepY + stepY/2);
+				y2 = (int) (op.getDestination() * stepY + stepY/2);
+				tone = getValueColor(valuesAfter[op.getDestination()],we.getValueCount());
+				g2.setColor(new Color(tone, tone, 128));
+				g2.drawLine(x1, y1, x2, y2);
+				
+				// draw the old value remaining the same
+				y1 = (int) (op.getSource() * stepY + stepY/2);
+				tone = getValueColor(valuesAfter[op.getDestination()],we.getValueCount());
+				g2.setColor(new Color(tone, tone, 128));
+				g2.drawLine(x1, y1, x2, y1);
+				
+			} else if (op instanceof SetVal) {
+//				System.out.println("Set "+op.source+" (to "+((SetVal)op).value+")");
+				if (drawStr || true) {
+					y1 = (int) (op.source * stepY + stepY/2);
+				
+					tone = getValueColor(valuesAfter[op.source],we.getValueCount());
+					g2.setColor(Color.red);
+					g2.drawString("" + valuesAfter[op.source]+"!", x2, y1);
 				}
 
-				for (int k = 0; k < vals.length; k++) 
-				{
-					prevVals[k] = vals[k];
+				/* Don't draw a line for the modified value, actually */
+			} else if (op instanceof GetVal) {
+//				System.out.println("Get "+((GetVal)op).position);
+				if (drawStr || true) {
+					int pos = ((GetVal) op).position;
+					y1 = (int) (pos * stepY + stepY/2);
+				
+					tone = getValueColor(valuesAfter[pos],we.getValueCount());
+					g2.setColor(Color.MAGENTA);
+					g2.drawString("" + valuesAfter[pos]+"?", x2, y1);
 				}
+			} else {
+				System.out.println("This operation is not depicted because that's a "+op.toString()+"; please report this bug.");
 			}
+			
+
+			for (int k = 0; k < valuesAfter.length; k++) 
+				valuesBefore[k] = valuesAfter[k];
 		}
 	}
 
@@ -263,14 +263,6 @@ public class SortingWorldView extends WorldView {
 	}
 
 	/**
-	 * Return the icon of the world
-	 * @return the icon for the exercise selection
-	 */
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_sorting.png");
-	}
-
-	/**
 	 * Decide which view we must draw ( state or chrono )
 	 */
 	public void paintComponent(Graphics g) {
@@ -311,12 +303,11 @@ public class SortingWorldView extends WorldView {
 		g2.setColor(Color.white);
 		g2.fill(new Rectangle2D.Double(0.,0.,(double)getWidth(),(double)getHeight()));
 
-		g2.setColor(Color.black);
 		g2.setFont(new Font("Monaco", Font.PLAIN, 12));
 
-		if (world.getEntityCount() > 1) {
-			System.err.println("Sorting World");
-		}
+		if (world.getEntityCount() > 1) 
+			System.err.println("Sorting World does not accept more than one entity anymore. Please fix your exercise.");
+		
 		int maxSize = getHeight();
 
 		drawAlgoState(g2, (SortingWorld) this.world, maxSize);
@@ -332,18 +323,13 @@ public class SortingWorldView extends WorldView {
 		return (int) ((((float) value) / ((float) valueCount)) * 255.);
 	}
 
-	/**
-	 * @param useStateView the useStateView to set
-	 */
-	public void setUseStateView(boolean useStateView) {
-		this.useStateView = useStateView;
-	}
 
-	/** Return if we must use the state view ( else we must use the chrono view )
-	 * @return if we must use the state view
-	 */
-	public boolean isUseStateView() {
+	/** Returns if we must use the state view ( else we must use the chrono view ) */
+	protected boolean isUseStateView() {
 		return useStateView;
 	}
+	protected void setUseStateView(boolean useStateView) {
+		this.useStateView = useStateView;
+	}
 
 }
diff --git a/src/jlm/universe/sort/Swap.java b/src/jlm/universe/sort/Swap.java
index 4bf7258..9e4e36c 100644
--- a/src/jlm/universe/sort/Swap.java
+++ b/src/jlm/universe/sort/Swap.java
@@ -9,7 +9,6 @@ public class Swap extends Operation {
 	 */
 	public Swap(int source, int destination){
 		super(source,destination);
-		this.type = 2;
 	}
 
 	/**
diff --git a/src/jlm/universe/turmite/TurmiteWorld.fr.html b/src/jlm/universe/turmite/TurmiteWorld.fr.html
deleted file mode 100644
index 3136bda..0000000
--- a/src/jlm/universe/turmite/TurmiteWorld.fr.html
+++ /dev/null
@@ -1,51 +0,0 @@
-<h1>Le monde des Buggles</h1>
-Ce monde a été inventé par Lyn Turbak, du Wellesley College. Il est peuplé
-de Buggles, petites bêtes qui comprennent des ordres simples, et offre de
-nombreuses possibilités d'interaction avec le monde: prendre ou poser des
-objets, colorier le sol, se cogner à des murs, etc.
-
-<h2>Méthodes comprises par les buggles</h2>
-<table border=1>
-<tr><td colspan=2 align=center><b>Bouger</b><br/> (voir aussi la note sur les exceptions, plus bas)</td></tr>
-  <tr><td><b>Tourner à gauche<br/>Tourner à droite<br/>Se retourner<br/>Avancer<br/>Reculer</b></td>
-      <td>void turnLeft()<br/>void turnRight()<br/>void turnBack()<br/>
-          void forward() ou void forward(int)<br/>void backward() ou void backward(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>int getX()<br/>int getY()<br/>void setX(int)<br/>void setY(int)<br/>void setPos(int,int)</td></tr>
-
-<tr><td colspan=2 align=center><b>Informations sur la buggle</b></td></tr>
-  <tr><td><b>Obtenir la couleur<br/>Changer la couleur</b></td>
-      <td>Color getColor()<br/>void setColor(Color)</td></tr>				
-  <tr><td><b>Chercher un mur devant<br/>Chercher un mur derriere</b></td>
-      <td>boolean isFacingWall()<br/>boolean isBackingWall()</td></tr>				
-  <tr><td><b>Obtenir la direction<br/>Changer la direction</b><br/>Les directions valides sont :</td>
-      <td>Direction getDirection()<br/>void setDirection(Direction)<br/>Direction.NORTH, Direction.EAST, Direction.SOUTH et Direction.WEST</td></tr>
- 
-<tr><td colspan=2 align=center><b>À propos de la brosse</b></td></tr>
-  <tr><td><b>Baisser la brosse<br/>Lever la brosse<br/>Obtenir la position de la brosse</b></td>
-      <td>void brushUp()<br/>void brushDown()<br/>boolean isBrushDown()</td></tr>
-  <tr><td><b>Modifier la couleur de la brosse<br/>Obtenir la couleur de la brosse</b></td>
-      <td>void setBrushColor(Color)<br/>Color getBrushColor()</td></tr>
-
-<tr><td colspan=2 align=center><b>Interagir avec le monde</b></td></tr>
-  <tr><td><b>Obtenir la couleur du sol</b></td><td>Color getGroundColor()</td></tr>
-
-  <tr><td><b>Chercher un baggle par terre<br/>Chercher un baggle dans ses poches<br/>Prendre un baggle<br/>Poser un baggle</b><br/>
-      (voir la note sur les exceptions)</td>
-      <td>boolean isOverBaggle()<br/>boolean isCarryingBaggle()<br/>void pickUpBaggle()<br/>void dropBaggle()</td></tr>
-
-  <tr><td><b>Chercher un message<br/>Ajouter un message<br/>Lire le message<br/>Effacer le message</b></td>
-      <td>boolean isOverMessage()<br/>void writeMessage(String)<br/>String readMessage()<br/>void clearMessage()</td></tr>
-</table>
-
-<h2>Note sur les exceptions</h2>
-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
-exception AlreadyHaveBaggleException.
-<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/jlm/universe/turmite/TurmiteWorld.html b/src/jlm/universe/turmite/TurmiteWorld.html
deleted file mode 100644
index adb5ed8..0000000
--- a/src/jlm/universe/turmite/TurmiteWorld.html
+++ /dev/null
@@ -1,49 +0,0 @@
-<h1>BuggleWorld</h1>
-This world was invented by Lyn Turbak, at Wellesley College. It is full of
-Buggles, little animals understanding simple orders, and offers numerous
-possibilities of interaction with the world: taking or dropping objects,
-paint the ground, hit walls, etc.
-
-<h2>Methods understood by buggles</h2>
-<table border=1>
-<tr><td colspan=2 align=center><b>Moving</b><br/> (See also the note on exceptions, below)</td></tr>
-  <tr><td><b>Turn left<br/>Turn right<br/>Turn back<br/>Moving forward<br/>Moving back</b></td>
-      <td>void turnLeft()<br/>void turnRight()<br/>void turnBack()<br/>
-          void forward() or void forward(int)<br/>void backward() or void backward(int)<br/></td></tr>
-  <tr><td><b>Get X coordinate<br/>Get Y coordinate<br/>Set X coordinate<br/>Set Y coordinate<br/>Set position</b></td>
-      <td>int getX()<br/>int getY()<br/>void setX(int)<br/>void setY(int)<br/>void setPos(int,int)</td></tr>
-
-<tr><td colspan=2 align=center><b>Information on the buggle</b></td></tr>
-  <tr><td><b>Get the color<br/>Set the color</b></td>
-      <td>Color getColor()<br/>void setColor(Color)</td></tr>				
-  <tr><td><b>Look for a wall forward<br/>Look for a wall backward</b></td>
-      <td>boolean isFacingWall()<br/>boolean isBackingWall()</td></tr>				
-  <tr><td><b>Get heading<br/>Set heading</b><br/>valid directions are:</td>
-      <td>Direction getDirection()<br/>void setDirection(Direction)<br/>Direction.NORTH, Direction.EAST, Direction.SOUTH and Direction.WEST</td></tr>
- 
-<tr><td colspan=2 align=center><b>About the brush</b></td></tr>
-  <tr><td><b>Brush down<br/>Brush up<br/>Get brush position</b></td>
-      <td>void brushUp()<br/>void brushDown()<br/>boolean isBrushDown()</td></tr>
-  <tr><td><b>Change the brush color<br/>Get the color of the brush</b></td>
-      <td>void setBrushColor(Color)<br/>Color getBrushColor()</td></tr>
-
-<tr><td colspan=2 align=center><b>Interacting with the world</b></td></tr>
-  <tr><td><b>Get the color of the ground</b></td><td>Color getGroundColor()</td></tr>
-
-  <tr><td><b>Look for a baggle on the ground<br/>Look for a baggle in bag<br/>Pickup a baggle<br/>Drop a baggle</b><br/>
-      (see the note on exceptions)</td>
-      <td>boolean isOverBaggle()<br/>boolean isCarryingBaggle()<br/>void pickUpBaggle()<br/>void dropBaggle()</td></tr>
-
-  <tr><td><b>Look for a message<br/>Add a message<br/>Read the message<br/>Erase the message</b></td>
-      <td>boolean isOverMessage()<br/>void writeMessage(String)<br/>String readMessage()<br/>void clearMessage()</td></tr>
-</table>
-
-<h2>Note on exceptions</h2>
-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.
-<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/jlm/universe/turmite/TurmiteWorld.java b/src/jlm/universe/turmite/TurmiteWorld.java
deleted file mode 100644
index f06bf4b..0000000
--- a/src/jlm/universe/turmite/TurmiteWorld.java
+++ /dev/null
@@ -1,105 +0,0 @@
-package jlm.universe.turmite;
-
-import java.awt.Color;
-
-import javax.script.ScriptEngine;
-import javax.script.ScriptException;
-
-import jlm.core.model.Game;
-import jlm.core.model.ProgrammingLanguage;
-import jlm.universe.Direction;
-import jlm.universe.World;
-import jlm.universe.bugglequest.Buggle;
-import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.ui.BuggleWorldView;
-
-public class TurmiteWorld extends BuggleWorld {	
-	/** A copy constructor (mandatory for the internal compilation mechanism to work)
-	 * 
-	 * There is normally no need to change it, but it must be present. 
-	 */ 
-	public TurmiteWorld(TurmiteWorld other) {
-		super(other);
-	}
-	
-	/** The constructor that the exercises will use to setup the world.
-	 *  
-	 * It must begin by super(name), and the rest is free (depending on the state describing your world).
-	 * It is a good idea to use setDelay to specify the default animation delay, but this is not mandatory.
-	 * 
-	 * You can perfectly have several such constructor. 
-	 */
-	public TurmiteWorld(String title, int nbSteps, Object rule, int width, int height, int buggleX, int buggleY) {
-		super(title,width,height);
-		currStep = 0;
-		setDelay(1); 
-		setVisibleGrid(false);
-		setParameter(new Object[] {
-				nbSteps,
-				rule
-		});
-
-		new Buggle((BuggleWorld)this,"ant",buggleX,buggleY,Direction.NORTH,Color.red,Color.red);
-	}
-	
-	/** Reset the state of the current world to the one passed in argument
-	 * 
-	 * This is mandatory for the JLM good working. Even if the prototype says that the passed object can be 
-	 * any kind of world, you can be sure that it's of the same type than the current world. So, there is 
-	 * no need to check before casting your argument.
-	 * 
-	 * Do not forget to call super.reset(w) afterward, or some internal world fields may not get reset.
-	 */
-	@Override
-	public void reset(World w) {
-		TurmiteWorld other = (TurmiteWorld)w;
-		currStep = other.currStep;
-		super.reset(w);		
-	}
-
-	/** Returns a component able of displaying the world -- will be used in third exercise 
-	 * You should comment this for the first exercises */
-	@Override
-	public BuggleWorldView getView() {
-		return new TurmiteWorldView(this);
-	}
-	
-	/** Used to check whether the student code changed the world in the right state -- see exercise 4 */
-	@Override 
-	public boolean equals(Object o) {
-		if (o == null || !(o instanceof TurmiteWorld))
-			return false;
-		if (((TurmiteWorld) o).currStep != currStep)
-			return false;
-		return super.equals(o);
-	}
-	@Override
-	public String diffTo(World world) {
-		String res = "";
-		if (((TurmiteWorld) world).currStep != currStep)
-			res += "The amount of steps is wrong: "+((TurmiteWorld) world).currStep +" is not "+ currStep+"\n";
-		return res+super.diffTo(world);
-	}
-	
-	
-	/* Here comes the world logic */
-	public int currStep=0;
-
-	public void stepDone() {
-		currStep++;
-	}
-	@Override
-	public boolean isDelayed() {
-		return super.isDelayed() && ( (getDelay() > 0) || (currStep % 1000 == 0) );
-	}
-	@Override
-	public void setupBindings(ProgrammingLanguage lang, ScriptEngine engine) throws ScriptException {
-		if (lang.equals(Game.PYTHON)) {
-			super.setupBindings(lang, engine);
-			engine.put("daWorld", this);
-			engine.eval(
-					"def stepDone():\n"+
-					"	daWorld.stepDone()\n");
-		}
-	}
-}
diff --git a/src/jlm/universe/turmite/TurmiteWorldView.java b/src/jlm/universe/turmite/TurmiteWorldView.java
deleted file mode 100644
index ba1a072..0000000
--- a/src/jlm/universe/turmite/TurmiteWorldView.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package jlm.universe.turmite;
-
-import java.awt.Color;
-import java.awt.Graphics;
-
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
-import jlm.universe.World;
-import jlm.universe.bugglequest.ui.BuggleWorldView;
-
-
-
-public class TurmiteWorldView extends BuggleWorldView {
-
-	private static final long serialVersionUID = -7164642270965762239L;
-	
-	public TurmiteWorldView (World w) {
-		super(w);
-	}
-		
-
-
-	@Override
-	public void paintComponent(Graphics g) {
-		super.paintComponent(g);
-		
-		g.setColor(Color.black);
-		g.drawString("step "+((TurmiteWorld)world).currStep, (int)getPadX()+10, (int)getPadY()+15);	
-		
-	}	
-	
-	@Override
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_buggle.png");
-	}
-}
diff --git a/src/jlm/universe/turtles/Line.java b/src/jlm/universe/turtles/Line.java
new file mode 100644
index 0000000..e170e1f
--- /dev/null
+++ b/src/jlm/universe/turtles/Line.java
@@ -0,0 +1,66 @@
+package jlm.universe.turtles;
+
+import java.awt.Color;
+import java.awt.Graphics2D;
+import java.awt.geom.Line2D;
+
+
+public class Line {
+	public double x1, y1,  x2, y2;
+	public Color color;
+	
+	public Line(double x1, double y1, double x2, double y2, Color color) {
+		this.x1 = x1;
+		this.y1 = y1;
+		this.x2 = x2;
+		this.y2 = y2;
+		this.color = color;
+	}
+	
+	public void draw(Graphics2D g){
+		g.setColor(color);
+		g.draw(new Line2D.Double(x1,y1,x2,y2));
+	}
+
+	public Line copy() {
+		return new Line(x1,y1,x2,y2,color);
+	}
+	private boolean doubleEqual(double a, double b) {
+		return (Math.abs(a-b)<0.000001);
+	}
+	
+	@Override
+	public boolean equals(Object obj) {
+		if (! (obj instanceof Line))
+			return false;
+		
+		Line other = (Line) obj;
+		if (!doubleEqual(x1,other.x1))
+			return false;
+		if (!doubleEqual(x2,other.x2))
+			return false;
+		if (!doubleEqual(y1,other.y1))
+			return false;
+		if (!doubleEqual(y2,other.y2))
+			return false;
+				
+		return true;
+	}
+	public String diffTo(Line o) {
+		Line other = (Line) o;
+		if (!doubleEqual(x1,other.x1))
+			return "x1 differs";
+		if (!doubleEqual(x2,other.x2))
+			return "x2 differs";
+		if (!doubleEqual(y1,other.y1))
+			return "y1 differs";
+		if (!doubleEqual(y2,other.y2))
+			return "y2 differs";
+		return "I dont see the difference";
+	}
+	
+	@Override
+	public String toString(){
+		return "Line ("+x1+","+y1+";"+x2+","+y2+";"+color+")";
+	}
+}
diff --git a/src/jlm/universe/turtles/ShapeAbstract.java b/src/jlm/universe/turtles/ShapeAbstract.java
deleted file mode 100644
index a6ca88f..0000000
--- a/src/jlm/universe/turtles/ShapeAbstract.java
+++ /dev/null
@@ -1,8 +0,0 @@
-package jlm.universe.turtles;
-
-import java.awt.Graphics2D;
-
-public abstract class ShapeAbstract {
-	public abstract void draw(Graphics2D g);
-	public abstract ShapeAbstract copy();
-}
diff --git a/src/jlm/universe/turtles/ShapeLine.java b/src/jlm/universe/turtles/ShapeLine.java
deleted file mode 100644
index cd56afd..0000000
--- a/src/jlm/universe/turtles/ShapeLine.java
+++ /dev/null
@@ -1,68 +0,0 @@
-package jlm.universe.turtles;
-
-import java.awt.Color;
-import java.awt.Graphics2D;
-import java.awt.geom.Line2D;
-
-
-public class ShapeLine extends ShapeAbstract {
-	public double x1, y1,  x2, y2;
-	public Color color;
-	
-	public ShapeLine(double x1, double y1, double x2, double y2, Color color) {
-		this.x1 = x1;
-		this.y1 = y1;
-		this.x2 = x2;
-		this.y2 = y2;
-		this.color = color;
-	}
-	
-	@Override
-	public void draw(Graphics2D g){
-		g.setColor(color);
-		g.draw(new Line2D.Double(x1,y1,x2,y2));
-	}
-
-	@Override
-	public ShapeAbstract copy() {
-		return new ShapeLine(x1,y1,x2,y2,color);
-	}
-	private boolean doubleEqual(double a, double b) {
-		return (Math.abs(a-b)<0.000001);
-	}
-	
-	@Override
-	public boolean equals(Object obj) {
-		if (! (obj instanceof ShapeLine))
-			return false;
-		
-		ShapeLine other = (ShapeLine) obj;
-		if (!doubleEqual(x1,other.x1))
-			return false;
-		if (!doubleEqual(x2,other.x2))
-			return false;
-		if (!doubleEqual(y1,other.y1))
-			return false;
-		if (!doubleEqual(y2,other.y2))
-			return false;
-				
-		return true;
-	}
-	public String diffTo(ShapeAbstract o) {
-		ShapeLine other = (ShapeLine) o;
-		if (!doubleEqual(x1,other.x1))
-			return "x1 differs";
-		if (!doubleEqual(x2,other.x2))
-			return "x2 differs";
-		if (!doubleEqual(y1,other.y1))
-			return "y1 differs";
-		if (!doubleEqual(y2,other.y2))
-			return "y2 differs";
-		return "I dont see the difference";
-	}
-	
-	@Override
-	public String toString(){
-		return "Line ("+x1+","+y1+";"+x2+","+y2+";"+color+")";
-	}
-}
diff --git a/src/jlm/universe/turtles/TurtleWorld.fr.html b/src/jlm/universe/turtles/TurtleWorld.fr.html
index 3c3171b..694ca9e 100644
--- a/src/jlm/universe/turtles/TurtleWorld.fr.html
+++ b/src/jlm/universe/turtles/TurtleWorld.fr.html
@@ -1,31 +1,77 @@
 <h1>Monde des tortues</h1>
-Ce monde est directement inspiré des travaux du mathématicien Seymour Papert
-dans les années 60. Inspiré par le psychologue suisse Jean Piaget, il a
-inventé une méthode d'apprentissage de la programmation accessible aux
-jeunes enfants nommée LOGO. Le monde est peuplé de tortues qui laissent une
-trace là où elles marchent et à qui on peut donner des ordres simples.
-
-<p>Ce monde est une adaptation de LOGO pour la Java Learning Machine.</p>
-
-<h2>Méthodes comprises par les tortues</h2>
-<table border=1>
-<tr><td></td></tr>
-<tr><td><b>Avancer</b> <code>public void forward(double nbPas);</code><br />
-        <b>Reculer</b> <code>public void backward(double nbPas);</code></td></tr>
-<tr><td><b>Tourner à gauche</b> <code>public void turnLeft(double angle);</code> (en
-degré)<br/>
-        <b>Tourner à droite</b> <code>public void turnRight(double angle);</code></td></tr>
-<tr><td><b>Lever le stylo</b> <code>public void penUp();</code><br/>
-        <b>Baisser le stylo</b> <code>public void penDown();</code><br/>
-        <b>Obtenir la position du stylo</b> <code>public boolean isPenDown();</code><br/>
-        (les tortues ont des stylos, pas des brosses comme les buggles)</td></tr>
-<tr><td><b>Obtenir direction</b> <code>public double getHeading();</code><br/>
-        <b>Changer direction</b> <code>public void setHeading(double angle);</code></td></tr>
-<tr><td><b>Obtenir couleur</b> <code>public Color getColor();</code><br/>
-        <b>Changer couleur</b> <code>public void setColor(Color color);</code></td></tr>
-<tr><td><b>Obtenir position</b> <code>public double getX();</code> <code>public
-double getY();</code><br/>
-        <b>Changer position</b> <code>public void setX(double x);</code> 	
-<code>public void setY(double y);</code> <code>public void setPos(double x,
-double y);</code></td></tr>
-</table>				
+
+<p>Cet univers est une adaptation de LOGO pour la Java Learning Machine.</p>
+
+<p>Il est directement inspiré des travaux du mathématicien Seymour Papert dans
+les années 60. Inspiré par le psychologue suisse Jean Piaget, il a inventé
+une méthode d'apprentissage de la programmation accessible aux jeunes
+enfants nommée LOGO. Le monde est peuplé de tortues qui laissent une trace
+là où elles marchent et à qui on peut donner des ordres simples.</p>
+
+<h2>Fonctions pour déplacer la tortue</h2>
+
+<pre class="Java">void forward(double nbPas)
+void backward(double nbPas)</pre>
+<pre class="python">forward(nbPas)
+backward(nbPas)</pre>
+Avance (forward) ou recule (backward) du nombre de pas demandés.
+
+<pre class="Java">void turnRight(double angle)
+void turnLeft(double angle)</pre>
+<pre class="python">turnRight(angle)
+turnLeft(angle)</pre>
+Tourne à gauche (left) ou à droite (right) du nombre de l'angle indiqué (en
+degrés).
+
+<pre class="Java">double getX()
+double getY()</pre>
+<pre class="python">getX()
+getY()</pre>
+Retourne la position acutelle de la tortue.
+
+<pre class="Java">void setX(double x)
+void setY(double y)
+void setPos(double x, double y)</pre>
+<pre class="python">setX(x)
+setY(y)
+setPos(x,y)</pre>
+Téléporte la tortue à une nouvelle position.
+
+<pre class="Java">double getHeading()</pre>
+<pre class="python">getHeading()</pre>
+Retourne le cap actuel de la tortue (en degrés).
+
+<pre class="Java">void getHeading(double angle)</pre>
+<pre class="python">getHeading(angle)</pre>
+Change le cap de la tortue à l'angle indiqué (en degrés).
+
+<h2>Fonctions à propos du stylo</h2>
+
+<pre class="Java">void penUp()</pre>
+<pre class="python">penUp()</pre>
+Remonte le stylo de la tortue (les tortues ont des stylos, pas des brosses
+comme les buggles). La tortue ne laissera plus de trace lors de ses
+déplacements suivants.
+
+<pre class="Java">void penDown()</pre>
+<pre class="python">penDown()</pre>
+Descend le stylo. La tortue laissera une trace lors de ses prochains
+déplacements.
+
+<pre class="Java">boolean isPenDown()</pre>
+<pre class="python">isPenDown()</pre>
+Retourne si le stylo est actuellement baissé ou non.
+
+<pre class="Java">Color getColor()</pre>
+<pre class="python">getColor()</pre>
+Retourne la couleur actuelle du stylo.
+
+<pre class="Java">void setColor(Color color)</pre>
+<pre class="python">getColor(color)</pre>
+Modifier la couleur du stylo.
+
+<h2>Autres fonctions</h2>
+
+<pre class="Java">boolean isSelected()</pre>
+<pre class="python">isSelected()</pre>
+Renvoie si la tortue actuelle est sélectionnée dans l'interface graphique.
diff --git a/src/jlm/universe/turtles/TurtleWorld.html b/src/jlm/universe/turtles/TurtleWorld.html
index 0a2eeb7..0c78def 100644
--- a/src/jlm/universe/turtles/TurtleWorld.html
+++ b/src/jlm/universe/turtles/TurtleWorld.html
@@ -1,31 +1,74 @@
 <h1>TurtleWorld</h1>
-This world is directly inspired from the work of the mathematician Seymour
-Papert in the 60's. Inspirated from the swiss psycholog Jean Piaget, he came
+
+<p>This universe is an adaptation of LOGO for the Java Learning Machine.</p>
+
+<p>It is directly inspired from the work of the mathematician Seymour
+Papert in the 60's. Inspired from the swiss psycholog Jean Piaget, he came
 up with a learning method called LOGO to teach programming to young
 childs. The world is full of turtles which leave a painting where they go
-and which respond to simple orders.
-
-<p>This world is an adaptation of LOGO for the Java Learning Machine.</p>
-
-<h2>Methods understood by turtles</h2>
-<table border=1>
-<tr><td></td></tr>
-<tr><td><b>Moving forward</b> <code>public void forward(double stepAmount);</code><br />
-        <b>Moving backward</b> <code>public void backward(double stepAmount);</code></td></tr>
-<tr><td><b>Turn left</b> <code>public void turnLeft(double angle);</code> (in
-degree)<br/>
-        <b>Turn right</b> <code>public void turnRight(double angle);</code></td></tr>
-<tr><td><b>Pen up</b> <code>public void penUp();</code><br/>
-        <b>Pen down</b> <code>public void penDown();</code><br/>
-        <b>Get pen position</b> <code>public boolean isPenDown();</code><br/>
-        (turtles have pens, not brushes as buggles)</td></tr>
-<tr><td><b>Get heading</b> <code>public double getHeading();</code><br/>
-        <b>Change heading</b> <code>public void setHeading(double angle);</code></td></tr>
-<tr><td><b>Get color</b> <code>public Color getColor();</code><br/>
-        <b>Set color</b> <code>public void setColor(Color color);</code></td></tr>
-<tr><td><b>Get position</b> <code>public double getX();</code> <code>public double
-getY();</code><br/>
-        <b>Set position</b> <code>public void setX(double x);</code> 	 <code>public
-void setY(double y);</code> <code>public void setPos(double x, double
-y);</code></td></tr>
-</table>				
+and which respond to simple orders.</p>
+
+<h2>Functions to move the turtle</h2>
+
+<pre class="Java">void forward(double steps)
+void backward(double steps)</pre>
+<pre class="python">forward(steps)
+backward(steps)</pre>
+Moves forward or backward of the requested amount of steps.
+
+<pre class="Java">void turnRight(double angle)
+void turnLeft(double angle)</pre>
+<pre class="python">turnRight(angle)
+turnLeft(angle)</pre>
+Turns left or right of the given angle (in degrees).
+
+<pre class="Java">double getX()
+double getY()</pre>
+<pre class="python">getX()
+getY()</pre>
+Returns the current position of the turtle.
+
+<pre class="Java">void setX(double x)
+void setY(double y)
+void setPos(double x, double y)</pre>
+<pre class="python">setX(x)
+setY(y)
+setPos(x,y)</pre>
+Teleports the turtle to a new position.
+
+<pre class="Java">double getHeading()</pre>
+<pre class="python">getHeading()</pre>
+Returns the current heading of the turtle (in degrees).
+
+<pre class="Java">void getHeading(double angle)</pre>
+<pre class="python">getHeading(angle)</pre>
+Sets a new heading to the turtle (in degrees).
+
+<h2>Functions about the pen</h2>
+
+<pre class="Java">void penUp()</pre>
+<pre class="python">penUp()</pre>
+Moves the pen up (turtles have pens, not brushes as buggles). The
+turtle will not leave any trace during its subsequent moves.
+
+<pre class="Java">void penDown()</pre>
+<pre class="python">penDown()</pre>
+Moves the pen down. The turtle will leave a trace during its subsequent moves.
+
+<pre class="Java">boolean isPenDown()</pre>
+<pre class="python">isPenDown()</pre>
+Returns the current pen position as a boolean.
+
+<pre class="Java">Color getColor()</pre>
+<pre class="python">getColor()</pre>
+Returns the current pen color.
+
+<pre class="Java">void setColor(Color color)</pre>
+<pre class="python">getColor(color)</pre>
+Changes the pen color.
+
+<h2>Other functions</h2>
+
+<pre class="Java">boolean isSelected()</pre>
+<pre class="python">isSelected()</pre>
+Returns whether the current turtle is selected in the graphical interface.
diff --git a/src/jlm/universe/turtles/TurtleWorld.java b/src/jlm/universe/turtles/TurtleWorld.java
index 58a9321..7c2e48c 100644
--- a/src/jlm/universe/turtles/TurtleWorld.java
+++ b/src/jlm/universe/turtles/TurtleWorld.java
@@ -8,16 +8,18 @@ import java.util.Iterator;
 
 import javax.script.ScriptEngine;
 import javax.script.ScriptException;
+import javax.swing.ImageIcon;
 
 import jlm.core.model.Game;
 import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.EntityControlPanel;
 import jlm.universe.World;
 
 public class TurtleWorld extends World {
 
-	ArrayList<ShapeAbstract> shapes = new ArrayList<ShapeAbstract>(); 
+	ArrayList<Line> shapes = new ArrayList<Line>(); 
 
 	private double width;
 	private double height;
@@ -39,11 +41,11 @@ public class TurtleWorld extends World {
 	@Override
 	public void reset(World w) {
 		TurtleWorld initialWorld = (TurtleWorld)w;
-		shapes = new ArrayList<ShapeAbstract>();
+		shapes = new ArrayList<Line>();
 		this.height = initialWorld.height;
 		this.width = initialWorld.width;
 
-		Iterator<ShapeAbstract> it = initialWorld.shapes();
+		Iterator<Line> it = initialWorld.shapes();
 		while (it.hasNext()) 
 			shapes.add(it.next().copy());
 		
@@ -53,12 +55,12 @@ public class TurtleWorld extends World {
 	public void addLine(double x, double y, double newX, double newY, Color color) {
 		synchronized (shapes) {
 			//ShapeLine line =new ShapeLine(width/2+x,height/2+y,width/2+newX,height/2+newY,color); 
-			ShapeLine line =new ShapeLine(x,y,newX,newY,color); 
+			Line line =new Line(x,y,newX,newY,color); 
 			shapes.add(line);
 			notifyWorldUpdatesListeners();
 		}
 	}
-	public Iterator<ShapeAbstract> shapes() {
+	public Iterator<Line> shapes() {
 		return shapes.iterator();
 	}
 	
@@ -79,6 +81,10 @@ public class TurtleWorld extends World {
 	public WorldView getView() {
 		return new TurtleWorldView(this);
 	}
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_turtle.png");
+	}
 	
 	@Override
 	public boolean equals(Object obj) {
@@ -90,8 +96,8 @@ public class TurtleWorld extends World {
 		TurtleWorld other = (TurtleWorld) obj;
 		if (shapes.size() != other.shapes.size())
 			return false;
-		Collections.sort(shapes, new ShapeComparator());
-		Collections.sort(other.shapes, new ShapeComparator());
+		Collections.sort(shapes, new LineComparator());
+		Collections.sort(other.shapes, new LineComparator());
 		for (int i=0;i<shapes.size();i++)
 			if (! shapes.get(i).equals(other.shapes.get(i)))
 				return false;
@@ -107,7 +113,7 @@ public class TurtleWorld extends World {
 			", size="+width+"x"+height+
 			", parameters: " +parameters+
 			", shapes=[";
-		Iterator<ShapeAbstract> it = shapes();
+		Iterator<Line> it = shapes();
 		while (it.hasNext()) 
 			res += it.next().toString();
 		res += "]";
@@ -130,7 +136,11 @@ public class TurtleWorld extends World {
 					"def turnRight(i):\n"+
 					"  entity.turnRight(i)\n"+
 					"def setColor(c):\n"+
-					"  entity.setColor(c)\n"
+					"  entity.setColor(c)\n" +
+					"def setPos(x,y):\n" +
+					"  entity.setPos(x,y)\n" +
+					"def moveTo(x,y):\n" +
+					"  entity.moveTo(x,y)\n"
 					);
 		} else {
 			throw new RuntimeException("No binding of TurtleWorld for "+lang);
@@ -146,22 +156,20 @@ public class TurtleWorld extends World {
 		for (int i=0;i<other.shapes.size();i++)
 			if (! other.shapes.get(i).equals(shapes.get(i)))
 				sb.append("  Got "+other.shapes.get(i)+" where "+shapes.get(i)+" were expected ("+
-						((ShapeLine) other.shapes.get(i)).diffTo(shapes.get(i))+")\n");
+						((Line) other.shapes.get(i)).diffTo(shapes.get(i))+")\n");
 		
 		return sb.toString();
 	}
 }
 
-class ShapeComparator implements Comparator<ShapeAbstract> {
+class LineComparator implements Comparator<Line> {
 
-	public ShapeComparator() {
+	public LineComparator() {
 		super();
 	}
 
 	@Override
-	public int compare(ShapeAbstract o1, ShapeAbstract o2) {
-		ShapeLine l1 = (ShapeLine) o1;
-		ShapeLine l2 = (ShapeLine) o2;
+	public int compare(Line l1, Line l2) {
 		if (l1.x1 < l2.x1)
 			return -1;
 		if (l1.x1 > l2.x1)
diff --git a/src/jlm/universe/turtles/TurtleWorldView.java b/src/jlm/universe/turtles/TurtleWorldView.java
index b500ad3..0f473bb 100644
--- a/src/jlm/universe/turtles/TurtleWorldView.java
+++ b/src/jlm/universe/turtles/TurtleWorldView.java
@@ -38,7 +38,7 @@ public class TurtleWorldView extends WorldView {
 		g2.fill(new Rectangle2D.Double(0.,0.,(double)tw.getWidth(),(double)tw.getHeight()));
 		
 		synchronized (((TurtleWorld) world).shapes) {
-			Iterator<ShapeAbstract> it2 = ((TurtleWorld) world).shapes();
+			Iterator<Line> it2 = ((TurtleWorld) world).shapes();
 			while (it2.hasNext())
 				it2.next().draw(g2);			
 		}
@@ -54,10 +54,4 @@ public class TurtleWorldView extends WorldView {
 		t.rotate(b.getHeadingRadian(), ic.getIconWidth()/2., ic.getIconHeight()/2.);
 		g.drawImage(ic.getImage(), t, null);
 	}
-	
-	@Override
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_turtle.png");
-	}
-
 }
diff --git a/src/lessons/backtracking/BacktrackingWorld.java b/src/lessons/backtracking/BacktrackingWorld.java
index fd0165c..05d89c1 100644
--- a/src/lessons/backtracking/BacktrackingWorld.java
+++ b/src/lessons/backtracking/BacktrackingWorld.java
@@ -1,8 +1,10 @@
 package lessons.backtracking;
 
 import javax.script.ScriptEngine;
+import javax.swing.ImageIcon;
 
 import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.World;
 
@@ -49,7 +51,11 @@ public class BacktrackingWorld extends World {
 	public WorldView getView() {
 		return new BacktrackingWorldView(this);
 	}
-	
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_backtracking.png"); // Yeah, does not exists, I know
+	}
+
 	@Override
 	public String toString(){
 		
diff --git a/src/lessons/backtracking/BacktrackingWorldView.java b/src/lessons/backtracking/BacktrackingWorldView.java
index 62025c6..457aa5f 100644
--- a/src/lessons/backtracking/BacktrackingWorldView.java
+++ b/src/lessons/backtracking/BacktrackingWorldView.java
@@ -6,9 +6,6 @@ import java.awt.Graphics2D;
 import java.awt.RenderingHints;
 import java.awt.geom.Rectangle2D;
 
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
 import jlm.core.ui.WorldView;
 import jlm.universe.World;
 
@@ -38,10 +35,5 @@ public class BacktrackingWorldView extends WorldView {
 		g2.fill(new Rectangle2D.Double(0., 0., renderedX, renderedY));
 		
 		
-	}
-	
-	@Override
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_backtracking.png"); // Yeah, does not exists, I know
-	}
+	}	
 }
diff --git a/src/lessons/bat/string1/altpairs/AltPairs.fr.html b/src/lessons/bat/string1/AltPairs.fr.html
similarity index 100%
rename from src/lessons/bat/string1/altpairs/AltPairs.fr.html
rename to src/lessons/bat/string1/AltPairs.fr.html
diff --git a/src/lessons/bat/string1/altpairs/AltPairs.html b/src/lessons/bat/string1/AltPairs.html
similarity index 100%
rename from src/lessons/bat/string1/altpairs/AltPairs.html
rename to src/lessons/bat/string1/AltPairs.html
diff --git a/src/lessons/bat/string1/AltPairs.java b/src/lessons/bat/string1/AltPairs.java
new file mode 100644
index 0000000..4a2be97
--- /dev/null
+++ b/src/lessons/bat/string1/AltPairs.java
@@ -0,0 +1,56 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class AltPairs extends BatExercise {
+	public AltPairs(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("altPairs");
+		myWorld.addTest(VISIBLE, "kitten") ;
+		myWorld.addTest(VISIBLE, "Chocolate") ;
+		myWorld.addTest(VISIBLE, "CodingHorror") ;
+		myWorld.addTest(INVISIBLE, "yak") ;
+		myWorld.addTest(INVISIBLE, "ya") ;
+		myWorld.addTest(INVISIBLE, "y") ;
+		myWorld.addTest(INVISIBLE, "") ;
+		myWorld.addTest(INVISIBLE, "ThisThatTheOther") ;
+
+		langTemplate(Game.PYTHON, "altPairs", 
+				"def altPairs(str):\n",
+				"  res = ''\n" +
+				"  for i in range(0,len(str),4):\n" +
+				"    res += str[i:i+2]\n" +
+				"  return res\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( altPairs((String)t.getParameter(0)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	String altPairs(String str) {
+		/* BEGIN SOLUTION */
+		String result = "";
+
+		// Run i by 4 to hit 0, 4, 8, ...
+		for (int i=0; i<str.length(); i += 4) {
+			// Append the chars between i and i+2
+			int end = i + 2;
+			if (end > str.length()) {
+				end = str.length();
+			}
+			result = result + str.substring(i, end);
+		}
+
+		return result;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/fronttimes/FrontTimes.fr.html b/src/lessons/bat/string1/FrontTimes.fr.html
similarity index 100%
rename from src/lessons/bat/string1/fronttimes/FrontTimes.fr.html
rename to src/lessons/bat/string1/FrontTimes.fr.html
diff --git a/src/lessons/bat/string1/fronttimes/FrontTimes.html b/src/lessons/bat/string1/FrontTimes.html
similarity index 100%
rename from src/lessons/bat/string1/fronttimes/FrontTimes.html
rename to src/lessons/bat/string1/FrontTimes.html
diff --git a/src/lessons/bat/string1/FrontTimes.java b/src/lessons/bat/string1/FrontTimes.java
new file mode 100644
index 0000000..52954b8
--- /dev/null
+++ b/src/lessons/bat/string1/FrontTimes.java
@@ -0,0 +1,59 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class FrontTimes extends BatExercise {
+	public FrontTimes(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("frontTimes");
+		myWorld.addTest(VISIBLE, "Chocolate", 2) ;
+		myWorld.addTest(VISIBLE, "Chocolate", 3) ;
+		myWorld.addTest(VISIBLE, "Abc", 3) ;
+		myWorld.addTest(INVISIBLE, "Ab", 4) ;
+		myWorld.addTest(INVISIBLE, "A", 4) ;
+		myWorld.addTest(INVISIBLE, "", 4) ;
+		myWorld.addTest(INVISIBLE, "Abc", 0) ;
+
+		langTemplate(Game.PYTHON, "frontTimes", 
+				"def frontTimes(str, n):\n",
+				"  frontLen = 3\n" +
+				"  if frontLen > len(str):\n" +
+				"    frontLen = len(str)\n" +
+				"  front = ''\n" +
+				"  if len(str)>0:\n" +
+				"    front = str[0:frontLen]\n" +
+				"  res = ''\n" +
+				"  for i in range(n):" +
+				"    res += front\n" +
+				"  return res\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( frontTimes((String)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	String frontTimes(String str, int n) {
+		/* BEGIN SOLUTION */
+		int frontLen = 3;
+		if (frontLen > str.length()) {
+			frontLen = str.length();
+		}
+		String front = str.substring(0, frontLen);
+
+		String result = "";
+		for (int i=0; i<n; i++) {
+			result = result + front;
+		}
+		return result;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/Last2.fr.html b/src/lessons/bat/string1/Last2.fr.html
new file mode 100644
index 0000000..289d1e0
--- /dev/null
+++ b/src/lessons/bat/string1/Last2.fr.html
@@ -0,0 +1,10 @@
+<h1>Deux derniers</h1>
+
+<p>Étant donné une chaîne de caractères, retournez le nombre de fois que les
+deux
+dernières lettres apparaissent. Par exemple, "hixxxhi" renvoie 1 (on ne
+compte pas la dernière sous-chaîne) tandis que "aaaNaa" renvoie 2 (les
+occurences peuvent se chevaucher partiellement).</p>
+
+<p>Cet exercice a été extrait de l'excellent site d'exercices
+http://javabat.com/ pour JLM.</p>
diff --git a/src/lessons/bat/string1/Last2.html b/src/lessons/bat/string1/Last2.html
new file mode 100644
index 0000000..de94bd8
--- /dev/null
+++ b/src/lessons/bat/string1/Last2.html
@@ -0,0 +1,8 @@
+<h1>Last2</h1>
+
+<p>Given a string, return the amount of times that the two last letters
+appear as a substring of the string. So "hixxxhi" yields 1 (we won't
+count the end substring) while "aaaNaa" yields 2 (substrings may
+overlap).</p>
+
+<p>This exercise was converted to JLM from the excellent exercising site http://javabat.com/</p>
diff --git a/src/lessons/bat/string1/Last2.java b/src/lessons/bat/string1/Last2.java
new file mode 100644
index 0000000..3eeebee
--- /dev/null
+++ b/src/lessons/bat/string1/Last2.java
@@ -0,0 +1,68 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class Last2 extends BatExercise {
+	public Last2(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("last2");
+		myWorld.addTest(VISIBLE, "hixxhi") ;
+		myWorld.addTest(VISIBLE, "xaxxaxaxx") ;
+		myWorld.addTest(VISIBLE, "axxxaaxx") ;
+		myWorld.addTest(INVISIBLE, "xxaxxaxxaxx") ;
+		myWorld.addTest(INVISIBLE, "xaxaxaxx") ;
+		myWorld.addTest(INVISIBLE, "13121312") ;
+		myWorld.addTest(INVISIBLE, "11212") ;
+		myWorld.addTest(INVISIBLE, "13121311") ;
+		myWorld.addTest(INVISIBLE, "1717171") ;
+		myWorld.addTest(INVISIBLE, "hi") ;
+		myWorld.addTest(INVISIBLE, "h") ;
+		myWorld.addTest(INVISIBLE, "") ;
+
+		langTemplate(Game.PYTHON, "last2", 
+				"def last2(str):\n",
+				"  l = len(str)\n" +
+				"  if l < 2:\n" +
+				"    return 0\n" +
+				"  end = str[l-2:l]\n" +
+				"  count = 0\n" +
+				"  for i in range(len(str)-2):\n" +
+				"    if str[i:i+2] == end:\n" +
+				"      count += 1\n" +
+				"  return count\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( last2((String)t.getParameter(0)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int last2(String str) {
+		/* BEGIN SOLUTION */
+		// Screen out too-short string case.
+		if (str.length() < 2) return 0;
+
+		String end = str.substring(str.length()-2);
+		// Note: substring() with 1 value goes through the end of the string
+		int count = 0;
+
+		// Check each substring length 2 starting at i
+		for (int i=0; i<str.length()-2; i++) {
+			String sub = str.substring(i, i+2);
+			if (sub.equals(end)) {  // Use .equals() with strings
+				count++;
+			}
+		}
+
+		return count;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/Main.fr.html b/src/lessons/bat/string1/Main.fr.html
index 6f2e41c..6643be1 100644
--- a/src/lessons/bat/string1/Main.fr.html
+++ b/src/lessons/bat/string1/Main.fr.html
@@ -2,7 +2,7 @@
 
 <p>Les chaînes de caractères ("String") sont les plus simples des types de
 données complexes :) Elles fournissent différentes opérations, comme obtenir
-la logueur de la chaîne ou une sous-chaîne...</p>
+la longueur de la chaîne ou une sous-chaîne...</p>
    
 <p>Une très bonne introduction à ce type est disponible ici :
 http://javabat.com/doc/string.html.</p><p>Cet exercice a été extrait de l'excellent site d'exercices
diff --git a/src/lessons/bat/string1/Main.java b/src/lessons/bat/string1/Main.java
index f74aef7..8034848 100644
--- a/src/lessons/bat/string1/Main.java
+++ b/src/lessons/bat/string1/Main.java
@@ -1,15 +1,15 @@
 package lessons.bat.string1;
 
 import jlm.core.model.lesson.Lesson;
-import lessons.bat.string1.altpairs.AltPairs;
-import lessons.bat.string1.bits.StringBits;
-import lessons.bat.string1.fronttimes.FrontTimes;
-import lessons.bat.string1.last2.Last2;
-import lessons.bat.string1.match.StringMatch;
-import lessons.bat.string1.splosion.StringSplosion;
-import lessons.bat.string1.stringx.StringX;
-import lessons.bat.string1.times.StringTimes;
-import lessons.bat.string1.yak.StringYak;
+import lessons.bat.string1.AltPairs;
+import lessons.bat.string1.StringBits;
+import lessons.bat.string1.FrontTimes;
+import lessons.bat.string1.Last2;
+import lessons.bat.string1.StringMatch;
+import lessons.bat.string1.StringSplosion;
+import lessons.bat.string1.StringX;
+import lessons.bat.string1.StringTimes;
+import lessons.bat.string1.StringYak;
 
 public class Main extends Lesson {
 
diff --git a/src/lessons/bat/string1/bits/StringBits.fr.html b/src/lessons/bat/string1/StringBits.fr.html
similarity index 100%
rename from src/lessons/bat/string1/bits/StringBits.fr.html
rename to src/lessons/bat/string1/StringBits.fr.html
diff --git a/src/lessons/bat/string1/bits/StringBits.html b/src/lessons/bat/string1/StringBits.html
similarity index 100%
rename from src/lessons/bat/string1/bits/StringBits.html
rename to src/lessons/bat/string1/StringBits.html
diff --git a/src/lessons/bat/string1/StringBits.java b/src/lessons/bat/string1/StringBits.java
new file mode 100644
index 0000000..d891666
--- /dev/null
+++ b/src/lessons/bat/string1/StringBits.java
@@ -0,0 +1,47 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class StringBits extends BatExercise {
+	public StringBits(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("stringBits");
+		myWorld.addTest(VISIBLE, "Hello") ;
+		myWorld.addTest(VISIBLE, "Hi") ;
+		myWorld.addTest(VISIBLE, "HiHiHi") ;
+		myWorld.addTest(INVISIBLE, "") ;
+		myWorld.addTest(INVISIBLE, "Greetings") ;
+
+		langTemplate(Game.PYTHON, "stringBits", 
+				"def stringBits(str):\n",
+				"  res = ''\n" +
+				"  for i in range(0,len(str),2):\n" +
+				"    res += str[i:i+1]\n" +
+				"  return res\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( stringBits((String)t.getParameter(0)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	String stringBits(String str) {
+		/* BEGIN SOLUTION */
+		String result = "";
+		// Note: the loop increments i by 2
+		for (int i=0; i<str.length(); i+=2) {
+			result = result + str.substring(i, i+1);
+			// Alternately could use str.charAt(i)
+		}
+		return result;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/match/StringMatch.fr.html b/src/lessons/bat/string1/StringMatch.fr.html
similarity index 100%
rename from src/lessons/bat/string1/match/StringMatch.fr.html
rename to src/lessons/bat/string1/StringMatch.fr.html
diff --git a/src/lessons/bat/string1/match/StringMatch.html b/src/lessons/bat/string1/StringMatch.html
similarity index 100%
rename from src/lessons/bat/string1/match/StringMatch.html
rename to src/lessons/bat/string1/StringMatch.html
diff --git a/src/lessons/bat/string1/StringMatch.java b/src/lessons/bat/string1/StringMatch.java
new file mode 100644
index 0000000..70a2418
--- /dev/null
+++ b/src/lessons/bat/string1/StringMatch.java
@@ -0,0 +1,61 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class StringMatch extends BatExercise {
+	public StringMatch(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("stringMatch");
+		myWorld.addTest(VISIBLE, "xxcaazz", "xxbaaz") ;
+		myWorld.addTest(VISIBLE, "abc", "abc") ;
+		myWorld.addTest(VISIBLE, "abc", "axc") ;
+		myWorld.addTest(INVISIBLE, "hello", "he") ;
+		myWorld.addTest(INVISIBLE, "he", "hello") ;
+		myWorld.addTest(INVISIBLE, "h", "hello") ;
+		myWorld.addTest(INVISIBLE, "", "hello") ;
+		myWorld.addTest(INVISIBLE, "aabbccdd", "abbbxxd") ;
+		myWorld.addTest(INVISIBLE, "aaxxaaxx", "iaxxai") ;
+		myWorld.addTest(INVISIBLE, "iaxxai", "aaxxaaxx") ;
+
+		langTemplate(Game.PYTHON, "stringMatch", 
+				"def stringMatch(a, b):\n",
+				"  l = min( len(a), len(b) )\n" +
+				"  count = 0\n" +
+				"  for i in range(l-1):\n" +
+				"    if a[i:i+2] == b[i:i+2]:\n" +
+				"      count += 1\n" +
+				"  return count\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( stringMatch((String)t.getParameter(0), (String)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int stringMatch(String a, String b) {
+		/* BEGIN SOLUTION */
+		// Figure which string is shorter.
+		int len = Math.min(a.length(), b.length());
+		int count = 0;
+
+		// Look at both substrings starting at i
+		for (int i=0; i<len-1; i++) {
+			String aSub = a.substring(i, i+2);
+			String bSub = b.substring(i, i+2);
+			if (aSub.equals(bSub)) {  // Use .equals() with strings
+				count++;
+			}
+		}
+
+		return count;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/splosion/StringSplosion.fr.html b/src/lessons/bat/string1/StringSplosion.fr.html
similarity index 100%
rename from src/lessons/bat/string1/splosion/StringSplosion.fr.html
rename to src/lessons/bat/string1/StringSplosion.fr.html
diff --git a/src/lessons/bat/string1/splosion/StringSplosion.html b/src/lessons/bat/string1/StringSplosion.html
similarity index 100%
rename from src/lessons/bat/string1/splosion/StringSplosion.html
rename to src/lessons/bat/string1/StringSplosion.html
diff --git a/src/lessons/bat/string1/StringSplosion.java b/src/lessons/bat/string1/StringSplosion.java
new file mode 100644
index 0000000..53db65f
--- /dev/null
+++ b/src/lessons/bat/string1/StringSplosion.java
@@ -0,0 +1,48 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class StringSplosion extends BatExercise {
+	public StringSplosion(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("stringSplosion");
+		myWorld.addTest(VISIBLE, "Code") ;
+		myWorld.addTest(VISIBLE, "abc") ;
+		myWorld.addTest(VISIBLE, "x") ;
+		myWorld.addTest(INVISIBLE, "There") ;
+		myWorld.addTest(INVISIBLE, "Bye") ;
+		myWorld.addTest(INVISIBLE, "Good") ;
+		myWorld.addTest(INVISIBLE, "Bad") ;
+
+		langTemplate(Game.PYTHON, "stringSplosion", 
+				"def stringSplosion(str):\n",
+				"  res = ''\n" +
+				"  for i in range(len(str)):\n" +
+				"    res += str[0:i+1]\n" +
+				"  return res\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( stringSplosion((String)t.getParameter(0)) ); 
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	String stringSplosion(String str) {
+		/* BEGIN SOLUTION */
+		String result = "";
+		// On each iteration, add the substring of the chars 0..i
+		for (int i=0; i<str.length(); i++) {
+			result = result + str.substring(0, i+1);
+		}
+		return result;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/times/StringTimes.fr.html b/src/lessons/bat/string1/StringTimes.fr.html
similarity index 100%
rename from src/lessons/bat/string1/times/StringTimes.fr.html
rename to src/lessons/bat/string1/StringTimes.fr.html
diff --git a/src/lessons/bat/string1/times/StringTimes.html b/src/lessons/bat/string1/StringTimes.html
similarity index 100%
rename from src/lessons/bat/string1/times/StringTimes.html
rename to src/lessons/bat/string1/StringTimes.html
diff --git a/src/lessons/bat/string1/StringTimes.java b/src/lessons/bat/string1/StringTimes.java
new file mode 100644
index 0000000..3fff633
--- /dev/null
+++ b/src/lessons/bat/string1/StringTimes.java
@@ -0,0 +1,49 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class StringTimes extends BatExercise {
+	public StringTimes(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("stringTimes");
+		myWorld.addTest(VISIBLE, "Hi", 2) ;
+		myWorld.addTest(VISIBLE, "Hi", 3) ;
+		myWorld.addTest(VISIBLE, "Hi", 1) ;
+		myWorld.addTest(INVISIBLE, "Hi", 0) ;
+		myWorld.addTest(INVISIBLE, "Oh Boy!", 2) ;
+		myWorld.addTest(INVISIBLE, "x", 4) ;
+		myWorld.addTest(INVISIBLE, "", 4) ;
+		myWorld.addTest(INVISIBLE, "code", 2) ;
+		myWorld.addTest(INVISIBLE, "code", 3) ;
+
+		langTemplate(Game.PYTHON, "stringTimes", 
+				"def stringTimes(str, n):\n",
+				"  res = \"\"\n"+
+				"  for i in range(n):\n"+
+				"    res += str\n"+
+				"  return res\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( stringTimes((String)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	String stringTimes(String str, int n) {
+		/* BEGIN SOLUTION */
+		String result = "";
+		for (int i=0; i<n; i++) {
+			result = result + str;  // could use += here
+		}
+		return result;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/stringx/StringX.fr.html b/src/lessons/bat/string1/StringX.fr.html
similarity index 100%
rename from src/lessons/bat/string1/stringx/StringX.fr.html
rename to src/lessons/bat/string1/StringX.fr.html
diff --git a/src/lessons/bat/string1/stringx/StringX.html b/src/lessons/bat/string1/StringX.html
similarity index 100%
rename from src/lessons/bat/string1/stringx/StringX.html
rename to src/lessons/bat/string1/StringX.html
diff --git a/src/lessons/bat/string1/StringX.java b/src/lessons/bat/string1/StringX.java
new file mode 100644
index 0000000..2e81d25
--- /dev/null
+++ b/src/lessons/bat/string1/StringX.java
@@ -0,0 +1,52 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class StringX extends BatExercise {
+	public StringX(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("stringX");
+		myWorld.addTest(VISIBLE, "xxHxix") ;
+		myWorld.addTest(VISIBLE, "abxxxcd") ;
+		myWorld.addTest(VISIBLE, "xabxxxcdx") ;
+		myWorld.addTest(INVISIBLE, "xKittenx") ;
+		myWorld.addTest(INVISIBLE, "Hello") ;
+		myWorld.addTest(INVISIBLE, "xx") ;
+		myWorld.addTest(INVISIBLE, "x") ;
+		myWorld.addTest(INVISIBLE, "") ;
+
+		langTemplate(Game.PYTHON, "stringX", 
+				"def stringX(str):\n",
+				"  res = ''\n" +
+				"  for i in range(len(str)):\n" +
+				"    if str[i] != 'x' or i == 0 or i == len(str)-1:" +
+				"      res += str[i:i+1]\n" +
+				"  return res\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( stringX((String)t.getParameter(0)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	String stringX(String str) {
+		/* BEGIN SOLUTION */
+		String result = "";
+		for (int i=0; i<str.length(); i++) {
+			// Only append the char if it is not the "x" case
+			if (!(i > 0 && i < (str.length()-1) && str.substring(i, i+1).equals("x"))) {
+				result = result + str.substring(i, i+1); // Could use str.charAt(i) here
+			}
+		}
+		return result;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/StringYak.fr.html b/src/lessons/bat/string1/StringYak.fr.html
new file mode 100644
index 0000000..84a8daa
--- /dev/null
+++ b/src/lessons/bat/string1/StringYak.fr.html
@@ -0,0 +1,7 @@
+<h1>String Yak</h1>
+La chaîne "yak" n'a pas de chance. Soit une chaîne de caractères, renvoyez
+une version où tous les "yak" sont supprimées (quel que soit le caractère à
+la place du 'a'). Les différentes chaînes "yak" ne se chevauchent pas.
+
+<p>Cet exercice a été extrait de l'excellent site d'exercices
+http://javabat.com/ pour JLM.</p>
diff --git a/src/lessons/bat/string1/yak/StringYak.html b/src/lessons/bat/string1/StringYak.html
similarity index 100%
rename from src/lessons/bat/string1/yak/StringYak.html
rename to src/lessons/bat/string1/StringYak.html
diff --git a/src/lessons/bat/string1/StringYak.java b/src/lessons/bat/string1/StringYak.java
new file mode 100644
index 0000000..385b58a
--- /dev/null
+++ b/src/lessons/bat/string1/StringYak.java
@@ -0,0 +1,59 @@
+package lessons.bat.string1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class StringYak extends BatExercise {
+	public StringYak(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("stringYak");
+		myWorld.addTest(VISIBLE, "yakpak") ;
+		myWorld.addTest(VISIBLE, "pakyak") ;
+		myWorld.addTest(VISIBLE, "yak123ya") ;
+		myWorld.addTest(INVISIBLE, "yak") ;
+		myWorld.addTest(INVISIBLE, "yakxxxyak") ;
+		myWorld.addTest(INVISIBLE, "HiyakHi") ;
+		myWorld.addTest(INVISIBLE, "xxxyakyyyakzzz") ;
+
+		langTemplate(Game.PYTHON, "stringYak", 
+				"def stringYak(str):\n",
+				"  res = ''\n" +
+				"  i=0\n" +
+				"  while i<len(str):\n"+
+				"    if i+2<len(str)  and str[i] == 'y' and str[i+2]=='k':\n" +
+				"      i += 2\n" +
+				"    else:\n" +
+				"      res += str[i]\n" +
+				"    i+=1\n"+
+				"  return res\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( stringYak((String)t.getParameter(0)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	String stringYak(String str) {
+		/* BEGIN SOLUTION */
+		String result = "";
+
+		for (int i=0; i<str.length(); i++) {
+			// Look for i starting a "yak" -- advance i in that case
+			if (i+2<str.length() && str.charAt(i)=='y' && str.charAt(i+2)=='k') {
+				i =  i + 2;
+			} else { // Otherwise do the normal append
+				result = result + str.charAt(i);
+			}
+		}
+
+		return result;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/bat/string1/altpairs/AltPairs.java b/src/lessons/bat/string1/altpairs/AltPairs.java
deleted file mode 100644
index 43c7849..0000000
--- a/src/lessons/bat/string1/altpairs/AltPairs.java
+++ /dev/null
@@ -1,53 +0,0 @@
-package lessons.bat.string1.altpairs;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class AltPairs extends BatExercise {
-	public AltPairs(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("altPairs");
-		myWorld.addTest(VISIBLE, "kitten") ;
-		myWorld.addTest(VISIBLE, "Chocolate") ;
-		myWorld.addTest(VISIBLE, "CodingHorror") ;
-		myWorld.addTest(INVISIBLE, "yak") ;
-		myWorld.addTest(INVISIBLE, "ya") ;
-		myWorld.addTest(INVISIBLE, "y") ;
-		myWorld.addTest(INVISIBLE, "") ;
-		myWorld.addTest(INVISIBLE, "ThisThatTheOther") ;
-
-		langTemplate(Game.PYTHON, "altPairs", 
-				"def altPairs(str):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( altPairs((String)t.getParameter(0)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	String altPairs(String str) {
-		/* BEGIN SOLUTION */
-		String result = "";
-
-		// Run i by 4 to hit 0, 4, 8, ...
-		for (int i=0; i<str.length(); i += 4) {
-			// Append the chars between i and i+2
-			int end = i + 2;
-			if (end > str.length()) {
-				end = str.length();
-			}
-			result = result + str.substring(i, end);
-		}
-
-		return result;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/bat/string1/bits/StringBits.java b/src/lessons/bat/string1/bits/StringBits.java
deleted file mode 100644
index 23a8c26..0000000
--- a/src/lessons/bat/string1/bits/StringBits.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package lessons.bat.string1.bits;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class StringBits extends BatExercise {
-	public StringBits(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("stringBits");
-		myWorld.addTest(VISIBLE, "Hello") ;
-		myWorld.addTest(VISIBLE, "Hi") ;
-		myWorld.addTest(VISIBLE, "HiHiHi") ;
-		myWorld.addTest(INVISIBLE, "") ;
-		myWorld.addTest(INVISIBLE, "Greetings") ;
-
-		langTemplate(Game.PYTHON, "stringBits", 
-				"def stringBits(str):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( stringBits((String)t.getParameter(0)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	String stringBits(String str) {
-		/* BEGIN SOLUTION */
-		String result = "";
-		// Note: the loop increments i by 2
-		for (int i=0; i<str.length(); i+=2) {
-			result = result + str.substring(i, i+1);
-			// Alternately could use str.charAt(i)
-		}
-		return result;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/bat/string1/fronttimes/FrontTimes.java b/src/lessons/bat/string1/fronttimes/FrontTimes.java
deleted file mode 100644
index 3bfd484..0000000
--- a/src/lessons/bat/string1/fronttimes/FrontTimes.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package lessons.bat.string1.fronttimes;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class FrontTimes extends BatExercise {
-	public FrontTimes(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("frontTimes");
-		myWorld.addTest(VISIBLE, "Chocolate", 2) ;
-		myWorld.addTest(VISIBLE, "Chocolate", 3) ;
-		myWorld.addTest(VISIBLE, "Abc", 3) ;
-		myWorld.addTest(INVISIBLE, "Ab", 4) ;
-		myWorld.addTest(INVISIBLE, "A", 4) ;
-		myWorld.addTest(INVISIBLE, "", 4) ;
-		myWorld.addTest(INVISIBLE, "Abc", 0) ;
-
-		langTemplate(Game.PYTHON, "frontTimes", 
-				"def frontTimes(str, n):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( frontTimes((String)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	String frontTimes(String str, int n) {
-		/* BEGIN SOLUTION */
-		int frontLen = 3;
-		if (frontLen > str.length()) {
-			frontLen = str.length();
-		}
-		String front = str.substring(0, frontLen);
-
-		String result = "";
-		for (int i=0; i<n; i++) {
-			result = result + front;
-		}
-		return result;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/bat/string1/icon.png b/src/lessons/bat/string1/icon.png
new file mode 100644
index 0000000..613d798
Binary files /dev/null and b/src/lessons/bat/string1/icon.png differ
diff --git a/src/lessons/bat/string1/last2/Last2.fr.html b/src/lessons/bat/string1/last2/Last2.fr.html
deleted file mode 100644
index 072a162..0000000
--- a/src/lessons/bat/string1/last2/Last2.fr.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<h1>Deux derniers</h1>
-Soit une chaîne de caractères.
-Renvoyez combien de fois une sous-chaîne de longueur 2 apparait dans la
-chaîne et aussi en tant que 2 derniers caractères de la chaîne.
-Par exemple, "hixxxhi" renvoie 1 ( on ne compte pas le dernière sous-chaîne
-).
-
-<p>Cet exercice a été extrait de l'excellent site d'exercices
-http://javabat.com/ pour JLM.</p>
diff --git a/src/lessons/bat/string1/last2/Last2.html b/src/lessons/bat/string1/last2/Last2.html
deleted file mode 100644
index cd7a54e..0000000
--- a/src/lessons/bat/string1/last2/Last2.html
+++ /dev/null
@@ -1,7 +0,0 @@
-<h1>Last2</h1>
-Given a
-string, return the count of the number of times that a substring length
-2 appears in the string and also as the last 2 chars of the string, so
-"hixxxhi" yields 1 (we won't count the end substring).
-
-<p>This exercise was converted to JLM from the excellent exercising site http://javabat.com/</p>
diff --git a/src/lessons/bat/string1/last2/Last2.java b/src/lessons/bat/string1/last2/Last2.java
deleted file mode 100644
index a5d55e9..0000000
--- a/src/lessons/bat/string1/last2/Last2.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package lessons.bat.string1.last2;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class Last2 extends BatExercise {
-	public Last2(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("last2");
-		myWorld.addTest(VISIBLE, "hixxhi") ;
-		myWorld.addTest(VISIBLE, "xaxxaxaxx") ;
-		myWorld.addTest(VISIBLE, "axxxaaxx") ;
-		myWorld.addTest(INVISIBLE, "xxaxxaxxaxx") ;
-		myWorld.addTest(INVISIBLE, "xaxaxaxx") ;
-		myWorld.addTest(INVISIBLE, "13121312") ;
-		myWorld.addTest(INVISIBLE, "11212") ;
-		myWorld.addTest(INVISIBLE, "13121311") ;
-		myWorld.addTest(INVISIBLE, "1717171") ;
-		myWorld.addTest(INVISIBLE, "hi") ;
-		myWorld.addTest(INVISIBLE, "h") ;
-		myWorld.addTest(INVISIBLE, "") ;
-
-		langTemplate(Game.PYTHON, "last2", 
-				"def last2(str):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( last2((String)t.getParameter(0)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int last2(String str) {
-		/* BEGIN SOLUTION */
-		// Screen out too-short string case.
-		if (str.length() < 2) return 0;
-
-		String end = str.substring(str.length()-2);
-		// Note: substring() with 1 value goes through the end of the string
-		int count = 0;
-
-		// Check each substring length 2 starting at i
-		for (int i=0; i<str.length()-2; i++) {
-			String sub = str.substring(i, i+2);
-			if (sub.equals(end)) {  // Use .equals() with strings
-				count++;
-			}
-		}
-
-		return count;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/bat/string1/match/StringMatch.java b/src/lessons/bat/string1/match/StringMatch.java
deleted file mode 100644
index 6a8090f..0000000
--- a/src/lessons/bat/string1/match/StringMatch.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package lessons.bat.string1.match;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class StringMatch extends BatExercise {
-	public StringMatch(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("stringMatch");
-		myWorld.addTest(VISIBLE, "xxcaazz", "xxbaaz") ;
-		myWorld.addTest(VISIBLE, "abc", "abc") ;
-		myWorld.addTest(VISIBLE, "abc", "axc") ;
-		myWorld.addTest(INVISIBLE, "hello", "he") ;
-		myWorld.addTest(INVISIBLE, "he", "hello") ;
-		myWorld.addTest(INVISIBLE, "h", "hello") ;
-		myWorld.addTest(INVISIBLE, "", "hello") ;
-		myWorld.addTest(INVISIBLE, "aabbccdd", "abbbxxd") ;
-		myWorld.addTest(INVISIBLE, "aaxxaaxx", "iaxxai") ;
-		myWorld.addTest(INVISIBLE, "iaxxai", "aaxxaaxx") ;
-
-		langTemplate(Game.PYTHON, "stringMatch", 
-				"def stringMatch(a, b):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( stringMatch((String)t.getParameter(0), (String)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int stringMatch(String a, String b) {
-		/* BEGIN SOLUTION */
-		// Figure which string is shorter.
-		int len = Math.min(a.length(), b.length());
-		int count = 0;
-
-		// Look at both substrings starting at i
-		for (int i=0; i<len-1; i++) {
-			String aSub = a.substring(i, i+2);
-			String bSub = b.substring(i, i+2);
-			if (aSub.equals(bSub)) {  // Use .equals() with strings
-				count++;
-			}
-		}
-
-		return count;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/bat/string1/short_desc.fr.html b/src/lessons/bat/string1/short_desc.fr.html
new file mode 100644
index 0000000..6afc97e
--- /dev/null
+++ b/src/lessons/bat/string1/short_desc.fr.html
@@ -0,0 +1,7 @@
+<h3>Petits exercices sur les chaînes</h3>
+
+<p>Il s'agit d'exercices d'entraînement au sujet des chaînes de
+caractères. Mais malheureusement, leur intégration à JLM est encore en
+cours.</p>
+
+<p>Merci de votre patience.</p>
\ No newline at end of file
diff --git a/src/lessons/bat/string1/short_desc.html b/src/lessons/bat/string1/short_desc.html
new file mode 100644
index 0000000..4f45ad0
--- /dev/null
+++ b/src/lessons/bat/string1/short_desc.html
@@ -0,0 +1,6 @@
+<h3>Small exercises about strings</h3>
+
+<p>These are some training exercises around strings. But
+unfortunately, its integration within JLM is still ongoing.</p>
+
+<p>Please be patient with us.</p>
\ No newline at end of file
diff --git a/src/lessons/bat/string1/splosion/StringSplosion.java b/src/lessons/bat/string1/splosion/StringSplosion.java
deleted file mode 100644
index 421356f..0000000
--- a/src/lessons/bat/string1/splosion/StringSplosion.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package lessons.bat.string1.splosion;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class StringSplosion extends BatExercise {
-	public StringSplosion(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("stringSplosion");
-		myWorld.addTest(VISIBLE, "Code") ;
-		myWorld.addTest(VISIBLE, "abc") ;
-		myWorld.addTest(VISIBLE, "x") ;
-		myWorld.addTest(INVISIBLE, "There") ;
-		myWorld.addTest(INVISIBLE, "Bye") ;
-		myWorld.addTest(INVISIBLE, "Good") ;
-		myWorld.addTest(INVISIBLE, "Bad") ;
-
-		langTemplate(Game.PYTHON, "stringSplosion", 
-				"def stringSplosion(str):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( stringSplosion((String)t.getParameter(0)) ); 
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	String stringSplosion(String str) {
-		/* BEGIN SOLUTION */
-		String result = "";
-		// On each iteration, add the substring of the chars 0..i
-		for (int i=0; i<str.length(); i++) {
-			result = result + str.substring(0, i+1);
-		}
-		return result;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/bat/string1/stringx/StringX.java b/src/lessons/bat/string1/stringx/StringX.java
deleted file mode 100644
index 7b71d77..0000000
--- a/src/lessons/bat/string1/stringx/StringX.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package lessons.bat.string1.stringx;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class StringX extends BatExercise {
-	public StringX(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("stringX");
-		myWorld.addTest(VISIBLE, "xxHxix") ;
-		myWorld.addTest(VISIBLE, "abxxxcd") ;
-		myWorld.addTest(VISIBLE, "xabxxxcdx") ;
-		myWorld.addTest(INVISIBLE, "xKittenx") ;
-		myWorld.addTest(INVISIBLE, "Hello") ;
-		myWorld.addTest(INVISIBLE, "xx") ;
-		myWorld.addTest(INVISIBLE, "x") ;
-		myWorld.addTest(INVISIBLE, "") ;
-
-		langTemplate(Game.PYTHON, "stringX", 
-				"def stringX(str):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( stringX((String)t.getParameter(0)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	String stringX(String str) {
-		/* BEGIN SOLUTION */
-		String result = "";
-		for (int i=0; i<str.length(); i++) {
-			// Only append the char if it is not the "x" case
-			if (!(i > 0 && i < (str.length()-1) && str.substring(i, i+1).equals("x"))) {
-				result = result + str.substring(i, i+1); // Could use str.charAt(i) here
-			}
-		}
-		return result;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/bat/string1/times/StringTimes.java b/src/lessons/bat/string1/times/StringTimes.java
deleted file mode 100644
index 7c3e7a4..0000000
--- a/src/lessons/bat/string1/times/StringTimes.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package lessons.bat.string1.times;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class StringTimes extends BatExercise {
-	public StringTimes(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("stringTimes");
-		myWorld.addTest(VISIBLE, "Hi", 2) ;
-		myWorld.addTest(VISIBLE, "Hi", 3) ;
-		myWorld.addTest(VISIBLE, "Hi", 1) ;
-		myWorld.addTest(INVISIBLE, "Hi", 0) ;
-		myWorld.addTest(INVISIBLE, "Oh Boy!", 2) ;
-		myWorld.addTest(INVISIBLE, "x", 4) ;
-		myWorld.addTest(INVISIBLE, "", 4) ;
-		myWorld.addTest(INVISIBLE, "code", 2) ;
-		myWorld.addTest(INVISIBLE, "code", 3) ;
-
-		langTemplate(Game.PYTHON, "stringTimes", 
-				"def stringTimes(str, n):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( stringTimes((String)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	String stringTimes(String str, int n) {
-		/* BEGIN SOLUTION */
-		String result = "";
-		for (int i=0; i<n; i++) {
-			result = result + str;  // could use += here
-		}
-		return result;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/bat/string1/yak/StringYak.fr.html b/src/lessons/bat/string1/yak/StringYak.fr.html
deleted file mode 100644
index de9f43a..0000000
--- a/src/lessons/bat/string1/yak/StringYak.fr.html
+++ /dev/null
@@ -1,8 +0,0 @@
-<h1>String Yak</h1>
-Supposer la chaîne "yak" comme malchanceuse.
-Soit une chaîne de caractères, renvoyez une version où tous les "yak" sont
-supprimées, mais le "a" peut être n'importe quel caractère. La "yak" chaîne
-ne sera pas pétinée.
-
-<p>Cet exercice a été extrait de l'excellent site d'exercices
-http://javabat.com/ pour JLM.</p>
diff --git a/src/lessons/bat/string1/yak/StringYak.java b/src/lessons/bat/string1/yak/StringYak.java
deleted file mode 100644
index c48076b..0000000
--- a/src/lessons/bat/string1/yak/StringYak.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package lessons.bat.string1.yak;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class StringYak extends BatExercise {
-	public StringYak(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("stringYak");
-		myWorld.addTest(VISIBLE, "yakpak") ;
-		myWorld.addTest(VISIBLE, "pakyak") ;
-		myWorld.addTest(VISIBLE, "yak123ya") ;
-		myWorld.addTest(INVISIBLE, "yak") ;
-		myWorld.addTest(INVISIBLE, "yakxxxyak") ;
-		myWorld.addTest(INVISIBLE, "HiyakHi") ;
-		myWorld.addTest(INVISIBLE, "xxxyakyyyakzzz") ;
-
-		langTemplate(Game.PYTHON, "stringYak", 
-				"def stringYak(str):\n",
-				"");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( stringYak((String)t.getParameter(0)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	String stringYak(String str) {
-		/* BEGIN SOLUTION */
-		String result = "";
-
-		for (int i=0; i<str.length(); i++) {
-			// Look for i starting a "yak" -- advance i in that case
-			if (i+2<str.length() && str.charAt(i)=='y' && str.charAt(i+2)=='k') {
-				i =  i + 2;
-			} else { // Otherwise do the normal append
-				result = result + str.charAt(i);
-			}
-		}
-
-		return result;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/lightbot/Board01TwoSteps.fr.html b/src/lessons/lightbot/Board01TwoSteps.fr.html
index 83e8475..4f0b82b 100644
--- a/src/lessons/lightbot/Board01TwoSteps.fr.html
+++ b/src/lessons/lightbot/Board01TwoSteps.fr.html
@@ -4,11 +4,12 @@
 pour programmeur que d'une vraie leçon (bien qu'il puisse être utilisé pour
 enseigner la programmation). Le robot n'est pas programmé en Java, mais
 graphiquement. Vous trouverez les ordres disponibles dans la documentation
-en utilisant le menu <b>About this world</b>.<</p>
+en utilisant le menu <b>À propos de ce monde</b>.<</p>
 
 <p>L'objectif de chaque niveau est simplement de faire allumer toutes les
 ampoules du tableau à votre petit robot.</p>
 
 <p>Ce premier exercice est une simple mise en bouche. Vous devriez pouvoir le
 résourdre simplement en avancant et en allumant la lampe, grâce aux ordres
-suivants:  <img src="img/lightbot_forward.png" /> et <img src="img/lightbot_light.png" />.</p>
\ No newline at end of file
+suivants:  
+<img src="img/lightbot_forward.png" /> et <img src="img/lightbot_light.png" />.</p>
\ No newline at end of file
diff --git a/src/lessons/lightbot/Main.fr.html b/src/lessons/lightbot/Main.fr.html
index 9c65d43..7987f0e 100644
--- a/src/lessons/lightbot/Main.fr.html
+++ b/src/lessons/lightbot/Main.fr.html
@@ -2,4 +2,4 @@
 Cette leçon introduit un petit jeu de programmation inspiré d'un jeu en
 flash. 
 
-<p>Référez vous à l'aide <i>About this world</i> pour plus de détails.</p>
\ No newline at end of file
+<p>Référez vous à l'aide <i>À propos de ce monde</i> pour plus de détails.</p>
\ No newline at end of file
diff --git a/src/lessons/lightbot/icon.png b/src/lessons/lightbot/icon.png
new file mode 100644
index 0000000..fa4e65b
Binary files /dev/null and b/src/lessons/lightbot/icon.png differ
diff --git a/src/lessons/lightbot/short_desc.fr.html b/src/lessons/lightbot/short_desc.fr.html
new file mode 100644
index 0000000..25f2c20
--- /dev/null
+++ b/src/lessons/lightbot/short_desc.fr.html
@@ -0,0 +1,8 @@
+<h3>LightBot</h3>
+
+<p>Cette leçon constitue un casse-tête pour programmeurs, où vous devez
+apprendre à votre robot à éteindre toutes les lumières. Le truc est que vous
+le programmez graphiquement, et que vous n'avez droit qu'à un nombre limité
+d'instructions.</p>
+
+<p>Aucune expérience préalable n'est nécessaire pour tenter cette leçon.</p>
\ No newline at end of file
diff --git a/src/lessons/lightbot/short_desc.html b/src/lessons/lightbot/short_desc.html
new file mode 100644
index 0000000..0149b3a
--- /dev/null
+++ b/src/lessons/lightbot/short_desc.html
@@ -0,0 +1,8 @@
+<h3>LightBot</h3>
+
+<p>This lesson constitutes a little brain teaser for programmers. You
+have to instruct your robot to turn off all lights. The trick is that
+you program your robot graphically, and that you are limited in the
+amount of instructions.</p>
+
+<p>No previous experience is expected to take this lesson.</p>
\ No newline at end of file
diff --git a/src/lessons/maze/Main.html b/src/lessons/maze/Main.html
index 6ddfe4b..6789bb8 100644
--- a/src/lessons/maze/Main.html
+++ b/src/lessons/maze/Main.html
@@ -1,3 +1,3 @@
 <h1>Labyrinths</h1>
 
-<p>This lesson propose several exercises about labyrinths in the buggle world.</p>
+<p>This lesson proposes several exercises about labyrinths in the buggle world.</p>
diff --git a/src/lessons/maze/Main.java b/src/lessons/maze/Main.java
index b5f00b8..d1dd475 100644
--- a/src/lessons/maze/Main.java
+++ b/src/lessons/maze/Main.java
@@ -1,6 +1,9 @@
 package lessons.maze;
 
+import java.io.IOException;
+
 import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
 import lessons.maze.island.IslandMaze;
 import lessons.maze.pledge.PledgeMaze;
 import lessons.maze.randommouse.RandomMouseMaze;
@@ -14,7 +17,7 @@ public class Main extends Lesson {
 	// see http://en.wikipedia.org/wiki/Maze#Solving_mazes
 	
 	@Override
-	protected void loadExercises() {
+	protected void loadExercises() throws IOException, BrokenWorldFileException {
 		addExercise(new RandomMouseMaze(this));
 		addExercise(new WallFollowerMaze(this));
 		addExercise(new WallFindFollowMaze(this));
diff --git a/src/lessons/maze/icon.png b/src/lessons/maze/icon.png
new file mode 100644
index 0000000..f74a718
Binary files /dev/null and b/src/lessons/maze/icon.png differ
diff --git a/src/lessons/maze/island/IslandMaze-answer0.map b/src/lessons/maze/island/IslandMaze-answer0.map
new file mode 100644
index 0000000..ee8a7e2
--- /dev/null
+++ b/src/lessons/maze/island/IslandMaze-answer0.map
@@ -0,0 +1,110 @@
+BuggleWorld: Island
+Size: 12x12
+Buggle(11,5): 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,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,11): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,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,topwall,noleftwall,
+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,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,noleftwall,
+Cell(4,1): white,nobaggle,topwall,leftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,notopwall,leftwall,
+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(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,1): white,nobaggle,notopwall,leftwall,
+Cell(5,3): white,nobaggle,topwall,leftwall,
+Cell(5,4): white,nobaggle,notopwall,leftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,6): white,nobaggle,notopwall,leftwall,
+Cell(5,10): white,nobaggle,topwall,leftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,notopwall,leftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,leftwall,
+Cell(7,2): white,nobaggle,topwall,leftwall,
+Cell(7,3): white,nobaggle,topwall,noleftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,8): white,nobaggle,notopwall,leftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,noleftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,notopwall,leftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,3): white,nobaggle,notopwall,leftwall,
+Cell(9,5): white,nobaggle,topwall,leftwall,
+Cell(9,6): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,notopwall,leftwall,
+Cell(9,11): white,nobaggle,topwall,leftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,leftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,11): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,nobaggle,topwall,noleftwall,
+Cell(11,6): white,nobaggle,topwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,noleftwall,
+Cell(11,11): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/island/IslandMaze-answer1.map b/src/lessons/maze/island/IslandMaze-answer1.map
new file mode 100644
index 0000000..31f0f91
--- /dev/null
+++ b/src/lessons/maze/island/IslandMaze-answer1.map
@@ -0,0 +1,114 @@
+BuggleWorld: Another Island
+Size: 12x12
+Buggle(11,5): east,black,lightGray,Luke
+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,topwall,leftwall,
+Cell(0,11): white,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,2): white,nobaggle,topwall,leftwall,
+Cell(1,3): white,nobaggle,topwall,noleftwall,
+Cell(1,5): white,nobaggle,topwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(1,11): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,leftwall,
+Cell(2,1): white,nobaggle,topwall,noleftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,topwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,noleftwall,
+Cell(2,5): white,nobaggle,topwall,noleftwall,
+Cell(2,8): white,nobaggle,topwall,leftwall,
+Cell(2,10): white,nobaggle,notopwall,leftwall,
+Cell(3,0): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,notopwall,leftwall,
+Cell(3,6): white,nobaggle,topwall,noleftwall,
+Cell(3,7): white,nobaggle,topwall,leftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+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(5,0): white,nobaggle,topwall,leftwall,
+Cell(5,2): white,nobaggle,topwall,leftwall,
+Cell(5,3): white,nobaggle,topwall,leftwall,
+Cell(5,6): white,nobaggle,topwall,leftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,10): white,nobaggle,notopwall,leftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,leftwall,
+Cell(6,5): white,nobaggle,topwall,noleftwall,
+Cell(6,6): white,nobaggle,topwall,noleftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,topwall,noleftwall,
+Cell(6,9): white,nobaggle,notopwall,leftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,notopwall,leftwall,
+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,7): white,nobaggle,topwall,noleftwall,
+Cell(7,8): white,nobaggle,notopwall,leftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,nobaggle,notopwall,leftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,noleftwall,
+Cell(8,7): white,nobaggle,notopwall,leftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,3): white,nobaggle,notopwall,leftwall,
+Cell(9,5): white,nobaggle,topwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,notopwall,leftwall,
+Cell(9,11): white,nobaggle,topwall,leftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,3): white,nobaggle,topwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,noleftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,6): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,leftwall,
+Cell(10,9): white,nobaggle,notopwall,leftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(10,11): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,leftwall,
+Cell(11,5): 255/255/153,nobaggle,topwall,noleftwall,
+Cell(11,6): white,nobaggle,topwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,leftwall,
+Cell(11,11): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/island/IslandMaze.fr.html b/src/lessons/maze/island/IslandMaze.fr.html
index 917446c..00f118d 100644
--- a/src/lessons/maze/island/IslandMaze.fr.html
+++ b/src/lessons/maze/island/IslandMaze.fr.html
@@ -4,16 +4,17 @@
 labyrinthes ? Et bien, pas tous les labyrinthes...
 </p>
 
-<p>L' algorithme du <i>Wall Follower</i> que nous avons utilisé jusqu'à présent
+<p>L'algorithme de suivi de mur que nous avons utilisé jusqu'à présent
 fonctionne seulement si l'entrée et la sortie sont placées à côté de murs
 connectés à un mur externe. Mais si le buggle commence au milieu du
 labyrinthe, il peut exister des pans de mur déconnectés du mur externe.
 
-<p>C'est pourquoi notre stratégie précédente laissera notre buggle tourner en
-rond pour toujours. En effet, le labyrinthe dont vous devez vous échapper
-maintenant contient des îles, et le buggle ne commence pas sur un des murs
-externes. Vous pouvez essayer si vous voulez : appuyez sur le bouton 'run'
-et admirez votre solution précédente échouer lamentablement</p>
+<p>Dans cette situation, notre précédente stratégie ferait notre buggle tourner
+en rond pour toujours sur l'un de ces îlots. En effet, le labyrinthe dont
+vous devez vous échapper maintenant contient des îles, et le buggle ne
+commence pas sur un des murs externes. Vous pouvez essayer si vous voulez :
+Copie/collez votre code et appuyez sur le bouton 'run' pour admirez votre
+solution précédente échouer lamentablement.</p>
 
 <p>Cette méthode de suivre un mur est toujours efficace est permet d'échapper
 de manière assez efficace à certaines parties du labyrinthe, on ne va donc
@@ -39,18 +40,26 @@ nord et qu'elle n'est pas face à un mur.
 La manière la plus simple d'écrire une telle machine à état est quelque
 chose du type 
 <pre>
-<code>int state=0;
-switch (state) {
-  case 0: 
+	<code div="Java">int etat=0;
+switch (etat) {
+  case 0: // courir au nord
      ...
-     state = 1;
+     etat = 1;
      break;
-  case 1:
+  case 1: // suivre a gauche
      ...
-     state = 0;
+     etat = 0;
      break;
 }
 </code>
+<code div="python">courirNord = True
+if courirNord:
+     ...
+     courirNord = False
+else: # suivre a gauche
+     ...
+     courirNord = True
+</code>
 </pre>
 </div>
 	
diff --git a/src/lessons/maze/island/IslandMaze.html b/src/lessons/maze/island/IslandMaze.html
index ffbf962..c4dcdd3 100644
--- a/src/lessons/maze/island/IslandMaze.html
+++ b/src/lessons/maze/island/IslandMaze.html
@@ -12,8 +12,8 @@ disconnected from the external wall.
 <p>That is why the previous strategy would let the buggle round around for
 ever. Indeed, the maze you should now escape from contains islands,
 and the buggle does not start along one of the external walls. Just
-give it a try if you want: push the run button and see your previous
-solution fail miserabily.</p>
+give it a try if you want: copy your code over, push the run button
+and see your previous solution failing miserabily.</p>
 
 <p>The method of following a wall is still good and allow to escape
 very efficiently some sections of the maze, so we do not want to
@@ -37,18 +37,26 @@ mode). You switch to "north runner" as soon as your buggle is facing
 north and is not in front of a wall during its trip around its left
 wall. The easiest way to write such a state machine is something like 
 <pre>
-	<code>int state=0;
+	<code div="Java">int state=0;
 switch (state) {
-  case 0: 
+  case 0: // North runner
      ...
      state = 1;
      break;
-  case 1:
+  case 1: // Left follower
      ...
      state = 0;
      break;
 }
 </code>
+<code div="python">northRunner = True
+if northRunner:
+     ...
+     northRunner = False
+else: # left follower
+     ...
+     northRunner = True
+</code>
 </pre>
 </div>
 	
diff --git a/src/lessons/maze/island/IslandMaze.java b/src/lessons/maze/island/IslandMaze.java
index 0a992db..c6ea1c0 100644
--- a/src/lessons/maze/island/IslandMaze.java
+++ b/src/lessons/maze/island/IslandMaze.java
@@ -1,69 +1,23 @@
 package lessons.maze.island;
 
-import java.awt.Color;
+import java.io.IOException;
 
-import jlm.core.model.lesson.ExecutionProgress;
 import jlm.core.model.lesson.ExerciseTemplated;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.Entity;
+import jlm.universe.BrokenWorldFileException;
 import jlm.universe.World;
-import jlm.universe.bugglequest.AbstractBuggle;
-import jlm.universe.bugglequest.Buggle;
 import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
-import jlm.universe.bugglequest.exception.NoBaggleUnderBuggleException;
 
 public class IslandMaze extends ExerciseTemplated {
 
-	public IslandMaze(Lesson lesson) {
+	public IslandMaze(Lesson lesson) throws IOException, BrokenWorldFileException {
 		super(lesson);
 		tabName = "Escaper";
 				
 		/* Create initial situation */
-		BuggleWorld myWorlds[] = new BuggleWorld[2];
-		myWorlds[0] = new BuggleWorld("Island", 1, 1);
-		loadMap(myWorlds[0],"lessons/maze/island/IslandMaze");
-		new Buggle(myWorlds[0], "Thésée", 4, 10, Direction.NORTH, Color.black, Color.lightGray);
-		
-		
-		myWorlds[1] = new BuggleWorld("Labyrinth2", 4, 4); 
-		loadMap(myWorlds[1],"lessons/maze/island/IslandMaze2");
-		new Buggle(myWorlds[1], "Luke", 4, 10, Direction.NORTH, Color.black, Color.lightGray);
-		
-		setup(myWorlds);		
-	}
-
-	// to shorten loading time	
-	@Override
-	protected void computeAnswer(){
-		AbstractBuggle b = (AbstractBuggle)answerWorld.get(0).getEntities().get(0);
-		b.setPosFromLesson(11, 5);
-		
-		AbstractBuggle b2 = (AbstractBuggle)answerWorld.get(1).getEntities().get(0);
-		b2.setPosFromLesson(11, 5);
-		b2.setDirection(Direction.EAST);
-		
-		try {
-			b.pickUpBaggle();
-			b2.pickUpBaggle();
-		} catch (NoBaggleUnderBuggleException e) {
-			e.printStackTrace();
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}		
-	}
-	
-	@Override
-	public void check() {
-		lastResult = new ExecutionProgress();
-		for (World w: this.getWorlds(WorldKind.CURRENT)) 
-			for (Entity e:w.getEntities()) {
-				lastResult.totalTests++;
-				if (!((AbstractBuggle) e).isCarryingBaggle())
-					lastResult.details += "Buggle "+e.getName()+" didn't find the baggle";
-				else
-					lastResult.passedTests++;
-			}
+		setup( new World[] {
+				BuggleWorld.newFromFile("lessons/maze/island/IslandMaze"),
+				BuggleWorld.newFromFile("lessons/maze/island/IslandMaze2")
+		});
 	}
 }
diff --git a/src/lessons/maze/island/IslandMaze.map b/src/lessons/maze/island/IslandMaze.map
index c2d04f8..e1a40ff 100644
--- a/src/lessons/maze/island/IslandMaze.map
+++ b/src/lessons/maze/island/IslandMaze.map
@@ -1,146 +1,110 @@
-BuggleWorld: Island
-Size: 12x12
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(204,204,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,153),true,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
+BuggleWorld: Island
+Size: 12x12
+Buggle(4,10): north,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,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,11): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,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,topwall,noleftwall,
+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,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,noleftwall,
+Cell(4,1): white,nobaggle,topwall,leftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,notopwall,leftwall,
+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(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,1): white,nobaggle,notopwall,leftwall,
+Cell(5,3): white,nobaggle,topwall,leftwall,
+Cell(5,4): white,nobaggle,notopwall,leftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,6): white,nobaggle,notopwall,leftwall,
+Cell(5,10): white,nobaggle,topwall,leftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,notopwall,leftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,leftwall,
+Cell(7,2): white,nobaggle,topwall,leftwall,
+Cell(7,3): white,nobaggle,topwall,noleftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,8): white,nobaggle,notopwall,leftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,noleftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,notopwall,leftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,3): white,nobaggle,notopwall,leftwall,
+Cell(9,5): white,nobaggle,topwall,leftwall,
+Cell(9,6): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,notopwall,leftwall,
+Cell(9,11): white,nobaggle,topwall,leftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,leftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,11): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,baggle,topwall,noleftwall,
+Cell(11,6): white,nobaggle,topwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,noleftwall,
+Cell(11,11): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/island/IslandMaze2.map b/src/lessons/maze/island/IslandMaze2.map
index f346aef..589cb2b 100644
--- a/src/lessons/maze/island/IslandMaze2.map
+++ b/src/lessons/maze/island/IslandMaze2.map
@@ -1,146 +1,114 @@
-BuggleWorld: Another Island
-Size: 12x12
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(204,204,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,153),true,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
+BuggleWorld: Another Island
+Size: 12x12
+Buggle(4,10): north,black,lightGray,Luke
+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,topwall,leftwall,
+Cell(0,11): white,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,2): white,nobaggle,topwall,leftwall,
+Cell(1,3): white,nobaggle,topwall,noleftwall,
+Cell(1,5): white,nobaggle,topwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(1,11): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,leftwall,
+Cell(2,1): white,nobaggle,topwall,noleftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,topwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,noleftwall,
+Cell(2,5): white,nobaggle,topwall,noleftwall,
+Cell(2,8): white,nobaggle,topwall,leftwall,
+Cell(2,10): white,nobaggle,notopwall,leftwall,
+Cell(3,0): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,notopwall,leftwall,
+Cell(3,6): white,nobaggle,topwall,noleftwall,
+Cell(3,7): white,nobaggle,topwall,leftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+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(5,0): white,nobaggle,topwall,leftwall,
+Cell(5,2): white,nobaggle,topwall,leftwall,
+Cell(5,3): white,nobaggle,topwall,leftwall,
+Cell(5,6): white,nobaggle,topwall,leftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,10): white,nobaggle,notopwall,leftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,leftwall,
+Cell(6,5): white,nobaggle,topwall,noleftwall,
+Cell(6,6): white,nobaggle,topwall,noleftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,topwall,noleftwall,
+Cell(6,9): white,nobaggle,notopwall,leftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,notopwall,leftwall,
+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,7): white,nobaggle,topwall,noleftwall,
+Cell(7,8): white,nobaggle,notopwall,leftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,nobaggle,notopwall,leftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,noleftwall,
+Cell(8,7): white,nobaggle,notopwall,leftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,3): white,nobaggle,notopwall,leftwall,
+Cell(9,5): white,nobaggle,topwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,notopwall,leftwall,
+Cell(9,11): white,nobaggle,topwall,leftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,3): white,nobaggle,topwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,noleftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,6): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,leftwall,
+Cell(10,9): white,nobaggle,notopwall,leftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(10,11): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,leftwall,
+Cell(11,5): 255/255/153,baggle,topwall,noleftwall,
+Cell(11,6): white,nobaggle,topwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,leftwall,
+Cell(11,11): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/island/IslandMazeEntity.java b/src/lessons/maze/island/IslandMazeEntity.java
index 268f423..328fb8f 100644
--- a/src/lessons/maze/island/IslandMazeEntity.java
+++ b/src/lessons/maze/island/IslandMazeEntity.java
@@ -26,26 +26,22 @@ public class IslandMazeEntity extends jlm.universe.bugglequest.SimpleBuggle {
 		this.setDirection(this.chosenDirection);
 		while ( !isOverBaggle() )
 		{
-			switch ( state )
-			{
+			switch ( state ) {
 			case 0: // North runner mode
 				while ( !isFacingWall() )
-				{
 					forward();
-				}
+				
 				this.turnRight(); // make sure that we have a left wall
 				state = 1; // time to enter the Left Follower mode
 				break;
 			case 1: // Left Follower Mode
 				this.stepHandOnWall(); // follow the left wall
-				if ( this.isChosenDirectionFree() && (this.getDirection() == this.chosenDirection)  ) 
-				{
+				if ( isChosenDirectionFree() && (getDirection() == chosenDirection)  ) 
 					state =0; // time to enter in North Runner mode
-				}
 				break;
 			}
 		}
-		this.pickUpBaggle();
+		this.pickupBaggle();
 	}
 
 	private void stepHandOnWall(){
@@ -61,11 +57,8 @@ public class IslandMazeEntity extends jlm.universe.bugglequest.SimpleBuggle {
 
 	private boolean isChosenDirectionFree() {
 		Direction memorizedD = getDirection();
-		boolean isFree = false;
 		this.setDirection(this.chosenDirection);
-		if (!isFacingWall()) {
-			isFree=true;
-		} 
+		boolean isFree = ! isFacingWall();
 		this.setDirection(memorizedD);
 		return isFree;
 	}
diff --git a/src/lessons/maze/island/IslandMazeEntity.py b/src/lessons/maze/island/IslandMazeEntity.py
index 5886e9a..0b3ab02 100644
--- a/src/lessons/maze/island/IslandMazeEntity.py
+++ b/src/lessons/maze/island/IslandMazeEntity.py
@@ -1,63 +1,42 @@
+def setX(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+def setY(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+def setPos(x,y):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+
+
 # BEGIN SOLUTION 
-  public void run() {
-		chosenD = Direction.NORTH;
-		setDirection(chosenD);
-        
-		while (!isOverBaggle()) {
-			while (!isFacingWall()) {
-				forward();
-			}
-			turnLeft();
-            
-			do {
-				keepHandOnSideWall();
-			} while (!(angleSum == 0 && isChosenDirectionFree()) && !isOverBaggle());
-		}
-		
-		pickUpBaggle();
-	}
-    
-	int angleSum = 0;
-	Direction chosenD;
-	Direction memorizedD;
-    
-	private boolean isChosenDirectionFree() {
-		memorizedD = getDirection();
-		setDirection(chosenD);
-		if (!isFacingWall()) {
-			setDirection(memorizedD);
-			return true;
-		} else {
-			setDirection(memorizedD);
-			return false;
-    }
-	}
-    
-	public void keepHandOnSideWall() {
-		keepHandOnRightWall();
-	}
-	
-	private void keepHandOnRightWall() {
-		turnRight();
-		if (!isFacingWall()) {
-			angleSum = angleSum + 1;
-			forward(); // turn right then forward
-		} else {
-			turnLeft();
-			if (!isFacingWall()) {
-				forward(); // forward, direction did not change
-			} else {
-				turnLeft();
-				if (!isFacingWall()) {
-					angleSum = angleSum - 1;
-					forward(); // turn left then forward
-				} else {
-					angleSum = -2;
-					turnLeft(); // turn back then forward
-					forward();
-            }
-        }
-    }
-	}
-    
+def isDirectionFree(dir):
+    memo = getDirection()
+    setDirection(dir)
+    res = not isFacingWall()
+    setDirection(memo)
+    return res
+
+def stepHandOnWall():
+    # PRE: we have a wall on the left
+    # POST: we still have the same wall on the left, are one step ahead
+    while not isFacingWall():
+        forward()
+        turnLeft() # change to turnRight to get a right follower
+    turnRight() # change to turnLeft to get a right follower
+
+northRunner = True
+chosenDir = Direction.NORTH
+setDirection(chosenDir)
+
+while not isOverBaggle():
+    if northRunner:
+        while not isFacingWall():
+            forward()
+        turnRight()
+        northRunner = False
+    else: # left follower mode
+        stepHandOnWall()
+        if isDirectionFree(chosenDir) and getDirection() == chosenDir:
+            northRunner = True
+
+pickupBaggle()
+
 # END SOLUTION
diff --git a/src/lessons/maze/pledge/PledgeMaze-answer0.map b/src/lessons/maze/pledge/PledgeMaze-answer0.map
new file mode 100644
index 0000000..431c4d7
--- /dev/null
+++ b/src/lessons/maze/pledge/PledgeMaze-answer0.map
@@ -0,0 +1,167 @@
+BuggleWorld: 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,15): white,nobaggle,notopwall,leftwall,
+Cell(0,16): white,nobaggle,notopwall,leftwall,
+Cell(0,17): white,nobaggle,notopwall,leftwall,
+Cell(0,18): white,nobaggle,notopwall,leftwall,
+Cell(0,19): white,nobaggle,notopwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,18): white,nobaggle,topwall,noleftwall,
+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,16): white,nobaggle,topwall,noleftwall,
+Cell(6,18): white,nobaggle,topwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,noleftwall,
+Cell(7,5): white,nobaggle,topwall,noleftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,18): white,nobaggle,topwall,noleftwall,
+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,13): white,nobaggle,notopwall,leftwall,
+Cell(8,14): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,18): white,nobaggle,topwall,noleftwall,
+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,14): white,nobaggle,notopwall,leftwall,
+Cell(9,15): white,nobaggle,notopwall,leftwall,
+Cell(9,18): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,18): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,topwall,noleftwall,
+Cell(11,5): white,nobaggle,topwall,leftwall,
+Cell(11,6): white,nobaggle,notopwall,leftwall,
+Cell(11,7): white,nobaggle,topwall,noleftwall,
+Cell(11,14): white,nobaggle,topwall,leftwall,
+Cell(11,15): white,nobaggle,notopwall,leftwall,
+Cell(11,16): white,nobaggle,topwall,noleftwall,
+Cell(11,18): white,nobaggle,topwall,noleftwall,
+Cell(12,0): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,noleftwall,
+Cell(12,5): white,nobaggle,topwall,noleftwall,
+Cell(12,7): white,nobaggle,notopwall,leftwall,
+Cell(12,13): white,nobaggle,notopwall,leftwall,
+Cell(12,14): blue,nobaggle,notopwall,noleftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,18): white,nobaggle,topwall,noleftwall,
+Cell(13,0): white,nobaggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,5): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,nobaggle,topwall,noleftwall,
+Cell(13,18): white,nobaggle,topwall,noleftwall,
+Cell(14,0): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,5): white,nobaggle,notopwall,leftwall,
+Cell(14,6): white,nobaggle,notopwall,leftwall,
+Cell(14,7): white,nobaggle,notopwall,leftwall,
+Cell(14,8): white,nobaggle,notopwall,leftwall,
+Cell(14,9): white,nobaggle,notopwall,leftwall,
+Cell(14,10): white,nobaggle,notopwall,leftwall,
+Cell(14,11): white,nobaggle,notopwall,leftwall,
+Cell(14,12): white,nobaggle,notopwall,leftwall,
+Cell(14,13): white,nobaggle,notopwall,leftwall,
+Cell(14,14): white,nobaggle,notopwall,leftwall,
+Cell(14,15): white,nobaggle,notopwall,leftwall,
+Cell(14,18): white,nobaggle,topwall,noleftwall,
+Cell(15,0): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,18): white,nobaggle,topwall,noleftwall,
+Cell(16,0): white,nobaggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,topwall,noleftwall,
+Cell(16,7): white,nobaggle,topwall,leftwall,
+Cell(16,8): white,nobaggle,notopwall,leftwall,
+Cell(16,9): white,nobaggle,topwall,noleftwall,
+Cell(16,11): white,nobaggle,topwall,leftwall,
+Cell(16,12): white,nobaggle,notopwall,leftwall,
+Cell(16,13): white,nobaggle,topwall,noleftwall,
+Cell(16,18): white,nobaggle,topwall,noleftwall,
+Cell(17,0): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,noleftwall,
+Cell(17,9): white,nobaggle,topwall,noleftwall,
+Cell(17,11): white,nobaggle,topwall,noleftwall,
+Cell(17,18): white,nobaggle,topwall,noleftwall,
+Cell(18,0): white,nobaggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,notopwall,leftwall,
+Cell(18,3): white,nobaggle,notopwall,leftwall,
+Cell(18,4): white,nobaggle,notopwall,leftwall,
+Cell(18,5): white,nobaggle,notopwall,leftwall,
+Cell(18,6): white,nobaggle,notopwall,leftwall,
+Cell(18,7): white,nobaggle,notopwall,leftwall,
+Cell(18,8): white,nobaggle,notopwall,leftwall,
+Cell(18,11): white,nobaggle,notopwall,leftwall,
+Cell(18,12): white,nobaggle,notopwall,leftwall,
+Cell(18,13): white,nobaggle,notopwall,leftwall,
+Cell(18,14): white,nobaggle,notopwall,leftwall,
+Cell(18,15): white,nobaggle,notopwall,leftwall,
+Cell(18,16): white,nobaggle,notopwall,leftwall,
+Cell(18,17): white,nobaggle,notopwall,leftwall,
+Cell(18,19): white,nobaggle,notopwall,leftwall,
+Cell(19,0): white,nobaggle,topwall,noleftwall,
+Cell(19,19): yellow,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/pledge/PledgeMaze-answer1.map b/src/lessons/maze/pledge/PledgeMaze-answer1.map
new file mode 100644
index 0000000..7963749
--- /dev/null
+++ b/src/lessons/maze/pledge/PledgeMaze-answer1.map
@@ -0,0 +1,171 @@
+BuggleWorld: Trapception
+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,15): white,nobaggle,notopwall,leftwall,
+Cell(0,16): white,nobaggle,notopwall,leftwall,
+Cell(0,17): white,nobaggle,notopwall,leftwall,
+Cell(0,18): white,nobaggle,notopwall,leftwall,
+Cell(0,19): white,nobaggle,notopwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,noleftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(3,18): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,18): white,nobaggle,topwall,noleftwall,
+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,16): white,nobaggle,topwall,noleftwall,
+Cell(6,18): white,nobaggle,topwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,noleftwall,
+Cell(7,5): white,nobaggle,topwall,noleftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,18): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,5): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,leftwall,
+Cell(8,9): white,nobaggle,notopwall,leftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,leftwall,
+Cell(8,12): white,nobaggle,notopwall,leftwall,
+Cell(8,13): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,18): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,notopwall,leftwall,
+Cell(9,10): blue,nobaggle,notopwall,noleftwall,
+Cell(9,11): white,nobaggle,notopwall,leftwall,
+Cell(9,13): white,nobaggle,topwall,noleftwall,
+Cell(9,16): white,nobaggle,topwall,noleftwall,
+Cell(9,18): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,5): white,nobaggle,topwall,noleftwall,
+Cell(10,8): white,nobaggle,notopwall,leftwall,
+Cell(10,9): white,nobaggle,notopwall,leftwall,
+Cell(10,10): white,nobaggle,notopwall,leftwall,
+Cell(10,11): white,nobaggle,notopwall,leftwall,
+Cell(10,12): white,nobaggle,notopwall,leftwall,
+Cell(10,16): white,nobaggle,topwall,noleftwall,
+Cell(10,18): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,topwall,noleftwall,
+Cell(11,5): white,nobaggle,topwall,noleftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,8): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,noleftwall,
+Cell(11,12): white,nobaggle,topwall,leftwall,
+Cell(11,13): white,nobaggle,notopwall,leftwall,
+Cell(11,16): white,nobaggle,topwall,noleftwall,
+Cell(11,18): white,nobaggle,topwall,noleftwall,
+Cell(12,0): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,noleftwall,
+Cell(12,5): white,nobaggle,topwall,noleftwall,
+Cell(12,9): white,nobaggle,topwall,noleftwall,
+Cell(12,12): white,nobaggle,topwall,noleftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,18): white,nobaggle,topwall,noleftwall,
+Cell(13,0): white,nobaggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,5): white,nobaggle,topwall,noleftwall,
+Cell(13,9): white,nobaggle,topwall,noleftwall,
+Cell(13,12): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,nobaggle,topwall,noleftwall,
+Cell(13,18): white,nobaggle,topwall,noleftwall,
+Cell(14,0): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,5): white,nobaggle,notopwall,leftwall,
+Cell(14,6): white,nobaggle,notopwall,leftwall,
+Cell(14,7): white,nobaggle,notopwall,leftwall,
+Cell(14,8): white,nobaggle,notopwall,leftwall,
+Cell(14,12): white,nobaggle,notopwall,leftwall,
+Cell(14,13): white,nobaggle,notopwall,leftwall,
+Cell(14,14): white,nobaggle,notopwall,leftwall,
+Cell(14,15): white,nobaggle,notopwall,leftwall,
+Cell(14,18): white,nobaggle,topwall,noleftwall,
+Cell(15,0): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,18): white,nobaggle,topwall,noleftwall,
+Cell(16,0): white,nobaggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,topwall,noleftwall,
+Cell(16,18): white,nobaggle,topwall,noleftwall,
+Cell(17,0): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,noleftwall,
+Cell(17,18): white,nobaggle,topwall,noleftwall,
+Cell(18,0): white,nobaggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,notopwall,leftwall,
+Cell(18,3): white,nobaggle,notopwall,leftwall,
+Cell(18,4): white,nobaggle,notopwall,leftwall,
+Cell(18,5): white,nobaggle,notopwall,leftwall,
+Cell(18,6): white,nobaggle,notopwall,leftwall,
+Cell(18,7): white,nobaggle,notopwall,leftwall,
+Cell(18,8): white,nobaggle,notopwall,leftwall,
+Cell(18,9): white,nobaggle,notopwall,leftwall,
+Cell(18,10): white,nobaggle,notopwall,leftwall,
+Cell(18,11): white,nobaggle,notopwall,leftwall,
+Cell(18,12): white,nobaggle,notopwall,leftwall,
+Cell(18,13): white,nobaggle,notopwall,leftwall,
+Cell(18,14): white,nobaggle,notopwall,leftwall,
+Cell(18,15): white,nobaggle,notopwall,leftwall,
+Cell(18,16): white,nobaggle,notopwall,leftwall,
+Cell(18,17): white,nobaggle,notopwall,leftwall,
+Cell(18,19): white,nobaggle,notopwall,leftwall,
+Cell(19,0): white,nobaggle,topwall,noleftwall,
+Cell(19,19): yellow,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/pledge/PledgeMaze.fr.html b/src/lessons/maze/pledge/PledgeMaze.fr.html
index 91fcb9e..7debc36 100644
--- a/src/lessons/maze/pledge/PledgeMaze.fr.html
+++ b/src/lessons/maze/pledge/PledgeMaze.fr.html
@@ -2,12 +2,13 @@
 
 <p>Une fois de plus, vous pensiez que votre algorithme vous permettait de vous
 échapper des labyrinthes, et une fois de plus, votre buggle est prise dans
-un labyrinthe où votre algorithme précédent ne suffit pas. Vous pouvez
-tenter de simplement appuyer sur le bouton «Run» et voir votre création
-échouer. Le piège a la forme d'un «G» majuscule : la buggle entre dans le
-piège, suit le bord interne. Au bout d'un moment, la direction nord est
-libre et votre buggle se met donc à courir dans cette direction. Pour
-retomber dans le piège...
+un
+labyrinthe mettant votre algorithme en défaut. Vous essayer de copier votre
+code
+et de l'exécuter pour voir votre création échouer. Le piège a la forme d'un
+«G» majuscule : la buggle entre dans le piège, suit le bord interne. Au bout
+d'un moment, la direction nord est libre et votre buggle se met donc à
+courir dans cette direction. Pour retomber dans le piège...
 </p>
 
 <p>L'algorithme de Pledge (nommé d'après Jon Pledge d'Exeter) peut résoudre ce
@@ -42,34 +43,46 @@ une fois parvenu sous l'obstacle.</p>
 implémentation de l'algorithme de Pledge qui permettra à votre buggle de
 sortir du labyrinthe.</p>
 
-<p>Reprenez la méthode <code>void keepHandOnSideWall()</code> de l'exercice
+<p>Reprenez la méthode <code>keepHandOnSideWall()</code> de l'exercice
 précédent. Modifiez cette méthode pour compter les virages pris par votre
 buggle (+1 lorsqu'il a tourné à gauche par rapport à son origine, -1
 lorsqu'il a tourné à droite). Pour comptabiliser vous aurez besoin d'ajouter
-une variable <code>angleSum</code> de type entière à votre programme.</p>
+une variable <code>sommeAngle</code> de type entière à votre programme.</p>
 
-<p>Écrivez une méthode <code>boolean isChosenDirectionFree()</code> indiquant
-si la direction arbitraire que vous avez choisie 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 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>void setDirection(Direction d)</code>.  Pensez à
-mémoriser (dans une variable de type <code>Direction</code>) la direction
-courante de votre buggle avant de vérifier si votre buggle peut se diriger
-vers sa direction de prédilection pour pouvoir restaurer l'état après coup.</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
+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
+variable dédiée) la direction courante de votre buggle avant de vérifier si
+votre buggle peut se diriger vers sa direction de prédilection pour pouvoir
+restaurer l'état après coup.</p>
 
 <p>Vous pouvez être amenés à modifier également le reste de votre code, mais
 ces changements devraient rester limités.</p>
 
+<p class="python">N'oubliez pas que si l'une de vos méthodes modifie une variable globale
+(telle
+que sommeAngles), vous devez vous assurer qu'elle définie cette globale
+correctement. Sinon, la méthode crée une nouvelle variable locale de même
+nom,
+et la globale n'est jamais modifiée.</p>
+<div class="python"><pre>def myMethod():
+  global sommeAngle
+  ...
+  sommeAngle = sommeAngle + 1
+</pre></div>
+
 <div class="tip" id="tip-1" alt="Montrer un indice supplémentaire">
-La méthode <code>void run()</code> doit déplacer votre buggle dans votre
-direction de prédilection (il est conseillé de choisir le nord pour
-cela). Ensuite, vous devez écrire la boucle principale de
-l'algorithme. Autrement dit, 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>void keepHandOnSideWall()</code>) tant que la
-somme des virages n'est pas nulle et que la direction de prédilection n'est
-pas libre. Faites cela jusqu'à trouver votre biscuit.</div>
+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
+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
+nulle et que la direction de prédilection n'est pas libre. Faites cela
+jusqu'à trouver votre biscuit.</div>
 	
diff --git a/src/lessons/maze/pledge/PledgeMaze.html b/src/lessons/maze/pledge/PledgeMaze.html
index 10aed6a..ccf6e51 100644
--- a/src/lessons/maze/pledge/PledgeMaze.html
+++ b/src/lessons/maze/pledge/PledgeMaze.html
@@ -2,7 +2,8 @@
 
 <p>Once again, you thought that your algorithm were good enough to
 escape the maze, and once again, you buggle is now in a maze where
-your previous algorithm fails. Just give it a try: hit the "Run"
+your previous algorithm fails. Just give it a try: copy/paste your
+code and hit the "Run"
 button and see your creation fail. The trap is shaped like an upper
 case "G". The buggle enters the trap and follows the inner border. At
 some point, it finds the north direction free, run into that
@@ -37,30 +38,39 @@ around, finally leaving it heading left on the bottom outside</p>
 <p><a name="Objective"/>You now have to modify your solution to implement the Pledge
 algorithm to escape this maze.</p>
 
-<p>Change your <code>void keepHandOnSideWall()</code> method to count
+<p>Change your <code>keepHandOnSideWall()</code> method to count
 the amount of turns done by the buggle (+1 when it turns left, and -1
 when it turns right). This counting may require the addition of an
 <code>angleSum</code> integer value in your program.</p>
 
-<p>Write a <code>boolean isChosenDirectionFree()</code> method indicating if
-the arbitrary direction you picked up is free, ie, if you can move in
-that direction. (Note that the demo uses the NORTH direction for
+<p>Write a boolean method <code>isDirectionFree(dir)</code> indicating if
+the provided direction is free, ie, if you can move in
+that direction (Note that the demo uses the NORTH direction for
 that).  You can retrieve the current direction of the
-buggle using the <code>Direction getDirection()</code> method. You can
-change your direction (without moving) using <code>void
-setDirection(Direction d)</code>. Don't forget to store the previous
-direction of your buggle (in a variable of type Direction) before checking if your favorite
+buggle using the method <code>getDirection()</code>. You can
+change your direction (without moving) using <code>setDirection(dir)</code>. Don't forget to store the previous
+direction of your buggle (in a dedicated variable) before checking if your favorite
 direction is free in order to restore your state afterward.</p>
 
 <p>You may have to change the rest of your code also, but these
 changes should remain limited.</p>
 
+<p class="python">Don't forget that if you have a method modifying a
+global variable (such as angleSum), you should ensure that it declares
+this variable as global. Without it, the method creates a new variable
+of the same name, and the global never gets modified.</p>
+<div class="python"><pre>def myMethod():
+  global angleSum
+  ...
+  angleSum = angleSum + 1
+</pre></div>
+
 <div class="tip" id="tip-1" alt="Show an additional tip">
-The <code>void run()</code> method should move in your favorite
-direction (NORTH is advised). Then, you should write the algorithm main
+You should set your direction to your favorite
+one (NORTH is advised). Then, you should write the algorithm main
 loop. In other words, while your buggle did not find its biscuit, you have
 to move forward until next obstacle in the favorite direction. Then, put a
-paw on a wall (using (<code>void keepHandOnSideWall()</code>) while the sum
+paw on a wall (using (<code>keepHandOnSideWall()</code>) while the sum
 of turns is not null and the favorite direction is not free. Do that until
 you find your baggle.</div>
 	
diff --git a/src/lessons/maze/pledge/PledgeMaze.java b/src/lessons/maze/pledge/PledgeMaze.java
index 0ebdcde..c9d42d4 100644
--- a/src/lessons/maze/pledge/PledgeMaze.java
+++ b/src/lessons/maze/pledge/PledgeMaze.java
@@ -1,70 +1,22 @@
 package lessons.maze.pledge;
 
-import java.awt.Color;
+import java.io.IOException;
 
-import jlm.core.model.lesson.ExecutionProgress;
 import jlm.core.model.lesson.ExerciseTemplated;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.Entity;
+import jlm.universe.BrokenWorldFileException;
 import jlm.universe.World;
-import jlm.universe.bugglequest.AbstractBuggle;
-import jlm.universe.bugglequest.Buggle;
 import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
-import jlm.universe.bugglequest.exception.NoBaggleUnderBuggleException;
 
 public class PledgeMaze extends ExerciseTemplated {
 
-	public PledgeMaze(Lesson lesson) {
+	public PledgeMaze(Lesson lesson) throws IOException, BrokenWorldFileException {
 		super(lesson);
 		tabName = "Escaper";
 				
-		/* Create initial situation */
-		BuggleWorld myWorlds[] = new BuggleWorld[2];
-		myWorlds[0] = new BuggleWorld("Labyrinth", 4, 4); 
-		loadMap(myWorlds[0],"lessons/maze/pledge/PledgeMaze");
-		new Buggle(myWorlds[0], "Thésée", 12, 14, Direction.NORTH, Color.black, Color.lightGray);
-		
-		myWorlds[1] = new BuggleWorld("Trapception", 4, 4); 
-		loadMap(myWorlds[1],"lessons/maze/pledge/PledgeMaze2");
-		new Buggle(myWorlds[1], "Trapception", 9, 10, Direction.NORTH, Color.black, Color.lightGray);
-		
-		setup(myWorlds);
+		setup( new World[] {
+				BuggleWorld.newFromFile("lessons/maze/pledge/PledgeMaze"),	
+				BuggleWorld.newFromFile("lessons/maze/pledge/PledgeMaze2")
+		});
 	}
-
-	// to shorten loading time	
-	@Override
-	protected void computeAnswer(){
-		AbstractBuggle b = (AbstractBuggle)answerWorld.get(0).getEntities().get(0);
-		b.setPosFromLesson(19, 19);
-		b.setDirection(Direction.EAST);
-		
-		AbstractBuggle b2 = (AbstractBuggle)answerWorld.get(1).getEntities().get(0);
-		b2.setPosFromLesson(19, 19);
-		b2.setDirection(Direction.EAST);
-		
-		try {
-			b.pickUpBaggle();
-			b2.pickUpBaggle();
-		} catch (NoBaggleUnderBuggleException e) {
-			e.printStackTrace();
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}		
-	}
-	
-	@Override
-	public void check() {
-		lastResult = new ExecutionProgress();
-		for (World w: this.getWorlds(WorldKind.CURRENT)) 
-			for (Entity e:w.getEntities()) {
-				lastResult.totalTests++;
-				if (!((AbstractBuggle) e).isCarryingBaggle())
-					lastResult.details += "Buggle "+e.getName()+" didn't find the baggle";
-				else
-					lastResult.passedTests++;
-			}
-	}
-
 }
diff --git a/src/lessons/maze/pledge/PledgeMaze.map b/src/lessons/maze/pledge/PledgeMaze.map
index ea6e195..9a6192c 100644
--- a/src/lessons/maze/pledge/PledgeMaze.map
+++ b/src/lessons/maze/pledge/PledgeMaze.map
@@ -1,402 +1,167 @@
-BuggleWorld: Labyrinth
-Size: 20x20
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(0,0,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,0),true,true,false] ; cell
+BuggleWorld: Labyrinth
+Size: 20x20
+Buggle(12,14): north,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,15): white,nobaggle,notopwall,leftwall,
+Cell(0,16): white,nobaggle,notopwall,leftwall,
+Cell(0,17): white,nobaggle,notopwall,leftwall,
+Cell(0,18): white,nobaggle,notopwall,leftwall,
+Cell(0,19): white,nobaggle,notopwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,18): white,nobaggle,topwall,noleftwall,
+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,16): white,nobaggle,topwall,noleftwall,
+Cell(6,18): white,nobaggle,topwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,noleftwall,
+Cell(7,5): white,nobaggle,topwall,noleftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,18): white,nobaggle,topwall,noleftwall,
+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,13): white,nobaggle,notopwall,leftwall,
+Cell(8,14): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,18): white,nobaggle,topwall,noleftwall,
+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,14): white,nobaggle,notopwall,leftwall,
+Cell(9,15): white,nobaggle,notopwall,leftwall,
+Cell(9,18): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,18): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,topwall,noleftwall,
+Cell(11,5): white,nobaggle,topwall,leftwall,
+Cell(11,6): white,nobaggle,notopwall,leftwall,
+Cell(11,7): white,nobaggle,topwall,noleftwall,
+Cell(11,14): white,nobaggle,topwall,leftwall,
+Cell(11,15): white,nobaggle,notopwall,leftwall,
+Cell(11,16): white,nobaggle,topwall,noleftwall,
+Cell(11,18): white,nobaggle,topwall,noleftwall,
+Cell(12,0): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,noleftwall,
+Cell(12,5): white,nobaggle,topwall,noleftwall,
+Cell(12,7): white,nobaggle,notopwall,leftwall,
+Cell(12,13): white,nobaggle,notopwall,leftwall,
+Cell(12,14): 0/0/255,nobaggle,notopwall,noleftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,18): white,nobaggle,topwall,noleftwall,
+Cell(13,0): white,nobaggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,5): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,nobaggle,topwall,noleftwall,
+Cell(13,18): white,nobaggle,topwall,noleftwall,
+Cell(14,0): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,5): white,nobaggle,notopwall,leftwall,
+Cell(14,6): white,nobaggle,notopwall,leftwall,
+Cell(14,7): white,nobaggle,notopwall,leftwall,
+Cell(14,8): white,nobaggle,notopwall,leftwall,
+Cell(14,9): white,nobaggle,notopwall,leftwall,
+Cell(14,10): white,nobaggle,notopwall,leftwall,
+Cell(14,11): white,nobaggle,notopwall,leftwall,
+Cell(14,12): white,nobaggle,notopwall,leftwall,
+Cell(14,13): white,nobaggle,notopwall,leftwall,
+Cell(14,14): white,nobaggle,notopwall,leftwall,
+Cell(14,15): white,nobaggle,notopwall,leftwall,
+Cell(14,18): white,nobaggle,topwall,noleftwall,
+Cell(15,0): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,18): white,nobaggle,topwall,noleftwall,
+Cell(16,0): white,nobaggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,topwall,noleftwall,
+Cell(16,7): white,nobaggle,topwall,leftwall,
+Cell(16,8): white,nobaggle,notopwall,leftwall,
+Cell(16,9): white,nobaggle,topwall,noleftwall,
+Cell(16,11): white,nobaggle,topwall,leftwall,
+Cell(16,12): white,nobaggle,notopwall,leftwall,
+Cell(16,13): white,nobaggle,topwall,noleftwall,
+Cell(16,18): white,nobaggle,topwall,noleftwall,
+Cell(17,0): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,noleftwall,
+Cell(17,9): white,nobaggle,topwall,noleftwall,
+Cell(17,11): white,nobaggle,topwall,noleftwall,
+Cell(17,18): white,nobaggle,topwall,noleftwall,
+Cell(18,0): white,nobaggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,notopwall,leftwall,
+Cell(18,3): white,nobaggle,notopwall,leftwall,
+Cell(18,4): white,nobaggle,notopwall,leftwall,
+Cell(18,5): white,nobaggle,notopwall,leftwall,
+Cell(18,6): white,nobaggle,notopwall,leftwall,
+Cell(18,7): white,nobaggle,notopwall,leftwall,
+Cell(18,8): white,nobaggle,notopwall,leftwall,
+Cell(18,11): white,nobaggle,notopwall,leftwall,
+Cell(18,12): white,nobaggle,notopwall,leftwall,
+Cell(18,13): white,nobaggle,notopwall,leftwall,
+Cell(18,14): white,nobaggle,notopwall,leftwall,
+Cell(18,15): white,nobaggle,notopwall,leftwall,
+Cell(18,16): white,nobaggle,notopwall,leftwall,
+Cell(18,17): white,nobaggle,notopwall,leftwall,
+Cell(18,19): white,nobaggle,notopwall,leftwall,
+Cell(19,0): white,nobaggle,topwall,noleftwall,
+Cell(19,19): 255/255/0,baggle,topwall,noleftwall,
diff --git a/src/lessons/maze/pledge/PledgeMaze2.map b/src/lessons/maze/pledge/PledgeMaze2.map
index cc977bf..f60712b 100644
--- a/src/lessons/maze/pledge/PledgeMaze2.map
+++ b/src/lessons/maze/pledge/PledgeMaze2.map
@@ -1,402 +1,171 @@
-BuggleWorld: Trapception
-Size: 20x20
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(0,0,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,0),true,true,false] ; cell
+BuggleWorld: Trapception
+Size: 20x20
+Buggle(9,10): north,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,15): white,nobaggle,notopwall,leftwall,
+Cell(0,16): white,nobaggle,notopwall,leftwall,
+Cell(0,17): white,nobaggle,notopwall,leftwall,
+Cell(0,18): white,nobaggle,notopwall,leftwall,
+Cell(0,19): white,nobaggle,notopwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,noleftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(3,18): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,18): white,nobaggle,topwall,noleftwall,
+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,16): white,nobaggle,topwall,noleftwall,
+Cell(6,18): white,nobaggle,topwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,noleftwall,
+Cell(7,5): white,nobaggle,topwall,noleftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,18): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,5): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,leftwall,
+Cell(8,9): white,nobaggle,notopwall,leftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,leftwall,
+Cell(8,12): white,nobaggle,notopwall,leftwall,
+Cell(8,13): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,18): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,notopwall,leftwall,
+Cell(9,10): 0/0/255,nobaggle,notopwall,noleftwall,
+Cell(9,11): white,nobaggle,notopwall,leftwall,
+Cell(9,13): white,nobaggle,topwall,noleftwall,
+Cell(9,16): white,nobaggle,topwall,noleftwall,
+Cell(9,18): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,5): white,nobaggle,topwall,noleftwall,
+Cell(10,8): white,nobaggle,notopwall,leftwall,
+Cell(10,9): white,nobaggle,notopwall,leftwall,
+Cell(10,10): white,nobaggle,notopwall,leftwall,
+Cell(10,11): white,nobaggle,notopwall,leftwall,
+Cell(10,12): white,nobaggle,notopwall,leftwall,
+Cell(10,16): white,nobaggle,topwall,noleftwall,
+Cell(10,18): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,topwall,noleftwall,
+Cell(11,5): white,nobaggle,topwall,noleftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,8): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,noleftwall,
+Cell(11,12): white,nobaggle,topwall,leftwall,
+Cell(11,13): white,nobaggle,notopwall,leftwall,
+Cell(11,16): white,nobaggle,topwall,noleftwall,
+Cell(11,18): white,nobaggle,topwall,noleftwall,
+Cell(12,0): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,noleftwall,
+Cell(12,5): white,nobaggle,topwall,noleftwall,
+Cell(12,9): white,nobaggle,topwall,noleftwall,
+Cell(12,12): white,nobaggle,topwall,noleftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,18): white,nobaggle,topwall,noleftwall,
+Cell(13,0): white,nobaggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,5): white,nobaggle,topwall,noleftwall,
+Cell(13,9): white,nobaggle,topwall,noleftwall,
+Cell(13,12): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,nobaggle,topwall,noleftwall,
+Cell(13,18): white,nobaggle,topwall,noleftwall,
+Cell(14,0): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,5): white,nobaggle,notopwall,leftwall,
+Cell(14,6): white,nobaggle,notopwall,leftwall,
+Cell(14,7): white,nobaggle,notopwall,leftwall,
+Cell(14,8): white,nobaggle,notopwall,leftwall,
+Cell(14,12): white,nobaggle,notopwall,leftwall,
+Cell(14,13): white,nobaggle,notopwall,leftwall,
+Cell(14,14): white,nobaggle,notopwall,leftwall,
+Cell(14,15): white,nobaggle,notopwall,leftwall,
+Cell(14,18): white,nobaggle,topwall,noleftwall,
+Cell(15,0): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,18): white,nobaggle,topwall,noleftwall,
+Cell(16,0): white,nobaggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,topwall,noleftwall,
+Cell(16,18): white,nobaggle,topwall,noleftwall,
+Cell(17,0): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,noleftwall,
+Cell(17,18): white,nobaggle,topwall,noleftwall,
+Cell(18,0): white,nobaggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,notopwall,leftwall,
+Cell(18,3): white,nobaggle,notopwall,leftwall,
+Cell(18,4): white,nobaggle,notopwall,leftwall,
+Cell(18,5): white,nobaggle,notopwall,leftwall,
+Cell(18,6): white,nobaggle,notopwall,leftwall,
+Cell(18,7): white,nobaggle,notopwall,leftwall,
+Cell(18,8): white,nobaggle,notopwall,leftwall,
+Cell(18,9): white,nobaggle,notopwall,leftwall,
+Cell(18,10): white,nobaggle,notopwall,leftwall,
+Cell(18,11): white,nobaggle,notopwall,leftwall,
+Cell(18,12): white,nobaggle,notopwall,leftwall,
+Cell(18,13): white,nobaggle,notopwall,leftwall,
+Cell(18,14): white,nobaggle,notopwall,leftwall,
+Cell(18,15): white,nobaggle,notopwall,leftwall,
+Cell(18,16): white,nobaggle,notopwall,leftwall,
+Cell(18,17): white,nobaggle,notopwall,leftwall,
+Cell(18,19): white,nobaggle,notopwall,leftwall,
+Cell(19,0): white,nobaggle,topwall,noleftwall,
+Cell(19,19): 255/255/0,baggle,topwall,noleftwall,
diff --git a/src/lessons/maze/pledge/PledgeMazeEntity.java b/src/lessons/maze/pledge/PledgeMazeEntity.java
index 9d6b181..7105617 100644
--- a/src/lessons/maze/pledge/PledgeMazeEntity.java
+++ b/src/lessons/maze/pledge/PledgeMazeEntity.java
@@ -34,23 +34,21 @@ public class PledgeMazeEntity extends jlm.universe.bugglequest.SimpleBuggle {
 			{
 			case 0: // North runner mode
 				while ( !isFacingWall() )
-				{
 					forward();
-				}
-				this.turnRight(); // make sure that we have a left wall
-				this.angleSum--;
+				
+				turnRight(); // make sure that we have a left wall
+				angleSum--;
 				state = 1; // time to enter the Left Follower mode
 				break;
 			case 1: // Left Follower Mode
 				this.stepHandOnWall(); // follow the left wall
 				if ( this.isChosenDirectionFree() && this.angleSum == 0  ) 
-				{
 					state =0; // time to enter in North Runner mode
-				}
+				
 				break;
 			}
 		}
-		this.pickUpBaggle();
+		pickupBaggle();
 	}
 
 	int angleSum;
@@ -70,12 +68,8 @@ public class PledgeMazeEntity extends jlm.universe.bugglequest.SimpleBuggle {
 
 	private boolean isChosenDirectionFree() {
 		Direction memorizedD = getDirection();
-		boolean isFree = false;
 		this.setDirection(this.chosenDirection);
-		if (!isFacingWall()) 
-		{
-			isFree=true;
-		} 
+		boolean isFree = !isFacingWall();
 		this.setDirection(memorizedD);
 		return isFree;
 	}
diff --git a/src/lessons/maze/pledge/PledgeMazeEntity.py b/src/lessons/maze/pledge/PledgeMazeEntity.py
index 911958c..d2fcda9 100644
--- a/src/lessons/maze/pledge/PledgeMazeEntity.py
+++ b/src/lessons/maze/pledge/PledgeMazeEntity.py
@@ -1,62 +1,44 @@
+def setX(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+def setY(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+def setPos(x,y):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+
 # BEGIN SOLUTION
-  public void run() {
-		chosenD = Direction.NORTH;
-		setDirection(chosenD);
-        
-		while (!isOverBaggle()) {
-			while (!isFacingWall()) {
-				forward();
-			}
-			turnLeft();
-            
-			do {
-				keepHandOnSideWall();
-			} while (!(angleSum == 0 && isChosenDirectionFree()) && !isOverBaggle());
-		}
-		
-		pickUpBaggle();
-	}
-    
-	int angleSum = 0;
-	Direction chosenD;
-	Direction memorizedD;
-    
-	private boolean isChosenDirectionFree() {
-		memorizedD = getDirection();
-		setDirection(chosenD);
-		if (!isFacingWall()) {
-			return true;
-		} else {
-			setDirection(memorizedD);
-			return false;
-    }
-	}
-    
-	public void keepHandOnSideWall() {
-		keepHandOnRightWall();
-	}
-	
-	private void keepHandOnRightWall() {
-		turnRight();
-		if (!isFacingWall()) {
-			angleSum = angleSum + 1;
-			forward(); // turn right then forward
-		} else {
-			turnLeft();
-			if (!isFacingWall()) {
-				forward(); // forward, direction did not change
-			} else {
-				turnLeft();
-				if (!isFacingWall()) {
-					angleSum = angleSum - 1;
-					forward(); // turn left then forward
-				} else {
-					angleSum = -2;
-					turnLeft(); // turn back then forward
-					forward();
-            }
-        }
-    }
-	}
+
+def stepHandOnWall():
+    global angleSum
+    while not isFacingWall():
+        forward()
+        turnLeft()
+        angleSum += 1
+    turnRight()
+    angleSum -= 1
+
+def isDirectionFree(dir):
+    memo = getDirection()
+    setDirection(dir)
+    res = not isFacingWall()
+    setDirection(memo)
+    return res
+
+northRunner = True
+chosenDir = Direction.NORTH
+setDirection(chosenDir)
+angleSum =  0
+
+while not isOverBaggle():
+    if northRunner:
+        while not isFacingWall():
+            forward()
+        turnRight()
+        angleSum -= 1
+        northRunner = False
+    else :
+        stepHandOnWall()
+        if isDirectionFree(chosenDir) and angleSum == 0:
+            northRunner = True
+pickupBaggle()
     
 # END SOLUTION
diff --git a/src/lessons/maze/randommouse/RandomMouseMaze-answer0.map b/src/lessons/maze/randommouse/RandomMouseMaze-answer0.map
new file mode 100644
index 0000000..c67c729
--- /dev/null
+++ b/src/lessons/maze/randommouse/RandomMouseMaze-answer0.map
@@ -0,0 +1,17 @@
+BuggleWorld: Swiss cheese
+Size: 4x4
+Buggle(3,3): south,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): 204/204/255,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,topwall,leftwall,
+Cell(1,2): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,notopwall,leftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,3): 255/255/153,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/randommouse/RandomMouseMaze-answer1.map b/src/lessons/maze/randommouse/RandomMouseMaze-answer1.map
new file mode 100644
index 0000000..bbf7e65
--- /dev/null
+++ b/src/lessons/maze/randommouse/RandomMouseMaze-answer1.map
@@ -0,0 +1,16 @@
+BuggleWorld: Blue cheese
+Size: 4x4
+Buggle(3,3): 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): 204/204/255,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,topwall,leftwall,
+Cell(2,0): white,nobaggle,topwall,leftwall,
+Cell(2,1): white,nobaggle,topwall,noleftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,notopwall,leftwall,
+Cell(3,3): 255/255/153,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/maze/randommouse/RandomMouseMaze.fr.html b/src/lessons/maze/randommouse/RandomMouseMaze.fr.html
index ac01d15..5123321 100644
--- a/src/lessons/maze/randommouse/RandomMouseMaze.fr.html
+++ b/src/lessons/maze/randommouse/RandomMouseMaze.fr.html
@@ -17,30 +17,19 @@ hasard et est très inefficace.
 
 <p>
 Tant que notre buggle n'a pas trouvé la sortie, il doit progresser de la
-façon suivante : choisir un entier entre 0 et 2 au hasard à l'aide de la
-méthode <code>random3()</code> et prendre l'une des décisions suivantes
-selon l'entier choisi: avancer si il le peut, tourner à droite ou bien
-tourner à gauche). 
+façon suivante : choisir un entier entre 0 et 2 au hasard à l'aide de
+la méthode <code>random3()</code> fournie et prendre l'une des décisions
+suivantes selon l'entier choisi : avancer si il le peut, tourner à
+droite ou bien tourner à gauche. 
 </p>
 
 <h3>Objectif de cet exercice</h3><a name="Objectifs">
 
 <p>
-<a name="Objectifs"> L'objectif de cet exercice est d'écrire un algorithme
-permettant à votre buggle de sortir du labyrinthe. Pensez à faire prendre le
-baggle à votre buggle avant la fin de votre programme.
+L'objectif de cet exercice est d'écrire un algorithme permettant à votre
+buggle de sortir du labyrinthe. 
 </p>
 
 <p>
-Ecrivez la méthode <code>run()</code> pour que votre buggle prenne une
-décision (avancer, tourner à droite, tourner à gauche) au hasard.  Vous
-pouvez utiliser la méthode <code>random3()</code> qui retourne de manière
-aléatoire la valeur 0, 1 ou 2.
+N'oubliez pas de ramasser le baggle quand vous l'avez trouvé.
 </p>
-
-<p>
-N'oubliez pas de faire ramasser le baggle par votre buggle à la fin de votre
-code.
-</p>
-
-<p>À vous de jouer.</p>
diff --git a/src/lessons/maze/randommouse/RandomMouseMaze.html b/src/lessons/maze/randommouse/RandomMouseMaze.html
index d6dee29..2926429 100644
--- a/src/lessons/maze/randommouse/RandomMouseMaze.html
+++ b/src/lessons/maze/randommouse/RandomMouseMaze.html
@@ -16,7 +16,8 @@ do so. It relies on randomness and proves quite inefficient.
 
 <p>
 While the buggle didn't find the path to the escape, it must proceed the
-following way: pick a random integer between 0 and 2 by using the <code>random3()</code> method 
+following way: pick a random integer between 0 and 2 by using the
+provided <code>random3()</code> method 
 and make one of the following actions: moving forward if possible, turn left or turn right. 
 </p>
 
@@ -24,18 +25,9 @@ and make one of the following actions: moving forward if possible, turn left or
 
 <p>
 This exercise's objective is to write an algorithm
-allowing the buggle to find its path out of the maze. Do not forget to let
-your buggle pick up the baggle once it found the way out.
-</p>
-
-<p>
-Write the <code>run()</code> method so that your buggle
-takes a random decision (forward, turn left or turn right). You can use the
-<code>random3()</code> method which returns randomly either 0, 1 or 2.
+allowing the buggle to find its path out of the maze. 
 </p>
 
 <p>
 Don't forget to pick up the baggle once you've reached it.
 </p>
-
-<p>You're up.</p>
diff --git a/src/lessons/maze/randommouse/RandomMouseMaze.java b/src/lessons/maze/randommouse/RandomMouseMaze.java
index bd748ae..4dcfa92 100644
--- a/src/lessons/maze/randommouse/RandomMouseMaze.java
+++ b/src/lessons/maze/randommouse/RandomMouseMaze.java
@@ -1,69 +1,22 @@
 package lessons.maze.randommouse;
 
-import java.awt.Color;
+import java.io.IOException;
 
-import jlm.core.model.lesson.ExecutionProgress;
 import jlm.core.model.lesson.ExerciseTemplated;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.Entity;
+import jlm.universe.BrokenWorldFileException;
 import jlm.universe.World;
-import jlm.universe.bugglequest.AbstractBuggle;
-import jlm.universe.bugglequest.Buggle;
 import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
-import jlm.universe.bugglequest.exception.NoBaggleUnderBuggleException;
 
 public class RandomMouseMaze extends ExerciseTemplated {
 
-	public RandomMouseMaze(Lesson lesson) {
+	public RandomMouseMaze(Lesson lesson) throws IOException, BrokenWorldFileException {
 		super(lesson);
 		tabName = "RandomMouseMaze";
-				
-		/* Create initial situation */
-		BuggleWorld myWorlds[] = new BuggleWorld[2];
-		myWorlds[0] = new BuggleWorld("Swiss cheese", 4, 4); 
-		loadMap(myWorlds[0],"lessons/maze/randommouse/RandomMouseMaze");
-		new Buggle(myWorlds[0], "Thésée", 0, 3, Direction.NORTH, Color.black, Color.lightGray);
 		
-		myWorlds[1] = new BuggleWorld("Blue cheese", 4, 4); 
-		loadMap(myWorlds[1],"lessons/maze/randommouse/RandomMouseMaze2");
-		new Buggle(myWorlds[1], "ZoroRorronoa", 0, 3, Direction.NORTH, Color.black, Color.lightGray);
-		
-		setup(myWorlds);
-	}
-
-	// Skip random solver since it might take too much time to find solution.
-	@Override
-	protected void computeAnswer(){
-		AbstractBuggle b = (AbstractBuggle)answerWorld.get(0).getEntities().get(0);
-		b.setPosFromLesson(3, 3);
-		b.turnBack();
-		
-		AbstractBuggle b2 = (AbstractBuggle)answerWorld.get(1).getEntities().get(0);
-		b2.setPosFromLesson(3, 3);
-		b2.setDirection(Direction.EAST);
-		
-		try {
-			b.pickUpBaggle();
-			b2.pickUpBaggle();
-		} catch (NoBaggleUnderBuggleException e) {
-			e.printStackTrace();
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}	
-	}
-	
-	@Override
-	public void check() {
-		lastResult = new ExecutionProgress();
-		for (World w: this.getWorlds(WorldKind.CURRENT)) 
-			for (Entity e:w.getEntities()) {
-				lastResult.totalTests++;
-				if (!((AbstractBuggle) e).isCarryingBaggle())
-					lastResult.details += "Buggle "+e.getName()+" didn't find the baggle";
-				else
-					lastResult.passedTests++;
-			}
+		setup( new World[] {
+				BuggleWorld.newFromFile("lessons/maze/randommouse/RandomMouseMaze"),
+				BuggleWorld.newFromFile("lessons/maze/randommouse/RandomMouseMaze2")
+		});
 	}
 }
diff --git a/src/lessons/maze/randommouse/RandomMouseMaze.map b/src/lessons/maze/randommouse/RandomMouseMaze.map
index 926f883..d07cd0b 100644
--- a/src/lessons/maze/randommouse/RandomMouseMaze.map
+++ b/src/lessons/maze/randommouse/RandomMouseMaze.map
@@ -1,18 +1,17 @@
-BuggleWorld: Swiss cheese
-Size: 4x4
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(204,204,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,153),true,false,true] ; cell
+BuggleWorld: Swiss cheese
+Size: 4x4
+Buggle(0,3): north,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): 204/204/255,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,topwall,leftwall,
+Cell(1,2): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,notopwall,leftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,3): 255/255/153,baggle,notopwall,leftwall,
diff --git a/src/lessons/maze/randommouse/RandomMouseMaze2.map b/src/lessons/maze/randommouse/RandomMouseMaze2.map
index e98f6af..ae16f63 100644
--- a/src/lessons/maze/randommouse/RandomMouseMaze2.map
+++ b/src/lessons/maze/randommouse/RandomMouseMaze2.map
@@ -1,18 +1,16 @@
-BuggleWorld: Blue cheese
-Size: 4x4
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(204,204,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,153),true,true,false] ; cell
+BuggleWorld: Blue cheese
+Size: 4x4
+Buggle(0,3): north,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): 204/204/255,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,topwall,leftwall,
+Cell(2,0): white,nobaggle,topwall,leftwall,
+Cell(2,1): white,nobaggle,topwall,noleftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,notopwall,leftwall,
+Cell(3,3): 255/255/153,baggle,topwall,noleftwall,
diff --git a/src/lessons/maze/randommouse/RandomMouseMazeEntity.java b/src/lessons/maze/randommouse/RandomMouseMazeEntity.java
index 982d6d3..102a67b 100644
--- a/src/lessons/maze/randommouse/RandomMouseMazeEntity.java
+++ b/src/lessons/maze/randommouse/RandomMouseMazeEntity.java
@@ -39,7 +39,7 @@ public class RandomMouseMazeEntity extends jlm.universe.bugglequest.SimpleBuggle
 				break;
 			}
 		}
-		pickUpBaggle();
+		pickupBaggle();
 		/* END SOLUTION */
 	}
 	/* END TEMPLATE */
diff --git a/src/lessons/maze/randommouse/RandomMouseMazeEntity.py b/src/lessons/maze/randommouse/RandomMouseMazeEntity.py
index 039b955..3c4b98a 100644
--- a/src/lessons/maze/randommouse/RandomMouseMazeEntity.py
+++ b/src/lessons/maze/randommouse/RandomMouseMazeEntity.py
@@ -1,55 +1,30 @@
-# BEGIN SOLUTION 
-  public void turnRandomly() {
-		switch (random2()) {
-		case 0:
-			turnLeft();
-			break;
-		case 1:
-			turnRight();
-			break;
-    }
-	}
-    
-	public void takeRandomDirection() {
-		if (isFacingWall()) {
-			turnRandomly();
-		} else {
-			switch (random3()) {
-			case 0:
-				turnLeft();
-				break;
-			case 1:
-				forward();
-				break;
-			case 2:
-				turnRight();
-				break;
-        }
-    }
-	}
-    
-	public boolean atAJunction() {
-		boolean junction = false;
-        
-		// check left
-		turnLeft();
-		if (!isFacingWall()) {
-			junction = true;
-		}
-		turnRight();
-        
-		// can we skip next check?
-		if (junction) {
-			return true;
-		} else {
-			// check right
-			turnRight();
-			if (!isFacingWall()) {
-				junction = true;
-			}
-			turnLeft();
-		}
-		return junction;
-	}
-    
+import java.util.Random
+rand = java.util.Random()
+
+def random3():
+    n = rand.nextInt(3)
+    if n<0.33:
+        return 0
+    elif n <0.66:
+        return 1
+    return 2
+
+def setX(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+def setY(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+def setPos(x,y):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+
+# BEGIN SOLUTION
+while not isOverBaggle():
+    n = random3()
+    if n == 0:
+        if not isFacingWall():
+            forward()
+    elif n == 1:
+        turnLeft()
+    else:
+        turnRight()
+pickupBaggle()
 # END SOLUTION
diff --git a/src/lessons/maze/short_desc.fr.html b/src/lessons/maze/short_desc.fr.html
new file mode 100644
index 0000000..1138fd0
--- /dev/null
+++ b/src/lessons/maze/short_desc.fr.html
@@ -0,0 +1,7 @@
+<h3>Labyrinthes</h3>
+
+<p>Cette leçon propose divers exercices à propos des labyrinthes dans le monde
+des buggles.</p>
+
+<p>Vous êtes supposé maîtriser les bases de la programmation avant de tenter
+cette leçon.</p>
diff --git a/src/lessons/maze/short_desc.html b/src/lessons/maze/short_desc.html
new file mode 100644
index 0000000..7cc8bd5
--- /dev/null
+++ b/src/lessons/maze/short_desc.html
@@ -0,0 +1,6 @@
+<h3>Labyrinths</h3>
+
+<p>This lesson proposes several exercises about labyrinths in the buggle world.</p>
+
+<p>You are supposed to master the bases of programming to take this
+lesson.</p>
diff --git a/src/lessons/maze/shortestpath/PledgeMaze.map b/src/lessons/maze/shortestpath/PledgeMaze.map
index 6475759..8121f56 100644
--- a/src/lessons/maze/shortestpath/PledgeMaze.map
+++ b/src/lessons/maze/shortestpath/PledgeMaze.map
@@ -1,402 +1,167 @@
-BuggleWorld: Another labyrinth
-Size: 20x20
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(0,0,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,0),true,true,false] ; cell
+BuggleWorld: Another labyrinth
+Size: 20x20
+Buggle(12,14): north,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,15): white,nobaggle,notopwall,leftwall,
+Cell(0,16): white,nobaggle,notopwall,leftwall,
+Cell(0,17): white,nobaggle,notopwall,leftwall,
+Cell(0,18): white,nobaggle,notopwall,leftwall,
+Cell(0,19): white,nobaggle,notopwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+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,18): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,18): white,nobaggle,topwall,noleftwall,
+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,16): white,nobaggle,topwall,noleftwall,
+Cell(6,18): white,nobaggle,topwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,noleftwall,
+Cell(7,5): white,nobaggle,topwall,noleftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,18): white,nobaggle,topwall,noleftwall,
+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,13): white,nobaggle,notopwall,leftwall,
+Cell(8,14): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,18): white,nobaggle,topwall,noleftwall,
+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,14): white,nobaggle,notopwall,leftwall,
+Cell(9,15): white,nobaggle,notopwall,leftwall,
+Cell(9,18): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,18): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,topwall,noleftwall,
+Cell(11,5): white,nobaggle,topwall,leftwall,
+Cell(11,6): white,nobaggle,notopwall,leftwall,
+Cell(11,7): white,nobaggle,topwall,noleftwall,
+Cell(11,14): white,nobaggle,topwall,leftwall,
+Cell(11,15): white,nobaggle,notopwall,leftwall,
+Cell(11,16): white,nobaggle,topwall,noleftwall,
+Cell(11,18): white,nobaggle,topwall,noleftwall,
+Cell(12,0): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,noleftwall,
+Cell(12,5): white,nobaggle,topwall,noleftwall,
+Cell(12,7): white,nobaggle,notopwall,leftwall,
+Cell(12,13): white,nobaggle,notopwall,leftwall,
+Cell(12,14): 0/0/255,nobaggle,notopwall,noleftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,18): white,nobaggle,topwall,noleftwall,
+Cell(13,0): white,nobaggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,5): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,nobaggle,topwall,noleftwall,
+Cell(13,18): white,nobaggle,topwall,noleftwall,
+Cell(14,0): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,5): white,nobaggle,notopwall,leftwall,
+Cell(14,6): white,nobaggle,notopwall,leftwall,
+Cell(14,7): white,nobaggle,notopwall,leftwall,
+Cell(14,8): white,nobaggle,notopwall,leftwall,
+Cell(14,9): white,nobaggle,notopwall,leftwall,
+Cell(14,10): white,nobaggle,notopwall,leftwall,
+Cell(14,11): white,nobaggle,notopwall,leftwall,
+Cell(14,12): white,nobaggle,notopwall,leftwall,
+Cell(14,13): white,nobaggle,notopwall,leftwall,
+Cell(14,14): white,nobaggle,notopwall,leftwall,
+Cell(14,15): white,nobaggle,notopwall,leftwall,
+Cell(14,18): white,nobaggle,topwall,noleftwall,
+Cell(15,0): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,18): white,nobaggle,topwall,noleftwall,
+Cell(16,0): white,nobaggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,topwall,noleftwall,
+Cell(16,7): white,nobaggle,topwall,leftwall,
+Cell(16,8): white,nobaggle,notopwall,leftwall,
+Cell(16,9): white,nobaggle,topwall,noleftwall,
+Cell(16,11): white,nobaggle,topwall,leftwall,
+Cell(16,12): white,nobaggle,notopwall,leftwall,
+Cell(16,13): white,nobaggle,topwall,noleftwall,
+Cell(16,18): white,nobaggle,topwall,noleftwall,
+Cell(17,0): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,noleftwall,
+Cell(17,9): white,nobaggle,topwall,noleftwall,
+Cell(17,11): white,nobaggle,topwall,noleftwall,
+Cell(17,18): white,nobaggle,topwall,noleftwall,
+Cell(18,0): white,nobaggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,notopwall,leftwall,
+Cell(18,3): white,nobaggle,notopwall,leftwall,
+Cell(18,4): white,nobaggle,notopwall,leftwall,
+Cell(18,5): white,nobaggle,notopwall,leftwall,
+Cell(18,6): white,nobaggle,notopwall,leftwall,
+Cell(18,7): white,nobaggle,notopwall,leftwall,
+Cell(18,8): white,nobaggle,notopwall,leftwall,
+Cell(18,11): white,nobaggle,notopwall,leftwall,
+Cell(18,12): white,nobaggle,notopwall,leftwall,
+Cell(18,13): white,nobaggle,notopwall,leftwall,
+Cell(18,14): white,nobaggle,notopwall,leftwall,
+Cell(18,15): white,nobaggle,notopwall,leftwall,
+Cell(18,16): white,nobaggle,notopwall,leftwall,
+Cell(18,17): white,nobaggle,notopwall,leftwall,
+Cell(18,19): white,nobaggle,notopwall,leftwall,
+Cell(19,0): white,nobaggle,topwall,noleftwall,
+Cell(19,19): 255/255/0,baggle,topwall,noleftwall,
diff --git a/src/lessons/maze/shortestpath/ShortestPathMaze-answer0.map b/src/lessons/maze/shortestpath/ShortestPathMaze-answer0.map
new file mode 100644
index 0000000..00ab8db
--- /dev/null
+++ b/src/lessons/maze/shortestpath/ShortestPathMaze-answer0.map
@@ -0,0 +1,145 @@
+BuggleWorld: Labyrinth
+Size: 12x12
+Buggle(11,5): north,black,lightGray,Thesee
+Cell(0,0): white,nobaggle,topwall,leftwall,56
+Cell(0,1): white,nobaggle,notopwall,leftwall,57
+Cell(0,2): white,nobaggle,notopwall,leftwall,58
+Cell(0,3): white,nobaggle,notopwall,leftwall,59
+Cell(0,4): white,nobaggle,notopwall,leftwall,60
+Cell(0,5): white,nobaggle,notopwall,leftwall,61
+Cell(0,6): white,nobaggle,notopwall,leftwall,62
+Cell(0,7): white,nobaggle,notopwall,leftwall,63
+Cell(0,8): white,nobaggle,notopwall,leftwall,64
+Cell(0,9): white,nobaggle,notopwall,leftwall,65
+Cell(0,10): white,nobaggle,notopwall,leftwall,66
+Cell(0,11): white,nobaggle,topwall,leftwall,69
+Cell(1,0): white,nobaggle,topwall,noleftwall,55
+Cell(1,1): white,nobaggle,notopwall,leftwall,54
+Cell(1,2): white,nobaggle,notopwall,leftwall,53
+Cell(1,3): white,nobaggle,notopwall,leftwall,52
+Cell(1,4): white,nobaggle,notopwall,leftwall,51
+Cell(1,5): white,nobaggle,notopwall,leftwall,50
+Cell(1,6): white,nobaggle,notopwall,leftwall,49
+Cell(1,7): white,nobaggle,notopwall,leftwall,48
+Cell(1,8): white,nobaggle,notopwall,leftwall,47
+Cell(1,9): white,nobaggle,topwall,noleftwall,66
+Cell(1,10): white,nobaggle,topwall,noleftwall,67
+Cell(1,11): white,nobaggle,notopwall,noleftwall,68
+Cell(2,0): white,nobaggle,topwall,noleftwall,56
+Cell(2,1): white,nobaggle,topwall,leftwall,35
+Cell(2,2): white,nobaggle,notopwall,leftwall,36
+Cell(2,3): white,nobaggle,notopwall,leftwall,37
+Cell(2,4): white,nobaggle,topwall,leftwall,42
+Cell(2,5): white,nobaggle,notopwall,leftwall,43
+Cell(2,6): white,nobaggle,notopwall,leftwall,44
+Cell(2,7): white,nobaggle,notopwall,leftwall,45
+Cell(2,8): white,nobaggle,notopwall,noleftwall,46
+Cell(2,9): white,nobaggle,topwall,noleftwall,67
+Cell(2,10): white,nobaggle,topwall,noleftwall,68
+Cell(2,11): white,nobaggle,topwall,noleftwall,69
+Cell(3,0): white,nobaggle,topwall,noleftwall,57
+Cell(3,1): white,nobaggle,topwall,noleftwall,34
+Cell(3,2): white,nobaggle,topwall,leftwall,43
+Cell(3,3): white,nobaggle,topwall,noleftwall,38
+Cell(3,4): white,nobaggle,topwall,noleftwall,41
+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,11): white,nobaggle,topwall,noleftwall,70
+Cell(4,0): white,nobaggle,topwall,leftwall,34
+Cell(4,1): white,nobaggle,topwall,noleftwall,33
+Cell(4,2): white,nobaggle,topwall,noleftwall,42
+Cell(4,3): white,nobaggle,topwall,noleftwall,39
+Cell(4,4): white,nobaggle,notopwall,noleftwall,40
+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,11): white,nobaggle,topwall,noleftwall,71
+Cell(5,0): white,nobaggle,topwall,noleftwall,33
+Cell(5,1): white,nobaggle,notopwall,noleftwall,32
+Cell(5,2): white,nobaggle,topwall,noleftwall,41
+Cell(5,3): white,nobaggle,notopwall,leftwall,40
+Cell(5,4): white,nobaggle,notopwall,leftwall,39
+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,11): white,nobaggle,topwall,noleftwall,72
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,31
+Cell(6,2): white,nobaggle,notopwall,leftwall,32
+Cell(6,3): white,nobaggle,notopwall,leftwall,33
+Cell(6,4): white,nobaggle,topwall,noleftwall,38
+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,11): white,nobaggle,topwall,noleftwall,73
+Cell(7,0): white,nobaggle,topwall,leftwall,31
+Cell(7,1): white,nobaggle,notopwall,noleftwall,30
+Cell(7,2): white,nobaggle,topwall,leftwall,29
+Cell(7,3): white,nobaggle,topwall,noleftwall,34
+Cell(7,4): white,nobaggle,notopwall,leftwall,35
+Cell(7,5): white,nobaggle,notopwall,noleftwall,36
+Cell(7,6): white,nobaggle,topwall,noleftwall,11
+Cell(7,7): white,nobaggle,notopwall,leftwall,12
+Cell(7,8): white,nobaggle,topwall,noleftwall,7
+Cell(7,9): white,nobaggle,topwall,noleftwall,82
+Cell(7,10): white,nobaggle,notopwall,leftwall,81
+Cell(7,11): white,nobaggle,topwall,noleftwall,74
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,29
+Cell(8,2): white,nobaggle,notopwall,noleftwall,28
+Cell(8,3): white,nobaggle,notopwall,leftwall,27
+Cell(8,4): white,nobaggle,topwall,leftwall,20
+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,10): white,nobaggle,topwall,noleftwall,80
+Cell(8,11): white,nobaggle,topwall,noleftwall,75
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,24
+Cell(9,2): white,nobaggle,notopwall,leftwall,25
+Cell(9,3): white,nobaggle,notopwall,noleftwall,26
+Cell(9,4): white,nobaggle,topwall,noleftwall,19
+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,10): white,nobaggle,topwall,noleftwall,79
+Cell(9,11): white,nobaggle,topwall,noleftwall,76
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,23
+Cell(10,2): white,nobaggle,notopwall,leftwall,22
+Cell(10,3): white,nobaggle,notopwall,leftwall,21
+Cell(10,4): white,nobaggle,topwall,leftwall,18
+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,10): white,nobaggle,topwall,noleftwall,78
+Cell(10,11): white,nobaggle,notopwall,noleftwall,77
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,20
+Cell(11,4): white,nobaggle,notopwall,noleftwall,19
+Cell(11,5): 255/255/153,nobaggle,topwall,leftwall,0
+Cell(11,6): white,nobaggle,notopwall,leftwall,1
+Cell(11,7): white,nobaggle,notopwall,leftwall,2
+Cell(11,8): white,nobaggle,notopwall,noleftwall,3
+Cell(11,9): white,nobaggle,topwall,leftwall,80
+Cell(11,10): white,nobaggle,notopwall,leftwall,79
+Cell(11,11): white,nobaggle,notopwall,noleftwall,78
diff --git a/src/lessons/maze/shortestpath/ShortestPathMaze-answer1.map b/src/lessons/maze/shortestpath/ShortestPathMaze-answer1.map
new file mode 100644
index 0000000..78a1105
--- /dev/null
+++ b/src/lessons/maze/shortestpath/ShortestPathMaze-answer1.map
@@ -0,0 +1,288 @@
+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,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,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,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,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,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,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,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,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,13): white,nobaggle,notopwall,leftwall,29
+Cell(8,14): white,nobaggle,topwall,noleftwall,
+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,12): white,nobaggle,notopwall,noleftwall,29
+Cell(9,13): white,nobaggle,notopwall,noleftwall,28
+Cell(9,14): white,nobaggle,notopwall,leftwall,27
+Cell(9,15): white,nobaggle,notopwall,leftwall,26
+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,11): white,nobaggle,notopwall,noleftwall,29
+Cell(10,12): white,nobaggle,notopwall,noleftwall,28
+Cell(10,13): white,nobaggle,notopwall,noleftwall,27
+Cell(10,14): white,nobaggle,notopwall,noleftwall,26
+Cell(10,15): white,nobaggle,notopwall,noleftwall,25
+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,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,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,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,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,11): white,nobaggle,notopwall,noleftwall,31
+Cell(12,12): white,nobaggle,notopwall,noleftwall,30
+Cell(12,13): white,nobaggle,notopwall,leftwall,31
+Cell(12,14): blue,nobaggle,notopwall,noleftwall,32
+Cell(12,15): white,nobaggle,notopwall,noleftwall,33
+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,3): white,nobaggle,notopwall,noleftwall,22
+Cell(13,4): white,nobaggle,notopwall,noleftwall,21
+Cell(13,5): white,nobaggle,topwall,noleftwall,
+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,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,2): white,nobaggle,topwall,noleftwall,22
+Cell(14,3): white,nobaggle,notopwall,noleftwall,21
+Cell(14,4): white,nobaggle,notopwall,noleftwall,20
+Cell(14,5): white,nobaggle,notopwall,leftwall,19
+Cell(14,6): white,nobaggle,notopwall,leftwall,18
+Cell(14,7): white,nobaggle,notopwall,leftwall,17
+Cell(14,8): white,nobaggle,notopwall,leftwall,16
+Cell(14,9): white,nobaggle,notopwall,leftwall,15
+Cell(14,10): white,nobaggle,notopwall,leftwall,14
+Cell(14,11): white,nobaggle,notopwall,leftwall,15
+Cell(14,12): white,nobaggle,notopwall,leftwall,16
+Cell(14,13): white,nobaggle,notopwall,leftwall,17
+Cell(14,14): white,nobaggle,notopwall,leftwall,18
+Cell(14,15): white,nobaggle,notopwall,leftwall,19
+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,1): white,nobaggle,notopwall,noleftwall,22
+Cell(15,2): white,nobaggle,topwall,noleftwall,21
+Cell(15,3): white,nobaggle,notopwall,noleftwall,20
+Cell(15,4): white,nobaggle,notopwall,noleftwall,19
+Cell(15,5): white,nobaggle,notopwall,noleftwall,18
+Cell(15,6): white,nobaggle,notopwall,noleftwall,17
+Cell(15,7): white,nobaggle,notopwall,noleftwall,16
+Cell(15,8): white,nobaggle,notopwall,noleftwall,15
+Cell(15,9): white,nobaggle,notopwall,noleftwall,14
+Cell(15,10): white,nobaggle,notopwall,noleftwall,13
+Cell(15,11): white,nobaggle,notopwall,noleftwall,14
+Cell(15,12): white,nobaggle,notopwall,noleftwall,15
+Cell(15,13): white,nobaggle,notopwall,noleftwall,16
+Cell(15,14): white,nobaggle,notopwall,noleftwall,17
+Cell(15,15): white,nobaggle,notopwall,noleftwall,18
+Cell(15,16): white,nobaggle,notopwall,noleftwall,19
+Cell(15,17): white,nobaggle,notopwall,noleftwall,20
+Cell(15,18): white,nobaggle,topwall,noleftwall,5
+Cell(15,19): white,nobaggle,notopwall,noleftwall,6
+Cell(16,0): white,nobaggle,topwall,noleftwall,22
+Cell(16,1): white,nobaggle,notopwall,noleftwall,21
+Cell(16,2): white,nobaggle,topwall,noleftwall,22
+Cell(16,3): white,nobaggle,notopwall,noleftwall,21
+Cell(16,4): white,nobaggle,notopwall,noleftwall,20
+Cell(16,5): white,nobaggle,notopwall,noleftwall,19
+Cell(16,6): white,nobaggle,notopwall,noleftwall,18
+Cell(16,7): white,nobaggle,topwall,leftwall,21
+Cell(16,8): white,nobaggle,notopwall,leftwall,22
+Cell(16,9): white,nobaggle,topwall,noleftwall,13
+Cell(16,10): white,nobaggle,notopwall,noleftwall,12
+Cell(16,11): white,nobaggle,topwall,leftwall,21
+Cell(16,12): white,nobaggle,notopwall,leftwall,20
+Cell(16,13): white,nobaggle,topwall,noleftwall,17
+Cell(16,14): white,nobaggle,notopwall,noleftwall,18
+Cell(16,15): white,nobaggle,notopwall,noleftwall,19
+Cell(16,16): white,nobaggle,notopwall,noleftwall,20
+Cell(16,17): white,nobaggle,notopwall,noleftwall,21
+Cell(16,18): white,nobaggle,topwall,noleftwall,4
+Cell(16,19): white,nobaggle,notopwall,noleftwall,5
+Cell(17,0): white,nobaggle,topwall,noleftwall,21
+Cell(17,1): white,nobaggle,notopwall,noleftwall,20
+Cell(17,2): white,nobaggle,topwall,noleftwall,23
+Cell(17,3): white,nobaggle,notopwall,noleftwall,22
+Cell(17,4): white,nobaggle,notopwall,noleftwall,21
+Cell(17,5): white,nobaggle,notopwall,noleftwall,20
+Cell(17,6): white,nobaggle,notopwall,noleftwall,19
+Cell(17,7): white,nobaggle,notopwall,noleftwall,20
+Cell(17,8): white,nobaggle,notopwall,noleftwall,21
+Cell(17,9): white,nobaggle,topwall,noleftwall,12
+Cell(17,10): white,nobaggle,notopwall,noleftwall,11
+Cell(17,11): white,nobaggle,topwall,noleftwall,20
+Cell(17,12): white,nobaggle,notopwall,noleftwall,19
+Cell(17,13): white,nobaggle,notopwall,noleftwall,18
+Cell(17,14): white,nobaggle,notopwall,noleftwall,19
+Cell(17,15): white,nobaggle,notopwall,noleftwall,20
+Cell(17,16): white,nobaggle,notopwall,noleftwall,21
+Cell(17,17): white,nobaggle,notopwall,noleftwall,22
+Cell(17,18): white,nobaggle,topwall,noleftwall,3
+Cell(17,19): white,nobaggle,notopwall,noleftwall,4
+Cell(18,0): white,nobaggle,topwall,noleftwall,20
+Cell(18,1): white,nobaggle,notopwall,noleftwall,19
+Cell(18,2): white,nobaggle,notopwall,leftwall,18
+Cell(18,3): white,nobaggle,notopwall,leftwall,17
+Cell(18,4): white,nobaggle,notopwall,leftwall,16
+Cell(18,5): white,nobaggle,notopwall,leftwall,15
+Cell(18,6): white,nobaggle,notopwall,leftwall,14
+Cell(18,7): white,nobaggle,notopwall,leftwall,13
+Cell(18,8): white,nobaggle,notopwall,leftwall,12
+Cell(18,9): white,nobaggle,notopwall,noleftwall,11
+Cell(18,10): white,nobaggle,notopwall,noleftwall,10
+Cell(18,11): white,nobaggle,notopwall,leftwall,9
+Cell(18,12): white,nobaggle,notopwall,leftwall,8
+Cell(18,13): white,nobaggle,notopwall,leftwall,7
+Cell(18,14): white,nobaggle,notopwall,leftwall,6
+Cell(18,15): white,nobaggle,notopwall,leftwall,5
+Cell(18,16): white,nobaggle,notopwall,leftwall,4
+Cell(18,17): white,nobaggle,notopwall,leftwall,3
+Cell(18,18): white,nobaggle,notopwall,noleftwall,2
+Cell(18,19): white,nobaggle,notopwall,leftwall,1
+Cell(19,0): white,nobaggle,topwall,noleftwall,21
+Cell(19,1): white,nobaggle,notopwall,noleftwall,20
+Cell(19,2): white,nobaggle,notopwall,noleftwall,19
+Cell(19,3): white,nobaggle,notopwall,noleftwall,18
+Cell(19,4): white,nobaggle,notopwall,noleftwall,17
+Cell(19,5): white,nobaggle,notopwall,noleftwall,16
+Cell(19,6): white,nobaggle,notopwall,noleftwall,15
+Cell(19,7): white,nobaggle,notopwall,noleftwall,14
+Cell(19,8): white,nobaggle,notopwall,noleftwall,13
+Cell(19,9): white,nobaggle,notopwall,noleftwall,12
+Cell(19,10): white,nobaggle,notopwall,noleftwall,11
+Cell(19,11): white,nobaggle,notopwall,noleftwall,10
+Cell(19,12): white,nobaggle,notopwall,noleftwall,9
+Cell(19,13): white,nobaggle,notopwall,noleftwall,8
+Cell(19,14): white,nobaggle,notopwall,noleftwall,7
+Cell(19,15): white,nobaggle,notopwall,noleftwall,6
+Cell(19,16): white,nobaggle,notopwall,noleftwall,5
+Cell(19,17): white,nobaggle,notopwall,noleftwall,4
+Cell(19,18): white,nobaggle,notopwall,noleftwall,3
+Cell(19,19): yellow,nobaggle,topwall,noleftwall,0
diff --git a/src/lessons/maze/shortestpath/ShortestPathMaze.fr.html b/src/lessons/maze/shortestpath/ShortestPathMaze.fr.html
index 7b8e4fe..4e2afb2 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMaze.fr.html
+++ b/src/lessons/maze/shortestpath/ShortestPathMaze.fr.html
@@ -1,42 +1,31 @@
-<h2>Algorithme basique de rechercher du plus court chemin</h2>
+<h2>Algorithme basique de recherche du plus court chemin</h2>
 
 <p>Pour conclure avec cette leçon d'introduction aux algorithmes de sortie de
 labyrinthe, nous allons étudier un autre moyen de trouver la sortie. Le
-buggle de cette leçon est spécial : c'est un jedi. Il eut ressentir la
+buggle de cette leçon est spécial : c'est un jedi. Il peut ressentir la
 Force. Cela signifie qu'il peut ressentir son environnement.</p>
 
-<p>En utilisant la méthode <code>BuggleWorld getMyWorld()</code> il peut
-récupérerdes informations à propos du monde où il vit.</p>
-
-<p>Un objet <code>BuggleWorld</code> est un objet Java sur lequel vous pouvez
-effectuer les opérations suivantes :
-	<ul>
-		<li><code>int getHeight()</code> pour connaitre la hauteur du monde.</li>
-		<li><code>int getWidth()</code> pour connaitre la largeur du monde</li>
-		<li><code>BuggleWorldCell getCell(int x, int y)</code> pour récupérer l'objet
-<code>BuggleWorldCell</code> localisé à une position donnée dans le monde.</li>
-    </ul>
-</p>
-
-<p>Un objet <code>BuggleWorldCell</code> est un objet Java qui représente une
-case du monde. Sur un objet de ce type, il est possible d'appeler les
-méthodes suivantes :
-    <ul>		
-	    <li><code>boolean hasContent()</code> pour savoir si quelquechose est écrit sur
-le sol de cette case.</li>
-	    <li><code>void setContentFromInt(int v)</code> pour écrire une valeur entière
-sur le sol de cette case.</li>
-		<li><code>int getContentAsInt()</code> pour récupérer la valeur entière qui est
-sur le sol de cette case.</li>
-		<li><code>void emptyContent()</code> pour nettoyer le sol de cette case.</li>
-		<li><code>boolean hasTopWall()</code> pour savoir si un mur a été construit sur
-le côté supérieur de la case.</li>
-		<li><code>boolean hasLeftWall()</code> pour savoir si un mur a été construit sur
-le côté gauche de la case.</li>
-		<li><code>boolean hasBaggle()</code> pour savoir si un baggle est présent sur la
-case.</li>
-	</ul>
-</p>
+<p>Sans même changer de place, il peut retrouver des informations sur le monde
+qui l'entoure, avec les instructions suivantes :</p>
+<ul>
+  <li><code>getWorldWidth()</code> pour connaitre la largeur du monde</li>
+  <li><code>getWorldHeight()</code> pour connaitre la hauteur du monde.</li>
+  <li><code>hasTopWall(x,y)</code> indique si la cellule (x,y) de ce monde est
+fermée
+par un mur en haut.</li>
+  <li><code>hasLeftWall(x,y)</code> indique si la cellule (x,y) de ce monde est
+fermée
+par un mur à gauche.</li>
+  <li><code>hasBaggle(x,y)</code> indique si un baggle se trouve dans la cellule
+(x,y) de ce monde.</li>
+  <li><code>setIndication(x,y,i)</code> ajoute une indication entière
+<code>i</code>
+sur le sol de la cellule (x,y).</li>  
+  <li><code>getIndication(x,y,i)</code> retourne l'indication entière qui se
+trouve
+dans la cellule (x,y) (ou bien la valeur 9999 s'il n'y a pas d'indication à
+l'endroit indiqué).</li>  
+</ul>
 
 <p>Il est bon de noter qu'il n'est pas possible de construire un mur sur la
 côté inférieur ou droit d'une case.Néanmoins, quand de tels murs existents,
@@ -46,24 +35,26 @@ respectivement sur la droite ) de la case courante.</p>
 
 <h3>Objectif de cet exercice</h3>
 
-<p><a name="Objective"/>Ecrivez une méthode <code>evaluatePaths()</code> qui
-implémente une version basique de l'algorithme de recherche du plus court
-chemin. Cet algorithme écrira sur chaque case du monde ( ou au moins sur
-celles qui sont nécessaires ) la distance qu'il y a de la case à la sortie
-du labyrinthe.<br/>
-Pour parvenir à cet objectif, votre algorithme devra trouver la sortie du
-labyrinthe sur la carte. Ensuite, pour chaque case à côté de la case où se
-situe la sortie, il devra marquer cette case avec une valeur entière de 1 (
-indiquant la distance ). Ensuite, il faudra itérer ce processus pour marquer
-les cases qui sont à une distance de 2 et jusqu'à marquer la case où se
-situe le buggle.</p>
-
-<p>Ecrivez une méthode <code>followShortestPath()</code> qui permettra au
-buggle jedi de suivre le plus court chemin. Basiquement, le buggle a
-seulement à suivre la case ayant la plus petite distance à la sortie. 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> ou <code>Direction.EAST</code>.</p>
+<p>Votre buggle devrait tout d'abord écrire sur chaque case importante la
+distance qui la sépare de la sortie.<br/>
+Pour cela, trouvez la sortie et écrivez 0 dessus. Ensuite, écrivez 1 sur
+toutes les cases adjacentes à la sortie qui n'en sont pas séparées par un
+mur. Ensuite, écrivez 2 sur toutes les cases à partir desquelles on peut
+atteindre une case marquée 1, puis faites de même pour toutes les cases
+jusqu'à numéroter la case où se trouve votre buggle.</p>
+
+<p>Une fois que toutes les cases sont marquées, faites en sorte que votre
+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,
+est
+et ouest.</p>
 
 <div class="tip" id="tip-1" alt="Je suis perdu, je voudrais plus d'indications">
 Utilises la Force Luke !
diff --git a/src/lessons/maze/shortestpath/ShortestPathMaze.html b/src/lessons/maze/shortestpath/ShortestPathMaze.html
index c641344..1a79bf9 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMaze.html
+++ b/src/lessons/maze/shortestpath/ShortestPathMaze.html
@@ -4,30 +4,16 @@
 investigate another way to find the exit. The buggle in this lesson is a special 
 buggle: he is a jedi. He can feel the Force. This means he is able to feel his environment.</p>
 
-<p>By using method <code>BuggleWorld getMyWorld()</code> he can retrieve information about the world he is leaving in.</p>
-
-<p>A <code>BuggleWorld</code> object is an object on which you can perform the following operations:
-	<ul>
-		<li><code>int getHeight()</code> to know the height of the world.</li>
-		<li><code>int getWidth()</code> to know the width of the world.</li>
-		<li><code>BuggleWorldCell getCell(int x, int y)</code> to retrieve the 
-		  <code>BuggleWorldCell</code> object located at a specific position in the 
-		  world.</li>
-    </ul>
-</p>
-
-<p>A <code>BuggleWorldCell</code> is an object that represents a cell of the world. On an object 
-   of this type, it is possible to call the following methods:
-    <ul>		
-	    <li><code>boolean hasContent()</code> to know if something is written on the floor of this cell.</li>
-	    <li><code>void setContentFromInt(int v)</code> to write an integer value on the floor of this cell.</li>
-		<li><code>int getContentAsInt()</code> to retrieve the integer value which is written on the floor of this cell.</li>
-		<li><code>void emptyContent()</code> to clean the floor of this cell.</li>
-		<li><code>boolean hasTopWall()</code> to know if a wall is built on the top edge of this cell.</li>
-		<li><code>boolean hasLeftWall()</code> to know if a wall is built on the left edge of this cell.</li>
-		<li><code>boolean hasBaggle()</code> to know if a baggle is present on this cell.</li>
-	</ul>
-</p>
+<p>Without even leaving his position, he can retrieve information about the world he is leaving in, with the following functions:</p>
+<ul>
+  <li><code>getWorldWidth()</code> gives the width of its world.</li>
+  <li><code>getWorldHeight()</code> gives the height of its world.</li>
+  <li><code>hasTopWall(x,y)</code> tells whether the cell (x,y) of this world has a wall on top.</li>
+  <li><code>hasLeftWall(x,y)</code> tells whether the cell (x,y) of this world has a wall on the left.</li>
+  <li><code>hasBaggle(x,y)</code> tells whether the cell (x,y) of this world has a baggle.</li>
+  <li><code>setIndication(x,y,i)</code> adds the integer indication <code>i</code> to the cell (x,y).</li>  
+  <li><code>getIndication(x,y,i)</code> retrieves the integer indication of the cell (x,y) (or 9999 if there is no indication).</li>  
+</ul>
 
 <p>It has to be noted that it is not possible to build a wall on the bottom edge or on the right edge of a cell. 
   Therefore when such wall exists, it means it was built on a sibling cells -- as a top (respectively left) wall 
@@ -35,19 +21,17 @@ buggle: he is a jedi. He can feel the Force. This means he is able to feel his e
 
 <h3>Exercise goal</h3>
 
-<p><a name="Objective"/>Write a method <code>evaluatePaths()</code> which computes a very basic shortest path 
-  algorithm. This algorithm will write on each world cell (or at least the one that are useful) the distance 
-  from this cell to the maze exit.<br/>
-To achieve this objective, your algorithm has to find the exit of the maze on the map. Then, for every cells 
-next to the cell where the exit is located, it has to mark these cells with a integer value of 1 (indicating the 
-distance). Then, it has to iterate the same process to mark the cells which are at a distance of 2 and so on 
-until it marks the cell where the buggle is located.</p>
+<p>Your buggle should first write the distance to the exit on each cell (or at least the useful ones).<br/>
+For that, find the exit and write 0 there. 
+Then, write 1 on every neighboring cells that is not separated from the exit with a wall.
+And then mark every cells from which you can reach the exit in 2 steps, 
+and iterate for all cells until you mark the cell where the buggle is located.</p>
 
-<p>Write a method <code>followShortestPath()</code> that will make the jedi buggle to follow the shortest path. 
+<p>Once the cells are marked, get your jedi buggle to follow the shortest path. 
 Basically the buggle has only to walk on each case with the lesser distance from the exit. You can use the 
-method <code>void setDirection(Direction d)</code> to make your buggle look at the specific direction such as 
+method <code>setDirection(direction)</code> to make your buggle look at the specific direction such as 
 <code>Direction.NORTH</code> or <code>Direction.EAST</code>.</p>
 
 <div class="tip" id="tip-1" alt="I'm lost now. Please give me some extra indications.">
-Use the Force Luke!
+Use the Force, Luke!
 </div>	
diff --git a/src/lessons/maze/shortestpath/ShortestPathMaze.java b/src/lessons/maze/shortestpath/ShortestPathMaze.java
index baa6e85..75ded12 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMaze.java
+++ b/src/lessons/maze/shortestpath/ShortestPathMaze.java
@@ -1,74 +1,22 @@
 package lessons.maze.shortestpath;
 
-import java.awt.Color;
+import java.io.IOException;
 
-import jlm.core.model.lesson.ExecutionProgress;
 import jlm.core.model.lesson.ExerciseTemplated;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.Entity;
+import jlm.universe.BrokenWorldFileException;
 import jlm.universe.World;
-import jlm.universe.bugglequest.AbstractBuggle;
-import jlm.universe.bugglequest.Buggle;
 import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
-import jlm.universe.bugglequest.exception.NoBaggleUnderBuggleException;
 
 public class ShortestPathMaze extends ExerciseTemplated {
 
-	public ShortestPathMaze(Lesson lesson) {
+	public ShortestPathMaze(Lesson lesson) throws IOException, BrokenWorldFileException {
 		super(lesson);
 		tabName = "JediEscaper";
 				
-		/* Create initial situation */
-		BuggleWorld myWorlds[] = new BuggleWorld[2];
-		
-		myWorlds[0] = new BuggleWorld("Labyrinth", 1, 1); 	
-		loadMap(myWorlds[0],"lessons/maze/shortestpath/WallFollowerMaze");
-        new Buggle(myWorlds[0], "Thésée", 7, 10, Direction.NORTH, Color.black, Color.lightGray);
-        
-		myWorlds[1] = new BuggleWorld("Labyrinth2", 4, 4); 
-		loadMap(myWorlds[1],"lessons/maze/shortestpath/PledgeMaze");
-		new Buggle(myWorlds[1], "Luke", 12, 14, Direction.NORTH, Color.black, Color.lightGray);
-		
-		//newSourceAliased("lessons.maze.Main","lessons.maze.WallFollowerMaze","Escaper");
-		
-		setup(myWorlds);
+		setup(new World[] {
+				BuggleWorld.newFromFile("lessons/maze/shortestpath/WallFollowerMaze"),
+				BuggleWorld.newFromFile("lessons/maze/shortestpath/PledgeMaze")
+		});
 	}
-
-	// to shorten loading time	
-	@Override
-	protected void computeAnswer(){
-		AbstractBuggle b = (AbstractBuggle)answerWorld.get(0).getEntities().get(0);
-		b.setPosFromLesson(11, 5);
-		b.setDirection(Direction.EAST);
-
-		AbstractBuggle b2 = (AbstractBuggle)answerWorld.get(1).getEntities().get(0);
-		b2.setPosFromLesson(19, 19);
-		b2.setDirection(Direction.EAST);
-		
-		try {
-			b.pickUpBaggle();
-			b2.pickUpBaggle();
-		} catch (NoBaggleUnderBuggleException e) {
-			e.printStackTrace();
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}		
-	}
-	
-	
-	@Override
-	public void check() {
-		lastResult = new ExecutionProgress();
-		for (World w: this.getWorlds(WorldKind.CURRENT)) 
-			for (Entity e:w.getEntities()) {
-				lastResult.totalTests++;
-				if (!((AbstractBuggle) e).isCarryingBaggle())
-					lastResult.details += "Buggle "+e.getName()+" didn't find the baggle";
-				else
-					lastResult.passedTests++;
-			}
-	}
-
 }
diff --git a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.java b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.java
index ae07b4b..68bd489 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.java
+++ b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.java
@@ -24,93 +24,74 @@ public class ShortestPathMazeEntity extends jlm.universe.bugglequest.SimpleBuggl
 		super.setPos(i,j);
 	}
 
-	public BuggleWorld getMyWorld() {
-		return (BuggleWorld) getWorld();
+	void setIndication(int x, int y, int i) {
+		BuggleWorldCell c = ((BuggleWorld) world).getCell(x,y);
+		c.setContent(""+i);
 	}
-
-	/* BEGIN TEMPLATE */
-	/* BEGIN SOLUTION */
-	// tools functions
-	public BuggleWorldCell bottomCell(int x, int y) {
-		return getMyWorld().getCell(x, (y + 1) % getWorldHeight());
+	int getIndication(int x, int y) {
+		BuggleWorldCell c = ((BuggleWorld) world).getCell(x,y);
+		if (c.hasContent())
+			return Integer.parseInt(c.getContent());
+		return 9999;
 	}
-
-	public BuggleWorldCell rightCell(int x, int y) {
-		return getMyWorld().getCell((x + 1) % getWorldWidth(), y); 
-	}  
-
-	public BuggleWorldCell topCell(int x, int y) {
-		return getMyWorld().getCell(x, ( y + getWorldHeight() - 1) % getWorldHeight());
+	boolean hasBaggle(int x, int y) {
+		return ((BuggleWorld) world).getCell(x,y).hasBaggle();
 	}
-
-	public BuggleWorldCell leftCell(int x, int y) {
-		return getMyWorld().getCell((x + getWorldWidth() - 1) % getWorldWidth(), y); 
-	}  
-
-	public boolean hasTopWall(int x, int y) {
-		return getMyWorld().getCell(x, y).hasTopWall();
+	boolean hasTopWall(int x, int y) {
+		return ((BuggleWorld) world).getCell(x,y).hasTopWall();
+	}
+	boolean hasLeftWall(int x, int y) {
+		return ((BuggleWorld) world).getCell(x,y).hasLeftWall();
 	}
 
-	public boolean hasLeftWall(int x, int y) {
-		return getMyWorld().getCell(x, y).hasLeftWall(); 
-	}  
-
+	/* BEGIN TEMPLATE */
+	/* BEGIN SOLUTION */
+	// tools functions
 	public boolean hasRightWall(int x, int y) {
-		return getMyWorld().getCell((x + 1) % getWorldWidth(), y).hasLeftWall(); 
+		return hasLeftWall((x + 1) % getWorldWidth(), y); 
 	}  
 
 	public boolean hasBottomWall(int x, int y) {
-		return getMyWorld().getCell(x, (y + 1) % getWorldHeight()).hasTopWall();
+		return hasTopWall(x, (y + 1) % getWorldHeight());
 	}
 
 
 	public boolean setValueIfLess(int x, int y, int val) {
-		BuggleWorldCell cell = getMyWorld().getCell(x,y); 
-
-		if (! cell.hasContent()) {
-			cell.setContentFromInt(val);
+		int existing = getIndication(x, y);
+		if (val < existing) {
+			setIndication(x, y, val);
 			return true;
-		} else {
-			int currentVal = cell.getContentAsInt();
-			if (val < currentVal) {
-				cell.setContentFromInt(val); 
-				return true;  
-			}
 		}
-
 		return false;
 	}
 
 	public void evaluatePaths() {
 		// looking for labyrinth exit	
 		for (int x = 0; x < getWorldWidth(); x++)
-			for (int y = 0; y < getWorldHeight(); y++) {       
-				BuggleWorldCell c = getMyWorld().getCell(x,y);
-				if (c.hasBaggle())
-					c.setContentFromInt(0);   
-			}
+			for (int y = 0; y < getWorldHeight(); y++)        
+				if (hasBaggle(x,y))
+					setIndication(x, y, 0);
 
 		while (true) {   
 			for (int x = 0; x < getWorldWidth(); x++) {
 				for (int y = 0; y < getWorldHeight(); y++) {  
-					BuggleWorldCell c = getMyWorld().getCell(x,y); 
+					int indication = getIndication(x, y);
 					boolean changed = false;
-					if (c.hasContent()) {
-						int val = c.getContentAsInt();
+					if (indication != 9999) {
 						if (! hasBottomWall(x,y))
-							changed |= setValueIfLess(x, (y + 1) % getWorldHeight(), val + 1);
+							changed |= setValueIfLess(x, (y + 1) % getWorldHeight(), indication + 1);
 
 						if (! hasRightWall(x,y))
-							changed |= setValueIfLess((x + 1) % getWorldWidth(), y, val + 1);
+							changed |= setValueIfLess((x + 1) % getWorldWidth(), y, indication + 1);
 
 						if (! hasTopWall(x,y))
-							changed |= setValueIfLess(x, (y+getWorldHeight() - 1) % getWorldHeight(), val + 1);
+							changed |= setValueIfLess(x, (y+getWorldHeight() - 1) % getWorldHeight(), indication + 1);
 
 						if (! hasLeftWall(x,y))
-							changed |= setValueIfLess((x +getWorldWidth() - 1) % getWorldWidth(), y, val + 1);
+							changed |= setValueIfLess((x +getWorldWidth() - 1) % getWorldWidth(), y, indication + 1);
 
 						if (changed && x == getX() && y == getY())
-							return ;
+							return ; // reached the buggle, that's enough
 					}
 				}    
 			}
@@ -120,36 +101,36 @@ public class ShortestPathMazeEntity extends jlm.universe.bugglequest.SimpleBuggl
 	public void followShortestPath() {
 		while (! isOverBaggle()) {
 
-			int zx = getX();
-			int zy = getY();
-
-			int topValue = Integer.MAX_VALUE;
-			int bottomValue = Integer.MAX_VALUE;
-			int leftValue = Integer.MAX_VALUE;
-			int rightValue = Integer.MAX_VALUE;
+			int x = getX();
+			int y = getY();
 
-			if (! hasTopWall(zx, zy))
-				topValue = topCell(zx,zy).hasContent()?topCell(zx,zy).getContentAsInt():Integer.MAX_VALUE;
+			int topValue = 9999;
+			int bottomValue = 9999;
+			int leftValue = 9999;
+			int rightValue = 9999;
 
-				if (! hasBottomWall(zx, zy))
-					bottomValue = bottomCell(zx,zy).hasContent()?bottomCell(zx,zy).getContentAsInt():Integer.MAX_VALUE;
+			if (! hasTopWall(x, y))
+				topValue = getIndication(x, (y + getWorldHeight() - 1) % getWorldHeight());
 
-					if (! hasLeftWall(zx, zy))
-						leftValue = leftCell(zx,zy).hasContent()?leftCell(zx,zy).getContentAsInt():Integer.MAX_VALUE;
+			if (! hasBottomWall(x, y))
+				bottomValue = getIndication(x, (y+1) % getWorldHeight());
 
-						if (! hasRightWall(zx, zy))
-							rightValue = rightCell(zx,zy).hasContent()?rightCell(zx,zy).getContentAsInt():Integer.MAX_VALUE;
+			if (! hasLeftWall(x, y))
+				leftValue = getIndication((x +getWorldWidth() - 1) % getWorldWidth(), y);
 
-							if (topValue <= bottomValue && topValue <= leftValue && topValue <= rightValue)
-								setDirection(Direction.NORTH);
-							else if (rightValue <= topValue && rightValue <= bottomValue && rightValue <= leftValue)
-								setDirection(Direction.EAST);
-							else if (leftValue <= rightValue && leftValue <= bottomValue && leftValue <= topValue)
-								setDirection(Direction.WEST);
-							else if (bottomValue <= topValue && bottomValue <= rightValue && bottomValue <= leftValue)
-								setDirection(Direction.SOUTH);
+			if (! hasRightWall(x, y))
+				rightValue = getIndication((x + 1) % getWorldWidth(), y);
+			
+			if (topValue <= bottomValue && topValue <= leftValue && topValue <= rightValue)
+				setDirection(Direction.NORTH);
+			else if (rightValue <= topValue && rightValue <= bottomValue && rightValue <= leftValue)
+				setDirection(Direction.EAST);
+			else if (leftValue <= rightValue && leftValue <= bottomValue && leftValue <= topValue)
+				setDirection(Direction.WEST);
+			else if (bottomValue <= topValue && bottomValue <= rightValue && bottomValue <= leftValue)
+				setDirection(Direction.SOUTH);
 
-							forward();
+			forward();
 		}    
 	}
 	/* END SOLUTION */
@@ -157,7 +138,7 @@ public class ShortestPathMazeEntity extends jlm.universe.bugglequest.SimpleBuggl
 	public void run() {
 		evaluatePaths(); // write on each case the distance to the maze exit
 		followShortestPath(); // make the buggle follow the shortest path
-		pickUpBaggle(); // enjoy the baggle!           
+		pickupBaggle(); // enjoy the baggle!           
 	}
 	/* END TEMPLATE */
 }
diff --git a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.py b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.py
index b3db8de..03f3a72 100644
--- a/src/lessons/maze/shortestpath/ShortestPathMazeEntity.py
+++ b/src/lessons/maze/shortestpath/ShortestPathMazeEntity.py
@@ -1,131 +1,106 @@
+def setX(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+def setY(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+def setPos(x,y):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+
+def setIndication(x, y, i):
+    cell = entity.getWorld().getCell(x,y)
+    cell.setContent(str(i))
+
+def getIndication(x,y):    
+    cell = entity.getWorld().getCell(x,y)
+    if cell.hasContent():
+        return int(cell.getContent())
+    return 9999;
+
+def hasBaggle(x, y):
+    return entity.getWorld().getCell(x,y).hasBaggle() 
+def hasTopWall(x, y):
+    return entity.getWorld().getCell(x,y).hasTopWall() 
+def hasLeftWall(x, y):
+    return entity.getWorld().getCell(x,y).hasLeftWall() 
+
 # BEGIN SOLUTION
-  // tools functions
-	public BuggleWorldCell bottomCell(int x, int y) {
-	    return getMyWorld().getCell(x, (y + 1) % getWorldHeight());
-	}
-    
-	public BuggleWorldCell rightCell(int x, int y) {
-	    return getMyWorld().getCell((x + 1) % getWorldWidth(), y); 
-	}  
-    
-	public BuggleWorldCell topCell(int x, int y) {
-	    return getMyWorld().getCell(x, ( y + getWorldHeight() - 1) % getWorldHeight());
-	}
-    
-	public BuggleWorldCell leftCell(int x, int y) {
-	    return getMyWorld().getCell((x + getWorldWidth() - 1) % getWorldWidth(), y); 
-	}  
-    
-	public boolean hasTopWall(int x, int y) {
-	    return getMyWorld().getCell(x, y).hasTopWall();
-	}
-    
-	public boolean hasLeftWall(int x, int y) {
-	    return getMyWorld().getCell(x, y).hasLeftWall(); 
-	}  
-    
-	public boolean hasRightWall(int x, int y) {
-	    return getMyWorld().getCell((x + 1) % getWorldWidth(), y).hasLeftWall(); 
-	}  
-    
-	public boolean hasBottomWall(int x, int y) {
-	    return getMyWorld().getCell(x, (y + 1) % getWorldHeight()).hasTopWall();
-	}
-    
-    
-	public boolean setValueIfLess(int x, int y, int val) {
-		BuggleWorldCell cell = getMyWorld().getCell(x,y); 
-            
-            if (! cell.hasContent()) {
-                cell.setContentFromInt(val);
-                return true;
-            } else {
-                int currentVal = cell.getContentAsInt();
-                if (val < currentVal) {
-                    cell.setContentFromInt(val); 
-                    return true;  
-            }
-            }
+def hasRightWall(x,y):
+    return hasLeftWall((x + 1) % getWorldWidth(), y) 
+
+def hasBottomWall(x, y):
+    return hasTopWall(x, (y + 1) % getWorldHeight());
+
+def setValueIfLess(x, y, val):
+    if val < getIndication(x, y) :
+        setIndication(x, y, val)
+        return True
+
+    return False
+
+def evaluatePaths():
+    # looking for labyrinth exit    
+    for x in range(getWorldWidth()):
+        for y in range(getWorldHeight()):     
+            if hasBaggle(x,y):
+                setIndication(x, y, 0);
+
+    while (True):
+        for x in range(getWorldWidth()):
+            for y in range(getWorldHeight()):
+                indication = getIndication(x, y)
                 
-                return false;
-	}
-    
-	public void evaluatePaths() {
-	 	// looking for labyrinth exit	
-		for (int x = 0; x < getWorldWidth(); x++)
-			for (int y = 0; y < getWorldHeight(); y++) {       
-				BuggleWorldCell c = getMyWorld().getCell(x,y);
-				if (c.hasBaggle())
-					c.setContentFromInt(0);   
-        }
-        
-		while (true) {   
-			for (int x = 0; x < getWorldWidth(); x++) {
-				for (int y = 0; y < getWorldHeight(); y++) {  
-					BuggleWorldCell c = getMyWorld().getCell(x,y); 
-					boolean changed = false;
-					if (c.hasContent()) {
-						int val = c.getContentAsInt();
-						if (! hasBottomWall(x,y))
-							changed |= setValueIfLess(x, (y + 1) % getWorldHeight(), val + 1);
-                        
-						if (! hasRightWall(x,y))
-							changed |= setValueIfLess((x + 1) % getWorldWidth(), y, val + 1);
-                        
-						if (! hasTopWall(x,y))
-							changed |= setValueIfLess(x, (y+getWorldHeight() - 1) % getWorldHeight(), val + 1);
-                        
-						if (! hasLeftWall(x,y))
-							changed |= setValueIfLess((x +getWorldWidth() - 1) % getWorldWidth(), y, val + 1);
-                        
-						if (changed && x == getX() && y == getY())
-							return ;
-                }
-	   			}    
-        }
-    }
-	}
-    
-	public void followShortestPath() {
-		while (! isOverBaggle()) {
-            
-			int zx = getX();
-			int zy = getY();
-            
-			int topValue = Integer.MAX_VALUE;
-			int bottomValue = Integer.MAX_VALUE;
-			int leftValue = Integer.MAX_VALUE;
-			int rightValue = Integer.MAX_VALUE;
-            
-			if (! hasTopWall(zx, zy))
-				topValue = topCell(zx,zy).hasContent()?topCell(zx,zy).getContentAsInt():Integer.MAX_VALUE;
-            
-			if (! hasBottomWall(zx, zy))
-				bottomValue = bottomCell(zx,zy).hasContent()?bottomCell(zx,zy).getContentAsInt():Integer.MAX_VALUE;
-            
-			if (! hasLeftWall(zx, zy))
-				leftValue = leftCell(zx,zy).hasContent()?leftCell(zx,zy).getContentAsInt():Integer.MAX_VALUE;
-            
-			if (! hasRightWall(zx, zy))
-				rightValue = rightCell(zx,zy).hasContent()?rightCell(zx,zy).getContentAsInt():Integer.MAX_VALUE;
+                changed = False
+                if indication != 9999 :
+
+                    if not hasBottomWall(x,y):
+                        changed = setValueIfLess(x, (y + 1) % getWorldHeight(), indication + 1) or changed
+
+                    if not hasRightWall(x,y) :
+                        changed = setValueIfLess((x + 1) % getWorldWidth(), y, indication + 1) or changed
+
+                    if not hasTopWall(x,y) :
+                        changed = setValueIfLess(x, (y+getWorldHeight() - 1) % getWorldHeight(), indication + 1) or changed
+
+                    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():
+        x = getX()
+        y = getY()
+
+        topValue = 9999
+        bottomValue = 9999
+        leftValue = 9999
+        rightValue = 9999
+
+        if not hasTopWall(x,y):
+            topValue = getIndication(x, (y + getWorldHeight() - 1) % getWorldHeight());
+
+        if not hasBottomWall(x, y) :
+            bottomValue = getIndication(x, (y+1) % getWorldHeight());
+
+        if not hasLeftWall(x, y) :
+            leftValue = getIndication((x +getWorldWidth() - 1) % getWorldWidth(), y);
+
+        if not hasRightWall(x, y) :
+            rightValue = getIndication((x + 1) % getWorldWidth(), y);
             
-			if (topValue <= bottomValue && topValue <= leftValue && topValue <= rightValue)
-				setDirection(Direction.NORTH);
-			else if (rightValue <= topValue && rightValue <= bottomValue && rightValue <= leftValue)
-				setDirection(Direction.EAST);
-			else if (leftValue <= rightValue && leftValue <= bottomValue && leftValue <= topValue)
-				setDirection(Direction.WEST);
-			else if (bottomValue <= topValue && bottomValue <= rightValue && bottomValue <= leftValue)
-				setDirection(Direction.SOUTH);
-			
-			forward();
-		}    
-	}
-	/* END SOLUTION */
-    
-	public void run() {
-        evaluatePaths(); // write on each case the distance to the maze exit
-        followShortestPath(); // make the buggle follow the shortest path
-        pickUpBaggle(); // enjoy the baggle!           
-	}
+        if topValue <= bottomValue and topValue <= leftValue and topValue <= rightValue :
+            setDirection(Direction.NORTH)
+        elif rightValue <= topValue and rightValue <= bottomValue and rightValue <= leftValue :
+            setDirection(Direction.EAST)
+        elif leftValue <= rightValue and leftValue <= bottomValue and leftValue <= topValue :
+            setDirection(Direction.WEST)
+        elif bottomValue <= topValue and bottomValue <= rightValue and bottomValue <= leftValue :
+            setDirection(Direction.SOUTH)
+
+        forward();
+
+evaluatePaths()      # write on each case the distance to the maze exit
+followShortestPath() # make the buggle follow the shortest path
+pickupBaggle()       # enjoy the baggle!           
+
 # END SOLUTION
diff --git a/src/lessons/maze/shortestpath/WallFollowerMaze.map b/src/lessons/maze/shortestpath/WallFollowerMaze.map
index d970e9e..ecd28e9 100644
--- a/src/lessons/maze/shortestpath/WallFollowerMaze.map
+++ b/src/lessons/maze/shortestpath/WallFollowerMaze.map
@@ -1,146 +1,129 @@
-BuggleWorld: Labyrinth
-Size: 12x12
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,153),true,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
+BuggleWorld: Labyrinth
+Size: 12x12
+Buggle(7,10): north,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,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,topwall,noleftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,3): white,nobaggle,notopwall,leftwall,
+Cell(5,4): white,nobaggle,notopwall,leftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,noleftwall,
+Cell(6,5): white,nobaggle,notopwall,leftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,notopwall,leftwall,
+Cell(6,9): white,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,leftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,baggle,topwall,leftwall,
+Cell(11,6): white,nobaggle,notopwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMaze-answer0.map b/src/lessons/maze/wallfindfollow/WallFindFollowMaze-answer0.map
new file mode 100644
index 0000000..ca447b9
--- /dev/null
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMaze-answer0.map
@@ -0,0 +1,129 @@
+BuggleWorld: Labyrinth
+Size: 12x12
+Buggle(11,5): north,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,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,topwall,noleftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,3): white,nobaggle,notopwall,leftwall,
+Cell(5,4): white,nobaggle,notopwall,leftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,noleftwall,
+Cell(6,5): white,nobaggle,notopwall,leftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,notopwall,leftwall,
+Cell(6,9): white,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,leftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,nobaggle,topwall,leftwall,
+Cell(11,6): white,nobaggle,notopwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMaze-answer1.map b/src/lessons/maze/wallfindfollow/WallFindFollowMaze-answer1.map
new file mode 100644
index 0000000..4122589
--- /dev/null
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMaze-answer1.map
@@ -0,0 +1,129 @@
+BuggleWorld: Another labyrinth
+Size: 12x12
+Buggle(11,5): 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,topwall,leftwall,
+Cell(0,10): white,nobaggle,notopwall,leftwall,
+Cell(0,11): white,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,topwall,noleftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,4): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,leftwall,
+Cell(6,5): white,nobaggle,notopwall,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,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,5): white,nobaggle,notopwall,leftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,topwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,noleftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,6): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,nobaggle,topwall,noleftwall,
+Cell(11,6): white,nobaggle,topwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,noleftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMaze.fr.html b/src/lessons/maze/wallfindfollow/WallFindFollowMaze.fr.html
index 109e9b9..4beb70d 100644
--- a/src/lessons/maze/wallfindfollow/WallFindFollowMaze.fr.html
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMaze.fr.html
@@ -5,12 +5,11 @@ commence plus au même emplacement. En particulier, il n'a plus de mur à sa
 gauche dès le départ.</p>
 
 <p>Ceci engendre que la méthode que vous avez écrite à l'exercice précédent ne
-fonctionne plus ici. Si vous cliquez sur le bouton 'run' sans modification
-du code, votre buggle va probablement commencer à tourner sur les quatres
-cases à côté de sa position de départ (si ça n'est pas le cas, et bien, vous
-n'avez pas réellement suivi la mission de l'exercice précédent. Sentez vous
-chanceux et passez à l'exercice suivant une fois que vous aurez lu ce
-texte).</p>
+fonctionne plus ici. Si vous l'utilisez ici sans modification, votre buggle
+va probablement commencer à tourner sur les quatres cases à côté de sa
+position de départ (si ça n'est pas le cas, et bien, vous n'avez pas
+réellement suivi la mission de l'exercice précédent. Sentez vous chanceux et
+passez à l'exercice suivant une fois que vous aurez lu ce texte).</p>
 
 <p>C'est parce que votre méthode <code>keepHandOnSideWall()</code> a une
 <b>pré-condition</b> implicite : la méthode marche bien si et seulement si
@@ -24,7 +23,7 @@ peuvent même parfois prouver que le code marche correctement.</p>
 <p>
 Réparer le problème devrait être très facile. Assurez-vous simplement que la
 pré-condition de <code>keepHandOnSideWall()</code> est vérifiée avant de
-l'appeler Pour ce faire, mettez à jour votre méthode run() pour tout d'abord
+l'appeler Pour ce faire, mettez à jour votre code pour tout d'abord
 rechercher à avoir un mur à sa gauche avant de rentrer dans la grande boucle
 <code>while</code>.
 </p>
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMaze.html b/src/lessons/maze/wallfindfollow/WallFindFollowMaze.html
index fe8028b..8a5b61f 100644
--- a/src/lessons/maze/wallfindfollow/WallFindFollowMaze.html
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMaze.html
@@ -5,11 +5,11 @@ start at the same location. In particular, it does not have any wall
 to its left at the beginning.</p>
 
 <p>As a result, the method you wrote for the previous exercise
-probably don't work for this one. If you click on the run button with
+probably don't work for this one. If you use it here with
 no modification, your buggle probably start looping over the four free
 cells around its start position (if that's not the case, well, you
 didn't really stick to the mission on previous exercise. Feel lucky
-and move to the next one once you've read this text).</p>
+and proceed to the next :)</p>
 
 <p>This is because your <code>keepHandOnSideWall()</code> method has
 an implicit <b>pre-condition</b>: it works well if and only if the
@@ -23,6 +23,6 @@ to prove that the code works correctly.</p>
 <p>
 Fixing the problem should be very easy. Simply make sure that the
 pre-condition of <code>keepHandOnSideWall()</code> is verified before
-calling it. For that, update your run() method to first look for a
+calling it. For that, update your code to first look for a
 wall on its left before the big <code>while</code> loop.
 </p>
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMaze.java b/src/lessons/maze/wallfindfollow/WallFindFollowMaze.java
index 9a73824..d5fa105 100644
--- a/src/lessons/maze/wallfindfollow/WallFindFollowMaze.java
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMaze.java
@@ -1,68 +1,24 @@
 package lessons.maze.wallfindfollow;
 
-import java.awt.Color;
+import java.io.IOException;
 
-import jlm.core.model.lesson.ExecutionProgress;
 import jlm.core.model.lesson.ExerciseTemplated;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.Entity;
+import jlm.universe.BrokenWorldFileException;
 import jlm.universe.World;
-import jlm.universe.bugglequest.AbstractBuggle;
-import jlm.universe.bugglequest.Buggle;
 import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
-import jlm.universe.bugglequest.exception.NoBaggleUnderBuggleException;
 
 public class WallFindFollowMaze extends ExerciseTemplated {
 
-	public WallFindFollowMaze(Lesson lesson) {
+	public WallFindFollowMaze(Lesson lesson) throws IOException, BrokenWorldFileException {
 		super(lesson);
 		tabName = "Escaper";
 		nameOfCorrectionEntity = "lessons.maze.wallfollower.WallFollowerMazeEntity"; // Use the same entity than in previous exercise
 		
-		/* Create initial situation */
-		BuggleWorld myWorlds[] = new BuggleWorld[2];
-		myWorlds[0] = new BuggleWorld("Labyrinth", 1, 1); 
-		loadMap(myWorlds[0],"lessons/maze/wallfollower/WallFollowerMaze");
-		new Buggle(myWorlds[0], "Thésée", 4, 10, Direction.NORTH, Color.black, Color.lightGray);
-		
-		myWorlds[1] = new BuggleWorld("Labyrinth2", 1, 1); 
-		loadMap(myWorlds[1],"lessons/maze/wallfollower/WallFollowerMaze2");
-		new Buggle(myWorlds[1], "ZoroRorronoa", 4, 10, Direction.NORTH, Color.black, Color.lightGray);
-		
-		setup(myWorlds);
-	}
-
-	
-	// to shorten loading time
-	@Override
-	protected void computeAnswer(){
-		AbstractBuggle b = (AbstractBuggle)answerWorld.get(0).getEntities().get(0);
-		b.setPosFromLesson(11, 5);
-		
-		AbstractBuggle b2 = (AbstractBuggle)answerWorld.get(1).getEntities().get(0);
-		b2.setPosFromLesson(11, 5);
-		try {
-			b.pickUpBaggle();
-			b2.pickUpBaggle();
-		} catch (NoBaggleUnderBuggleException e) {
-			e.printStackTrace();
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}		
-	}
-	
-	@Override
-	public void check() {
-		lastResult = new ExecutionProgress();
-		for (World w: this.getWorlds(WorldKind.CURRENT)) 
-			for (Entity e:w.getEntities()) {
-				lastResult.totalTests++;
-				if (!((AbstractBuggle) e).isCarryingBaggle())
-					lastResult.details += "Buggle "+e.getName()+" didn't find the baggle";
-				else
-					lastResult.passedTests++;
-			}
+		setup(new World[] {
+				BuggleWorld.newFromFile("lessons/maze/wallfindfollow/WallFindFollowMaze"),
+				BuggleWorld.newFromFile("lessons/maze/wallfindfollow/WallFindFollowMaze2")
+				
+		});
 	}
 }
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMaze.map b/src/lessons/maze/wallfindfollow/WallFindFollowMaze.map
new file mode 100644
index 0000000..477ca6e
--- /dev/null
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMaze.map
@@ -0,0 +1,129 @@
+BuggleWorld: Labyrinth
+Size: 12x12
+Buggle(4,10): north,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,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,topwall,noleftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,3): white,nobaggle,notopwall,leftwall,
+Cell(5,4): white,nobaggle,notopwall,leftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,noleftwall,
+Cell(6,5): white,nobaggle,notopwall,leftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,notopwall,leftwall,
+Cell(6,9): white,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,leftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,baggle,topwall,leftwall,
+Cell(11,6): white,nobaggle,notopwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMaze2.map b/src/lessons/maze/wallfindfollow/WallFindFollowMaze2.map
new file mode 100644
index 0000000..8370b1b
--- /dev/null
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMaze2.map
@@ -0,0 +1,129 @@
+BuggleWorld: Another labyrinth
+Size: 12x12
+Buggle(4,10): north,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,topwall,leftwall,
+Cell(0,10): white,nobaggle,notopwall,leftwall,
+Cell(0,11): white,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,topwall,noleftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,4): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,leftwall,
+Cell(6,5): white,nobaggle,notopwall,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,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,5): white,nobaggle,notopwall,leftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,topwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,noleftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,6): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,baggle,topwall,noleftwall,
+Cell(11,6): white,nobaggle,topwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,noleftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.py b/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.py
new file mode 100644
index 0000000..f9c3ed1
--- /dev/null
+++ b/src/lessons/maze/wallfindfollow/WallFindFollowMazeEntity.py
@@ -0,0 +1,26 @@
+def setX(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+def setY(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+def setPos(x,y):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+
+# BEGIN SOLUTION 
+def stepHandOnWall():
+    # PRE: we have a wall on the left
+    # POST: we still have the same wall on the left, are one step ahead
+    while not isFacingWall():
+        forward()
+        turnLeft() # change to turnRight to get a right follower
+    turnRight() # change to turnLeft to get a right follower
+
+# make sure that we have a wall to the left
+turnLeft()
+while not isFacingWall():
+    forward()
+turnRight()
+
+while not isOverBaggle():
+    stepHandOnWall()
+pickupBaggle()
+# END SOLUTION
diff --git a/src/lessons/maze/wallfollower/WallFollowerMaze-answer0.map b/src/lessons/maze/wallfollower/WallFollowerMaze-answer0.map
new file mode 100644
index 0000000..ca447b9
--- /dev/null
+++ b/src/lessons/maze/wallfollower/WallFollowerMaze-answer0.map
@@ -0,0 +1,129 @@
+BuggleWorld: Labyrinth
+Size: 12x12
+Buggle(11,5): north,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,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,topwall,noleftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,3): white,nobaggle,notopwall,leftwall,
+Cell(5,4): white,nobaggle,notopwall,leftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,noleftwall,
+Cell(6,5): white,nobaggle,notopwall,leftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,notopwall,leftwall,
+Cell(6,9): white,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,leftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,nobaggle,topwall,leftwall,
+Cell(11,6): white,nobaggle,notopwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfollower/WallFollowerMaze-answer1.map b/src/lessons/maze/wallfollower/WallFollowerMaze-answer1.map
new file mode 100644
index 0000000..4122589
--- /dev/null
+++ b/src/lessons/maze/wallfollower/WallFollowerMaze-answer1.map
@@ -0,0 +1,129 @@
+BuggleWorld: Another labyrinth
+Size: 12x12
+Buggle(11,5): 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,topwall,leftwall,
+Cell(0,10): white,nobaggle,notopwall,leftwall,
+Cell(0,11): white,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,topwall,noleftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,4): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,leftwall,
+Cell(6,5): white,nobaggle,notopwall,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,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,5): white,nobaggle,notopwall,leftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,topwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,noleftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,6): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,nobaggle,topwall,noleftwall,
+Cell(11,6): white,nobaggle,topwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,noleftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfollower/WallFollowerMaze.fr.html b/src/lessons/maze/wallfollower/WallFollowerMaze.fr.html
index 16d0ded..a5ccc6f 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMaze.fr.html
+++ b/src/lessons/maze/wallfollower/WallFollowerMaze.fr.html
@@ -6,9 +6,9 @@ pas suffisant, il va falloir être intelligent !</p>
 <p>Heureusement, ce labyrinthe est plus simple qu'il n'y paraît: tous les murs
 sont connectés les uns aux autres. Pour sortir de ce genre de labyrinthe, il
 suffit à votre buggle de longer un mur (celui à sa droite, ou celui à sa
-gauche: c'est sans importance). Et, tout en gardant sa patte posée sur ce
-mur, votre buggle doit avancer jusqu'à ce qu'il trouve la sortie du
-labyrinthe et ce biscuit qu'il apprécie tant.</p>
+gauche: c'est sans importance). Tout en gardant sa patte posée sur ce mur,
+votre buggle doit avancer jusqu'à ce qu'il trouve la sortie du labyrinthe et
+ce biscuit qu'il apprécie tant.</p>
 
 <p>Cet algorithme fonctionne ici car il n'y a pas d'île de murs isolés, ce qui
 fait que la buggle ne peut pas boucler autour des murs sans rencontrer le
@@ -17,23 +17,20 @@ biscuit qu'elle cherche.</p>
 <h3>Objectif de cet exercice</h3><a name="Objectifs"> L'objectif de cet exercice est d'écrire un algorithme
 permettant à votre buggle de sortir du labyrinthe.
 
-<p>Comme dit dans l'introduction, il est sans importance de décider de suivre
-le mur droit ou le mur gauche. Simplement, la démo suit le mur gauche, et il
-serait donc avisé d'en faire de même dans votre solution pour simplifier la
-comparaison de votre solution et de la démo.</p> 
+<p>Comme dit précédement, le mur choisi n'a pas d'importance. Simplement, la
+démo suit le mur gauche, et il serait donc avisé d'en faire de même pour
+simplifier la comparaison de votre solution et de la démo.</p> 
 
-<p>Écrivez une méthode <code>void keepHandOnSideWall()</code> qui fait avancer
+<p>Écrivez une méthode <code>keepHandOnSideWall()</code> qui fait avancer
 votre buggle d'une case tout en gardant la patte sur le mur du côté
-choisi. Vous devez donc vous assurer que votre buggle garde toujours la
-patte
+choisi. Vous devez vous assurer que votre buggle garde toujours la patte
 sur le mur et également qu'il ne risque pas de percuter un mur. Vous pouvez
 regarder l'indice (hint) si vous êtes coincés, mais vous devriez d'abord
-essayer de le faire sans l'indice.</p> 
+essayer de le faire par vous-même.</p> 
 
-<p>Enfin, écrivez la méthode <code>void run()</code> qui cherche le mur le plus
-proche (méthode <code>void putHandOnSideWall()</code>), puis parcours le
-labyrinthe (méthode <code>void keepHandOnSideWall()</code>) jusqu'à trouver
-la sortie et le biscuit. Enfin il ne faut pas oubliez de prendre la baggle.</p>
+<p>Enfin, écrivez l'algorithme complet qui parcourt le labyrinthe pas à pas
+jusqu'à
+trouver le biscuit et la sortie. N'oubliez pas de prendre le baggle.</p>
 
 <div class="tip" id="tip-1" alt="Je suis perdu, je voudrais plus d'indications">
 <p>Quand votre buggle a un mur à sa gauche, il faut considérer trois situations
@@ -60,6 +57,6 @@ buggle à la fin de l'étape.</p>
 </table>
 <p>Si vous faites un <code>turnRight()</code> dans tous les cas à la fin de
 votre fonction, il est possible de l'écrire en trois lignes avec une boucle
-<code>while()</code>.</p>
+<code>while</code>.</p>
 </div>
 
diff --git a/src/lessons/maze/wallfollower/WallFollowerMaze.html b/src/lessons/maze/wallfollower/WallFollowerMaze.html
index 98e372a..735b9f8 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMaze.html
+++ b/src/lessons/maze/wallfollower/WallFollowerMaze.html
@@ -3,34 +3,34 @@
 <p>This time, the maze is a bit more complicated. Random won't be enough, we
 ough to be smart!</p>
 
-<p>Hopefully, this maze is simpler that it seems at the first glance:
+<p>The good news is that this maze is simpler that it seems at the first glance:
 every wall are connected to each other. To get out of this kind of
 maze, the buggle only have to follow a wall (the one on its left or
 the one on its right, it doesn't matter).  While keeping a paw on the
 wall, the buggle must move forward until it finds the maze exit
 and this biscuit it loves so much.</p>
 
-<p>This algorithm works here because there is no island of isolated
+<p>This works here because there is no island of isolated
 walls, so our buggle cannot loop around for ever without encountering
-the baggle it looks for.</p>
+its baggle.</p>
 
 <h3>Exercise goal</h3>The goal of this exercise is to write an algorithm allowing the buggle to
 get out of this maze.
 
-<p>As said in the introduction, it is exactly the same if you decide
+<p>As said earlier, it does not matter whether you decide
 to follow the left wall or the right one. Simply, the demo follows the
 left one, so you should do the same in your solution to ease the
 comparison of your solution and the demo.</p> 
 
-<p>Write a method <code>void keepHandOnSideWall()</code> which lets the buggle
+<p>Write a method <code>keepHandOnSideWall()</code> which lets the buggle
 move one step forward while keeping the paw on the wall of the selected
-side. You thus have to ensure that the buggle always keep the paw on the
+side. You must ensure that the buggle always keep the paw on the
 wall, but also that it won't crash into a wall. You can check the tip
 for more info on this, but only do so if you're stuck. Try to do it
 without the tip first.</p> 
 
-<p>Then, write a <code>run()</code> method which traverse the maze step
-by step (using  <code>void keepHandOnSideWall()</code>) until it finds
+<p>Then, write the whole algorithm to traverse the maze step
+by step (using  <code>keepHandOnSideWall()</code>) until it finds
 the biscuit and the exit. Don't forget to pick the baggle up once
 you've found it.</p>
 
@@ -59,6 +59,6 @@ end after one step.</p>
 </table>
 <p>If you do a <code>turnRight()</code> in any case at the end of your
 function, it's possible to write it in 3 lines with a
-<code>while()</code> loop.</p>
+<code>while</code> loop.</p>
 </div>
 
diff --git a/src/lessons/maze/wallfollower/WallFollowerMaze.java b/src/lessons/maze/wallfollower/WallFollowerMaze.java
index 6a54170..02f2e5a 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMaze.java
+++ b/src/lessons/maze/wallfollower/WallFollowerMaze.java
@@ -1,68 +1,22 @@
 package lessons.maze.wallfollower;
 
-import java.awt.Color;
+import java.io.IOException;
 
-import jlm.core.model.lesson.ExecutionProgress;
 import jlm.core.model.lesson.ExerciseTemplated;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.Entity;
+import jlm.universe.BrokenWorldFileException;
 import jlm.universe.World;
-import jlm.universe.bugglequest.AbstractBuggle;
-import jlm.universe.bugglequest.Buggle;
 import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
-import jlm.universe.bugglequest.exception.NoBaggleUnderBuggleException;
 
 public class WallFollowerMaze extends ExerciseTemplated {
 
-	public WallFollowerMaze(Lesson lesson) {
+	public WallFollowerMaze(Lesson lesson) throws IOException, BrokenWorldFileException {
 		super(lesson);
 		tabName = "Escaper";
 				
-		/* Create initial situation */
-		BuggleWorld myWorlds[] = new BuggleWorld[2];
-		
-		myWorlds[0] = new BuggleWorld("Labyrinth", 1, 1); 
-		loadMap(myWorlds[0],"lessons/maze/wallfollower/WallFollowerMaze");
-		new Buggle(myWorlds[0], "Thésée", 7, 10, Direction.NORTH, Color.black, Color.lightGray);
-		
-		myWorlds[1] = new BuggleWorld("Labyrinth2", 1, 1); 
-		loadMap(myWorlds[1],"lessons/maze/wallfollower/WallFollowerMaze2");
-		new Buggle(myWorlds[1], "ZoroRorronoa", 7, 10, Direction.NORTH, Color.black, Color.lightGray);
-		
-		setup(myWorlds);
-	}
-
-	
-	// to shorten loading time
-	@Override
-	protected void computeAnswer(){
-		AbstractBuggle b = (AbstractBuggle)answerWorld.get(0).getEntities().get(0);
-		b.setPosFromLesson(11, 5);
-		
-		AbstractBuggle b2 = (AbstractBuggle)answerWorld.get(1).getEntities().get(0);
-		b2.setPosFromLesson(11, 5);
-		try {
-			b.pickUpBaggle();
-			b2.pickUpBaggle();
-		} catch (NoBaggleUnderBuggleException e) {
-			e.printStackTrace();
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}		
-	}
-	
-	@Override
-	public void check() {
-		lastResult = new ExecutionProgress();
-		for (World w: this.getWorlds(WorldKind.CURRENT)) 
-			for (Entity e:w.getEntities()) {
-				lastResult.totalTests++;
-				if (!((AbstractBuggle) e).isCarryingBaggle())
-					lastResult.details += "Buggle "+e.getName()+" didn't find the baggle";
-				else
-					lastResult.passedTests++;
-			}
+		setup(new World[] {
+				BuggleWorld.newFromFile("lessons/maze/wallfollower/WallFollowerMaze"),
+				BuggleWorld.newFromFile("lessons/maze/wallfollower/WallFollowerMaze2")
+		});
 	}
 }
diff --git a/src/lessons/maze/wallfollower/WallFollowerMaze.map b/src/lessons/maze/wallfollower/WallFollowerMaze.map
index d970e9e..ecd28e9 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMaze.map
+++ b/src/lessons/maze/wallfollower/WallFollowerMaze.map
@@ -1,146 +1,129 @@
-BuggleWorld: Labyrinth
-Size: 12x12
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,153),true,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
+BuggleWorld: Labyrinth
+Size: 12x12
+Buggle(7,10): north,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,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,topwall,noleftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,3): white,nobaggle,notopwall,leftwall,
+Cell(5,4): white,nobaggle,notopwall,leftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,noleftwall,
+Cell(6,5): white,nobaggle,notopwall,leftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(6,7): white,nobaggle,notopwall,leftwall,
+Cell(6,8): white,nobaggle,notopwall,leftwall,
+Cell(6,9): white,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,leftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,baggle,topwall,leftwall,
+Cell(11,6): white,nobaggle,notopwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfollower/WallFollowerMaze2.map b/src/lessons/maze/wallfollower/WallFollowerMaze2.map
index a1899a6..706c8e6 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMaze2.map
+++ b/src/lessons/maze/wallfollower/WallFollowerMaze2.map
@@ -1,146 +1,129 @@
-BuggleWorld: Another labyrinth
-Size: 12x12
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,153),true,true,false] ; cell
-[(255,255,255),false,true,true] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
-[(255,255,255),false,true,false] ; cell
-[(255,255,255),false,false,true] ; cell
-[(255,255,255),false,false,false] ; cell
+BuggleWorld: Another labyrinth
+Size: 12x12
+Buggle(7,10): north,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,topwall,leftwall,
+Cell(0,10): white,nobaggle,notopwall,leftwall,
+Cell(0,11): white,nobaggle,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,1): white,nobaggle,notopwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,topwall,noleftwall,
+Cell(1,9): white,nobaggle,topwall,noleftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,1): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,notopwall,leftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(2,5): white,nobaggle,notopwall,leftwall,
+Cell(2,6): white,nobaggle,notopwall,leftwall,
+Cell(2,7): white,nobaggle,notopwall,leftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(2,11): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,3): white,nobaggle,topwall,noleftwall,
+Cell(3,4): white,nobaggle,topwall,noleftwall,
+Cell(3,5): white,nobaggle,topwall,leftwall,
+Cell(3,6): white,nobaggle,notopwall,leftwall,
+Cell(3,7): white,nobaggle,notopwall,leftwall,
+Cell(3,8): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,leftwall,
+Cell(3,10): white,nobaggle,notopwall,leftwall,
+Cell(3,11): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,leftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,4): white,nobaggle,topwall,noleftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,leftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,nobaggle,topwall,noleftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,5): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,nobaggle,topwall,noleftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,notopwall,leftwall,
+Cell(6,4): white,nobaggle,topwall,leftwall,
+Cell(6,5): white,nobaggle,notopwall,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,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(6,11): white,nobaggle,topwall,noleftwall,
+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,5): white,nobaggle,notopwall,leftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,7): white,nobaggle,notopwall,leftwall,
+Cell(7,8): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,topwall,leftwall,
+Cell(7,11): white,nobaggle,topwall,noleftwall,
+Cell(8,0): white,nobaggle,topwall,leftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,3): white,nobaggle,notopwall,leftwall,
+Cell(8,4): white,nobaggle,topwall,noleftwall,
+Cell(8,5): white,nobaggle,notopwall,leftwall,
+Cell(8,6): white,nobaggle,notopwall,leftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,8): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,nobaggle,topwall,noleftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,leftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,topwall,noleftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,8): white,nobaggle,topwall,noleftwall,
+Cell(9,9): white,nobaggle,topwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,nobaggle,topwall,noleftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,topwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,6): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,topwall,noleftwall,
+Cell(10,9): white,nobaggle,topwall,noleftwall,
+Cell(10,10): white,nobaggle,topwall,noleftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,notopwall,leftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,nobaggle,topwall,noleftwall,
+Cell(11,5): 255/255/153,baggle,topwall,noleftwall,
+Cell(11,6): white,nobaggle,topwall,leftwall,
+Cell(11,7): white,nobaggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,topwall,noleftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.java b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.java
index 58142d8..f87206b 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.java
+++ b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.java
@@ -53,7 +53,7 @@ public class WallFollowerMazeEntity extends jlm.universe.bugglequest.SimpleBuggl
 		while (!isOverBaggle())
 			stepHandOnWall();
 
-		pickUpBaggle();
+		pickupBaggle();
 	}
 	/* END SOLUTION */
 	/* END TEMPLATE */
diff --git a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.py b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.py
index c8c08d9..f9c3ed1 100644
--- a/src/lessons/maze/wallfollower/WallFollowerMazeEntity.py
+++ b/src/lessons/maze/wallfollower/WallFollowerMazeEntity.py
@@ -1,25 +1,26 @@
+def setX(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setX(i) in this exercise")
+def setY(i):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setY(i) in this exercise")
+def setPos(x,y):
+        errorMsg("Sorry Dave, I'm afraid I cannot let you use setPos(x,y) in this exercise")
+
 # BEGIN SOLUTION 
-  public void stepHandOnWall() {
-	    // PRE: we have a wall on the left
-	    // POST: we still have the same wall on the left, are one step ahead
-            
-            while (!isFacingWall()) {
-                forward();
-                turnLeft(); // change to turnRight to get a right follower
-            }
-            turnRight(); // change to turnLeft to get a right follower
-	}
-    
-	public void run() {
-	    // Make sure we have a wall to the left
-	    turnLeft();
-	    while (!isFacingWall())
-            forward();
-	    turnRight();
-        
-	    while (!isOverBaggle())
-            stepHandOnWall();
-        
-	    pickUpBaggle();
-	}
+def stepHandOnWall():
+    # PRE: we have a wall on the left
+    # POST: we still have the same wall on the left, are one step ahead
+    while not isFacingWall():
+        forward()
+        turnLeft() # change to turnRight to get a right follower
+    turnRight() # change to turnLeft to get a right follower
+
+# make sure that we have a wall to the left
+turnLeft()
+while not isFacingWall():
+    forward()
+turnRight()
+
+while not isOverBaggle():
+    stepHandOnWall()
+pickupBaggle()
 # END SOLUTION
diff --git a/src/lessons/meta/HanoiCreateEntity.java b/src/lessons/meta/HanoiCreateEntity.java
deleted file mode 100644
index dacb5b2..0000000
--- a/src/lessons/meta/HanoiCreateEntity.java
+++ /dev/null
@@ -1,114 +0,0 @@
-package lessons.meta;
-
-import java.util.List;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.core.model.lesson.NoSuchEntityException;
-import jlm.universe.World;
-import jlm.universe.hanoi.HanoiInvalidMove;
-
-public class HanoiCreateEntity extends MetaExercise {
-	public HanoiCreateEntity(Lesson lesson) {
-		super(lesson);
-		/* Setup the worlds */
-		HanoiMetaWorld[] w = new HanoiMetaWorld[3];
-		w[0]=new HanoiMetaWorld("HanoiWorld({8,7,6,5,4,3,2,1},{},{})",this,
-				new Integer[] {8,7,6,5,4,3,2,1}, new Integer[0], new Integer[0]);
-		w[1]=new HanoiMetaWorld("HanoiWorld({},{8,7,6,5,4,3,2,1},{})",this,
-				new Integer[0], new Integer[] {8,7,6,5,4,3,2,1}, new Integer[0]);
-		w[2]=new HanoiMetaWorld("HanoiWorld({},{},{8,7,6,5,4,3,2,1})",this,
-				new Integer[0], new Integer[0], new Integer[] {8,7,6,5,4,3,2,1});
-		new HanoiMetaEntity("Entity",w[0],this);
-		new HanoiMetaEntity("Entity",w[1],this);
-		new HanoiMetaEntity("Entity",w[2],this);
-
-		setupWorlds(w);
-
-		/* compute answer */
-		System.out.println("Compute answers "+answerWorld.size());
-		for (World it:answerWorld) { 
-			((HanoiMetaWorld)it).isAnswer=true;
-			solve((HanoiMetaWorld) it);
-		}		
-		System.out.println("Done computing answers");
-
-		/* setup the source files */
-		//		newSourceAliased(Game.JAVA,"lessons.meta.Main","jlm.lessons.meta.HanoiCreateWorld","HanoiWorld");
-		try {
-			newSourceFromFile(Game.JAVA,"HanoiEntity","src/jlm/universe/hanoi/HanoiEntity",
-			"s/HanoiCreateEntityAnswer/HanoiEntity/;");
-		} catch (NoSuchEntityException e) {
-			System.out.println("Cannot find my files. Please go fix your paths and such");
-			e.printStackTrace();
-		}
-	}
-
-	protected void solve(HanoiMetaWorld w,int src, int dst, int height) throws HanoiInvalidMove {
-		if (height == 8)
-			System.out.println("Solve("+src+","+dst+")");
-		if (height!=0) {
-			int other=-1;
-			if (src+dst==1) /* 0+1 */
-				other=2;
-			if (src+dst==2) /* 0+2 */
-				other=1;
-			if (src+dst==3) /* 1+2 */
-				other=0;
-
-			solve(w,src,other, height-1);
-			//			System.out.println("move("+src+","+dst+")");
-			w.move(src,dst);
-			solve(w,other,dst,height-1);
-		}
-	}
-	protected void solve(HanoiMetaWorld w) {
-		try {
-			for (int slot=0;slot<3;slot++)
-				if (w.getSlotSize(slot) != 0) {					
-					solve(w, slot, (slot+1)%3, w.getSlotSize(slot));
-					return; /* don't move the same slot again: in next iteration here, the slot is also full since we just filled it */ 
-				}
-		} catch (HanoiInvalidMove e) {
-			e.printStackTrace();
-		}	
-	}
-
-	@Override
-	public void run(List<Thread> runnerVect) {
-		Thread runner = new Thread(new Runnable() {
-			public void run() {
-				for (World it:currentWorld) {
-					HanoiMetaWorld w = (HanoiMetaWorld)it;
-					System.out.println("Set Servant");
-					w.setServant(compiledClasses.get(className("HanoiWorld")));
-					((HanoiMetaEntity) w.getEntity(0)).setServant(compiledClasses.get(className("HanoiEntity")));
-					w.doDelay();
-					solve(w);
-					w.getView().repaint();
-				}
-			}
-		});
-
-		runner.start();
-		runnerVect.add(runner);
-	}
-
-	@Override 
-	public void runDemo(List<Thread> runnerVect) {
-		Thread runner = new Thread(new Runnable() {
-			public void run() {
-				for (int i=0; i<initialWorld.size(); i++) { 
-					answerWorld.get(i).reset(initialWorld.get(i));
-					answerWorld.get(i).doDelay();
-					((HanoiMetaWorld)answerWorld.get(i)).isAnswer = true;
-					solve((HanoiMetaWorld) answerWorld.get(i));
-				}
-			}
-		});
-
-		runner.start();
-		runnerVect.add(runner);
-
-	}
-}
diff --git a/src/lessons/meta/HanoiCreateViewAnswer.java b/src/lessons/meta/HanoiCreateViewAnswer.java
deleted file mode 100644
index 7e06d01..0000000
--- a/src/lessons/meta/HanoiCreateViewAnswer.java
+++ /dev/null
@@ -1,98 +0,0 @@
-package lessons.meta;
-
-/* BEGIN TEMPLATE */
-import java.awt.Color;
-import java.awt.Graphics;
-import java.awt.Graphics2D;
-import java.awt.RenderingHints;
-import java.awt.geom.Rectangle2D;
-
-import javax.swing.ImageIcon;
-
-import jlm.core.ui.ResourcesCache;
-import jlm.core.ui.WorldView;
-import jlm.universe.World;
-
-
-public class HanoiCreateViewAnswer extends WorldView {
-	/* This field is mandatory because WorldView are swing components  */
-	private static final long serialVersionUID = 1L;
-	
-	/* WorldView constructors naturally take the world to render in argument */
-	public HanoiCreateViewAnswer(World w) {
-		super(w);
-	}
-
-	/** Determines whether this worldview can render a new given world
-	 * 
-	 * This method is called by JLM when the user selects a new world in the interface. 
-	 * If it returns yes, then the WorldView component is reused. If not, a new one is created.
-	 * 
-	 * This method is not often defined as the ancestor checks that the classes match 
-	 * (using world.getClass()), but you may want to override in specific settings. 
-	 * For example, BatWorldView redefines it to false to ensure that a new view is recreated each time.
-	 */
-	public boolean isWorldCompatible(World world) {
-		return super.isWorldCompatible(world);
-	}
-
-	/** Main method of the renderer: the painting one
-	 * 
-	 * This is where you actually draw the graphical representation of your world.
-	 * Any Java graphical method is just fine.
-	 */
-	@Override
-	public void paintComponent(Graphics g) {
-		/* Common setups to any such method */
-		super.paintComponent(g);		
-		Graphics2D g2 = (Graphics2D) g;
-		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
-		
-		/* This is to have the view resized to adapt to the available space
-		 * 
-		 * Change renderedX and renderedY to the virtual size of the drawing, ie, the size you are using. 
-		 *   If it's bigger than the available size for the widget, your drawing will get scaled down; 
-		 *   It will be scaled up in the other case.
-		 */
-		double renderedX = 300.;
-		double renderedY = 250.;		
-		double ratio = Math.min(((double) getWidth()) / renderedX, ((double) getHeight()) / renderedY);
-		g2.translate(Math.abs(getWidth() - ratio * renderedX)/2., Math.abs(getHeight() - ratio * renderedY)/2.);
-		g2.scale(ratio, ratio);
-		
-		/* Clear board */
-		g2.setColor(Color.white);
-		g2.fill(new Rectangle2D.Double(0., 0., renderedX, renderedY));
-		
-		HanoiMetaWorld hw = (HanoiMetaWorld)world;
-		/* Write here the code to render your world. Feel free to declare methods to factorize the code */
-		/* BEGIN SOLUTION */		
-		drawSlot(g2,hw.values(0), 50.);
-		drawSlot(g2,hw.values(1), 150.);
-		drawSlot(g2,hw.values(2), 250.);
-	}
-	
-	private void drawSlot(Graphics2D g2, Integer[] values, double xoffset) {
-		/* draw bar */
-		g2.setColor(Color.black);
-		g2.fill(new Rectangle2D.Double(xoffset-2, 55.,  2., 125.));
-		
-		/* draw discs */
-		int height = 1;
-		for (int size : values) { 
-			g2.setColor(Color.yellow);
-			g2.fill(new Rectangle2D.Double( xoffset-size*5-3, 180-(15.*height),  size*10+3, 10));
-			g2.setColor(Color.black);
-			g2.draw(new Rectangle2D.Double( xoffset-size*5-3, 180-(15.*height),  size*10+3, 10));
-			height++;
-		}
-		/* END SOLUTION */
-	}
-	
-	@Override
-	public ImageIcon getIcon() {
-		return ResourcesCache.getIcon("img/world_hanoi.png");
-	}
-
-}
-/* END TEMPLATE */
\ No newline at end of file
diff --git a/src/lessons/meta/HanoiCreateWorld.fr.html b/src/lessons/meta/HanoiCreateWorld.fr.html
deleted file mode 100644
index 75780be..0000000
--- a/src/lessons/meta/HanoiCreateWorld.fr.html
+++ /dev/null
@@ -1,194 +0,0 @@
-<h1>Créer un nouveau monde JLM ("World")</h1>
-
-<p>
-Bienvenue dans la Meta-Leçon JLM. Son but est de vous apprendre comment
-écrire de nouveaux univers dans la JLM. Pour ce faire, nous allons
-réimplanter le monde des tours de Hanoï ( disponible dans la leçon récursion
-) pas à pas. Cette leçon couvre des sujets assez avancés et supporse que
-vous êtes à l'aise en Java et que vous connaissez déjà bien l'utilisation du
-framework de la JLM. Si vous n'êtes pas déjà habitué au frameword, vous
-voudrez probablement suivre une autre leçon avant, comme Welcome ou ( sans
-doute plus amusant ) Maze.</p>
-
-<p>Chaque univers JLM est composé de quatre composants principaux</p>
-<ul>
-<li><b>Le monde ("world")</b> : il contient l'état de l'univers.</li>
-<li><b>La vue ("View")</b>: elle permet de dessiner le monde et les entitées à
-l'écran.</li>
-<li><b>L' "entity ancestor"</b> :  le code écrit par l'étudiant sera dérivé de
-cette classe, qui contient certains états spécifiques à l'entité, et chaque
-accesseur pour permettre à l'entité d'intéragir avec le monde. </li>
-<li><b>Le panneau de contrôle interactif de l'entité</b> : c'est le petit
-panneau affiché en dessous de la vue du monde dans l'interface de la JLM. Il
-permet de contrôler interactivement l'entité sélectionnée. Comme vous pouvez
-le voir avec les univers existants, c'est optionnel, et si vous n'en
-fournissez pas, le panneau restera vide, empêchant l'utilisateur de
-controler interactivement l'entité.</li>
-</ul>
-
-<p>De plus, les mondes sont utilisés pas les exercices, eux-mêmes rangés en
-leçons.</p>
-<ul>
-<li><b>Les leçons ("Lessons")</b> sont juste une liste d'exercices. Elles
-peuvent être séquentielles (ce qui signifie que l'étudiant doit finir
-l'exercise avant de pouvoir voir le suivant ), même si la grande majorité
-des leçons ne le sont pas ( ie, les étudiants sont libre d'essayer les
-exercices dans l'ordre qu'ils souhaitent). 
-
-<p>A l'avenir, nous aimerions disposer d'un ordonnancement d'exercices plus
-riche, où les conditions à remplir pour pouvoir essayer un exercice pourrait
-être plus complexes. Les dépendances deviendraient probablement un graphe au
-lieu d'être une chaîne. Mais cela reste encore à réaliser.</p>
-
-<p>L'élément principal de chaque leçon est la classe communément appelée Main,
-qui contient simplement un constructeur ajoutant chaque exercice de la leçon
-l'un à la suite de l'autre.</p></li>
-
-<li>Chaque objet <b>exercise</b> a pour mission d'instancier les mondes
-utilisés, de les initialiser ( ajouter des murs et des baggles dans
-BuggleWorld, ou changer l'altitude et ajouter des lampes dans LightBotWorld,
-etc), et les peupler avec des correctement initialisées ( emplacement,
-couleur, etc) .</li>
-
-<li>La plupart des exercices fournissent aussi une <b>entité réponse <b>("answer
-entity")</b> capable de résoudre l'exercice. Cela sert à la fois à afficher
-le contenu initial de l'éditeur de code, et à calculer le monde
-objectif. Nous reviendrons là-dessus plus tard dans un exercice de cette
-meta-leçon.</li>  
-</ul>
-
-<p>Le premier élément que vous voulez écrire dans un nouvel univers de la JLM
-est une implémentation partielle du monde incluant l'état interne. Dans des
-exercices ultérieurs, nous complèterons la classe World pour fournir aux
-entités des moyens d'intéragir et de modifier leur monde, et nous
-implémenterons aussi les autres éléments de l'univers.</p>
-
-<p>Avant que vous vous jetiez dans l'écriture de votre implémentation de World,
-vous devez comprendre le schéma de la JLM, et comment les mondes sont
-utilisés en interne.</p>
-
-<h2>Schéma des mondes de la JLM</h2>
-
-<p>
-Comme vous le savez, chaque exercice de la JLM peut contenir un ou plusieurs
-mondes, chacun contenant une ou plusieures entitées. Le code écrit par les
-étudiants est éxécutés dans les entitées, qui doivent intéragir avec leur
-monde pour le faire passer de son état initial à l'état objectif. 
-</p>
-<p>La multiplication des mondes et des entitées est utilisé pour tester le code
-de l'étudiant dans différentes conditions. Cela peut être comparé à des cas
-de tests, cherchant à tester entièrement le code de l'étudiant.</p>
-
-<p>Techniquement, dans un exercice donné, pour chaque monde accessible depuis
-la liste déroulante, il y a trois objets World. Ils se trouvent dans
-jlm.lesson.Exercise.
-<pre>
-protected World [] initialWorld; 
-protected World [] currentWorld; 
-protected World [] answerWorld;  
-</pre>
-</p>
-
-<p>
-Le numéro de ligne de la liste déroulante donne l'index utilisé dans ces
-tableaux. Chaque <code>initialWorld</code> est crée par le constructeur de
-l'exercice. 
-</p>
-
-<p><code>currentWorld</code> est celui affiché dans l'onglet "World" de
-l'interface. Au début, il s'agit d'une simple copie de initialWorld, mais il
-est modifié quand l'étudiant utilise les contrôles interactifs ou quand le
-programme est lancé. Le bouton "Reset" le remet à zéro afin qu'il redevienne
-une copie parfaite du monde initial.</p>
-  
-<p><code>answerWorld</code> est celui affiché par le monde
-"Objective". Concrètement, il s'agit d'une copie du monde initial, sur
-lequel on a lancé le programme de l'"answer entity" de l'exercice. Ce
-comportement par défaut peut être modifié par les exercices, mais vous
-n'aurez probablement jamais à le faire. Nous reviendrons là dessus dans un
-exercice ultérieur.</p>
-
-<h3>Implémenter des mondes basiques</h3>
-<p>
-L'utilisation interne des mondes est cachée, mais le point important est que
-chaque objet World hérite de la classe jlm.universe.World et définit les
-méthodes et constructeurs suivants :
-<ul>
-<li><b>un constructeur copie</b> qui est utilisé pour copier le monde initial en
-currentWorld et answerWorld. Son argument doit être du même type que la
-classe elle-même, et non pas de type Object ( c'est parce que nous utilisons
-le mécanisme d'introspection Java pour rechercher un tel constructeur dans
-la classe). Par exemple, si vous créer un TotWorl, votre constructeur votre
-constructeur copie doit être déclaré ainsi :
-<pre>
-public TotoWorld(TotoWorld other) {...} // Correct
-public TotoWorld(Object other) {...} // Faux
-public TotoWorld(World other) {...} // Faux
-</pre>  
-Le contenu de ce constructeur est généralement un simple appel au
-constructeur<code>super(World w)</code>, mais ce constructeur copie doit
-exister.
-</li>
-<li>Un ou plusieurs <b>constructeurs normaux</b> initialisant l'état de
-l'objet. Ils seront utilisés par le constructeur de l'exercice pour
-instancier votre monde. Puisque vous écrivez généralement le monde et les
-leçons, vous êtes complètement libre de spécifier les paramètres que vous
-voulez pour votre constructeur. Il doit néanmoins utilise le constructeur
-<code>super(String name)</code> pour initialiser les éléments basiques de
-votre monde. 
-
-<p>Vous pouvez, de manière facultative, utiliser la méthode <code>setdelay(int
-delay)</code> pour changer le délai initial de l'animation. Par exemple,
-dans SortingWorld, mettez le à 1 pour accélérer l'animation. C'est le délai
-en millisecondes entre chaque pas d'animation durant un programme continu.</p></li>
-
-<li>Une méthode <b>reset()</b> prenant un World en paramètre, et ayant pour
-mission d'affecter l'état du paramètre dans le monde courant. C'est
-naturellement utilisé quand vous appuyez sur le bouton "Reset", ou au début
-de chaque lancement de programme.
-
-<p>La longueur de cette méthode dépend naturellemetn de la complexité de l'état
-de votre monde. Dans Hanoi, il y a seulement trois tours contenant une liste
-de disques, cela sera donc très facile, mais cela peut être bien plus
-compliqué avec des mondes complexes comme BuggleWorld.</p></li>
-</ul>
-</p>
-<h3>Permettre le rendu graphique des mondes</h3>
-<p>
-Certaines étapes spécifiques doivent naturellement être prise afin que la
-JLM puisse afficher graphique votre monde. Usuellement, vous devez écrire
-une classe spécifique héritant de jlm.universe.WorldView, et fournissant des
-méthodes "protected", afin que la vue puisse récupérer l'état à
-afficher. Dans cet exercice particulier, la vue vous est fournie ( vous en
-écrirez une dans le prochain exercice ), donc vous n'avez qu'à implémenter
-le bon accesseur.
-</p>
-<h2>Implémenter votre HanoiWorld</h2>
-<p>
-La tâche principale de cet exercice est de modifié le code fourni pour
-sauvegarder l'état du monde. Puisque l'exercice fournit une  vue et
-instancie automatiquement le monde, vous ne pouvez pas changer le
-constructeur d'instanciation, ni l'accesseur de rendu graphique ( regardez
-le code fourni pour leurs prototypes ). Mais vous êtes complètement libre
-sur comment vous allez sauvegarder l'état dans votre object. 
-</p>
-<p>Pendant l'implémentation du monde des Tours de Hanoï, j'ai changé ma
-représentation interne à plusieures reprises, afin de l'adapter aux besoins
-du code. Mon premier essai était simplement trois ArrayList<Integer>, une
-pour chaque tour, tandis que la version finale fournit une classe interne,
-nommé HanoiSlot, contenant un tableau d'entier et fournissant des fonctions
-sympathiques telles que <code>push()</code>, <code>pop()</code> and
-<code>top()</code>. Même si cela ne devient réellement nécessaire que quand
-vous implémenter les méthodes d'actions permettant aux entitées d'intéragir
-avec leur monde, je vous conseille de concevoir une classe interne dès le
-départ.</p>
-
-<p>Vous voudrez probablement ajouter trois champs à votre monde, un pour chaque
-tour (on n'essayera jamais d'avoir des mondes avec plus de trois tours),
-sauvegarder le contenu de chaque tour dans le construction d'instanciation,
-et récupérer le contenu d'une tour donnée dans l'accesseur de rendu
-graphique (<code>Integer[] values(Integer i)</code>).</p>
-
-<p>Cela semble être beaucoup de code à écrire comparé aux autres exercices de
-la JLM, mais en fin de compte, mon implémentation de HanoiWorld fait moints
-de cent lignes, ce qui n'est pas beaucoup.</p>      
diff --git a/src/lessons/meta/HanoiCreateWorld.html b/src/lessons/meta/HanoiCreateWorld.html
deleted file mode 100644
index e6f2996..0000000
--- a/src/lessons/meta/HanoiCreateWorld.html
+++ /dev/null
@@ -1,158 +0,0 @@
-<h1>Creating a new JLM world</h1>
-
-<p>
-Welcome to the JLM Meta-Lesson. Its goal is to teach you how to write
-new universes in JLM. For that, we will reimplement the Hanoi world
-(available in the recursion lesson) step-by-step. This lesson covers quite 
-advanced topics and suppose that you are fluent in Java and confident with the use
-of the JLM framework already. If you are not used to the framework already, you 
-probably want to take another lesson before, like the welcome one or 
-(maybe more fun) the maze one.</p>
-
-<p>Every JLM universe is composed of 4 main components:</p>
-<ul>
-<li><b>The world</b>: it contains the state of the universe.</li>
-<li><b>The view</b>: it allows to draw the world and the entities on
-the screen.</li>
-<li><b>The entity ancestor</b>: the code written by the student will
-derive from this class, which contains some state specific to the
-entity, and every accessor to let the entity interact with its world. </li>
-<li><b>The entity interactive control panel</b>: this is the little
-panel displayed under the world view in the JLM interface. It allows
-to interactively control the selected entity. As you can see from the
-existing universes, this is optional, and if you don't provide any,
-the panel will remain blank, preventing the users from interactively
-controlling the entities.</li>
-</ul>
-
-<p>In addition, worlds are used by exercises, themselves sorted in lessons.</p>
-<ul>
-<li><b>Lessons</b> are just a list of exercise. They can be sequential 
-(meaning that the student has to finish one exercise before being allowed to 
-see the next one in the list), altrough most of them are not (ie, students are 
-free to attempt the exercises in the order they like). 
-
-<p>In the future, we would like to have richer exercise ordering schema, where
-the requirements to fulfill to be allowed to try an exercise could be more complex. 
-The dependencies would probably turn into a graph instead of a chain. 
-But this is still to be done.</p>
-
-<p>The main element of each lesson is a class classically called Main, which simply 
-contains a constructor adding each exercise of the lesson in row.</p></li>
-
-<li>Each <b>exercise</b> object is in charge of instantiating the worlds used, set
-them up (adding walls and baggles in BuggleWorld, or changing the elevation and 
-adding lamps in the LightBotWorld, etc), and populate them with entities correctly 
-setup (location, color, etc).</li>
-
-<li>Most of the exercises also provide a specific <b>answer entity</b> able to solve the exercise. 
-It serve both to compute the initial content of the code editor, and to compute the 
-objective world. We will come back on this in a latter exercise of this meta-lesson.</li>  
-</ul>
-
-<p>The very first element you want to write in a new JLM universe is a
-partial world implementation including the internal state. In subsequent exercises, we 
-will complete the World class to provide entities ways to interact and modify their world, 
-and we will also implement the other elements of the universe.</p>
-
-<p>Before you jump in writing your World implementation, you should understand the big JLM 
-picture, and how worlds are used internally.</p>
-
-<h2>JLM worlds big picture</h2>
-
-<p>
-As you know, every JLM exercise can contain one or several worlds, each
-containing one or several entities. The code written by the student is
-executed in the entities, which must interact with their world to change 
-it from its initial state to its goal state. 
-</p>
-<p>This multiplication of worlds and entities is used to test the student 
-code in several conditions. It can thus be parallelized to test cases, aiming 
-at full testing coverage of the student code.</p>
-
-<p>Technically, in a given exercise, for every world accessible from the 
-relevant combobox, there is three World objects. They live in jlm.lesson.Exercise:
-<pre>
-protected World [] initialWorld; 
-protected World [] currentWorld; 
-protected World [] answerWorld;  
-</pre>
-</p>
-
-<p>
-The line number of the combobox gives the index to use in these arrays. 
-Each <code>initialWorld</code> is created by the exercise constructor. 
-</p>
-
-<p><code>currentWorld</code> is the one 
-displayed in the "World" tab of the interface. At the beginning, it is a plain copy 
-of the initialWorld, but it gets modified when the student uses the interactive 
-controls or when the program gets run. The "Reset" button reset it to be a perfect 
-copy of the initial world.</p>
-  
-<p><code>answerWorld</code> is the one displayed by the "Objective" world. Basically, it's a copy 
-of the initial world, on which we let the specific answer entity of this exercise run. 
-This default behavior can be overloaded by exercises, but you'll probably never have 
-to do so. We will come back on this in a subsequent exercise.</p>
-
-<h3>Implementing basic Worlds</h3>
-<p>
-The internal use of Worlds hidden, but the important point is that every World object 
-has extend the jlm.universe.World class and define the following methods and constructors:
-<ul>
-<li><b>a copy constructor</b> which is used to copy initial worlds into currentWorld and answerWorld. 
-Its argument must be of the exact same type than the class itself, not Object (this is because we use 
-Java introspection mechanism to search for such a constructor of the class). 
-For example, if you create a TotoWorld, your copy constructor must be declared as this:
-<pre>
-public TotoWorld(TotoWorld other) {...} // Correct
-public TotoWorld(Object other) {...} // FALSE
-public TotoWorld(World other) {...} // also FALSE
-</pre>  
-The content of this constructor is usually a simple call to the <code>super(World w)</code> constructor, but 
-this constructor cannot be omitted.
-</li>
-<li>One or several <b>regular constructors</b> initializing the state of the object. They will be used 
-by the exercise constructor to instantiate your world. Since you usually write both the world and the lessons, 
-you are completely free to specify the parameters you want to your constructor. It should use the 
-<code>super(String name)</code> constructor to setup the very basic elements of your world. 
-
-<p>Optionally, you may also want to use the <code>setDelay(int delay)</code> method to change the initial 
-animation delay. For example, the SortingWorld set this to 1 to speed animations up. This is the 
-delay in milliseconds between each animation step during a continuous run.</p></li>
-
-<li>A <b>reset() method</b> taking one World as parameter, and in charge of copying the state of the parameter 
-into the current world. This is naturally used when you press the "Reset" button, or at the beginning of each run.
-
-<p>The length of this method naturally depends on the complexity of your world state. In hanoi, there is 
-only 3 slots containing a list of disc so that will be quite easy, but this can be quite complicated for 
-complex worlds such as BuggleWorld.</p></li>
-</ul>
-</p>
-<h3>Allowing the graphical rendering of Worlds</h3>
-<p>
-Some specific steps naturally must be taken so that JLM can graphically display your world. Usually, you must
-write a specific class extending jlm.universe.WorldView, and provide some protected methods so that the View can
-retrieve the state to display. In this particular exercise, the view is provided (you will write you own one 
-in next exercise), so you only have to implement the right accessor.
-</p>
-<h2>Implementing your HanoiWorld</h2>
-<p>
-The main task of this exercise is to modify the provided template to store the state of the world. Since the exercise
-provides a view and automatically instantiate your world, you cannot change the instantiation constructor, nor the 
-rendering accessor (see the code template for there prototype). But you are completely free about how you actually 
-store the state in your object. 
-</p>
-<p>During the implementation of the Hanoi world, I changed my internal representation several times, to adapt to 
-the code needs. My first try was only simply three ArrayList<Integer>, for each slots, while the final design used
-an inner class called HanoiSlot, containing an integer array and providing friendly functions such as 
-<code>push()</code>, <code>pop()</code> and <code>top()</code>. Even if it really becomes necessary when 
-implementing the action methods allowing the entities to interact with their world, I advise you to design an 
-inner class from the beginning.</p>
-
-<p>You probably want to add 3 fields to your World, one for each slot (we will never try to have worlds with more 
-than 3 slots), store the content of each slot in the instantiation constructor, and retrieve the content of a 
-specific slot in the rendering accessor (<code>Integer[] values(Integer i)</code>).</p>
-
-<p>That seems quite a lot of code to write compared to the other JLM exercises, but at the end, my HanoiWorld 
-implementation is less than 100 lines long, which is not that much.</p>      
diff --git a/src/lessons/meta/HanoiCreateWorld.java b/src/lessons/meta/HanoiCreateWorld.java
deleted file mode 100644
index dfd3e53..0000000
--- a/src/lessons/meta/HanoiCreateWorld.java
+++ /dev/null
@@ -1,59 +0,0 @@
-package lessons.meta;
-
-import java.util.List;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.core.model.lesson.NoSuchEntityException;
-import jlm.core.ui.MainFrame;
-import jlm.universe.World;
-
-public class HanoiCreateWorld extends MetaExercise {
-	public HanoiCreateWorld(Lesson lesson) {
-		super(lesson);
-		
-		HanoiMetaWorld[] w = new HanoiMetaWorld[3];
-		w[0]=new HanoiMetaWorld("HanoiWorld({8,7,6,5,4,3,2,1},{},{})",this,
-				new Integer[] {8,7,6,5,4,3,2,1}, new Integer[0], new Integer[0]);
-		w[1]=new HanoiMetaWorld("HanoiWorld({},{8,7,6,5,4,3,2,1},{})",this,
-				new Integer[0], new Integer[] {8,7,6,5,4,3,2,1}, new Integer[0]);
-		w[2]=new HanoiMetaWorld("HanoiWorld({},{},{8,7,6,5,4,3,2,1})",this,
-				new Integer[0], new Integer[0], new Integer[] {8,7,6,5,4,3,2,1});
-		
-		setupWorlds(w);
-
-		try {
-			newSourceFromFile(Game.JAVA,"HanoiWorld","src/jlm/universe/hanoi/HanoiWorld","java");
-			newSourceFromFile(Game.JAVA,"HanoiInvalidMove","src/jlm/universe/hanoi/HanoiInvalidMove","java");
-		} catch (NoSuchEntityException e) {
-			System.out.println("Cannot find my files. Please go fix your pathes and such");
-			e.printStackTrace();
-		}
-
-		/* compute answer */
-		for (World it:answerWorld) 
-			((HanoiMetaWorld)it).isAnswer=true;
-	}
-	
-	@Override
-	public void run(List<Thread> runnerVect) {
-		for (World it:currentWorld) {
-			HanoiMetaWorld w = (HanoiMetaWorld)it;
-			/* Setup the intercepter */
-			w.setServant(compiledClasses.get(className("HanoiWorld")));
-			/* Ask for a (future) redraw */
-			// asking to redraw the view is not enough, apparently. Ask full windows
-			MainFrame.getInstance().repaint();
-			/* leave some time to the system to actually draw the stuff */
-			try {
-				Thread.sleep(1);
-			} catch (InterruptedException e) {
-				e.printStackTrace();
-			}
-			/* Access the values from the student's code, to get the intercepter check them */
-			w.values(0);
-			w.values(1);
-			w.values(2);
-		}
-	}
-}
diff --git a/src/lessons/meta/HanoiMetaEntity.java b/src/lessons/meta/HanoiMetaEntity.java
deleted file mode 100644
index 08a32d5..0000000
--- a/src/lessons/meta/HanoiMetaEntity.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package lessons.meta;
-
-import java.lang.reflect.Constructor;
-
-import jlm.universe.Entity;
-import jlm.universe.World;
-import jlm.universe.hanoi.HanoiEntity;
-import jlm.universe.hanoi.HanoiInvalidMove;
-import jlm.universe.hanoi.HanoiWorld;
-
-public class HanoiMetaEntity extends HanoiEntity {
-	/* If i'm the answer world, cheat and return use the implementation of my ancestor directly */
-	boolean isAnswer=false;
-	/* if i'm not the answer, ask our servant guy written by the student */
-	Entity servant;
-	/* We report errors to the exercise directly */
-	MetaExercise exo;
-
-	public HanoiMetaEntity(String name,World world,MetaExercise exo) {
-		super(name,world);
-		this.exo = exo;
-	}
-	@Override
-	public Entity copy() {
-		HanoiMetaEntity other = new HanoiMetaEntity(name,null,exo);
-		other.isAnswer = isAnswer;
-		other.servant = servant;
-		return other;
-	}
-
-	/* Set tested code in position */
-	protected void setServant(Class<Object> servantClass) {
-		try {
-			Constructor<Object> c = servantClass.getConstructor(String.class,World.class);
-			servant = (Entity) c.newInstance(name,world);
-		} catch (Exception e) {
-			exo.error("Cannot instantiate your Entity implementation",e);
-		}
-	}
-
-	/* Intercepting all methods of interest */
-	public void move(int src, int dst) throws HanoiInvalidMove {
-		if (isAnswer) {
-			((HanoiWorld) world).move(src,dst);
-			stepUI();
-		} else {
-			((HanoiEntity) servant).move(src,dst);
-		}
-	}
-}
diff --git a/src/lessons/meta/HanoiMetaWorld.java b/src/lessons/meta/HanoiMetaWorld.java
deleted file mode 100644
index d1c7962..0000000
--- a/src/lessons/meta/HanoiMetaWorld.java
+++ /dev/null
@@ -1,129 +0,0 @@
-package lessons.meta;
-
-import java.lang.reflect.Constructor;
-
-import jlm.core.ui.WorldView;
-import jlm.universe.World;
-import jlm.universe.hanoi.HanoiInvalidMove;
-import jlm.universe.hanoi.HanoiWorld;
-import jlm.universe.hanoi.HanoiWorldView;
-
-public class HanoiMetaWorld extends HanoiWorld {
-	/* If i'm the answer world, cheat and return use the implementation of my ancestor directly */
-	boolean isAnswer=false;
-	/* if i'm not the answer, ask our servant guy written by the student */
-	World servant;
-	
-	/* We need to ask the view to redraw everything at some point of the testing process */
-	WorldView view=null;
-	/* We report errors to the exercise directly */
-	MetaExercise exo;
-	
-	public HanoiMetaWorld(String name, MetaExercise exo, Integer[] slotA, Integer[] slotB, Integer[] slotC) {
-		super(name,slotA,slotB,slotC);
-		this.exo = exo;
-	}
-
-	public HanoiMetaWorld(HanoiMetaWorld w2) {
-		super(w2);
-	}
-	@Override
-	public void reset(World w) {
-		HanoiMetaWorld other = (HanoiMetaWorld) w;
-		isAnswer = other.isAnswer;
-		servant = other.servant;
-		view = other.view;
-		exo = other.exo;
-		super.reset(w);		
-	}
-	@Override
-	public WorldView getView() {
-		if (view == null)
-			view = new HanoiWorldView(this);
-		return view;
-	}
-
-	/* Set tested code in position */
-	protected void setServant(Class<Object> servantClass) {
-		try {
-			Constructor<Object> c = servantClass.getConstructor(String.class,Integer[].class,Integer[].class,Integer[].class);
-			System.out.println("New instance "+rawValues(0).length+" "+rawValues(1).length+" "+rawValues(2).length);
-			servant = (World) c.newInstance("",rawValues(0),rawValues(1),rawValues(2));
-		} catch (Exception e) {
-			exo.error("Cannot instantiate your world implementation",e);
-		}
-	}
-	
-	/* Intercepting all methods of interest */
-	public Integer[] rawValues(int i) {
-		return super.values(i);
-	}
-	@Override
-	public Integer[] values(Integer slot) {
-		Integer[] answer = rawValues(slot);
-		Integer[] res = null;
-		
-		if (isAnswer)
-			return answer;
-		if (servant == null)
-			return null;
-
-		/* get a result from the servant, if possible */
-		try {
-			res = (Integer[]) 
-				servant.getClass().getMethod("values", Integer.class)
-				.invoke(servant, slot);
-		} catch (NoSuchMethodException e) {
-			exo.error("Method values(Integer) not found in your World implementation. Did you mark it public?");
-		} catch (Exception e) {
-			exo.error("Cannot invoke the values() method of your World implementation",e);
-		}
-		/* Check that the servant returned the right value */
-		if (res == null) {
-			exo.error("Your values("+slot+") method returned null");
-			return null;
-		} 
-		boolean match = true;
-		if (res.length != answer.length) {
-			match = false;
-		} else {
-			for (int cpt=0;cpt<res.length;cpt++)
-				if (res[cpt] != answer[cpt]) {
-					match = false;
-				}
-		}
-		if (!match) {
-			exo.error("Your values("+slot+") method did not return the right values");
-			System.err.print("Right   : ");
-			for (Integer i:answer)
-				System.err.print(i+" ");
-			System.err.println("(length:"+answer.length+")");
-			System.err.print("Returned: ");
-			for (Integer i:res)
-				System.err.print(i+" ");
-			System.err.println("(length:"+res.length+")");
-		}
-		return res;
-	}
-	@Override
-	public void move(Integer src, Integer dest) throws HanoiInvalidMove {
-		if (isAnswer) {
-			super.move(src,dest);
-			return;
-		}
-		if (servant == null)
-			return;
-
-		/* get a result from the servant, if possible */
-		try {
-			servant.getClass().getMethod("move", Integer.class, Integer.class)
-			.invoke(servant, src,dest);
-		} catch (NoSuchMethodException e) {
-			exo.error("Method move(Integer,Integer) not found in your World implementation. Did you mark it public?");
-		} catch (Exception e) {
-			exo.error("Cannot invoke the move(Integer,Integer) method of your World implementation",e);
-		}
-
-	}
-
-}
diff --git a/src/lessons/meta/Main.fr.html b/src/lessons/meta/Main.fr.html
deleted file mode 100644
index 5cc7b5e..0000000
--- a/src/lessons/meta/Main.fr.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<h1>Meta leçon</h1>
-Le but de cette leçon est de vous apprendre comment écrire des leçons pour
-la JLM.
\ No newline at end of file
diff --git a/src/lessons/meta/Main.html b/src/lessons/meta/Main.html
deleted file mode 100644
index 987729b..0000000
--- a/src/lessons/meta/Main.html
+++ /dev/null
@@ -1,2 +0,0 @@
-<h1>Meta lesson</h1>
-The purpose of this lesson is to teach you how to write lessons for JLM.
\ No newline at end of file
diff --git a/src/lessons/meta/Main.java b/src/lessons/meta/Main.java
deleted file mode 100644
index 0dbdce4..0000000
--- a/src/lessons/meta/Main.java
+++ /dev/null
@@ -1,14 +0,0 @@
-package lessons.meta;
-
-import jlm.core.model.lesson.Lesson;
-
-public class Main extends Lesson {
-	@Override
-	protected void loadExercises() {
-		System.out.println("Add Create world exo");
-		addExercise(new HanoiCreateWorld(this));
-
-		System.out.println("Add Create entity exo");
-		addExercise(new HanoiCreateEntity(this));
-	}
-}
diff --git a/src/lessons/meta/MetaExercise.java b/src/lessons/meta/MetaExercise.java
deleted file mode 100644
index 1967b71..0000000
--- a/src/lessons/meta/MetaExercise.java
+++ /dev/null
@@ -1,35 +0,0 @@
-package lessons.meta;
-
-import jlm.core.model.lesson.ExecutionProgress;
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-
-public class MetaExercise extends ExerciseTemplated {
-	public MetaExercise(Lesson lesson) {
-		super(lesson);
-		lastResult = new ExecutionProgress();
-	}
-	@Override
-	public void reset() {
-		lastResult = new ExecutionProgress();
-		super.reset();
-	}
-
-	@Override
-	public void check() {
-	}
-
-	protected void error(String msg) {
-		error(msg,null);
-	}
-	protected void error(String msg, Exception e) {
-		System.err.println(msg);
-		lastResult.totalTests++;
-		lastResult.details += msg;
-		if (e != null) {
-			lastResult.details += "(exception raised)";
-			e.printStackTrace();
-		}
-	}
-
-}
diff --git a/src/lessons/recursion/Main.java b/src/lessons/recursion/Main.java
index 5aba34b..9e3fde2 100644
--- a/src/lessons/recursion/Main.java
+++ b/src/lessons/recursion/Main.java
@@ -2,14 +2,13 @@ package lessons.recursion;
 
 import jlm.core.model.lesson.Lesson;
 import lessons.recursion.circle.Circle;
-import lessons.recursion.dragoncurve1.DragonCurve1;
-import lessons.recursion.dragoncurve2.DragonCurve2;
-import lessons.recursion.hanoiboard.HanoiBoard;
+import lessons.recursion.dragoncurve.DragonCurve1;
+import lessons.recursion.dragoncurve.DragonCurve2;
 import lessons.recursion.koch.Koch;
 import lessons.recursion.polygonfractal.PolygonFractal;
 import lessons.recursion.sierpinski.Sierpinski;
 import lessons.recursion.spiral.Spiral;
-import lessons.recursion.spiraluse.SpiralUse;
+import lessons.recursion.spiral.SpiralUse;
 import lessons.recursion.square.Square;
 import lessons.recursion.star.Star;
 import lessons.recursion.tree.Tree;
@@ -28,8 +27,5 @@ public class Main extends Lesson {
 		addExercise(new PolygonFractal(this));
 		addExercise(new DragonCurve1(this));
 		addExercise(new DragonCurve2(this));
-		
-		addExercise(new HanoiBoard(this));
-
 	}
 }
diff --git a/src/lessons/recursion/dragoncurve1/DragonCurve1.fr.html b/src/lessons/recursion/dragoncurve/DragonCurve1.fr.html
similarity index 100%
rename from src/lessons/recursion/dragoncurve1/DragonCurve1.fr.html
rename to src/lessons/recursion/dragoncurve/DragonCurve1.fr.html
diff --git a/src/lessons/recursion/dragoncurve1/DragonCurve1.html b/src/lessons/recursion/dragoncurve/DragonCurve1.html
similarity index 100%
rename from src/lessons/recursion/dragoncurve1/DragonCurve1.html
rename to src/lessons/recursion/dragoncurve/DragonCurve1.html
diff --git a/src/lessons/recursion/dragoncurve/DragonCurve1.java b/src/lessons/recursion/dragoncurve/DragonCurve1.java
new file mode 100644
index 0000000..4784bdb
--- /dev/null
+++ b/src/lessons/recursion/dragoncurve/DragonCurve1.java
@@ -0,0 +1,49 @@
+package lessons.recursion.dragoncurve;
+
+import java.awt.Color;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.World;
+import jlm.universe.turtles.Turtle;
+import jlm.universe.turtles.TurtleWorld;
+
+public class DragonCurve1 extends ExerciseTemplated {
+
+	public DragonCurve1(Lesson lesson) {
+		super(lesson);
+
+		/* Create initial situation */
+		World[] myWorlds = new World[7];
+		myWorlds[0] = new TurtleWorld("dragon(1,100.,100.,200.,200.)", 300, 300);
+		myWorlds[0].setParameter(new Object[] {1,100.,100.,200.,200.});		
+		new Turtle(myWorlds[0], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[1] = new TurtleWorld("dragon(2,100.,100.,200.,200.)", 300, 300);
+		myWorlds[1].setParameter(new Object[] {2,100.,100.,200.,200.});		
+		new Turtle(myWorlds[1], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[2] = new TurtleWorld("dragon(3,100.,100.,200.,200.)", 300, 300);
+		myWorlds[2].setParameter(new Object[] {3,100.,100.,200.,200.});		
+		new Turtle(myWorlds[2], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[3] = new TurtleWorld("dragon(4,100.,100.,200.,200.)", 300, 300);
+		myWorlds[3].setParameter(new Object[] {4,100.,100.,200.,200.});		
+		new Turtle(myWorlds[3], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[4] = new TurtleWorld("dragon(5,100.,100.,200.,200.)", 300, 300);
+		myWorlds[4].setParameter(new Object[] {5,100.,100.,200.,200.});		
+		new Turtle(myWorlds[4], "Lee", 100, 100, 0, Color.red);
+		
+		myWorlds[5] = new TurtleWorld("dragon(10,100.,100.,200., 200.)", 300, 300);
+		myWorlds[5].setParameter(new Object[] {10,100.,100.,200., 200.});		
+		new Turtle(myWorlds[5], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[6] = new TurtleWorld("dragon(15,100.,100.,200., 200.)", 300, 300);
+		myWorlds[6].setParameter(new Object[] {15,100.,100.,200., 200.});		
+		new Turtle(myWorlds[6], "Lee", 100, 100, 0, Color.red);
+
+		setup(myWorlds);
+	}	
+	
+}
diff --git a/src/lessons/recursion/dragoncurve/DragonCurve1Entity.java b/src/lessons/recursion/dragoncurve/DragonCurve1Entity.java
new file mode 100644
index 0000000..a739f25
--- /dev/null
+++ b/src/lessons/recursion/dragoncurve/DragonCurve1Entity.java
@@ -0,0 +1,30 @@
+package lessons.recursion.dragoncurve;
+
+import jlm.universe.turtles.Turtle;
+
+public class DragonCurve1Entity extends Turtle {
+
+	/* BEGIN TEMPLATE */
+	public void dragon(int ordre, double x, double y, double z, double t) {
+		/* BEGIN SOLUTION */
+		double u, v;
+
+		if (ordre == 1) {
+			setPos(x, y);
+			moveTo(z, t);
+		} else {
+			u = (x + z + t - y) / 2;
+			v = (y + t - z + x) / 2;
+			dragon(ordre - 1, x, y, u, v);
+			dragon(ordre - 1, z, t, u, v);
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+	public void run() {
+		dragon((Integer) getParam(0), (Double) getParam(1), (Double) getParam(2), (Double) getParam(3),
+				(Double) getParam(4));
+	}
+
+}
diff --git a/src/lessons/recursion/dragoncurve/DragonCurve1Entity.py b/src/lessons/recursion/dragoncurve/DragonCurve1Entity.py
new file mode 100644
index 0000000..09fa4e7
--- /dev/null
+++ b/src/lessons/recursion/dragoncurve/DragonCurve1Entity.py
@@ -0,0 +1,15 @@
+# BEGIN TEMPLATE
+def dragon(ordre, x, y, z, t):
+  # BEGIN SOLUTION 
+    if ordre == 1:
+      setPos(x, y)
+      moveTo(z, t)
+    else:
+      u = (x + z + t - y) / 2
+      v = (y + t - z + x) / 2;
+      dragon(ordre - 1, x, y, u, v)
+      dragon(ordre - 1, z, t, u, v)
+# END SOLUTION
+# END TEMPLATE
+
+dragon(getParam(0), getParam(1), getParam(2), getParam(3), getParam(4))
diff --git a/src/lessons/recursion/dragoncurve2/DragonCurve2.fr.html b/src/lessons/recursion/dragoncurve/DragonCurve2.fr.html
similarity index 100%
rename from src/lessons/recursion/dragoncurve2/DragonCurve2.fr.html
rename to src/lessons/recursion/dragoncurve/DragonCurve2.fr.html
diff --git a/src/lessons/recursion/dragoncurve2/DragonCurve2.html b/src/lessons/recursion/dragoncurve/DragonCurve2.html
similarity index 100%
rename from src/lessons/recursion/dragoncurve2/DragonCurve2.html
rename to src/lessons/recursion/dragoncurve/DragonCurve2.html
diff --git a/src/lessons/recursion/dragoncurve/DragonCurve2.java b/src/lessons/recursion/dragoncurve/DragonCurve2.java
new file mode 100644
index 0000000..b08ab4b
--- /dev/null
+++ b/src/lessons/recursion/dragoncurve/DragonCurve2.java
@@ -0,0 +1,49 @@
+package lessons.recursion.dragoncurve;
+
+import java.awt.Color;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.World;
+import jlm.universe.turtles.Turtle;
+import jlm.universe.turtles.TurtleWorld;
+
+public class DragonCurve2 extends ExerciseTemplated {
+
+	public DragonCurve2(Lesson lesson) {
+		super(lesson);
+
+		/* Create initial situation */
+		World[] myWorlds = new World[7];
+		myWorlds[0] = new TurtleWorld("dragon(1,100.,100.,200.,200.)", 300, 300);
+		myWorlds[0].setParameter(new Object[] {1,100.,100.,200.,200.});		
+		new Turtle(myWorlds[0], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[1] = new TurtleWorld("dragon(2,100.,100.,200.,200.)", 300, 300);
+		myWorlds[1].setParameter(new Object[] {2,100.,100.,200.,200.});		
+		new Turtle(myWorlds[1], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[2] = new TurtleWorld("dragon(3,100.,100.,200.,200.)", 300, 300);
+		myWorlds[2].setParameter(new Object[] {3,100.,100.,200.,200.});		
+		new Turtle(myWorlds[2], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[3] = new TurtleWorld("dragon(4,100.,100.,200.,200.)", 300, 300);
+		myWorlds[3].setParameter(new Object[] {4,100.,100.,200.,200.});		
+		new Turtle(myWorlds[3], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[4] = new TurtleWorld("dragon(5,100.,100.,200.,200.)", 300, 300);
+		myWorlds[4].setParameter(new Object[] {5,100.,100.,200.,200.});		
+		new Turtle(myWorlds[4], "Lee", 100, 100, 0, Color.red);
+		
+		myWorlds[5] = new TurtleWorld("dragon(10,100.,100.,200., 200.)", 300, 300);
+		myWorlds[5].setParameter(new Object[] {10,100.,100.,200., 200.});		
+		new Turtle(myWorlds[5], "Lee", 100, 100, 0, Color.red);
+
+		myWorlds[6] = new TurtleWorld("dragon(15,100.,100.,200., 200.)", 300, 300);
+		myWorlds[6].setParameter(new Object[] {15,100.,100.,200., 200.});		
+		new Turtle(myWorlds[6], "Lee", 100, 100, 0, Color.red);
+
+		setup(myWorlds);
+	}	
+	
+}
diff --git a/src/lessons/recursion/dragoncurve/DragonCurve2Entity.java b/src/lessons/recursion/dragoncurve/DragonCurve2Entity.java
new file mode 100644
index 0000000..cff32c3
--- /dev/null
+++ b/src/lessons/recursion/dragoncurve/DragonCurve2Entity.java
@@ -0,0 +1,48 @@
+package lessons.recursion.dragoncurve;
+
+import java.awt.Color;
+
+import jlm.universe.turtles.Turtle;
+
+public class DragonCurve2Entity extends Turtle {
+
+	/* BEGIN TEMPLATE */
+	public void dragon(int ordre, double x, double y, double z, double t) {
+		/* BEGIN HIDDEN */
+		double u, v;
+
+		if (ordre == 1) {
+			setColor(Color.red);
+			moveTo(z, t);
+		} else {
+			u = (x + z + t - y) / 2;
+			v = (y + t - z + x) / 2;
+			dragon(ordre - 1, x, y, u, v);
+			dragonInverse(ordre - 1, u, v, z, t);
+		}
+		/* END HIDDEN */
+	}
+
+	public void dragonInverse(int ordre, double x, double y, double z, double t) {
+		/* BEGIN HIDDEN */
+		double u, v;
+
+		if (ordre == 1) {
+			setColor(Color.blue);
+			moveTo(z, t);
+		} else {
+			u = (x + z - t + y) / 2;
+			v = (y + t + z - x) / 2;
+			dragon(ordre - 1, x, y, u, v);
+			dragonInverse(ordre - 1, u, v, z, t);
+		}
+		/* END HIDDEN */
+	}
+	/* END TEMPLATE */
+
+	public void run() {
+		dragon((Integer) getParam(0), (Double) getParam(1), (Double) getParam(2), (Double) getParam(3),
+				(Double) getParam(4));
+	}
+
+}
diff --git a/src/lessons/recursion/dragoncurve2/DragonCurve2Entity.py b/src/lessons/recursion/dragoncurve/DragonCurve2Entity.py
similarity index 100%
rename from src/lessons/recursion/dragoncurve2/DragonCurve2Entity.py
rename to src/lessons/recursion/dragoncurve/DragonCurve2Entity.py
diff --git a/src/lessons/recursion/dragoncurve1/DragonCurve1.java b/src/lessons/recursion/dragoncurve1/DragonCurve1.java
deleted file mode 100644
index 5722730..0000000
--- a/src/lessons/recursion/dragoncurve1/DragonCurve1.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package lessons.recursion.dragoncurve1;
-
-import java.awt.Color;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.World;
-import jlm.universe.turtles.Turtle;
-import jlm.universe.turtles.TurtleWorld;
-
-public class DragonCurve1 extends ExerciseTemplated {
-
-	public DragonCurve1(Lesson lesson) {
-		super(lesson);
-
-		/* Create initial situation */
-		World[] myWorlds = new World[7];
-		myWorlds[0] = new TurtleWorld("dragon(1,100.,100.,200.,200.)", 300, 300);
-		myWorlds[0].setParameter(new Object[] {1,100.,100.,200.,200.});		
-		new Turtle(myWorlds[0], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[1] = new TurtleWorld("dragon(2,100.,100.,200.,200.)", 300, 300);
-		myWorlds[1].setParameter(new Object[] {2,100.,100.,200.,200.});		
-		new Turtle(myWorlds[1], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[2] = new TurtleWorld("dragon(3,100.,100.,200.,200.)", 300, 300);
-		myWorlds[2].setParameter(new Object[] {3,100.,100.,200.,200.});		
-		new Turtle(myWorlds[2], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[3] = new TurtleWorld("dragon(4,100.,100.,200.,200.)", 300, 300);
-		myWorlds[3].setParameter(new Object[] {4,100.,100.,200.,200.});		
-		new Turtle(myWorlds[3], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[4] = new TurtleWorld("dragon(5,100.,100.,200.,200.)", 300, 300);
-		myWorlds[4].setParameter(new Object[] {5,100.,100.,200.,200.});		
-		new Turtle(myWorlds[4], "Lee", 100, 100, 0, Color.red);
-		
-		myWorlds[5] = new TurtleWorld("dragon(10,100.,100.,200., 200.)", 300, 300);
-		myWorlds[5].setParameter(new Object[] {10,100.,100.,200., 200.});		
-		new Turtle(myWorlds[5], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[6] = new TurtleWorld("dragon(15,100.,100.,200., 200.)", 300, 300);
-		myWorlds[6].setParameter(new Object[] {15,100.,100.,200., 200.});		
-		new Turtle(myWorlds[6], "Lee", 100, 100, 0, Color.red);
-
-		setup(myWorlds);
-	}	
-	
-}
diff --git a/src/lessons/recursion/dragoncurve1/DragonCurve1Entity.java b/src/lessons/recursion/dragoncurve1/DragonCurve1Entity.java
deleted file mode 100644
index f6c1330..0000000
--- a/src/lessons/recursion/dragoncurve1/DragonCurve1Entity.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package lessons.recursion.dragoncurve1;
-
-import jlm.universe.turtles.Turtle;
-
-public class DragonCurve1Entity extends Turtle {
-
-	/* BEGIN TEMPLATE */
-	public void dragon(int ordre, double x, double y, double z, double t) {
-		/* BEGIN SOLUTION */
-		double u, v;
-
-		if (ordre == 1) {
-			setPos(x, y);
-			moveTo(z, t);
-		} else {
-			u = (x + z + t - y) / 2;
-			v = (y + t - z + x) / 2;
-			dragon(ordre - 1, x, y, u, v);
-			dragon(ordre - 1, z, t, u, v);
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	public void run() {
-		dragon((Integer) getParam(0), (Double) getParam(1), (Double) getParam(2), (Double) getParam(3),
-				(Double) getParam(4));
-	}
-
-}
diff --git a/src/lessons/recursion/dragoncurve1/DragonCurve1Entity.py b/src/lessons/recursion/dragoncurve1/DragonCurve1Entity.py
deleted file mode 100644
index 5a575f8..0000000
--- a/src/lessons/recursion/dragoncurve1/DragonCurve1Entity.py
+++ /dev/null
@@ -1,15 +0,0 @@
-# BEGIN TEMPLATE
-def dragon(ordre, x, y, z, t):
-  # BEGIN SOLUTION 
-    if ordre == 1):
-      setPos(x, y)
-      moveTo(z, t)
-    else:
-      u = (x + z + t - y) / 2
-      v = (y + t - z + x) / 2;
-      dragon(ordre - 1, x, y, u, v)
-      dragon(ordre - 1, z, t, u, v)
-# END SOLUTION
-# END TEMPLATE
-
-dragon(getParam(0), getParam(1), getParam(2), getParam(3), getParam(4))
diff --git a/src/lessons/recursion/dragoncurve2/DragonCurve2.java b/src/lessons/recursion/dragoncurve2/DragonCurve2.java
deleted file mode 100644
index 4ed9888..0000000
--- a/src/lessons/recursion/dragoncurve2/DragonCurve2.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package lessons.recursion.dragoncurve2;
-
-import java.awt.Color;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.World;
-import jlm.universe.turtles.Turtle;
-import jlm.universe.turtles.TurtleWorld;
-
-public class DragonCurve2 extends ExerciseTemplated {
-
-	public DragonCurve2(Lesson lesson) {
-		super(lesson);
-
-		/* Create initial situation */
-		World[] myWorlds = new World[7];
-		myWorlds[0] = new TurtleWorld("dragon(1,100.,100.,200.,200.)", 300, 300);
-		myWorlds[0].setParameter(new Object[] {1,100.,100.,200.,200.});		
-		new Turtle(myWorlds[0], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[1] = new TurtleWorld("dragon(2,100.,100.,200.,200.)", 300, 300);
-		myWorlds[1].setParameter(new Object[] {2,100.,100.,200.,200.});		
-		new Turtle(myWorlds[1], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[2] = new TurtleWorld("dragon(3,100.,100.,200.,200.)", 300, 300);
-		myWorlds[2].setParameter(new Object[] {3,100.,100.,200.,200.});		
-		new Turtle(myWorlds[2], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[3] = new TurtleWorld("dragon(4,100.,100.,200.,200.)", 300, 300);
-		myWorlds[3].setParameter(new Object[] {4,100.,100.,200.,200.});		
-		new Turtle(myWorlds[3], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[4] = new TurtleWorld("dragon(5,100.,100.,200.,200.)", 300, 300);
-		myWorlds[4].setParameter(new Object[] {5,100.,100.,200.,200.});		
-		new Turtle(myWorlds[4], "Lee", 100, 100, 0, Color.red);
-		
-		myWorlds[5] = new TurtleWorld("dragon(10,100.,100.,200., 200.)", 300, 300);
-		myWorlds[5].setParameter(new Object[] {10,100.,100.,200., 200.});		
-		new Turtle(myWorlds[5], "Lee", 100, 100, 0, Color.red);
-
-		myWorlds[6] = new TurtleWorld("dragon(15,100.,100.,200., 200.)", 300, 300);
-		myWorlds[6].setParameter(new Object[] {15,100.,100.,200., 200.});		
-		new Turtle(myWorlds[6], "Lee", 100, 100, 0, Color.red);
-
-		setup(myWorlds);
-	}	
-	
-}
diff --git a/src/lessons/recursion/dragoncurve2/DragonCurve2Entity.java b/src/lessons/recursion/dragoncurve2/DragonCurve2Entity.java
deleted file mode 100644
index c10324b..0000000
--- a/src/lessons/recursion/dragoncurve2/DragonCurve2Entity.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package lessons.recursion.dragoncurve2;
-
-import java.awt.Color;
-
-import jlm.universe.turtles.Turtle;
-
-public class DragonCurve2Entity extends Turtle {
-
-	/* BEGIN TEMPLATE */
-	public void dragon(int ordre, double x, double y, double z, double t) {
-		/* BEGIN HIDDEN */
-		double u, v;
-
-		if (ordre == 1) {
-			setColor(Color.red);
-			moveTo(z, t);
-		} else {
-			u = (x + z + t - y) / 2;
-			v = (y + t - z + x) / 2;
-			dragon(ordre - 1, x, y, u, v);
-			dragonInverse(ordre - 1, u, v, z, t);
-		}
-		/* END HIDDEN */
-	}
-
-	public void dragonInverse(int ordre, double x, double y, double z, double t) {
-		/* BEGIN HIDDEN */
-		double u, v;
-
-		if (ordre == 1) {
-			setColor(Color.blue);
-			moveTo(z, t);
-		} else {
-			u = (x + z - t + y) / 2;
-			v = (y + t + z - x) / 2;
-			dragon(ordre - 1, x, y, u, v);
-			dragonInverse(ordre - 1, u, v, z, t);
-		}
-		/* END HIDDEN */
-	}
-	/* END TEMPLATE */
-
-	public void run() {
-		dragon((Integer) getParam(0), (Double) getParam(1), (Double) getParam(2), (Double) getParam(3),
-				(Double) getParam(4));
-	}
-
-}
diff --git a/src/lessons/recursion/hanoiboard/HanoiBoard.fr.html b/src/lessons/recursion/hanoi/HanoiBoard.fr.html
similarity index 100%
rename from src/lessons/recursion/hanoiboard/HanoiBoard.fr.html
rename to src/lessons/recursion/hanoi/HanoiBoard.fr.html
diff --git a/src/lessons/recursion/hanoiboard/HanoiBoard.html b/src/lessons/recursion/hanoi/HanoiBoard.html
similarity index 100%
rename from src/lessons/recursion/hanoiboard/HanoiBoard.html
rename to src/lessons/recursion/hanoi/HanoiBoard.html
diff --git a/src/lessons/recursion/hanoi/HanoiBoard.java b/src/lessons/recursion/hanoi/HanoiBoard.java
new file mode 100644
index 0000000..026c6b2
--- /dev/null
+++ b/src/lessons/recursion/hanoi/HanoiBoard.java
@@ -0,0 +1,30 @@
+package lessons.recursion.hanoi;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.recursion.hanoi.universe.HanoiEntity;
+import lessons.recursion.hanoi.universe.HanoiWorld;
+
+public class HanoiBoard extends ExerciseTemplated {
+
+	public HanoiBoard(Lesson lesson) {
+		super(lesson);
+				
+		/* Create initial situation */
+		HanoiWorld[] myWorlds = new HanoiWorld[3];
+		myWorlds[0] = new HanoiWorld("solve(0,1)",  
+				new Integer[] {8,7,6,5,4,3,2,1}, new Integer[0],new Integer[0]);
+		myWorlds[0].setParameter(new Object[] {0,1});		
+		myWorlds[1] = new HanoiWorld("solve(2,0)", 
+				new Integer[0] , new Integer[0],new Integer[] {8,7,6,5,4,3,2,1});
+		myWorlds[1].setParameter(new Object[] {2,0});		
+		myWorlds[2] = new HanoiWorld("solve(1,2)", 
+				new Integer[0], new Integer[] {8,7,6,5,4,3,2,1}, new Integer[0]);
+		myWorlds[2].setParameter(new Object[] {1,2});		
+		for (int i=0;i<myWorlds.length;i++) {
+			new HanoiEntity("worker",myWorlds[i]);
+		}
+		
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/recursion/hanoi/HanoiBoardEntity.java b/src/lessons/recursion/hanoi/HanoiBoardEntity.java
new file mode 100644
index 0000000..3b711ea
--- /dev/null
+++ b/src/lessons/recursion/hanoi/HanoiBoardEntity.java
@@ -0,0 +1,35 @@
+package lessons.recursion.hanoi;
+
+import lessons.recursion.hanoi.universe.HanoiEntity;
+
+public class HanoiBoardEntity extends HanoiEntity {
+
+	public void run() {
+		solve((Integer)getParam(0),(Integer) getParam(1));
+	}
+
+	/* BEGIN TEMPLATE */
+	public void solve(int src,int dst) {
+		solve(src,dst, getSlotSize(src));
+	}
+
+	public void solve(int src, int dst, int height) {
+		/* BEGIN SOLUTION */
+		if (height!=0) {
+			int other=-1;
+			if (src+dst==1) /* 0+1 */
+				other=2;
+			if (src+dst==2) /* 0+2 */
+				other=1;
+			if (src+dst==3) /* 1+2 */
+				other=0;
+
+			solve(src,other, height-1);
+			move(src,dst);
+			solve(other,dst,height-1);
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
diff --git a/src/lessons/recursion/hanoiboard/HanoiBoardEntity.py b/src/lessons/recursion/hanoi/HanoiBoardEntity.py
similarity index 100%
rename from src/lessons/recursion/hanoiboard/HanoiBoardEntity.py
rename to src/lessons/recursion/hanoi/HanoiBoardEntity.py
diff --git a/src/lessons/recursion/hanoi/Main.fr.html b/src/lessons/recursion/hanoi/Main.fr.html
new file mode 100644
index 0000000..b099142
--- /dev/null
+++ b/src/lessons/recursion/hanoi/Main.fr.html
@@ -0,0 +1,4 @@
+<h1>Les tours de Hanoï</h1>
+<p>Voici l'exercice ultra classique sur la récursivité. Il n'est pas très
+développé ici, mais je ne sais pas vraiment quoi rajouter pour prolonger le
+plaisir. Si vous avez des idées, n'hésitez pas à nous en faire part.</p>
diff --git a/src/lessons/recursion/hanoi/Main.html b/src/lessons/recursion/hanoi/Main.html
new file mode 100644
index 0000000..df86d3c
--- /dev/null
+++ b/src/lessons/recursion/hanoi/Main.html
@@ -0,0 +1,4 @@
+<h1>Hanoi towers</h1>
+<p>Here comes the super classical exercise on recursion. It's not very
+developped here, I'm not sure of what I could add to this lesson. If
+you have any idea, please submit them.</p>
diff --git a/src/lessons/recursion/hanoi/Main.java b/src/lessons/recursion/hanoi/Main.java
new file mode 100644
index 0000000..f5a2f11
--- /dev/null
+++ b/src/lessons/recursion/hanoi/Main.java
@@ -0,0 +1,10 @@
+package lessons.recursion.hanoi;
+
+import jlm.core.model.lesson.Lesson;
+
+public class Main extends Lesson {
+	@Override
+	protected void loadExercises() {
+		addExercise(new HanoiBoard(this));
+	}
+}
diff --git a/src/lessons/recursion/hanoi/icon.png b/src/lessons/recursion/hanoi/icon.png
new file mode 100644
index 0000000..adced24
Binary files /dev/null and b/src/lessons/recursion/hanoi/icon.png differ
diff --git a/src/lessons/recursion/hanoi/short_desc.fr.html b/src/lessons/recursion/hanoi/short_desc.fr.html
new file mode 100644
index 0000000..37afd52
--- /dev/null
+++ b/src/lessons/recursion/hanoi/short_desc.fr.html
@@ -0,0 +1,5 @@
+<h3>Les tours de Hanoï</h3>
+<p>Voici l'exercice ultra classique de récursivité.</p>
+
+<p>C'est un exercice d'application de la récursivité, que vous devez maîtriser
+avant de tenter cette leçon.</p>
diff --git a/src/lessons/recursion/hanoi/short_desc.html b/src/lessons/recursion/hanoi/short_desc.html
new file mode 100644
index 0000000..c9c7ba9
--- /dev/null
+++ b/src/lessons/recursion/hanoi/short_desc.html
@@ -0,0 +1,5 @@
+<h3>Hanoi towers</h3>
+<p>Here comes the super classical exercise on recursion.</p>
+
+<p>This is an application exercise of recursion, that you should master to take this
+lesson.</p>
diff --git a/src/lessons/recursion/hanoi/universe/HanoiEntity.java b/src/lessons/recursion/hanoi/universe/HanoiEntity.java
new file mode 100644
index 0000000..65a6ec6
--- /dev/null
+++ b/src/lessons/recursion/hanoi/universe/HanoiEntity.java
@@ -0,0 +1,64 @@
+package lessons.recursion.hanoi.universe;
+/* BEGIN TEMPLATE */
+import jlm.universe.Entity;
+import jlm.universe.World;
+
+public class HanoiEntity extends Entity {
+	/** Instantiation Constructor (used by exercises to setup the world) 
+	 * Must call super(name, world). If you had fields to setup, you'd  have to add more parameters
+	 */
+	public HanoiEntity(String name, World world) {
+		/* BEGIN HIDDEN */
+		super(name,world);
+		/* END HIDDEN */
+	}
+
+	/** Part of the copy process 
+	 * Must call super(name)
+	 */
+	public HanoiEntity(String name) {
+		/* BEGIN HIDDEN */
+		super(name);
+		/* END HIDDEN */
+	}
+	/** Must exist too. Calling HanoiEntity("dummy name") is ok */
+	public HanoiEntity() {
+		/* BEGIN HIDDEN */
+		this("Hanoi Entity");
+		/* END HIDDEN */
+	}
+
+	/** Must *NOT* call HanoiEntity(name, world) because it's called in a traversal of the world so you don't want to modify it.
+	 * Instead, call HanoiEntity(name), leaving the world field empty; the JLM will fill it with the right value afterward 
+	 */
+	@Override
+	public Entity copy() {
+		/* BEGIN HIDDEN */
+		return new HanoiEntity(name);
+		/* END HIDDEN */
+	}
+
+	/** Must exist so that exercises can instantiate your entity (Entity is abstract) */
+	@Override
+	public void run() {
+	}
+
+	/** Part of your world logic */
+	public void move(int src, int dst) {
+		/* BEGIN HIDDEN */
+		((HanoiWorld) world).move(src,dst);
+		stepUI();
+		/* END HIDDEN */
+	}
+	public int getSlotSize(int slot) {
+		return ((HanoiWorld) world).getSlotSize(slot);
+	}
+	
+	/* BEGIN HIDDEN */
+	@Override
+	public String toString(){
+		return "HanoiEntity (" + this.getClass().getName() + ")";
+	}
+	/* END HIDDEN */
+}
+/* END TEMPLATE */
diff --git a/src/lessons/recursion/hanoi/universe/HanoiMovePanel.java b/src/lessons/recursion/hanoi/universe/HanoiMovePanel.java
new file mode 100644
index 0000000..2e29bb3
--- /dev/null
+++ b/src/lessons/recursion/hanoi/universe/HanoiMovePanel.java
@@ -0,0 +1,101 @@
+package lessons.recursion.hanoi.universe;
+
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import jlm.core.model.Game;
+import jlm.universe.EntityControlPanel;
+
+/**
+ * The control panel for the burned pancake world. 
+ * It allows you to use to flip the pancake
+ * @see EntityControlPanel
+ * @see HanoiWorld
+ */
+public class HanoiMovePanel extends EntityControlPanel {
+
+	private static final long serialVersionUID = 1L;
+	private JComboBox sourceSelector;
+	private JComboBox destinationSelector;
+	private JButton validateButton;
+
+	/**
+	 * Constructor of HanoiMovePanel
+	 * It initializes the command panel
+	 */
+	public HanoiMovePanel() {
+		super();
+		this.add(this.createMovePanel());
+	}
+
+	/**
+	 * Create the command panel of the HanoiMovePanel
+	 * @return a JPanel containing the move panel
+	 */
+	private JPanel createMovePanel() {
+		JPanel movePanel = new JPanel() ;
+
+		movePanel.add(new JLabel("move"));
+
+		this.initSelectors();
+		movePanel.add(this.sourceSelector);
+		movePanel.add(this.destinationSelector);
+
+		this.initValidateButton();
+		movePanel.add(this.validateButton);
+
+		return movePanel;
+	}
+
+	/**
+	 * Initialize the validate button
+	 */
+	private void initValidateButton() {
+		this.validateButton = new JButton("Validate");
+		this.validateButton.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				HanoiEntity he = (HanoiEntity) Game.getInstance().getSelectedEntity();
+				int src = sourceSelector.getSelectedIndex();
+				int dst = destinationSelector.getSelectedIndex();
+				try {
+					he.move(src, dst);
+				} catch (IllegalArgumentException iae) { 
+					JOptionPane.showMessageDialog(null, iae.getLocalizedMessage(),i18n.tr("Invalid move"), JOptionPane.ERROR_MESSAGE);
+				}
+
+			}
+		});
+	}
+
+	/**
+	 * Initialize the source and the destination selectors
+	 */
+	private void initSelectors() {
+		Integer[] values = new Integer[3];
+		for (int i = 0 ; i < 3 ; i++)
+			values[i] = i;
+		
+		this.sourceSelector = new JComboBox(values);
+		this.destinationSelector = new JComboBox(values);
+	}
+
+	/**
+	 * Allow to enable or disable each component of the control panel
+	 * @param enabled if the components shall be enabled or not
+	 */
+	@Override
+	public void setEnabledControl(boolean enabled) {
+		this.sourceSelector.setEnabled(enabled);
+		this.destinationSelector.setEnabled(enabled);
+		this.validateButton.setEnabled(enabled);
+	}
+	
+
+}
diff --git a/src/lessons/recursion/hanoi/universe/HanoiWorld.fr.html b/src/lessons/recursion/hanoi/universe/HanoiWorld.fr.html
new file mode 100644
index 0000000..9b3561b
--- /dev/null
+++ b/src/lessons/recursion/hanoi/universe/HanoiWorld.fr.html
@@ -0,0 +1,29 @@
+<h1>Le monde des tours de Hanoï</h1>
+
+<p>
+Ce monde implémente le problème ultra classique de Hanoï. Il vous est
+demandé de déplacer une pile de disques du piquet où ils se trouvent vers un
+piquet cible (passé comme second paramètre dans le nom du monde -- numéro 1
+pour le monde par défaut). Il y a quelques contraintes supplémentaires: il
+est interdit de déplacer plus d'un disque à la fois, ainsi que de placer un
+disque plus grand sur un disque plus petit.</p>
+
+<p>Seules trois fonctions sont fournies :</p>
+
+<pre class="Java">void move(int src, int dst)</pre>
+<pre class="python">move(src, dst) throws HanoiInvalidMove</pre>
+
+Elle déplace un disque d'un piquet <code>src</code> vers le piquet
+<code>dst</code>. Si vous demandez un déplacement invalide (comme le
+placement d'un disque sur un disque plus petit), une exception
+IllegalArgumentException est levée. 
+
+<pre class="Java">int getSlotSize(int slot);</pre>
+<pre class="python">getSlotSize(slot)</pre>
+Retourne le nombre de disques placés sur un piquet donné. Cette fonction est
+surtout utile pour initialiser la récursion et déterminer le nombre d'appels
+récursifs à réaliser.
+
+<pre class="Java">boolean isSelected()</pre>
+<pre class="python">isSelected()</pre>
+Renvoi si le monde actuel est sélectionné dans l'interface graphique.
diff --git a/src/lessons/recursion/hanoi/universe/HanoiWorld.html b/src/lessons/recursion/hanoi/universe/HanoiWorld.html
new file mode 100644
index 0000000..0130c96
--- /dev/null
+++ b/src/lessons/recursion/hanoi/universe/HanoiWorld.html
@@ -0,0 +1,27 @@
+<h1>HanoiWorld</h1>
+
+<p>
+This world implements the ultra-classical Hanoi problem. You are asked
+to move the disk pile from the stick where they are to the target
+stick (given as second parameter in the world's name -- number 1 for
+the default world). There is some extra constraint: you can only move
+one disk at a time, and you cannot move a big disk over a smaller
+one.</p>
+
+<p>Only 3 functions are provided:</p>
+
+<pre class="Java">void move(int src, int dst)</pre>
+<pre class="python">move(src, dst) throws HanoiInvalidMove</pre>
+
+Moves one disk from the stick <code>src</code> onto the stick
+<code>dst</code>. If you try to do an invalid move (like laying a disk
+over a smaller one), an IllegalArgumentException is thrown. 
+
+<pre class="Java">int getSlotSize(int slot);</pre>
+<pre class="python">getSlotSize(slot)</pre>
+Returns the amount of disks placed on the specified slot. This is mainly 
+used to initialize the recursion and set the amount of recursive call to execute.
+
+<pre class="Java">boolean isSelected()</pre>
+<pre class="python">isSelected()</pre>
+Returns whether the current world is selected in the graphical interface.
diff --git a/src/lessons/recursion/hanoi/universe/HanoiWorld.java b/src/lessons/recursion/hanoi/universe/HanoiWorld.java
new file mode 100644
index 0000000..85cf289
--- /dev/null
+++ b/src/lessons/recursion/hanoi/universe/HanoiWorld.java
@@ -0,0 +1,173 @@
+package lessons.recursion.hanoi.universe;
+
+import java.util.Vector;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+import javax.swing.ImageIcon;
+
+import jlm.core.model.Game;
+import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
+import jlm.core.ui.WorldView;
+import jlm.universe.EntityControlPanel;
+import jlm.universe.World;
+
+/* BEGIN TEMPLATE */
+public class HanoiWorld extends World {	
+	/** A copy constructor (mandatory for the internal compilation mechanism to work)
+	 * 
+	 * There is normally no need to change it, but it must be present. 
+	 */ 
+	public HanoiWorld(HanoiWorld other) {
+		super(other);
+	}
+	
+	/** The constructor that the exercises will use to setup the world.
+	 *  
+	 * It must begin by super(name), and the rest is free (depending on the state describing your world).
+	 * It is a good idea to use setDelay to specify the default animation delay, but this is not mandatory.
+	 * 
+	 * You can perfectly have several such constructor. 
+	 * 
+	 * In general, you could even have none of them, but writing exercises will be harder. 
+	 * The metalesson, use this specific constructor, so please don't change its arguments.
+	 */
+	@SuppressWarnings("unchecked")
+	public HanoiWorld(String name, Integer[] A, Integer[] B, Integer[] C) {
+		super(name);
+		setDelay(200); /* Delay (in ms) in default animations */
+		slots = new Vector[] {new Vector<Integer>(), new Vector<Integer>(), new Vector<Integer>()};
+		
+		for (int i=0; i<A.length; i++) 
+			slots[0].add(A[i]);
+		for (int i=0; i<B.length; i++) 
+			slots[1].add(B[i]);
+		for (int i=0; i<C.length; i++) 
+			slots[2].add(C[i]);
+	}
+	
+	/** Reset the state of the current world to the one passed in argument
+	 * 
+	 * This is mandatory for the JLM good working. Even if the prototype says that the passed object can be 
+	 * any kind of world, you can be sure that it's of the same type than the current world. So, there is 
+	 * no need to check before casting your argument.
+	 * 
+	 * Do not forget to call super.reset(w) afterward, or some internal world fields may not get reset.
+	 */
+	@SuppressWarnings("unchecked")
+	@Override
+	public void reset(World w) {
+		HanoiWorld other = (HanoiWorld)w;
+		slots = new Vector[] {new Vector<Integer>(), new Vector<Integer>(), new Vector<Integer>()};
+		for (int slot=0;slot<3;slot++)
+			for (int i=0; i<other.slots[slot].size(); i++)
+				slots[slot].add( other.slots[slot].elementAt(i));
+		super.reset(w);		
+	}
+
+	/* BEGIN HIDDEN */
+	/** Returns a component able of displaying the world -- will be used in third exercise 
+	 * You should comment this for the first exercises */
+	@Override
+	public WorldView getView() {
+		return new HanoiWorldView(this);
+	}
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_hanoi.png");
+	}
+	/* END HIDDEN */
+	
+	/* BEGIN HIDDEN */
+	@Override
+	public String toString(){
+		StringBuffer sb = new StringBuffer();
+		sb.append("HanoiWorld "+getName()+": ");
+		sb.append("A: [");
+		for (Object i:slots[0].toArray()) 
+			sb.append(i+" ");
+		sb.append("] B: [");
+		for (Object i:slots[1].toArray()) 
+			sb.append(i+" ");
+		sb.append("] C: [");
+		for (Object i:slots[2].toArray()) 
+			sb.append(i+" ");
+		sb.append("]");
+		return sb.toString();
+	}
+	/* END HIDDEN */
+
+	/** Used to check whether the student code changed the world in the right state -- see exercise 4 */
+	@Override 
+	public boolean equals(Object o) {
+		/* BEGIN HIDDEN */
+		if (o == null || !(o instanceof HanoiWorld))
+			return false;
+		HanoiWorld other = (HanoiWorld) o;
+		for (int i=0;i<3;i++) {
+			if (!(this.slots[i].equals(other.slots[i])))
+				return false;
+		}
+		/* END HIDDEN */
+		return true;
+	}
+	
+	@Override
+	public String diffTo(World world) {
+		return null; // FIXME: how to represent this textually?
+	}
+	
+	/* Here comes the world logic */
+	/* BEGIN HIDDEN */
+	private Vector<Integer> slots[];
+	
+	/** This function is used by the view to retrieve the data to display */
+	protected Integer[] values(Integer	 i) {
+		return slots[i].toArray(new Integer[slots[i].size()]);
+	}
+	
+	/** This is the main function of the public interface 
+	 * @throws IllegalArgumentException if your move is not valid */
+	public void move(Integer src, Integer dst) {
+		if (src < 0 || src > 2 || dst < 0 || dst > 2) 
+			throw new IllegalArgumentException(Game.i18n.tr("Cannot move from slot {0} to {1}: the only existing slots are 0, 1 and 2",src,dst));
+		if (src == dst)
+			throw new IllegalArgumentException(Game.i18n.tr("Cannot move from slot {0} to itself",src));
+		if (slots[src].size() == 0)
+			throw new IllegalArgumentException(Game.i18n.tr("No disc to move from slot {0}",src));
+		
+		if (slots[dst].size() > 0 &&
+				slots[src].lastElement() > slots[dst].lastElement())
+			throw new IllegalArgumentException(
+					Game.i18n.tr("Cannot move disc from slot {0} to {1} small disk must remain over large ones but {2} > {3}",
+							src,dst,slots[src].lastElement(),slots[dst].lastElement()));
+		
+		slots[dst].add( slots[src].remove(slots[src].size()-1) );
+	}
+	public int getSlotSize(int slot) {
+		return slots[slot].size();
+	}
+	@Override
+	public void setupBindings(ProgrammingLanguage lang, ScriptEngine e) throws ScriptException {
+		if (lang.equals(Game.PYTHON)) {
+			e.eval( "def move(src,dst):\n"+
+					"  entity.move(src,dst)\n"+
+					"def getSlotSize(slot):\n"+
+					"  return entity.getSlotSize(slot)\n");
+		} else {
+			throw new RuntimeException("No binding of HanoiWorld for "+lang);
+		}
+	}
+	
+	/**
+	 * Return the panel which let the user to interact dynamically with the world
+	 */
+	@Override
+	public EntityControlPanel getEntityControlPanel() {
+		return new HanoiMovePanel();
+	}
+	/* END HIDDEN */
+
+}
+/* END TEMPLATE */
\ No newline at end of file
diff --git a/src/lessons/recursion/hanoi/universe/HanoiWorldView.java b/src/lessons/recursion/hanoi/universe/HanoiWorldView.java
new file mode 100644
index 0000000..e66f0aa
--- /dev/null
+++ b/src/lessons/recursion/hanoi/universe/HanoiWorldView.java
@@ -0,0 +1,64 @@
+package lessons.recursion.hanoi.universe;
+
+import java.awt.Color;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.geom.Rectangle2D;
+
+import jlm.core.ui.WorldView;
+import jlm.universe.World;
+
+public class HanoiWorldView extends WorldView {
+	private static final long serialVersionUID = 1L;
+	
+	public HanoiWorldView(World w) {
+		super(w);
+	}
+
+	@Override
+	public void paintComponent(Graphics g) {
+		HanoiWorld hw = (HanoiWorld)world;
+		super.paintComponent(g);
+		
+		Graphics2D g2 = (Graphics2D) g;
+
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		
+		double renderedX = 300.;
+		double renderedY = 250.;		
+		double ratio = Math.min(((double) getWidth()) / renderedX, ((double) getHeight()) / renderedY);
+		g2.translate(Math.abs(getWidth() - ratio * renderedX)/2., Math.abs(getHeight() - ratio * renderedY)/2.);
+		g2.scale(ratio, ratio);
+		
+		/* clear board */
+		g2.setColor(Color.white);
+		g2.fill(new Rectangle2D.Double(0., 0., renderedX, renderedY));
+		
+		
+		drawSlot(g2,hw.values(0), 50.);
+		drawSlot(g2,hw.values(1), 150.);
+		drawSlot(g2,hw.values(2), 250.);
+	}
+	
+	private void drawSlot(Graphics2D g2, Integer[] values, double xoffset) {
+		/* draw bar */
+		g2.setColor(Color.black);
+		g2.fill(new Rectangle2D.Double(xoffset-2, 55.,  2., 125.));
+		
+		if (values==null)
+			return;
+		
+		/* draw discs */
+		int height = 1;
+		for (int size : values) { 
+			g2.setColor(Color.yellow);
+			g2.fill(new Rectangle2D.Double( xoffset-size*5-3, 180-(15.*height),  size*10+3, 10));
+			g2.setColor(Color.black);
+			g2.draw(new Rectangle2D.Double( xoffset-size*5-3, 180-(15.*height),  size*10+3, 10));
+			height++;
+		}
+	}
+}
+
+
diff --git a/src/lessons/recursion/hanoiboard/HanoiBoard.java b/src/lessons/recursion/hanoiboard/HanoiBoard.java
deleted file mode 100644
index c1b2555..0000000
--- a/src/lessons/recursion/hanoiboard/HanoiBoard.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package lessons.recursion.hanoiboard;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.hanoi.HanoiEntity;
-import jlm.universe.hanoi.HanoiWorld;
-
-public class HanoiBoard extends ExerciseTemplated {
-
-	public HanoiBoard(Lesson lesson) {
-		super(lesson);
-				
-		/* Create initial situation */
-		HanoiWorld[] myWorlds = new HanoiWorld[3];
-		myWorlds[0] = new HanoiWorld("solve(0,1)",  
-				new Integer[] {8,7,6,5,4,3,2,1}, new Integer[0],new Integer[0]);
-		myWorlds[0].setParameter(new Object[] {0,1});		
-		myWorlds[1] = new HanoiWorld("solve(2,0)", 
-				new Integer[0] , new Integer[0],new Integer[] {8,7,6,5,4,3,2,1});
-		myWorlds[1].setParameter(new Object[] {2,0});		
-		myWorlds[2] = new HanoiWorld("solve(1,2)", 
-				new Integer[0], new Integer[] {8,7,6,5,4,3,2,1}, new Integer[0]);
-		myWorlds[2].setParameter(new Object[] {1,2});		
-		for (int i=0;i<myWorlds.length;i++) {
-			new HanoiEntity("worker",myWorlds[i]);
-		}
-		
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/recursion/hanoiboard/HanoiBoardEntity.java b/src/lessons/recursion/hanoiboard/HanoiBoardEntity.java
deleted file mode 100644
index b48d9d3..0000000
--- a/src/lessons/recursion/hanoiboard/HanoiBoardEntity.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package lessons.recursion.hanoiboard;
-
-import jlm.universe.hanoi.HanoiEntity;
-import jlm.universe.hanoi.HanoiInvalidMove;
-
-public class HanoiBoardEntity extends HanoiEntity {
-
-	public void run() throws HanoiInvalidMove {
-		solve((Integer)getParam(0),(Integer) getParam(1));
-	}
-
-	/* BEGIN TEMPLATE */
-	public void solve(int src,int dst) throws HanoiInvalidMove {
-		solve(src,dst, getSlotSize(src));
-	}
-
-	public void solve(int src, int dst, int height) throws HanoiInvalidMove {
-		/* BEGIN SOLUTION */
-		if (height!=0) {
-			int other=-1;
-			if (src+dst==1) /* 0+1 */
-				other=2;
-			if (src+dst==2) /* 0+2 */
-				other=1;
-			if (src+dst==3) /* 1+2 */
-				other=0;
-
-			solve(src,other, height-1);
-			move(src,dst);
-			solve(other,dst,height-1);
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/recursion/icon.png b/src/lessons/recursion/icon.png
new file mode 100644
index 0000000..b4f4653
Binary files /dev/null and b/src/lessons/recursion/icon.png differ
diff --git a/src/lessons/recursion/polygonfractal/PolygonFractalEntity.py b/src/lessons/recursion/polygonfractal/PolygonFractalEntity.py
index 342b3c8..81b5700 100644
--- a/src/lessons/recursion/polygonfractal/PolygonFractalEntity.py
+++ b/src/lessons/recursion/polygonfractal/PolygonFractalEntity.py
@@ -2,10 +2,10 @@
 def polygonFractal (levels, sides, length, shrink):
     # BEGIN SOLUTION
     if (levels == 0):
-      /* do nothing */
+      pass
     else:
       for i in range(sides):
-        forward(length);
+        forward(length)
         
         turnLeft((sides-2)*360/(sides*2))
         polygonFractal(levels-1, sides, length*shrink,shrink)
diff --git a/src/lessons/recursion/short_desc.fr.html b/src/lessons/recursion/short_desc.fr.html
new file mode 100644
index 0000000..1dee608
--- /dev/null
+++ b/src/lessons/recursion/short_desc.fr.html
@@ -0,0 +1,6 @@
+<h3>Les bases de la récursion</h3>
+<p>Découvrez la récursion en dessinant des arbres et d'autres figures avec la
+tortue Logo.</p>
+
+<p>Vous êtes supposé maîtriser les bases de la programmation avant de tenter
+cette leçon.</p>
diff --git a/src/lessons/recursion/short_desc.html b/src/lessons/recursion/short_desc.html
new file mode 100644
index 0000000..b233ab1
--- /dev/null
+++ b/src/lessons/recursion/short_desc.html
@@ -0,0 +1,6 @@
+<h3>Bases of recursion</h3>
+<p>Discover the recursive way of thinking by drawing trees and other
+figures with the Logo turtle.</p>
+
+<p>You are supposed to master the bases of programming to take this
+lesson.</p>
diff --git a/src/lessons/recursion/spiral/SpiralEntity.py b/src/lessons/recursion/spiral/SpiralEntity.py
index 8bf2805..0641043 100644
--- a/src/lessons/recursion/spiral/SpiralEntity.py
+++ b/src/lessons/recursion/spiral/SpiralEntity.py
@@ -2,11 +2,11 @@
 def spiral(steps, angle, length, increment):
   # BEGIN SOLUTION
   if (steps <= 0):
-    # do nothing
+    pass# do nothing
   else:
     forward(length)
     turnLeft(angle)
-    spiral(steps-1, angle, length+increment, increment):
+    spiral(steps-1, angle, length+increment, increment)
   # END SOLUTION
 # END TEMPLATE
 
diff --git a/src/lessons/recursion/spiraluse/SpiralUse.fr.html b/src/lessons/recursion/spiral/SpiralUse.fr.html
similarity index 100%
rename from src/lessons/recursion/spiraluse/SpiralUse.fr.html
rename to src/lessons/recursion/spiral/SpiralUse.fr.html
diff --git a/src/lessons/recursion/spiraluse/SpiralUse.html b/src/lessons/recursion/spiral/SpiralUse.html
similarity index 100%
rename from src/lessons/recursion/spiraluse/SpiralUse.html
rename to src/lessons/recursion/spiral/SpiralUse.html
diff --git a/src/lessons/recursion/spiral/SpiralUse.java b/src/lessons/recursion/spiral/SpiralUse.java
new file mode 100644
index 0000000..7e36695
--- /dev/null
+++ b/src/lessons/recursion/spiral/SpiralUse.java
@@ -0,0 +1,39 @@
+package lessons.recursion.spiral;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.World;
+import jlm.universe.turtles.Turtle;
+import jlm.universe.turtles.TurtleWorld;
+
+public class SpiralUse extends ExerciseTemplated {
+
+	public SpiralUse(Lesson lesson) {
+		super(lesson);
+
+		/* Create initial situation */
+		World[] myWorlds = new World[5];
+		
+		myWorlds[0] = new TurtleWorld("One", 400, 400);
+		myWorlds[0].setParameter(new Integer[] {0});		
+		new Turtle(myWorlds[0], "Hawksbill", 200, 200);
+
+		myWorlds[1] = new TurtleWorld("Two", 400, 400);
+		myWorlds[1].setParameter(new Integer[] {1});		
+		new Turtle(myWorlds[1], "Hawksbill", 200, 200);
+
+		myWorlds[2] = new TurtleWorld("Three", 400, 400);
+		myWorlds[2].setParameter(new Integer[] {2});		
+		new Turtle(myWorlds[2], "Hawksbill", 200, 200);
+
+		myWorlds[3] = new TurtleWorld("Four", 400, 400);
+		myWorlds[3].setParameter(new Integer[] {3});		
+		new Turtle(myWorlds[3], "Hawksbill", 200, 200);
+
+		myWorlds[4] = new TurtleWorld("Five", 400, 400);
+		myWorlds[4].setParameter(new Integer[] {4});		
+		new Turtle(myWorlds[4], "Hawksbill", 200, 200);
+		
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/recursion/spiral/SpiralUseEntity.java b/src/lessons/recursion/spiral/SpiralUseEntity.java
new file mode 100644
index 0000000..1125ce6
--- /dev/null
+++ b/src/lessons/recursion/spiral/SpiralUseEntity.java
@@ -0,0 +1,34 @@
+package lessons.recursion.spiral;
+
+import jlm.universe.turtles.Turtle;
+
+public class SpiralUseEntity extends Turtle {
+
+	public void spiral(int steps, int angle, int length, int increment)	{
+		if (steps <= 0) {
+			return;
+		} else {
+			forward(length);
+			turnLeft(angle);
+			spiral(steps-1, angle, length+increment, increment);
+		}
+	}
+
+	/* BEGIN TEMPLATE */
+	void doit(int page) {
+		/* BEGIN SOLUTION */
+		switch (page) {
+		case 0:	spiral(100,90+1,1,2);  break;
+		case 1:	spiral(100,120+1,1,2); break;
+		case 2: spiral(5,360/5,100,0);  break;
+		case 3: spiral(5,2*360/5,150,0); break;
+		case 4: spiral(360,1,1,0);   break;	
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+	public void run() {
+		doit((Integer)getParam(0));
+	}
+}
diff --git a/src/lessons/recursion/spiral/SpiralUseEntity.py b/src/lessons/recursion/spiral/SpiralUseEntity.py
new file mode 100644
index 0000000..723557c
--- /dev/null
+++ b/src/lessons/recursion/spiral/SpiralUseEntity.py
@@ -0,0 +1,25 @@
+def spiral(steps, angle, length, increment):
+  if (steps <= 0):
+    pass
+  else:
+    forward(length)
+    turnLeft(angle)
+    spiral(steps-1, angle, length+increment, increment)
+  
+# BEGIN TEMPLATE
+def doit(page):
+  # BEGIN SOLUTION
+  if page == 0:
+    spiral(100,90+1,1,2)
+  elif page == 1:
+    spiral(100,120+1,1,2)
+  elif page == 2:
+    spiral(5,360/5,100,0)
+  elif page == 3:
+    spiral(5,2*360/5,150,0)
+  elif page == 4:
+    spiral(360,1,1,0)  
+  # END SOLUTION
+# END TEMPLATE
+  
+doit(getParam(0))
diff --git a/src/lessons/recursion/spiraluse/SpiralUse.java b/src/lessons/recursion/spiraluse/SpiralUse.java
deleted file mode 100644
index ee1ea1a..0000000
--- a/src/lessons/recursion/spiraluse/SpiralUse.java
+++ /dev/null
@@ -1,39 +0,0 @@
-package lessons.recursion.spiraluse;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.World;
-import jlm.universe.turtles.Turtle;
-import jlm.universe.turtles.TurtleWorld;
-
-public class SpiralUse extends ExerciseTemplated {
-
-	public SpiralUse(Lesson lesson) {
-		super(lesson);
-
-		/* Create initial situation */
-		World[] myWorlds = new World[5];
-		
-		myWorlds[0] = new TurtleWorld("One", 400, 400);
-		myWorlds[0].setParameter(new Integer[] {0});		
-		new Turtle(myWorlds[0], "Hawksbill", 200, 200);
-
-		myWorlds[1] = new TurtleWorld("Two", 400, 400);
-		myWorlds[1].setParameter(new Integer[] {1});		
-		new Turtle(myWorlds[1], "Hawksbill", 200, 200);
-
-		myWorlds[2] = new TurtleWorld("Three", 400, 400);
-		myWorlds[2].setParameter(new Integer[] {2});		
-		new Turtle(myWorlds[2], "Hawksbill", 200, 200);
-
-		myWorlds[3] = new TurtleWorld("Four", 400, 400);
-		myWorlds[3].setParameter(new Integer[] {3});		
-		new Turtle(myWorlds[3], "Hawksbill", 200, 200);
-
-		myWorlds[4] = new TurtleWorld("Five", 400, 400);
-		myWorlds[4].setParameter(new Integer[] {4});		
-		new Turtle(myWorlds[4], "Hawksbill", 200, 200);
-		
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/recursion/spiraluse/SpiralUseEntity.java b/src/lessons/recursion/spiraluse/SpiralUseEntity.java
deleted file mode 100644
index f8c6436..0000000
--- a/src/lessons/recursion/spiraluse/SpiralUseEntity.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package lessons.recursion.spiraluse;
-
-import jlm.universe.turtles.Turtle;
-
-public class SpiralUseEntity extends Turtle {
-
-	public void spiral(int steps, int angle, int length, int increment)	{
-		if (steps <= 0) {
-			return;
-		} else {
-			forward(length);
-			turnLeft(angle);
-			spiral(steps-1, angle, length+increment, increment);
-		}
-	}
-
-	/* BEGIN TEMPLATE */
-	void doit(int page) {
-		/* BEGIN SOLUTION */
-		switch (page) {
-		case 0:	spiral(100,90+1,1,2);  break;
-		case 1:	spiral(100,120+1,1,2); break;
-		case 2: spiral(5,360/5,100,0);  break;
-		case 3: spiral(5,2*360/5,150,0); break;
-		case 4: spiral(360,1,1,0);   break;	
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	public void run() {
-		doit((Integer)getParam(0));
-	}
-}
diff --git a/src/lessons/recursion/spiraluse/SpiralUseEntity.py b/src/lessons/recursion/spiraluse/SpiralUseEntity.py
deleted file mode 100644
index d409d0d..0000000
--- a/src/lessons/recursion/spiraluse/SpiralUseEntity.py
+++ /dev/null
@@ -1,22 +0,0 @@
-def spiral(steps, angle, length, increment):
-  if (steps <= 0):
-    return
-  else:
-    forward(length)
-    turnLeft(angle)
-    spiral(steps-1, angle, length+increment, increment)
-  
-# BEGIN TEMPLATE
-def doit(page):
-  # BEGIN SOLUTION
-  switch (page):
-    case 0:  spiral(100,90+1,1,2);  break;
-    case 1:  spiral(100,120+1,1,2); break;
-    case 2: spiral(5,360/5,100,0);  break;
-    case 3: spiral(5,2*360/5,150,0); break;
-    case 4: spiral(360,1,1,0);   break;  
-    }
-  # END SOLUTION
-# END TEMPLATE
-  
-doit(getParam(0))
diff --git a/src/lessons/recursion/square/Square.fr.html b/src/lessons/recursion/square/Square.fr.html
index 60cfd89..3f70f50 100644
--- a/src/lessons/recursion/square/Square.fr.html
+++ b/src/lessons/recursion/square/Square.fr.html
@@ -23,8 +23,8 @@ complètement les tortues.
 <p>D'un point de vue pratique, la plupart des méthodes que vous connaissez à
 propos des buggles fonctionnent également avec les tortues, à quelques
 variantes près. En particulier, la méthode <code>forward</code> prend en
-argument le nombre de pas donné comme un nombre double (voir "About this
-world" dans le menu pour plus de détails).
+argument le nombre de pas donné comme un nombre double (voir «Aide / À
+propos de ce monde» dans le menu pour plus de détails).
 
 <h3>Des doubles ? Mais qu'est ce que c'est ?</h3>
 C'est simplement un nombre à virgule. Exemple:
diff --git a/src/lessons/recursion/tree/TreeEntity.py b/src/lessons/recursion/tree/TreeEntity.py
index 261c083..78964ff 100644
--- a/src/lessons/recursion/tree/TreeEntity.py
+++ b/src/lessons/recursion/tree/TreeEntity.py
@@ -2,7 +2,7 @@
 def tree(steps, length, angle, shrink):
   # BEGIN SOLUTION
   if (steps <= 0):
-    # do nothing 
+    pass# do nothing 
   else:
     forward(length)
     turnRight(angle)
diff --git a/src/lessons/smn/Main.fr.html b/src/lessons/smn/Main.fr.html
deleted file mode 100644
index 7872fcf..0000000
--- a/src/lessons/smn/Main.fr.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<h1>Sciences Manuelles du Numérique</h1>
-
-<p>Différentes activités développées pour les Sciences Manuelles du Numérique</p>
diff --git a/src/lessons/smn/Main.html b/src/lessons/smn/Main.html
deleted file mode 100644
index e71266a..0000000
--- a/src/lessons/smn/Main.html
+++ /dev/null
@@ -1,3 +0,0 @@
-<h1>Computer Science in Real Life</h1>
-
-<p>Few activities developped for Computer Science in Real Life</p>
diff --git a/src/lessons/smn/Main.java b/src/lessons/smn/Main.java
deleted file mode 100644
index c1c8431..0000000
--- a/src/lessons/smn/Main.java
+++ /dev/null
@@ -1,17 +0,0 @@
-package lessons.smn;
-
-import jlm.core.model.lesson.Lesson;
-import lessons.smn.baseball.easy.BaseballGame;
-import lessons.smn.baseball.medium.BaseballGameMorePlayers;
-import lessons.smn.pancake.burned.BurnedPancakePlate;
-import lessons.smn.pancake.raw.RawPancakePlate;
-
-public class Main extends Lesson {
-	
-	protected void loadExercises() {
-		addExercise(new RawPancakePlate(this));
-		addExercise(new BurnedPancakePlate(this));
-		addExercise(new BaseballGame(this));
-		addExercise(new BaseballGameMorePlayers(this));
-	}
-}
diff --git a/src/lessons/smn/baseball/easy/BaseballGame.fr.html b/src/lessons/smn/baseball/easy/BaseballGame.fr.html
deleted file mode 100644
index da5292b..0000000
--- a/src/lessons/smn/baseball/easy/BaseballGame.fr.html
+++ /dev/null
@@ -1,193 +0,0 @@
-<h1>Baseball</h1>
-<p>
-Ce monde implémente le jeu du baseball multicolore, dans lequel plusieurs
-joueurs veulent retourner à leur base. Les bases sont dans une disposition
-circulaire et ont leur propre couleur. Il y a deux joueurs pour toutes les
-bases sauf une, qui ne dispose donc que d'un joueur dans son équipe. Il vous
-est demandé de déplacer les joueurs jusqu'à la base qui a la même couleur
-que la leur. Le seul mouvement autorisé est, pour l'un des deux joueurs
-présents sur l'une des deux bases située à côté de la base ayant un seul
-joueur de se déplacer et de remplir le trou, laissant un nouveau trou sur la
-base qu'il vient de quitter.
-</p>
-<p>
-Notes:
-<ul>
-<li>
-La couleur d'une base est donnée par son index. 
-</li>
-<li>
-Le trou a une couleur de -1.
-</li>
-<li>
-La base qui a un seul joueur sur le terrain a <i>getAmountOfBases()-1</i>
-comme index
-</li>
-</ul>
-</p>
-
-<div>
-Six méthodes vous sont fournies :
-<p>
-<pre>void move(int baseSrc, int playerSrc)</pre>
-
-Déplace le joueur de la position <code>playerLocation</code> de la base
-<code>baseSrc</code> au trou.
-</p><p>
-<pre>int getPlayerColor(int baseIndex, int playerLocation) </pre>
-
-Renvoie la couleur du joueur à la position <code>playerLocation</code> ( 0
-ou 1 ) de la base <code>baseIndex</code>.  La couleur -1 correspond au trou.
-</p><p>
-<pre>int getHoleBase()</pre>
-
-Renvoie l'index de la base où se trouve le trou
-</p><p>
-<pre>int getHolePositionInBase()</pre>
-
-Renvoie la position de joueur vide dans la base où se situe le trou
-</p><p>	
-<pre>boolean isBaseSorted( int baseIndex )</pre>
-
-Renvoie VRAI si tous les joueurs sur la base <code>baseSrc</code> sont sur
-la bonne base.  
-</p><p>
-<pre>int getAmountOfBases()</pre>
-
-Renvoie le nombre de bases dans le terrain
-</p>
-</div>
-
-<br/><br/><hr/><br/>
-<div class="tip" id="tip-1" alt="Montrer l'indice 1 ( le prototype des méthodes à utiliser)">
-<p>Les prototypes des méthodes que vous pouvez utiliser sont les suivants :</p>
-
-<pre>
-<p>
-private void bringPlayerHome(int baseSrc, int playerSrc, int baseDst, int
-playerDst) throws InvalidMoveException
-</p><p>
-Déplace le joueur de la position <code>playerLocation</code> de la base
-<code>baseSrc</code> à la position <code>playerDst</code> de la base
-<code>baseDst</code>.
-</p><p>
-private int[] findNearestPlayer(int colorWanted, int firstBaseToSearch )
-throws InvalidPositionException
-</p><p>
-Renvoie l'index de la base et la position sur celle-ci du joueur le plus
-proche ayant <code>colorWanted</code> comme couleur. La recherche commence à
-la base d'index <code>firstBaseToSearch</code>
-</p><p>
-private void bringHole(int baseDst, int playerDst , int playerToProtect)
-throws InvalidMoveException
-</p><p>
-Amène le trou à la position <code>playerDst</code> de la base
-<code>baseDst</code> tout en protégeant la position
-<code>playerToProtect</code> durant le trajet
-</p>
-</pre>
-</div>
-
-<br/><br/><hr/><br/>
-
-<div class="tip" id="tip-2" alt="Montrer l'indice 2 (le pseudo-code de la fonction solve)">
-<p>L'algorithme de la méthode solve est le suivant :</p>
-<pre> 
-BEGIN
-	colorWanted <- getBaseColor(baseIndex)
-	IF getPlayerColor(baseIndex, 0) != colorWanted 
-	THEN
-		IF getPlayerColor(baseIndex,1) == colorWanted
-		THEN
-			bringHole(baseIndex, 0, 1)
-			move(baseIndex, 1)
-		ELSE
-			wantedPlayerLocation <- findNearestPlayer(colorWanted, baseIndex+1 )
-			bringHole( wantedPlayerLocation[0]-1 , 0,wantedPlayerLocation[1] )
-			bringPlayerHome(wantedPlayerLocation[0], wantedPlayerLocation[1], baseIndex,0)
-		END_IF
-	END_IF
-	IF getPlayerColor(baseIndex, 1) != colorWanted 
-	THEN
-		wantedPlayerLocation <- this.findNearestPlayer(colorWanted, baseIndex+1)
-		bringHole( wantedPlayerLocation[0]-1 , 1 , wantedPlayerLocation[1] )
-		bringPlayerHome( wantedPlayerLocation[0] , wantedPlayerLocation[1] , baseIndex , 1 )
-	END_IF
-END
-</pre>
-</div>
-
-<br/><br/><hr/><br/>
-
-<div class="tip" id="tip-3" alt="Montrer l'indice 3 (le pseudo-code de bringHole)">
-<p>L'algorithme de la méthode bringHole est le suivant :</p>
-<pre> 
-BEGIN
-	holeBaseLocation[0] <- getHoleBase()
-	holeBaseLocation[1] <- getHolePositionInBase()
-	IF baseDst > holeLocation[0]
-	THEN
-		FOR i FROM holeLocation[0]+1 TO baseDst BY 1
-		DO
-			move(i, playerDst)
-		END_FOR
-	ELSE 
-		IF baseDst < holeLocation[0]
-		THEN
-			FOR i FROM holeLocation[0]-1 DOWNTO baseDst+1 BY -1
-			DO
-				move(i,1-playerToProtect)
-			END_FOR
-			move(baseDst,playerDst);
-		ELSE 
-			IF baseDst == holeLocation[0] AND playerDst != holeLocation[1]
-			THEN
-				move(baseDst,playerDst);
-			END_IF
-		END_IF
-	END_IF
-END
-</pre>
-</div>
-
-<br/><br/><hr/><br/>
-
-<div class="tip" id="tip-4" alt="Montrer l'indice 4 (le pseudo-code de findNearestPlayer)">
-<p>L'algorithme de la méthode findNearestPlayer est le suivant :</p>
-<pre> 
-BEGIN
-	nbBases <- getAmountOfBases()
-	found <- false;
-	i <- firstBaseToSearch
-	WHILE i < nbBases AND !found
-	DO
-		FOR j FROM 0 TO 1 BY 1
-		DO
-			IF getPlayerColor(i, j)== colorWanted AND !found
-			THEN
-				location[0] <- i;
-				location[1] <- j;
-				found <- true;
-			END_IF
-		END_FOR
-		i <- i+1
-	END_WHILE
-	RETURN location
-END
-</pre>
-</div>
-<br/><br/><hr/><br/>
-<div class="tip" id="tip-5" alt="Montrer l'indice 5(le pseudo-code de bringPlayerHome)">
-<p>L'algorithme de la méthode bringPlayerHome est le suivant :</p>
-<pre> 
-PRECONDITION: the hole is on the base of index baseSrc-1
-BEGIN
-		move( baseSrc,playerSrc)
-		FOR i FROM baseSrc-1 DOWNTO baseDst+1 BY -1
-		DO
-			move(i,1-playerDst)
-			move(i-1,playerDst)
-			move(i,playerDst)
-		END_FOR
-</pre>
-</div>
diff --git a/src/lessons/smn/baseball/easy/BaseballGame.html b/src/lessons/smn/baseball/easy/BaseballGame.html
deleted file mode 100644
index 87cb052..0000000
--- a/src/lessons/smn/baseball/easy/BaseballGame.html
+++ /dev/null
@@ -1,175 +0,0 @@
-<h1>Baseball</h1>
-<p>
-This world implements the baseball game, in which several players want to go back to their bases. The bases make a circle and have their own colors. There are two players for one base, except one, which has only one player in its team.
-
-You are asked to make the players go on the bases which colors correspond to theirs. The only allowed move is for one of the two players standing on one of the two bases which are directly next to the base with only one player to move and fill the hole, leaving a new one on the base it just left.
-</p>
-<p>
-Memento:
-<ul>
-<li>
-The color of a base is given by its index. 
-</li>
-<li>
-The hole has a color of -1.
-</li>
-<li>
-The base which has only one player on the field has <i>getAmountOfBases()-1</i> as index
-</li>
-</ul>
-</p>
-
-<div>
-There are six methods provided :
-<p>
-<pre>void move(int baseSrc, int playerSrc)</pre>
-
-Move the player on position <code>playerLocation</code> from the base <code>baseSrc</code> to the hole.
-</p><p>
-<pre>int getPlayerColor(int baseIndex, int playerLocation) </pre>
-
-Return the color of the player on position <code>playerLocation</code> ( 0 or 1 ) from the base <code>baseIndex</code>.
-The color -1 is the hole.
-</p><p>
-<pre>int getHoleBase() </pre>
-
-Return the index of the base where the hole is located
-</p><p>
-<pre>int getHolePositionInBase()</pre>
-
-Return the player's position in the base where the hole is located
-</p><p>	
-<pre>boolean isBaseSorted( int baseIndex)</pre>
-
-Return TRUE if all players of the base <code>baseSrc</code> are home  
-</p><p>
-<pre>int getAmountOfBases()</pre>
-
-Return the amount of bases in the field.
-</p>
-</div>
-
-<br/><br/><hr/><br/>
-<div class="tip" id="tip-1" alt="Show Tip 1 ( the methods's prototype)">
-<p>The prototypes of the methods you may use are the followings :</p>
-
-<pre>
-<p>
-private void bringPlayerHome(int baseSrc, int playerSrc, int baseDst, int playerDst) throws InvalidMoveException
-</p><p>
-Move the player in position <code>playerSrc</code> of the base <code>baseSrc</code> to the position <code>playerDst</code> from the base <code>baseDst</code>
-</p><p>
-private int[] findNearestPlayer(int colorWanted, int firstBaseToSearch ) throws InvalidPositionException
-</p><p>
-Return the base's number and the position of the nearest player which has<code>colorWanted</code> as color. It begins the search at the base <code>firstBaseToSearch</code>
-</p><p>
-private void bringHole(int baseDst, int playerDst , int playerToProtect) throws InvalidMoveException
-</p><p>
-Bring the hole to the position <code>playerDst</code> from the base <code>baseDst</code> while protecting the position <code>playerToProtect</code> during the travel
-</p>
-</pre>
-</div>
-
-<br/><br/><hr/><br/>
-
-<div class="tip" id="tip-2" alt="Show Tip 2 (Pseudo-code of solve)">
-<p>The algorithm of the solve method is the following:</p>
-<pre> 
-BEGIN
-	colorWanted <- getBaseColor(baseIndex)
-	IF getPlayerColor(baseIndex, 0) != colorWanted 
-	THEN
-		IF getPlayerColor(baseIndex,1) == colorWanted
-		THEN
-			bringHole(baseIndex, 0, 1)
-			move(baseIndex, 1)
-		ELSE
-			wantedPlayerLocation <- findNearestPlayer(colorWanted, baseIndex+1 )
-			bringHole( wantedPlayerLocation[0]-1 , 0,wantedPlayerLocation[1] )
-			bringPlayerHome(wantedPlayerLocation[0], wantedPlayerLocation[1], baseIndex,0)
-		END_IF
-	END_IF
-	IF getPlayerColor(baseIndex, 1) != colorWanted 
-	THEN
-		wantedPlayerLocation <- this.findNearestPlayer(colorWanted, baseIndex+1)
-		bringHole( wantedPlayerLocation[0]-1 , 1 , wantedPlayerLocation[1] )
-		bringPlayerHome( wantedPlayerLocation[0] , wantedPlayerLocation[1] , baseIndex , 1 )
-	END_IF
-END
-</pre>
-</div>
-
-<br/><br/><hr/><br/>
-
-<div class="tip" id="tip-3" alt="Show Tip 3 ( Pseudo-code of bringHole )">
-<p>The algorithm of the bringHole method is the following:</p>
-<pre> 
-BEGIN
-	holeBaseLocation[0] <- getHoleBase()
-	holeBaseLocation[1] <- getHolePositionInBase()
-	IF baseDst > holeLocation[0]
-	THEN
-		FOR i FROM holeLocation[0]+1 TO baseDst BY 1
-		DO
-			move(i, playerDst)
-		END_FOR
-	ELSE 
-		IF baseDst < holeLocation[0]
-		THEN
-			FOR i FROM holeLocation[0]-1 DOWNTO baseDst+1 BY -1
-			DO
-				move(i,1-playerToProtect)
-			END_FOR
-			move(baseDst,playerDst);
-		ELSE 
-			IF baseDst == holeLocation[0] AND playerDst != holeLocation[1]
-			THEN
-				move(baseDst,playerDst);
-			END_IF
-		END_IF
-	END_IF
-END
-</pre>
-</div>
-
-<br/><br/><hr/><br/>
-
-<div class="tip" id="tip-4" alt="Show Tip 4 ( Pseudo-code of findNearestPlayer)">
-<p>The algorithm of the findNearestPlayer method is the following :</p>
-<pre> 
-BEGIN
-	nbBases <- getAmountOfBases()
-	found <- false;
-	i <- firstBaseToSearch
-	WHILE i < nbBases AND !found
-	DO
-		FOR j FROM 0 TO 1 BY 1
-		DO
-			IF getPlayerColor(i, j)== colorWanted AND !found
-			THEN
-				location[0] <- i;
-				location[1] <- j;
-				found <- true;
-			END_IF
-		END_FOR
-		i <- i+1
-	END_WHILE
-	RETURN location
-END
-</pre>
-</div>
-<br/><br/><hr/><br/>
-<div class="tip" id="tip-5" alt="Show tip 5 ( Pseudo-code of bringPlayerHome)">
-<p>The algorithm of the bringPlayerHome method is the following :</p>
-<pre> 
-PRECONDITION: the hole is on the base of index baseSrc-1
-BEGIN
-		move( baseSrc,playerSrc)
-		FOR i FROM baseSrc-1 DOWNTO baseDst+1 BY -1
-		DO
-			move(i,1-playerDst)
-			move(i-1,playerDst)
-			move(i,playerDst)
-		END_FOR
-</pre>
-</div>
diff --git a/src/lessons/smn/baseball/easy/BaseballGame.java b/src/lessons/smn/baseball/easy/BaseballGame.java
deleted file mode 100644
index d2252c8..0000000
--- a/src/lessons/smn/baseball/easy/BaseballGame.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package lessons.smn.baseball.easy;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.smn.baseball.BaseballEntity;
-import jlm.universe.smn.baseball.BaseballWorld;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class BaseballGame extends ExerciseTemplated {
-
-	/**
-	 * Constructor of the class BaseballGame
-	 * @param Lesson : a lesson
-	 */
-	public BaseballGame(Lesson lesson) {
-		super(lesson);
-		
-		BaseballWorld sets[] = new BaseballWorld[3];
-		
-		sets[0]= new BaseballWorld("4 bases",4,2);
-		sets[1]= new BaseballWorld("10 bases",10,2);
-		sets[2]= new BaseballWorld("15 bases",15,2);
-		
-		for ( int i = 0 ; i<3;i++)
-		{
-			new BaseballEntity("Baseball Player",sets[i]);
-		}
-		
-		setup(sets);
-	}
-
-}
diff --git a/src/lessons/smn/baseball/easy/BaseballGameEntity.java b/src/lessons/smn/baseball/easy/BaseballGameEntity.java
deleted file mode 100644
index 5f904e4..0000000
--- a/src/lessons/smn/baseball/easy/BaseballGameEntity.java
+++ /dev/null
@@ -1,134 +0,0 @@
-package lessons.smn.baseball.easy;
-
-import jlm.universe.smn.baseball.BaseballEntity;
-import jlm.universe.smn.baseball.InvalidMoveException;
-import jlm.universe.smn.baseball.InvalidPositionException;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class BaseballGameEntity extends BaseballEntity {
-
-
-	public void run() {
-		try
-		{
-			this.homerun();
-		}
-		catch( InvalidMoveException ime)
-		{
-			System.out.println(this.world.getName() +" :"+ime.getMessage());
-		}
-		catch( InvalidPositionException ipe)
-		{
-			System.out.println(this.world.getName() +" :"+ipe.getMessage());
-		}
-	}
-
-	/* BEGIN TEMPLATE */
-	private void homerun() throws InvalidMoveException, InvalidPositionException {
-		int amountOfBases = this.getAmountOfBases()-1;
-		for ( int baseIndex = 0 ; baseIndex < amountOfBases ; baseIndex++)
-		{
-			if ( !this.isBaseSorted(baseIndex) )
-			{
-				this.solve(baseIndex);
-			}
-		}
-	}
-
-	private void solve(int baseIndex) throws InvalidMoveException, InvalidPositionException{
-		/* BEGIN SOLUTION */
-		// Look if the first player is sorted
-		if ( this.getPlayerColor(baseIndex, 0) != baseIndex) 
-		{
-			/*
-			 * Look if maybe the second player has the good color
-			 * so we will swap them
-			 */
-			if ( this.getPlayerColor(baseIndex,1) == baseIndex)
-			{	
-				this.bringHole(baseIndex, 0, 1);
-				this.move(baseIndex, 1);
-			}
-			else
-			{
-				// Find the nearest player witch matching color		
-				int[] wantedPlayerLocation = this.findNearestPlayer(baseIndex, baseIndex+1);
-				// Bring the hole next to him				 
-				this.bringHole(wantedPlayerLocation[0]-1, 0,wantedPlayerLocation[1]);
-				// Bring the player home
-				this.bringPlayerHome(wantedPlayerLocation[0], wantedPlayerLocation[1], baseIndex,0);
-			}
-		}
-		// Look if the second player is sorted
-		if ( this.getPlayerColor(baseIndex, 1) != baseIndex) 
-		{
-			// Find the nearest player witch matching color		
-			int[] wantedPlayerLocation = this.findNearestPlayer(baseIndex, baseIndex+1);
-			// Bring the hole next to him		
-			this.bringHole(wantedPlayerLocation[0]-1, 1,wantedPlayerLocation[1]);
-			// Bring the player home
-			this.bringPlayerHome(wantedPlayerLocation[0], wantedPlayerLocation[1], baseIndex,1);
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	// Bring the player at (baseDst,playerDst) to (baseSrc,playerDst)
-	private void bringPlayerHome(int baseSrc,int playerSrc,int baseDst,int playerDst) throws InvalidMoveException{
-		move( baseSrc,playerSrc);
-		for ( int i = baseSrc-1; i > baseDst; i--)
-		{
-			move(i,1-playerDst); 
-			move(i-1,playerDst);
-			move(i,playerDst);
-		}
-	}
-
-	// Search for the player closer from his base
-	private int[] findNearestPlayer(int colorWanted, int firstBaseToSearch ) throws InvalidPositionException {
-		int[] location = new int[2];
-		int nbBases = this.getAmountOfBases();
-		boolean found = false;
-		for ( int i = firstBaseToSearch; i < nbBases && !found ; i++)
-		{
-			for ( int j = 0 ; j < 2 && !found ; j++)
-			{
-				if ( this.getPlayerColor(i, j)== colorWanted  )
-				{
-					location[0]= i;
-					location[1]= j;
-					found = true;
-				}
-			}
-		}
-		return location;
-	}
-
-	// Bring the hole to (baseDst,playerDst) while protecting the position playerToProtect
-	private void bringHole(int baseDst, int playerDst , int playerToProtect) throws InvalidMoveException {
-		int[] holeLocation = { this.getHoleBase(), this.getHolePositionInBase() };
-		if ( baseDst < holeLocation[0] ) // the hole is after the base where we want it
-		{
-			for ( int i = holeLocation[0]-1; i > baseDst;i--)
-			{
-				move(i,1-playerToProtect);
-			}
-			move(baseDst,playerDst);	
-		}
-		else if ( baseDst == holeLocation[0] && playerDst != holeLocation[1]) // good base but wrong player =/
-		{
-			move(baseDst,playerDst);
-		}
-		else if ( baseDst > holeLocation[0]) // the hole is before the base where we want it
-		{
-			for ( int i = holeLocation[0]+1; i<baseDst+1;i++)
-			{
-				move(i, playerDst);
-			}
-		}
-	}
-
-
-}
diff --git a/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.fr.html b/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.fr.html
deleted file mode 100644
index 086d4f0..0000000
--- a/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.fr.html
+++ /dev/null
@@ -1,81 +0,0 @@
-<h1>Baseball</h1>
-<p>
-A l'instar du monde précédent, ce monde implémente un monde de
-baseball. Mais maintenant, vous avez plus de deux joueurs sur chaque
-base. Comme auparavant, votre mission est d'amener chaque joueur à sa base.
-</p>
-<p>
-Cet exercice essaye de vous montrer une chose : vous avez à faire un
-changement que vous n'aviez pas anticipé, et il faut le faire sans casser
-votre code et sans le modifier trop en profondeur, puisque votre algorithme
-est toujours correct.
-</p>
-<p>
-L'algorithme précédent était seulement capable de gérer deux joueurs par
-base, vous avez à le modifier afin qu'il puisse gérer n joueurs par base,
-avec n supérieur ou égal à deux.
-</p>
-<p>
-Vous pouvez vous demander pourquoi vous n'avez pas eu à écrire directement
-un algorithme sans ce défaut. C'est juste que parfois, c'est beaucoup trop
-difficile. Parfois, il suffit de prendre un cas particulier et de
-généraliser la solution. C'est bien souvent plus simple de généraliser que
-de trouver un algorithme général à partir de rien. Souvenez-vous
-qu'améliorer est plus facile que créer.
-<p>
-Notes:
-<ul>
-<li>
-Vous pouvez avoir accès au nombre de positions disponibles sur chaque base
-en utilisant la méthode getLocationsAmount().
-</li>
-<li>
-La couleur d'une base est donnée par son index. 
-</li>
-<li>
-Le trou a une couleur de -1.
-</li>
-<li>
-La base qui a un seul joueur sur le terrain a <i>getAmountOfBases()-1</i>
-comme index
-</li>
-</ul>
-</p>
-
-<div>
-Sept méthodes vous sont fournies :
-<p>
-<pre>void move(int baseSrc, int playerSrc)</pre>
-
-Déplace le joueur de la position <code>playerLocation</code> de la base
-<code>baseSrc</code> au trou.
-</p><p>
-<pre>int getPlayerColor(int baseIndex, int playerLocation) </pre>
-
-Renvoie la couleur du joueur à la position <code>playerLocation</code> ( 0
-ou 1 ) de la base <code>baseIndex</code>.  La couleur -1 correspond au trou.
-</p><p>
-<pre>int getHoleBase()</pre>
-
-Renvoie l'index de la base où se trouve le trou
-</p><p>
-<pre>int getHolePositionInBase()</pre>
-
-Renvoie la position de joueur vide dans la base où se situe le trou
-</p><p>	
-<pre>boolean isBaseSorted( int baseIndex )</pre>
-
-Renvoie VRAI si tous les joueurs sur la base <code>baseSrc</code> sont sur
-la bonne base.  
-</p><p>
-<pre>int getAmountOfBases()</pre>
-
-Renvoie le nombre de bases dans le terrain
-</p>
-<p>
-<pre>int getLocationsAmount()</pre>
-
-Renvoie le nombre de positions de joueur disponible sur chaque base du
-terrain
-</p>
-</div>
\ No newline at end of file
diff --git a/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html b/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html
deleted file mode 100644
index 762dda7..0000000
--- a/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<h1>Baseball</h1>
-<p>
-Like the previous world, this world implements a baseball world. But now, you have more than two players on each base.
-Like before, your mission is to bring everyone home.
-</p>
-<p>
-This exercise is trying to show you one thing :  you have to do a change that you haven't anticipated, and 
-you need to make this change without breaking your code and without changing too many thing, because the algorithm is still great.
-</p>
-<p>
-The previous algorithm was only able to deal with two players per base, you have to change it so you can handle n players per base, 
-with n greater or equals at two.
-</p>
-<p>
-You can be wondering why you didn't have to write directly an flawless algorithm. It's just that sometimes, it's way too hard.
-Sometimes, you just need to take a particular case and generalize your solution. It's sometimes easier to generalize than to try to find 
-a general algorithm from scratch. Remember that improving is way more easier than creating.
-<p>
-Memento:
-<ul>
-<li>
-You can have access to the number of locations available on each base by using the getLocationsAmount() method.
-</li>
-<li>
-The color of a base is given by its index. 
-</li>
-<li>
-The hole has a color of -1.
-</li>
-<li>
-The base which has only one player on the field has <i>getAmountOfBases()-1</i> as index
-</li>
-</ul>
-</p>
-
-<div>
-There are seven methods provided :
-<p>
-<pre>void move(int baseSrc, int playerSrc)</pre>
-
-Move the player on position <code>playerLocation</code> from the base <code>baseSrc</code> to the hole.
-</p><p>
-<pre>int getPlayerColor(int baseIndex, int playerLocation) </pre>
-
-Return the color of the player on position <code>playerLocation</code> ( 0 or 1 ) from the base <code>baseIndex</code>.
-The color -1 is the hole.
-</p><p>
-<pre>int getHoleBase() </pre>
-
-Return the index of the base where the hole is located
-</p><p>
-<pre>int getHolePositionInBase()</pre>
-
-Return the player's position in the base where the hole is located
-</p><p>	
-<pre>boolean isBaseSorted( int baseIndex)</pre>
-
-Return TRUE if all players of the base <code>baseSrc</code> are home  
-</p><p>
-<pre>int getAmountOfBases()</pre>
-
-Return the amount of bases in the field.
-</p>
-<p>
-<pre>int getLocationsAmount()</pre>
-
-Return the amount of players locations available on each base of the field
-</p>
-</div>
\ No newline at end of file
diff --git a/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.java b/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.java
deleted file mode 100644
index 30381e9..0000000
--- a/src/lessons/smn/baseball/medium/BaseballGameMorePlayers.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package lessons.smn.baseball.medium;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.smn.baseball.BaseballEntity;
-import jlm.universe.smn.baseball.BaseballWorld;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class BaseballGameMorePlayers extends ExerciseTemplated {
-
-	/**
-	 * Constructor of the class BaseballGame
-	 * @param Lesson : a lesson
-	 */
-	public BaseballGameMorePlayers(Lesson lesson) {
-		super(lesson);
-		
-		BaseballWorld sets[] = new BaseballWorld[5];
-		
-		sets[0]= new BaseballWorld("12 bases with three players each",12,3);
-		sets[1]= new BaseballWorld("10 bases with four players each",10,4);
-		sets[2]= new BaseballWorld("7 bases with five players each",7,5);
-		sets[3]= new BaseballWorld("5 bases with eight players each",5,8);
-		sets[4]= new BaseballWorld("15 bases with two players each",15,2);
-		
-		for ( int i = 0 ; i<sets.length ; i++)
-		{
-			new BaseballEntity("Baseball Player",sets[i]);
-		}
-
-		setup(sets);
-	}
-
-}
diff --git a/src/lessons/smn/baseball/medium/BaseballGameMorePlayersEntity.java b/src/lessons/smn/baseball/medium/BaseballGameMorePlayersEntity.java
deleted file mode 100644
index d1a42c4..0000000
--- a/src/lessons/smn/baseball/medium/BaseballGameMorePlayersEntity.java
+++ /dev/null
@@ -1,131 +0,0 @@
-package lessons.smn.baseball.medium;
-
-import jlm.universe.smn.baseball.BaseballEntity;
-import jlm.universe.smn.baseball.InvalidMoveException;
-import jlm.universe.smn.baseball.InvalidPositionException;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class BaseballGameMorePlayersEntity extends BaseballEntity {
-
-
-	public void run() {
-		try
-		{
-			this.homerun();
-		}
-		catch( InvalidMoveException ime)
-		{
-			System.out.println(this.world.getName() +" :"+ime.getMessage());
-		}
-		catch( InvalidPositionException ipe)
-		{
-			System.out.println(this.world.getName() +" :"+ipe.getMessage());
-		}
-	}
-
-	/* BEGIN TEMPLATE */
-	private void homerun() throws InvalidMoveException, InvalidPositionException {
-		int amountOfBases = this.getAmountOfBases()-1;
-		for ( int baseIndex = 0 ; baseIndex < amountOfBases ; baseIndex++)
-		{
-			if ( !this.isBaseSorted(baseIndex) )
-			{
-				this.solve(baseIndex);
-			}
-		}
-	}
-
-	private void solve(int baseIndex) throws InvalidMoveException, InvalidPositionException{
-		/* BEGIN SOLUTION */
-		int nbPlayers = this.getLocationsAmount();
-
-		for ( int i = 0 ; i < nbPlayers ; i++ )	
-		{
-			// Look if the player number i has the good color
-			if ( this.getPlayerColor(baseIndex, i) != baseIndex) 
-			{
-				// Search for a player with matching color within the base and do the swapping
-				boolean found = false ;
-				for ( int j = i+1 ; j < nbPlayers && !found ; j++) 	
-				{
-					if ( this.getPlayerColor(baseIndex,j) == baseIndex) 
-					{
-						this.bringHole(baseIndex, i, j); 
-						this.move(baseIndex, j);	
-						found = true ;
-					}
-				}
-				// Search for a player with matching color in the reszt of the field and bring him home
-				if ( !found )
-				{
-					int[] wantedPlayerLocation = this.findNearestPlayer(baseIndex, baseIndex+1);	
-					this.bringHole(wantedPlayerLocation[0]-1, i,wantedPlayerLocation[1]);	
-					this.bringPlayerHome(wantedPlayerLocation[0], wantedPlayerLocation[1], baseIndex,i);
-				}
-			}
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	// Bring the player at (baseDst,playerDst) to (baseSrc,playerDst)
-	private void bringPlayerHome(int baseSrc,int playerSrc,int baseDst,int playerDst) throws InvalidMoveException{
-		move( baseSrc,playerSrc);
-		int nbPlayers = this.getLocationsAmount();
-		for ( int i = baseSrc-1; i > baseDst; i--)
-		{
-			move(i,(1+playerDst)%nbPlayers);
-			move(i-1,playerDst);
-			move(i,playerDst);
-		}
-	}
-
-	// Search for the player closer from his base
-	private int[] findNearestPlayer(int colorWanted, int firstBaseToSearch ) throws InvalidPositionException {
-		int[] location = new int[2];
-		int nbBases = this.getAmountOfBases();
-		int nbPlayers = this.getLocationsAmount();
-		boolean found = false;
-		for ( int i = firstBaseToSearch; i < nbBases && !found ; i++)
-		{
-			for ( int j = 0 ; j < nbPlayers && !found  ; j++)
-			{
-				if ( this.getPlayerColor(i, j)== colorWanted )
-				{
-					location[0]= i;
-					location[1]= j;
-					found = true;
-				}
-			}
-		}
-		return location;
-	}
-
-	// Bring the hole to (baseDst,playerDst) while protecting the position playerToProtect
-	private void bringHole(int baseDst, int playerDst , int playerToProtect) throws InvalidMoveException {
-		int[] holeLocation = { this.getHoleBase(), this.getHolePositionInBase() };
-		int nbPlayers = this.getLocationsAmount();
-		if ( baseDst < holeLocation[0] ) // the hole is after the base where we want it
-		{
-			for ( int i = holeLocation[0]-1; i > baseDst;i--)
-			{
-				move(i,(1+playerToProtect)%nbPlayers);
-			}
-			move(baseDst,playerDst);	
-		}
-		else if ( baseDst == holeLocation[0] && playerDst != holeLocation[1]) // good base but wrong player =/
-		{
-			move(baseDst,playerDst);
-		}
-		else if ( baseDst > holeLocation[0]) // the hole is before the base where we want it
-		{
-			for ( int i = holeLocation[0]+1; i<baseDst+1;i++)
-			{
-				move(i, playerDst);
-			}
-		}
-	}
-
-}
diff --git a/src/lessons/smn/pancake/burned/BurnedPancakePlate.fr.html b/src/lessons/smn/pancake/burned/BurnedPancakePlate.fr.html
deleted file mode 100644
index 0f328b1..0000000
--- a/src/lessons/smn/pancake/burned/BurnedPancakePlate.fr.html
+++ /dev/null
@@ -1,37 +0,0 @@
-<h1>Monde des crêpes</h1>
-<p>
-Ce monde implémente le problème du crêpier psychorigide, qui souhaite trier
-ses crêpes de la plus grande à la plus petite, et avec la face brûlée cachée
-( donc vers le bas, afin que l'on ne puisse pas la voir ).
-</p><p>
-Votre mission si vous l'acceptez est de trier un tas de crêpe pour le rendre
-heureux.
-Puisque qu'il est évidemment interdit -- pour des questions d'hygiène -- de
-poser une crêpe sur la table, la seule action autorisée est de retourner une
-ou plusieures crêpes depuis le haut de la pile.
-Une crêpe est définie par son rayon et par sa position dans la pile, en
-partant du haut.
-Ces attributs sont des entiers positifs.
-</p>
-<div>
-Seulement quatre fonctions vous sont fournies :
-<p>
-<pre>int getStackSize()</pre>
-
-Renvoie la taille du tas de crêpes, en d'autres mots, le nombre de crêpes
-qui le compose.
-</p><p>
-<pre>int getPancakeRadius(int pancakeNumber)</pre>
-
-Renvoie le rayon de la crêpe <code>pancakeNumber</code>.
-</p><p>
-<pre>boolean isPancakeUpsideDown(int pancakeNumber)</pre>
-
-Renvoie vrai si le côté brûlé de la crêpe <code>pancakeNumber</code> est
-vers le haut, faux sinon.
-</p><p>
-<pre>void flip(int numberOfPancakes)</pre>
-</p>
-Retourne les <code>numberOfPancakes</code> premières crêpes de la pile, en
-partant du sommet de celle-ci.
-</div>
diff --git a/src/lessons/smn/pancake/burned/BurnedPancakePlate.html b/src/lessons/smn/pancake/burned/BurnedPancakePlate.html
deleted file mode 100644
index d7510d2..0000000
--- a/src/lessons/smn/pancake/burned/BurnedPancakePlate.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<h1>PancakeWorld</h1>
-<p>
-This world implements the control freak pancake seller problem, who wants his pancakes to be sorted on their plate from the biggest to the smallest, with the most burned face downside, so that we cannot see it.
-</p><p>
-You are asked to resort a pancakes stack to make him happy. Since it is obviously forbidden to place a pancake on the dirty table, the only allowed action is to flip one or more pancakes on the top of the stack.
-A pancake is defined by its radius and position on the stack, from the top to the bottom. These characteristics are positive integers.
-</p>
-<div>
-Only four functions are provided :
-<p>
-<pre>int getStackSize()</pre>
-
-Returns the size of the stack, in other words the amount of pancakes it contains.
-</p><p>
-<pre>int getPancakeRadius(int pancakeNumber)</pre>
-
-Returns the radius of the pancake <code>pancakeNumber</code>.
-</p><p>
-<pre>boolean isPancakeUpsideDown(int pancakeNumber)</pre>
-
-Returns true if the burned side of the pancake <code>pancakeNumber</code> is up, false if not.
-</p><p>
-<pre>void flip(int numberOfPancakes)</pre>
-</p>
-Flips the <code>numberOfPancakes</code> first pancakes composing the stack, from the top of it.
-</div>
diff --git a/src/lessons/smn/pancake/burned/BurnedPancakePlate.java b/src/lessons/smn/pancake/burned/BurnedPancakePlate.java
deleted file mode 100644
index d8942bc..0000000
--- a/src/lessons/smn/pancake/burned/BurnedPancakePlate.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package lessons.smn.pancake.burned;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.smn.pancake.PancakeEntity;
-import jlm.universe.smn.pancake.PancakeWorld;
-
-public class BurnedPancakePlate extends ExerciseTemplated {
-
-	/**
-	 * Constructor of the class BurnedPancakePlate
-	 * @param lesson the lesson in which this exercise should register itself
-	 */
-	public BurnedPancakePlate(Lesson lesson) {
-		super(lesson);
-		
-		PancakeWorld plate[] = new PancakeWorld[4];
-		plate[0]= new PancakeWorld("5 pancakes",5,true);
-		plate[1]= new PancakeWorld("10 pancakes",10,true);
-		plate[2]= new PancakeWorld("15 pancakes",15,true);
-		plate[3]= new PancakeWorld("30 pancakes",30,true);
-		for ( int i = 0 ; i<4;i++)
-			new PancakeEntity("Pancake Seller",plate[i]);
-
-		setup(plate);
-	}
-
-}
diff --git a/src/lessons/smn/pancake/burned/BurnedPancakePlateEntity.java b/src/lessons/smn/pancake/burned/BurnedPancakePlateEntity.java
deleted file mode 100644
index 0f2d8f9..0000000
--- a/src/lessons/smn/pancake/burned/BurnedPancakePlateEntity.java
+++ /dev/null
@@ -1,69 +0,0 @@
-package lessons.smn.pancake.burned;
-
-import jlm.universe.smn.pancake.InvalidPancakeNumber;
-import jlm.universe.smn.pancake.PancakeEntity;
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class BurnedPancakePlateEntity extends PancakeEntity {
-
-
-	public void run() throws InvalidPancakeNumber {
-		try
-		{
-			this.solve();
-		}
-		catch( InvalidPancakeNumber pne)
-		{
-			System.out.println(this.world.getName() +" :"+pne.getMessage());
-		}
-	}
-
-	/* BEGIN TEMPLATE */
-	public void solve() throws InvalidPancakeNumber {
-		/* BEGIN SOLUTION */
-		int stackSize = this.getStackSize();
-		boolean currentPancakeAlreadySorted;
-		for ( int pancakesToSort = stackSize-1 ; pancakesToSort != -1 && !this.isSorted() ; pancakesToSort-- )
-		{
-			currentPancakeAlreadySorted= (this.getPancakeRadius(pancakesToSort)==pancakesToSort+1 
-					&& !this.isPancakeUpsideDown(pancakesToSort) ) ;
-			if ( !currentPancakeAlreadySorted)
-			{
-				int indexBigPancake =-1;
-				boolean found = false;
-				for ( int currentPancake = 0 ; currentPancake < pancakesToSort+1 && !found; currentPancake++)
-				{
-					if ( this.getPancakeRadius(currentPancake) == pancakesToSort+1)
-					{
-						indexBigPancake = currentPancake;	// gotcha !
-						found = true;
-					}
-				}
-				if ( indexBigPancake != 0 )
-				{
-					this.flip(indexBigPancake+1);	// putting the pancake at the top
-				}	
-				if ( ! ( pancakesToSort == 0) )
-				{
-					if ( !this.isPancakeUpsideDown(0))
-					{
-						this.flip(1);	// show your dark side to the world
-					}
-					this.flip(this.getPancakeRadius(0));	// hit the bottom !
-				}
-				else
-				{
-					if ( this.isPancakeUpsideDown(0))
-					{
-						this.flip(1);
-					}
-				}
-
-			}	
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/smn/pancake/burned/BurnedPancakePlateEntity.py b/src/lessons/smn/pancake/burned/BurnedPancakePlateEntity.py
deleted file mode 100644
index e04fca2..0000000
--- a/src/lessons/smn/pancake/burned/BurnedPancakePlateEntity.py
+++ /dev/null
@@ -1,43 +0,0 @@
-# BEGIN SOLUTION
-		PancakeWorld myWorld = (PancakeWorld) this.world;
-		int stackSize = this.getStackSize();
-		boolean currentPancakeAlreadySorted;
-		for ( int pancakesToSort = stackSize-1 ; pancakesToSort != -1 && !myWorld.isSorted() ; pancakesToSort-- )
-		{
-			currentPancakeAlreadySorted= (this.getPancakeSize(pancakesToSort)==pancakesToSort+1 
-					&& !this.isPancakeUpsideDown(pancakesToSort) ) ;
-			if ( !currentPancakeAlreadySorted)
-			{
-				int indexBigPancake =-1;
-				boolean found = false;
-				for ( int currentPancake = 0 ; currentPancake < pancakesToSort+1 && !found; currentPancake++)
-				{
-					if ( this.getPancakeSize(currentPancake) == pancakesToSort+1)
-					{
-						indexBigPancake = currentPancake;	// gotcha !
-						found = true;
-					}
-				}
-				if ( indexBigPancake != 0 )
-				{
-					this.flip(indexBigPancake+1);	// putting the pancake at the top
-				}	
-				if ( ! ( pancakesToSort == 0) )
-				{
-					if ( !this.isPancakeUpsideDown(0))
-					{
-						this.flip(1);	// show your dark side to the world
-					}
-					this.flip(this.getPancakeSize(0));	// hit the bottom !
-				}
-				else
-				{
-					if ( this.isPancakeUpsideDown(0))
-					{
-						this.flip(1);
-					}
-				}
-
-			}	
-		}
-# END SOLUTION
\ No newline at end of file
diff --git a/src/lessons/smn/pancake/raw/RawPancakePlate.fr.html b/src/lessons/smn/pancake/raw/RawPancakePlate.fr.html
deleted file mode 100644
index 39f196d..0000000
--- a/src/lessons/smn/pancake/raw/RawPancakePlate.fr.html
+++ /dev/null
@@ -1,33 +0,0 @@
-<h1>Monde des crêpes</h1>
-<p>
-Ce monde implémente le problème du crêpier psychorigide, qui souhaite trier
-ses crêpes de la plus grande à la plus petite.
-</p>
-<p>
-Votre mission si vous l'acceptez est de trier un tas de crêpe pour le rendre
-heureux.
-Puisque qu'il est évidemment interdit -- pour des questions d'hygiène -- de
-poser une crêpe sur la table, la seule action autorisée est de retourner une
-ou plusieures crêpes depuis le haut de la pile.
-Une crêpe est définie par son rayon et par sa position dans la pile, en
-partant du haut.
-Ces attributs sont des entiers positifs.
-</p>
-<div>
-Seulement trois fonctions sont fournies :
-<p>
-<pre>int getStackSize()</pre>
-
-Renvoie la taille du tas de crêpes, en d'autres mots, le nombre de crêpes
-qui le compose.
-</p><p>
-<pre>int getPancakeRadius(int pancakeNumber)</pre>
-
-Renvoie le rayon de la crêpe donnée en argument.
-</p><p>
-<pre>void flip(int numberOfPancakes)</pre>
-
-Retourne les <code>numberOfPancakes</code> premières crêpes de la pile, en
-partant du sommet de celle-ci.
-</p>
-</div>
diff --git a/src/lessons/smn/pancake/raw/RawPancakePlate.html b/src/lessons/smn/pancake/raw/RawPancakePlate.html
deleted file mode 100644
index fcf051d..0000000
--- a/src/lessons/smn/pancake/raw/RawPancakePlate.html
+++ /dev/null
@@ -1,24 +0,0 @@
-<h1>PancakeWorld</h1>
-<p>
-This world implements the control freak pancake seller problem, who wants his pancakes to be sorted on their plate from the biggest to the smallest.
-</p>
-<p>
-You are asked to resort a pancakes stack to make him happy. Since it is obviously forbidden to place a pancake on the dirty table, the only allowed action is to flip one or more pancakes on the top of the stack.
-A pancake is defined by its radius and position on the stack, from the top to the bottom. These characteristics are positive integers.
-</p>
-<div>
-Only three functions are provided :
-<p>
-<pre>int getStackSize()</pre>
-
-Returns the size of the stack, in other words the amount of pancakes it contains.
-</p><p>
-<pre>int getPancakeRadius(int pancakeNumber)</pre>
-
-Returns the radius of the pancake you gave in argument.
-</p><p>
-<pre>void flip(int numberOfPancakes)</pre>
-
-Flips the <code>numberOfPancakes</code> first pancakes composing the stack, from the top of it.
-</p>
-</div>
diff --git a/src/lessons/smn/pancake/raw/RawPancakePlate.java b/src/lessons/smn/pancake/raw/RawPancakePlate.java
deleted file mode 100644
index a840967..0000000
--- a/src/lessons/smn/pancake/raw/RawPancakePlate.java
+++ /dev/null
@@ -1,32 +0,0 @@
-package lessons.smn.pancake.raw;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.smn.pancake.PancakeEntity;
-import jlm.universe.smn.pancake.PancakeWorld;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class RawPancakePlate extends ExerciseTemplated {
-
-	
-	/**
-	 * Constructor of the class BurnedPancakePlate
-	 * @param Lesson : a lesson
-	 */
-	public RawPancakePlate(Lesson lesson) {
-		super(lesson);
-	
-		PancakeWorld plate[] = new PancakeWorld[4];
-		plate[0]= new PancakeWorld("5 pancakes",5,false);
-		plate[1]= new PancakeWorld("10 pancakes",10,false);
-		plate[2]= new PancakeWorld("15 pancakes",15,false);
-		plate[3]= new PancakeWorld("30 pancakes",30,false);
-		for ( int i = 0 ; i<4;i++)
-			new PancakeEntity("Pancake Seller",plate[i]);
-
-		setup(plate);
-	}
-
-}
diff --git a/src/lessons/smn/pancake/raw/RawPancakePlateEntity.java b/src/lessons/smn/pancake/raw/RawPancakePlateEntity.java
deleted file mode 100644
index d449e19..0000000
--- a/src/lessons/smn/pancake/raw/RawPancakePlateEntity.java
+++ /dev/null
@@ -1,57 +0,0 @@
-package lessons.smn.pancake.raw;
-
-import jlm.universe.smn.pancake.InvalidPancakeNumber;
-import jlm.universe.smn.pancake.PancakeEntity;
-
-/**
- * @author Julien BASTIAN & Geoffrey HUMBERT
- */
-public class RawPancakePlateEntity extends PancakeEntity {
-
-	public void run() throws InvalidPancakeNumber {
-		try
-		{
-			this.solve();
-		}
-		catch( InvalidPancakeNumber pne)
-		{
-			System.out.println(this.world.getName() +" :"+pne.getMessage());
-		}
-	}
-
-	/* BEGIN TEMPLATE */
-	public void solve() throws InvalidPancakeNumber {
-		/* BEGIN SOLUTION */
-		int stackSize = this.getStackSize();
-		boolean currentPancakeAlreadySorted;
-		for ( int pancakesToSort = stackSize-1 ; pancakesToSort != -1 && !this.isSorted() ; pancakesToSort-- )
-		{
-			currentPancakeAlreadySorted= (this.getPancakeRadius(pancakesToSort)==pancakesToSort+1 ) ;
-			if ( !currentPancakeAlreadySorted)
-			{
-				int indexBigPancake =-1;
-				boolean found = false;
-				for ( int currentPancake = 0 ; currentPancake < pancakesToSort+1 && !found; currentPancake++)
-				{
-					if ( this.getPancakeRadius(currentPancake) == pancakesToSort+1)
-					{
-						indexBigPancake = currentPancake;	// gotcha !
-						found = true;
-					}
-				}
-				if ( indexBigPancake != 0 )
-				{
-					this.flip(indexBigPancake+1);	// putting the pancake at the top
-				}	
-				if ( ! ( pancakesToSort == 0) )
-				{
-					this.flip(this.getPancakeRadius(0));	// hit the bottom !
-				}
-			}	
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-
-}
diff --git a/src/lessons/smn/pancake/raw/RawPancakePlateEntity.py b/src/lessons/smn/pancake/raw/RawPancakePlateEntity.py
deleted file mode 100644
index ff71b39..0000000
--- a/src/lessons/smn/pancake/raw/RawPancakePlateEntity.py
+++ /dev/null
@@ -1,33 +0,0 @@
-/* BEGIN TEMPLATE */
-public void solve() throws InvalidPancakeNumber {
-	/* BEGIN SOLUTION */
-	int stackSize = this.getStackSize();
-	boolean currentPancakeAlreadySorted;
-	for ( int pancakesToSort = stackSize-1 ; pancakesToSort != -1 && !myWorld.isSorted() ; pancakesToSort-- )
-	{
-		currentPancakeAlreadySorted= (this.getPancakeSize(pancakesToSort)==pancakesToSort+1 ) ;
-		if ( !currentPancakeAlreadySorted)
-		{
-			int indexBigPancake =-1;
-			boolean found = false;
-			for ( int currentPancake = 0 ; currentPancake < pancakesToSort+1 && !found; currentPancake++)
-			{
-				if ( this.getPancakeSize(currentPancake) == pancakesToSort+1)
-				{
-					indexBigPancake = currentPancake;	// gotcha !
-					found = true;
-				}
-			}
-			if ( indexBigPancake != 0 )
-			{
-				this.flip(indexBigPancake+1);	// putting the pancake at the top
-			}	
-			if ( ! ( pancakesToSort == 0) )
-			{
-				this.flip(this.getPancakeSize(0));	// hit the bottom !
-			}
-		}	
-	}
-	/* END SOLUTION */
-}
-/* END TEMPLATE */
\ No newline at end of file
diff --git a/src/lessons/sort/Main.fr.html b/src/lessons/sort/Main.fr.html
index 7963efb..4890784 100644
--- a/src/lessons/sort/Main.fr.html
+++ b/src/lessons/sort/Main.fr.html
@@ -9,5 +9,8 @@ organiser des "courses" entre ces algorithmes afin d'expérimenter en
 pratique ce qu'implique la différence de complexité asymptotique entre deux
 algorithmes. 
 
-<p>Un exercice sur les tris récursifs (en particulier QuickSort et MergeSort)
-est prévu à l'avenir.
+<p>Plus d'exercices sont prévus à l'avenir. Certain porteront sur les tris
+récursifs (en particulier QuickSort et MergeSort) tandis que d'autres
+s'appuieront sur d'autres micro-mondes pour appliquer ces algorithmes à
+d'autres
+situations.</p>
diff --git a/src/lessons/sort/Main.html b/src/lessons/sort/Main.html
index 8f39d90..73570a4 100644
--- a/src/lessons/sort/Main.html
+++ b/src/lessons/sort/Main.html
@@ -7,5 +7,6 @@ yourself. But even if you don't code the algorithms, you can use the demo
 mode to organize "races" between these algorithms to experiment in practice
 what the different asymptotical complexity mean. 
 
-<p>An exercise on recursive sorting algorithms (such as QuickSort and
-MergeSort) is planned for the future.
+<p>More exercises are planned for the future, on recursive sorting
+algorithms (such as QuickSort and MergeSort) or using other
+microworlds to apply these algorithms to other contexts.</p>
diff --git a/src/lessons/sort/Main.java b/src/lessons/sort/Main.java
index 575e3e3..305d3a0 100644
--- a/src/lessons/sort/Main.java
+++ b/src/lessons/sort/Main.java
@@ -1,14 +1,14 @@
 package lessons.sort;
 
 import jlm.core.model.lesson.Lesson;
-import lessons.sort.bubble1.AlgBubbleSort1;
-import lessons.sort.bubble2.AlgBubbleSort2;
-import lessons.sort.bubble3.AlgBubbleSort3;
-import lessons.sort.cocktail1.AlgCocktailSort1;
-import lessons.sort.cocktail2.AlgCocktailSort2;
-import lessons.sort.cocktail3.AlgCocktailSort3;
+import lessons.sort.bubble.AlgBubbleSort1;
+import lessons.sort.bubble.AlgBubbleSort2;
+import lessons.sort.bubble.AlgBubbleSort3;
+import lessons.sort.cocktail.AlgCocktailSort1;
+import lessons.sort.cocktail.AlgCocktailSort2;
+import lessons.sort.cocktail.AlgCocktailSort3;
 import lessons.sort.comb.AlgCombSort;
-import lessons.sort.comb11.AlgCombSort11;
+import lessons.sort.comb.AlgCombSort11;
 import lessons.sort.gnome.AlgGnomeSort;
 import lessons.sort.insertion.AlgInsertionSort;
 import lessons.sort.selection.AlgSelectionSort;
diff --git a/src/lessons/sort/baseball/BubbleBaseball.fr.html b/src/lessons/sort/baseball/BubbleBaseball.fr.html
new file mode 100644
index 0000000..44a339c
--- /dev/null
+++ b/src/lessons/sort/baseball/BubbleBaseball.fr.html
@@ -0,0 +1,42 @@
+<h1>Baseball à bulle</h1>
+
+<p>Zut, nous avions adapté le tri par insertion parce que notre tri par
+sélection nécessitait trop de déplacements pour mener les joueurs
+sélectionnés à leur position, mais le tri par insertion impose une quantité
+déraisonnable de déplacements pour déplacer les joueurs de la frontière
+jusqu'à leur place dans la section triée. Au final, notre variante par
+sélection était plus efficace, avec au pire <code>3*nombre de bases</code>
+déplacement par élément à trier (1 pour apporter le trou jusqu'au joueur à
+bouger, et 2 pour amener le joueur et le trou jusqu'à leur position
+finale).  De son coté, notre variante par insertion nécessite au pire
+<code>3*nombre de joueurs</code> déplacements pour trier un élément (2 pour
+descendre le joueur et le trou à leur place, et 1 pour remonter le
+trou). C'est deux fois pire puisqu'il y a deux joueurs par base. Il serait
+probablement possible d'améliorer un peu notre variante par insertion en
+descendant plus vite le trou et le joueur, mais cela semble assez difficile
+(il ne faut pas mélanger les éléments déjà triés pendant la descente), et
+cela ne permettrait que de rendre cette variante aussi efficace que celle
+par sélection, pas de faire vraiment mieux. </p>
+
+<p>Si nous ne pouvons pas rendre ce tri plus rapide, au moins nous pouvons le
+faire plus simplement. Quand on y pense, il semble assez naturel d'adapter
+le tri à bulle à ce problème : le trou devient la bulle qui monte et qui
+descend, en sortant peu à peu le tableau. Les grandes lignes de l'algorithme
+sont très simples : «tant que ce n'est pas trier, déplacer le trou vers le
+bas puis vers le haut. À chaque pas, c'est le plus petit des deux joueurs de
+la base qui descend, et le plus grand des deux qui monte (en fonction du
+sens de déplacement).». Après un moment, <code>isSorted()</code> devient
+vrai, et votre algorithme s'arrête.</p>
+
+<p>C'est tellement simple que nous pouvons nous payer le luxe d'une autre
+variante du problème, avec plus de deux joueurs par base. Mais cela ne va
+pas vous ralentir longtemps, n'est ce pas?</p>
+
+<p>De manière étonnante, la variante à bulle semble nécessiter beaucoup moins
+de déplacements que les autres variantes. C'est assez surprenant car
+habituellement, le tri à bulle est la pire des variantes possibles, mais
+cela s'explique sans peine par les analogies entre cet algorithme et le
+problème du baseball multicolore. Il est relativement courant qu'un
+algorithme écrit simplement et naturellement se comporte bien en
+pratique. Il ne s'agit cependant pas d'une règle absolue, comme prouvé par
+l'algorithme simple et faux du premier exercice !</p>
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/BubbleBaseball.html b/src/lessons/sort/baseball/BubbleBaseball.html
new file mode 100644
index 0000000..ca149bd
--- /dev/null
+++ b/src/lessons/sort/baseball/BubbleBaseball.html
@@ -0,0 +1,28 @@
+<h1>Bubble Baseball</h1>
+
+<p>Crap, we adapted the insertion sort because our selection sort required too much moves to get
+the selected players to their position, but the insertion sort requires an inordinate amount of 
+changes to get the border elements to their position within the sorted area without mixing the already 
+sorted elements. At the end of the day, our selection variant was more efficient with at most 
+<code>3*amountOfBase</code> moves to sort one element (1 to get the hole alongside with the player, 
+and 2 to get the hole+player in position) while our insertion variant requires at most 
+<code>3*amountOfPlayers</code> to sort one element (2 to descend the hole and player in position, 
+1 to get the hole back to its position). That's twice as bad as there is two players per base. It may 
+be possible to improve the insertion sort by moving by more than one element when descending, but it 
+seems uneasy (at least, while not mixing the already sorted elements) and it would probably only 
+ensure that our insertion variant becomes as efficient as our selection variant, not dramatically better.</p>
+
+<p>If we cannot make the sort faster, we can make it easier. If you think about it, it seems rather natural
+to adapt the bubble sort to this problem: the hole becomes the bubble that moves up and down, sorting a bit 
+the array during each traversal. The big lines are simply: "while it's not sorted, move the hole down to base 0 
+(moving the biggest player of each base at each step) and then back to the maximal base (moving the smallest 
+player of each base)". After a while, <code>isSorted()</code> will return true and your algorithm will stop.</p>
+
+<p>This is so easy that we introduce another variant of the problem, with more than two players per base. 
+But actually, that shouldn't block you very long, should it?</p>
+
+<p>Surprisingly, the bubble sort variant requires ways less moves than the other variants. This is astonishing
+because usually, the bubble sort performs much worse than the others sorts, but it comes from the very good
+match between its big lines and the baseball universe. It actually happens rather often that a pleasantly 
+written algorithm performs very decently. But this is not an universal rule either, as demonstrated by the naive 
+algorithm of the first exercise, that was nice, simple and wrong ;)</p>
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/BubbleBaseball.java b/src/lessons/sort/baseball/BubbleBaseball.java
new file mode 100644
index 0000000..fe039aa
--- /dev/null
+++ b/src/lessons/sort/baseball/BubbleBaseball.java
@@ -0,0 +1,25 @@
+package lessons.sort.baseball;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.sort.baseball.universe.BaseballWorld;
+
+public class BubbleBaseball extends ExerciseTemplated {
+
+	public BubbleBaseball(Lesson lesson) {
+		super(lesson);
+
+		setup(new BaseballWorld[] {
+				new BaseballWorld("5 bases, 2 positions",5,2),
+				new BaseballWorld("5 bases, 3 positions",5,3),
+				new BaseballWorld("6 bases, 2 positions",6,2),
+				new BaseballWorld("6 bases, 3 positions",6,3),
+				new BaseballWorld("7 bases, 2 positions",7,2),
+				new BaseballWorld("7 bases, 3 positions",7,3),
+				new BaseballWorld("7 bases, 4 positions",7,4),
+				new BaseballWorld("8 bases, 2 positions",8,2),
+				new BaseballWorld("8 bases, 3 positions",8,3),
+		});
+	}
+
+}
diff --git a/src/lessons/sort/baseball/BubbleBaseballEntity.java b/src/lessons/sort/baseball/BubbleBaseballEntity.java
new file mode 100644
index 0000000..c50f114
--- /dev/null
+++ b/src/lessons/sort/baseball/BubbleBaseballEntity.java
@@ -0,0 +1,37 @@
+package lessons.sort.baseball;
+
+import lessons.sort.baseball.universe.BaseballEntity;
+import lessons.sort.baseball.universe.BaseballWorld;
+
+public class BubbleBaseballEntity extends BaseballEntity {
+	
+	/* BEGIN TEMPLATE */
+	public void run() {
+		/* BEGIN SOLUTION */
+		while (!isSorted()) {
+			while (getHoleBase()>0) {
+				int maxPos = 0;
+				int maxColor = getPlayerColor(getHoleBase()-1, 0);
+				for (int pos=1;pos<getPositionsAmount();pos++) 
+					if (getPlayerColor(getHoleBase()-1, pos) > maxColor) {
+						maxColor = getPlayerColor(getHoleBase()-1, pos);
+						maxPos = pos;
+					}
+				move(getHoleBase()-1,maxPos);
+			}
+			while (getHoleBase()<getBasesAmount()-1) {
+				int minPos = 0;
+				int minColor = getPlayerColor(getHoleBase()+1, 0);
+				for (int pos=1;pos<getPositionsAmount();pos++) 
+					if (getPlayerColor(getHoleBase()+1, pos) < minColor) {
+						minColor = getPlayerColor(getHoleBase()+1, pos);
+						minPos = pos;
+					}
+				move(getHoleBase()+1,minPos);				
+			}
+		}
+		((BaseballWorld) world).assertSorted("bubble sort");
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/BubbleBaseballEntity.py b/src/lessons/sort/baseball/BubbleBaseballEntity.py
new file mode 100644
index 0000000..1ef8597
--- /dev/null
+++ b/src/lessons/sort/baseball/BubbleBaseballEntity.py
@@ -0,0 +1,19 @@
+# BEGIN SOLUTION
+while not isSorted():
+	while getHoleBase()>0:
+		maxPos = 0
+		maxColor = getPlayerColor(getHoleBase()-1, 0)
+		for pos in range(getPositionsAmount()):
+			if getPlayerColor(getHoleBase()-1, pos) > maxColor:
+				maxColor = getPlayerColor(getHoleBase()-1, pos)
+				maxPos = pos
+		move(getHoleBase()-1,maxPos);
+	while getHoleBase()<getBasesAmount()-1:
+		minPos = 0
+		minColor = getPlayerColor(getHoleBase()+1, 0)
+		for pos in range(getPositionsAmount()):
+			if getPlayerColor(getHoleBase()+1, pos) < minColor:
+				minColor = getPlayerColor(getHoleBase()+1, pos)
+				minPos = pos
+		move(getHoleBase()+1,minPos)
+# END SOLUTION 
diff --git a/src/lessons/sort/baseball/InsertBaseball.fr.html b/src/lessons/sort/baseball/InsertBaseball.fr.html
new file mode 100644
index 0000000..306ac91
--- /dev/null
+++ b/src/lessons/sort/baseball/InsertBaseball.fr.html
@@ -0,0 +1,66 @@
+<h1>Baseball par insertion</h1>
+
+<p>Le coté positif d'adapter le tri par sélection à notre problème est que nous
+savons que cela fonctionne (à condition que notre adaptation soit
+correcte). C'est bien mieux que notre premier algorithme naïf, qui était
+incapable de converger vers la solution dans certains cas. Cependant, le tri
+par sélection n'est pas parfait non plus, puisqu'il requiert beaucoup
+d'échanges : il faut amener le trou jusqu'au joueur sélectionné puis amener
+le joueur ET le trou vers la bonne base. On doit pouvoir faire mieux.</p>
+
+<p>Par exemple, chaque joueur peut avoir à parcourir un chemin relativement
+long pour arriver à sa position finale. Au lieu de cela, il serait peut-être
+intéressant de couper le terrain en deux parties : l'une à gauche où tous
+les joueurs sont triés relativement les uns aux autres, et une autre à
+droite où les joueurs n'ont pas encore bougé de leur position de
+départ. Ensuite, à chaque itération, on prend le joueur à la frontière entre
+les deux zones (c'est à dire, le joueur le plus à gauche de la zone non
+triée) et on le déplace vers la gauche jusqu'à sa position dans la zone
+triée (c'est à dire, jusqu'à ce qu'il soit plus grand que son voisin de
+gauche). Cela réduirait au moins la distance que les joueurs doivent
+parcourir pour rentrer dans la zone triée, puisqu'on prend systématiquement
+le joueur à la frontière.</p>
+
+<p>En fait, c'est exactement ce qu'un tri par insertion ferait: maintenir une
+zone triée à gauche, et y insérer à chaque itération l'élément qui se trouve
+à la frontière en le décalant vers la gauche jusqu'à sa position dans la
+zone triée. C'est une bonne chose, car cela veut dire que notre algorithme
+n'est pas fondamentalement faux, puisqu'il s'agit d'une adaptation d'un
+algorithme connu. </p>     
+
+<p>Le plus simple pour adapter le tri par insertion au problème du baseball est
+de considérer toutes les positions comme adjacentes sans tenir compte des
+différentes bases. Pour cela, il faut définir les méthodes
+<code>couleurJoueur(pos)</code>, <code>deplace(pos)</code> et
+<code>trouveTrou()</code> qui utilisent un seul entier pour désigner une
+position donnée et appellent les fonctions de base de cet univers pour faire
+leur travail. Pour convertir une position encodée sur un seul entier
+<code>index</code> en une position encodée sur deux entiers
+<code>base,pos</code>, il faut appliquer les formules suivantes:
+<code>base=index/2</code> et <code>pos=index%2</code>. Pour faire le calcul
+inverse, il faut utiliser <code>index=base*2+pos</code> (qui fonctionne car
+il y a deux positions par base).</p> 
+
+<p>Pour l'algorithme lui-même, vous devriez tout d'abord bouger le trou en
+position 1. On considère alors que la zone triée se limite pour l'instant à
+la position 0 (elle est alors de taille 1) tandis que la zone non triée
+commence à partir de la position 2. Ensuite, on fait une itération par
+élément à trier. Comme le corps de cet itération est un peu plus compliqué
+que ce que nous avons écrit jusque là, vous devriez réfléchir à l'invariant
+de cette boucle, c'est à dire à la condition qui est vraie avant et après un
+passage dans la boucle, et qui fait que la boucle fait son travail. Ici,
+l'invariant a deux parties : tout d'abord, l'emplacement vide se trouve
+entre les parties triées et non triées, et ensuite, la zone triée est
+... triée, c'est à dire que tous les éléments de cette zone sont bien triés
+par rapport à leurs voisins.</p>
+
+<p>Ensuite, le corps de la boucle devrait trier un élément en descendant cet
+élément et le trou dans la zone triée jusqu'au point où l'élément est à sa
+place dans la zone triée (cela demande deux déplacements par case à
+parcourir), avant de remonter le trou à sa place à la frontière (un
+déplacement par case à parcourir).</p> 
+
+<p>Une fois que vous avez inséré le dernier élément dans la zone triée, tout
+votre ensemble est trié et vous avez fini. Je vous laisse la surprise des
+cas limites nécessitant de petits ajustements à votre algorithme pour lui
+permettre de fonctionner dans tous les cas :)</p>
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/InsertBaseball.html b/src/lessons/sort/baseball/InsertBaseball.html
new file mode 100644
index 0000000..cec9a51
--- /dev/null
+++ b/src/lessons/sort/baseball/InsertBaseball.html
@@ -0,0 +1,45 @@
+<h1>Insertion Baseball</h1>
+
+<p>The good point of adapting the selection sort to the baseball problem is that we know that
+it works (provided that our adaptation is correct). That's much better than the first naive 
+algorithm, that was unable to converge to the solution in some situations. But actually, the 
+selection sort is not perfect either as it requires a lot of swaps: we have to bring the hole 
+to the selected player and then both the player and hole in position, and more. We can do better.</p>
+
+<p>For example, each player can run quite a long way from its initial position to its target solution.
+Instead, it may be more interesting to split the field in two parts: one on the left where all players 
+are sorted relatively to each others, and one on the right where the players are still at their initial 
+positions. Then, at each iteration, we take the player at the border between the sorted and unsorted 
+areas (that is, the left-most player of the unsorted area) and move it to the left (within the sorted 
+area) until it reaches its position (that is, until the position where it's bigger that its left
+neighbor). This would at least reduce the travel of players to the sorted area as we use the first 
+one on the border.</p>
+
+<p>Actually, that's exactly what an insertion sort would do: maintain a sorted area on the left, and put 
+iteratively the player on the border to its position within the sorted area. This is good, as we know
+that our algorithm is not inherently flawed since we adapt a well known one.</p>     
+
+<p>The easiest to adapt the insertion sort to the baseball problem is to consider all positions as 
+adjacent and forget about bases. For that, we define the methods <code>getColor(pos)</code>, 
+<code>move(pos)</code> and <code>getHole()</code> that all use a unique integer to designate a given 
+position. These functions simply convert between the way to specify a position and then call the 
+usual functions to interact with the world. If you have an <code>index</code> and want to convert it 
+into a <code>base,pos</code>, then <code>base=index/2</code> and <code>pos=index%2</code>. To compute 
+the reverse, <code>index=base*2+pos</code> (this works because <code>getPositionsAmount()</code> always 
+returns 2).</p> 
+
+<p>For the algorithm itself, you should first move the hole to the position 1. The position 0 is 
+considered to be the sorted area (of size 1 for now) while the area above 2 is the unsorted area. 
+Then comes an iteration to sort each element of the unsorted area. Since this iteration is a bit complex, 
+you should think of its loop invariant, that is, the condition that is true before and after the loop 
+and which explains that the loop fulfills its goal. Here, the loop invariant is twofold: First, the hole is  
+between the sorted area and the unsorted area, and then, the every elements of the sorted area are ... well 
+sorted relatively to their neighbors.</p>
+
+<p>Then, the loop body to sort an element should first descend the hole and the elements within the sorted 
+area until the element is larger than the element before in the sorted area (2 moves per position to travel), 
+and then move the hole back to its position between the sorted and unsorted areas (1 move per position).</p> 
+
+<p>Once you insert the last element within the sorted area, your whole set is sorted and you're done. 
+I preserve the surprise of the border cases that will require some little adjustments to your algorithm to 
+make it work properly :)</p>
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/InsertBaseball.java b/src/lessons/sort/baseball/InsertBaseball.java
new file mode 100644
index 0000000..e03f64d
--- /dev/null
+++ b/src/lessons/sort/baseball/InsertBaseball.java
@@ -0,0 +1,24 @@
+package lessons.sort.baseball;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.sort.baseball.universe.BaseballWorld;
+
+public class InsertBaseball extends ExerciseTemplated {
+
+	public InsertBaseball(Lesson lesson) {
+		super(lesson);
+
+		setup(new BaseballWorld[] {
+				new BaseballWorld("4 bases",4,2),
+				new BaseballWorld("5 bases",5,2),
+				new BaseballWorld("6 bases",6,2),
+				new BaseballWorld("7 bases",7,2),
+				new BaseballWorld("8 bases",8,2),
+				new BaseballWorld("9 bases",9,2),
+				new BaseballWorld("10 bases",10,2,new int[]{-1,7 , 2,7 , 1,4 , 3,4 , 5,6 , 8,9 , 5,1 , 3,6 , 0,2 , 0,8}),
+				new BaseballWorld("15 bases",15,2),
+		});
+	}
+
+}
diff --git a/src/lessons/sort/baseball/InsertBaseballEntity.java b/src/lessons/sort/baseball/InsertBaseballEntity.java
new file mode 100644
index 0000000..a5cef4d
--- /dev/null
+++ b/src/lessons/sort/baseball/InsertBaseballEntity.java
@@ -0,0 +1,50 @@
+package lessons.sort.baseball;
+
+import lessons.sort.baseball.universe.BaseballEntity;
+import lessons.sort.baseball.universe.BaseballWorld;
+
+public class InsertBaseballEntity extends BaseballEntity {
+	
+	/* BEGIN TEMPLATE */
+	public void run() {
+		/* BEGIN SOLUTION */
+		/* Bring the hole in 0,1 */
+		if (getHole() == 0) // It is already on base 0, but on another position
+			move(1);
+		while (getHole() > 1)
+			move(getHole()-1);
+		
+		for (int player = 2; player < getBasesAmount()*getPositionsAmount(); player ++) {
+			//out("Sort player "+player);
+			
+			//out("Compare "+(getHole()+1)+":"+getPlayerColor(getHole()+1)+" < "+(getHole()-1)+":"+getPlayerColor(getHole()-1));
+			while (getHole()>0 && getPlayerColor(getHole()+1) < getPlayerColor(getHole()-1)) {  
+				int center = getHole();// ...2x1... with ascending positions from left to right
+				move(center+1);        // ...21x...
+				move(center-1);        // ...x12...
+			}
+			while (getHole() != player) 
+				move(getHole()+1);
+		}
+		((BaseballWorld) world).assertSorted("insertion sort");
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+	
+	/* BEGIN HIDDEN */	
+	int getPlayerColor(int pos) {
+		return getPlayerColor(pos / getPositionsAmount(), pos % getPositionsAmount());
+	}
+	void move(int pos) {
+		move(pos / getPositionsAmount(), pos % getPositionsAmount());
+	}
+	int getHole() {
+		return getPositionsAmount()*getHoleBase()+getHolePosition();
+	}
+	
+	void out(String msg) {
+		if (isSelected())
+			System.out.println(msg);
+	}
+	/* END HIDDEN */
+}
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/InsertBaseballEntity.py b/src/lessons/sort/baseball/InsertBaseballEntity.py
new file mode 100644
index 0000000..e2340be
--- /dev/null
+++ b/src/lessons/sort/baseball/InsertBaseballEntity.py
@@ -0,0 +1,23 @@
+# BEGIN SOLUTION
+def getColor(pos):
+	return getPlayerColor(pos / getPositionsAmount(), pos % getPositionsAmount())
+def doMove(pos):
+	move(pos / getPositionsAmount(), pos % getPositionsAmount())
+def getHole():
+		return getPositionsAmount()*getHoleBase()+getHolePosition()
+
+
+# Bring the hole in 0,1
+while getHole() > 1:
+	doMove(getHole()-1)
+if getHole() == 0: # It was probably already on base 0, but on another position
+	doMove(1)
+
+for player in range(2,getBasesAmount()*getPositionsAmount()):
+	while getHole()>0 and getColor(getHole()+1) < getColor(getHole()-1):
+		center = getHole() # ...2x1... with ascending positions from left to right
+		doMove(center+1)     # ...21x...
+		doMove(center-1)     # ...x12...
+	while getHole() != player:
+		doMove(getHole()+1)
+# END SOLUTION
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/Main.fr.html b/src/lessons/sort/baseball/Main.fr.html
new file mode 100644
index 0000000..70e48b4
--- /dev/null
+++ b/src/lessons/sort/baseball/Main.fr.html
@@ -0,0 +1,54 @@
+<h1>Le jeu du baseball multicolore</h1>
+
+<p>Cette activité est inspirée du jeu de l'orange dans le recueil d'activités
+«Computer Science Unplugged». Elle a cependant été profondément réarrangée
+depuis, d'abord pour SMN (mon recueil d'activités <i>libres</i> pour
+introduire la science informatique, disponible depuis
+http://www.loria.fr/~quinson/Mediation/SMN/), et maintenant pour JLM.</p>
+
+<p>Dans la littérature scientifique, la forme généralisée de ce problème se
+nomme «le problème du déplacement des galets» (Pebble motion problem). Les
+bases peuvent être connectées par un graphe quelconque, et les affinités
+entre les galets et les bases peuvent être différentes. La plus connue des
+variantes de ce problème est le jeu du taquin, avec un seul joueur par base
+et une grille carrée à deux dimensions. On trouve énormément d'informations
+sur ces problèmes sur les pages wikipédia anglophones, comme d'habitude.</p>
+
+<h3>Comment pouvez vous être sûr que l'algorithme naïf ne boucle pas sur cette
+situation initiale? </h3>
+
+<p>Et bien, nous avons testé toutes les situations initiales possibles pour
+étudier les cas où l'algorithme boucle et ceux où l'algorithme termine
+correctement. Nous avons trouvé qu'il fonctionne pour toutes les situations
+où aucun joueur ne se trouve dans sa base (il y a 84 situations de ce genre
+pour 4 bases, si on élimine les symétries). Bien entendu, l'algorithme
+fonctionne correctement pour de nombreuses situations ne respectant pas ce
+critère (telles que toutes les situations rencontrées quand on commence de
+l'une de ces 84 situations), mais c'est une autre histoire. Avoir un tel
+critère nous permet de générer des situations initiales pour ce premier
+exercice de manière pseudo-aléatoire tout en étant sûrs que l'algorithme
+proposé se comportera correctement.</p>
+
+<p>Nous avons également exploré des instances plus grande de ce problème, et
+malheureusement, nous ne connaissons pas de critère sûr dans ce cas. Avec 5
+bases, l'algorithme part en boucle infinie pour 24 des 1824 plateaux
+possibles où aucun joueur n'est à la maison (cela représente 1,31%). Avec 6
+bases, il boucle pour 1251 des 58860 plateaux respectant ce critère
+(2,12%). Avec 7 bases, il boucle dans 84444 cas sur 2633940 (càd 3,2%). Nous
+cherchons encore un critère permettant de garantir que l'algorithme ne
+bouclera pas. Si vous en découvrez un, merci de nous l'indiquer. Ce serait
+encore mieux s'il était possible de vérifier le critère de tête afin que les
+animateurs puissent s'en servir pendant les activités débranchées.</p>
+
+<h3>Que puis-je faire pour améliorer cet univers de JLM?</h3>
+
+<p>Comme souvent, plusieurs points pourraient être améliorés dans le code de
+cet univers pour l'améliorer :</p>
+<ul>
+  <li>D'autres représentations graphiques pourraient être proposées, comme une
+représentation linéaire (pour les exercices proposés) ou d'autres comme une
+grille ou un arbre, si un exercice sur ce type de graphe s'avère
+intéressant.</li>
+  <li>D'autres exercices à propos d'autres algorithmes pour cette variante du
+problème, ou bien d'autres variantes comme le jeu du taquin.</li>
+</ul> 
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/Main.html b/src/lessons/sort/baseball/Main.html
new file mode 100644
index 0000000..b2b04bf
--- /dev/null
+++ b/src/lessons/sort/baseball/Main.html
@@ -0,0 +1,34 @@
+<h1>The Rainbow Baseball Game</h1>
+
+<p>This activity is inspired from the orange game, from the "Computer Science Unplugged" activities repository. 
+It was however heavily since then, first for the CSIRL (my repository of <i>free</i> unplugged activities to
+introduce computer science, available at http://www.loria.fr/~quinson/Mediation/SMN/) and now for JLM.</p>
+
+<p>In the literature, the generalized form of this problem is known as the pebble motion problem (the bases can 
+be connected by any kind of graph, and the affinity of pebbles with bases may be different). Another variant of 
+this problem is the well known 15-puzzle, with one player per base, and a two dimensional square grid. Much 
+more information about these problems can be found on wikipedia, as usual.</p>
+
+<h3>How do you know that the naive algorithm won't loop on that initial situation?</h3>
+
+<p>Well, we simply tested all possible situations to see when this algorithm loops and when it finds the correct
+solution. We found that it works for all situations where no player is at home (there is 84 such situations for 
+4 bases, once you take the symmetries into account). It obviously works for some situations that do not respect 
+this criteria (such as all situations it encounters from one of those 84 boards to the final state), but that's 
+another story. Having such a criteria allows us to generate pseudo-random initial situations for the first 
+exercise for which the algorithm we propose is guarenteed to work.</p>
+
+<p>We also explored bigger instances of the problem, and unfortunately, we have no such criteria for them. 
+With 5 bases, the algorithm wrongly loops for 24 of the 1824 possible boards where no player is home (that's 1.31%). 
+With 6 bases, it fails on 1251 of the 58860 such boards (2.12%). With 7 bases, it fails for 84444 out of 2633940 
+(that's 3.2%). I am still looking for a criteria ensuring that the algorithm won't loop. If you discover one, please 
+report it. Ideally, it would be simple to enforce manually so that we can use it during our unplugged activities.</p>
+
+<h3>What can I do to improve this JLM universe?</h3>
+
+<p>As usual, there are several things that could be done in the code of this universe to improve it:</p>
+<ul>
+  <li>Other graphical representations could be proposed, such as a linear one (for the existing exercises) or other ones
+      (such as a grid or a tree, if an exercise on this kind of graph proves interesting).</li>
+  <li>Other exercises on other algorithms on this variant, or on other variants such as the 15-puzzle.</li>
+</ul> 
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/Main.java b/src/lessons/sort/baseball/Main.java
new file mode 100644
index 0000000..1919cd1
--- /dev/null
+++ b/src/lessons/sort/baseball/Main.java
@@ -0,0 +1,13 @@
+package lessons.sort.baseball;
+
+import jlm.core.model.lesson.Lesson;
+
+public class Main extends Lesson {
+
+	protected void loadExercises() {
+		addExercise(new NaiveBaseball(this));
+		addExercise(new SelectBaseball(this));  
+		addExercise(new InsertBaseball(this));
+		addExercise(new BubbleBaseball(this));
+	}
+}
diff --git a/src/lessons/sort/baseball/NaiveBaseball.fr.html b/src/lessons/sort/baseball/NaiveBaseball.fr.html
new file mode 100644
index 0000000..33f9260
--- /dev/null
+++ b/src/lessons/sort/baseball/NaiveBaseball.fr.html
@@ -0,0 +1,60 @@
+<h1>Baseball multicolore naïf</h1>
+
+<p>Aujourd'hui, les buggles ont décidé de faire une partie de baseball, mais il
+faut avouer que ce n'est pas très bien engagé : elles ne se souviennent plus
+très bien des règles, et ... euh ... elles ont perdu les battes et les
+balles. Elles ont donc décidé «d'adapter un peu» les règles. Comme il n'y a
+plus de balle, la seule chose qu'elles peuvent faire est de courir sur le
+terrain. C'est d'ailleurs ce qu'elles ont fait pendant un moment : toutes
+les buggles présentes se sont mises à courir en tous sens sur le terrain.</p> 
+
+<p>Mais après quelques collisions plus ou moins douloureuses, elles décident
+d'inventer de nouvelles règles pour organiser la partie. Elles décident de
+faire une équipe par base sur le terrain et deux joueurs par équipes. L'une
+des équipes n'a qu'un seul joueur pour que l'une des bases ait un
+emplacement vide. Ensuite, les joueurs se répartissent aléatoirement sur les
+bases, et le jeu est de faire en sorte que chaque joueur retourne sur sa
+base. La partie s'arrềte quand tous les joueurs sont chez eux. Il n'y a pas
+d'équipe gagnante : soit tous les joueurs remportent la partie, soit ils la
+perdent tous. Oui, c'est vrai, ce jeu est très différent du baseball
+habituel. La seule règle qui reste est qu'il faut courir autour du terrain,
+de base en base, sans jamais passer au centre du terrain.</p>
+
+<p>Maintenant, les buggles ont besoin de vous pour décider qui doit bouger à
+quel moment de façon à ce que chacune rejoigne sa base. Une seule buggle
+peut bouger à chaque tour, de sa position jusqu'à l'emplacement vide. De
+plus, la distance maximale qu'une buggle peut parcourir en un tour est de
+une seule base.</p>
+
+<p>Ainsi, à chaque tour, l'emplacement vide se trouve sur une base (disons
+<code>B</code>), et vous devez décider quelle buggle occupera cette
+place. Il y a quatre candidates : deux de la base <code>B-1<code>, et deux
+de la base <code>B+1</code>. En fait, il y a une cinquième candidate puisque
+la buggle qui se trouve sur la même base que le trou peut aller l'occuper,
+mais ça ne fait pas vraiment avancer le problème.</p>
+
+<h3>Algorithme naïf</h3>
+
+<p>Dans cet exercice, nous allons explorer un premier algorithme très
+simple. Pour décider laquelle des quatre candidates doit aller occuper
+l'emplacement vide, nous commençons par nous restreindre à tourner dans le
+sens des aiguilles d'une montre. Ensuite, parmi les deux candidates
+restantes, nous prenons celle qui a encore le plus de chemin à parcourir
+jusqu'à sa base (dans le sens des aiguilles d'une montre). Essayez la
+démonstration : cela marche plutôt bien en pratique.</p>
+
+<p>Il est difficile d'imaginer un algorithme plus simple pour ce problème :
+tant que ce n'est pas trié, chercher la base contenant les candidates. Si le
+trou est sur la base <code>B</code>, il s'agit de la base <code>B+1</code>
+(modulo le nombre de bases). Ensuite, il faut calculer la distance que
+chacune des buggles de cette base doit encore parcourir (0 si elle est déjà
+chez elle). Une fois que vous avez sélectionné l'heureuse élue, utilisez la
+méthode <code>move</code> pour la faire bouger, avant de passer à
+l'itération suivante.</p>   
+
+<p>La principale difficulté est peut-être d'écrire les quelques équations
+nécessaires sans se tromper. Trouver quelle est la base après le trou
+devrait être assez facile, mais calculer la distance que chaque joueur doit
+encore parcourir peut s'avérer plus problématique. N'hésitez pas à faire des
+dessins pour vérifier que votre équation marche dans tous les cas, il n'y a
+pas tant de cas possibles que cela après tout.</p>  
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/NaiveBaseball.html b/src/lessons/sort/baseball/NaiveBaseball.html
new file mode 100644
index 0000000..9922760
--- /dev/null
+++ b/src/lessons/sort/baseball/NaiveBaseball.html
@@ -0,0 +1,43 @@
+<h1>Naive Rainbow Baseball</h1>
+
+<p>Today, the buggles decided to play a baseball game, but they are rather out of luck, actually.
+First, kinda forgot the rules, and ... well ... they cannot find the ball and bats again. 
+So they decided to "adapt a bit" the rules. As the are no ball, the buggles can only running 
+around the field, what they do happily: for a while, all attending buggle run at full speed in
+all directions around the field.</p> 
+
+<p>But after a few collisions, they decide to invent new rules to organize a bit the game: 
+They make one team per base and two players per team. One of the teams has only one player so 
+that its base has an empty location. Then, the players are dispatched randomly around the bases, 
+and the game for them is to reach their home base. The whole game stops when all players are home. 
+There is no winning team: either all players win, or they all lose. Actually, this game is very
+different from the original baseball. The only rule that remains is that you can only run around 
+the field, from one base to the next one, without crossing middle of the field.</p>
+
+<p>Now, they are asking you to help them deciding who and when should move so that each player 
+returns to its base. Only one buggle can move at each round, from its position to the empty spot. 
+The maximal distance that a buggle can cover in one round is of one base.</p>
+
+<p>So, at each round, the empty spot is on one base (say <code>B</code>), and you should decide 
+which buggle enters that empty spot. There is four candidates (two from base <code>B-1</code> 
+and two from base <code>B+1</code>). Actually, there is a fifth candidate since the buggle that 
+is on the same base than the empty spot can change its position, but that's not really helping.</p>
+
+<h3>The Naïve algorithm</h3>
+
+<p>In this exercise, we will first explore a very simple algorithm. To decide which of the four 
+candidate buggles should enter the empty spot, we first restrict ourselves and decide that buggles
+can only turn clockwise. Then, from the two remaining candidates, we pick the one that has the 
+largest distance to cover to reach its base (turning clockwise). Click on the demo button: this 
+works rather well in practice.</p>
+
+<p>It's hard to find a simpler algorithm for this problem: While it's not sorted, search for 
+the base containing the candidate buggles: if the hole is in base <code>B</code>, it's the base 
+<code>B+1</code>, modulo the amount of bases. Then, compute the distance that each buggle of that 
+base still has to run to reach its base (0 if it's already home). Once you found the buggle that 
+should enter the empty spot, just use the <code>move</code> method on it, and iterate.</p>   
+
+<p>The main difficulty should be to get the few equations right: determining the base next to the 
+hole should be easy, but determining the distance that a player has to cover may reveal a bit more
+challenging. Don't hesitate to draw pictures on a paper to cover all possible cases. It should not
+be that difficult either: there is not that many cases after all.</p>  
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/NaiveBaseball.java b/src/lessons/sort/baseball/NaiveBaseball.java
new file mode 100644
index 0000000..c27f0e6
--- /dev/null
+++ b/src/lessons/sort/baseball/NaiveBaseball.java
@@ -0,0 +1,18 @@
+package lessons.sort.baseball;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.sort.baseball.universe.BaseballWorld;
+
+public class NaiveBaseball extends ExerciseTemplated {
+
+	public NaiveBaseball(Lesson lesson) {
+		super(lesson);
+
+		setup(new BaseballWorld[] {
+				new BaseballWorld("Field 1",4,2, BaseballWorld.MIX_NOBODY_HOME),
+				new BaseballWorld("Field 2",4,2, BaseballWorld.MIX_NOBODY_HOME)
+		});
+	}
+
+}
diff --git a/src/lessons/sort/baseball/NaiveBaseballEntity.java b/src/lessons/sort/baseball/NaiveBaseballEntity.java
new file mode 100644
index 0000000..dc8e9ca
--- /dev/null
+++ b/src/lessons/sort/baseball/NaiveBaseballEntity.java
@@ -0,0 +1,32 @@
+package lessons.sort.baseball;
+
+import lessons.sort.baseball.universe.BaseballEntity;
+import lessons.sort.baseball.universe.BaseballWorld;
+
+public class NaiveBaseballEntity extends BaseballEntity {
+
+	/* BEGIN TEMPLATE */
+	public void run() {
+		/* BEGIN SOLUTION */
+		while (!isSorted()) {
+			int baseNext = (getHoleBase()+1) % getBasesAmount();
+			int posNext = -1;
+			int maxDistance = -1;
+			for (int pos=0;pos<getPositionsAmount();pos++) {
+				int player = getPlayerColor(baseNext, pos);
+				int distance = (baseNext - player + getBasesAmount()) % getBasesAmount();
+				if (distance > maxDistance) {
+					maxDistance = distance;
+					posNext = pos;
+				}
+//				System.out.println(world.toString()+"  baseNext:"+baseNext+" player:"+player+"  distance:"+distance+" (#bases:"+getBasesAmount()+")");
+			}
+//			System.out.println("move "+baseNext+","+posNext);
+			move(baseNext,posNext);
+		}
+		((BaseballWorld) world).assertSorted("naive sort");
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
diff --git a/src/lessons/sort/baseball/NaiveBaseballEntity.py b/src/lessons/sort/baseball/NaiveBaseballEntity.py
new file mode 100644
index 0000000..7386d76
--- /dev/null
+++ b/src/lessons/sort/baseball/NaiveBaseballEntity.py
@@ -0,0 +1,13 @@
+# BEGIN SOLUTION
+while not isSorted():
+	baseNext = (getHoleBase()+1) % getBasesAmount()
+	posNext = -1
+	maxDistance = -1
+	for pos in range(getPositionsAmount()):
+		player = getPlayerColor(baseNext, pos)
+		distance = (baseNext - player + getBasesAmount()) % getBasesAmount()
+		if distance > maxDistance:
+			maxDistance = distance
+			posNext = pos
+	move(baseNext,posNext);
+# END SOLUTION
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/SelectBaseball.fr.html b/src/lessons/sort/baseball/SelectBaseball.fr.html
new file mode 100644
index 0000000..01880aed
--- /dev/null
+++ b/src/lessons/sort/baseball/SelectBaseball.fr.html
@@ -0,0 +1,42 @@
+<h1>Baseball par selection</h1>
+
+<p>L'algorithme précédent est très plaisant : il est plutôt simple, assez
+rapide à implémenter, mais malheureusement, il est également carrément
+faux. Dans certains cas, il ne s'arrête jamais, ce qui n'est pas très
+bon. Si vous ne le croyez pas, copie/collez votre code et appuyez sur le
+bouton «Exécuter». Le premier monde de cet exercice est l'un de ces cas
+malheureux où notre algorithme devient fou.</p>
+
+<p>Il nous faut donc trouver un autre algorithme. De préférence un qui marche
+dans tous les cas.</p>
+
+<p>Pour cela, la meilleure solution est d'adapter un algorithme connu au lieu
+de tenter de partir de zéro comme nous venons de faire. Quand on réfléchi un
+peu à ce problème, on reconnaît un certain air de famille avec le problème
+du tri : il suffit de <b>trier</b> les joueurs en fonction de leur couleur
+pour le résoudre. Et tant que nous y sommes, nous pouvons généraliser un peu
+le problème en utilisant plus de quatre bases.</p>
+
+<p>Adaptons le tri par sélection à notre situation. Les grandes lignes de cet
+algorithme sont les suivantes : «pour chaque base, trouver dans la zone pas
+encore triée les joueurs qui doivent occuper cette base, puis les y
+placer». De la sorte, on va faire grandir une zone triée qu'on ne modifie
+plus jamais, tout en faisant réduire la taille de la zone pas encore triée.</p>
+
+<p>Choisir les joueurs à déplacer ne devrait pas poser de problème. N'hésitez
+pas à définir quelques fonctions comme <code>trouveJoueur</code> ou
+<code>trouveBaseJoueur()</code>. Cela améliorera la lisibilité de votre
+code, ce qui est toujours une bonne chose.</p>
+
+<p>L'aspect le plus problématique est de déplacer les joueurs sélectionnés
+jusqu'à leur position. Pour cela, il vous faut déplacer le trou jusqu'à la
+base où se trouve le joueur, puis bouger ensuite le trou et le joueur de
+base en base jusqu'à celle avant la cible (au moyen d'une boucle). Enfin, on
+peut mettre le joueur dans la bonne case de sa base de prédilection.</p>
+
+<p>Comme souvent en programmation, le diable est dans les détails, et il y a un
+certain nombre de cas particuliers à détecter et à gérer correctement, comme
+quand le joueur est déjà dans sa base de prédilection (mais pas dans la
+bonne position), ou quand le trou se trouve en fait à droite du joueur
+(probablement quand vous triez la première base). Mais vous allez trouver et
+résoudre ces problèmes quand vous débugguerez votre code.</p>
diff --git a/src/lessons/sort/baseball/SelectBaseball.html b/src/lessons/sort/baseball/SelectBaseball.html
new file mode 100644
index 0000000..47db095
--- /dev/null
+++ b/src/lessons/sort/baseball/SelectBaseball.html
@@ -0,0 +1,36 @@
+<h1>Selection Baseball</h1>
+
+<p>The previous algorithm is very pleasant: it's rather simple and rather fast to implement, 
+but unfortunately, it is also rather wrong! In some cases, it never stops, which is obviously 
+bad. If you don't believe it, just copy paste your previous code, and hit the run button. The 
+first world of this exercise is one of these unfortunate situations that drives our previous
+algorithm crazy.</p>
+
+<p>So we have to find another algorithm, preferably one that works in all cases.</p>
+
+<p>For that, the best solution is to start from a well known algorithm instead of trying to 
+invent a new one from scratch as we just did. When you think a bit about this problem, this 
+can is very similar to a sorting problem: Just make sure that the players are sorted by their 
+colors and you're set. And while we are at it, let's generalize the game to allow more that 4 
+bases.</p>
+
+<p>Let's adapt the selection sort to our situation. The big lines of
+the algorithm is then "for each base, select the players that should
+occupy this base and make sure that they come to their position". This
+way, we will grow an sorted area where all players are already sorted
+(and never changed) while the unsorted area shrinks.</p>
+
+<p>Selecting the player should be no problem; Do not hesitate to define some methods such as 
+<code>findPlayer()</code> or <code>findPlayerBase()</code>. This will ensure that your code 
+remains understandable.</p>
+
+<p>The most problematic aspect is to move the selected players into position. For that, you 
+have to move the hole to the position where the player is, and then move both the player and 
+the hole to the base that is next to the player's goal (probably in a loop), and finally
+put the player in the right position of its target base.</p>
+
+<p>As often in programming, the devil is in the details: there is a bunch of corner cases that
+you should detect and deal with correctly, such as the cases where the player is already in the 
+base (but not in the position that you would like), or when the hole is on the right of the 
+player (probably when you sort the first base). But you will find and hunt these while debugging 
+your code.</p>
diff --git a/src/lessons/sort/baseball/SelectBaseball.java b/src/lessons/sort/baseball/SelectBaseball.java
new file mode 100644
index 0000000..9862034
--- /dev/null
+++ b/src/lessons/sort/baseball/SelectBaseball.java
@@ -0,0 +1,24 @@
+package lessons.sort.baseball;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.sort.baseball.universe.BaseballWorld;
+
+public class SelectBaseball extends ExerciseTemplated {
+
+	public SelectBaseball(Lesson lesson) {
+		super(lesson);
+
+		setup(new BaseballWorld[] {
+				new BaseballWorld("Almost",4,2, BaseballWorld.MIX_ALMOST_SORTED),
+				new BaseballWorld("5 bases",5,2),
+				new BaseballWorld("6 bases",6,2),
+				new BaseballWorld("7 bases",7,2),
+				new BaseballWorld("8 bases",8,2),
+				new BaseballWorld("9 bases",9,2),
+				new BaseballWorld("10 bases",10,2),
+				new BaseballWorld("15 bases",15,2),
+		});
+	}
+
+}
diff --git a/src/lessons/sort/baseball/SelectBaseballEntity.java b/src/lessons/sort/baseball/SelectBaseballEntity.java
new file mode 100644
index 0000000..ffdafae
--- /dev/null
+++ b/src/lessons/sort/baseball/SelectBaseballEntity.java
@@ -0,0 +1,78 @@
+package lessons.sort.baseball;
+
+import lessons.sort.baseball.universe.BaseballEntity;
+import lessons.sort.baseball.universe.BaseballWorld;
+
+public class SelectBaseballEntity extends BaseballEntity {
+
+	
+	/* BEGIN TEMPLATE */
+	public void run() {
+		/* BEGIN SOLUTION */
+		for (int base = 0 ; base < getBasesAmount() -1 ; base++) 
+			bringPlayersHome(base);
+		
+		((BaseballWorld) world).assertSorted("selection sort");
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+	/* BEGIN HIDDEN */
+	void out(String msg) {
+		//if (false)
+		//	System.out.println(msg);
+	}
+	
+	public void bringPlayersHome(int base) {
+		for (int positionToFill = 0; positionToFill<getPositionsAmount(); positionToFill++) {
+			out("Sort base "+base+", position "+positionToFill);
+			if (getPlayerColor(base, positionToFill) == base)
+				continue; // already home
+		
+			// search for the player on the ground
+			int playerBase = findPlayerBase(base,base);
+			int playerPos = findPlayerPos(playerBase, base);
+			out("player is in "+playerBase+","+playerPos);
+			
+			
+			// bring the hole to the other position of that base
+			while (getHoleBase() != playerBase) {
+				if (getHoleBase()> playerBase) {
+					move(getHoleBase()-1,(playerPos+1)%2);
+				} else {
+					move(getHoleBase()+1,(playerPos+1)%2);
+				}
+			}
+			out("The hole is now with the player in "+playerBase+": "+world.toString());
+			
+			if (playerBase == base) {
+				// Already in the base. Bring it to its position
+				move(base,(positionToFill+1)%2);
+				
+			} else while (playerBase != base) { // bring the player to the base next to its home
+				move (playerBase-1, positionToFill);
+				move (playerBase, findPlayerPos(playerBase, base));
+				if (playerBase-1 != base) {
+					move (playerBase-1, (positionToFill+1) %2);
+				}
+				playerBase--;
+				out("One step further. playerBase: "+playerBase+"; world:"+world.toString());
+			}
+		}
+	}
+	
+	int findPlayerBase(int start, int color) {
+		for (int playerBase=start+1;playerBase<getBasesAmount();playerBase++)
+			for (int pos=0; pos<getPositionsAmount();pos++)
+				if (getPlayerColor(playerBase, pos) == color)
+					return playerBase;
+		throw new IllegalArgumentException("cannot find any player of color "+color+" starting at base "+start);
+	}
+	
+	int findPlayerPos(int base, int color) {
+		for (int pos=0; pos<getPositionsAmount();pos++)
+			if (getPlayerColor(base, pos) == color)
+				return pos;
+		throw new IllegalArgumentException("cannot find any player of color "+color+" within base "+base);
+	}		
+	/* END HIDDEN */
+}
diff --git a/src/lessons/sort/baseball/SelectBaseballEntity.py b/src/lessons/sort/baseball/SelectBaseballEntity.py
new file mode 100644
index 0000000..505127d
--- /dev/null
+++ b/src/lessons/sort/baseball/SelectBaseballEntity.py
@@ -0,0 +1,46 @@
+# BEGIN SOLUTION
+def bringPlayersHome(base):
+	for positionToFill in range(getPositionsAmount()):
+		if getPlayerColor(base, positionToFill) == base:
+			continue # already home
+	
+		# search for the player on the ground
+		playerBase = findPlayerBase(base,base);
+		playerPos = findPlayerPos(playerBase, base);
+		
+		# bring the hole to the other position of that base
+		while getHoleBase() != playerBase:
+			if getHoleBase()> playerBase:
+				move(getHoleBase()-1,(playerPos+1)%2);
+			else:
+				move(getHoleBase()+1,(playerPos+1)%2);
+		
+		if playerBase == base:
+			# Already in the base. Bring it to its position
+			move(base,(positionToFill+1)%2)
+			
+		else:
+			while playerBase != base: # bring the player to the base next to its home
+				move (playerBase-1, positionToFill);
+				move (playerBase, findPlayerPos(playerBase, base));
+				if playerBase-1 != base:
+					move (playerBase-1, (positionToFill+1) %2);
+				playerBase -= 1
+
+def findPlayerBase(start, color):
+	for playerBase in range(start+1,getBasesAmount()):
+		for pos in range(getPositionsAmount()):
+			if getPlayerColor(playerBase, pos) == color:
+				return playerBase;
+	raise Exception("cannot find any player of color "+color+" starting at base "+start);
+
+def findPlayerPos(base, color):
+	for pos in range(getPositionsAmount()):
+		if getPlayerColor(base, pos) == color:
+			return pos;
+	raise Exception("cannot find any player of color "+color+" within base "+base);
+
+for base in range(getBasesAmount() -1): 
+	bringPlayersHome(base);
+
+# END SOLUTION	
\ No newline at end of file
diff --git a/src/lessons/sort/baseball/icon.png b/src/lessons/sort/baseball/icon.png
new file mode 100644
index 0000000..891acc6
Binary files /dev/null and b/src/lessons/sort/baseball/icon.png differ
diff --git a/src/lessons/sort/baseball/short_desc.fr.html b/src/lessons/sort/baseball/short_desc.fr.html
new file mode 100644
index 0000000..4738873
--- /dev/null
+++ b/src/lessons/sort/baseball/short_desc.fr.html
@@ -0,0 +1,4 @@
+<h3>Baseball multicolore</h3>
+
+<p>Il s'agit d'un autre problème amusant autour des algorithmes de tri,
+adaptant les principaux algorithmes de tri à un contexte inhabituel.</p>
diff --git a/src/lessons/sort/baseball/short_desc.html b/src/lessons/sort/baseball/short_desc.html
new file mode 100644
index 0000000..d0bd3e2
--- /dev/null
+++ b/src/lessons/sort/baseball/short_desc.html
@@ -0,0 +1,3 @@
+<h3>Rainbow baseball</h3>
+
+<p>This is another funny variation on the sorting problem, adapting the main sorting algorithms on an unusual context.</p>
diff --git a/src/lessons/sort/baseball/universe/BaseballEntity.java b/src/lessons/sort/baseball/universe/BaseballEntity.java
new file mode 100644
index 0000000..16c9c5c
--- /dev/null
+++ b/src/lessons/sort/baseball/universe/BaseballEntity.java
@@ -0,0 +1,75 @@
+package lessons.sort.baseball.universe;
+
+import jlm.universe.Entity;
+import jlm.universe.World;
+
+public class BaseballEntity extends Entity {
+	public BaseballEntity() {
+		super("Baseball Entity");
+	}
+
+	public BaseballEntity(String name) {
+		super(name);
+	}
+
+	public BaseballEntity(String name, World world) {
+		super(name,world);
+	}
+
+	@Override
+	public Entity copy() {
+		return new BaseballEntity(this.name);
+	}
+
+	/** Returns the amount of bases on your field */
+	public int getBasesAmount() {
+		return ((BaseballWorld) this.world).getBasesAmount();
+	}
+	/** Returns the amount of players locations available on each base of the field */
+	public int getPositionsAmount() {
+		return ((BaseballWorld) this.world).getPositionsAmount();
+	}
+
+	/** Returns the color of the player at the specified coordinate */
+	public int getPlayerColor(int base, int position) {
+		return ((BaseballWorld) this.world).getPlayerColor(base,position);
+	}
+	/** Returns whether every players of the specified base are at home */
+	public boolean isBaseSorted(int base) {
+		return ((BaseballWorld) this.world).isBaseSorted(base);
+	}
+	/** Returns if every player of the field is on the right base */
+	public boolean isSorted() {
+		return ((BaseballWorld) this.world).isSorted();
+	}
+
+	/** Returns the base in which the hole is located */
+	public int getHoleBase() {
+		return ((BaseballWorld) this.world).getHoleBase();
+	}
+	/** Returns the hole position within its base */
+	public int getHolePosition(){
+		return ((BaseballWorld) this.world).getHolePosition();
+	}
+
+
+
+	/**
+	 * Moves the specified player to the hole
+	 * @throws IllegalArgumentException if the specified player is not near the hole (at most one base away) 
+	 */
+	public void move(int base, int position) {
+		((BaseballWorld) this.world).move(base,position);
+		stepUI();
+	}
+
+	/** Must exist so that exercises can instantiate the entity (Entity is abstract) */ 
+	@Override
+	public void run() {
+	}
+
+	/** Returns a string representation of the world */
+	public String toString(){
+		return "BaseballEntity (" + this.getClass().getName() + ")";
+	}
+}
diff --git a/src/lessons/sort/baseball/universe/BaseballMove.java b/src/lessons/sort/baseball/universe/BaseballMove.java
new file mode 100644
index 0000000..7adb2c5
--- /dev/null
+++ b/src/lessons/sort/baseball/universe/BaseballMove.java
@@ -0,0 +1,48 @@
+package lessons.sort.baseball.universe;
+
+public class BaseballMove {
+
+	private int baseSrc;
+	private int playerSrc;
+	private int baseDst;
+	private int playerDst;
+	private int playerColor;
+	private BaseballWorld field;
+
+	public BaseballMove(int baseSrc, int playerSrc, int baseDst, int playerDst, int playerColor, BaseballWorld field){
+		this.baseSrc = baseSrc;
+		this.playerSrc = playerSrc;
+		this.baseDst = baseDst;
+		this.playerDst = playerDst;
+		this.playerColor = playerColor;
+		this.field = field;
+	}
+
+	public int getBaseDst() {
+		return baseDst;
+	}
+	public int getBaseSrc() {
+		return baseSrc;
+	}
+	public int getPlayerDst() {
+		return playerDst;
+	}
+	public int getPlayerSrc() {
+		return playerSrc;
+	}
+	public int getPlayerColor() {
+		return playerColor;
+	}
+	
+	public int[] run(int[] init) {
+		int idxSrc = field.getPositionsAmount()*baseSrc+ playerSrc;
+		int idxDst = field.getPositionsAmount()*baseDst+ playerDst;
+		int src = init[idxSrc];
+		int dest = init[idxDst];
+		init[idxSrc] = dest;
+		init[idxDst] = src;
+		
+		return init;
+	}
+
+}
diff --git a/src/lessons/sort/baseball/universe/BaseballMovePanel.java b/src/lessons/sort/baseball/universe/BaseballMovePanel.java
new file mode 100644
index 0000000..90c42ad
--- /dev/null
+++ b/src/lessons/sort/baseball/universe/BaseballMovePanel.java
@@ -0,0 +1,99 @@
+package lessons.sort.baseball.universe;
+
+import java.awt.Component;
+import java.awt.GridLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JOptionPane;
+import javax.swing.JPanel;
+
+import jlm.core.model.Game;
+import jlm.universe.EntityControlPanel;
+
+/**
+ * The control panel for the baseball world. 
+ * It allows to move the players interactively
+ */
+public class BaseballMovePanel extends EntityControlPanel {
+
+	private static final long serialVersionUID = 1L;
+	private JButton validateButton;	// a validate button
+	private JComboBox baseSelector;	
+	private JComboBox playerSelector;	
+	private BaseballWorld field;
+
+	public BaseballMovePanel() {
+		super();
+		field = (BaseballWorld) Game.getInstance().getSelectedEntity().getWorld() ;
+		setLayout(new GridLayout(2,1));
+		add(createMovePanel());
+	}
+	
+	/** Get the selection from elsewhere (eg, a click on the view */
+	public void setPlayer(int base, int pos) {
+		baseSelector.setSelectedIndex(base);
+		playerSelector.setSelectedIndex(pos);
+	}
+	/** Do the action as commanded from elsewhere (eg, a double click on the view) */
+	public void doMove() {
+		validateButton.doClick();
+	}
+
+	/** Creates the command panel of the BaseballMovePanel */
+	private Component createMovePanel() {
+		JPanel movePanel = new JPanel();
+
+		movePanel.add(new JLabel("move"));
+
+		/* Create the base selector */
+		Integer[] values = new Integer[field.getBasesAmount()];
+		for (int i = 0 ; i < field.getBasesAmount() ; i++)
+			values[i] = i;		
+		baseSelector = new JComboBox(values);
+
+		/* Create the position selector */
+		values = new Integer[field.getPositionsAmount()];
+		for (int i = 0 ; i < field.getPositionsAmount() ; i++)
+			values[i] = i;
+		playerSelector = new JComboBox(values);
+
+		/* Create the button */
+		validateButton = new JButton(i18n.tr("Go"));
+		validateButton.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent evt) {
+				BaseballEntity be = (BaseballEntity) Game.getInstance().getSelectedEntity();
+				int base = baseSelector.getSelectedIndex();
+				int player = playerSelector.getSelectedIndex();
+				try  {
+					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),
+							i18n.tr("Invalid move"),JOptionPane.ERROR_MESSAGE);
+				}
+			}
+		});
+
+		/* Do the layout and return the result */
+		movePanel.add(baseSelector);
+		movePanel.add(playerSelector);
+		movePanel.add(validateButton);
+
+		return movePanel;
+	}
+
+	/**
+	 * Enables or disables each component of the control panel
+	 * @param enabled whether the components shall be enabled or not
+	 */
+	@Override
+	public void setEnabledControl(boolean enabled) {
+		validateButton.setEnabled(enabled);
+		baseSelector.setEnabled(enabled);
+		playerSelector.setEnabled(enabled);
+	}
+}
diff --git a/src/lessons/sort/baseball/universe/BaseballWorld.fr.html b/src/lessons/sort/baseball/universe/BaseballWorld.fr.html
new file mode 100644
index 0000000..4001a1f
--- /dev/null
+++ b/src/lessons/sort/baseball/universe/BaseballWorld.fr.html
@@ -0,0 +1,50 @@
+<h1>Baseball multicolore</h1>
+<p>Les couleurs sont représentées comme des entiers, entre <code>0</code> et
+<code>nombre de bases - 1</code>. Le trou est représenté par la valeur
+spéciale <code>-1</code>. La couleur de chaque base est son rang, ce qui
+fait que la base <code>1</code> est de couleur <code>1</code>. Dans
+l'interface graphique, la base <code>0</code> est la bleue foncée tandis que
+la base <code>1</code> est celle fuscia.</p>
+
+<p>Une fois que tous les joueurs du terrain sont chez eux, le trou se trouve
+dans la dernière base, celle de rang <code>getAmountOfBases()-1</code>.</p>
+
+<h2>Fonctions pour découvrir les dimensions du monde</h2>
+
+<pre class="Java">int getBasesAmount()</pre>
+<pre class="python">getBasesAmount()</pre>
+Retourne le nombre de bases dans le terrain.
+
+<pre class="Java">int getPositionsAmount()</pre>
+<pre class="python">getPositionsAmount()</pre>
+Retourne le nombre de positions disponibles par base.
+
+<h2>Fonctions pour découvrir l'état du monde</h2>
+
+<pre class="Java">int getHoleBase()</pre>
+<pre class="python">getHoleBase()</pre>
+Retourne l'index de la base où se trouve le trou.
+
+<pre class="Java"> int getHolePosition()</pre>
+<pre class="python">getHolePosition()</pre>
+Retourne la position du trou dans sa base.
+
+<pre class="Java"> int getPlayerColor(int base, int position)</pre>
+<pre class="python">getPlayerColor(base, position)</pre>
+Retourne la couleur d'un joueur donné à partir de sa position.
+
+<pre class="Java">boolean isSorted()</pre>
+<pre class="python">isSorted()</pre>  
+Retourne si tous les joueurs présents sur le terrain sont chez eux.
+     
+<pre class="Java">boolean isBaseSorted(int base)</pre>
+<pre class="python">isBaseSorted(base)</pre>
+Retourne si tous les joueurs d'une base donnée sont chez eux.
+
+<h2>Fonctions pour changer le monde</h2>
+
+<pre class="Java">void move(int base, int position)</pre>
+<pre class="python">move(base, position)</pre>
+Déplace un joueur dans le trou. Une exception IllegalArgumentException est
+levée si le joueur indiqué n'est pas suffisamment près du trou. Il peut être
+au plus à une base du trou.
diff --git a/src/lessons/sort/baseball/universe/BaseballWorld.html b/src/lessons/sort/baseball/universe/BaseballWorld.html
new file mode 100644
index 0000000..953eda9
--- /dev/null
+++ b/src/lessons/sort/baseball/universe/BaseballWorld.html
@@ -0,0 +1,46 @@
+<h1>Rainbow Baseball</h1>
+<p>The colors are represented by integers, between <code>0</code> and <code>amount of bases -1</code>. 
+The hole is represented by the special value <code>-1</code>. 
+The color of each base is its rank. So base <code>1</code> is of color <code>1</code>. 
+In the graphical interface, the base <code>0</code> is the dark blue
+one while the base <code>1</code> is the fuscia one.</p>
+
+<p>Once every players on the field are in their home base, the hole should be in the last base, that is of rank <code>getAmountOfBases()-1</code>.</p>
+
+<h2>Functions to retrieve the world's dimensions</h2>
+
+<pre class="Java">int getBasesAmount()</pre>
+<pre class="python">getBasesAmount()</pre>
+Returns the amount of bases on this field.
+
+<pre class="Java">int getPositionsAmount()</pre>
+<pre class="python">getPositionsAmount()</pre>
+Returns the amount of player's positions per base on this field:
+
+<h2>Functions to retrieve the world's state</h2>
+
+<pre class="Java">int getHoleBase()</pre>
+<pre class="python">getHoleBase()</pre>
+Returns the base in which the hole is located.
+
+<pre class="Java"> int getHolePosition()</pre>
+<pre class="python">getHolePosition()</pre>
+Returns the hole position within its base
+
+<pre class="Java"> int getPlayerColor(int base, int position)</pre>
+<pre class="python">getPlayerColor(base, position)</pre>
+Returns the color of the player at a given location.
+
+<pre class="Java">boolean isSorted()</pre>
+<pre class="python">isSorted()</pre>  
+Returns whether all players of the field are at home.
+     
+<pre class="Java">boolean isBaseSorted(int base)</pre>
+<pre class="python">isBaseSorted(base)</pre>
+Returns whether all players of a given base are at home.
+
+<h2>Functions to change the world</h2>
+
+<pre class="Java">void move(int base, int position)</pre>
+<pre class="python">move(base, position)</pre>
+Moves a given player into the hole. This throws an IllegalArgumentException if the specified player is not near the hole (at most one base away).
diff --git a/src/lessons/sort/baseball/universe/BaseballWorld.java b/src/lessons/sort/baseball/universe/BaseballWorld.java
new file mode 100644
index 0000000..d89c9ef
--- /dev/null
+++ b/src/lessons/sort/baseball/universe/BaseballWorld.java
@@ -0,0 +1,424 @@
+package lessons.sort.baseball.universe;
+
+import java.util.Vector;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+import javax.swing.ImageIcon;
+
+import jlm.core.model.Game;
+import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
+import jlm.core.ui.WorldView;
+import jlm.core.utils.FileUtils;
+import jlm.universe.EntityControlPanel;
+import jlm.universe.World;
+
+import org.xnap.commons.i18n.I18n;
+import org.xnap.commons.i18n.I18nFactory;
+
+public class BaseballWorld extends World {
+	public static final int MIX_SORTED = 0;
+	public static final int MIX_RANDOM = 1;
+	public static final int MIX_NOBODY_HOME = 2;
+	public static final int MIX_ALMOST_SORTED = 3;
+	
+	
+	public static final int COLOR_HOLE = -1;
+
+	private int[] field; // the bases which composed the field
+	private int baseAmount,posAmount; // field dimensions
+	private int holeBase,holePos; // The coordinate of the hole
+	protected int[] initialField; 
+	private Vector<BaseballMove> moves = new Vector<BaseballMove>(); // all moves made on the field -- used for graphical purpose only
+	private I18n i18n;
+
+	/** Copy constructor used internally by JLM */
+	public BaseballWorld(BaseballWorld other) {
+		super(other);
+		i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",FileUtils.getLocale(), I18nFactory.FALLBACK);
+		initialField = new int[other.initialField.length];
+		for (int i=0;i<initialField.length;i++)
+			initialField[i] = other.initialField[i];
+	}
+
+
+	/** Regular constructor used by exercises */
+	public BaseballWorld(String name, int baseAmount, int positionAmount) {
+		this(name,baseAmount,positionAmount,MIX_RANDOM);
+	}
+
+	public BaseballWorld(String name, int baseAmount, int posAmount, int mix) {
+		super(name);
+		i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages",FileUtils.getLocale(), I18nFactory.FALLBACK);
+
+		// create the bases
+		this.baseAmount = baseAmount;
+		this.posAmount = posAmount;
+		
+		this.field = new int[baseAmount*posAmount];
+		for (int base = 0 ; base < baseAmount ; base++)
+			for (int pos = 0; pos < posAmount; pos++)
+				setPlayerColor(base, pos, base);
+		setPlayerColor(baseAmount-1, 0, COLOR_HOLE);
+				
+		if (mix == MIX_RANDOM) {
+			for (int base = 0 ; base<getBasesAmount();base++)
+				for (int pos = 0 ; pos<getPositionsAmount();pos++)
+					swap(base, pos, (int) (Math.random()*getBasesAmount()), (int) (Math.random()*getPositionsAmount()));
+		
+		} else if (mix == MIX_NOBODY_HOME) {
+			// Ensure that nobody's home once it's mixed. 
+			//   We tested that no situation of 4 bases with that condition exposes the bug of the naive algorithm
+			//   We tested it by generating all situations, actually.
+			boolean swapped;
+			do {
+				swapped = false;
+				for (int base = 0 ; base<getBasesAmount();base++)
+					for (int pos = 0 ; pos<getPositionsAmount();pos++)
+						if (getPlayerColor(base, pos) == base) {
+							swapped = true;
+							int newBase;
+							do {
+								newBase = (int) (Math.random()*getBasesAmount());
+							} while (newBase == base);
+							int newPos = (int) (Math.random()*getPositionsAmount());
+							swap(base, pos, newBase, newPos);							
+						}
+			} while (swapped);
+		} else if (mix == MIX_SORTED) {
+			/* nothing to do here */
+		} else if (mix == MIX_ALMOST_SORTED) {
+			/* Expose the bug of the naive algorithm */
+			swap(0,0,  2,0);
+		} else {
+			throw new IllegalArgumentException("The mix paramter must be one of the provided constants, not "+mix);
+		}
+
+		initialField = new int[field.length];
+		for (int i=0;i<field.length;i++)
+			initialField[i] = field[i];
+		
+		// Add an entity
+		new BaseballEntity("Baseball Player",this);
+		
+		// Cache the hole position 
+		for ( int base = 0 ; base < getBasesAmount(); base++)
+			for ( int pos = 0 ; pos < getPositionsAmount(); pos++)
+				if ( getPlayerColor(base,pos)== COLOR_HOLE) {
+					holeBase = base;
+					holePos = pos;
+					return;
+				}
+		
+	}
+
+
+	public BaseballWorld(String name, int baseAmount, int positionAmount, int[] values) {
+		this(name, baseAmount, positionAmount, MIX_SORTED);
+		if (baseAmount*posAmount != values.length)
+			throw new RuntimeException("Your values array is not of the right size");
+		field = values;
+		
+		initialField = new int[field.length];
+		for (int i=0;i<field.length;i++)
+			initialField[i] = field[i];
+		
+		// Cache again the hole position 
+		for ( int base = 0 ; base < getBasesAmount(); base++)
+			for ( int pos = 0 ; pos < getPositionsAmount(); pos++)
+				if ( getPlayerColor(base,pos)== COLOR_HOLE) {
+					holeBase = base;
+					holePos = pos;
+					return;
+				}
+		
+	}
+
+
+	/**
+	 * Returns a textual description of the differences between the caller and world
+	 * @param o the world with which you want to compare your world
+	 */
+	public String diffTo(World o) {
+		if (o == null || !(o instanceof BaseballWorld))
+			return i18n.tr("This is not a baseball world :-(");
+
+		BaseballWorld other = (BaseballWorld) o;
+		if (getBasesAmount() != other.getBasesAmount())
+			return i18n.tr("Differing amount of bases: {0} vs {1}",getBasesAmount(),other.getBasesAmount());
+
+		if (getPositionsAmount() != ((BaseballWorld) o).getPositionsAmount())
+			return i18n.tr("Differing amount of players: {0} vs {1}", getPositionsAmount(), other.getPositionsAmount());
+
+		StringBuffer sb = new StringBuffer();
+		for (int base = 0; base< baseAmount; base++)
+			for (int pos=0; pos<posAmount; pos++)
+				if (getPlayerColor(base, pos) != other.getPlayerColor(base, pos))
+					sb.append(i18n.tr("Player at base {0}, pos {1} differs: {2} vs {3}\n",base,pos,getPlayerColor(base, pos), other.getPlayerColor(base, pos)));
+
+		return sb.toString();
+	}
+
+	public boolean equals(Object other) {
+		if (other == null || !(other instanceof BaseballWorld))
+			return false;
+
+		BaseballWorld otherField = (BaseballWorld) other;
+		if (   this.holeBase != otherField.holeBase
+				|| this.holePos != otherField.holePos
+				|| this.getBasesAmount() != otherField.getBasesAmount()
+				|| this.getPositionsAmount() != otherField.getPositionsAmount())
+
+			return false;
+
+		for (int base = 0; base< baseAmount; base++)
+			for (int pos=0; pos<posAmount; pos++)
+				if (getPlayerColor(base, pos) != otherField.getPlayerColor(base, pos))
+					return false;
+
+		return true;
+	}
+
+	/** Ensures that the provided script engine can run scripts in the specified programming language 
+	 * @throws ScriptException */
+	@Override
+	public void setupBindings(ProgrammingLanguage lang, ScriptEngine engine) throws ScriptException {
+		if (lang.equals(Game.PYTHON)) {
+			engine.eval(
+					"def getBasesAmount():\n" +
+					"  return entity.getBasesAmount()\n" +
+					"def getPositionsAmount():\n" +
+					"  return entity.getPositionsAmount()\n" +
+					"def getHoleBase():\n" +
+					"  return entity.getHoleBase()\n" +
+					"def getHolePosition():\n" +
+					"  return entity.getHolePosition()\n" +
+					"def isSorted():\n" +
+					"  return entity.isSorted()\n" +
+					"def isBaseSorted():\n" +
+					"  return entity.isBaseSorted()\n" +
+					"def getPlayerColor(base,pos):\n" +
+					"  return entity.getPlayerColor(base,pos)\n" +
+					"def move(base,pos):\n" +
+					"  entity.move(base,pos)\n" +
+					""
+					);
+		} else {
+			throw new RuntimeException("No binding of BaseballWorld for "+lang);
+		}
+	}
+
+	/** Returns the icon of the world */
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_baseball.png");
+	}
+	/** Returns a component able to display the world */
+	@Override
+	public WorldView getView() {
+		return new BaseballWorldView(this);
+	}
+	BaseballMovePanel panel = null; 
+	/** Returns a panel allowing to interact dynamically with the world */
+	@Override
+	public EntityControlPanel getEntityControlPanel() {
+		if (panel == null)
+			panel = new BaseballMovePanel();
+		return panel;
+	}
+	/** Passes the mouse selection from view to the control panel */ 
+	public void setPlayer(int base, int pos) {
+		panel.setPlayer(base, pos);
+	}
+	/** Passes the mouse action from the view to the control panel */
+	public void doMove() {
+		panel.doMove();
+	}
+
+	/** 
+	 * Reset the state of the current world to the one passed in argument
+	 * @param the world which must be the new start of your current world
+	 */
+	public void reset(World world) {
+		super.reset(world);		
+
+		BaseballWorld other = (BaseballWorld) world;
+		
+		moves = new Vector<BaseballMove>();
+		for (BaseballMove m : other.moves)
+			moves.add(m);
+		
+		holeBase = other.holeBase;
+		holePos = other.holePos;
+
+		baseAmount = other.baseAmount;
+		posAmount = other.posAmount;
+		field= new int[other.baseAmount*other.posAmount];
+		for (int base=0; base<baseAmount; base++)
+			for (int pos=0; pos<posAmount; pos++)
+				setPlayerColor(base, pos, other.getPlayerColor(base, pos));
+	}
+
+	/** Returns a string representation of the world */
+	public String toString() {
+		StringBuffer sb = new StringBuffer();
+		sb.append("BaseballWorld "+getName()+": {");
+
+		for (int base = 0 ; base < baseAmount ; base++) {
+			if (base!=0)
+				sb.append(" , ");
+			for (int pos = 0 ; pos < posAmount ; pos++) {
+				if (pos!=0)
+					sb.append(",");
+				sb.append(getPlayerColor(base,pos));
+			}
+		}
+		sb.append("}");
+		return sb.toString();
+	}
+
+	/** Returns the number of bases on your field */
+	public int getBasesAmount() {
+		return baseAmount;
+	}
+	/** Returns the amount of players per base on this field */
+	public int getPositionsAmount() {
+		return posAmount;
+	}
+
+	/**
+	 * Returns the color of the player in base baseIndex at position playerLocation
+	 * @param base the index of the base we are looking for
+	 * @param pos  the position within that base (between 0 and getLocationsAmount()-1 )
+	 */
+	public int getPlayerColor(int base, int pos)  {
+		return field[base*posAmount+pos];
+	}
+	/**
+	 * Sets the color of the player in the specified base at the specified position to the specified value 
+	 * @param base the index of the base we are looking for
+	 * @param pos  the position within that base (between 0 and getLocationsAmount()-1 )
+	 * @param color the new value
+	 */
+	public void setPlayerColor(int base, int pos, int color)  {
+		field[base*posAmount+pos] = color;
+	}
+
+	/** Returns the index of the base where is hole is located */
+	public int getHoleBase() {
+		return this.holeBase;
+	}
+
+	/** Returns the position in the base where is hole is located */
+	public int getHolePosition(){
+		return this.holePos;
+	}
+
+	/** Returns the last move made on the field */
+	protected BaseballMove getLastMove() {
+		if (moves.size() == 0)
+			return null;
+		return moves.get(moves.size()-1);
+	}
+	/** Returns the amount of moves done so far */
+	protected int getMoveCount() {
+		return moves.size();
+	}
+	/** Returns all moves done so far */
+	protected Vector<BaseballMove> getMoves() {
+		return moves;
+	}
+
+	/** Checks that the world is sorted, and display an helpful error message if not */
+	public void assertSorted(String exercise) {
+		if (isSorted())
+			return;
+		
+		StringBuffer sb = new StringBuffer("{");
+
+		for (int base = 0 ; base < baseAmount ; base++) {
+			if (base!=0)
+				sb.append(" , ");
+			for (int pos = 0 ; pos < posAmount ; pos++) {
+				if (pos!=0)
+					sb.append(",");
+				sb.append(initialField[base*getPositionsAmount()+ pos]);
+			}
+		}
+		sb.append("}");
+
+		String msg =Game.i18n.tr("It''s still not sorted!! PLEASE REPORT THIS BUG, along with the following information:\n" +
+				"Exercise: {0}; Amount of bases: {1}; Initial situation: {2}", exercise, getBasesAmount(),sb.toString());
+		System.err.println(msg);
+		throw new RuntimeException(msg);
+
+	}
+	/** Returns if every player of the field is on the right base */
+	public boolean isSorted() {
+		for (int base=0; base<baseAmount; base++)
+			for (int pos=0; pos<posAmount; pos++)
+				if (base==baseAmount-1) {// last base, may contain the hole
+					if (   getPlayerColor(base, pos) != COLOR_HOLE 
+					    && getPlayerColor(base, pos) != base)
+						return false;
+				} else if (getPlayerColor(base, pos) != base)
+					return false;
+		return true;
+	}
+	/** Returns if every player of the specified base is on the right base */
+	public boolean isBaseSorted(int base) {
+		for (int pos=0;pos<posAmount;pos++)
+			if (base==baseAmount-1) // last base, may contain the hole
+				if (   getPlayerColor(base, pos) != COLOR_HOLE 
+				    && getPlayerColor(base, pos) != base)
+					return false;
+			else if (getPlayerColor(base, pos) != base)
+				return false;
+		
+		return true;
+	}
+
+	/**
+	 * Moves the specified player into the hole
+	 * @throws IllegalArgumentException in case baseSrc is not near the hole
+	 */
+	public void move(int base, int position) {
+		if ( base >= this.getBasesAmount() || base < 0)
+			throw new IllegalArgumentException(i18n.tr("Cannot move from base {0} since it''s not between 0 and {1}",base,(getBasesAmount()-1)));
+
+		if ( position < 0 || position > this.getPositionsAmount()-1 )
+			throw new IllegalArgumentException(i18n.tr("Cannot move from position {0} since it''s not between 0 and {1})",position,(getPositionsAmount()-1)));
+
+		// must work only if the bases are next to each other
+		if (	(holeBase != base+1)
+			 && (holeBase != base-1)
+			 && (holeBase != 0                  || base != getBasesAmount()-1 )
+			 && (holeBase != getBasesAmount()-1 || base != 0 )
+			 && (holeBase != base ) )
+			
+			throw new IllegalArgumentException(i18n.tr("The player {0} from base {1} is too far from the hole (at base {2}) to reach it in one move",
+					position,base,holeBase));
+
+		// All clear. Proceed.
+		moves.add(new BaseballMove(base, position, holeBase, holePos, getPlayerColor(base, position),this));
+		swap(base, position, holeBase,holePos);
+		holeBase = base;
+		holePos = position;
+	}
+
+
+	/**
+	 * Swap two players (no validity check is enforced)
+	 * @param baseSrc : the index of the source base
+	 * @param posSrc : the position of the player that you want to move from the source base
+	 * @param baseDst : the index of the destination base
+	 * @param posDst : the position of the player that you want to move from the destination base
+	 */
+	private void swap(int baseSrc, int posSrc, int baseDst, int posDst) {
+		int flyingMan = getPlayerColor(baseSrc,posSrc);
+
+		setPlayerColor(baseSrc, posSrc,   getPlayerColor(baseDst,posDst));
+		setPlayerColor(baseDst, posDst,   flyingMan);
+	}
+}
diff --git a/src/lessons/sort/baseball/universe/BaseballWorldView.java b/src/lessons/sort/baseball/universe/BaseballWorldView.java
new file mode 100644
index 0000000..0ec2702
--- /dev/null
+++ b/src/lessons/sort/baseball/universe/BaseballWorldView.java
@@ -0,0 +1,663 @@
+package lessons.sort.baseball.universe;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Image;
+import java.awt.RenderingHints;
+import java.awt.Stroke;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.QuadCurve2D;
+import java.awt.geom.Rectangle2D;
+import java.awt.image.BufferedImage;
+import java.util.HashMap;
+import java.util.Locale;
+import java.util.Map;
+import java.util.Vector;
+
+import javax.swing.JMenuItem;
+import javax.swing.JPopupMenu;
+
+import jlm.core.HumanLangChangesListener;
+import jlm.core.model.Game;
+import jlm.core.ui.WorldView;
+import jlm.universe.World;
+
+import org.xnap.commons.i18n.I18n;
+import org.xnap.commons.i18n.I18nFactory;
+
+public class BaseballWorldView extends WorldView {
+	
+	private static final long serialVersionUID = 1L;
+	private Vector<Integer[]> playersCoordinate;
+	private double radius;
+	private double displayRatio;
+	private double virtualSize = 300.; // we display on a field that is 300x300 and dynamically resized (to ease our computations)
+	
+	private boolean useCircularView = true; // historical view if false
+	private JPopupMenu popup = new JPopupMenu();
+
+	public BaseballWorldView(World w){
+		super(w);
+		
+		JMenuItem menuItem;
+
+		//Create the popup menu allowing to switch between views
+		menuItem = new JMenuItem("Switch to time view");
+		menuItem.addActionListener(new BaseballViewActionListener(menuItem,this));
+		popup.add(menuItem);
+
+		
+		addMouseListener(new MouseListener() {
+			private void maybeShowPopup(MouseEvent e) {
+				if (e.isPopupTrigger()) {
+					popup.show(e.getComponent(),
+							e.getX(), e.getY());
+				}
+			}
+			@Override
+			public void mouseReleased(MouseEvent e) {
+				maybeShowPopup(e);
+			}
+			@Override
+			public void mousePressed(MouseEvent e) {
+				maybeShowPopup(e);
+			}
+			@Override
+			public void mouseExited(MouseEvent e) {}
+			@Override
+			public void mouseEntered(MouseEvent e) {}
+			
+			@Override
+			public void mouseClicked(MouseEvent e) {
+				if (e.isPopupTrigger()) {
+					maybeShowPopup(e);
+					return;
+				}
+				
+				if (useCircularView) {
+					/* Recompute the coordinates of the click on our strange virtual coordinates system */
+					int x=e.getX()-(int)(Math.abs(getWidth() - displayRatio * virtualSize)/2.);
+					int y=e.getY()-(int)(Math.abs(getHeight() - displayRatio * virtualSize)/2.);
+
+					x /= displayRatio;
+					y /= displayRatio;
+
+					double minDist = Double.MAX_VALUE;
+					Integer[] min = null;
+					for (Integer[] c : playersCoordinate) {
+						int xComponent = x-c[0];
+						int yComponent = y-c[1];
+						double dist = Math.sqrt( xComponent*xComponent+yComponent*yComponent ); 
+						if (dist < minDist) {
+							minDist = dist;
+							min = c;
+						}
+					}
+
+					if (minDist < 2*radius) {
+						//System.out.println("Minimal distance: "+minDist+" (radius was: "+radius+"). That's "+min[2]+","+min[3]);
+						((BaseballWorld) world).setPlayer(min[2],min[3]);
+						if (e.getClickCount()==2)
+							((BaseballWorld) world).doMove();
+					}
+				}
+			}
+		});
+	}
+
+	/**
+	 * Draws an arrow on the given Graphics2D context
+	 * ( adapted from http://www.bytemycode.com/snippets/snippet/82/ )
+	 * @param g The Graphics2D context to draw on
+	 * @param xTail The x location of the "tail" of the arrow
+	 * @param yTail The y location of the "tail" of the arrow
+	 * @param xHead The x location of the "head" of the arrow
+	 * @param yHead The y location of the "head" of the arrow
+	 */
+	private void drawArrow( Graphics2D g, int xTail, int yTail, int xHead, int yHead) {
+		float arrowWidth = 12.0f ;
+		float theta = 0.6f ;
+		int[] xPoints = new int[ 3 ] ;
+		int[] yPoints = new int[ 3 ] ;
+		float[] vecLine = new float[] {(float)xHead - xTail, (float)yHead - yTail};
+		float[] vecLeft = new float[] {-vecLine[ 1 ],vecLine[ 0 ]} ; // arrow base vector - normal to the line
+		float fLength;
+		float th;
+		float ta;
+		float baseX, baseY ;
+
+		xPoints[ 0 ] = xHead ;
+		yPoints[ 0 ] = yHead ;
+
+		// setup length parameters
+		fLength = (float)Math.sqrt( vecLine[0] * vecLine[0] + vecLine[1] * vecLine[1] ) ;
+		th = arrowWidth / ( 2.0f * fLength ) ;
+		ta = arrowWidth / ( 2.0f * ( (float)Math.tan( theta ) / 2.0f ) * fLength ) ;
+
+		// find the base of the arrow
+		baseX = ( (float)xPoints[ 0 ] - ta * vecLine[0]);
+		baseY = ( (float)yPoints[ 0 ] - ta * vecLine[1]);
+
+		// build the points on the sides of the arrow
+		xPoints[ 1 ] = (int)( baseX + th * vecLeft[0] );
+		yPoints[ 1 ] = (int)( baseY + th * vecLeft[1] );
+		xPoints[ 2 ] = (int)( baseX - th * vecLeft[0] );
+		yPoints[ 2 ] = (int)( baseY - th * vecLeft[1] );
+
+		g.drawLine( xTail, yTail, (int)baseX, (int)baseY ) ;
+		g.fillPolygon( xPoints, yPoints, 3 ) ;
+	}
+
+	/**
+	 * Compute the corners of the base located at polar coordinates ( radius, theta ) and return an array 
+	 * which contains the coordinates of the corners of the base
+	 * @param L A coefficient which adapt the length of the arrow to the total amount of bases
+	 * @param radius the distance between the symmetry center of the rectangle and the point of Cartesian coordinates ( xCenter , yCenter )
+	 * @param theta the angle made between the x-axis of the Cartesian system of origin ( xCenter , yCenter ) and the symmetry center of the rectange
+	 * @param xCenter the x coordinate in the classic coordinate system in graphics of the origin of our Cartesian system
+	 * @param yCenter the y coordinate in the classic coordinate system in graphics of the origin of our Cartesian system
+	 * @return an array containing the coordinates of the four corners of the base
+	 */
+	private int[][] computeCorners(int L, int radius, double theta , int xCenter, int yCenter ) {
+		int[][] points = new int[4][2];
+		// Prevent some redundancies during the computing
+		double commonPart = L*Math.sin(theta);
+		double rightPart = (radius+L/2)*Math.cos(theta);
+		double leftPart = (radius-L/2)*Math.cos(theta) ;
+
+		points[0][0] = (int) (xCenter - commonPart + rightPart); // x coordinate of the upper-right point when theta = 0
+		points[1][0] = (int) (xCenter + commonPart + rightPart); // x coordinate of the lower-right point when theta = 0
+		points[2][0] = (int) (xCenter + commonPart + leftPart); // x coordinate of the lower-left point when theta = 0
+		points[3][0] = (int) (xCenter - commonPart + leftPart); // x coordinate of the upper-left point when theta = 0
+
+		commonPart = L*Math.cos(theta);
+		rightPart = -(radius+L/2)*Math.sin(theta);
+		leftPart = -(radius-L/2)*Math.sin(theta) ;
+
+		points[0][1] = (int) (yCenter - commonPart + rightPart); // y coordinate of the upper-right point when theta = 0
+		points[1][1] = (int) (yCenter + commonPart + rightPart); // y coordinate of the lower-right point when theta = 0
+		points[2][1] = (int) (yCenter + commonPart + leftPart); // y coordinate of the lower-left point when theta = 0
+		points[3][1] = (int) (yCenter - commonPart + leftPart); // y coordinate of the upper-left point when theta = 0
+
+		return points;
+	}
+
+	/**
+	 * Draw the base and the players
+	 * @param g The Graphics2D context to draw on
+	 * @param L A coefficient which adapt the length of the arrow to the total amount of bases
+	 * @param dist the distance between the symmetry center of the rectangle and the point of Cartesian coordinates ( xCenter , yCenter )
+	 * @param theta the angle made between the x-axis of the two-dimensional Cartesian system of origin ( xCenter , yCenter ) and the symmetry center of the rectangle
+	 * @param xCenter the x coordinate in the classic coordinate system in graphics of the origin of our Cartesian system
+	 * @param yCenter the y coordinate in the classic coordinate system in graphics of the origin of our Cartesian system
+	 * @param base the base that we want to draw
+	 * @param amountOfPlayers the total amount of players per base
+	 */
+	private void drawBase(Graphics2D g, int L, int dist, double theta, int xCenter, int yCenter, int base, int amountOfPlayers) {
+		BaseballWorld field = (BaseballWorld) world; 
+		int[][] points = computeCorners( L, dist, theta, xCenter, yCenter );
+
+		// draw the base
+		// will contains the x coordinates of the points
+		int[] xPoints = new int[4];
+		// will contains the y coordinates of the points 
+		int[] yPoints = new int[4];
+		// fill the arrays mentioned earlier
+		for (int i = 0 ; i < 4 ; i++) {
+			xPoints[i] = points[i][0];
+			yPoints[i] = points[i][1];
+		}
+		// draw the shape of the base
+		g.setColor(Color.BLACK);
+		g.drawPolygon(xPoints, yPoints, 4);
+		// fill this shape
+		g.setColor(obtainColor(base));
+		g.fillPolygon(xPoints, yPoints, 4);
+
+		// the radius of the disk representing the player. the graphically depicted is a bit smaller than the clickable
+		this.radius = (L/amountOfPlayers-1); // clickable
+		int radius = (int) (this.radius *.8);// graphically depicted
+
+
+		/* 
+		 * This array will contain the coordinates of the middle of the lower segment ( when theta = 0 ) of the base
+		 * 0 => x coordinate ; 1 => y coordinate
+		 */
+		int[] middleLower = new int[2];
+		/* 
+		 * This array will contain the coordinates of the middle of the upper segment ( when theta = 0 ) of the base
+		 * 0 => x coordinate ; 1 => y coordinate
+		 */
+		int[] middleUpper = new int[2];
+		// This array will contain the coordinates of the "step" between two disks -- 0 => x step ; 1 => y step
+		int[] delta = new int[2] ;
+
+		middleUpper[0] = ( points[1][0] + points[2][0] ) /2 ;
+		middleUpper[1] = ( points[1][1] + points[2][1] ) /2 ;
+		middleLower[0] = ( points[0][0] + points[3][0] ) /2 ;
+		middleLower[1] = ( points[0][1] + points[3][1] ) /2 ;
+
+		delta[0] = (middleUpper[0] - middleLower[0])/amountOfPlayers ;
+		delta[1] = (middleUpper[1] - middleLower[1])/amountOfPlayers ;
+
+		/*
+		 *  This array contains the coordinates of the center of the disk representing the player 
+		 *	0 => x coordinate ; 1 => y coordinate
+		 */
+		int centerPlayer[] = new int[2]; 
+		// color of the player
+		Color colorPlayer = null;
+		// Loop which computes the coordinates of the center of the disk, store it for the clicks and draws the resulting disk
+		for ( int pos = 0 ; pos < amountOfPlayers ; pos++) {
+			int player =  field.getPlayerColor(base,pos);
+			centerPlayer[0] = (int) (middleUpper[0] - (pos+.5)*delta[0]); 
+			centerPlayer[1] = (int) (middleUpper[1] - (pos+.5)*delta[1]);  
+
+			colorPlayer = obtainColor(player);	
+
+			playersCoordinate.add(new Integer[] { 
+				centerPlayer[0], centerPlayer[1],
+				base,pos
+			});
+			//System.out.println("center: "+centerPlayer[0]+","+centerPlayer[1]+" radius: "+this.radius+" player "+base+","+pos+" color:"+colorPlayer);
+			drawPlayer(g, centerPlayer, radius, colorPlayer, theta, base==player || player == -1);
+		}
+	}
+
+	/**
+	 * Draw a disk which represent the player
+	 * @param g The Graphics2D context to draw on
+	 * @param centerPlayerOne the center of the disk which will represent the player
+	 * @param color the color with which the disk shall be filled
+	 */
+	private void drawPlayer(Graphics2D g, int[] center, int radius, Color color, double theta, boolean isHome) {
+		g.setColor(Color.WHITE);
+		g.fillOval(center[0]-radius, center[1]-radius, radius*2, radius*2);
+		
+		if (!isHome) {
+			g.setColor(Color.RED);
+			Stroke s = g.getStroke();
+			g.setStroke(new BasicStroke(
+					2f,						// Width
+					BasicStroke.CAP_ROUND,		// End cap
+					BasicStroke.JOIN_BEVEL,		// Join style
+					10.0f,						// Miter limit
+					null,	// Dash pattern
+					0.0f						// Dash phase
+					));
+			g.drawOval(center[0]-radius, center[1]-radius, radius*2, radius*2);
+			g.setStroke(s);
+		} else {
+			g.setColor(Color.BLACK);
+			g.drawOval(center[0]-radius, center[1]-radius, radius*2, radius*2);
+		}
+		
+		if (!color.equals(Color.WHITE)) { // Don't draw a buggle on the hole
+			Image img = getBuggleImage(color);
+			AffineTransform t = new AffineTransform(1.0, 0, 0, 1.0, 
+					center[0]-radius, center[1]-radius);
+			double scale = 2*radius/((double)img.getWidth(null));
+			t.scale(scale,scale);
+			t.rotate(theta+Math.PI/2, img.getHeight(null)/2.,img.getHeight(null)/2.);
+			g.drawImage(img, t, null);
+		}
+	}
+
+	/** Returns the color corresponding to colorIndex */
+	private Color obtainColor(int colorIndex) {
+		Color[] colors = {
+				Color.WHITE, Color.BLUE, new Color(255,0,255), //Color.YELLOW, 
+				new Color(255,204,0), /* gold */
+				new Color(158,253,56), /* French lime */
+				new Color(255,56,0), /* Coquelicot */ 
+				new Color(204,204,255), /* Lavender blue */
+				new Color(0,103,165), /* Blue Persian */
+				new Color(201,0,22), /* Harvard crimson */
+				new Color(111,78,55), /* Coffee */
+				new Color(251,206,177), /* Apricot */
+				new Color(109,7,26), /* Bordeaux */
+				new Color(155,150,10),
+				new Color(75,0,130), 
+				new Color(150,85,120),
+				Color.GREEN
+		};
+		Color colorSent ;
+		if ( colorIndex < -1 || colorIndex > colors.length-1 ) {
+			System.out.println("Unexpected colorIndex : "+colorIndex+"\nYou should add some colors in BaseballWorldView.obtainColor");
+			colorSent = Color.MAGENTA;
+		} else {
+			colorSent = colors[colorIndex+1];
+		}
+		return colorSent;
+	}
+
+	/** Display the world under its circular form */
+	private void paintCircular(Graphics2D g) {
+
+		g.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+
+		displayRatio = Math.min(((double) getWidth()) / virtualSize, ((double) getHeight()) / virtualSize);
+
+
+		g.translate(Math.abs(getWidth() - displayRatio * virtualSize)/2., Math.abs(getHeight() - displayRatio * virtualSize)/2.);
+		g.scale(displayRatio, displayRatio);
+
+		/* drawn the field */
+		g.setColor(new Color(58,157,35)); // lawn
+		g.fill(new Rectangle2D.Double(0., 0., virtualSize, virtualSize));
+
+		int radius = 120 ;
+		
+		// draw the play area
+		g.setColor(Color.BLACK);
+		g.drawOval((int)virtualSize/2 - 150, (int)virtualSize/2-150, 300, 300);
+		g.setColor(new Color(174,74,52));
+		g.fillOval((int)virtualSize/2 - 150, (int)virtualSize/2-150, 300, 300);
+
+		
+		
+		BaseballWorld myWorld = (BaseballWorld) this.world ;
+		int amountOfBases = myWorld.getBasesAmount(); // amount of bases
+		double theta = 2*Math.PI / amountOfBases; // angle between center of symmetry of two bases
+		int amountOfPlayers = myWorld.getPositionsAmount(); // amount of players on a base
+		int L = Math.max(3*(20-amountOfBases),10); // adapting the size of the base to the total amount of bases
+		radius+=amountOfBases-5; // adapting the position of the base to the total amount of bases
+
+		// Draw the bases and the players on each base
+		playersCoordinate = new Vector<Integer[]>();
+		for ( int i=0 ; i < myWorld.getBasesAmount();i++)
+			drawBase(g, L, radius, theta*i, (int) virtualSize/2, (int) virtualSize/2 , i, amountOfPlayers);
+
+		// Draw the last move made on the field if it exists
+		if ( myWorld.getLastMove() != null) {
+			BaseballMove move = myWorld.getLastMove();
+			int r = radius-L/amountOfPlayers;
+			double xControl = virtualSize/2;
+			double yControl = virtualSize/2;
+			// Save the previous stroke -- we will need it later
+			Stroke s = g.getStroke();
+			// Set the color to the color of the player who moved
+			g.setColor(obtainColor(move.getPlayerColor()));
+			// Modifies the stroke so the drawing is a dotted line
+			g.setStroke(new BasicStroke(
+					3.0f,						// Width
+					BasicStroke.CAP_ROUND,		// End cap
+					BasicStroke.JOIN_BEVEL,		// Join style
+					10.0f,						// Miter limit
+					new float[] {5.0f,5.0f},	// Dash pattern
+					0.0f						// Dash phase
+					));
+			
+			/*
+			 * This array will contains the coordinates (x,y) of :
+			 * -> the beginning of the arrow ( index 0 )
+			 * -> the end of the tail of the arrow ( index 1 )
+			 * -> the end of the head of the arrow 
+			 */
+			int[][] arrow = new int[3][2];
+			// the step between two players of the same base
+			int[] delta = new int[2] ;
+			// The angle that will be used at each loop iteration
+			double[] thetaBase = { move.getBaseSrc() * theta, move.getBaseDst() * theta, move.getBaseDst() * theta };
+			// The radius that will be used at each loop iteration
+			int[] radius1 = { r , r-2*L/3, r-L/4};
+			// The players locations within its base
+			int[] players = { move.getPlayerSrc() , move.getPlayerDst() , move.getPlayerDst() } ;
+			// will contains the coordinates of the corners of the current base
+			int[][] points = new int[4][2];
+			// will contains the coordinates of the middle of the lower segment ( when theta = 0 ) of the current base 
+			int[] middleLower = new int[2];
+			// will contains the coordinates of the middle of the upper segment ( when theta = 0 ) of the current base 
+			int[] middleUpper = new int[2];
+			
+			for ( int i = 0 ; i < 3 ; i++) {
+				points = computeCorners(L, radius1[i], thetaBase[i] , (int)(xControl),(int) (yControl) );
+			
+				middleUpper[0] = ( points[1][0] + points[2][0] ) /2 ;
+				middleUpper[1] = ( points[1][1] + points[2][1] ) /2 ;
+				middleLower[0] = ( points[0][0] + points[3][0] ) /2 ;
+				middleLower[1] = ( points[0][1] + points[3][1] ) /2 ;
+			
+				delta[0] = (middleUpper[0] - middleLower[0])/amountOfPlayers ;
+				delta[1] = (middleUpper[1] - middleLower[1])/amountOfPlayers ;
+			
+				arrow[i][0]= (int) (middleUpper[0] - (players[i]+.5)*delta[0] ); 
+				arrow[i][1]= (int) (middleUpper[1] - (players[i]+.5)*delta[1]) ;  
+			}
+			
+			// Draw the tail of the arrow
+			g.draw(new QuadCurve2D.Double(arrow[0][0], arrow[0][1], xControl, yControl, arrow[1][0], arrow[1][1]));
+			g.setStroke(s);
+			// Draw the head of the arrow
+			drawArrow(g,arrow[1][0], arrow[1][1], arrow[2][0], arrow[2][1]);
+		}
+		
+		// Display the amount of moves done so far
+		g.setColor(Color.black);
+		g.drawString(""+((BaseballWorld) world).getMoveCount()+" moves", 0,15);
+	}
+
+	private Map<Color,Image> buggleCache = new HashMap<Color, Image>();
+	private Image getBuggleImage(Color c) {
+		if (buggleCache.containsKey(c))
+			return buggleCache.get(c);
+		
+		BufferedImage res = new BufferedImage(130, 130, BufferedImage.TYPE_INT_ARGB);
+		
+		Graphics2D g = res.createGraphics();
+		g.setColor(new Color(1, 1, 1, 0));
+		g.fillRect(0, 0, 130, 130);		
+		
+		int[][] SPRITE = {
+				{ 0,0,0,0,0,0,0,0,0,0,0,0,0 },
+				{ 0,0,0,0,0,0,0,0,0,0,0,0,0 },
+				{ 0,0,0,1,0,0,0,0,0,1,0,0,0 },
+				{ 0,0,0,0,1,0,0,0,1,0,0,0,0 },
+				{ 0,0,0,1,1,1,1,1,1,1,0,0,0 },
+				{ 0,0,1,1,0,1,1,1,0,1,1,0,0 },
+				{ 0,1,1,1,1,1,1,1,1,1,1,1,0 },
+				{ 0,1,0,1,1,1,1,1,1,1,0,1,0 },
+				{ 0,1,0,1,0,0,0,0,0,1,0,1,0 },
+				{ 0,0,0,0,1,1,0,1,1,0,0,0,0 },
+				{ 0,0,0,0,0,0,0,0,0,0,0,0,0 },
+				{ 0,0,0,0,0,0,0,0,0,0,0,0,0 },
+				{ 0,0,0,0,0,0,0,0,0,0,0,0,0 },
+			};
+		g.setColor(c);
+		for (int dy=0; dy<13; dy++) 
+			for (int dx=0; dx<13; dx++) 
+				if (SPRITE[dy][dx] == 1) 
+					g.fill(new Rectangle2D.Double(dx*10, dy*10, 10,10));
+
+		buggleCache.put(c, res);
+		return res;
+	}
+
+
+	private void paintHistory(Graphics2D g) {
+		BaseballWorld field = (BaseballWorld)world;
+		Vector<BaseballMove> moves = field.getMoves();
+		int operationsAmount = moves.size();	// little optimization
+		/* getWidth()-20 to keep the room to display the bases on left and right */
+		float stepX = ((float)getWidth()-20) / ((float)(Math.max(operationsAmount, 1)));
+		float stepY = ((float)getHeight()) / ((float)(field.getBasesAmount()* (field.getPositionsAmount()+1) ));
+		int x1, y1, x2, y2;
+
+		Stroke oldStroke = g.getStroke();
+		Stroke fatLine = new BasicStroke(2f);
+		Stroke dashedLine = new BasicStroke(
+				1.0f,						// Width
+				BasicStroke.CAP_ROUND,		// End cap
+				BasicStroke.JOIN_BEVEL,		// Join style
+				10.0f,						// Miter limit
+				new float[] {5.0f,5.0f},	// Dash pattern
+				0.0f						// Dash phase
+				);
+
+				// Draw the bases
+		for (int base=0; base<field.getBasesAmount(); base++) {
+			g.setColor(obtainColor(base));
+			g.fillRect(0, (int) (stepY*base*(field.getPositionsAmount()+1)), 10, (int) (stepY*field.getPositionsAmount()));
+			g.fillRect(getWidth()-10, (int) (stepY*base*(field.getPositionsAmount()+1)), 10, (int) (stepY*field.getPositionsAmount()));
+		}
+		
+		// Case without any operation to draw: initial view
+		if (operationsAmount == 0) {
+			g.setStroke(fatLine);
+
+			for (int base = 0; base<field.getBasesAmount(); base++)
+				for (int pos = 0; pos<field.getPositionsAmount(); pos++) {
+					int valueIdx = base*(field.getPositionsAmount()+1)+pos; 
+					y1 = (int) (valueIdx * stepY + stepY/2.);
+
+					
+					int player = field.getPlayerColor(base, pos);
+					if (player == -1) {
+						g.setStroke(dashedLine);
+						g.setColor(Color.black);
+						g.drawLine(10, y1, (int)stepX+10, y1);
+						g.setStroke(fatLine);
+					} else {
+						g.setColor(obtainColor(player));
+						g.drawLine(10, y1, (int)stepX+10, y1);
+					}
+				}
+			g.setStroke(oldStroke);
+			return;
+		}
+
+		// Case with several operations
+		int[] valuesAfter = new int[field.initialField.length];
+		int[] valuesBefore = new int[field.initialField.length];
+		for (int i = 0; i < field.initialField.length; i++) { 
+			valuesBefore[i] = field.initialField[i];
+			valuesAfter[i] = valuesBefore[i];
+		}
+
+		g.setStroke(fatLine);
+		for (int opIdx = 0; opIdx < operationsAmount; opIdx++) {
+			BaseballMove op = moves.get(opIdx);
+
+			valuesAfter = op.run(valuesAfter);
+			
+			x1 = (int) (opIdx * stepX)+10;
+			x2 = (int) (x1 + stepX);
+
+			/* Draw straight lines for unmodified values */
+			for (int base=0; base<field.getBasesAmount(); base++)
+				for (int pos=0; pos<field.getPositionsAmount(); pos++) 
+					if (   (op.getBaseSrc() != base || op.getPlayerSrc() != pos)
+						&& (op.getBaseDst() != base || op.getPlayerDst() != pos)) {
+						
+						int valIdx = base*(field.getPositionsAmount()+1)+pos; 
+						y1 = (int) (valIdx * stepY + stepY/2);
+						
+						int player = valuesAfter[base*field.getPositionsAmount()+pos];
+						if (player == -1) {
+							g.setStroke(dashedLine);
+							g.setColor(Color.black);
+							g.drawLine(x1, y1, x2, y1);
+							g.setStroke(fatLine);
+						} else {
+							g.setColor(obtainColor(player));
+							g.drawLine(x1, y1, x2, y1);
+						}
+					}
+			
+			/* Draw the crossing lines representing the move */
+			// draw player->hole
+			y1 = (int) ((op.getBaseSrc()* (field.getPositionsAmount()+1) + op.getPlayerSrc() ) * stepY + stepY/2);
+			y2 = (int) ((op.getBaseDst()* (field.getPositionsAmount()+1) + op.getPlayerDst() ) * stepY + stepY/2);
+			g.setColor(obtainColor(op.getPlayerColor()));
+			g.drawLine(x1, y1, x2, y2);
+
+			// draw hole->player
+			y1 = (int) ((op.getBaseDst()* (field.getPositionsAmount()+1) + op.getPlayerDst() ) * stepY + stepY/2);
+			y2 = (int) ((op.getBaseSrc()* (field.getPositionsAmount()+1) + op.getPlayerSrc() ) * stepY + stepY/2);
+			g.setStroke(dashedLine);
+			g.setColor(Color.black);
+			g.drawLine(x1, y1, x2, y2);
+			g.setStroke(fatLine);
+
+			// compute the next array
+			for (int k = 0; k < valuesAfter.length; k++) 
+				valuesBefore[k] = valuesAfter[k];
+		}
+
+		
+	}
+	
+	
+	/**
+	 * Draw the component of the world
+	 * @param g The Graphics2D context to draw on
+	 */
+	public void paintComponent(Graphics g) {
+		super.paintComponent(g);
+		
+		Graphics2D g2 = (Graphics2D) g;
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
+				RenderingHints.VALUE_ANTIALIAS_ON);
+		g2.setColor(Color.white);
+		g2.fill(new Rectangle2D.Double(0., 0., (double) getWidth(),
+				(double) getHeight()));
+
+		g2.setColor(Color.black);
+		g2.setFont(new Font("Monaco", Font.PLAIN, 12));
+
+		if (useCircularView)
+			paintCircular(g2);
+		else
+			paintHistory(g2);
+	}
+	
+	/** Returns if we must use the state view ( else we must use the chrono view ) */
+	protected boolean isUseStateView() {
+		return useCircularView;
+	}
+	protected void setUseStateView(boolean useStateView) {
+		this.useCircularView = useStateView;
+	}
+}
+
+
+
+class BaseballViewActionListener implements ActionListener, HumanLangChangesListener {
+	private JMenuItem item;
+	private BaseballWorldView view;
+	private I18n i18n;
+
+	public BaseballViewActionListener(JMenuItem i, BaseballWorldView v) {
+		item=i;
+		view=v;
+		Game.getInstance().addHumanLangListener(this);
+		currentHumanLanguageHasChanged(item.getLocale());
+	}
+
+	@Override
+	public void actionPerformed(ActionEvent e) {
+		view.setUseStateView(!view.isUseStateView());
+		currentHumanLanguageHasChanged(item.getLocale());
+		view.repaint();
+	}
+
+	@Override
+	public void currentHumanLanguageHasChanged(Locale newLang) {
+		i18n = I18nFactory.getI18n(getClass(),"org.jlm.i18n.Messages", newLang, I18nFactory.FALLBACK);
+		if (view.isUseStateView()) {
+			item.setText(i18n.tr("Switch to time view"));
+		} else {
+			item.setText(i18n.tr("Switch to state view"));
+		}
+	}
+	
+	
+}
+
diff --git a/src/lessons/sort/bubble/AlgBubbleSort1.fr.html b/src/lessons/sort/bubble/AlgBubbleSort1.fr.html
new file mode 100644
index 0000000..fd48b51
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort1.fr.html
@@ -0,0 +1,51 @@
+<h1>Tri à bulle</h1>
+
+<p>Bienvenu au monde des tris. Il permet d'expérimenter avec les algorithmes de
+tri existants. La liste des primitives que vous pouvez utiliser dans vos
+programmes est disponible dans la documentation de référence du monde (Aide
+/ À propos de ce monde).</p>
+
+<p>Il ne suffit pas de trier le tableau pour passer les exercices. Votre
+solution doit suivre scrupuleusement le comportement attendu de chaque
+exercice. Ceci est vérifié en comptant le nombre d'opérations de lecture et
+d'écriture sur le tableau effectuées lors de ce tri. En cas de problème, il
+est souvent assez difficile de comprendre la différence entre le
+comportement attendu et le comportement effectif.</p>
+
+<p>Pour cela, il est possible d'explorer graphiquement l'historique de
+n'importe quel monde de tri. Passez par exemple au monde Objectif et
+utilisez son menu contextuel (clic droit) pour choisir entre la vue de
+l'état courant du monde et la vue de son histoire.</p>
+
+<p>La vue de l'historique n'est pas aussi complexe qu'elle en a l'air à
+première vue. Le temps s'écoule de gauche à droite, et les cases du tableau
+sont représentée de haut en bas. Les lignes de différentes couleurs qui
+serpentent représentent les différentes valeurs contenues dans le
+tableau. Quand deux lignes se croises, cela signifie que les valeurs du
+tableau ont été échangées à ce moment de l'historique; un embranchement
+signifie que la valeur a été copiée; une valeur en violet suivie d'un point
+d'interrogation a été lue avec getValue() et une valeur en rouge suivie d'un
+point d'exclamation a été écrite avec setValue().</p> 
+
+<h2>Première tentative pour le tri à bulle</h2>
+
+<p>Le premier algorithme de tri est le plus simple existant : le tri à bulles
+ou tri par propagation consiste à faire remonter progressivement les plus
+petits éléments d'une liste, comme les bulles d'air remontent à la surface
+d'un liquide. L'algorithme parcourt la liste, et compare les couples
+d'éléments successifs. Lorsque deux éléments successifs ne sont pas dans
+l'ordre croissant, ils sont échangés. Après chaque parcours complet de la
+liste, l'algorithme recommence l'opération. Lorsqu'aucun échange n'a lieu
+pendant un parcours, cela signifie que la liste est triée : l'algorithme
+peut s'arrêter.  La simplicité de cet algorithme justifie son étude, mais
+ses piètres performances (O(n2) en moyenne) font qu'il n'est quasiment
+jamais utilisé en pratique.</p>
+
+<div class="tip" id="tip-1" alt="Montrer l'indice (le pseudo-code)">
+<p>Le pseudo-code de l'algorithme du tri à bulles est donc le suivant :</p>
+<pre>faire: 
+        Pour tout i dans [0,lgr-2]
+          Si les cases i et i+1 doivent être inverser, le faire
+     tant qu'on a inverser des choses lors du dernier parcours
+</pre>
+</div>
\ No newline at end of file
diff --git a/src/lessons/sort/bubble/AlgBubbleSort1.html b/src/lessons/sort/bubble/AlgBubbleSort1.html
new file mode 100644
index 0000000..6fe7830
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort1.html
@@ -0,0 +1,47 @@
+<h1>BubbleSort</h1>
+
+<p>Welcome to the sorting world. It allows you to experiment with the existing
+sorting algorithms. The list of buildins that you can use in your algorithms 
+is available in the world reference documentation ("Help"->"About this world").</p>
+
+<p>It is not enough to sort the array to pass the exercises. Your solution 
+must strictly follow the expected behavior of each exercise. This is
+enforced by checking that your algorithm needs the same amount of read
+and write operations to sort the array. When they don't match,
+understanding the difference between your code and the expected
+solution can reveal very difficult.</p>
+
+<p>To help in this process, it is posible to graphically explore the
+history of your sorting algorithm. Switch to the Objective view and
+use the contextual menu (right click) to switch from the the view of
+the current state to the view of its history.</p>
+
+<p>The history view is a bit hairly at the first glance, but actually rather
+simple: The time flows from left to right on this graph, and each row
+is a cell of your array. The curved lines that go navigate between
+rows represent a given data value. When two lines cross, this means
+that two values were swapped at this time stamp; A line fork represent a 
+value copy; When a value is magenta and followed by an interrogation 
+mark (?), it was read using getValue(); If the value is red and followed with 
+an exclamation point (!), it was written using setValue().</p> 
+
+<h2>First attempt at BubbleSort</h2>
+
+<p>This first sorting algorithm is the most simple one: Bubble sort consists in 
+progressively moving up the smaller elements of the array, as if they were air 
+bubbles moving up to the surface of a liquid. The algorithm traverse the array, 
+and compare any pair of adjacent elements. If two adjacent elements are wrongly 
+sorted, they are swapped. Once the array was completely traversed, the operation 
+starts again from the beginning. When no elements were sorted after a full 
+traversal, it means that the array is completely sorted: the algorithm can stop. 
+Bubble sort is studied because of its simplicity, but it is almost never used in 
+practice because of its bad performance (O(n^2) on average).</p>
+
+<div class="tip" id="tip-1" alt="Show Tip (Pseudo-code)">
+<p>The pseudo-code of the BubbleSort algorithm is the following:</p>
+<pre>do: 
+        For each i in [0,len-2]
+          If cells i and i+1 must be swapped, do it
+while we swapped something during last traversal
+</pre>
+</div>
\ No newline at end of file
diff --git a/src/lessons/sort/bubble/AlgBubbleSort1.java b/src/lessons/sort/bubble/AlgBubbleSort1.java
new file mode 100644
index 0000000..421321b
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort1.java
@@ -0,0 +1,22 @@
+package lessons.sort.bubble;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.sort.SortingEntity;
+import jlm.universe.sort.SortingWorld;
+
+public class AlgBubbleSort1 extends ExerciseTemplated {
+
+	public AlgBubbleSort1(Lesson lesson) {
+		super(lesson);
+	   
+		SortingWorld[] myWorlds = new SortingWorld[2];
+		myWorlds[0] = new SortingWorld("Functional test",10);
+		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
+		
+		for ( int i = 0 ; i < myWorlds.length ; i++)
+			new SortingEntity("BubbleSort",myWorlds[i]);
+		
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/sort/bubble/AlgBubbleSort1Entity.java b/src/lessons/sort/bubble/AlgBubbleSort1Entity.java
new file mode 100644
index 0000000..e188087
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort1Entity.java
@@ -0,0 +1,27 @@
+package lessons.sort.bubble;
+
+import jlm.universe.sort.SortingEntity;
+
+public class AlgBubbleSort1Entity extends SortingEntity {
+
+	public void run() {
+		this.bubbleSort();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void bubbleSort()  {
+		/* BEGIN SOLUTION */
+		boolean swapped;
+		do {
+			swapped = false;
+			for (int i=0; i<getValueCount()-1; i++)
+				if (!isSmaller(i,i+1)) {
+					swap(i,i+1);
+					swapped =true;
+				}
+		} while (swapped);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
diff --git a/src/lessons/sort/bubble1/AlgBubbleSort1Entity.py b/src/lessons/sort/bubble/AlgBubbleSort1Entity.py
similarity index 100%
rename from src/lessons/sort/bubble1/AlgBubbleSort1Entity.py
rename to src/lessons/sort/bubble/AlgBubbleSort1Entity.py
diff --git a/src/lessons/sort/bubble/AlgBubbleSort2.fr.html b/src/lessons/sort/bubble/AlgBubbleSort2.fr.html
new file mode 100644
index 0000000..ed6f31e
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort2.fr.html
@@ -0,0 +1,33 @@
+<h1>Tri à bulle (deuxième version)</h1>
+
+<p>En étudiant le comportement du tri à bulle, on peut voir une première
+optimisation facile à effectuer: Après un parcours, le dernier élément du
+tableau est forcément le plus grand d'entre tous car le parcours l'a fait
+remonté comme une bulle à sa position. Plus généralement, après N parcours,
+on sait que les N derniers éléments du tableau sont déjà triés. En
+conclusion, il n'est pas utile de les recomparer sur les parcours
+suivants. Dans un premier temps, nous ferons autant de parcours qu'il y a
+d'éléments dans le tableau.</p>
+
+<div class="tip" id="tip-2" alt="Montrer l'indice (le pseudo-code)">
+<p>Le pseudo-code de l'algorithme BubbleSort2 est le suivant :</p>
+<pre>Pour tout i dans [lgr-2,0] (parcours du plus grand au plus petit)
+       Pour tout j dans [0, i]
+          Si les cases j et j+1 doivent être inverser, le faire
+</pre>
+</div>
+
+<p>Lorsqu'on exécute cet algorithme, il peut être un peu décevant de constater
+qu'il s'exécute à la même vitesse que la version de base de
+BubbleSort. C'est un effet graphique seulement puisque seules les
+changements de valeurs dans le tableau sont représentées. Comme cette
+variante consiste à éviter des comparaisons inutiles, elle effectue très
+exactement le même nombre d'échanges que la version de base. Il est donc
+normal que notre interface graphique la représente à la même vitesse que la
+version de base. Mais les statistiques sur le nombre de lectures montrent
+bien que l'on a économisé plus d'un quart du nombre de lectures, ce qui
+n'est pas si mal.</p>
+
+<p>D'un point de vue complexité algorithmique, cela ne change rien: cette
+variante est toujours en O(n2) en moyenne (on ne gagne que sur la
+constante).</p>
\ No newline at end of file
diff --git a/src/lessons/sort/bubble/AlgBubbleSort2.html b/src/lessons/sort/bubble/AlgBubbleSort2.html
new file mode 100644
index 0000000..d7d081a
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort2.html
@@ -0,0 +1,30 @@
+<h1>BubbleSort (take 2)</h1>
+
+<p>If you look carefully at the behavior of BubbleSort, a first easy
+optimization appears: after one traversal, the last element of the array
+must be the biggest of all since the traversal moved it up like a bubble to
+its position. More generally, after N traversal, we know that the N last
+elements of the array are already sorted. It is thus not necessary to
+compare them again during the subsequent traversals. For now, we will have
+as many traversal as there is in the array.</p>
+
+<div class="tip" id="tip-2" alt="Show Tip (Pseudo-code)">
+<p>The pseudo-code of the BubbleSort2 algorithm is the following:</p>
+<pre>For all i in [len-2,0] (traversing from biggest to smallest)
+       For all j in [0, i]
+          If cells j and j+1 must be swapped, do it
+</pre>
+</div>
+
+<p>When we run this algorithm, it is quite disappointing to see that it runs
+approximately at the same speed than the basic version of BubbleSort. This
+is a graphical effect only since only value changes are graphically
+represented. Since this variation avoids some useless comparisons, it does
+exactly the same amount of swaps that the basic version. It is thus quite
+logical that the graphical interface draws this version at the same pace
+than the base version. But the statistics on the amount of reads show that we
+saved about the fourth of the amount of reads, which is not bad.</p>
+
+<p>From the asymptotic complexity point of view, there is absolutely no
+difference: this variation is still in O(n^2) on average (our gain is only
+on the constant term, ignored when computing the asymptotic complexity).</p>
\ No newline at end of file
diff --git a/src/lessons/sort/bubble/AlgBubbleSort2.java b/src/lessons/sort/bubble/AlgBubbleSort2.java
new file mode 100644
index 0000000..48fdd14
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort2.java
@@ -0,0 +1,22 @@
+package lessons.sort.bubble;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.sort.SortingEntity;
+import jlm.universe.sort.SortingWorld;
+
+public class AlgBubbleSort2 extends ExerciseTemplated {
+
+	public AlgBubbleSort2(Lesson lesson) {
+		super(lesson);
+		
+		SortingWorld[] myWorlds = new SortingWorld[2];
+		myWorlds[0] = new SortingWorld("Functional test",10);
+		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
+		
+		for ( int i = 0 ; i < myWorlds.length ; i++)
+			new SortingEntity("BubbleSort2",myWorlds[i]);
+
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/sort/bubble/AlgBubbleSort2Entity.java b/src/lessons/sort/bubble/AlgBubbleSort2Entity.java
new file mode 100644
index 0000000..da1c5e5
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort2Entity.java
@@ -0,0 +1,23 @@
+package lessons.sort.bubble;
+
+import jlm.universe.sort.SortingEntity;
+
+public class AlgBubbleSort2Entity extends SortingEntity {
+
+	public void run() {
+		this.bubbleSort2();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void bubbleSort2() {
+		/* BEGIN SOLUTION */
+		for (int i = getValueCount()-1; i>=0; i--) {
+			for (int j = 0; j<i; j++) 
+				if (!isSmaller(j,j+1)) 
+					swap(j,j+1);
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
+
diff --git a/src/lessons/sort/bubble2/AlgBubbleSort2Entity.py b/src/lessons/sort/bubble/AlgBubbleSort2Entity.py
similarity index 100%
rename from src/lessons/sort/bubble2/AlgBubbleSort2Entity.py
rename to src/lessons/sort/bubble/AlgBubbleSort2Entity.py
diff --git a/src/lessons/sort/bubble/AlgBubbleSort3.fr.html b/src/lessons/sort/bubble/AlgBubbleSort3.fr.html
new file mode 100644
index 0000000..03f57e3
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort3.fr.html
@@ -0,0 +1,24 @@
+<h1>Tri à bulle (troisième version)</h1>
+
+<p>Réintroduisons maintenant la petite optimisation que nous avions retiré à
+l'étape précédente : Si un parcours n'a rien inversé, c'est que le tableau
+est maintenant trié. Dans ce cas, il faut arrêter le processus de tri.</p>
+
+<p>Pour cela, utilisez simplement le mot-clé <code>break></code>, qui coupe
+l'exécutino de la boucle englobante. Attention, si vous avez plusieurs
+boucles
+imbriquées, c'est celle situé tout au fond (au plus près du mot-clé break)
+qui
+est cassée.</p>
+
+<div class="tip" id="tip-3" alt="Si vous le désirez, cet indice montre le pseudo-code.">
+<p></p>
+<pre>Pour tout i dans [lgr-2,0] (parcours du plus grand au plus petit)
+       Pour tout j dans [0, i]
+          Si les cases j et j+1 doivent être inverser, le faire
+       Si le parcours sur les j n'a rien inversé, casser la boucle
+</pre>
+</div>
+
+<p>Cet optimisation est encore plus décevante : on ne gagne que quelques
+pourcents en nombre de lectures sur BubbleSort2.</p>
diff --git a/src/lessons/sort/bubble/AlgBubbleSort3.html b/src/lessons/sort/bubble/AlgBubbleSort3.html
new file mode 100644
index 0000000..69607b1
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort3.html
@@ -0,0 +1,20 @@
+<h1>BubbleSort (take 3)</h1>
+
+<p>Let's now reintroduce the little optimization we removed at previous step:
+if a traversal does not swap any element, it means that the array is already
+sorted. In that case, we want to stop the whole sorting process.</p>
+
+<p>For that, simply use the <code>break</code> keyword, which breaks the current loop. 
+Beware, if you have several embedded loops, this will apply to the internal one.</p>
+
+<div class="tip" id="tip-3" alt="If you want, this tip shows the pseudo-code.">
+<p></p>
+<pre>For all i in [len-2,0] (traversing from biggest to smallest)
+       For all j in [0, i]
+          If cells j and j+1 must be swapped, do it
+       If traversal on j did not swap anything, break the for loop
+</pre>
+</div>
+
+<p>This optimization is even more disappointing: it only provide a gain of a few
+percents on the amount of reads over BubbleSort2.</p>
diff --git a/src/lessons/sort/bubble/AlgBubbleSort3.java b/src/lessons/sort/bubble/AlgBubbleSort3.java
new file mode 100644
index 0000000..b7c26e1
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort3.java
@@ -0,0 +1,22 @@
+package lessons.sort.bubble;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.sort.SortingEntity;
+import jlm.universe.sort.SortingWorld;
+
+public class AlgBubbleSort3 extends ExerciseTemplated {
+
+	public AlgBubbleSort3(Lesson lesson) {
+		super(lesson);
+		
+		SortingWorld[] myWorlds = new SortingWorld[2];
+		myWorlds[0] = new SortingWorld("Functional test",10);
+		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
+		
+		for ( int i = 0 ; i < myWorlds.length ; i++)
+			new SortingEntity("BubbleSort3",myWorlds[i]);
+
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/sort/bubble/AlgBubbleSort3Entity.java b/src/lessons/sort/bubble/AlgBubbleSort3Entity.java
new file mode 100644
index 0000000..169ec58
--- /dev/null
+++ b/src/lessons/sort/bubble/AlgBubbleSort3Entity.java
@@ -0,0 +1,31 @@
+package lessons.sort.bubble;
+
+import jlm.universe.sort.SortingEntity;
+
+public class AlgBubbleSort3Entity extends SortingEntity {
+
+	public void run() {
+		this.bubbleSort3();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void bubbleSort3() {
+		/* BEGIN SOLUTION */
+		for (int i = getValueCount()-1; i>=0; i--) {
+			boolean swapped = false;
+			for (int j = 0; j<i; j++) {
+				if (!isSmaller(j,j+1)) {
+					swap(j,j+1);
+					swapped=true;
+				}
+			}
+			if (!swapped) {
+				return;	
+			}
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
+
diff --git a/src/lessons/sort/bubble3/AlgBubbleSort3Entity.py b/src/lessons/sort/bubble/AlgBubbleSort3Entity.py
similarity index 100%
rename from src/lessons/sort/bubble3/AlgBubbleSort3Entity.py
rename to src/lessons/sort/bubble/AlgBubbleSort3Entity.py
diff --git a/src/lessons/sort/bubble1/AlgBubbleSort1.fr.html b/src/lessons/sort/bubble1/AlgBubbleSort1.fr.html
deleted file mode 100644
index 6356c97..0000000
--- a/src/lessons/sort/bubble1/AlgBubbleSort1.fr.html
+++ /dev/null
@@ -1,50 +0,0 @@
-<h1>Le tri à bulle et variantes</h1>
-
-<p>Bienvenu au monde des tris. Il permet d'expérimenter avec les algorithmes de
-tri existants. La liste des primitives que vous pouvez utiliser dans vos
-programmes est disponible dans la documentation de référence du monde
-("Help" -> "About this world").</p>
-
-<p>Il ne suffit pas de trier le tableau pour passer les exercices. Votre
-solution doit suivre scrupuleusement le comportement attendu de chaque
-exercice. Ceci est vérifié en comptant le nombre d'opérations de lecture et
-d'écriture sur le tableau effectuées lors de ce tri. En cas de problème, il
-est souvent assez difficile de comprendre la différence entre le
-comportement attendu et le comportement effectif.</p>
-
-<p>Pour cela, il est possible d'explorer graphiquement l'historique de
-n'importe quel monde de tri. Passez par exemple au monde Objectif et
-utilisez son menu contextuel (clic droit) pour choisir entre la vue de
-l'état courant du monde et la vue de son histoire.</p>
-
-<p>La vue de l'historique n'est pas aussi complexe qu'elle en a l'air à
-première vue. Le temps s'écoule de gauche à droite, et les cases du tableau
-sont représentée de haut en bas. Les lignes de différentes couleurs qui
-serpentent représentent les différentes valeurs contenues dans le
-tableau. Quand deux lignes se croises, cela signifie que les valeurs du
-tableau ont été échangées à ce moment de l'historique. Cette vue, inventée
-par Aldo Cortesi, est très pratique pour comprendre le comportement des
-algorithmes de tri.</p> 
-
-<h2>BubbleSort</h2>
-
-<p>Le premier algorithme de tri est le plus simple existant : le tri à bulles
-ou tri par propagation consiste à faire remonter progressivement les plus
-petits éléments d'une liste, comme les bulles d'air remontent à la surface
-d'un liquide. L'algorithme parcourt la liste, et compare les couples
-d'éléments successifs. Lorsque deux éléments successifs ne sont pas dans
-l'ordre croissant, ils sont échangés. Après chaque parcours complet de la
-liste, l'algorithme recommence l'opération. Lorsqu'aucun échange n'a lieu
-pendant un parcours, cela signifie que la liste est triée : l'algorithme
-peut s'arrêter.  La simplicité de cet algorithme justifie son étude, mais
-ses piètres performances (O(n2) en moyenne) font qu'il n'est quasiment
-jamais utilisé en pratique.</p>
-
-<div class="tip" id="tip-1" alt="Montrer l'indice (le pseudo-code)">
-<p>Le pseudo-code de l'algorithme du tri à bulles est donc le suivant :</p>
-<pre>faire: 
-        Pour tout i dans [0,lgr-2]
-          Si les cases i et i+1 doivent être inverser, le faire
-     tant qu'on a inverser des choses lors du dernier parcours
-</pre>
-</div>
\ No newline at end of file
diff --git a/src/lessons/sort/bubble1/AlgBubbleSort1.html b/src/lessons/sort/bubble1/AlgBubbleSort1.html
deleted file mode 100644
index b006ff4..0000000
--- a/src/lessons/sort/bubble1/AlgBubbleSort1.html
+++ /dev/null
@@ -1,46 +0,0 @@
-<h1>BubbleSort and variations</h1>
-
-<p>Welcome to the sorting world. It allows you to experiment with the existing
-sorting algorithms. The list of buildins that you can use in your algorithms 
-is available in the world reference documentation ("Help"->"About this world").</p>
-
-<p>It is not enough to sort the array to pass the exercises. Your solution 
-must strictly follow the expected behavior of each exercise. This is
-enforced by checking that your algorithm needs the same amount of read
-and write operations to sort the array. When they don't match,
-understanding the difference between your code and the expected
-solution can reveal very difficult.</p>
-
-<p>To help in this process, it is posible to graphically explore the
-history of your sorting algorithm. Switch to the Objective view and
-use the contextual menu (right clic) to switch from the the view of
-the current state to the view of its history.</p>
-
-<p>The history view is a bit hairly at the first glance, but actually rather
-simple: The time flows from left to right on this graph, and each row
-is a cell of your array. The curved lines that go navigate between
-rows represent a given data value. When two lines cross, this means
-that two values were swapped at this time stamp. This view, first
-introduced by Aldo Cortesi, reveals very helpful understand the inner
-behavior of sorting algorithms.</p> 
-
-<h2>BubbleSort</h2>
-
-<p>This first sorting algorithm is the most simple one: Bubble sort consists in 
-progressively moving up the smaller elements of the array, as if they were air 
-bubbles moving up to the surface of a liquid. The algorithm traverse the array, 
-and compare any pair of adjacent elements. If two adjacent elements are wrongly 
-sorted, they are swapped. Once the array was completely traversed, the operation 
-starts again from the beginning. When no elements were sorted after a full 
-traversal, it means that the array is completely sorted: the algorithm can stop. 
-Bubble sort is studied because of its simplicity, but it is almost never used in 
-practice because of its bad performance (O(n^2) on average).</p>
-
-<div class="tip" id="tip-1" alt="Show Tip (Pseudo-code)">
-<p>The pseudo-code of the BubbleSort algorithm is the following:</p>
-<pre>do: 
-        For each i in [0,len-2]
-          If cells i and i+1 must be swapped, do it
-while we swapped something during last traversal
-</pre>
-</div>
\ No newline at end of file
diff --git a/src/lessons/sort/bubble1/AlgBubbleSort1.java b/src/lessons/sort/bubble1/AlgBubbleSort1.java
deleted file mode 100644
index bd10175..0000000
--- a/src/lessons/sort/bubble1/AlgBubbleSort1.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package lessons.sort.bubble1;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.sort.SortingEntity;
-import jlm.universe.sort.SortingWorld;
-
-public class AlgBubbleSort1 extends ExerciseTemplated {
-
-	public AlgBubbleSort1(Lesson lesson) {
-		super(lesson);
-	   
-		SortingWorld[] myWorlds = new SortingWorld[2];
-		myWorlds[0] = new SortingWorld("Functional test",10);
-		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
-		
-		for ( int i = 0 ; i < myWorlds.length ; i++)
-			new SortingEntity("BubbleSort",myWorlds[i]);
-		
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/sort/bubble1/AlgBubbleSort1Entity.java b/src/lessons/sort/bubble1/AlgBubbleSort1Entity.java
deleted file mode 100644
index 9705d60..0000000
--- a/src/lessons/sort/bubble1/AlgBubbleSort1Entity.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package lessons.sort.bubble1;
-
-import jlm.universe.sort.SortingEntity;
-
-public class AlgBubbleSort1Entity extends SortingEntity {
-
-	public void run() {
-		this.bubbleSort();
-	}
-
-	/* BEGIN TEMPLATE */
-	public void bubbleSort()  {
-		/* BEGIN SOLUTION */
-		boolean swapped;
-		do {
-			swapped = false;
-			for (int i=0; i<getValueCount()-1; i++)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}
-		} while (swapped);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/sort/bubble2/AlgBubbleSort2.fr.html b/src/lessons/sort/bubble2/AlgBubbleSort2.fr.html
deleted file mode 100644
index d69ebf9..0000000
--- a/src/lessons/sort/bubble2/AlgBubbleSort2.fr.html
+++ /dev/null
@@ -1,35 +0,0 @@
-<h1>Le tri à bulle et variantes</h1>
-
-<h2>BubbleSort2</h2>
-
-<p>En étudiant le comportement du tri à bulle, on peut voir une première
-optimisation facile à effectuer: Après un parcours, le dernier élément du
-tableau est forcément le plus grand d'entre tous car le parcours l'a fait
-remonté comme une bulle à sa position. Plus généralement, après N parcours,
-on sait que les N derniers éléments du tableau sont déjà triés. En
-conclusion, il n'est pas utile de les recomparer sur les parcours
-suivants. Dans un premier temps, nous ferons autant de parcours qu'il y a
-d'éléments dans le tableau.</p>
-
-<div class="tip" id="tip-2" alt="Montrer l'indice (le pseudo-code)">
-<p>Le pseudo-code de l'algorithme BubbleSort2 est le suivant :</p>
-<pre>Pour tout i dans [lgr-2,0] (parcours du plus grand au plus petit)
-       Pour tout j dans [0, i]
-          Si les cases j et j+1 doivent être inverser, le faire
-</pre>
-</div>
-
-<p>Lorsqu'on exécute cet algorithme, il peut être un peu décevant de constater
-qu'il s'exécute à la même vitesse que la version de base de
-BubbleSort. C'est un effet graphique seulement puisque seules les
-changements de valeurs dans le tableau sont représentées. Comme cette
-variante consiste à éviter des comparaisons inutiles, elle effectue très
-exactement le même nombre d'échanges que la version de base. Il est donc
-normal que notre interface graphique la représente à la même vitesse que la
-version de base. Mais les statistiques sur le nombre de lectures montrent
-bien que l'on a économisé plus d'un quart du nombre de lectures, ce qui
-n'est pas si mal.</p>
-
-<p>D'un point de vue complexité algorithmique, cela ne change rien: cette
-variante est toujours en O(n2) en moyenne (on ne gagne que sur la
-constante).</p>
\ No newline at end of file
diff --git a/src/lessons/sort/bubble2/AlgBubbleSort2.html b/src/lessons/sort/bubble2/AlgBubbleSort2.html
deleted file mode 100644
index 23887cd..0000000
--- a/src/lessons/sort/bubble2/AlgBubbleSort2.html
+++ /dev/null
@@ -1,32 +0,0 @@
-<h1>BubbleSort and variations</h1>
-
-<h2>BubbleSort2</h2>
-
-<p>If you look carefully at the behavior of BubbleSort, a first easy
-optimization appears: after one traversal, the last element of the array
-must be the biggest of all since the traversal moved it up like a bubble to
-its position. More generally, after N traversal, we know that the N last
-elements of the array are already sorted. It is thus not necessary to
-compare them again during the subsequent traversals. For now, we will have
-as many traversal as there is in the array.</p>
-
-<div class="tip" id="tip-2" alt="Show Tip (Pseudo-code)">
-<p>The pseudo-code of the BubbleSort2 algorithm is the following:</p>
-<pre>For all i in [len-2,0] (traversing from biggest to smallest)
-       For all j in [0, i]
-          If cells j and j+1 must be swapped, do it
-</pre>
-</div>
-
-<p>When we run this algorithm, it is quite disappointing to see that it runs
-approximately at the same speed than the basic version of BubbleSort. This
-is a graphical effect only since only value changes are graphically
-represented. Since this variation avoids some useless comparisons, it does
-exactly the same amount of swaps that the basic version. It is thus quite
-logical that the graphical interface draws this version at the same pace
-than the base version. But the statistics on the amount of reads show that we
-saved about the fourth of the amount of reads, which is not bad.</p>
-
-<p>From the asymptotic complexity point of view, there is absolutely no
-difference: this variation is still in O(n^2) on average (our gain is only
-on the constant term, ignored when computing the asymptotic complexity).</p>
\ No newline at end of file
diff --git a/src/lessons/sort/bubble2/AlgBubbleSort2.java b/src/lessons/sort/bubble2/AlgBubbleSort2.java
deleted file mode 100644
index 8dc65b4..0000000
--- a/src/lessons/sort/bubble2/AlgBubbleSort2.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package lessons.sort.bubble2;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.sort.SortingEntity;
-import jlm.universe.sort.SortingWorld;
-
-public class AlgBubbleSort2 extends ExerciseTemplated {
-
-	public AlgBubbleSort2(Lesson lesson) {
-		super(lesson);
-		
-		SortingWorld[] myWorlds = new SortingWorld[2];
-		myWorlds[0] = new SortingWorld("Functional test",10);
-		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
-		
-		for ( int i = 0 ; i < myWorlds.length ; i++)
-			new SortingEntity("BubbleSort2",myWorlds[i]);
-
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/sort/bubble2/AlgBubbleSort2Entity.java b/src/lessons/sort/bubble2/AlgBubbleSort2Entity.java
deleted file mode 100644
index c4f1add..0000000
--- a/src/lessons/sort/bubble2/AlgBubbleSort2Entity.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package lessons.sort.bubble2;
-
-import jlm.universe.sort.SortingEntity;
-
-public class AlgBubbleSort2Entity extends SortingEntity {
-
-	public void run() {
-		this.bubbleSort2();
-	}
-
-	/* BEGIN TEMPLATE */
-	public void bubbleSort2() {
-		/* BEGIN SOLUTION */
-		for (int i = getValueCount()-1; i>=0; i--) {
-			for (int j = 0; j<i; j++) 
-				if (!isSmaller(j,j+1)) 
-					swap(j,j+1);
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
-
diff --git a/src/lessons/sort/bubble3/AlgBubbleSort3.fr.html b/src/lessons/sort/bubble3/AlgBubbleSort3.fr.html
deleted file mode 100644
index 7313c2a..0000000
--- a/src/lessons/sort/bubble3/AlgBubbleSort3.fr.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<h1>Le tri à bulle et variantes</h1>
-
-<h2>BubbleSort3</h2>
-
-<p>Réintroduisons maintenant la petite optimisation que nous avions retiré à
-l'étape précédente : Si un parcours n'a rien inversé, c'est que le tableau
-est maintenant trié. Dans ce cas, il faut arrêter le processus de tri.</p>
-
-<p>Pour cela, utilisez simplement le mot-clé <code>break></code>, qui coupe
-l'exécutino de la boucle englobante. Attention, si vous avez plusieurs
-boucles
-imbriquées, c'est celle situé tout au fond (au plus près du mot-clé break)
-qui
-est cassée.</p>
-
-<div class="tip" id="tip-3" alt="Si vous le désirez, cet indice montre le pseudo-code.">
-<p></p>
-<pre>Pour tout i dans [lgr-2,0] (parcours du plus grand au plus petit)
-       Pour tout j dans [0, i]
-          Si les cases j et j+1 doivent être inverser, le faire
-       Si le parcours sur les j n'a rien inversé, casser la boucle
-</pre>
-</div>
-
-<p>Cet optimisation est encore plus décevante : on ne gagne que quelques
-pourcents en nombre de lectures sur BubbleSort2.</p>
diff --git a/src/lessons/sort/bubble3/AlgBubbleSort3.html b/src/lessons/sort/bubble3/AlgBubbleSort3.html
deleted file mode 100644
index dbf4360..0000000
--- a/src/lessons/sort/bubble3/AlgBubbleSort3.html
+++ /dev/null
@@ -1,22 +0,0 @@
-<h1>BubbleSort and variations</h1>
-
-<h2>BubbleSort3</h2>
-
-<p>Let's now reintroduce the little optimization we removed at previous step:
-if a traversal does not swap any element, it means that the array is already
-sorted. In that case, we want to stop the whole sorting process.</p>
-
-<p>For that, simply use the <code>break</code> keyword, which breaks the current loop. 
-Beware, if you have several embedded loops, this will apply to the internal one.</p>
-
-<div class="tip" id="tip-3" alt="If you want, this tip shows the pseudo-code.">
-<p></p>
-<pre>For all i in [len-2,0] (traversing from biggest to smallest)
-       For all j in [0, i]
-          If cells j and j+1 must be swapped, do it
-       If traversal on j did not swap anything, break the for loop
-</pre>
-</div>
-
-<p>This optimization is even more disappointing: it only provide a gain of a few
-percents on the amount of reads over BubbleSort2.</p>
diff --git a/src/lessons/sort/bubble3/AlgBubbleSort3.java b/src/lessons/sort/bubble3/AlgBubbleSort3.java
deleted file mode 100644
index ed3f224..0000000
--- a/src/lessons/sort/bubble3/AlgBubbleSort3.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package lessons.sort.bubble3;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.sort.SortingEntity;
-import jlm.universe.sort.SortingWorld;
-
-public class AlgBubbleSort3 extends ExerciseTemplated {
-
-	public AlgBubbleSort3(Lesson lesson) {
-		super(lesson);
-		
-		SortingWorld[] myWorlds = new SortingWorld[2];
-		myWorlds[0] = new SortingWorld("Functional test",10);
-		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
-		
-		for ( int i = 0 ; i < myWorlds.length ; i++)
-			new SortingEntity("BubbleSort3",myWorlds[i]);
-
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/sort/bubble3/AlgBubbleSort3Entity.java b/src/lessons/sort/bubble3/AlgBubbleSort3Entity.java
deleted file mode 100644
index 89ec59b..0000000
--- a/src/lessons/sort/bubble3/AlgBubbleSort3Entity.java
+++ /dev/null
@@ -1,31 +0,0 @@
-package lessons.sort.bubble3;
-
-import jlm.universe.sort.SortingEntity;
-
-public class AlgBubbleSort3Entity extends SortingEntity {
-
-	public void run() {
-		this.bubbleSort3();
-	}
-
-	/* BEGIN TEMPLATE */
-	public void bubbleSort3() {
-		/* BEGIN SOLUTION */
-		for (int i = getValueCount()-1; i>=0; i--) {
-			boolean swapped = false;
-			for (int j = 0; j<i; j++) {
-				if (!isSmaller(j,j+1)) {
-					swap(j,j+1);
-					swapped=true;
-				}
-			}
-			if (!swapped) {
-				return;	
-			}
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-}
-
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort1.fr.html b/src/lessons/sort/cocktail/AlgCocktailSort1.fr.html
new file mode 100644
index 0000000..b0205d2
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort1.fr.html
@@ -0,0 +1,25 @@
+<h1>Tri Cocktail</h1>
+
+<p>Pour améliorer encore notre algorithme, il faut regarder un peu plus en
+détail son comportement. On peut constater que les grands éléments sont très
+rapidement mis en place tandis que les petits éléments se déplacent très
+lentement vers leur destination. On parle classiquement de lièvres et de
+tortues pour désigner respectivement les grandes valeurs et les petites
+valeurs.</p>
+
+<p>Pour permettre aux tortues d'aller plus vite, le tri cocktail parcours
+alternativement le tableau de gauche à droite et de droite à gauche. Voici
+son pseudo-code:</p>
+
+<pre>
+Faire
+  Pour tout i dans [0,lgr-2], faire:
+    si i et i+1 doivent être échangées, le faire
+  Pour tout i dans [lgr-2,0] en descendant, faire:
+    si i et i+1 doivent être échangées, le faire
+tant qu'au moins l'un des parcours a inversé un élément
+</pre>
+
+<p>On constate que le tri cocktail fait très exactement le même nombre
+d'échanges que le tri à bulle, mais qu'il améliore les choses sur le nombre
+de lectures. Il reste cependant moins bon que BubbleSort2 en la matière.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort1.html b/src/lessons/sort/cocktail/AlgCocktailSort1.html
new file mode 100644
index 0000000..fea7e39
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort1.html
@@ -0,0 +1,24 @@
+<h1>CocktailSort</h1>
+
+<p>To improve further the BubbleSort algorithm, we need to look closer its behavior. One
+can notice that big elements are moved very quickly in position while small
+ones move very slowly to their destination. They are thus traditionally
+referred to as "rabbits" and "turtles" respectively for big fast values and
+small slow ones.</p>
+
+<p>To help the turtles moving faster, the cocktail sort traverse alternatively
+the array from right to left and from left to right. Here is the
+pseudo-code:</p>
+
+<pre>
+Do
+  For all i in [0,len-2], do:
+    if i and i+1 must be swapped, do it
+  For all i in [len-2,0] (downward), do:
+    if i and i+1 must be swapped, do it
+while at least one of the traversal swapped an element
+</pre>
+
+<p>One can see that cocktail sort achieves exactly the same amount of swaps
+than the bubble sort, but improves slightly on read amount. It is however
+still worse than BubbleSort2 to that extend.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort1.java b/src/lessons/sort/cocktail/AlgCocktailSort1.java
new file mode 100644
index 0000000..0c58caf
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort1.java
@@ -0,0 +1,22 @@
+package lessons.sort.cocktail;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.sort.SortingEntity;
+import jlm.universe.sort.SortingWorld;
+
+public class AlgCocktailSort1 extends ExerciseTemplated {
+	
+	public AlgCocktailSort1(Lesson lesson) {
+		super(lesson);
+		
+		SortingWorld[] myWorlds = new SortingWorld[2];
+		myWorlds[0] = new SortingWorld("Functional test",10);
+		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
+		
+		for ( int i = 0 ; i < myWorlds.length ; i++)
+			new SortingEntity("Cocktail maker 1",myWorlds[i]);
+
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort1Entity.java b/src/lessons/sort/cocktail/AlgCocktailSort1Entity.java
new file mode 100644
index 0000000..05e044e
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort1Entity.java
@@ -0,0 +1,33 @@
+package lessons.sort.cocktail;
+
+import jlm.universe.sort.SortingEntity;
+
+public class AlgCocktailSort1Entity extends SortingEntity {
+
+	public void run() {
+		this.cocktailSort();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void cocktailSort() {
+		/* BEGIN SOLUTION */
+		boolean swapped;
+		do {
+			swapped = false;
+			for (int i=0; i<getValueCount()-1; i++)
+				if (!isSmaller(i,i+1)) {
+					swap(i,i+1);
+					swapped =true;
+				}	
+			for (int i=getValueCount()-2; i>=0; i--)
+				if (!isSmaller(i,i+1)) {
+					swap(i,i+1);
+					swapped =true;
+				}	
+		} while (swapped);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
+
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort1Entity.py b/src/lessons/sort/cocktail/AlgCocktailSort1Entity.py
new file mode 100644
index 0000000..c43f9c4
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort1Entity.py
@@ -0,0 +1,13 @@
+# BEGIN SOLUTION 
+swapped = True
+while swapped:
+	swapped = False
+	for i in range(getValueCount()-1):
+		if not isSmaller(i,i+1):
+			swap(i,i+1)
+			swapped = True
+	for i in range(getValueCount()-2,-1,-1):
+		if not isSmaller(i,i+1):
+			swap(i,i+1)
+			swapped = True
+# END SOLUTION
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort2.fr.html b/src/lessons/sort/cocktail/AlgCocktailSort2.fr.html
new file mode 100644
index 0000000..0fd428b
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort2.fr.html
@@ -0,0 +1,17 @@
+<h1>Tri Cocktail (seconde version)</h1>
+
+<p>Nous allons appliquer la même optimisation que BubbleSort2 à
+CocktailSort. Il nous faut nous souvenir des bornes du tableau pas encore
+trié, et le parcourir alternativement de droite à gauche et de gauche à
+droite:</p>
+<pre>
+debut=0; fin=lgr-2
+Faire
+  Pour tout i dans [debut,fin], faire:
+    si i et i+1 doivent être échangées, le faire
+  fin--
+  Pour tout i dans [fin, debut] en descendant, faire:
+    si i et i+1 doivent être échangées, le faire
+  debut++
+tant qu'au moins l'un des parcours a inversé un élément
+</pre>
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort2.html b/src/lessons/sort/cocktail/AlgCocktailSort2.html
new file mode 100644
index 0000000..c7e1ca5
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort2.html
@@ -0,0 +1,17 @@
+<h1>CocktailSort (take 2)</h1>
+
+<p>We will now apply to CocktailSort the same optimization than BubbleSort2 did
+to BubbleSort. We must remember the limits of the array part not being
+sorted yet, and traverse it alternatively from left to right and from right
+to left:</p>
+<pre>
+beg=0; end=len-2
+do
+  For all Pour i in [beg,end], do:
+      If cells i and i+1 must be swapped, do it    
+  end--
+  For all Pour i in [beg,end] (downwards), do:
+      If cells i and i+1 must be swapped, do it    
+  beg++
+while at least one of the traversal swapped an element
+</pre>
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort2.java b/src/lessons/sort/cocktail/AlgCocktailSort2.java
new file mode 100644
index 0000000..5f76a3a
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort2.java
@@ -0,0 +1,22 @@
+package lessons.sort.cocktail;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.sort.SortingEntity;
+import jlm.universe.sort.SortingWorld;
+
+public class AlgCocktailSort2 extends ExerciseTemplated {
+	
+	public AlgCocktailSort2(Lesson lesson) {
+		super(lesson);
+		
+		SortingWorld[] myWorlds = new SortingWorld[2];
+		myWorlds[0] = new SortingWorld("Functional test",10);
+		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
+		
+		for ( int i = 0 ; i < myWorlds.length ; i++)
+			new SortingEntity("Cocktail maker 1",myWorlds[i]);
+
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort2Entity.java b/src/lessons/sort/cocktail/AlgCocktailSort2Entity.java
new file mode 100644
index 0000000..7affe3c
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort2Entity.java
@@ -0,0 +1,37 @@
+package lessons.sort.cocktail;
+
+import jlm.universe.sort.SortingEntity;
+
+public class AlgCocktailSort2Entity extends SortingEntity {
+
+	public void run() {
+		this.cocktailSort2();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void cocktailSort2() {
+		/* BEGIN SOLUTION */
+		boolean swapped;
+		int begin=0;
+		int end=getValueCount()-2;
+		do {
+			swapped = false;
+			for (int i=begin; i<=end; i++)
+				if (!isSmaller(i,i+1)) {
+					swap(i,i+1);
+					swapped =true;
+				}
+			end--;
+			for (int i=end; i>=begin; i--)
+				if (!isSmaller(i,i+1)) {
+					swap(i,i+1);
+					swapped =true;
+				}
+			begin++;
+		} while (swapped && end-begin>1);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
+
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort2Entity.py b/src/lessons/sort/cocktail/AlgCocktailSort2Entity.py
new file mode 100644
index 0000000..af69f29
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort2Entity.py
@@ -0,0 +1,17 @@
+# BEGIN SOLUTION 
+begin = 0
+end = getValueCount()-2
+swapped = True
+while swapped  and   end-begin>1:
+	swapped = False
+	for i in range(begin, (end+1) ):
+		if not isSmaller(i,i+1):
+			swap(i,i+1)
+			swapped = True
+	end -= 1
+	for i in range(end,begin-1,-1):
+		if not isSmaller(i,i+1):
+			swap(i,i+1)
+			swapped = True
+	begin += 1
+# END SOLUTION
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort3.fr.html b/src/lessons/sort/cocktail/AlgCocktailSort3.fr.html
new file mode 100644
index 0000000..ebb76f4
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort3.fr.html
@@ -0,0 +1,8 @@
+<h1>Tri Cocktail (troisième version)</h1>
+
+<p>Même si la complexité algorithmique de CocktailSort2 est la même que le tri
+à bulle, il semble bien mieux s'en tirer en pratique. On peut encore
+l'améliorer un tout petit peu en arretant tout si le parcours dans l'ordre
+croissant n'a rien inversé, sans faire le parcours dans l'ordre
+descroissant. De même, on peut quiter si le parcours croissant a inversé des
+choses, mais pas le parcours décroissant.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort3.html b/src/lessons/sort/cocktail/AlgCocktailSort3.html
new file mode 100644
index 0000000..a466e49
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort3.html
@@ -0,0 +1,8 @@
+<h1>CocktailSort (take 3)</h1>
+
+<p>Even if the asymptotic complexity of CocktailSort2 is the same than the one
+of BubbleSort, it seem to perform better in practice. It is even possible to
+improve a bit further by stopping it if the first traversal didn't found
+anything to swap, without achieving the downwards traversal. Likewise, we
+can stop if the upward traversal found something to swap, but not the
+downwards one.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort3.java b/src/lessons/sort/cocktail/AlgCocktailSort3.java
new file mode 100644
index 0000000..60f754b
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort3.java
@@ -0,0 +1,22 @@
+package lessons.sort.cocktail;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.sort.SortingEntity;
+import jlm.universe.sort.SortingWorld;
+
+public class AlgCocktailSort3 extends ExerciseTemplated {
+	
+	public AlgCocktailSort3(Lesson lesson) {
+		super(lesson);
+		
+		SortingWorld[] myWorlds = new SortingWorld[2];
+		myWorlds[0] = new SortingWorld("Functional test",10);
+		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
+
+		for ( int i = 0 ; i < myWorlds.length ; i++)
+			new SortingEntity("Cocktail maker 3",myWorlds[i]);
+
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort3Entity.java b/src/lessons/sort/cocktail/AlgCocktailSort3Entity.java
new file mode 100644
index 0000000..a9893c0
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort3Entity.java
@@ -0,0 +1,41 @@
+package lessons.sort.cocktail;
+
+import jlm.universe.sort.SortingEntity;
+
+public class AlgCocktailSort3Entity extends SortingEntity {
+
+	public void run() {
+		this.cocktailSort3();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void cocktailSort3() {
+		/* BEGIN SOLUTION */
+		boolean swapped;
+		int begin=0;
+		int end=getValueCount()-2;
+		do {
+			swapped = false;
+			for (int i=begin; i<=end; i++)
+				if (!isSmaller(i,i+1)) {
+					swap(i,i+1);
+					swapped =true;
+				}
+			if (!swapped) 
+				return;
+			
+			swapped=false;
+			end--;
+			for (int i=end; i>=begin; i--)
+				if (!isSmaller(i,i+1)) {
+					swap(i,i+1);
+					swapped =true;
+				}
+			begin++;
+		} while (swapped && end-begin>1);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
+
diff --git a/src/lessons/sort/cocktail/AlgCocktailSort3Entity.py b/src/lessons/sort/cocktail/AlgCocktailSort3Entity.py
new file mode 100644
index 0000000..4bcb511
--- /dev/null
+++ b/src/lessons/sort/cocktail/AlgCocktailSort3Entity.py
@@ -0,0 +1,20 @@
+# BEGIN SOLUTION 
+begin = 0
+end = getValueCount()-2
+swapped = True
+while swapped  and  end-begin>1:
+	swapped = False
+	for i in range(begin, (end+1) ):
+		if not isSmaller(i,i+1):
+			swap(i,i+1)
+			swapped = True
+	if not swapped:
+		break;
+	swapped = False
+	end -= 1
+	for i in range(end,begin-1,-1):
+		if not isSmaller(i,i+1):
+			swap(i,i+1)
+			swapped = True
+	begin += 1
+# END SOLUTION
diff --git a/src/lessons/sort/cocktail1/AlgCocktailSort1.fr.html b/src/lessons/sort/cocktail1/AlgCocktailSort1.fr.html
deleted file mode 100644
index bdf2351..0000000
--- a/src/lessons/sort/cocktail1/AlgCocktailSort1.fr.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<h1>Le tri à bulle et variantes</h1>
-
-<h2>CocktailSort</h2>
-
-<p>Pour améliorer encore notre algorithme, il faut regarder un peu plus en
-détail son comportement. On peut constater que les grands éléments sont très
-rapidement mis en place tandis que les petits éléments se déplacent très
-lentement vers leur destination. On parle classiquement de lièvres et de
-tortues pour désigner respectivement les grandes valeurs et les petites
-valeurs.</p>
-
-<p>Pour permettre aux tortues d'aller plus vite, le tri cocktail parcours
-alternativement le tableau de gauche à droite et de droite à gauche. Voici
-son pseudo-code:</p>
-
-<pre>
-Faire
-  Pour tout i dans [0,lgr-2], faire:
-    si i et i+1 doivent être échangées, le faire
-  Pour tout i dans [lgr-2,0] en descendant, faire:
-    si i et i+1 doivent être échangées, le faire
-tant qu'au moins l'un des parcours a inversé un élément
-</pre>
-
-<p>On constate que le tri cocktail fait très exactement le même nombre
-d'échanges que le tri à bulle, mais qu'il améliore les choses sur le nombre
-de lectures. Il reste cependant moins bon que BubbleSort2 en la matière.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail1/AlgCocktailSort1.html b/src/lessons/sort/cocktail1/AlgCocktailSort1.html
deleted file mode 100644
index 8212abb..0000000
--- a/src/lessons/sort/cocktail1/AlgCocktailSort1.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<h1>CocktailSort and variations</h1>
-
-<h2>CocktailSort</h2>
-
-<p>To improve further the BubbleSort algorithm, we need to look closer its behavior. One
-can notice that big elements are moved very quickly in position while small
-ones move very slowly to their destination. They are thus traditionally
-referred to as "rabbits" and "turtles" respectively for big fast values and
-small slow ones.</p>
-
-<p>To help the turtles moving faster, the cocktail sort traverse alternatively
-the array from right to left and from left to right. Here is the
-pseudo-code:</p>
-
-<pre>
-Do
-  For all i in [0,len-2], do:
-    if i and i+1 must be swapped, do it
-  For all i in [len-2,0] (downward), do:
-    if i and i+1 must be swapped, do it
-while at least one of the traversal swapped an element
-</pre>
-
-<p>One can see that cocktail sort achieves exactly the same amount of swaps
-than the bubble sort, but improves slightly on read amount. It is however
-still worse than BubbleSort2 to that extend.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail1/AlgCocktailSort1.java b/src/lessons/sort/cocktail1/AlgCocktailSort1.java
deleted file mode 100644
index 24a45ae..0000000
--- a/src/lessons/sort/cocktail1/AlgCocktailSort1.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package lessons.sort.cocktail1;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.sort.SortingEntity;
-import jlm.universe.sort.SortingWorld;
-
-public class AlgCocktailSort1 extends ExerciseTemplated {
-	
-	public AlgCocktailSort1(Lesson lesson) {
-		super(lesson);
-		
-		SortingWorld[] myWorlds = new SortingWorld[2];
-		myWorlds[0] = new SortingWorld("Functional test",10);
-		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
-		
-		for ( int i = 0 ; i < myWorlds.length ; i++)
-			new SortingEntity("Cocktail maker 1",myWorlds[i]);
-
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/sort/cocktail1/AlgCocktailSort1Entity.java b/src/lessons/sort/cocktail1/AlgCocktailSort1Entity.java
deleted file mode 100644
index 1effe04..0000000
--- a/src/lessons/sort/cocktail1/AlgCocktailSort1Entity.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package lessons.sort.cocktail1;
-
-import jlm.universe.sort.SortingEntity;
-
-public class AlgCocktailSort1Entity extends SortingEntity {
-
-	public void run() {
-		this.cocktailSort();
-	}
-
-	/* BEGIN TEMPLATE */
-	public void cocktailSort() {
-		/* BEGIN SOLUTION */
-		boolean swapped;
-		do {
-			swapped = false;
-			for (int i=0; i<getValueCount()-1; i++)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}	
-			for (int i=getValueCount()-2; i>=0; i--)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}	
-		} while (swapped);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-}
-
diff --git a/src/lessons/sort/cocktail1/AlgCocktailSort1Entity.py b/src/lessons/sort/cocktail1/AlgCocktailSort1Entity.py
deleted file mode 100644
index 526e0b8..0000000
--- a/src/lessons/sort/cocktail1/AlgCocktailSort1Entity.py
+++ /dev/null
@@ -1,16 +0,0 @@
-# BEGIN SOLUTION 
-		boolean swapped;
-		do {
-			swapped = false;
-			for (int i=0; i<getValueCount()-1; i++)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}	
-			for (int i=getValueCount()-2; i>=0; i--)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}	
-		} while (swapped);
-# END SOLUTION
diff --git a/src/lessons/sort/cocktail2/AlgCocktailSort2.fr.html b/src/lessons/sort/cocktail2/AlgCocktailSort2.fr.html
deleted file mode 100644
index 65179e5..0000000
--- a/src/lessons/sort/cocktail2/AlgCocktailSort2.fr.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<h1>Le tri à bulle et variantes</h1>
-
-<h2>CocktailSort2</h2>
-
-<p>Nous allons appliquer la même optimisation que BubbleSort2 à
-CocktailSort. Il nous faut nous souvenir des bornes du tableau pas encore
-trié, et le parcourir alternativement de droite à gauche et de gauche à
-droite:</p>
-<pre>
-debut=0; fin=lgr-2
-Faire
-  Pour tout i dans [debut,fin], faire:
-    si i et i+1 doivent être échangées, le faire
-  fin--
-  Pour tout i dans [fin, debut] en descendant, faire:
-    si i et i+1 doivent être échangées, le faire
-  debut++
-tant qu'au moins l'un des parcours a inversé un élément
-</pre>
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail2/AlgCocktailSort2.html b/src/lessons/sort/cocktail2/AlgCocktailSort2.html
deleted file mode 100644
index 104190e..0000000
--- a/src/lessons/sort/cocktail2/AlgCocktailSort2.html
+++ /dev/null
@@ -1,19 +0,0 @@
-<h1>CocktailSort and variations</h1>
-
-<h2>CocktailSort2</h2>
-
-<p>We will now apply to CocktailSort the same optimization than BubbleSort2 did
-to BubbleSort. We must remember the limits of the array part not being
-sorted yet, and traverse it alternatively from left to right and from right
-to left:</p>
-<pre>
-beg=0; end=len-2
-do
-  For all Pour i in [beg,end], do:
-      If cells i and i+1 must be swapped, do it    
-  end--
-  For all Pour i in [beg,end] (downwards), do:
-      If cells i and i+1 must be swapped, do it    
-  beg++
-while at least one of the traversal swapped an element
-</pre>
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail2/AlgCocktailSort2.java b/src/lessons/sort/cocktail2/AlgCocktailSort2.java
deleted file mode 100644
index e9d393d..0000000
--- a/src/lessons/sort/cocktail2/AlgCocktailSort2.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package lessons.sort.cocktail2;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.sort.SortingEntity;
-import jlm.universe.sort.SortingWorld;
-
-public class AlgCocktailSort2 extends ExerciseTemplated {
-	
-	public AlgCocktailSort2(Lesson lesson) {
-		super(lesson);
-		
-		SortingWorld[] myWorlds = new SortingWorld[2];
-		myWorlds[0] = new SortingWorld("Functional test",10);
-		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
-		
-		for ( int i = 0 ; i < myWorlds.length ; i++)
-			new SortingEntity("Cocktail maker 1",myWorlds[i]);
-
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/sort/cocktail2/AlgCocktailSort2Entity.java b/src/lessons/sort/cocktail2/AlgCocktailSort2Entity.java
deleted file mode 100644
index a63c4c7..0000000
--- a/src/lessons/sort/cocktail2/AlgCocktailSort2Entity.java
+++ /dev/null
@@ -1,37 +0,0 @@
-package lessons.sort.cocktail2;
-
-import jlm.universe.sort.SortingEntity;
-
-public class AlgCocktailSort2Entity extends SortingEntity {
-
-	public void run() {
-		this.cocktailSort2();
-	}
-
-	/* BEGIN TEMPLATE */
-	public void cocktailSort2() {
-		/* BEGIN SOLUTION */
-		boolean swapped;
-		int begin=0;
-		int end=getValueCount()-2;
-		do {
-			swapped = false;
-			for (int i=begin; i<=end; i++)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}
-			end--;
-			for (int i=end; i>=begin; i--)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}
-			begin++;
-		} while (swapped && end-begin>1);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-}
-
diff --git a/src/lessons/sort/cocktail2/AlgCocktailSort2Entity.py b/src/lessons/sort/cocktail2/AlgCocktailSort2Entity.py
deleted file mode 100644
index 075c112..0000000
--- a/src/lessons/sort/cocktail2/AlgCocktailSort2Entity.py
+++ /dev/null
@@ -1,20 +0,0 @@
-# BEGIN SOLUTION 
-		boolean swapped;
-		int begin=0;
-		int end=getValueCount()-2;
-		do {
-			swapped = false;
-			for (int i=begin; i<=end; i++)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}	
-			end--;
-			for (int i=end; i>=begin; i--)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}
-			begin++;
-		} while (swapped && end-begin>1);
-# END SOLUTION
diff --git a/src/lessons/sort/cocktail3/AlgCocktailSort3.fr.html b/src/lessons/sort/cocktail3/AlgCocktailSort3.fr.html
deleted file mode 100644
index b592cf8..0000000
--- a/src/lessons/sort/cocktail3/AlgCocktailSort3.fr.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<h1>Le tri à bulle et variantes</h1>
-
-<h2>CocktailSort3</h2>
-
-<p>Même si la complexité algorithmique de CocktailSort2 est la même que le tri
-à bulle, il semble bien mieux s'en tirer en pratique. On peut encore
-l'améliorer un tout petit peu en arretant tout si le parcours dans l'ordre
-croissant n'a rien inversé, sans faire le parcours dans l'ordre
-descroissant. De même, on peut quiter si le parcours croissant a inversé des
-choses, mais pas le parcours décroissant.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail3/AlgCocktailSort3.html b/src/lessons/sort/cocktail3/AlgCocktailSort3.html
deleted file mode 100644
index ae49725..0000000
--- a/src/lessons/sort/cocktail3/AlgCocktailSort3.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<h1>CocktailSort and variations</h1>
-
-<h2>CocktailSort3</h2>
-
-<p>Even if the asymptotic complexity of CocktailSort2 is the same than the one
-of BubbleSort, it seem to perform better in practice. It is even possible to
-improve a bit further by stopping it if the first traversal didn't found
-anything to swap, without achieving the downwards traversal. Likewise, we
-can stop if the upward traversal found something to swap, but not the
-downwards one.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/cocktail3/AlgCocktailSort3.java b/src/lessons/sort/cocktail3/AlgCocktailSort3.java
deleted file mode 100644
index 4d2f74b..0000000
--- a/src/lessons/sort/cocktail3/AlgCocktailSort3.java
+++ /dev/null
@@ -1,22 +0,0 @@
-package lessons.sort.cocktail3;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.sort.SortingEntity;
-import jlm.universe.sort.SortingWorld;
-
-public class AlgCocktailSort3 extends ExerciseTemplated {
-	
-	public AlgCocktailSort3(Lesson lesson) {
-		super(lesson);
-		
-		SortingWorld[] myWorlds = new SortingWorld[2];
-		myWorlds[0] = new SortingWorld("Functional test",10);
-		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
-
-		for ( int i = 0 ; i < myWorlds.length ; i++)
-			new SortingEntity("Cocktail maker 3",myWorlds[i]);
-
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/sort/cocktail3/AlgCocktailSort3Entity.java b/src/lessons/sort/cocktail3/AlgCocktailSort3Entity.java
deleted file mode 100644
index bfae5ca..0000000
--- a/src/lessons/sort/cocktail3/AlgCocktailSort3Entity.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package lessons.sort.cocktail3;
-
-import jlm.universe.sort.SortingEntity;
-
-public class AlgCocktailSort3Entity extends SortingEntity {
-
-	public void run() {
-		this.cocktailSort3();
-	}
-
-	/* BEGIN TEMPLATE */
-	public void cocktailSort3() {
-		/* BEGIN SOLUTION */
-		boolean swapped;
-		int begin=0;
-		int end=getValueCount()-2;
-		do {
-			swapped = false;
-			for (int i=begin; i<=end; i++)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}
-			if (!swapped) {
-				return;
-			}
-			swapped=false;
-			end--;
-			for (int i=end; i>=begin; i--)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}
-			begin++;
-		} while (swapped && end-begin>1);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-}
-
diff --git a/src/lessons/sort/cocktail3/AlgCocktailSort3Entity.py b/src/lessons/sort/cocktail3/AlgCocktailSort3Entity.py
deleted file mode 100644
index 9fb192c..0000000
--- a/src/lessons/sort/cocktail3/AlgCocktailSort3Entity.py
+++ /dev/null
@@ -1,24 +0,0 @@
-# BEGIN SOLUTION 
-		boolean swapped;
-		int begin=0;
-		int end=getValueCount()-2;
-		do {
-			swapped = false;
-			for (int i=begin; i<=end; i++)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}
-			if (!swapped) {
-				return;
-			}
-			swapped=false;
-			end--;
-			for (int i=end; i>=begin; i--)
-				if (!isSmaller(i,i+1)) {
-					swap(i,i+1);
-					swapped =true;
-				}
-			begin++;
-		} while (swapped && end-begin>1);
-# END SOLUTION
diff --git a/src/lessons/sort/comb/AlgCombSort.fr.html b/src/lessons/sort/comb/AlgCombSort.fr.html
index 3d42500..c396b36 100644
--- a/src/lessons/sort/comb/AlgCombSort.fr.html
+++ b/src/lessons/sort/comb/AlgCombSort.fr.html
@@ -1,18 +1,16 @@
-<h1>Tris divers</h1>
-
-<h2>CombSort</h2>
+<h1>Tri à peigne</h1>
  
 <p>Nous avons vu que le tri cocktail permet d'améliorer un peu les choses pour
 les tortues (ie, les petites valeurs près de la fin du tableau), mais on
-peut faire mieux. CombSort revient à leur faire prendre un racourci: Au lieu
-de comparer les valeurs adjacentes, on compare des valeurs séparés par un
-écart plus grand que 1. Ainsi, les tortues vont se déplacer de <i>ecart</i>
-cases à chaque parcours. Bien entendu, il faut appliquer l'algorithme avec
-des écarts de plus en plus petit et terminer avec <i>ecart=1</i> pour
-s'assurer que le tableau est entièrement trié à la fin. Choisir comment
-réduire l'écart entre les parcours est une question difficile (voir
-wikipédia en anglais sur le thème), mais en pratique, le diviser par 1.3 à
-chaque fois amène de bons résultats. Voici le pseudo-code correspondant :</p>
+peut faire mieux. Le tri à peigne revient à leur faire prendre un
+racourci : Au lieu de comparer les valeurs adjacentes, on compare des
+valeurs séparés par un écart plus grand que 1. Ainsi, les tortues vont se
+déplacer de <i>ecart</i> cases à chaque parcours. Bien entendu, il faut
+appliquer l'algorithme avec des écarts de plus en plus petit et terminer
+avec <i>ecart=1</i> pour s'assurer que le tableau est entièrement trié à la
+fin. Choisir comment réduire l'écart entre les parcours est une question
+difficile (voir wikipédia), mais en pratique, le diviser par 1.3 à chaque
+fois amène de bons résultats. Voici le pseudo-code correspondant :</p>
  
  <pre>
  ecart = lgr;
diff --git a/src/lessons/sort/comb/AlgCombSort.html b/src/lessons/sort/comb/AlgCombSort.html
index 9a5a51c..420791b 100644
--- a/src/lessons/sort/comb/AlgCombSort.html
+++ b/src/lessons/sort/comb/AlgCombSort.html
@@ -1,6 +1,4 @@
-<h1>Miscellaneous sorting</h1>
-
-<h2>CombSort</h2>
+<h1>CombSort</h1>
  
 <p>We saw that CocktailSort improve a bit for turtles (i.e. small values near to
 the end of the array), but it is still possible to achieve better. ComboSort
diff --git a/src/lessons/sort/comb/AlgCombSort11.fr.html b/src/lessons/sort/comb/AlgCombSort11.fr.html
new file mode 100644
index 0000000..04e60fc
--- /dev/null
+++ b/src/lessons/sort/comb/AlgCombSort11.fr.html
@@ -0,0 +1,8 @@
+<h1>Tri à peigne 11</h1>
+ 
+<p>Les auteurs de l'algorithme du tri à peigne ont constaté que l'on améliore
+les performances en s'assurant que les dernières valeurs de l'écart sont
+(11, 8, 6, 4, 3, 2, 1) plutôt que (9, 6, 4, 3, 2, 1) ou (10, 7, 5, 3, 2,
+1). Reprenez donc le code du tri à peigne, et indiquez juste après la mise à
+jour de l'écart que si la valeur est 9 ou 10, il faut utiliser 11 à la
+place.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/comb/AlgCombSort11.html b/src/lessons/sort/comb/AlgCombSort11.html
new file mode 100644
index 0000000..9f477a3
--- /dev/null
+++ b/src/lessons/sort/comb/AlgCombSort11.html
@@ -0,0 +1,7 @@
+<h1>CombSort11</h1>
+ 
+<p>The authors of this algorithm observed that the performance is increased if
+we make sure that the last values of the gap are (11, 8, 6, 4, 3, 2, 1)
+rather than (9, 6, 4, 3, 2, 1) or (10, 7, 5, 3, 2, 1). Rework the code of
+CombSort to ensure just after the gap update that if it is 9 or 10, we
+should use 11 instead.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/comb/AlgCombSort11.java b/src/lessons/sort/comb/AlgCombSort11.java
new file mode 100644
index 0000000..d6353fc
--- /dev/null
+++ b/src/lessons/sort/comb/AlgCombSort11.java
@@ -0,0 +1,23 @@
+package lessons.sort.comb;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.sort.SortingEntity;
+import jlm.universe.sort.SortingWorld;
+
+public class AlgCombSort11 extends ExerciseTemplated {
+
+	public AlgCombSort11(Lesson lesson) {
+		super(lesson);
+		
+		SortingWorld[] myWorlds = new SortingWorld[2];
+		myWorlds[0] = new SortingWorld("Functional test",10);
+		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
+		 
+		for ( int i = 0 ; i < myWorlds.length ; i++)
+			new SortingEntity("CombSort11",myWorlds[i]);
+
+		setup(myWorlds);
+	}
+
+}
diff --git a/src/lessons/sort/comb/AlgCombSort11Entity.java b/src/lessons/sort/comb/AlgCombSort11Entity.java
new file mode 100644
index 0000000..14375c8
--- /dev/null
+++ b/src/lessons/sort/comb/AlgCombSort11Entity.java
@@ -0,0 +1,34 @@
+package lessons.sort.comb;
+
+import jlm.universe.sort.SortingEntity;
+
+public class AlgCombSort11Entity extends SortingEntity {
+
+	public void run() {
+		this.combSort11();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void combSort11() {
+		/* BEGIN SOLUTION */
+		int gap = getValueCount();
+		boolean swapped;
+		do {
+			if (gap>1) {
+				gap /= 1.3;
+				if (gap == 10 || gap == 9)
+					gap = 11;
+			}
+			swapped = false;
+			for (int i=0; i+gap<getValueCount(); i++)
+				if (!isSmaller(i,i+gap)) {
+					swap(i,i+gap);
+					swapped =true;
+				}	
+		} while (gap>1 || swapped);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
+
diff --git a/src/lessons/sort/comb/AlgCombSort11Entity.py b/src/lessons/sort/comb/AlgCombSort11Entity.py
new file mode 100644
index 0000000..bc3633b
--- /dev/null
+++ b/src/lessons/sort/comb/AlgCombSort11Entity.py
@@ -0,0 +1,16 @@
+# BEGIN SOLUTION 
+gap = getValueCount()
+swapped = True
+while gap > 1 or swapped:
+	if gap > 1:
+		gap = int( gap / 1.3)
+	if gap == 10 or gap == 9:
+		gap = 11
+	swapped = False
+	i = 0
+	while i+gap <  getValueCount():
+		if not isSmaller(i,i+gap):
+			swap(i, i+gap)
+			swapped = True
+		i += 1
+# END SOLUTION
diff --git a/src/lessons/sort/comb/AlgCombSortEntity.py b/src/lessons/sort/comb/AlgCombSortEntity.py
index 377662a..c1df826 100644
--- a/src/lessons/sort/comb/AlgCombSortEntity.py
+++ b/src/lessons/sort/comb/AlgCombSortEntity.py
@@ -1,14 +1,14 @@
 # BEGIN SOLUTION
-		int gap = getValueCount();
-		boolean swapped;
-		do {
-			if (gap>1) 
-	            gap /= 1.3;
-			swapped = false;
-			for (int i=0; i+gap<getValueCount(); i++)
-				if (!isSmaller(i,i+gap)) {
-					swap(i,i+gap);
-					swapped =true;
-				}	
-		} while (gap>1 || swapped);
+gap = getValueCount()
+swapped = True
+while gap > 1 or swapped:
+	if gap > 1:
+		gap = int( gap / 1.3)
+	swapped = False
+	i = 0
+	while i+gap <  getValueCount():
+		if not isSmaller(i,i+gap):
+			swap(i, i+gap)
+			swapped = True
+		i += 1
 # END SOLUTION
diff --git a/src/lessons/sort/comb11/AlgCombSort11.fr.html b/src/lessons/sort/comb11/AlgCombSort11.fr.html
deleted file mode 100644
index 2fc8908..0000000
--- a/src/lessons/sort/comb11/AlgCombSort11.fr.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<h1>Tris divers</h1>
-
-<h2>CombSort11</h2>
- 
-<p>Les auteurs de l'algorithme ont constaté que l'on améliore les performances
-en s'assurant que les dernières valeurs de l'écart sont (11, 8, 6, 4, 3, 2,
-1) plutôt que (9, 6, 4, 3, 2, 1) ou (10, 7, 5, 3, 2, 1). Reprenez donc le
-code de CombSort, et indiquez juste après la mise à jour de l'écart que si
-la valeur est 9 ou 10, il faut utiliser 11 à la place.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/comb11/AlgCombSort11.html b/src/lessons/sort/comb11/AlgCombSort11.html
deleted file mode 100644
index 154d465..0000000
--- a/src/lessons/sort/comb11/AlgCombSort11.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<h1>Miscellaneous sorting</h1>
-
-<h2>CombSort11</h2>
- 
-<p>The authors of this algorithm observed that the performance is increased if
-we make sure that the last values of the gap are (11, 8, 6, 4, 3, 2, 1)
-rather than (9, 6, 4, 3, 2, 1) or (10, 7, 5, 3, 2, 1). Rework the code of
-CombSort to ensure just after the gap update that if it is 9 or 10, we
-should use 11 instead.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/comb11/AlgCombSort11.java b/src/lessons/sort/comb11/AlgCombSort11.java
deleted file mode 100644
index a6e7030..0000000
--- a/src/lessons/sort/comb11/AlgCombSort11.java
+++ /dev/null
@@ -1,23 +0,0 @@
-package lessons.sort.comb11;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.sort.SortingEntity;
-import jlm.universe.sort.SortingWorld;
-
-public class AlgCombSort11 extends ExerciseTemplated {
-
-	public AlgCombSort11(Lesson lesson) {
-		super(lesson);
-		
-		SortingWorld[] myWorlds = new SortingWorld[2];
-		myWorlds[0] = new SortingWorld("Functional test",10);
-		myWorlds[1] = new SortingWorld("Performance test (150 elms)",150);
-		 
-		for ( int i = 0 ; i < myWorlds.length ; i++)
-			new SortingEntity("CombSort11",myWorlds[i]);
-
-		setup(myWorlds);
-	}
-
-}
diff --git a/src/lessons/sort/comb11/AlgCombSort11Entity.java b/src/lessons/sort/comb11/AlgCombSort11Entity.java
deleted file mode 100644
index 717d56f..0000000
--- a/src/lessons/sort/comb11/AlgCombSort11Entity.java
+++ /dev/null
@@ -1,34 +0,0 @@
-package lessons.sort.comb11;
-
-import jlm.universe.sort.SortingEntity;
-
-public class AlgCombSort11Entity extends SortingEntity {
-
-	public void run() {
-		this.combSort11();
-	}
-
-	/* BEGIN TEMPLATE */
-	public void combSort11() {
-		/* BEGIN SOLUTION */
-		int gap = getValueCount();
-		boolean swapped;
-		do {
-			if (gap>1) {
-				gap /= 1.3;
-				if (gap == 10 || gap == 9)
-					gap = 11;
-			}
-			swapped = false;
-			for (int i=0; i+gap<getValueCount(); i++)
-				if (!isSmaller(i,i+gap)) {
-					swap(i,i+gap);
-					swapped =true;
-				}	
-		} while (gap>1 || swapped);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-}
-
diff --git a/src/lessons/sort/comb11/AlgCombSort11Entity.py b/src/lessons/sort/comb11/AlgCombSort11Entity.py
deleted file mode 100644
index 305305a..0000000
--- a/src/lessons/sort/comb11/AlgCombSort11Entity.py
+++ /dev/null
@@ -1,17 +0,0 @@
-# BEGIN SOLUTION 
-		int gap = getValueCount();
-		boolean swapped;
-		do {
-			if (gap>1) {
-	            gap /= 1.3;
-	            if (gap == 10 || gap == 9)
-	                gap = 11;
-			}
-			swapped = false;
-			for (int i=0; i+gap<getValueCount(); i++)
-				if (!isSmaller(i,i+gap)) {
-					swap(i,i+gap);
-					swapped =true;
-				}	
-		} while (gap>1 || swapped);
-# END SOLUTION
diff --git a/src/lessons/sort/gnome/AlgGnomeSort.fr.html b/src/lessons/sort/gnome/AlgGnomeSort.fr.html
index 8c4c85d..df0b844 100644
--- a/src/lessons/sort/gnome/AlgGnomeSort.fr.html
+++ b/src/lessons/sort/gnome/AlgGnomeSort.fr.html
@@ -1,6 +1,4 @@
-<h1>Tris divers</h1>
-
-<h2>GnomeSort</h2>
+<h1>Tri du gnome</h1>
 
 <p>Le tri du gnome s'apparente au tri par insertion, à ceci près que les
 éléments sont déplacés par une série d'échange comme dans le tri à bulle. Le
@@ -8,12 +6,15 @@ nom vient du comportement supposé des gnomes des jardins quand ils rangent
 une série de pots de fleurs. Voici la description de l'algorithme par son
 auteur:</p>
 
-<p>L'algorithme de tri Gnome repose sur la manière habituelle de travailler des
-Nains de Jardin Hollandais Garden(Du.: tuinkabouter). Voici comment les
-nains de jardin trient une ligne de pots de fleurs.Le nain regarde le pot de
-fleur qui est à côté de lui et il regarde également le pot de fleurs
+<p>L'algorithme de tri du gnome repose sur la manière habituelle de travailler
+des
+nains de jardin pour trier une ligne de pots de fleurs: Le nain regarde le
+pot
+de fleur qui est à côté de lui et il regarde également le pot de fleurs
 précédent; si ces deux pots sont alignés dans le bon ordre, le nain se
-déplace en avant d'un pot de fleurs, sinon il les échange et se déplace en
-arrière d'un pot de fleur. Condition d'arrêt : si il n'y a pas de pot de
-fleurs précédent, le nain avance ; si il n'y a pas de pot suivant alors il a
+déplace
+en avant d'un pot de fleurs, sinon il les échange et se déplace en arrière
+d'un
+pot de fleur. Condition aux limites : si il n'y a pas de pot de fleurs
+précédent, le nain avance ; si il n'y a pas de pot suivant alors il a
 terminé sa tâche.</p>
diff --git a/src/lessons/sort/gnome/AlgGnomeSort.html b/src/lessons/sort/gnome/AlgGnomeSort.html
index 7ef8ff9..ae5ab36 100644
--- a/src/lessons/sort/gnome/AlgGnomeSort.html
+++ b/src/lessons/sort/gnome/AlgGnomeSort.html
@@ -1,6 +1,4 @@
-<h1>Miscellaneous sorting</h1>
-
-<h2>GnomeSort</h2>
+<h1>GnomeSort</h1>
 
 <p>The Gnome sort is similar to insertion sort, but the elements are moved in
 position by a serie of swaps just like in bubble sort. It is named after the
diff --git a/src/lessons/sort/gnome/AlgGnomeSortEntity.py b/src/lessons/sort/gnome/AlgGnomeSortEntity.py
index f110e04..d66c57d 100644
--- a/src/lessons/sort/gnome/AlgGnomeSortEntity.py
+++ b/src/lessons/sort/gnome/AlgGnomeSortEntity.py
@@ -1,13 +1,11 @@
 # BEGIN SOLUTION
-		int i=0;
-		while (i<getValueCount()-1) {
-			if (isSmaller(i,i+1))
-				i++;
-			else {
-				swap(i,i+1);
-				i--;
-			}
-			if (i==-1)
-				i=0;
-		}
+i = 0
+while i < getValueCount()-1:
+	if isSmaller(i,i+1):
+		i += 1
+	else:
+		swap(i,i+1)
+		i -=  1
+	if i == -1:
+		i=0
 # END SOLUTION
diff --git a/src/lessons/sort/icon.png b/src/lessons/sort/icon.png
new file mode 100644
index 0000000..d6a50ab
Binary files /dev/null and b/src/lessons/sort/icon.png differ
diff --git a/src/lessons/sort/insertion/AlgInsertionSort.fr.html b/src/lessons/sort/insertion/AlgInsertionSort.fr.html
index e655f71..7366134 100644
--- a/src/lessons/sort/insertion/AlgInsertionSort.fr.html
+++ b/src/lessons/sort/insertion/AlgInsertionSort.fr.html
@@ -1,11 +1,6 @@
-<h1>Algorithme par insertion et variantes</h1>
+<h1>Tri par insertion</h1>
 
 <p>
-Cet exercice vous permet d'expérimenter avec le tri par insertion et ses
-variantes les plus classiques.
-</p>
-<h2>InsertionSort</h2>
-<p>
 Ce tri est relativement simple à comprendre et à écrire, même s'il n'offre
 pas les meilleures performances possibles.  Il s'agit d'un algorithme
 quadratique (complexité asymptotique en O(n2)), mais il est plus efficace en
diff --git a/src/lessons/sort/insertion/AlgInsertionSort.html b/src/lessons/sort/insertion/AlgInsertionSort.html
index 6e742e2..0f7bbe2 100644
--- a/src/lessons/sort/insertion/AlgInsertionSort.html
+++ b/src/lessons/sort/insertion/AlgInsertionSort.html
@@ -1,11 +1,6 @@
-<h1>Insertion algorithms and variations</h1>
+<h1>InsertionSort</h1>
 
 <p>
-This exercise allows you to experiment with the insertion sort and its major
-variations.
-</p>
-<h2>InsertionSort</h2>
-<p>
 This sorting algorithm is quite simple to understand and write, even if it
 is not as efficient as possible. Its asymptotic complexity is in O(n2), but
 it is more efficient in practice (linear in best case, ie when the array is
diff --git a/src/lessons/sort/insertion/AlgInsertionSortEntity.py b/src/lessons/sort/insertion/AlgInsertionSortEntity.py
index dc2422c..57c00e0 100644
--- a/src/lessons/sort/insertion/AlgInsertionSortEntity.py
+++ b/src/lessons/sort/insertion/AlgInsertionSortEntity.py
@@ -1,5 +1,5 @@
 # BEGIN SOLUTION
-for i in range(getValueCount()):
+for i in range(1,getValueCount()):
   value = getValue(i)
   j = i
   while j>0 and not isSmallerThan(j-1,value):
diff --git a/src/lessons/sort/pancake/BasicPancake.fr.html b/src/lessons/sort/pancake/BasicPancake.fr.html
new file mode 100644
index 0000000..a0dc2df
--- /dev/null
+++ b/src/lessons/sort/pancake/BasicPancake.fr.html
@@ -0,0 +1,47 @@
+<h1>Trier des crêpes</h1>
+
+<p>Le problème du tri des crêpes est un puzzle simple où vous avez une pile de
+crêpes, toutes de taille différente. Le crêpier étant légèrement
+psychorigide,
+il déteste quand ses crêpes ne sont pas bien ordonnées dans l'assiette. Il
+ne se
+sent bien que quand elles sont bien rangées, avec les petites au dessus des
+grandes. Comme tous les crêpiers, il est passé maître dans l'art du
+retournement
+de crêpes à la spatule. Il peut retourner une crêpe au sommet de la pile, ou
+même plusieurs à la fois. Le truc est qu'il n'a qu'une seule assiette et que
+la
+table est trop sale pour poser des crêpes dessus, même temporairement. La
+seule
+opération autorisée est alors de retourner un certain nombre de crêpes au
+sommet
+de la pile.</p>
+
+<p>Vous devez aider ce pauvre homme à trier sa pile en retournant des
+crêpes. Chaque crêpe est définie par son rayon et son rang dans la pile. La
+pile
+la plus basse est de rang 0, et celle placée au dessus d'elle est de rang 1.</p>
+
+<p>Il est conseillé de commencer par jouer physiquement avec des bouts de
+papier ou
+de carton pour bien comprendre le problème. C'est même l'une des activités
+que
+j'utilise dans mon projet SMN (Sciences Manuelles du Numérique) pour
+introduire
+le concept d'algorithme aux débutants curieux de notre science. Pour plus
+d'information, allez visiter le site du projet:
+http://www.loria.fr/~quinson/Mediation/SMN/ </p> 
+
+<p><div class="tip" id="tip-1" alt="Je suis perdu, j'ai besoin d'aide.">
+Vous devez tout d'abord parvenir à placer la plus grande crêpe en bas de la
+pile et ensuite placer celle juste plus petite au dessus, puis celle plus
+petite et ainsi de suite. 
+</div></p>
+ 
+<p><div class="tip" id="tip-2" alt="Ce premier indice n'était pas suffisant, j'ai besoin de plus d'aide.">
+Il vous faut donc amener la plus grande des crêpes tout en bas de la pile. <br/>
+Est ce que vous pouvez imaginer une situation où il est facile d'emener
+cette satanée grande crêpe tout en bas ?<br/>
+Et comment pourriez vous parvenir à cette situation à partir de la situation
+courante?   
+</div></p>
diff --git a/src/lessons/sort/pancake/BasicPancake.html b/src/lessons/sort/pancake/BasicPancake.html
new file mode 100644
index 0000000..11cd097
--- /dev/null
+++ b/src/lessons/sort/pancake/BasicPancake.html
@@ -0,0 +1,31 @@
+<h1>Pancake Sorting</h1>
+
+<p>The pancake sorting problem this is a simple puzzle where you have a set of pancakes, 
+each of differing size. The chef cooking the pancake is a bit psychorigid: he hates when the 
+pancakes are not correctly sorted on the plate. He loves when they are correctly ordered, 
+with the small ones over the larger ones. As every pancake maker, he masters the pancake 
+flipping with his spatula. He can flip the pancake on top of the stack, or even several 
+pancakes at once. The thing is that he has only one plate and the table is too dirty to
+place pancakes on it, even temporary. The only allowed operation is to flip some pancakes 
+that are on top of the stack.</p>
+
+<p>Your work is to help this poor guy sorting his stack by flipping the pancakes. Each pancake
+is defined by its radius and rank within the stack, where the bottom pancake is at rank 0, and 
+the one above at rank 1.</p>
+
+<p>Note that you can play physically with pieces of paper or wood at first to get the grasp 
+on this problem. This is even one of the activities that I use in my CS-IRL (computer 
+science in real life) project to introduce the concept of algorithm to absolute beginners that
+wonder about our science. More information at http://www.loria.fr/~quinson/Mediation/SMN/ 
+(in French).</p> 
+
+<p><div class="tip" id="tip-1" alt="I don't get it. I need some help.">
+You should try to first move the largest pancake to the bottom, and then the largest but one 
+pancake on top of it, and then the one just smaller on top, and so on. 
+</div></p>
+ 
+<p><div class="tip" id="tip-2" alt="The first tip was not enough. I need another one.">
+So first, you need to move the largest pancake at the bottom of the stack. <br/>
+Can you imagine a situation in which you can easily bring this damn large pancake to the bottom?<br/>
+How could you reach this situation from the current one?   
+</div></p>
diff --git a/src/lessons/sort/pancake/BasicPancake.java b/src/lessons/sort/pancake/BasicPancake.java
new file mode 100644
index 0000000..8e74441
--- /dev/null
+++ b/src/lessons/sort/pancake/BasicPancake.java
@@ -0,0 +1,24 @@
+package lessons.sort.pancake;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.sort.pancake.universe.PancakeEntity;
+import lessons.sort.pancake.universe.PancakeWorld;
+
+public class BasicPancake extends ExerciseTemplated {
+	
+	public BasicPancake(Lesson lesson) {
+		super(lesson);
+	
+		PancakeWorld plate[] = new PancakeWorld[4];
+		plate[0]= new PancakeWorld("5 pancakes",5,false);
+		plate[1]= new PancakeWorld("10 pancakes",10,false);
+		plate[2]= new PancakeWorld("15 pancakes",15,false);
+		plate[3]= new PancakeWorld("30 pancakes",30,false);
+		for ( int i = 0 ; i<4;i++)
+			new PancakeEntity("Pancake Seller",plate[i]);
+
+		setup(plate);
+	}
+
+}
diff --git a/src/lessons/sort/pancake/BasicPancakeEntity.java b/src/lessons/sort/pancake/BasicPancakeEntity.java
new file mode 100644
index 0000000..242501e
--- /dev/null
+++ b/src/lessons/sort/pancake/BasicPancakeEntity.java
@@ -0,0 +1,35 @@
+package lessons.sort.pancake;
+
+import lessons.sort.pancake.universe.PancakeEntity;
+
+public class BasicPancakeEntity extends PancakeEntity {
+
+	public void run() {
+		solve();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void solve() {
+		/* BEGIN SOLUTION */		
+		for ( int rank = getStackSize()-1 ; rank != -1 && !this.isSorted() ; rank-- ) {
+			if ( getPancakeRadius(rank) != rank+1 ) { // Current pancake is still to be sorted
+				int indexBigPancake =-1;
+				for (int currentPancake = 0 ; currentPancake < rank+1; currentPancake++)
+					if ( getPancakeRadius(currentPancake) == rank+1) {
+						indexBigPancake = currentPancake;	// gotcha !
+						break;
+					}
+				
+				if ( indexBigPancake != 0 )
+					flip(indexBigPancake+1);	// putting the pancake at the top
+					
+				if ( rank != 0 )
+					flip(getPancakeRadius(0));	// hit the bottom now !
+			}	
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+
+}
diff --git a/src/lessons/sort/pancake/BasicPancakeEntity.py b/src/lessons/sort/pancake/BasicPancakeEntity.py
new file mode 100644
index 0000000..a98d639
--- /dev/null
+++ b/src/lessons/sort/pancake/BasicPancakeEntity.py
@@ -0,0 +1,13 @@
+# BEGIN SOLUTION
+for pancakeToSort in range(getStackSize()-1, -1, -1):
+	if not getPancakeRadius(pancakeToSort)==pancakeToSort+1: # Current position is not sorted yet
+		indexBigPancake = -1
+		for currentPancake in range(pancakeToSort+1):
+			if getPancakeRadius(currentPancake) == pancakeToSort+1:
+				indexBigPancake = currentPancake
+				break # Gotcha!
+		if indexBigPancake != 0:
+			flip(indexBigPancake+1) # move this large pancake to the top
+		if pancakeToSort != 0:
+			flip(getPancakeRadius(0)) # hit the bottom
+# END SOLUTION
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/BurnedPancake.fr.html b/src/lessons/sort/pancake/BurnedPancake.fr.html
new file mode 100644
index 0000000..609c199
--- /dev/null
+++ b/src/lessons/sort/pancake/BurnedPancake.fr.html
@@ -0,0 +1,6 @@
+<h1>Crêpes brulées</h1>
+
+<p>Coup dur pour le crèpier! Les crêpes ont brulé sur une face! Il est
+strictement impossible qu'il serve une pile de crêpes où l'on voit la face
+brulée! Vous devez absolument l'aider à s'assurer qu'aucune face visible ne
+soit brulée tandis qu'il trie sa pile.</p>  
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/BurnedPancake.html b/src/lessons/sort/pancake/BurnedPancake.html
new file mode 100644
index 0000000..abd0c5b
--- /dev/null
+++ b/src/lessons/sort/pancake/BurnedPancake.html
@@ -0,0 +1,5 @@
+<h1>Burned Pancakes</h1>
+
+<p>Hard blow for the chef! The pancakes got burnt on one side! There is no way he can deliver 
+a stack of pancakes with visibly burnt pancakes! You've got to help him ensuring that no 
+pancake is upside-down while sorting his stack.</p>  
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/BurnedPancake.java b/src/lessons/sort/pancake/BurnedPancake.java
new file mode 100644
index 0000000..3abeb8e
--- /dev/null
+++ b/src/lessons/sort/pancake/BurnedPancake.java
@@ -0,0 +1,24 @@
+package lessons.sort.pancake;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.sort.pancake.universe.PancakeEntity;
+import lessons.sort.pancake.universe.PancakeWorld;
+
+public class BurnedPancake extends ExerciseTemplated {
+
+	public BurnedPancake(Lesson lesson) {
+		super(lesson);
+		
+		PancakeWorld plate[] = new PancakeWorld[4];
+		plate[0]= new PancakeWorld("5 pancakes",5,true);
+		plate[1]= new PancakeWorld("10 pancakes",10,true);
+		plate[2]= new PancakeWorld("15 pancakes",15,true);
+		plate[3]= new PancakeWorld("30 pancakes",30,true);
+		for ( int i = 0 ; i<4;i++)
+			new PancakeEntity("Pancake Seller",plate[i]);
+
+		setup(plate);
+	}
+
+}
diff --git a/src/lessons/sort/pancake/BurnedPancakeEntity.java b/src/lessons/sort/pancake/BurnedPancakeEntity.java
new file mode 100644
index 0000000..b8470cb
--- /dev/null
+++ b/src/lessons/sort/pancake/BurnedPancakeEntity.java
@@ -0,0 +1,44 @@
+package lessons.sort.pancake;
+
+import lessons.sort.pancake.universe.PancakeEntity;
+
+public class BurnedPancakeEntity extends PancakeEntity {
+
+
+	public void run() {
+		this.solve();
+	}
+
+	/* BEGIN TEMPLATE */
+	public void solve() {
+		/* BEGIN SOLUTION */
+		int stackSize = this.getStackSize();
+		for ( int rank = stackSize-1 ; rank != -1 && !isSorted(); rank-- ) {
+			
+			if ( getPancakeRadius(rank)!=rank+1 || isPancakeUpsideDown(rank)) { // current pancake not sorted yet
+				int indexBigPancake =-1;
+				for ( int iter = 0 ; iter < rank+1; iter++)
+					if ( getPancakeRadius(iter) == rank+1) {
+						indexBigPancake = iter;	// gotcha !
+						break;
+					}
+				
+				if ( indexBigPancake != 0 )
+					flip(indexBigPancake+1);	// move that pancake to the top
+					
+				if ( ! ( rank == 0) ) {
+					if (!isPancakeUpsideDown(0)) 
+						flip(1);	// show your dark side to the world
+					flip(getPancakeRadius(0));	// hit the bottom !
+				} else {
+					if (isPancakeUpsideDown(0)) 
+						flip(1);	// show your dark side to the world
+					
+				}
+			}	
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+}
diff --git a/src/lessons/sort/pancake/BurnedPancakeEntity.py b/src/lessons/sort/pancake/BurnedPancakeEntity.py
new file mode 100644
index 0000000..f8fcb89
--- /dev/null
+++ b/src/lessons/sort/pancake/BurnedPancakeEntity.py
@@ -0,0 +1,19 @@
+# BEGIN SOLUTION
+for rank in range(getStackSize()-1,-1,-1):
+	if getPancakeRadius(rank)!=rank+1 or isPancakeUpsideDown(rank) : # this pancake is not sorted yet
+		indexBigPancake = -1
+		for currentPancake in range(rank+1):
+			if getPancakeRadius(currentPancake) == rank+1:
+				indexBigPancake = currentPancake
+				break
+		if indexBigPancake != 0:
+			flip(indexBigPancake+1)   # Move that pancake to the top
+			
+		if rank != 0:
+			if not isPancakeUpsideDown(0):
+				flip(1)                   # Show your dark side to the moon
+			flip(getPancakeRadius(0)) # Move away	
+		else:
+			if isPancakeUpsideDown(0):
+				flip(1)                   # Show your dark side to the moon
+# END SOLUTION
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/GatesPancake.fr.html b/src/lessons/sort/pancake/GatesPancake.fr.html
new file mode 100644
index 0000000..c42e248
--- /dev/null
+++ b/src/lessons/sort/pancake/GatesPancake.fr.html
@@ -0,0 +1,110 @@
+<h1>Tri rapide de crêpes</h1>
+
+<p>Contrairement aux problèmes classiques de tri, l'opération coûteuse à
+économiser n'est pas la comparaison des valeurs, mais le retournement des
+crêpes. Dans cet exercice, nous allons explorer un autre algorithme
+permettant de réduire le nombre de retournements nécessaires pour trier la
+pile. Fait amusant, cet algorithme a été proposé pour la première fois par
+Bill Gates, avant qu'il n'invente Windows.</p>
+
+<p>L'idée de base est de faire grandir des séquences de crêpes triées, pas
+forcément en commençant du bas de la pile. On dira qu'un ensemble de crêpes
+dans l'ordre constitue un <b>block</b> tandis qu'une crêpe qui n'est pas
+dans un bloc est dite <b>libre</b>. L'algorithme considère la crêpe tout en
+haut de la pile, dont la taille est notée <code>t</code>, et cherche les
+deux crêpes de taille <code>t-1</code> et <code>t+1</code> (le voisin ainsi
+considéré est noté <code>t+o</code>). Huit cas sont possibles alors :</p>
+
+<ul>
+<li><b>Cas a</b>: <code>t</code> et <code>t+o</code> sont tous les deux
+libres. Ils sont alors fusionnés en un retournement.<br/>
+<div align="center"><img src="./img/gates-a.png"/></div>
+</li></ul>
+
+<ul><li><b>Cas b</b>: <code>t</code> est libre, et <code>t+o</code> est le premier
+élément d'un bloc. Ils sont fusionnés en un bloc.<br/>
+<div align="center"><img src="./img/gates-b.png"/></div>
+</li></ul>
+
+<ul>
+<li><b>Cas c</b>: <code>t</code> est libre, mais <code>t-1</code> et
+<code>t+1</code> sont tous les deux les derniers éléments de blocs. Ces deux
+blocs ainsi que <code>t</code> sont tous fusionnés en 4
+retournements. Prenez garde, si <code>t-1</code> ou <code>t+1</code>
+n'existe pas (parce que <code>t</code> est 0 ou max), seulement deux de ces
+retournements sont nécessaires.
+<br/>
+<div align="center"><img src="./img/gates-c.png"/></div>
+</li></ul>
+
+<ul>
+<li><b>Cas d</b>: <code>t</code> est dans un bloc, mais <code>t+o</code> est
+libre. Ils sont fusionnés en un retournement.<br/>
+<div align="center"><img src="./img/gates-d.png"/></div>
+</li></ul>
+
+<ul>
+<li><b>Cas e</b>: <code>t</code> est dans un bloc, et <code>t+o</code> est le
+premier élément d'un bloc. Ils sont fusionnés en un retournement.<br/>
+<div align="center"><img src="./img/gates-e.png"/></div>
+</li></ul>
+
+<ul><li><b>Cas f</b>: <code>t</code> est dans un bloc, et <code>t+o</code> est le
+dernier élément d'un autre bloc. Ils sont fusionnés en trois retournements
+comme suit.<br/>
+<div align="center"><img src="./img/gates-f.png"/></div></li></ul>
+
+<ul><li><b>Cas g</b>: <code>t</code> est dans un bloc de taille k+1 (le dernier
+élément est <code>t+ko</code>), <code>t+(k+1)o</code> est soit libre soit le
+dernier élément d'un autre bloc. Les deux blocs sont fusionnés en deux
+retournements:<br/>
+<div align="center"><img src="./img/gates-g.png"/></div><br/></li></ul>
+
+<ul><li><b>Cas h</b>: <code>t</code> est dans un bloc de taille k+1 (le dernier
+élément est <code>t+ko</code>), <code>t+(k+1)o</code> est le premier élément
+d'un autre bloc (la différence avec le cas g est que <code>t+(k+1)o</code>
+est maintenant le <i>premier</i> élément de son bloc). Les deux blocs sont
+fusionnés en deux retournements:<br/>
+<div align="center"><img src="./img/gates-h.png"/></div>
+</li></ul>
+
+<ul><li><b>Cas i</b>: <code>t</code> est dans un bloc de taille <code>n</code>, qui
+contient donc toutes les crêpes. Si <code>t</code> n'est pas 1, toute la
+pile est retournée. Ensuite, l'algorithme s'arrête.</li></ul>    
+
+<p>Chaque itération augmente la taille des blocs, donc la terminaison de
+l'algorithme est certaine. Une analyse plus fine montre qu'il prend au plus
+<code>(5n+5)/3</code> étapes pour trier la pile. C'est mieux que
+l'algorithme naïf, qui nécessite <code>2n-3</code> étapes pour cela.</p>
+
+<h2>À vous de jouer</h2>
+<p>Vous avez maintenant quasi assez d'informations pour implémenter cet
+algorithme par vous-même. Il faut juste lever les dernières ambiguïtés pour
+que vous implémentiez exactement le même algorithme que la correction. Si
+plusieurs cas s'appliquent à la situation courante, appliquez le
+premier. Par exemple, si les cas a et b s'appliquent (avec <code>t-1</code>
+pour le cas a et <code>t+1</code> pour le cas b), vous devez appliquer les
+instructions du cas <b>a</b>. Si un cas donné s'applique à la fois pour
+<code>t+1</code> et <code>t-1</code>, appliquez le pour <code>t+1</code>.</p>
+
+<p>Cet exercice est plus difficile que ceux que nous avons fait jusque là, et
+il ne serait pas choquant que vous ayez besoin d'un peu plus de temps que
+les autres pour le résoudre. Mais n'abandonnez pas, vous pouvez le faire !</p>
+
+<p><div class="tip" id="tip-1" alt="Heu, j'ai besoin d'un peu d'aide pour commencer.">
+Commencez par écrire des fonctions d'aide, comme <code>estLibre()</code> ou
+<code>estPremier()</code>. Cela simplifiera l'écriture de votre algorithme,
+qui peut être écrit sous une forme très similaire à l'énoncé si vous faites
+les bonnes fonctions d'aide. Factoriser ainsi votre code aide très souvent à
+améliorer la lisibilité du code.
+</div></p>
+
+<p><div class="tip" id="tip-2" alt="Mon code ne fonctionne pas, et je ne sais pas comment le débugger">
+Pour débugger un monde après l'autre, il est préférable d'éviter que les
+affichages de tous les mondes se mélangent. Le plus simple pour cela est
+d'utiliser la méthode <code>isSelected()</code> qui ne renvoi vrai que si le
+monde courant est celui sélectionné dans l'interface. Cela aidera à réduire
+la complexité en résolvant les problèmes les uns après les autres.<br/>
+En particulier, afficher l'état du monde sous forme textuelle à chaque fois
+que vous rentrez dans la boucle principale peut aider.  
+</div></p>
diff --git a/src/lessons/sort/pancake/GatesPancake.html b/src/lessons/sort/pancake/GatesPancake.html
new file mode 100644
index 0000000..d198d6f
--- /dev/null
+++ b/src/lessons/sort/pancake/GatesPancake.html
@@ -0,0 +1,87 @@
+<h1>Faster Pancake Sorting</h1>
+
+<p>Unlike others sorting problem, the expensive operation is not the comparison of values, but
+the flipping of pancakes. In this exercise, we will explore another algorithm that 
+attempt to reduce the amount of stack flipping. The funny side is that this algorithm was first 
+introduced by Bill Gates, before invented Windows.</p>
+
+<p>The basic idea is to grow sequences of sorted pancakes, not necessarily starting from the bottom. 
+We say that a sequence of ordered pancakes constitute a <b>bloc</b> while a pancake that is not part
+of a bloc is said to be <b>free</b>. The algorithm then considers the topmost pancake (of radius 
+<code>t</code>) and search for the <code>t+1</code> or <code>t-1</code> pancakes (the considered 
+neighbor is noted <code>t+o</code>). Eight cases may happen:</p>
+
+<ul>
+<li><b>Case a</b>: Both <code>t</code> and <code>t+o</code> are free. They are then merged in one flip.<br/>
+<div align="center"><img src="./img/gates-a.png"/></div>
+</li></ul>
+
+<ul><li><b>Case b</b>: <code>t</code> is free, and <code>t+o</code> is the first of a block. They are merged in one flip.<br/>
+<div align="center"><img src="./img/gates-b.png"/></div>
+</li></ul>
+
+<ul>
+<li><b>Case c</b>: <code>t</code> is free but both <code>t-1</code> and <code>t+1</code> are the last elements of blocks. 
+Both blocs and <code>t</code> are merged all together in 4 flips. 
+Beware, if either <code>t-1</code> or <code>t+1</code> does not exist (because <code>t</code> is 0 or max), only two flips are mandated.
+<br/>
+<div align="center"><img src="./img/gates-c.png"/></div>
+</li></ul>
+
+<ul>
+<li><b>Case d</b>: <code>t</code> is in a block but <code>t+o</code> is free. They are merged in one flip.<br/>
+<div align="center"><img src="./img/gates-d.png"/></div>
+</li></ul>
+
+<ul>
+<li><b>Case e</b>: <code>t</code> is in a block and <code>t+o</code> is the first element of a block. They are merged in one flip.<br/>
+<div align="center"><img src="./img/gates-e.png"/></div>
+</li></ul>
+
+<ul><li><b>Case f</b>: <code>t</code> is in a block and <code>t+o</code> is the last element of another block. 
+They are merged in 3 flips as follows.<br/>
+<div align="center"><img src="./img/gates-f.png"/></div></li></ul>
+
+<ul><li><b>Case g</b>: <code>t</code> is in a block of length k+1 (the last element is <code>t+ko</code>), <code>t+(k+1)o</code> is either free or the last element of another block. Both blocks are merged in 2 flips:<br/>
+<div align="center"><img src="./img/gates-g.png"/></div><br/></li></ul>
+
+<ul><li><b>Case h</b>: <code>t</code> is in a block of length k+1 (the last element is <code>t+ko</code>), 
+  <code>t+(k+1)o</code> is the first element of another block (the difference with case g is that 
+  <code>t+(k+1)o</code> is now the <i>first</i> element of its block). Both blocks are merged in 2 flips:<br/>
+<div align="center"><img src="./img/gates-h.png"/></div>
+</li></ul>
+
+<ul><li><b>Case i</b>: <code>t</code> is in a block of length <code>n</code> (this block contains all pancakes). 
+If <code>t</code> is not 1, the whole stack is fliped. The algorithm then stops.</li></ul>    
+
+<p>Each iteration increases the size of the blocks, so the algorithm eventually halts in all cases. A finer analysis would show that it takes 
+at most <code>(5n+5)/3</code> steps to sort the stack. That's better than the naïve algorithm, that requires 2n-3 steps.</p>
+
+<h2>Your turn</h2>
+<p>You now have almost enough information to implement this algorithm on your own. We just have to remove the last remaining ambiguities 
+to ensure that you implement exactly the same algorithm that the correction. If several cases apply to your situation, then you 
+should use the first given one. For example, if both cases a and b apply (e.g., with <code>t-1</code> on case <b>a</b> and <code>t+1</code> 
+on case <b>b</b>), then you should apply the flips of case <b>a</b>. If a given case applies for both <code>t+1</code> and <code>t-1</code>,
+then you should apply it to <code>t+1</code>.</p>
+
+<p>Note that it is somehow harder than the other exercises we did so far, so don't be surprised if you need more time to achieve this. 
+But do not give hope, you can do it!</p>
+
+<p><div class="tip" id="tip-1" alt="Well, I need some help to start.">
+First write some helper functions such as <code>isFirst()</code> or
+<code>isFree()</code>. This will simplify your main algorithm
+afterward, that can be written very similarly to the explication
+above with a bunch of if conditions. Factorizing code this way often
+helps making your code more readable.
+</div></p>
+
+<p><div class="tip" id="tip-2" alt="My code keeps failing and I don't know how to debug it.">
+To debug one world after the other and avoid that the messages of all
+worlds get intermixed, you can write your debug function only if the
+method <code>isSelected()</code> returns true. It will be so only for
+the entity that is currently selected in the graphical interface, that
+is probably the world you are currently debugging. This will help breaking the
+difficulty in parts by debugging the situation on after the other.<br/>
+In particular, it may help to print textually the state of the world
+each time you enter the main loop. 
+</div></p>
diff --git a/src/lessons/sort/pancake/GatesPancake.java b/src/lessons/sort/pancake/GatesPancake.java
new file mode 100644
index 0000000..bf21579
--- /dev/null
+++ b/src/lessons/sort/pancake/GatesPancake.java
@@ -0,0 +1,31 @@
+package lessons.sort.pancake;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.sort.pancake.universe.PancakeEntity;
+import lessons.sort.pancake.universe.PancakeWorld;
+
+public class GatesPancake extends ExerciseTemplated {
+	
+	public GatesPancake(Lesson lesson) {
+		super(lesson);
+	
+		PancakeWorld[] plate = new PancakeWorld[] {
+				new PancakeWorld("5 pancakes",new int[] {2,4,5,3,1},false),         // A+ H D-
+				new PancakeWorld("7 pancakes",new int[] {3,6, 1,2,8,5,4,7},false),  // C  E+ Cbis E+ Cbis
+				new PancakeWorld("8 pancakes",new int[] {5,2,7,4,1,6,8,3,},false),  // A+ A+ A+ E+ A- G H
+				new PancakeWorld("9 pancakes",new int[] {4,2,3,7,9,1,5,6,8},false), // B+ Cbis A- D+ E+ H
+				new PancakeWorld("15 pancackes",new int[] {7, 2, 3, 14, 9, 5, 1, 8, 10, 11, 6, 12, 15, 4, 13, },false), // A+ Cbis A+ D+ E+ G A- B+ E+ F- H
+				new PancakeWorld("random 15 pancakes", 15, false),
+				new PancakeWorld("30 pancakes",new int[] 
+						{1, 5, 17, 8, 24, 27, 14, 4, 11, 10, 28, 2, 29, 25, 15, 20, 3, 18, 19, 7, 21, 12, 23, 22, 16, 26, 6, 9, 13, 30, },
+						false),
+						// A+ A+ D+ A+ A+ A- E- A+ C E- A+ A+ A+ D+ D+ E+ D+ F+ F- C B+ F- E+ D+ F+ H E- F+ E+ => miss Cbis and G
+		};
+		for ( int i = 0 ; i<plate.length;i++)
+			new PancakeEntity("Bill",plate[i]);
+
+		setup(plate);
+	}
+
+}
diff --git a/src/lessons/sort/pancake/GatesPancakeEntity.java b/src/lessons/sort/pancake/GatesPancakeEntity.java
new file mode 100644
index 0000000..f79bf26
--- /dev/null
+++ b/src/lessons/sort/pancake/GatesPancakeEntity.java
@@ -0,0 +1,287 @@
+package lessons.sort.pancake;
+
+import lessons.sort.pancake.universe.PancakeEntity;
+import lessons.sort.pancake.universe.PancakeWorld;
+
+
+
+/* This is not exactly the gates algorithm. Here is the original text:
+ * <ul><li><b>Case f</b>: <code>t</code> is in a block of length k+1 (the last element is <code>t+ko</code>), <code>t-o</code>
+ * is the last element of another block and <code>t+(k+1)o</code> is free (there is two differing situation, depending on the relative order of 
+ * <code>t-o</code> and <code>t+(k+1)o</code>. They are merged in 4 flip with the corresponding sequence below.<br/>
+ * <div align="center"><img src="lessons/sort/pancake/gates-f1.png"/></div><br/>
+ * Other possibility when <code>t-o > t+(k+1)o</code>:<br/>
+ * <div align="center"><img src="lessons/sort/pancake/gates-f2.png"/></div></li></ul>
+
+ */
+
+
+public class GatesPancakeEntity extends PancakeEntity {
+
+	public void run() {
+		solve();
+	}
+
+	/* BEGIN HIDDEN */
+	int getRankOf(int size) {
+		for (int rank=0;rank<getStackSize();rank++)
+			if (getPancakeRadius(rank) == size)
+				return rank;
+		return -99; // Well, be robust to border cases 
+	}
+	boolean isFree(int pos) {
+		if (pos == -99)
+			return false;
+		int radius = getPancakeRadius(pos);
+		if (pos>0) {
+			int nextRadius = getPancakeRadius(pos-1);
+			if (nextRadius == radius-1 || nextRadius == radius+1)
+				return false;
+		}
+		if (pos<getStackSize()-1) {
+			int nextRadius = getPancakeRadius(pos+1);
+			if (nextRadius == radius-1 || nextRadius == radius+1)
+				return false;
+		}
+		return true;
+	}
+	boolean isFirst(int pos) {
+		if (pos == -99)
+			return false;
+		int radius = getPancakeRadius(pos);
+		if (pos>0) {
+			int nextRadius = getPancakeRadius(pos-1);
+			if (nextRadius == radius-1 || nextRadius == radius+1)
+				return false;
+		}
+		if (pos<getStackSize()-1) {
+			int nextRadius = getPancakeRadius(pos+1);
+			if (nextRadius == radius-1 || nextRadius == radius+1)
+				return true;
+		}
+		return false;
+	}
+	boolean isLast(int pos) {
+		if (pos == -99)
+			return false;
+		int radius = getPancakeRadius(pos);
+		if (pos<getStackSize()-1) {
+			int nextRadius = getPancakeRadius(pos+1);
+			if (nextRadius == radius-1 || nextRadius == radius+1)
+				return false;
+		}
+		if (pos>0) {
+			int nextRadius = getPancakeRadius(pos-1);
+			if (nextRadius == radius-1 || nextRadius == radius+1)
+				return true;
+		}
+		return false;
+	}
+	int blockLength() {
+		int pos = 0;
+		int radius = getPancakeRadius(pos);
+		int o = getPancakeRadius(pos+1) - radius;
+		
+		if (o != -1 && o != 1) {
+			System.out.println("Asked to compute the block length, but the step o is "+o+" instead of +1 or -1. " +
+					"The length is then 1, but you are violating a precondition somehow");
+			return 1;
+		}
+		
+		while (pos < getStackSize()-1 && getPancakeRadius(pos+1) == radius + o) {
+			pos++;
+			radius += o;
+		}
+		return pos+1;
+	}
+	int debug=0; // 0: silence; 1: which cases; 2: all details
+	/* END HIDDEN */
+	
+	/* BEGIN TEMPLATE */
+	public void solve() {
+		/* BEGIN SOLUTION */
+		/* cruft to search for an instance exercising all transformations */
+		boolean doneA=false;
+		boolean doneB=false;
+		boolean doneC=false;
+		boolean doneD=false;
+		boolean doneE=false;
+		boolean doneF=false;
+		boolean doneG=false;
+		boolean doneH=false;
+		Integer[] origSizes = new Integer[getStackSize()];
+		for (int i=0;i<getStackSize();i++)
+			origSizes[i] = getPancakeRadius(i);
+		/* end of this cruft */
+		
+		int stackSize = getStackSize();
+		
+		if (debug>0) {
+			System.out.print("{");
+			for (int rank=0; rank < stackSize; rank++) 
+				System.out.print(""+getPancakeRadius(rank)+", ");
+			System.out.println("}");
+		}
+		
+		while (true) {
+			int tRadius = getPancakeRadius(0);
+			int posTPlus  = getRankOf(tRadius+1); // returns -99 if non-existent, that is then ignored
+			int posTMinus = getRankOf(tRadius-1); 
+			int posT = 0;
+			
+			if (debug>1) {
+				System.out.println("t Radius: "+tRadius);
+				for (int rank=0; rank < stackSize; rank++) {
+					System.out.print("["+rank+"]="+getPancakeRadius(rank)+"; ");
+
+					if (isFree(rank))
+						System.out.print("free;");
+					else 
+						System.out.print("NON-free;");
+
+					if (isFirst(rank))
+						System.out.print("first; ");
+					else 
+						System.out.print("NON-first; ");
+
+					if (isLast(rank))
+						System.out.print("last; ");
+					else 
+						System.out.print("NON-last; ");
+
+
+					if (rank == posTPlus)
+						System.out.print("t+1; ");
+					if (rank == posTMinus)
+						System.out.print("t-1; ");
+					if (rank == posT)
+						System.out.print("t;" );
+
+					System.out.println();
+				}
+			}
+						
+			if (isFree(posT)) {			
+				if (isFree(posTPlus)) { /* CASE A: t and t+o free */
+					if (debug>0)
+						System.out.println("Case A+");
+					flip(posTPlus);
+					doneA = true;
+				} else if (isFree(posTMinus)) { /* CASE A: t and t-o free */
+					if (debug>0)
+						System.out.println("Case A-");
+					flip(posTMinus);
+					doneA = true;
+					
+				} else if (isFirst(posTPlus)) { /* CASE B: t free, t+o first element */
+					if (debug>0)
+						System.out.println("Case B+");
+					flip(posTPlus);
+					doneB = true;
+				} else if (isFirst(posTMinus)) { /* CASE B: t free, t-o first element */
+					if (debug>0)
+						System.out.println("Case B-");
+					flip(posTMinus);
+					doneB = true;
+
+				} else if (Math.min(posTPlus,posTMinus) != -99) { /* CASE C: t free, but both t+o and t-o are last elements */
+					if (debug>0)
+						System.out.println("Case C");
+					flip(Math.min(posTPlus,posTMinus) );
+					flip(Math.min(posTPlus,posTMinus) - 1);
+					flip(Math.max(posTPlus,posTMinus) + 1);
+					flip(Math.min(posTPlus,posTMinus) - 1);
+					doneC = true;
+					
+				} else {
+					if (debug>0)
+						System.out.println("Case Cbis");
+					flip(Math.max(posTPlus,posTMinus) + 1);
+					flip(Math.max(posTPlus,posTMinus) );
+					doneC = true;
+				}
+				
+			} else { // t is in a block
+				if (blockLength() == stackSize) { // Done!
+					if (tRadius != 1) // all reverse 
+						flip(stackSize);
+					if (doneA && doneB && doneC && doneD && doneE && doneF && doneG && doneH && ((PancakeWorld)world).wasRandom) {
+						System.out.println("BINGO! This instance is VERY interesting as it experiences every cases of the algorithm.\nPLEASE REPORT IT. PLEASE DONT LOSE IT.");
+						System.out.print("{");
+						for (int rank=0; rank < stackSize; rank++) 
+							System.out.print(""+origSizes[rank]+", ");
+						System.out.println("}");
+					}
+					return;
+				}
+				
+				if (isFree(posTPlus)) {          /* CASE D: t in a block, t+1 free */
+					if (debug>0)
+						System.out.println("Case D+");
+					flip(posTPlus);
+					doneD = true;
+
+				} else if (isFree(posTMinus)) {  /* CASE D: t in a block, t-1 free */
+					if (debug>0)
+						System.out.println("Case D-");
+					flip(posTMinus);
+					doneD = true;
+
+				} else if (isFirst(posTPlus)) {  /* CASE E: t in a block, t+1 first element */
+					if (debug>0)
+						System.out.println("Case E+");
+					flip(posTPlus);
+					doneE = true;
+
+				} else if (isFirst(posTMinus)) { /* CASE E: t in a block, t-1 first element */
+					if (debug>0)
+						System.out.println("Case E-");
+					flip(posTMinus);
+					doneE = true;
+
+				} else if (isLast(posTPlus) && posTPlus != 1) { /* CASE F+: t in a block, t+1 last element */
+					doneF = true;
+					if (debug>0)
+						System.out.println("Case F+");
+					flip(blockLength());
+					flip(posTPlus + 1);
+					int newPos = getRankOf(tRadius);
+					if (newPos>0)
+						flip(newPos);
+					
+				} else if (isLast(posTMinus) && posTMinus != 1) { /* CASE F-: t in a block, t-1 last element */
+					doneF = true;
+					if (debug>0)
+						System.out.println("Case F-");
+					flip(blockLength());
+					flip(posTMinus + 1);
+					int newPos = getRankOf(tRadius);
+					if (newPos>0)
+						flip(newPos);
+				} else {
+					int k = blockLength()-1;
+					int o = getPancakeRadius(1) - tRadius;
+					int pos = getRankOf(tRadius+(k+1)*o);
+					if (isFree(pos) || isFirst(pos)) {
+						doneG = true;
+						if (debug>0)
+							System.out.println("Case G");
+						flip(k+1);
+						flip(pos);
+					} else {
+						doneH = true;
+						if (debug>0)
+							System.out.println("Case H");
+						flip(pos+1);
+						flip(getRankOf(tRadius+k*o));
+					}
+				}
+			}
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+
+}
+ 
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/GatesPancakeEntity.py b/src/lessons/sort/pancake/GatesPancakeEntity.py
new file mode 100644
index 0000000..51f90ad
--- /dev/null
+++ b/src/lessons/sort/pancake/GatesPancakeEntity.py
@@ -0,0 +1,191 @@
+# BEGIN SOLUTION
+
+def getRankOf(size):
+	for rank in range(getStackSize()):
+		if getPancakeRadius(rank) == size:
+			return rank
+	return -99 # be robust to border cases
+
+def isFree(pos):
+	if pos == -99:
+		return False
+	radius = getPancakeRadius(pos)
+	if pos>0 :
+		nextRadius = getPancakeRadius(pos-1)
+		if nextRadius == radius-1 or nextRadius == radius+1:
+			return False	
+	if pos<getStackSize()-1:
+		nextRadius = getPancakeRadius(pos+1)
+		if nextRadius == radius-1 or nextRadius == radius+1:
+			return False	
+	return True
+
+def isFirst(pos):
+	if pos == -99:
+		return False
+	radius = getPancakeRadius(pos)
+	if pos>0 :
+		nextRadius = getPancakeRadius(pos-1)
+		if nextRadius == radius-1 or nextRadius == radius+1:
+			return False	
+	if pos<getStackSize()-1:
+		nextRadius = getPancakeRadius(pos+1)
+		if nextRadius == radius-1 or nextRadius == radius+1:
+			return True	
+	return False
+
+def isLast(pos):
+	if pos == -99:
+		return False
+	radius = getPancakeRadius(pos)
+	if pos<getStackSize()-1:
+		nextRadius = getPancakeRadius(pos+1)
+		if nextRadius == radius-1 or nextRadius == radius+1:
+			return False	
+	if pos>0 :
+		nextRadius = getPancakeRadius(pos-1)
+		if nextRadius == radius-1 or nextRadius == radius+1:
+			return True	
+	return False
+
+def blockLength():
+	pos = 0
+	radius = getPancakeRadius(pos)
+	o = getPancakeRadius(pos+1) - radius
+	if o != -1 and o != 1:
+		print("Asked to compute the block length, but there is no block at the top of the stack. The length is then 1, but you are violating a precondition somehow")
+		return 1
+	while pos < getStackSize()-1 and getPancakeRadius(pos+1) == radius + o:
+		pos += 1
+		radius += o
+	return pos+1
+
+debug = False	
+if debug:
+	print("{")
+	for rank in range(getStackSize()): 
+		print(""+getPancakeRadius(rank)+", ")
+	print("}\n")
+		
+while True:
+	tRadius = getPancakeRadius(0)
+	posTPlus  = getRankOf(tRadius+1) # returns -99 if non-existent, that is then ignored
+	posTMinus = getRankOf(tRadius-1); 
+	posT = 0
+			
+	if debug:
+		println("t Radius: "+str(tRadius))
+		for rank in range(getStackSize()):
+			print("["+str(rank)+"]="+str(getPancakeRadius(rank))+"; ")
+			if isFree(rank):
+				print("Free;")
+			else:
+				print("NON-free;")
+				
+			if isFirst(rank):
+				print("First;")
+			else:
+				print("NON-first;")
+				
+			if isLast(rank):
+				print("last;")
+			else:
+				print("NON-last;")
+
+
+			if rank == posTPlus:
+				print("t+1; ")
+			if rank == posTMinus:
+				print("t-1; ");
+			if (rank == posT):
+				print("t;" );
+
+			print("\n")
+						
+	if isFree(posT):
+		if isFree(posTPlus):    # CASE A: t and t+o free 			
+			if debug:
+				println("case A+")
+			flip(posTPlus)
+		elif isFree(posTMinus): # CASE A: t and t-o free 
+			if debug:
+				println("case A-")
+			flip(posTMinus)
+		
+		elif isFirst(posTPlus): # CASE B: t free, t+o first element
+			if debug:
+				println("case B+")
+			flip(posTPlus)
+		elif isFirst(posTMinus): # CASE B: t free, t-o first element 
+			if debug:
+				println("case B-")
+			flip(posTMinus)
+
+		elif posTPlus != -99 and posTMinus != -99: # CASE C: t free, but both t+o and t-o are last elements 
+			if debug:
+				println("case C")
+			flip(min(posTPlus,posTMinus) )
+			flip(min(posTPlus,posTMinus) - 1)
+			flip(max(posTPlus,posTMinus) + 1)
+			flip(min(posTPlus,posTMinus) - 1)
+		else: 					
+			if debug:
+				println("case Cbis")
+			flip(max(posTPlus,posTMinus) + 1)
+			flip(max(posTPlus,posTMinus) )
+				
+	else: # t is in a block
+		if blockLength() == getStackSize(): # Done!
+			if tRadius != 1: # all reverse
+				flip(getStackSize())
+			break
+				
+		if isFree(posTPlus): # CASE D: t in a block, t+1 free 
+			if debug:
+				println("case D+")
+			flip(posTPlus)
+		elif isFree(posTMinus): # CASE D: t in a block, t-1 free 
+			if debug:
+				println("case D-")
+			flip(posTMinus)
+		elif isFirst(posTPlus): # CASE E: t in a block, t+1 first element 
+			if debug:
+				println("case E+")
+			flip(posTPlus)
+
+		elif isFirst(posTMinus): # CASE E: t in a block, t-1 first element 
+			if debug:
+				println("case E-")
+			flip(posTMinus)
+
+		elif isLast(posTPlus) and posTPlus != 1: # CASE F+: t in a block, t+1 last element 
+			if debug:
+				println("case F+")
+			flip(blockLength())
+			flip(posTPlus + 1)
+			newPos = getRankOf(tRadius)
+			if newPos>0:
+				flip(newPos)
+		elif isLast(posTMinus) and posTMinus != 1: # CASE F-: t in a block, t-1 last element 
+			if debug:
+				println("case F-")
+			flip(blockLength())
+			flip(posTMinus + 1)
+			newPos = getRankOf(tRadius)
+			if (newPos>0):
+				flip(newPos)
+		else:
+			k = blockLength()-1
+			o = getPancakeRadius(1) - tRadius
+			pos = getRankOf(tRadius+(k+1)*o)
+			if isFree(pos) or isFirst(pos):
+				if debug:
+					println("case G")
+				flip(k+1)
+				flip(pos)
+			else:
+				if debug:
+					println("case H")
+				flip(pos+1)
+				flip(getRankOf(tRadius+k*o))
+# END SOLUTION
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/Main.fr.html b/src/lessons/sort/pancake/Main.fr.html
new file mode 100644
index 0000000..f1ab110
--- /dev/null
+++ b/src/lessons/sort/pancake/Main.fr.html
@@ -0,0 +1,46 @@
+<h1>Trier des crêpes</h1>
+
+<p>Cette activité est inspirée d'un problème introduit pour la première fois en
+1975 par Harry Dweighter dans le journal de mathématique «American
+Mathematical Monthly». La question n'est pas tant de trier les crêpes que de
+déterminer <code>f(n)</code>, le nombre <i>minimal</i> de retournements
+nécessaires pour trier n'importe quelle pile de taille <code>n</code>. </p> 
+
+<p>Ce problème est maintenant célèbre car Bill Gates a publié son seul article
+scientifique sur ce sujet (avec C. Papadimitriou). Ils ont proposé un
+algorithme plus rapide et démontré ainsi que <code>17n/16 ≤ f(n) ≤
+(5n+5)</code>. Ce fut la seule publication de Bill Gates avant qu'il
+n'invente Windows et devienne riche. </p>  
+ 
+<p>Par la suite, David X. Cohen, l'inventeur du dessin animé Futurama aux
+nombreuses références mathématiques, introduit en 1993 la variante des
+crêpes brulées et étudie sa complexité avec Manuel Blum.</p>
+
+<p>Un article de 2013 (par L. Bulteau, G. Fertin and I. Rusu) a prouvé que ce
+problème est NP-Complet, c'est à dire qu'il n'existe pas d'algorithme
+efficace pour déterminer le nombre minimal de retournements pour toute
+taille de pile. Naturellement, le problème du tri de la pile n'est pas
+NP-complet en lui-même puisqu'on peut le résoudre en 2n-3 étapes avec
+l'algorithme naïf et (5n+5)/3 étapes avec l'algorithme de Gates. C'est la
+détermination du nombre minimal de coups qui est NP.</p> 
+
+<p>Pour plus d'information, référez vous à la page anglophone de wikipedia
+(http://en.wikipedia.org/wiki/Pancake_sorting) ou à cette page, très bien
+faite: http://eljjdx.canalblog.com/archives/2013/02/03/26309722.html</p>
+
+
+<p>Cette activité est également intégrée à SMN (mon dépot d'activités
+débranchées <i>libres</i> pour introduire la science informatique,
+disponible à l'adresse http://www.loria.fr/~quinson/Mediation/SMN/), et il
+peut être intéressant de faire les activités débranchées avant d'implémenter
+ces algorithmes dans JLM.</p>
+
+
+<h3>Que puis-je faire pour améliorer cet univers de JLM?</h3>
+
+<p>Comme souvent, plusieurs points pourraient être améliorés dans le code de
+cet univers pour l'améliorer :</p>
+<ul>
+  <li>Une vue temporelle comme celle de l'univers des tris pourraît être pratique.</li>
+  <li>D'autres exercices, par exemple sur l'algorithme de Cohen ou sur d'autres.</li>
+</ul>
diff --git a/src/lessons/sort/pancake/Main.html b/src/lessons/sort/pancake/Main.html
new file mode 100644
index 0000000..50d7e80
--- /dev/null
+++ b/src/lessons/sort/pancake/Main.html
@@ -0,0 +1,35 @@
+<h1>Pancake Sorting</h1>
+
+<p>This activity is inspired by a problem first introduced in 1975 by Harry Dweighter in the American 
+Mathematical Monthly. The question is not only to sort the pancakes, but to determine <code>f(n)</code>
+the <i>minimal</i> amount of flips mandated to sort any stack of size <code>n</code>.</p> 
+
+<p>This problem is now famous because Bill Gates authored (with C. Papadimitriou) his only 
+scientific publication in 1979 on this topic, providing a faster algorithm and proving that <code>17n/16 ≤ f(n) ≤ (5n+5)/3</code>.
+This was the only publication of Bill Gates before he invented Windows and became rich.</p>  
+ 
+<p>Then, David X. Cohen, the inventor of the Futurama comics with many mathematical references, introduced 
+the variant with burnt pancakes and studied its complexity with Manuel Blum in 1993.</p>
+
+<p>An article of 2012 (by L. Bulteau, G. Fertin and I. Rusu) proved that determining the minimal amount of 
+flips to sort the stack is a NP-complete problem. Naturally, the stack sorting problem is not NP-complete 
+since it can be solved in 2n-3 steps with the naive algorithm and (5n+5)/3 steps with the Gates algorithm. 
+That's determining the minimal amount of steps that is NP.</p> 
+
+<p>Further information can be found on the wikipedia page, as usual.</p>
+
+
+<p>This activity is also integrated to CSIRL (my repository of <i>free</i> 
+unplugged activities to introduce computer science, available at
+http://www.loria.fr/~quinson/Mediation/SMN/), and it may be
+interesting to run the unplugged activities before implementing these
+algorithms in JLM.</p>
+
+
+<h3>What can I do to improve this JLM universe?</h3>
+
+<p>As usual, there are several things that could be done in the code of this universe to improve it:</p>
+<ul>
+  <li>A temporal view similar to the sorting universe could be helpful</li>
+  <li>Other exercises, for example on the Cohen's algorithm, or on the other ones.</li>
+</ul>
diff --git a/src/lessons/sort/pancake/Main.java b/src/lessons/sort/pancake/Main.java
new file mode 100644
index 0000000..77727a4
--- /dev/null
+++ b/src/lessons/sort/pancake/Main.java
@@ -0,0 +1,15 @@
+package lessons.sort.pancake;
+
+import jlm.core.model.lesson.Lesson;
+
+// see http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html
+
+public class Main extends Lesson {
+	@Override
+	protected void loadExercises() {
+		
+		addExercise(new BasicPancake(this));
+		addExercise(new BurnedPancake(this));
+		addExercise(new GatesPancake(this));
+	}
+}
diff --git a/src/lessons/sort/pancake/icon.png b/src/lessons/sort/pancake/icon.png
new file mode 100644
index 0000000..e728dbc
Binary files /dev/null and b/src/lessons/sort/pancake/icon.png differ
diff --git a/src/lessons/sort/pancake/img/gates-a.png b/src/lessons/sort/pancake/img/gates-a.png
new file mode 100644
index 0000000..f44b6f0
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-a.png differ
diff --git a/src/lessons/sort/pancake/img/gates-a.svg b/src/lessons/sort/pancake/img/gates-a.svg
new file mode 100644
index 0000000..7df05aa
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-a.svg
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Mon Jul 15 20:48:03 2013 -->
+
+<!-- Magnification: 1.050 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351"
+   height="76"
+   viewBox="1688 3200 4543.5 1079.2"
+   id="svg5206"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-a.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-a.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata5242">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs5240" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1638"
+     inkscape:window-height="819"
+     id="namedview5238"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="2.5309359"
+     inkscape:cx="181.4607"
+     inkscape:cy="21.591555"
+     inkscape:window-x="45"
+     inkscape:window-y="99"
+     inkscape:window-maximized="0"
+     inkscape:current-layer="svg5206">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5322"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="0.49998071px"
+       originy="0.50000556px" />
+  </sodipodi:namedview>
+  <g
+     id="g4091"
+     transform="matrix(1.0612099,0,0,1.0612099,2516.0751,256.65854)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-8"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-0"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:284px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2882.991"
+     y="3484.3052"
+     id="text4100-1-8"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-8"
+       x="2882.991"
+       y="3484.3052">t+o</tspan><tspan
+       sodipodi:role="line"
+       x="2882.991"
+       y="3839.3052"
+       id="tspan4104-5-2" /><tspan
+       sodipodi:role="line"
+       x="2882.991"
+       y="4194.3052"
+       id="tspan4106-9-4" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80"
+     width="710"
+     height="355"
+     x="1822.3976"
+     y="3207.1001" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3"
+     width="709.99982"
+     height="354.99991"
+     x="2532.3975"
+     y="3207.1001" />
+  <text
+     xml:space="preserve"
+     style="font-size:284px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="1646.4832"
+     y="3484.3052"
+     id="text4100-1-9-7-4-0"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-72"
+       x="1646.4832"
+       y="3484.3052">t</tspan><tspan
+       sodipodi:role="line"
+       x="1646.4832"
+       y="3839.3052"
+       id="tspan4104-5-1-9-1-9" /><tspan
+       sodipodi:role="line"
+       x="1646.4832"
+       y="4194.3052"
+       id="tspan4106-9-2-5-9-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-7"
+     width="354.99988"
+     height="355.00003"
+     x="1467.3976"
+     y="3207.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-8"
+     width="3195.0002"
+     height="354.99985"
+     x="3242.3972"
+     y="3207.1001" />
+  <text
+     xml:space="preserve"
+     style="font-size:284px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2882.991"
+     y="4194.3052"
+     id="text4100-1-8-8"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-8-1"
+       x="2882.991"
+       y="4194.3052">t+o</tspan><tspan
+       sodipodi:role="line"
+       x="2882.991"
+       y="4549.3052"
+       id="tspan4104-5-2-0" /><tspan
+       sodipodi:role="line"
+       x="2882.991"
+       y="4904.3052"
+       id="tspan4106-9-4-7" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-8"
+     width="709.99982"
+     height="354.99991"
+     x="2532.3975"
+     y="3917.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-8-4"
+     width="3195.0002"
+     height="354.99982"
+     x="3242.3975"
+     y="3917.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-7"
+     width="710"
+     height="355"
+     x="1467.3976"
+     y="3917.1001" />
+  <text
+     xml:space="preserve"
+     style="font-size:284px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2356.4832"
+     y="4194.3052"
+     id="text4100-1-9-7-4-0-5"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-72-8"
+       x="2356.4832"
+       y="4194.3052">t</tspan><tspan
+       sodipodi:role="line"
+       x="2356.4832"
+       y="4549.3052"
+       id="tspan4104-5-1-9-1-9-6" /><tspan
+       sodipodi:role="line"
+       x="2356.4832"
+       y="4904.3052"
+       id="tspan4106-9-2-5-9-5-3" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-7-0"
+     width="354.99988"
+     height="355.00003"
+     x="2177.3975"
+     y="3917.1001" />
+</svg>
diff --git a/src/lessons/sort/pancake/img/gates-b.png b/src/lessons/sort/pancake/img/gates-b.png
new file mode 100644
index 0000000..96ff69c
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-b.png differ
diff --git a/src/lessons/sort/pancake/img/gates-b.svg b/src/lessons/sort/pancake/img/gates-b.svg
new file mode 100644
index 0000000..6943fd0
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-b.svg
@@ -0,0 +1,224 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Mon Jul 15 20:52:10 2013 -->
+
+<!-- Magnification: 1.575 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351"
+   height="76.000015"
+   viewBox="2532 4800 4771.65 1012.278"
+   id="svg5474"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-b.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-b.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata5522">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs5520" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview5518"
+     showgrid="true"
+     inkscape:zoom="2.4174589"
+     inkscape:cx="246.59488"
+     inkscape:cy="-67.812048"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg5474"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5543"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="125.5px"
+       originy="-74.499985px" />
+  </sodipodi:namedview>
+  <text
+     xml:space="preserve"
+     style="font-size:271.8888855px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4057.1555"
+     y="5060.356"
+     id="text4100-1-8"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-8"
+       x="4100.4351"
+       y="5060.356">t+o ⋯ </tspan><tspan
+       sodipodi:role="line"
+       x="4057.1555"
+       y="5400.2173"
+       id="tspan4104-5-2" /><tspan
+       sodipodi:role="line"
+       x="4057.1555"
+       y="5740.0781"
+       id="tspan4106-9-4" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.59444427;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80"
+     width="679.72223"
+     height="339.86108"
+     x="2878.6582"
+     y="4786.3452" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.59444427;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3"
+     width="1019.5834"
+     height="339.86108"
+     x="3558.3804"
+     y="4786.3452"
+     ry="0" />
+  <text
+     xml:space="preserve"
+     style="font-size:271.8888855px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2710.2454"
+     y="5062.2808"
+     id="text4100-1-9-7-4-0"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-72"
+       x="2710.2454"
+       y="5062.2808">t</tspan><tspan
+       sodipodi:role="line"
+       x="2710.2454"
+       y="5402.1421"
+       id="tspan4104-5-1-9-1-9" /><tspan
+       sodipodi:role="line"
+       x="2710.2454"
+       y="5742.0029"
+       id="tspan4106-9-2-5-9-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.59444427;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-7"
+     width="339.86111"
+     height="339.86108"
+     x="2538.7971"
+     y="4786.3452" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.59444427;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-8"
+     width="2718.8889"
+     height="339.86108"
+     x="4577.9639"
+     y="4786.3452" />
+  <text
+     xml:space="preserve"
+     style="font-size:271.8888855px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4057.1553"
+     y="5740.0781"
+     id="text4100-1-8-6"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-8-3"
+       x="4100.4346"
+       y="5740.0781">t+o ⋯ </tspan><tspan
+       sodipodi:role="line"
+       x="4057.1553"
+       y="6079.9395"
+       id="tspan4104-5-2-9" /><tspan
+       sodipodi:role="line"
+       x="4057.1553"
+       y="6419.8003"
+       id="tspan4106-9-4-7" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.59444427;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-3"
+     width="1019.5832"
+     height="339.86133"
+     x="3558.3804"
+     y="5466.0674"
+     ry="0" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.59444427;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-8-8"
+     width="2718.8889"
+     height="339.86111"
+     x="4577.9639"
+     y="5466.0674" />
+  <g
+     id="g4091"
+     transform="matrix(1.0159548,0,0,0.98441132,3542.7544,2070.5281)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-8"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-0"
+       inkscape:connector-curvature="0" />
+  </g>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.59444427;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-5"
+     width="679.72223"
+     height="339.86108"
+     x="2538.7971"
+     y="5466.0674" />
+  <text
+     xml:space="preserve"
+     style="font-size:271.8888855px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3389.9675"
+     y="5742.0029"
+     id="text4100-1-9-7-4-0-4"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-72-6"
+       x="3389.9675"
+       y="5742.0029">t</tspan><tspan
+       sodipodi:role="line"
+       x="3389.9675"
+       y="6081.8643"
+       id="tspan4104-5-1-9-1-9-5" /><tspan
+       sodipodi:role="line"
+       x="3389.9675"
+       y="6421.7251"
+       id="tspan4106-9-2-5-9-5-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.59444427;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-7-2"
+     width="339.86111"
+     height="339.86108"
+     x="3218.5193"
+     y="5466.0674" />
+</svg>
diff --git a/src/lessons/sort/pancake/img/gates-c.png b/src/lessons/sort/pancake/img/gates-c.png
new file mode 100644
index 0000000..b8f4735
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-c.png differ
diff --git a/src/lessons/sort/pancake/img/gates-c.svg b/src/lessons/sort/pancake/img/gates-c.svg
new file mode 100644
index 0000000..f00c6dc
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-c.svg
@@ -0,0 +1,662 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   width="351.00003"
+   height="226"
+   xml:space="preserve"
+   sodipodi:docname="gates-c.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-c.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90"><metadata
+     id="metadata8"><rdf:RDF><cc:Work
+         rdf:about=""><dc:format>image/svg+xml</dc:format><dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" /><dc:title></dc:title></cc:Work></rdf:RDF></metadata><defs
+     id="defs6"><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath80"><path
+         d="M 0,1270 0,0 l 1490,0 0,1270 -1490,0 z m 560.168,-338.879 0,-54.172 28.348,0 0,54.172 0,0 -13.86,-37.797 -14.488,37.797 z"
+         clip-rule="evenodd"
+         id="path82"
+         inkscape:connector-curvature="0" /></clipPath><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath94"><path
+         d="M 0,1270 0,0 l 1490,0 0,1270 -1490,0 z m 446.789,-593.988 0,-54.172 28.344,0 0,54.172 0,0 -13.86,-37.797 -14.484,37.797 z"
+         clip-rule="evenodd"
+         id="path96"
+         inkscape:connector-curvature="0" /></clipPath><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath116"><path
+         d="M 0,1270 0,0 l 1490,0 0,1270 -1490,0 z m 928.66,-849.102 0,-54.168 28.348,0 0,54.168 0,0 -13.86,-37.793 -14.488,37.793 z"
+         clip-rule="evenodd"
+         id="path118"
+         inkscape:connector-curvature="0" /></clipPath><clipPath
+       clipPathUnits="userSpaceOnUse"
+       id="clipPath138"><path
+         d="M 0,1270 0,0 l 1490,0 0,1270 -1490,0 z m 418.441,-1104.211 0,-54.168 28.348,0 0,54.168 0,0 -13.859,-37.793 -14.489,37.793 z"
+         clip-rule="evenodd"
+         id="path140"
+         inkscape:connector-curvature="0" /></clipPath></defs><sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview4"
+     showgrid="true"
+     inkscape:zoom="1.3865741"
+     inkscape:cx="347.29344"
+     inkscape:cy="117.12836"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="g10"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"><inkscape:grid
+       type="xygrid"
+       id="grid4156"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       originx="200.50002px"
+       originy="0.5000047px"
+       spacingx="25px"
+       spacingy="25px" /></sodipodi:namedview><g
+     id="g10"
+     inkscape:groupmode="layer"
+     inkscape:label="gates-c"
+     transform="matrix(1.25,0,0,-1.25,200.50002,225.49998)"><g
+       id="g4091"
+       transform="matrix(0.05978647,0,0,-0.05978647,-40.919564,346.22202)"><path
+         d="m 15.380812,3114.7856 0,334.5239"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+         id="path84-8"
+         inkscape:connector-curvature="0" /><path
+         d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+         id="path86-0"
+         inkscape:connector-curvature="0" /></g><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-70.648285"
+       y="-164.49608"
+       id="text4100-1-8"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8"
+         x="-70.648285"
+         y="-164.49608">⋯ t+o</tspan><tspan
+         sodipodi:role="line"
+         x="-70.648285"
+         y="-144.49608"
+         id="tspan4104-5-2" /><tspan
+         sodipodi:role="line"
+         x="-70.648285"
+         y="-124.49608"
+         id="tspan4106-9-4" /></text>
+<rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80"
+       width="40"
+       height="20"
+       x="-140"
+       y="-179.99998"
+       transform="scale(1,-1)" /><rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3"
+       width="60"
+       height="20.000004"
+       x="-100"
+       y="-179.99998"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-149.91068"
+       y="-164.3828"
+       id="text4100-1-9-7-4-0"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-5-3-5-72"
+         x="-149.91068"
+         y="-164.3828">t</tspan><tspan
+         sodipodi:role="line"
+         x="-149.91068"
+         y="-144.3828"
+         id="tspan4104-5-1-9-1-9" /><tspan
+         sodipodi:role="line"
+         x="-149.91068"
+         y="-124.3828"
+         id="tspan4106-9-2-5-9-5" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-5-8-5-7"
+       width="19.999994"
+       height="20.000002"
+       x="-160"
+       y="-179.99998"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="29.351715"
+       y="-164.49608"
+       id="text4100-1-8-4"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-0"
+         x="29.351715"
+         y="-164.49608">⋯ t−o</tspan><tspan
+         sodipodi:role="line"
+         x="29.351715"
+         y="-144.49608"
+         id="tspan4104-5-2-0" /><tspan
+         sodipodi:role="line"
+         x="29.351715"
+         y="-124.49608"
+         id="tspan4106-9-4-2" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-6"
+       width="60"
+       height="20.000004"
+       x="0"
+       y="-179.99998"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-0"
+       width="40"
+       height="20"
+       x="-40"
+       y="-179.99998"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-8"
+       width="60"
+       height="20"
+       x="59.999996"
+       y="-179.99998"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-130.64828"
+       y="-124.49608"
+       id="text4100-1-8-7"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-7"
+         x="-130.64828"
+         y="-124.49608">t+o ⋯</tspan><tspan
+         sodipodi:role="line"
+         x="-130.64828"
+         y="-104.49608"
+         id="tspan4104-5-2-9" /><tspan
+         sodipodi:role="line"
+         x="-130.64828"
+         y="-84.496078"
+         id="tspan4106-9-4-6" /></text>
+<rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-81"
+       width="40"
+       height="20"
+       x="-100"
+       y="-139.99998"
+       transform="scale(1,-1)" /><rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-4"
+       width="60"
+       height="20.000004"
+       x="-160"
+       y="-139.99998"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-49.910675"
+       y="-124.3828"
+       id="text4100-1-9-7-4-0-3"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-5-3-5-72-7"
+         x="-49.910675"
+         y="-124.3828">t</tspan><tspan
+         sodipodi:role="line"
+         x="-49.910675"
+         y="-104.3828"
+         id="tspan4104-5-1-9-1-9-7" /><tspan
+         sodipodi:role="line"
+         x="-49.910675"
+         y="-84.382797"
+         id="tspan4106-9-2-5-9-5-3" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-5-8-5-7-5"
+       width="19.999994"
+       height="20.000002"
+       x="-60"
+       y="-139.99998"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="29.351721"
+       y="-124.49608"
+       id="text4100-1-8-4-5"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-0-7"
+         x="29.351721"
+         y="-124.49608">⋯ t−o</tspan><tspan
+         sodipodi:role="line"
+         x="29.351721"
+         y="-104.49608"
+         id="tspan4104-5-2-0-2" /><tspan
+         sodipodi:role="line"
+         x="29.351721"
+         y="-84.496078"
+         id="tspan4106-9-4-2-0" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-6-5"
+       width="60"
+       height="20.000004"
+       x="0"
+       y="-139.99998"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-0-2"
+       width="40"
+       height="20"
+       x="-40"
+       y="-139.99998"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-8-2"
+       width="60"
+       height="20"
+       x="60"
+       y="-139.99998"
+       transform="scale(1,-1)" /><g
+       id="g4091-4"
+       transform="matrix(0.05978647,0,0,-0.05978647,-60.919565,306.22202)"><path
+         d="m 15.380812,3114.7856 0,334.5239"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+         id="path84-8-6"
+         inkscape:connector-curvature="0" /><path
+         d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+         id="path86-0-1"
+         inkscape:connector-curvature="0" /></g><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-49.910683"
+       y="-84.382797"
+       id="text4100-1-9-7-4-0-3-1"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-5-3-5-72-7-3"
+         x="-49.910683"
+         y="-84.382797">t</tspan><tspan
+         sodipodi:role="line"
+         x="-49.910683"
+         y="-64.382797"
+         id="tspan4104-5-1-9-1-9-7-6" /><tspan
+         sodipodi:role="line"
+         x="-49.910683"
+         y="-44.382797"
+         id="tspan4106-9-2-5-9-5-3-2" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-5-8-5-7-5-4"
+       width="19.999994"
+       height="20.000002"
+       x="-60.000008"
+       y="-99.999985"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="29.351723"
+       y="-84.496078"
+       id="text4100-1-8-4-5-8"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-0-7-0"
+         x="29.351723"
+         y="-84.496078">⋯ t−o</tspan><tspan
+         sodipodi:role="line"
+         x="29.351723"
+         y="-64.496078"
+         id="tspan4104-5-2-0-2-4" /><tspan
+         sodipodi:role="line"
+         x="29.351723"
+         y="-44.496078"
+         id="tspan4106-9-4-2-0-8" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-6-5-7"
+       width="60"
+       height="20.000004"
+       x="5.9608283e-09"
+       y="-99.999985"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-0-2-1"
+       width="40"
+       height="20"
+       x="-40.000008"
+       y="-99.999985"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-8-2-9"
+       width="60"
+       height="20"
+       x="60"
+       y="-99.999985"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-90.648277"
+       y="-84.496078"
+       id="text4100-1-8-7-5"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-7-1"
+         x="-90.648277"
+         y="-84.496078">⋯ t+o</tspan><tspan
+         sodipodi:role="line"
+         x="-90.648277"
+         y="-64.496078"
+         id="tspan4104-5-2-9-1" /><tspan
+         sodipodi:role="line"
+         x="-90.648277"
+         y="-44.496078"
+         id="tspan4106-9-4-6-0" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-4-4"
+       width="60"
+       height="20.000004"
+       x="-120"
+       y="-99.999985"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-81-0"
+       width="40"
+       height="20"
+       x="-160"
+       y="-99.999985"
+       transform="scale(1,-1)" /><g
+       id="g4091-4-7"
+       transform="matrix(0.05978647,0,0,-0.05978647,59.080435,266.22202)"><path
+         d="m 15.380812,3114.7856 0,334.5239"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+         id="path84-8-6-9"
+         inkscape:connector-curvature="0" /><path
+         d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+         id="path86-0-1-8"
+         inkscape:connector-curvature="0" /></g><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-8-2-9-5"
+       width="60"
+       height="20"
+       x="60"
+       y="-59.999985"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-129.36992"
+       y="-44.496078"
+       id="text4100-1-8-4-5-8-6"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-0-7-0-0"
+         x="-129.36992"
+         y="-44.496078">t−o ⋯</tspan><tspan
+         sodipodi:role="line"
+         x="-129.36992"
+         y="-24.496078"
+         id="tspan4104-5-2-0-2-4-5" /><tspan
+         sodipodi:role="line"
+         x="-129.36992"
+         y="-4.4960785"
+         id="tspan4106-9-4-2-0-8-4" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-6-5-7-4"
+       width="60"
+       height="20.000004"
+       x="-158.72165"
+       y="-59.999985"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-0-2-1-7"
+       width="40"
+       height="20"
+       x="-100.00001"
+       y="-59.999985"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-49.910667"
+       y="-44.382797"
+       id="text4100-1-9-7-4-0-3-1-8"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-5-3-5-72-7-3-1"
+         x="-49.910667"
+         y="-44.382797">t</tspan><tspan
+         sodipodi:role="line"
+         x="-49.910667"
+         y="-24.382797"
+         id="tspan4104-5-1-9-1-9-7-6-1" /><tspan
+         sodipodi:role="line"
+         x="-49.910667"
+         y="-4.3827972"
+         id="tspan4106-9-2-5-9-5-3-2-0" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-5-8-5-7-5-4-6"
+       width="19.999994"
+       height="20.000002"
+       x="-59.999992"
+       y="-59.999985"
+       transform="scale(1,-1)" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-10.648271"
+       y="-44.496078"
+       id="text4100-1-8-7-5-7"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-7-1-4"
+         x="-10.648271"
+         y="-44.496078">t+o ⋯</tspan><tspan
+         sodipodi:role="line"
+         x="-10.648271"
+         y="-24.496078"
+         id="tspan4104-5-2-9-1-0" /><tspan
+         sodipodi:role="line"
+         x="-10.648271"
+         y="-4.4960785"
+         id="tspan4106-9-4-6-0-7" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-4-4-4"
+       width="60"
+       height="20.000004"
+       x="-40"
+       y="-59.999985"
+       transform="scale(1,-1)" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-81-0-6"
+       width="40"
+       height="20"
+       x="20"
+       y="-59.999985"
+       transform="scale(1,-1)" /><g
+       id="g4091-4-7-8"
+       transform="matrix(0.05978647,0,0,-0.05978647,-60.919565,226.22202)"><path
+         d="m 15.380812,3114.7856 0,334.5239"
+         style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+         id="path84-8-6-9-1"
+         inkscape:connector-curvature="0" /><path
+         d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+         style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+         id="path86-0-1-8-0"
+         inkscape:connector-curvature="0" /></g><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-8-2-9-5-7"
+       width="60"
+       height="20"
+       x="60"
+       y="-19.999987"
+       transform="scale(1,-1)"
+       inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-6-5-7-4-8.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-49.910667"
+       y="-4.3827991"
+       id="text4100-1-9-7-4-0-3-1-8-7"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"
+       inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-6-5-7-4-8.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-5-3-5-72-7-3-1-1"
+         x="-49.910667"
+         y="-4.3827991">t</tspan><tspan
+         sodipodi:role="line"
+         x="-49.910667"
+         y="15.6172"
+         id="tspan4104-5-1-9-1-9-7-6-1-0" /><tspan
+         sodipodi:role="line"
+         x="-49.910667"
+         y="35.617199"
+         id="tspan4106-9-2-5-9-5-3-2-0-9" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-5-8-5-7-5-4-6-6"
+       width="19.999994"
+       height="20.000002"
+       x="-59.999992"
+       y="-19.999989"
+       transform="scale(1,-1)"
+       inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-6-5-7-4-8.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-10.648262"
+       y="-4.4960804"
+       id="text4100-1-8-7-5-7-1"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"
+       inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-6-5-7-4-8.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-7-1-4-8"
+         x="-10.648262"
+         y="-4.4960804">t+o ⋯</tspan><tspan
+         sodipodi:role="line"
+         x="-10.648262"
+         y="15.503919"
+         id="tspan4104-5-2-9-1-0-7" /><tspan
+         sodipodi:role="line"
+         x="-10.648262"
+         y="35.503918"
+         id="tspan4106-9-4-6-0-7-9" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-4-4-4-3"
+       width="60"
+       height="20.000004"
+       x="-39.999992"
+       y="-19.999989"
+       transform="scale(1,-1)"
+       inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-6-5-7-4-8.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-81-0-6-4"
+       width="40"
+       height="20"
+       x="20.000008"
+       y="-19.999987"
+       transform="scale(1,-1)"
+       inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-6-5-7-4-8.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" /><rect
+       style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-80-0-2-1-7-1"
+       width="40"
+       height="20"
+       x="-160.00002"
+       y="-19.999987"
+       transform="scale(1,-1)"
+       inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-6-5-7-4-8.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" /><text
+       xml:space="preserve"
+       style="font-size:16px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+       x="-90.64827"
+       y="-4.4960804"
+       id="text4100-1-8-4-5-8-6-0"
+       sodipodi:linespacing="125%"
+       transform="scale(1,-1)"
+       inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-6-5-7-4-8.png"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90"><tspan
+         sodipodi:role="line"
+         id="tspan4102-8-8-0-7-0-0-0"
+         x="-90.64827"
+         y="-4.4960804">⋯ t−o</tspan><tspan
+         sodipodi:role="line"
+         x="-90.64827"
+         y="15.503919"
+         id="tspan4104-5-2-0-2-4-5-7" /><tspan
+         sodipodi:role="line"
+         x="-90.64827"
+         y="35.503918"
+         id="tspan4106-9-4-2-0-8-4-0" /></text>
+<rect
+       style="fill:none;stroke:#000000;stroke-width:0.80000001;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+       id="rect4158-5-9-9-3-6-5-7-4-8"
+       width="60"
+       height="20.000004"
+       x="-120"
+       y="-19.999989"
+       transform="scale(1,-1)"
+       inkscape:export-xdpi="90"
+       inkscape:export-ydpi="90" /></g></svg>
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/img/gates-d.png b/src/lessons/sort/pancake/img/gates-d.png
new file mode 100644
index 0000000..38a4e68
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-d.png differ
diff --git a/src/lessons/sort/pancake/img/gates-d.svg b/src/lessons/sort/pancake/img/gates-d.svg
new file mode 100644
index 0000000..51d8473
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-d.svg
@@ -0,0 +1,222 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Mon Jul 15 20:57:33 2013 -->
+
+<!-- Magnification: 1.050 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351"
+   height="76.000008"
+   viewBox="1688 3200 4543.5 1079.2001"
+   id="svg5723"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-d.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-d.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata5771">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs5769" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview5767"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="2.4174591"
+     inkscape:cx="140.22988"
+     inkscape:cy="24.994926"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg5723">
+    <inkscape:grid
+       type="xygrid"
+       id="grid5820"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="0.50001551px"
+       originy="-24.499998px" />
+  </sodipodi:namedview>
+  <g
+     id="g4091"
+     transform="matrix(1.0612099,0,0,1.0612099,3233.4279,256.65879)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-8"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-0"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:284px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3604.7502"
+     y="3478.4312"
+     id="text4100-1-8"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-8"
+       x="3604.7502"
+       y="3478.4312">t+o</tspan><tspan
+       sodipodi:role="line"
+       x="3604.7502"
+       y="3833.4312"
+       id="tspan4104-5-2" /><tspan
+       sodipodi:role="line"
+       x="3604.7502"
+       y="4188.4312"
+       id="tspan4106-9-4" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80"
+     width="1065.0001"
+     height="355.00009"
+     x="2184.7502"
+     y="3207.1001" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3"
+     width="709.99988"
+     height="354.99991"
+     x="3249.7502"
+     y="3207.1001" />
+  <text
+     xml:space="preserve"
+     style="font-size:284px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="1829.7502"
+     y="3478.4312"
+     id="text4100-1-9-7-4-0"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-72"
+       x="1829.7502"
+       y="3478.4312">t ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="1829.7502"
+       y="3833.4312"
+       id="tspan4104-5-1-9-1-9" /><tspan
+       sodipodi:role="line"
+       x="1829.7502"
+       y="4188.4312"
+       id="tspan4106-9-2-5-9-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-7"
+     width="710"
+     height="355.00009"
+     x="1474.7502"
+     y="3207.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-8"
+     width="2484.9995"
+     height="354.99966"
+     x="3959.7502"
+     y="3207.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-9"
+     width="1065.0002"
+     height="355.00012"
+     x="1474.75"
+     y="3917.1001" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-7-6"
+     width="710.00006"
+     height="355.00012"
+     x="2539.7502"
+     y="3917.1001" />
+  <text
+     xml:space="preserve"
+     style="font-size:284.00003052px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2894.7505"
+     y="4188.4312"
+     id="text4100-1-9-7-4-0-2"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-72-1"
+       x="2894.7505"
+       y="4188.4312">⋯ t</tspan><tspan
+       sodipodi:role="line"
+       x="2894.7505"
+       y="4543.4312"
+       id="tspan4104-5-1-9-1-9-4" /><tspan
+       sodipodi:role="line"
+       x="2894.7505"
+       y="4898.4312"
+       id="tspan4106-9-2-5-9-5-2" /></text>
+  <text
+     xml:space="preserve"
+     style="font-size:284.00003052px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3604.7502"
+     y="4188.4312"
+     id="text4100-1-8-1"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-8-4"
+       x="3604.7502"
+       y="4188.4312">t+o</tspan><tspan
+       sodipodi:role="line"
+       x="3604.7502"
+       y="4543.4312"
+       id="tspan4104-5-2-3" /><tspan
+       sodipodi:role="line"
+       x="3604.7502"
+       y="4898.4312"
+       id="tspan4106-9-4-2" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-1"
+     width="709.99994"
+     height="354.99994"
+     x="3249.7502"
+     y="3917.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-8-3"
+     width="2484.9998"
+     height="354.99966"
+     x="3959.7502"
+     y="3917.1001" />
+</svg>
diff --git a/src/lessons/sort/pancake/img/gates-e.png b/src/lessons/sort/pancake/img/gates-e.png
new file mode 100644
index 0000000..739a712
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-e.png differ
diff --git a/src/lessons/sort/pancake/img/gates-e.svg b/src/lessons/sort/pancake/img/gates-e.svg
new file mode 100644
index 0000000..9dff5b4
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-e.svg
@@ -0,0 +1,233 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Mon Jul 15 22:29:05 2013 -->
+
+<!-- Magnification: 1.050 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351"
+   height="76.000008"
+   viewBox="1688 3200 4543.5 1079.2001"
+   id="svg5956"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-e.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-e.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata6016">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6014" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview6012"
+     showgrid="true"
+     inkscape:zoom="1.7094019"
+     inkscape:cx="123.79979"
+     inkscape:cy="-34.503774"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg5956"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid6037"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="90.552823px"
+       originy="-49.499978px" />
+  </sodipodi:namedview>
+  <g
+     id="g4091"
+     transform="matrix(1.0612099,0,0,1.0612099,3233.4278,256.6583)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-8"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-0"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:284.00003052px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3778.4365"
+     y="3478.4312"
+     id="text4100-1-8"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-8"
+       x="3823.6436"
+       y="3478.4312">t+o ⋯ </tspan><tspan
+       sodipodi:role="line"
+       x="3778.4365"
+       y="3833.4312"
+       id="tspan4104-5-2" /><tspan
+       sodipodi:role="line"
+       x="3778.4365"
+       y="4188.4312"
+       id="tspan4106-9-4" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80"
+     width="1065.0002"
+     height="355.00012"
+     x="2184.75"
+     y="3207.1001" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3"
+     width="1065"
+     height="355"
+     x="3249.75"
+     y="3207.1001" />
+  <text
+     xml:space="preserve"
+     style="font-size:284.00003052px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="1829.75"
+     y="3478.4312"
+     id="text4100-1-9-7-4-0"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-72"
+       x="1829.75"
+       y="3478.4312">t ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="1829.75"
+       y="3833.4312"
+       id="tspan4104-5-1-9-1-9" /><tspan
+       sodipodi:role="line"
+       x="1829.75"
+       y="4188.4312"
+       id="tspan4106-9-2-5-9-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-7"
+     width="710.00006"
+     height="355.00012"
+     x="1474.75"
+     y="3207.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-8"
+     width="2129.9995"
+     height="354.99976"
+     x="4314.75"
+     y="3207.1001" />
+  <text
+     xml:space="preserve"
+     style="font-size:284.00006104px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2894.75"
+     y="4188.4312"
+     id="text4100-1-9-7-4-0-6"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-72-1"
+       x="2894.75"
+       y="4188.4312">⋯ t</tspan><tspan
+       sodipodi:role="line"
+       x="2894.75"
+       y="4543.4312"
+       id="tspan4104-5-1-9-1-9-9" /><tspan
+       sodipodi:role="line"
+       x="2894.75"
+       y="4898.4312"
+       id="tspan4106-9-2-5-9-5-7" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-7-7"
+     width="710.00012"
+     height="355.00012"
+     x="2539.75"
+     y="3917.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-4"
+     width="1065.0004"
+     height="355.00012"
+     x="1474.75"
+     y="3917.1001" />
+  <text
+     xml:space="preserve"
+     style="font-size:284.00006104px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3778.4368"
+     y="4188.4312"
+     id="text4100-1-8-9"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-8-5"
+       x="3823.6438"
+       y="4188.4312">t+o ⋯ </tspan><tspan
+       sodipodi:role="line"
+       x="3778.4368"
+       y="4543.4312"
+       id="tspan4104-5-2-9" /><tspan
+       sodipodi:role="line"
+       x="3778.4368"
+       y="4898.4312"
+       id="tspan4106-9-4-8" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-4"
+     width="1065.0001"
+     height="355.00003"
+     x="3249.75"
+     y="3917.1001" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:14.19999981;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-80-8-3"
+     width="2129.9995"
+     height="354.99979"
+     x="4314.7505"
+     y="3917.1001" />
+  <flowRoot
+     xml:space="preserve"
+     id="flowRoot6180"
+     style="font-size:16px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans"
+     transform="matrix(14.2,0,0,14.2,1467.65,3199.9999)"><flowRegion
+       id="flowRegion6182"><rect
+         id="rect6184"
+         width="168.47998"
+         height="79.55999"
+         x="79.55999"
+         y="73.900772" /></flowRegion><flowPara
+       id="flowPara6186"></flowPara></flowRoot></svg>
diff --git a/src/lessons/sort/pancake/img/gates-f.png b/src/lessons/sort/pancake/img/gates-f.png
new file mode 100644
index 0000000..5eb730c
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-f.png differ
diff --git a/src/lessons/sort/pancake/img/gates-f.svg b/src/lessons/sort/pancake/img/gates-f.svg
new file mode 100644
index 0000000..e941b6e
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-f.svg
@@ -0,0 +1,382 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Mon Jul 15 19:34:10 2013 -->
+
+<!-- Magnification: 1.050 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351.00003"
+   height="176.00005"
+   viewBox="1688 3196 4696.7151 2352.7784"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-f.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-f.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata184">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title />
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs182" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="4"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview180"
+     showgrid="true"
+     inkscape:zoom="1.7094016"
+     inkscape:cx="339.46577"
+     inkscape:cy="48.452566"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3208"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="1100.5px"
+       originy="50.500037px" />
+  </sodipodi:namedview>
+  <g
+     id="g4091"
+     transform="translate(2348.3575,420.97131)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2019.3125"
+     y="4139.1177"
+     id="text4100-2"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-6"
+       x="2061.9121"
+       y="4139.1177">⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="2019.3125"
+       y="4473.6416"
+       id="tspan4104-54" /><tspan
+       sodipodi:role="line"
+       x="2019.3125"
+       y="4808.1655"
+       id="tspan4106-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-1"
+     width="669.04773"
+     height="334.52371"
+     x="1694.6904"
+     y="3870.2805" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2019.3125"
+     y="3470.0698"
+     id="text4100-17"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-3"
+       x="2061.9121"
+       y="3470.0698">t ⋯ </tspan><tspan
+       sodipodi:role="line"
+       x="2019.3125"
+       y="3804.5938"
+       id="tspan4104-7" /><tspan
+       sodipodi:role="line"
+       x="2019.3125"
+       y="4139.1177"
+       id="tspan4106-8" /></text>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4861.8242"
+     y="3475.4065"
+     id="text4100-1-3"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-7"
+       x="4861.8242"
+       y="3475.4065">⋯ t+o</tspan><tspan
+       sodipodi:role="line"
+       x="4861.8242"
+       y="3809.9304"
+       id="tspan4104-5-9" /><tspan
+       sodipodi:role="line"
+       x="4861.8242"
+       y="4144.4541"
+       id="tspan4106-9-9" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-2"
+     width="669.04773"
+     height="334.52371"
+     x="1694.6907"
+     y="3201.2332" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-3"
+     width="2007.1432"
+     height="334.5238"
+     x="2363.7383"
+     y="3201.2329" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-2"
+     width="1003.5715"
+     height="334.52393"
+     x="4370.8813"
+     y="3201.2329" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-8"
+     width="1003.5717"
+     height="334.52405"
+     x="5374.4526"
+     y="3201.2329" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4861.8242"
+     y="4144.4541"
+     id="text4100-1-3-5"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-7-1"
+       x="4861.8242"
+       y="4144.4541">⋯ t+o</tspan><tspan
+       sodipodi:role="line"
+       x="4861.8242"
+       y="4478.978"
+       id="tspan4104-5-9-4" /><tspan
+       sodipodi:role="line"
+       x="4861.8242"
+       y="4813.502"
+       id="tspan4106-9-9-6" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-3-4"
+     width="2007.1432"
+     height="334.5238"
+     x="2363.7383"
+     y="3870.2805" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-2-8"
+     width="1003.5715"
+     height="334.52393"
+     x="4370.8818"
+     y="3870.2805" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-8-1"
+     width="1003.5717"
+     height="334.52405"
+     x="5374.4526"
+     y="3870.2805" />
+  <g
+     id="g4091-4"
+     transform="translate(5359.0721,1090.019)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-0"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-12"
+       inkscape:connector-curvature="0" />
+  </g>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-8-1-5"
+     width="1003.5717"
+     height="334.52405"
+     x="5374.4526"
+     y="4539.3281" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2185.6328"
+     y="4813.8247"
+     id="text4100-1-3-5-9"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-7-1-6"
+       x="2185.6328"
+       y="4813.8247">t+o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="2185.6328"
+       y="5148.3486"
+       id="tspan4104-5-9-4-9" /><tspan
+       sodipodi:role="line"
+       x="2185.6328"
+       y="5482.8726"
+       id="tspan4106-9-9-6-2" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-3-4-3"
+     width="2007.1432"
+     height="334.5238"
+     x="2698.262"
+     y="4539.6509" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-2-8-9"
+     width="1003.5715"
+     height="334.52393"
+     x="1694.6904"
+     y="4539.6509" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5030.0269"
+     y="4808.4878"
+     id="text4100-17-6"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-3-3"
+       x="5072.6265"
+       y="4808.4878">t ⋯ </tspan><tspan
+       sodipodi:role="line"
+       x="5030.0269"
+       y="5143.0117"
+       id="tspan4104-7-9" /><tspan
+       sodipodi:role="line"
+       x="5030.0269"
+       y="5477.5356"
+       id="tspan4106-8-7" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-2-5"
+     width="669.04773"
+     height="334.52371"
+     x="4705.4053"
+     y="4539.6509" />
+  <g
+     id="g4091-4-4"
+     transform="translate(4690.0242,1759.3891)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-0-0"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-12-6"
+       inkscape:connector-curvature="0" />
+  </g>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-8-1-5-1"
+     width="1003.5717"
+     height="334.52405"
+     x="5374.4526"
+     y="5208.376" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-3-4-3-8"
+     width="2007.1432"
+     height="334.5238"
+     x="1694.6904"
+     y="5208.376" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5030.0264"
+     y="5477.5356"
+     id="text4100-17-6-7"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-3-3-3"
+       x="5072.626"
+       y="5477.5356">t ⋯ </tspan><tspan
+       sodipodi:role="line"
+       x="5030.0264"
+       y="5812.0596"
+       id="tspan4104-7-9-4" /><tspan
+       sodipodi:role="line"
+       x="5030.0264"
+       y="6146.5835"
+       id="tspan4106-8-7-6" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-2-5-5"
+     width="669.04773"
+     height="334.52371"
+     x="4705.4048"
+     y="5208.6987" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4192.7764"
+     y="5482.5493"
+     id="text4100-1-3-5-5"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-7-1-1"
+       x="4192.7764"
+       y="5482.5493">⋯ t+o</tspan><tspan
+       sodipodi:role="line"
+       x="4192.7764"
+       y="5817.0732"
+       id="tspan4104-5-9-4-1" /><tspan
+       sodipodi:role="line"
+       x="4192.7764"
+       y="6151.5972"
+       id="tspan4106-9-9-6-8" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-2-8-3"
+     width="1003.5715"
+     height="334.52393"
+     x="3701.8342"
+     y="5208.376" />
+</svg>
diff --git a/src/lessons/sort/pancake/img/gates-f1.png b/src/lessons/sort/pancake/img/gates-f1.png
new file mode 100644
index 0000000..e28b66c
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-f1.png differ
diff --git a/src/lessons/sort/pancake/img/gates-f1.svg b/src/lessons/sort/pancake/img/gates-f1.svg
new file mode 100644
index 0000000..06f75b2
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-f1.svg
@@ -0,0 +1,650 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Mon Jul 15 19:34:10 2013 -->
+
+<!-- Magnification: 1.050 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351"
+   height="226"
+   viewBox="1688 3196 4696.7147 3021.1806"
+   id="svg2"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-f1.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-f1.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata184">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs182" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="4"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview180"
+     showgrid="true"
+     inkscape:zoom="1.7094016"
+     inkscape:cx="95.368261"
+     inkscape:cy="98.452529"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg2"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3208"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="700.5px"
+       originy="100.5px" />
+  </sodipodi:namedview>
+  <g
+     id="g4091"
+     transform="translate(4690.0243,420.9712)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2363.738"
+     y="3470.0698"
+     id="text4100"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102"
+       x="2363.738"
+       y="3470.0698">t ⋯ t+ko</tspan><tspan
+       sodipodi:role="line"
+       x="2363.738"
+       y="3804.5938"
+       id="tspan4104" /><tspan
+       sodipodi:role="line"
+       x="2363.738"
+       y="4139.1172"
+       id="tspan4106" /></text>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5530.8716"
+     y="3475.4067"
+     id="text4100-1"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8"
+       x="5530.8716"
+       y="3475.4067">⋯ t−o</tspan><tspan
+       sodipodi:role="line"
+       x="5530.8716"
+       y="3809.9307"
+       id="tspan4104-5" /><tspan
+       sodipodi:role="line"
+       x="5530.8716"
+       y="4144.4541"
+       id="tspan4106-9" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158"
+     width="1338.0953"
+     height="334.52393"
+     x="1694.6904"
+     y="3201.2332" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5"
+     width="334.52383"
+     height="334.52383"
+     x="3032.7859"
+     y="3201.2332" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4036.3574"
+     y="3462.7078"
+     id="text4100-9"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1"
+       x="4036.3574"
+       y="3462.7078">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="4036.3574"
+       y="3797.2317"
+       id="tspan4104-4" /><tspan
+       sodipodi:role="line"
+       x="4036.3574"
+       y="4131.7554"
+       id="tspan4106-1" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8"
+     width="1338.0953"
+     height="334.52393"
+     x="3367.3098"
+     y="3201.2332" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8"
+     width="334.52383"
+     height="334.52383"
+     x="4705.4048"
+     y="3201.2332" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3"
+     width="1003.5715"
+     height="334.52393"
+     x="5039.9287"
+     y="3201.2332" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2"
+     width="334.52383"
+     height="334.52383"
+     x="6043.5005"
+     y="3201.2332" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4036.3574"
+     y="4139.1167"
+     id="text4100-3"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9"
+       x="4078.957"
+       y="4139.1167">t+ko ⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="4036.3574"
+       y="4473.6406"
+       id="tspan4104-9" /><tspan
+       sodipodi:role="line"
+       x="4036.3574"
+       y="4808.1646"
+       id="tspan4106-0" /></text>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5530.8716"
+     y="4144.4536"
+     id="text4100-1-9"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5"
+       x="5530.8716"
+       y="4144.4536">⋯ t−o</tspan><tspan
+       sodipodi:role="line"
+       x="5530.8716"
+       y="4478.9775"
+       id="tspan4104-5-1" /><tspan
+       sodipodi:role="line"
+       x="5530.8716"
+       y="4813.5015"
+       id="tspan4106-9-2" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-6"
+     width="1338.0953"
+     height="334.52393"
+     x="1694.6907"
+     y="3870.2808" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-7"
+     width="334.52383"
+     height="334.52383"
+     x="3032.7861"
+     y="3870.2808" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2363.738"
+     y="4131.7549"
+     id="text4100-9-2"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-4"
+       x="2363.738"
+       y="4131.7549">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="2363.738"
+       y="4466.2788"
+       id="tspan4104-4-6" /><tspan
+       sodipodi:role="line"
+       x="2363.738"
+       y="4800.8027"
+       id="tspan4106-1-6" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4"
+     width="1338.0953"
+     height="334.52393"
+     x="3367.3101"
+     y="3870.2808" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-4"
+     width="334.52383"
+     height="334.52383"
+     x="4705.4053"
+     y="3870.2808" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5"
+     width="1003.5715"
+     height="334.52393"
+     x="5039.9287"
+     y="3870.2808" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-3"
+     width="334.52383"
+     height="334.52383"
+     x="6043.5005"
+     y="3870.2808" />
+  <g
+     transform="translate(3351.929,1090.0188)"
+     id="g4091-2">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-7"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-1"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4036.3569"
+     y="4808.1646"
+     id="text4100-3-1"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9-4"
+       x="4078.9565"
+       y="4808.1646">t+ko ⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="4036.3569"
+       y="5142.6885"
+       id="tspan4104-9-7" /><tspan
+       sodipodi:role="line"
+       x="4036.3569"
+       y="5477.2124"
+       id="tspan4106-0-6" /></text>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5530.8716"
+     y="4813.5015"
+     id="text4100-1-9-7"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3"
+       x="5530.8716"
+       y="4813.5015">⋯ t−o</tspan><tspan
+       sodipodi:role="line"
+       x="5530.8716"
+       y="5148.0254"
+       id="tspan4104-5-1-9" /><tspan
+       sodipodi:role="line"
+       x="5530.8716"
+       y="5482.5493"
+       id="tspan4106-9-2-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-6-7"
+     width="1338.0953"
+     height="334.52393"
+     x="2029.2144"
+     y="4539.3281" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-7-3"
+     width="334.52383"
+     height="334.52383"
+     x="1694.6904"
+     y="4539.3281" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2698.2617"
+     y="4800.8027"
+     id="text4100-9-2-6"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-4-2"
+       x="2698.2617"
+       y="4800.8027">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="2698.2617"
+       y="5135.3267"
+       id="tspan4104-4-6-3" /><tspan
+       sodipodi:role="line"
+       x="2698.2617"
+       y="5469.8506"
+       id="tspan4106-1-6-0" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4-7"
+     width="1338.0953"
+     height="334.52393"
+     x="3367.3098"
+     y="4539.3281" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-4-3"
+     width="334.52383"
+     height="334.52383"
+     x="4705.4048"
+     y="4539.3281" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8"
+     width="1003.5715"
+     height="334.52393"
+     x="5039.9287"
+     y="4539.3281" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-3-7"
+     width="334.52383"
+     height="334.52383"
+     x="6043.5005"
+     y="4539.3281" />
+  <g
+     transform="translate(6028.1196,1759.0665)"
+     id="g4091-2-4">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-7-5"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-1-7"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3701.8333"
+     y="5477.2124"
+     id="text4100-3-1-0"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9-4-4"
+       x="3744.4329"
+       y="5477.2124">t ⋯ t+ko </tspan><tspan
+       sodipodi:role="line"
+       x="3701.8333"
+       y="5811.7363"
+       id="tspan4104-9-7-2" /><tspan
+       sodipodi:role="line"
+       x="3701.8333"
+       y="6146.2603"
+       id="tspan4106-0-6-6" /></text>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2185.6333"
+     y="5482.5493"
+     id="text4100-1-9-7-4"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5"
+       x="2185.6333"
+       y="5482.5493">t−o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="2185.6333"
+       y="5817.0732"
+       id="tspan4104-5-1-9-1" /><tspan
+       sodipodi:role="line"
+       x="2185.6333"
+       y="6151.5972"
+       id="tspan4106-9-2-5-9" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-6-7-2"
+     width="1338.0953"
+     height="334.52393"
+     x="4370.8813"
+     y="5208.376" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-7-3-4"
+     width="334.52383"
+     height="334.52383"
+     x="5708.9766"
+     y="5208.376" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5039.9287"
+     y="5469.8506"
+     id="text4100-9-2-6-0"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-4-2-6"
+       x="5039.9287"
+       y="5469.8506">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="5039.9287"
+       y="5804.3745"
+       id="tspan4104-4-6-3-1" /><tspan
+       sodipodi:role="line"
+       x="5039.9287"
+       y="6138.8984"
+       id="tspan4106-1-6-0-6" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4-7-3"
+     width="1338.0953"
+     height="334.52393"
+     x="3032.7859"
+     y="5208.376" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-4-3-6"
+     width="334.52383"
+     height="334.52383"
+     x="2698.262"
+     y="5208.376" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5"
+     width="1003.5715"
+     height="334.52393"
+     x="1694.6907"
+     y="5208.376" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-3-7-0"
+     width="334.52383"
+     height="334.52383"
+     x="6043.5005"
+     y="5208.376" />
+  <g
+     transform="translate(3017.4051,2428.1142)"
+     id="g4091-2-4-3">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-7-5-0"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-1-7-8"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3701.8333"
+     y="6146.2603"
+     id="text4100-3-1-0-7"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-5-8-5-6.png"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9-4-4-5"
+       x="3744.4329"
+       y="6146.2603">t ⋯ t+ko </tspan><tspan
+       sodipodi:role="line"
+       x="3701.8333"
+       y="6480.7842"
+       id="tspan4104-9-7-2-1" /><tspan
+       sodipodi:role="line"
+       x="3701.8333"
+       y="6815.3081"
+       id="tspan4106-0-6-6-7" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-6-7-2-0"
+     width="1338.0953"
+     height="334.52393"
+     x="4370.8813"
+     y="5877.4238"
+     inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-5-8-5-6.png"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-7-3-4-9"
+     width="334.52383"
+     height="334.52383"
+     x="5708.9766"
+     y="5877.4238"
+     inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-5-8-5-6.png"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5039.9287"
+     y="6138.8984"
+     id="text4100-9-2-6-0-4"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-5-8-5-6.png"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-4-2-6-7"
+       x="5039.9287"
+       y="6138.8984">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="5039.9287"
+       y="6473.4224"
+       id="tspan4104-4-6-3-1-7" /><tspan
+       sodipodi:role="line"
+       x="5039.9287"
+       y="6807.9463"
+       id="tspan4106-1-6-0-6-3" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4-7-3-7"
+     width="1338.0953"
+     height="334.52393"
+     x="3032.7859"
+     y="5877.4238"
+     inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-5-8-5-6.png"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-3-7-0-1"
+     width="334.52383"
+     height="334.52383"
+     x="6043.5005"
+     y="5877.4238" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-4-3-6-7"
+     width="334.52383"
+     height="334.52383"
+     x="1694.6904"
+     y="5877.4238"
+     inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-5-8-5-6.png"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2520.1572"
+     y="6151.5972"
+     id="text4100-1-9-7-4-3"
+     sodipodi:linespacing="125%"
+     inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/rect4158-5-9-9-3-5-8-5-6.png"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-3-5-7"
+       x="2520.1572"
+       y="6151.5972">⋯t−o</tspan><tspan
+       sodipodi:role="line"
+       x="2520.1572"
+       y="6486.1211"
+       id="tspan4104-5-1-9-1-2" /><tspan
+       sodipodi:role="line"
+       x="2520.1572"
+       y="6820.645"
+       id="tspan4106-9-2-5-9-6" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-8-5-6"
+     width="1003.5715"
+     height="334.52393"
+     x="2029.2146"
+     y="5877.4238"
+     inkscape:export-xdpi="90"
+     inkscape:export-ydpi="90" />
+</svg>
diff --git a/src/lessons/sort/pancake/img/gates-f2.png b/src/lessons/sort/pancake/img/gates-f2.png
new file mode 100644
index 0000000..5b1e5d0
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-f2.png differ
diff --git a/src/lessons/sort/pancake/img/gates-f2.svg b/src/lessons/sort/pancake/img/gates-f2.svg
new file mode 100644
index 0000000..3f09fda
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-f2.svg
@@ -0,0 +1,620 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Tue Jul 16 00:12:50 2013 -->
+
+<!-- Magnification: 1.050 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351.00031"
+   height="225.99988"
+   viewBox="1877 3196 4696.7187 3021.1789"
+   id="svg6590"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-f2.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-f2.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata6772">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs6770" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview6768"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="1.992267"
+     inkscape:cx="251.66547"
+     inkscape:cy="84.578884"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg6590">
+    <inkscape:grid
+       type="xygrid"
+       id="grid6983"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="-49.498991px"
+       originy="-99.499882px" />
+  </sodipodi:namedview>
+  <g
+     id="g4091"
+     transform="translate(6217.133,420.29623)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2552.7515"
+     y="3469.3948"
+     id="text4100"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102"
+       x="2552.7515"
+       y="3469.3948">t ⋯ t+ko</tspan><tspan
+       sodipodi:role="line"
+       x="2552.7515"
+       y="3803.9187"
+       id="tspan4104" /><tspan
+       sodipodi:role="line"
+       x="2552.7515"
+       y="4138.4424"
+       id="tspan4106" /></text>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4047.2661"
+     y="3474.7317"
+     id="text4100-1"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8"
+       x="4047.2661"
+       y="3474.7317">⋯ t−o</tspan><tspan
+       sodipodi:role="line"
+       x="4047.2661"
+       y="3809.2556"
+       id="tspan4104-5" /><tspan
+       sodipodi:role="line"
+       x="4047.2661"
+       y="4143.7793"
+       id="tspan4106-9" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158"
+     width="1338.0953"
+     height="334.52393"
+     x="1883.7039"
+     y="3200.5581" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5"
+     width="334.52383"
+     height="334.52383"
+     x="3221.7993"
+     y="3200.5581" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5563.4658"
+     y="3462.0327"
+     id="text4100-9"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1"
+       x="5563.4658"
+       y="3462.0327">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="5563.4658"
+       y="3796.5566"
+       id="tspan4104-4" /><tspan
+       sodipodi:role="line"
+       x="5563.4658"
+       y="4131.0801"
+       id="tspan4106-1" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8"
+     width="1338.0953"
+     height="334.52393"
+     x="4894.4185"
+     y="3200.5581" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8"
+     width="334.52383"
+     height="334.52383"
+     x="4559.8945"
+     y="3200.5581" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3"
+     width="1003.5715"
+     height="334.52393"
+     x="3556.3232"
+     y="3200.5581" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2"
+     width="334.52383"
+     height="334.52383"
+     x="6232.5142"
+     y="3200.5581" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5563.4658"
+     y="4138.4414"
+     id="text4100-3"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9"
+       x="5606.0654"
+       y="4138.4414">t+ko ⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="5563.4658"
+       y="4472.9653"
+       id="tspan4104-9" /><tspan
+       sodipodi:role="line"
+       x="5563.4658"
+       y="4807.4893"
+       id="tspan4106-0" /></text>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4047.2656"
+     y="4143.7778"
+     id="text4100-1-9"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5"
+       x="4047.2656"
+       y="4143.7778">t−o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="4047.2656"
+       y="4478.3018"
+       id="tspan4104-5-1" /><tspan
+       sodipodi:role="line"
+       x="4047.2656"
+       y="4812.8257"
+       id="tspan4106-9-2" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-6"
+     width="1338.0953"
+     height="334.52393"
+     x="1883.7041"
+     y="3869.606" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-7"
+     width="334.52383"
+     height="334.52383"
+     x="4559.8945"
+     y="3869.606" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2552.7515"
+     y="4131.0796"
+     id="text4100-9-2"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-4"
+       x="2552.7515"
+       y="4131.0796">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="2552.7515"
+       y="4465.6035"
+       id="tspan4104-4-6" /><tspan
+       sodipodi:role="line"
+       x="2552.7515"
+       y="4800.1274"
+       id="tspan4106-1-6" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4"
+     width="1338.0953"
+     height="334.52393"
+     x="4894.4185"
+     y="3869.606" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-4"
+     width="334.52383"
+     height="334.52383"
+     x="3221.7998"
+     y="3869.6057" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5"
+     width="1003.5715"
+     height="334.52393"
+     x="3556.3232"
+     y="3869.6057" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-3"
+     width="334.52383"
+     height="334.52383"
+     x="6232.5142"
+     y="3869.606" />
+  <g
+     transform="translate(4879.0377,1089.3439)"
+     id="g4091-2">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-7"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-1"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5563.4658"
+     y="4807.4893"
+     id="text4100-3-8"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9-2"
+       x="5606.0654"
+       y="4807.4893">t+ko ⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="5563.4658"
+       y="5142.0132"
+       id="tspan4104-9-7" /><tspan
+       sodipodi:role="line"
+       x="5563.4658"
+       y="5476.5371"
+       id="tspan4106-0-4" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4-7"
+     width="1338.0953"
+     height="334.52393"
+     x="4894.4185"
+     y="4538.6533" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-3-3"
+     width="334.52383"
+     height="334.52383"
+     x="6232.5142"
+     y="4538.6533" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2709.1704"
+     y="4812.8257"
+     id="text4100-1-9-8"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-8"
+       x="2709.1704"
+       y="4812.8257">⋯ t−o</tspan><tspan
+       sodipodi:role="line"
+       x="2709.1704"
+       y="5147.3496"
+       id="tspan4104-5-1-1" /><tspan
+       sodipodi:role="line"
+       x="2709.1704"
+       y="5481.8735"
+       id="tspan4106-9-2-1" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-6-9"
+     width="1338.0953"
+     height="334.52393"
+     x="3556.3232"
+     y="4538.6533" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-7-5"
+     width="334.52383"
+     height="334.52383"
+     x="1883.7039"
+     y="4538.6533" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4225.3706"
+     y="4800.1274"
+     id="text4100-9-2-3"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-4-0"
+       x="4225.3706"
+       y="4800.1274">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="4225.3706"
+       y="5134.6514"
+       id="tspan4104-4-6-2" /><tspan
+       sodipodi:role="line"
+       x="4225.3706"
+       y="5469.1753"
+       id="tspan4106-1-6-9" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-4-2"
+     width="334.52383"
+     height="334.52383"
+     x="3221.7993"
+     y="4538.6533" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-3"
+     width="1003.5715"
+     height="334.52393"
+     x="2218.228"
+     y="4538.6533" />
+  <g
+     transform="translate(6217.133,1758.3915)"
+     id="g4091-2-2">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-7-1"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-1-6"
+       inkscape:connector-curvature="0" />
+  </g>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-3-3-3"
+     width="334.52383"
+     height="334.52383"
+     x="6232.5137"
+     y="5207.7007" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5385.3608"
+     y="5481.873"
+     id="text4100-1-9-8-5"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-8-6"
+       x="5385.3608"
+       y="5481.873">t−o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="5385.3608"
+       y="5816.397"
+       id="tspan4104-5-1-1-6" /><tspan
+       sodipodi:role="line"
+       x="5385.3608"
+       y="6150.9209"
+       id="tspan4106-9-2-1-8" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-6-9-4"
+     width="1338.0953"
+     height="334.52393"
+     x="3221.7993"
+     y="5207.7007" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-7-5-5"
+     width="334.52383"
+     height="334.52383"
+     x="5897.9897"
+     y="5207.7007" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3890.8462"
+     y="5469.1748"
+     id="text4100-9-2-3-0"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-4-0-2"
+       x="3890.8462"
+       y="5469.1748">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="3890.8462"
+       y="5803.6987"
+       id="tspan4104-4-6-2-2" /><tspan
+       sodipodi:role="line"
+       x="3890.8462"
+       y="6138.2227"
+       id="tspan4106-1-6-9-1" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-4-2-7"
+     width="334.52383"
+     height="334.52383"
+     x="4559.8945"
+     y="5207.7007" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-3-6"
+     width="1003.5715"
+     height="334.52393"
+     x="4894.4185"
+     y="5207.7007" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2552.7515"
+     y="5476.5376"
+     id="text4100-11"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-13"
+       x="2552.7515"
+       y="5476.5376">t ⋯ t+ko</tspan><tspan
+       sodipodi:role="line"
+       x="2552.7515"
+       y="5811.0615"
+       id="tspan4104-3" /><tspan
+       sodipodi:role="line"
+       x="2552.7515"
+       y="6145.5854"
+       id="tspan4106-4" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-67"
+     width="1338.0953"
+     height="334.52393"
+     x="1883.7039"
+     y="5207.7007" />
+  <g
+     transform="translate(4879.0377,2427.4392)"
+     id="g4091-2-2-9">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-7-1-5"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-1-6-8"
+       inkscape:connector-curvature="0" />
+  </g>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-3-3-3-0"
+     width="669.04718"
+     height="334.52393"
+     x="5897.9897"
+     y="5876.7485" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5385.3608"
+     y="6150.9209"
+     id="text4100-1-9-8-5-4"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-8-5-8-6-2"
+       x="5385.3608"
+       y="6150.9209">t−o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="5385.3608"
+       y="6485.4448"
+       id="tspan4104-5-1-1-6-3" /><tspan
+       sodipodi:role="line"
+       x="5385.3608"
+       y="6819.9688"
+       id="tspan4106-9-2-1-8-0" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9-9-3-5-3-6-9"
+     width="1003.5715"
+     height="334.52393"
+     x="4894.4185"
+     y="5876.7485" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="4225.3706"
+     y="6145.5845"
+     id="text4100-3-1"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9-4"
+       x="4267.9702"
+       y="6145.5845">t+ko ⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="4225.3706"
+       y="6480.1084"
+       id="tspan4104-9-6" /><tspan
+       sodipodi:role="line"
+       x="4225.3706"
+       y="6814.6323"
+       id="tspan4106-0-9" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4-5"
+     width="1338.0953"
+     height="334.52393"
+     x="3556.3232"
+     y="5876.749" />
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-6-9-4-2"
+     width="1338.0953"
+     height="334.52393"
+     x="2218.2278"
+     y="5876.7485" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2887.2747"
+     y="6138.2227"
+     id="text4100-9-2-3-0-4"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-4-0-2-7"
+       x="2887.2747"
+       y="6138.2227">t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="2887.2747"
+       y="6472.7466"
+       id="tspan4104-4-6-2-2-6" /><tspan
+       sodipodi:role="line"
+       x="2887.2747"
+       y="6807.2705"
+       id="tspan4106-1-6-9-1-7" /></text>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-4-2-7-1"
+     width="334.52383"
+     height="334.52383"
+     x="1883.7039"
+     y="5876.7485" />
+</svg>
diff --git a/src/lessons/sort/pancake/img/gates-g.png b/src/lessons/sort/pancake/img/gates-g.png
new file mode 100644
index 0000000..cf9f6ae
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-g.png differ
diff --git a/src/lessons/sort/pancake/img/gates-g.svg b/src/lessons/sort/pancake/img/gates-g.svg
new file mode 100644
index 0000000..96b557e
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-g.svg
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Tue Jul 16 15:43:20 2013 -->
+
+<!-- Magnification: 1.050 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351.00006"
+   height="126.00002"
+   viewBox="1877 3196 4696.7155 1672.2225"
+   id="svg3215"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-g1.fig.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-g1.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata3309">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs3307" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview3305"
+     showgrid="true"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0"
+     inkscape:zoom="2.1886782"
+     inkscape:cx="309.88705"
+     inkscape:cy="50.489826"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg3215">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3520"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="350.50002px"
+       originy="-124.49999px" />
+  </sodipodi:namedview>
+  <g
+     id="g4091"
+     transform="translate(3206.4052,409.7712)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2552.738"
+     y="3458.8694"
+     id="text4100"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102"
+       x="2552.738"
+       y="3458.8694">t ⋯ t+ko</tspan><tspan
+       sodipodi:role="line"
+       x="2552.738"
+       y="3793.3933"
+       id="tspan4104" /><tspan
+       sodipodi:role="line"
+       x="2552.738"
+       y="4127.917"
+       id="tspan4106" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158"
+     width="1338.0953"
+     height="334.52393"
+     x="1883.6904"
+     y="3190.0327" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5"
+     width="1003.5708"
+     height="334.52402"
+     x="3221.7869"
+     y="3190.0327" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5073.5586"
+     y="3439.2798"
+     id="text4100-9"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1"
+       x="5073.5586"
+       y="3439.2798">t+(k+1)o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="5073.5586"
+       y="3773.8037"
+       id="tspan4104-4" /><tspan
+       sodipodi:role="line"
+       x="5073.5586"
+       y="4108.3276"
+       id="tspan4106-1" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8"
+     width="1672.6194"
+     height="334.52399"
+     x="4225.3574"
+     y="3190.033" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2"
+     width="669.0481"
+     height="334.5235"
+     x="5897.9771"
+     y="3190.033" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2552.7388"
+     y="4127.9165"
+     id="text4100-3"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9"
+       x="2595.3384"
+       y="4127.9165">t+ko ⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="2552.7388"
+       y="4462.4404"
+       id="tspan4104-9" /><tspan
+       sodipodi:role="line"
+       x="2552.7388"
+       y="4796.9644"
+       id="tspan4106-0" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4"
+     width="1338.0953"
+     height="334.52393"
+     x="1883.6908"
+     y="3859.0806" />
+  <g
+     transform="translate(4209.9767,1078.8189)"
+     id="g4091-2">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-7"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-1"
+       inkscape:connector-curvature="0" />
+  </g>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9"
+     width="1003.5708"
+     height="334.52402"
+     x="3221.7869"
+     y="3859.0803" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5073.5586"
+     y="4108.3276"
+     id="text4100-9-6"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-8"
+       x="5073.5586"
+       y="4108.3276">t+(k+1)o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="5073.5586"
+       y="4442.8516"
+       id="tspan4104-4-0" /><tspan
+       sodipodi:role="line"
+       x="5073.5586"
+       y="4777.3755"
+       id="tspan4106-1-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-3"
+     width="1672.6195"
+     height="334.52399"
+     x="4225.3574"
+     y="3859.0806" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-6"
+     width="669.0481"
+     height="334.52344"
+     x="5897.9771"
+     y="3859.0806" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3556.3096"
+     y="4796.9648"
+     id="text4100-0"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-92"
+       x="3556.3096"
+       y="4796.9648">t ⋯ t+ko</tspan><tspan
+       sodipodi:role="line"
+       x="3556.3096"
+       y="5131.4888"
+       id="tspan4104-1" /><tspan
+       sodipodi:role="line"
+       x="3556.3096"
+       y="5466.0127"
+       id="tspan4106-01" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-55"
+     width="1338.0953"
+     height="334.52393"
+     x="2887.262"
+     y="4528.1284" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8"
+     width="1003.5708"
+     height="334.52402"
+     x="1883.6914"
+     y="4528.1284" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5073.5586"
+     y="4777.3755"
+     id="text4100-9-6-7"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-8-1"
+       x="5073.5586"
+       y="4777.3755">t+(k+1)o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="5073.5586"
+       y="5111.8994"
+       id="tspan4104-4-0-0" /><tspan
+       sodipodi:role="line"
+       x="5073.5586"
+       y="5446.4233"
+       id="tspan4106-1-5-7" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-3-7"
+     width="1672.6195"
+     height="334.52399"
+     x="4225.3574"
+     y="4528.1284" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-6-8"
+     width="669.0481"
+     height="334.52338"
+     x="5897.9771"
+     y="4528.1284" />
+</svg>
diff --git a/src/lessons/sort/pancake/img/gates-h.png b/src/lessons/sort/pancake/img/gates-h.png
new file mode 100644
index 0000000..b5acf04
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-h.png differ
diff --git a/src/lessons/sort/pancake/img/gates-h.svg b/src/lessons/sort/pancake/img/gates-h.svg
new file mode 100644
index 0000000..8cc8b33
--- /dev/null
+++ b/src/lessons/sort/pancake/img/gates-h.svg
@@ -0,0 +1,302 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Creator: fig2dev Version 3.2 Patchlevel 5d -->
+
+<!-- CreationDate: Tue Jul 16 15:49:47 2013 -->
+
+<!-- Magnification: 1.050 -->
+
+<svg
+   xmlns:dc="http://purl.org/dc/elements/1.1/"
+   xmlns:cc="http://creativecommons.org/ns#"
+   xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+   xmlns:svg="http://www.w3.org/2000/svg"
+   xmlns="http://www.w3.org/2000/svg"
+   xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+   xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+   width="351.00006"
+   height="126.00005"
+   viewBox="1877 3196 4696.7155 1672.2229"
+   id="svg3772"
+   version="1.1"
+   inkscape:version="0.48.3.1 r9886"
+   sodipodi:docname="gates-h.svg"
+   inkscape:export-filename="/home/mquinson/Code/JLM/src/lessons/sort/pancake/gates-h.png"
+   inkscape:export-xdpi="90"
+   inkscape:export-ydpi="90">
+  <metadata
+     id="metadata3866">
+    <rdf:RDF>
+      <cc:Work
+         rdf:about="">
+        <dc:format>image/svg+xml</dc:format>
+        <dc:type
+           rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+        <dc:title></dc:title>
+      </cc:Work>
+    </rdf:RDF>
+  </metadata>
+  <defs
+     id="defs3864" />
+  <sodipodi:namedview
+     pagecolor="#ffffff"
+     bordercolor="#666666"
+     borderopacity="1"
+     objecttolerance="10"
+     gridtolerance="10"
+     guidetolerance="10"
+     inkscape:pageopacity="0"
+     inkscape:pageshadow="2"
+     inkscape:window-width="1920"
+     inkscape:window-height="993"
+     id="namedview3862"
+     showgrid="true"
+     inkscape:zoom="2.2645504"
+     inkscape:cx="199.6671"
+     inkscape:cy="22.628659"
+     inkscape:window-x="0"
+     inkscape:window-y="27"
+     inkscape:window-maximized="1"
+     inkscape:current-layer="svg3772"
+     fit-margin-top="0"
+     fit-margin-left="0"
+     fit-margin-right="0"
+     fit-margin-bottom="0">
+    <inkscape:grid
+       type="xygrid"
+       id="grid3976"
+       empspacing="5"
+       visible="true"
+       enabled="true"
+       snapvisiblegridlinesonly="true"
+       spacingx="25px"
+       spacingy="25px"
+       originx="225.50004px"
+       originy="-99.499982px" />
+  </sodipodi:namedview>
+  <g
+     id="g4091"
+     transform="translate(5882.5963,409.60791)">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86"
+       inkscape:connector-curvature="0" />
+  </g>
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2552.738"
+     y="3458.7061"
+     id="text4100"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102"
+       x="2552.738"
+       y="3458.7061">t ⋯ t+ko</tspan><tspan
+       sodipodi:role="line"
+       x="2552.738"
+       y="3793.23"
+       id="tspan4104" /><tspan
+       sodipodi:role="line"
+       x="2552.738"
+       y="4127.7539"
+       id="tspan4106" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158"
+     width="1338.0953"
+     height="334.52393"
+     x="1883.6904"
+     y="3189.8694" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5"
+     width="1003.5708"
+     height="334.52402"
+     x="3221.7869"
+     y="3189.8694" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5073.5586"
+     y="3439.1165"
+     id="text4100-9"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1"
+       x="5073.5586"
+       y="3439.1165">⋯ t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="5073.5586"
+       y="3773.6404"
+       id="tspan4104-4" /><tspan
+       sodipodi:role="line"
+       x="5073.5586"
+       y="4108.1641"
+       id="tspan4106-1" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8"
+     width="1672.6195"
+     height="334.52399"
+     x="4225.3574"
+     y="3189.8696" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2"
+     width="669.0481"
+     height="334.5235"
+     x="5897.9771"
+     y="3189.8696" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5228.9292"
+     y="4127.7534"
+     id="text4100-3"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9"
+       x="5271.5288"
+       y="4127.7534">t+ko ⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="5228.9292"
+       y="4462.2773"
+       id="tspan4104-9" /><tspan
+       sodipodi:role="line"
+       x="5228.9292"
+       y="4796.8013"
+       id="tspan4106-0" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4"
+     width="1338.0953"
+     height="334.52393"
+     x="4559.8818"
+     y="3858.9175" />
+  <g
+     transform="translate(4544.5009,1078.6557)"
+     id="g4091-2">
+    <path
+       d="m 15.380812,3114.7856 0,334.5239"
+       style="fill:#ff0000;stroke:#ff0000;stroke-width:31.79167366;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none"
+       id="path84-7"
+       inkscape:connector-curvature="0" />
+    <path
+       d="m -20.968543,3354.4795 36.34936,94.83 34.773754,-94.83 -71.123114,0"
+       style="fill:#ff0000;fill-opacity:1;fill-rule:evenodd;stroke:#ff0000;stroke-width:25.08928871"
+       id="path86-1"
+       inkscape:connector-curvature="0" />
+  </g>
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-9"
+     width="1003.5708"
+     height="334.52402"
+     x="3556.311"
+     y="3858.9175" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="2731.8918"
+     y="4108.1646"
+     id="text4100-9-6"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-8"
+       x="2731.8918"
+       y="4108.1646">t+(k+1)o ⋯</tspan><tspan
+       sodipodi:role="line"
+       x="2731.8918"
+       y="4442.6885"
+       id="tspan4104-4-0" /><tspan
+       sodipodi:role="line"
+       x="2731.8918"
+       y="4777.2124"
+       id="tspan4106-1-5" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-3"
+     width="1672.6195"
+     height="334.52399"
+     x="1883.6906"
+     y="3858.9175" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-6"
+     width="669.0481"
+     height="334.52344"
+     x="5897.9771"
+     y="3858.917" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8"
+     width="1003.5708"
+     height="334.52402"
+     x="1883.6914"
+     y="4527.9648" />
+  <rect
+     style="fill:#dcdcdc;fill-opacity:1;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-5-8-2-6-8"
+     width="669.0481"
+     height="334.52338"
+     x="5897.9771"
+     y="4527.9648" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="5228.9292"
+     y="4796.8013"
+     id="text4100-3-6"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-9-6"
+       x="5271.5288"
+       y="4796.8013">t+ko ⋯ t </tspan><tspan
+       sodipodi:role="line"
+       x="5228.9292"
+       y="5131.3252"
+       id="tspan4104-9-3" /><tspan
+       sodipodi:role="line"
+       x="5228.9292"
+       y="5465.8491"
+       id="tspan4106-0-2" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-4-8"
+     width="1338.0953"
+     height="334.52393"
+     x="4559.8818"
+     y="4527.9653" />
+  <text
+     xml:space="preserve"
+     style="font-size:267.61907959px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:center;line-height:125%;letter-spacing:0px;word-spacing:0px;writing-mode:lr-tb;text-anchor:middle;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans;-inkscape-font-specification:Sans"
+     x="3735.4631"
+     y="4777.2119"
+     id="text4100-9-69"
+     sodipodi:linespacing="125%"><tspan
+       sodipodi:role="line"
+       id="tspan4102-1-6"
+       x="3735.4631"
+       y="4777.2119">⋯ t+(k+1)o</tspan><tspan
+       sodipodi:role="line"
+       x="3735.4631"
+       y="5111.7358"
+       id="tspan4104-4-3" /><tspan
+       sodipodi:role="line"
+       x="3735.4631"
+       y="5446.2598"
+       id="tspan4106-1-3" /></text>
+  <rect
+     style="fill:none;stroke:#000000;stroke-width:13.38095379;stroke-linejoin:round;stroke-miterlimit:10;stroke-opacity:1;stroke-dasharray:none;stroke-dashoffset:0"
+     id="rect4158-8-45"
+     width="1672.6195"
+     height="334.52399"
+     x="2887.262"
+     y="4527.9648" />
+</svg>
diff --git a/src/lessons/sort/pancake/img/gates-k.png b/src/lessons/sort/pancake/img/gates-k.png
new file mode 100644
index 0000000..ade5ce9
Binary files /dev/null and b/src/lessons/sort/pancake/img/gates-k.png differ
diff --git a/img/world_pancake.png b/src/lessons/sort/pancake/img/world_pancake.png
similarity index 100%
rename from img/world_pancake.png
rename to src/lessons/sort/pancake/img/world_pancake.png
diff --git a/img/world_pancake.svg b/src/lessons/sort/pancake/img/world_pancake.svg
similarity index 100%
rename from img/world_pancake.svg
rename to src/lessons/sort/pancake/img/world_pancake.svg
diff --git a/src/lessons/sort/pancake/short_desc.fr.html b/src/lessons/sort/pancake/short_desc.fr.html
new file mode 100644
index 0000000..af1224e
--- /dev/null
+++ b/src/lessons/sort/pancake/short_desc.fr.html
@@ -0,0 +1,7 @@
+<h3>Le crépier psychorigide</h3>
+
+<p>Aidez le pauvre crépier psychorigide à trier sa pile de crêpes !</p>
+
+<p>Ce problème amusant débouche sur des algorithmes un peu plus compliqués à
+implémenter. Vous devez maîtriser les bases de la programmation ainsi que
+quelques algorithmes de tri avant de tenter cette leçon.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/short_desc.html b/src/lessons/sort/pancake/short_desc.html
new file mode 100644
index 0000000..18d16c4
--- /dev/null
+++ b/src/lessons/sort/pancake/short_desc.html
@@ -0,0 +1,7 @@
+<h3>The pancake problem</h3>
+
+<p>Help the poor psychorigid pancakes' chef to sort its pancake stack!</p>
+
+<p>This funny problem leads to algorithms that are somewhat more
+challenging to implement. You are supposed to master the bases of
+programming and some sorting algorithms to take this lesson.</p> 
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/universe/PancakeEntity.java b/src/lessons/sort/pancake/universe/PancakeEntity.java
new file mode 100644
index 0000000..d56be06
--- /dev/null
+++ b/src/lessons/sort/pancake/universe/PancakeEntity.java
@@ -0,0 +1,85 @@
+package lessons.sort.pancake.universe;
+
+import jlm.universe.Entity;
+import jlm.universe.World;
+
+public class PancakeEntity extends Entity {
+
+	/**
+	 * Must exist. Calling PancakeEntity("dummy name") is ok
+	 * Part of the copy process 
+	 * Must call super(name)
+	 * @return A new instance of PancakeEntity
+	 */
+	public PancakeEntity() {
+		super("Pancake Entity");
+	}
+
+	/** Copy constructor (used internally) */
+	public PancakeEntity(String name) {
+		super(name);
+	}
+	
+	/** Instantiation Constructor (used by exercises to setup the world) */ 
+	public PancakeEntity(String name, World world) {
+		super(name,world);
+	}
+	
+	/** 
+	 * A copy method needed by the JLM
+	 * @return a new PancakeEntity with the same name as the caller
+	 */
+	@Override
+	public Entity copy() {
+		return new PancakeEntity(this.name);
+	}
+
+	/**
+	 * Flip a certain amount of pancakes in the stack
+	 * @param numberOfPancakes : the number of pancakes, 
+	 * 			beginning from the top of the stack, that you want to flip.
+	 */
+	public void flip(int numberOfPancakes) {
+		((PancakeWorld) world).flip(numberOfPancakes);
+		stepUI();
+	}
+
+	/**
+	 * Give the radius of a specific pancake among others
+	 * @param pancakeNumber : the number of the pancake, beginning from the top of the stack, that you want to get.
+	 * @return The radius of the expected pancake
+	 */
+	public int getPancakeRadius(int pancakeNumber) {
+		return ((PancakeWorld) world).getPancakeRadius(pancakeNumber);
+	}
+
+	/** Returns the size of the pancake stack */
+	public int getStackSize() {
+		return ((PancakeWorld) world).getStackSize();
+	}
+	
+	/**
+	 * Returns whether the specific pancake (counting from the stack top) is upside down
+	 */
+	public boolean isPancakeUpsideDown(int rank) {
+		return ((PancakeWorld) world).isPancakeUpsideDown(rank);
+	}
+	
+	/**
+	 * Tell if the stack of pancakes is correctly sorted according to the control freak pancake seller
+	 */
+	public boolean isSorted() {
+		return ( (PancakeWorld) this.world).isSorted();
+	}
+	
+	/** Must exist so that exercises can instantiate the entity (Entity is abstract) 
+	 */
+	@Override
+	public void run() {
+	}
+	
+	/** Returns a string representation of the world */
+	public String toString(){
+		return "PancakeEntity (" + this.getClass().getName() + ")";
+	}
+}
diff --git a/src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java b/src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java
new file mode 100644
index 0000000..07121d8
--- /dev/null
+++ b/src/lessons/sort/pancake/universe/PancakeFlipButtonPanel.java
@@ -0,0 +1,115 @@
+package lessons.sort.pancake.universe;
+
+import java.awt.Component;
+import java.awt.FlowLayout;
+import java.awt.event.ActionEvent;
+import java.awt.event.ActionListener;
+
+import javax.swing.JButton;
+import javax.swing.JComboBox;
+import javax.swing.JLabel;
+import javax.swing.JPanel;
+
+import jlm.core.model.Game;
+import jlm.universe.EntityControlPanel;
+
+/**
+ * The control panel for the burned pancake world. 
+ * It allows you to use to flip the pancake
+ */
+public class PancakeFlipButtonPanel extends EntityControlPanel {
+
+	private static final long serialVersionUID = 1L;
+	private JButton validateButton;	// a validate button
+	private JComboBox pancakesAmountComboBox;	// a combobox which let you choose how many pancake you want to flip
+	private boolean burnedPancake;
+	/**
+     * Constructor of PancakeFlipButtonPanel
+     * It initializes the command panel
+     */
+	public PancakeFlipButtonPanel() {
+		super();
+		PancakeEntity pe = (PancakeEntity) Game.getInstance().getSelectedEntity();
+		this.add(this.createFlipPanel(pe));
+	}
+
+	/**
+	 * Create the command panel of the PancakeFlipButtonPanel
+	 * @param pe The current PancakeEntity
+	 * @return a JPanel containing the command panel
+	 */
+	private Component createFlipPanel(PancakeEntity pe) {
+		JPanel flipPanel = new JPanel();
+		
+		flipPanel.setLayout(new FlowLayout());
+		flipPanel.add(new JLabel("flip"));
+		
+		this.initPancakesAmountComboBox(pe);
+		flipPanel.add(this.pancakesAmountComboBox);
+		
+		this.initValidateButton();
+		flipPanel.add(this.validateButton);
+		
+		return flipPanel;
+	}
+
+	/**
+	 * Initialize the validate button
+	 */
+	private void initValidateButton() {
+		this.validateButton = new JButton("Validate");
+		this.validateButton.addActionListener(new ActionListener() {
+			@Override
+			public void actionPerformed(ActionEvent e) {
+				int amount = (Integer) pancakesAmountComboBox.getSelectedItem();
+				PancakeEntity pe = (PancakeEntity) Game.getInstance().getSelectedEntity();
+				pe.flip(amount);
+			}
+		});
+	}
+
+	/**
+	 * Initialize the combo box
+	 * @param pe the current selected PancakeEntity 
+	 * @param burnedPancake 
+	 */
+	private void initPancakesAmountComboBox(PancakeEntity pe) {
+		int n = pe.getStackSize();
+		Integer values[];
+		burnedPancake = ((PancakeWorld) Game.getInstance().getSelectedWorld()).isBurnedPancake(); 
+		if ( burnedPancake) {
+			values = new Integer[n];
+			for ( int i = 0 ; i < n ; i++) 
+				values[i] = i+1;
+			
+		} else {
+			values = new Integer[n-1];
+			for ( int i = 0 ; i < n-1 ; i++) 
+				values[i] = i+2;
+		}
+		this.pancakesAmountComboBox = new JComboBox(values) ;
+	}
+	
+	/**
+	 * Allow to enable or disable each component of the control panel
+	 */
+	@Override
+	public void setEnabledControl(boolean enabled) {
+		this.validateButton.setEnabled(enabled);
+		this.pancakesAmountComboBox.setEnabled(enabled);
+	}
+
+	boolean canClick = true;
+	public void setSelectedPancake(int amount) {
+		if (amount < 1 || amount > pancakesAmountComboBox.getItemCount()+1 || (amount==1&&!burnedPancake) )
+			canClick = false;
+		else {
+			canClick = true;
+			pancakesAmountComboBox.setSelectedIndex(amount+ (burnedPancake?-1:-2) );
+		}
+	}
+	public void doMove() {
+		if (canClick)
+			validateButton.doClick();
+	}
+}
diff --git a/src/lessons/sort/pancake/universe/PancakeWorld.fr.html b/src/lessons/sort/pancake/universe/PancakeWorld.fr.html
new file mode 100644
index 0000000..cdf5974
--- /dev/null
+++ b/src/lessons/sort/pancake/universe/PancakeWorld.fr.html
@@ -0,0 +1,31 @@
+<h1>Monde des crêpes</h1>
+
+<p>Cet univers est très simple, avec seulement cinq fonctions fournies.</p>
+
+<pre class="Java">int getStackSize()</pre>
+<pre class="python">getStackSize()</pre>
+Renvoie la taille du tas de crêpes, c'est à dire le nombre de crêpes qui le
+compose.
+
+<pre class="Java">int getPancakeRadius(int rang)</pre>
+<pre class="python">getPancakeRadius(rang)</pre>
+Renvoie le rayon de la crêpe passée en argument, sachant que le rang de la
+crêpe du haut est 0.
+
+<pre class="Java">boolean isPancakeUpsideDown(int rang)</pre>
+<pre class="python">isPancakeUpsideDown(rang)</pre>
+Renvoie ssi la crêpe passée en paramètre (la crêpe du haut étant de rang 0)
+est à l'envers, c'est-à-dire si sa face brulée est en haut.
+
+<pre class="Java">void flip(int quantité)</pre>
+<pre class="python">flip(quantité)</pre>
+Retourne les <code>quantité</code> premières crêpes de la pile, en partant
+du sommet de celle-ci.
+
+<pre class="Java">boolean isSorted()</pre>
+<pre class="python">isSorted()</pre>
+Renvoie si la pile de crêpes est correctement triée.
+
+<pre class="Java">boolean isSelected()</pre>
+<pre class="python">isSelected()</pre>
+Renvoi si le monde actuel est sélectionné dans l'interface graphique.  
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/universe/PancakeWorld.html b/src/lessons/sort/pancake/universe/PancakeWorld.html
new file mode 100644
index 0000000..101f190
--- /dev/null
+++ b/src/lessons/sort/pancake/universe/PancakeWorld.html
@@ -0,0 +1,27 @@
+<h1>PancakeWorld</h1>
+
+<p>This universe is very simple, with only five functions provided.</p>
+
+<pre class="Java">int getStackSize()</pre>
+<pre class="python">getStackSize()</pre>
+Returns the size of the stack, that is the amount of pancakes it contains.
+
+<pre class="Java">int getPancakeRadius(int rank)</pre>
+<pre class="python">getPancakeRadius(rank)</pre>
+Returns the radius of the pancake passed as argument, with the rank of the top-most pancake being 0.
+
+<pre class="Java">boolean isPancakeUpsideDown(int rank)</pre>
+<pre class="python">isPancakeUpsideDown(rank)</pre>
+Returns whether the pancake passed as argument upside-down, that is, if its burned side is on top. As usual, the top-most pancake is of rank 0.
+
+<pre class="Java">void flip(int amount)</pre>
+<pre class="python">flip(amount)</pre>
+Flips the <code>amount</code> first pancakes composing the stack, from the top of it.
+
+<pre class="Java">boolean isSorted()</pre>
+<pre class="python">isSorted()</pre>
+Returns whether the pancake stack is correctly sorted.
+
+<pre class="Java">boolean isSelected()</pre>
+<pre class="python">isSelected()</pre>
+Returns whether the current world is selected in the graphical interface.  
\ No newline at end of file
diff --git a/src/lessons/sort/pancake/universe/PancakeWorld.java b/src/lessons/sort/pancake/universe/PancakeWorld.java
new file mode 100644
index 0000000..be507c8
--- /dev/null
+++ b/src/lessons/sort/pancake/universe/PancakeWorld.java
@@ -0,0 +1,340 @@
+package lessons.sort.pancake.universe;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+import javax.swing.ImageIcon;
+
+import jlm.core.model.Game;
+import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
+import jlm.core.ui.WorldView;
+import jlm.universe.EntityControlPanel;
+import jlm.universe.World;
+
+public class PancakeWorld extends World {
+
+	private int lastMove = -1;
+	protected int moveCount = 0;
+	private int selected = -1;
+	private boolean burnedWorld ;
+	public boolean wasRandom = false;
+	
+	/** Copy constructor */ 
+	public PancakeWorld(PancakeWorld world) {
+		super(world);
+	}
+	
+	/** Returns a component able of displaying the world */
+	@Override
+	public WorldView getView() {
+		return new PancakeWorldView(this);
+	}
+	/** Returns the icon of the universe */
+	// http://omgwtflols.deviantart.com/
+	// http://fc06.deviantart.net/fs71/f/2012/118/5/7/pixel_art__pancakes_with_s236rup_b236_omgwtflols-d4xu72c.gif
+	// http://omgwtflols.deviantart.com/art/Pixel-Art-Pancakes-with-syrup-298700868
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon(this,"../img/world_pancake.png");
+	}
+	PancakeFlipButtonPanel panel = null;
+	/** Returns the panel which let the user to interact dynamically with the world */
+	@Override
+	public EntityControlPanel getEntityControlPanel() {
+		if (panel == null)
+			panel = new PancakeFlipButtonPanel();
+		return panel;
+	}
+	/** Passes the mouse selection from view to the control panel */ 
+	public void setSelectedPancake(int rank) {
+		if (rank < 1 || rank > getStackSize() || (rank==1&&!burnedWorld) ) {
+			this.selected = -1;
+			panel.setSelectedPancake(selected);
+		} else {
+			this.selected = rank;
+			panel.setSelectedPancake(selected);
+			notifyWorldUpdatesListeners();
+		}
+		
+	}
+	/** Passes the mouse action from the view to the control panel */
+	public void doMove() {
+		panel.doMove();
+	}
+	
+	
+	/** 
+	 * Regular PancakeWorld constructor that creates a random plate
+	 * @param name : the name of the world
+	 * @param amountOfPancakes : the amount of pancakes in the stack
+	 * @param burnedPancake : if we take care of the fact that the pancake is burned on one side
+	 */
+	public PancakeWorld(String name, int size, boolean burnedPancake) {
+		super(name);
+		setDelay(200); // Delay (in ms) in default animations
+		
+		/* Create the pancakes */
+		this.pancakeStack =  new Pancake[size];
+		for (int i = 0; i < size; i++) 
+			pancakeStack[i] = new Pancake(i + 1);
+		
+		/* Mix them */
+		wasRandom = true;
+		while (isSorted()) 
+			for ( int rank = 0 ; rank < size ; rank++) {			
+				if ( Math.random() > 0.5) // Flipping time !
+					pancakeStack[rank].flip(); 
+
+				if ( Math.random() > 0.5) // Swapping time !
+					swap(rank, (int)(Math.random()*size));
+			}
+		
+		this.burnedWorld = burnedPancake;
+	}
+	/** 
+	 * Regular PancakeWorld constructor that takes the pancake sizes from the provided parameter
+	 * @param name the name of the world
+	 * @param sizes the size of each pancake
+	 * @param burnedPancake if we take care of the fact that the pancake is burned on one side
+	 */
+	public PancakeWorld(String name, int[] sizes, boolean burnedPancake) {
+		super(name);
+		setDelay(200); // Delay (in ms) in default animations
+		
+		/* Create the pancakes */
+		this.pancakeStack =  new Pancake[sizes.length];
+		for (int i = 0; i < sizes.length; i++) 
+			pancakeStack[i] = new Pancake(sizes[i]);
+		
+		this.burnedWorld = burnedPancake;
+	}
+	
+	/** Returns a textual description of the differences between the caller and the parameter */
+	@Override
+	public String diffTo(World o) {
+		if (o == null || !(o instanceof PancakeWorld))
+			return Game.i18n.tr("This is not a world of pancakes :-(");
+
+		PancakeWorld other = (PancakeWorld) o;
+		if (pancakeStack.length != other.pancakeStack.length)
+			return Game.i18n.tr("The two worlds are of differing size");
+
+		StringBuffer res = new StringBuffer();
+		for ( int i = 0;i< pancakeStack.length;i++) 
+			if ( !pancakeStack[i].equals(other.pancakeStack[i], burnedWorld)) 
+				res.append(" Pancake #"+(i+1)+" differs: "+pancakeStack[i].toString() +" vs "+other.pancakeStack[i].toString()+"\n");
+
+		return res.toString();
+	}
+
+	@Override
+	public boolean equals(Object o) {
+		if (o == null || !(o instanceof PancakeWorld))
+			return false;
+		PancakeWorld other = (PancakeWorld) o;
+		if (burnedWorld != other.burnedWorld)
+			return false;
+		if (pancakeStack.length != other.pancakeStack.length)
+			return false;
+		for ( int i = 0;i< pancakeStack.length;i++) 
+			if ( !pancakeStack[i].equals(other.pancakeStack[i], burnedWorld))
+				return false;
+		return true;
+	}
+	/** 
+	 * Reset the state of the current world to the one passed in argument
+	 * @param the world which must be the new start of your current world
+	 */
+	@Override
+	public void reset(World world) {
+		PancakeWorld other = (PancakeWorld) world;
+		this.pancakeStack = new Pancake[other.pancakeStack.length];
+		for (int i=0;i<pancakeStack.length;i++)
+			pancakeStack[i] = other.pancakeStack[i].copy();
+
+		this.burnedWorld = other.burnedWorld;
+		this.lastMove = other.lastMove;
+		super.reset(world);		
+	}
+
+	/** Ensures that the provided engine can be used to solve Pancake exercises */ 
+	@Override
+	public void setupBindings(ProgrammingLanguage lang, ScriptEngine e) throws ScriptException {
+		if (lang.equals(Game.PYTHON)) {
+			e.eval(
+				"def getStackSize():\n" +
+				"  return entity.getStackSize()\n" +
+				"def getPancakeRadius(rank):\n" +
+				"  return entity.getPancakeRadius(rank)\n" +
+				"def isPancakeUpsideDown(pancakeNumber):\n"+
+				"  return entity.isPancakeUpsideDown(pancakeNumber)\n" +
+				"def flip(numberOfPancakes):\n" +
+				"  entity.flip(numberOfPancakes)\n"	
+				);
+		} else {
+			throw new RuntimeException("No binding of PancakeWorld for "+lang);
+		}
+	}
+
+	/* --------------------------------------- */
+	private Pancake[] pancakeStack; // The stack of pancakes
+
+	private void swap(int from, int to) {
+		Pancake temp = pancakeStack[from];
+		pancakeStack[from] = pancakeStack[to];
+		pancakeStack[to] = temp;
+	}
+	/**
+	 * Flip a certain amount of pancakes in the stack
+	 * @param numberOfPancakes : the number of pancakes, beginning from the top of the stack, that you want to flip.
+	 */
+	public void flip(int numberOfPancakes) {
+		if (numberOfPancakes < 1) 
+			throw new IllegalArgumentException(Game.i18n.tr("Asked to flip {0} pancakes, but you must flip at least one", numberOfPancakes));
+		if (numberOfPancakes > this.getStackSize()) 
+			throw new IllegalArgumentException(Game.i18n.tr("Asked to flip {0} pancakes, but there is only {1} pancakes on this stack", numberOfPancakes,getStackSize()));
+		
+		//System.err.println("Flip("+numberOfPancakes+")");
+		/* Invert the pancakes' position */
+		int firstPancake = 0 ;
+		int lastPancake = numberOfPancakes-1;
+		while ( firstPancake < lastPancake )
+			this.swap(firstPancake++, lastPancake--);
+		
+		/* Change their orientation */
+		for (int i = 0 ;i<numberOfPancakes;i++)
+			pancakeStack[i].flip();
+		
+		this.lastMove = numberOfPancakes ;
+		this.selected = -1;
+		this.moveCount++;
+	}
+	
+	
+	/** Returns the index of the last flipped pancake */
+	protected int getLastMove() {
+		return lastMove;
+	}
+	protected int getSelectedPancake() {
+		return selected;
+	}
+	
+	/**
+	 * Give the size of a specific pancake among others
+	 * @param rank : the number of the pancake, beginning from the top of the stack, that you want to get.
+	 * @return The radius of the expected pancake
+	 */
+	public int getPancakeRadius(int rank) {
+		if ( rank < 0 || rank >= getStackSize())
+			throw new IllegalArgumentException(Game.i18n.tr("Cannot get the radius of pancake #{0} because it''s not between 0 and {1}",rank, getStackSize()));
+
+		return pancakeStack[rank].getRadius();
+	}
+	
+	/**
+	 * Give the size of the stack of pancakes
+	 * @return The number of pancakes in the stack
+	 */
+	public int getStackSize() {
+		return pancakeStack.length;
+	}
+	
+
+	/**
+	 * Returns if the specified pancake (counting from the stack top) is upside down
+	 */
+	public boolean isPancakeUpsideDown(int rank) {
+		if ( rank < 0 || rank >= getStackSize())
+			throw new IllegalArgumentException(Game.i18n.tr("Cannot get the orientation of pancake #{0} because it''s not between 0 and {1}",rank, getStackSize()));
+
+		return pancakeStack[rank].isUpsideDown();
+	}
+	
+	/** Returns whether the stack of pancakes is correctly sorted according to the control freak pancake seller */
+	public boolean isSorted() {
+		for ( int rank = 0 ; rank < pancakeStack.length ; rank++) {
+			Pancake pancake = pancakeStack[rank];
+			if (pancake.getRadius() != rank+1)
+				return false;
+			if (burnedWorld && pancake.isUpsideDown())
+				return false;
+		}
+		return true;
+	}
+	
+	/** Returns a string representation of the world */
+	public String toString(){
+		StringBuffer res = new StringBuffer("<PancakeWorld name:"+getName()+" size:"+getStackSize()+">");
+		for (Pancake p : pancakeStack) 
+			res.append(p.toString());
+		res.append("</PancakeWorld>");
+		return res.toString();
+	}
+
+	/** Returns whether we pay attention to the burned side or not */
+	public boolean isBurnedPancake() {
+		return burnedWorld;
+	}
+}
+
+class Pancake {
+	private int radius; // Radius of the pancake
+	private boolean upsideDown; // True if the burned face is facing the sky, else false
+	
+	public Pancake(int radius) {
+		this.radius = radius;
+		this.upsideDown = false;
+	}
+	
+	/**
+	 * Make a copy of the caller
+	 * @return a copy of the method caller
+	 */
+	public Pancake copy() {
+		Pancake res = new Pancake(this.getRadius());
+		if (this.isUpsideDown())
+			res.flip();
+		return res;
+	}
+	
+	/**
+	 * Indicate whether some other pancake is "equal to" this one
+	 * @param burnedMatter if we take care of the position of the burned part
+	 * @param Pancake other: the other pancake with which to compare
+	 * @return If the two pancakes are equals
+	 */
+	public boolean equals(Pancake other, boolean burnedMatter) {
+		if (getRadius() != other.getRadius())
+			return false;
+		if (burnedMatter && isUpsideDown() != other.isUpsideDown())
+			return false;
+				
+		return true;
+	}
+	
+	/** Flip a pancake, which leads to changing upsideDown */
+	public void flip() {
+		upsideDown = !upsideDown;
+	}
+	
+	/** Returns the radius of the pancake */
+	public int getRadius() {
+		return this.radius;
+	}
+	
+	/** Returns whether the pancake is upside down */
+	public boolean isUpsideDown() {
+		return this.upsideDown;
+	}
+	
+	/** Returns a string representation of the pancake */
+	public String toString() {
+		String s = "< Radius: "+this.getRadius();
+		if ( this.isUpsideDown())
+			s+=" , upside down";
+		
+		s+=" >";
+		return s;
+	}
+	
+}
diff --git a/src/lessons/sort/pancake/universe/PancakeWorldView.java b/src/lessons/sort/pancake/universe/PancakeWorldView.java
new file mode 100644
index 0000000..da004ac
--- /dev/null
+++ b/src/lessons/sort/pancake/universe/PancakeWorldView.java
@@ -0,0 +1,143 @@
+package lessons.sort.pancake.universe;
+
+import java.awt.BasicStroke;
+import java.awt.Color;
+import java.awt.Font;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.RenderingHints;
+import java.awt.Shape;
+import java.awt.Stroke;
+import java.awt.event.MouseEvent;
+import java.awt.event.MouseListener;
+import java.awt.geom.Ellipse2D;
+import java.awt.geom.Rectangle2D;
+
+import jlm.core.ui.WorldView;
+import jlm.universe.World;
+
+public class PancakeWorldView extends WorldView {
+
+	private static final long serialVersionUID = 1L;
+	private double height;
+		
+	public PancakeWorldView(World w) {
+		super(w);
+		
+		
+		addMouseListener(new MouseListener() {
+			@Override
+			public void mouseReleased(MouseEvent e) {}
+			@Override
+			public void mousePressed(MouseEvent e) {}
+			@Override
+			public void mouseExited(MouseEvent e) {}
+			@Override
+			public void mouseEntered(MouseEvent e) {}
+			
+			@Override
+			public void mouseClicked(MouseEvent e) {
+				int rank = (int) (e.getY()/height);
+						
+				((PancakeWorld) world).setSelectedPancake(rank+1);
+				if (e.getClickCount()==2)
+					((PancakeWorld) world).doMove();
+			}
+		});
+
+	}
+
+	/**
+	 * Draw the component of the world
+	 * @param g : some Graphics
+	 */
+	public void paintComponent(Graphics g) {
+		super.paintComponent(g);
+		PancakeWorld stack = (PancakeWorld) world;
+		int spatulaSize = 30;
+		
+		Graphics2D g2 = (Graphics2D) g;
+
+		g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING, RenderingHints.VALUE_ANTIALIAS_ON);
+		g2.setFont(new Font("Monaco", Font.PLAIN, 12));
+
+		/* clear board */
+		g2.setColor(Color.white);
+		g2.fill(new Rectangle2D.Double(0., 0., getWidth(), getHeight()));
+		
+		/* Draw the pancakes */
+		int stackSize = stack.getStackSize();
+		double usefullWidth = getWidth()-2*spatulaSize;
+		height = ((double)getHeight()) / stackSize;
+		
+		for (int rank=0;rank< stackSize;rank++) { 
+			int radius = stack.getPancakeRadius(rank);
+			double halfWidth =  usefullWidth/2. * ((double)radius) / ((double)(stackSize));
+			
+			Shape rect = new Rectangle2D.Double(spatulaSize+usefullWidth/2-halfWidth, height*rank, 2*halfWidth, height);
+
+			g2.setColor(Color.yellow) ;
+			g2.fill(rect);
+
+			g2.setColor(Color.black);
+			g2.draw(rect);
+			
+		}
+		// Draw the burnt side, if any
+		if (stack.isBurnedPancake()) {
+			g2.setColor(new Color(200, 113, 55)); // it's brown
+			double burntSize = Math.max(height/5, 4);
+
+			for (int rank=0;rank<stackSize;rank++) {
+				int radius = stack.getPancakeRadius(rank);
+				double halfWidth =  usefullWidth/2. * ((double)radius) / ((double)(stackSize));
+				
+				if (stack.isPancakeUpsideDown(rank)) 
+					g2.fill(new Rectangle2D.Double(spatulaSize+usefullWidth/2-halfWidth, height*rank, 2*halfWidth, burntSize));
+				else 
+					g2.fill(new Rectangle2D.Double(spatulaSize+usefullWidth/2-halfWidth, height*(rank+1)-burntSize, 2*halfWidth, burntSize));
+			}
+		}
+				
+		// draw the marker of the lastly flipped pancakes
+		if (stack.getSelectedPancake() > 0) {
+			int move = stack.getSelectedPancake();
+			Stroke old = g2.getStroke();
+			Stroke fat = new BasicStroke(3);
+			g2.setStroke(fat);
+			g2.setColor(Color.black);
+			g2.drawLine(spatulaSize, (int)(height*move), (int) (usefullWidth+spatulaSize), (int)(height*move) );
+			g2.drawLine(0,(int)(height*move-30), 30, (int)(height*move) );
+			g2.setStroke(old);			
+		} else if (stack.getLastMove() > 0) {
+			int move = stack.getLastMove();
+			Stroke old = g2.getStroke();
+			Stroke fat = new BasicStroke(3);
+			g2.setStroke(fat);
+			g2.setColor(Color.black);
+			g2.drawLine(spatulaSize, (int)(height*move), (int) (usefullWidth+spatulaSize), (int)(height*move) );
+			g2.drawLine(0,(int)(height*move+30), 30, (int)(height*move));
+			g2.setStroke(old);
+		}
+		
+		// Draw the markers indicating that pancakes are in row
+		double markerRadius = Math.max(height/8, 3);
+		g2.setColor(Color.magenta);
+		for (int rank = 1; rank<stackSize ;rank++) 
+			if (Math.abs(stack.getPancakeRadius(rank-1)-stack.getPancakeRadius(rank)) == 1) {
+				if (stack.isBurnedPancake()) {
+					if (stack.isPancakeUpsideDown(rank-1) != stack.isPancakeUpsideDown(rank))
+						continue; // Burnt sides don't match -> don't draw it
+					if (stack.isPancakeUpsideDown(rank) && stack.getPancakeRadius(rank-1) == stack.getPancakeRadius(rank)-1)
+						continue; // Burnt sides on bad side of pyramid 
+					if (!stack.isPancakeUpsideDown(rank) && stack.getPancakeRadius(rank-1) == stack.getPancakeRadius(rank)+1)
+						continue; // Burnt sides on bad side of pyramid 
+				}
+				g2.fill(new Ellipse2D.Double(spatulaSize+usefullWidth/2-markerRadius, height*rank-markerRadius, 
+						2*markerRadius,2*markerRadius) );
+			}
+
+		g2.setColor(Color.black);
+		g2.drawString(""+stack.moveCount+" moves", 0, 15);
+	}
+}
diff --git a/src/lessons/sort/selection/AlgSelectionSortEntity.py b/src/lessons/sort/selection/AlgSelectionSortEntity.py
index 0805928..3a7a71f 100644
--- a/src/lessons/sort/selection/AlgSelectionSortEntity.py
+++ b/src/lessons/sort/selection/AlgSelectionSortEntity.py
@@ -1,14 +1,9 @@
 # BEGIN SOLUTION
-		for (int i = 0; i < getValueCount(); i++) {
-			int min = i;	
-			int j;
-
-			/*  Find the smallest element in the unsorted list */
-			for (j = i + 1; j < getValueCount(); j++) {
-				if (isSmaller(j,min))
-					min = j;				
-			}
-			/* Swap the smallest unsorted element into the end of the sorted list. */
-			swap(min,i);
-		}
+for i in range(getValueCount()):
+	min = i
+	for j in range(i+1, getValueCount()):
+		if isSmaller(j,min):
+			min = j
+	# Swap the smallest unsorted element into the end of the sorted list. 
+	swap(min,i);
 # END SOLUTION
diff --git a/src/lessons/sort/shell/AlgShellSort.fr.html b/src/lessons/sort/shell/AlgShellSort.fr.html
index 25ec639..9b7743f 100644
--- a/src/lessons/sort/shell/AlgShellSort.fr.html
+++ b/src/lessons/sort/shell/AlgShellSort.fr.html
@@ -1,6 +1,4 @@
-<h1>Algorithme par insertion et variantes</h1>
-
-<h2>ShellSort</h2>
+<h2>Tri Shell</h2>
  
 Cet algorithme porte le nom de son auteur, Donald Shell, qui l'a publié en
 1959. Son principe peut être vu comme une application de l'idée du CombSort
diff --git a/src/lessons/sort/shell/AlgShellSort.html b/src/lessons/sort/shell/AlgShellSort.html
index 704413c..423f5a1 100644
--- a/src/lessons/sort/shell/AlgShellSort.html
+++ b/src/lessons/sort/shell/AlgShellSort.html
@@ -1,5 +1,3 @@
-<h1>Insertion algorithms and variations</h1>
-
 <h2>ShellSort</h2>
  
 This algorithm is named after its author, Donald Shell, who published it in
diff --git a/src/lessons/sort/short_desc.fr.html b/src/lessons/sort/short_desc.fr.html
new file mode 100644
index 0000000..0bf074f
--- /dev/null
+++ b/src/lessons/sort/short_desc.fr.html
@@ -0,0 +1,7 @@
+<h3>Algorithmes de tri</h3>
+
+<p>Cette leçon vous permet d'expérimenter avec des algorithmes de tri
+classiques (ainsi qu'avec certaines variantes moins classiques :)</p>
+
+<p>Vous êtes supposé maîtriser les bases de la programmation avant de tenter
+cette leçon.</p>
diff --git a/src/lessons/sort/short_desc.html b/src/lessons/sort/short_desc.html
new file mode 100644
index 0000000..21d85b4
--- /dev/null
+++ b/src/lessons/sort/short_desc.html
@@ -0,0 +1,7 @@
+<h3>Sorting Algorithms</h3>
+
+<p>This lesson allows to experiment with some classical sorting
+algorithms (and some less common variant of them :)</p>
+
+<p>You are supposed to master the bases of programming to take this
+lesson.</p>
diff --git a/src/lessons/turmites/Main.fr.html b/src/lessons/turmites/Main.fr.html
new file mode 100644
index 0000000..d4ece55
--- /dev/null
+++ b/src/lessons/turmites/Main.fr.html
@@ -0,0 +1,34 @@
+<h1>Les turmites</h1>
+
+<p>Cet ensemble d'activités vous permet de jouer avec les fourmis de Langton,
+qui sont des machines de Turing à deux dimensions. Il s'agit d'exercices
+d'application très simple, à la portée de débutants, mais ils ouvrent la
+porte sur un univers fascinant.</p>
+
+<p>Ce mécanisme a été inventé en 1986 par Chris Langton, et généralisé après de
+plusieures façons (comme nous le verrons dans les prochains exercices). Il a
+été prouvé en 2000 que la trajectoire de la fourmi peut être utilisée pour
+calculer n'importe quel circuit booléen, et que la fourmi est capable de
+calcul universel ( ie, n'importe quel calcul possible peut être réalisé en
+utilisant la fourmi comme instrument de calcul). Encore un autre sujet de
+fascination...</p>
+
+<p>Les fourmis de Langton multicolores ont été découvertes en 1995 par Propp et
+Al. Un fait amusant est que les fourmis dont le nom est une paire de lettres
+identiques (LL et RR) produisent des dessins symétriques. Ce fait a même été
+prouvé formellement.</p>
+
+<p>Consultez la page correspondante sur Wikipedia, à partir de laquelle cet
+exercice est inspiré, pour d'avantages de détails.</p>
+
+<h3>Que puis-je faire pour améliorer cet univers de JLM?</h3>
+
+<p>Comme souvent, plusieurs points pourraient être améliorés dans le code de
+cet univers pour l'améliorer :</p>
+<ul>
+  <li>Il nous manque probablement quelques exercices progressifs. Celui sur la
+création de turmites est particulièrement aride. Nous devrions probablement
+introduire les motifs de façon plus pédagogique.</li>
+  <li>Il serait peut-être amusant d'introduire un exercice sur les castors occupés
+(busy beavers)?</li>
+</ul>
diff --git a/src/lessons/turmites/Main.html b/src/lessons/turmites/Main.html
new file mode 100644
index 0000000..9a8e7a5
--- /dev/null
+++ b/src/lessons/turmites/Main.html
@@ -0,0 +1,28 @@
+<h1>The turmites</h1>
+
+<p>This set of activities lets you play with Langton's ants, that are 2D turing
+machines. They constitute very simple application problems, achievable
+by beginners, and open the door to an amazing world.</p>
+
+<p>This mechanism were invented in 1986 by Chris Langton, and later generalized 
+in several ways (as we shall see in the next exercises). It was proven in 2000 that 
+the ant's trajectory can be used to compute any boolean circuit, and thus that the 
+ant is capable of universal computation (ie, any possible computation can be achieved 
+using the ant as a computing device). Yet another subject of fascination...</p>
+
+<p>Multicolor Langton's ants were discovered in 1995 by Propp 
+et Al. Another funny fact is that the ants which name is a list of consecutive pair of 
+identical letters (LL and RR) produce symmetric patterns. This fact was even formally 
+proved.</p>
+
+<p>Check the corresponding wikipedia web page, of which this exercise is inspired, 
+for further details.</p>
+
+<h3>What can I do to improve this JLM universe?</h3>
+
+<p>As usual, there are several things that could be done in the code of this universe to improve it:</p>
+<ul>
+  <li>We are probably missing some good exercises. The turmite creator
+      exercise is a bit harsh: we could introduce the patterns in a more friendly manner.</li>
+  <li>We may want to write an exercise on the busy beaver, maybe?</li>
+</ul>
diff --git a/src/lessons/turmites/Main.java b/src/lessons/turmites/Main.java
new file mode 100644
index 0000000..a966a65
--- /dev/null
+++ b/src/lessons/turmites/Main.java
@@ -0,0 +1,22 @@
+package lessons.turmites;
+
+import java.io.IOException;
+
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
+import lessons.turmites.helloturmite.HelloTurmite;
+import lessons.turmites.langton.Langton;
+import lessons.turmites.langtoncolors.LangtonColors;
+import lessons.turmites.turmitecreator.TurmiteCreator;
+
+public class Main extends Lesson {
+
+	@Override
+	protected void loadExercises() throws IOException, BrokenWorldFileException {
+		addExercise(new Langton(this));
+		addExercise(new LangtonColors(this));
+		addExercise(new HelloTurmite(this));
+		addExercise(new TurmiteCreator(this));
+	}
+   
+}
diff --git a/src/lessons/turmites/helloturmite/HelloTurmite-answer0.map b/src/lessons/turmites/helloturmite/HelloTurmite-answer0.map
new file mode 100644
index 0000000..042e621
--- /dev/null
+++ b/src/lessons/turmites/helloturmite/HelloTurmite-answer0.map
@@ -0,0 +1,1260 @@
+TurmiteWorld: crabe (8342 steps)
+Size: 78x72
+Buggle(48,57): north,red,white,ant
+Cell(3,49): black,nobaggle,notopwall,noleftwall,
+Cell(3,51): black,nobaggle,notopwall,noleftwall,
+Cell(3,52): black,nobaggle,notopwall,noleftwall,
+Cell(4,49): black,nobaggle,notopwall,noleftwall,
+Cell(4,50): black,nobaggle,notopwall,noleftwall,
+Cell(4,51): black,nobaggle,notopwall,noleftwall,
+Cell(5,31): black,nobaggle,notopwall,noleftwall,
+Cell(5,35): black,nobaggle,notopwall,noleftwall,
+Cell(5,36): black,nobaggle,notopwall,noleftwall,
+Cell(5,37): black,nobaggle,notopwall,noleftwall,
+Cell(5,38): black,nobaggle,notopwall,noleftwall,
+Cell(5,49): black,nobaggle,notopwall,noleftwall,
+Cell(5,50): black,nobaggle,notopwall,noleftwall,
+Cell(5,51): black,nobaggle,notopwall,noleftwall,
+Cell(6,31): black,nobaggle,notopwall,noleftwall,
+Cell(6,32): black,nobaggle,notopwall,noleftwall,
+Cell(6,33): black,nobaggle,notopwall,noleftwall,
+Cell(6,34): black,nobaggle,notopwall,noleftwall,
+Cell(6,36): black,nobaggle,notopwall,noleftwall,
+Cell(6,37): black,nobaggle,notopwall,noleftwall,
+Cell(6,48): black,nobaggle,notopwall,noleftwall,
+Cell(6,49): black,nobaggle,notopwall,noleftwall,
+Cell(6,52): black,nobaggle,notopwall,noleftwall,
+Cell(6,53): black,nobaggle,notopwall,noleftwall,
+Cell(7,32): black,nobaggle,notopwall,noleftwall,
+Cell(7,34): black,nobaggle,notopwall,noleftwall,
+Cell(7,39): black,nobaggle,notopwall,noleftwall,
+Cell(7,40): black,nobaggle,notopwall,noleftwall,
+Cell(7,41): black,nobaggle,notopwall,noleftwall,
+Cell(7,42): black,nobaggle,notopwall,noleftwall,
+Cell(7,45): black,nobaggle,notopwall,noleftwall,
+Cell(7,48): black,nobaggle,notopwall,noleftwall,
+Cell(7,49): black,nobaggle,notopwall,noleftwall,
+Cell(7,50): black,nobaggle,notopwall,noleftwall,
+Cell(7,51): black,nobaggle,notopwall,noleftwall,
+Cell(7,52): black,nobaggle,notopwall,noleftwall,
+Cell(7,53): black,nobaggle,notopwall,noleftwall,
+Cell(7,54): black,nobaggle,notopwall,noleftwall,
+Cell(8,31): black,nobaggle,notopwall,noleftwall,
+Cell(8,32): black,nobaggle,notopwall,noleftwall,
+Cell(8,33): black,nobaggle,notopwall,noleftwall,
+Cell(8,36): black,nobaggle,notopwall,noleftwall,
+Cell(8,37): black,nobaggle,notopwall,noleftwall,
+Cell(8,39): black,nobaggle,notopwall,noleftwall,
+Cell(8,41): black,nobaggle,notopwall,noleftwall,
+Cell(8,45): black,nobaggle,notopwall,noleftwall,
+Cell(8,46): black,nobaggle,notopwall,noleftwall,
+Cell(8,47): black,nobaggle,notopwall,noleftwall,
+Cell(8,48): black,nobaggle,notopwall,noleftwall,
+Cell(8,49): black,nobaggle,notopwall,noleftwall,
+Cell(8,50): black,nobaggle,notopwall,noleftwall,
+Cell(8,52): black,nobaggle,notopwall,noleftwall,
+Cell(8,54): black,nobaggle,notopwall,noleftwall,
+Cell(8,55): black,nobaggle,notopwall,noleftwall,
+Cell(9,31): black,nobaggle,notopwall,noleftwall,
+Cell(9,32): black,nobaggle,notopwall,noleftwall,
+Cell(9,34): black,nobaggle,notopwall,noleftwall,
+Cell(9,37): black,nobaggle,notopwall,noleftwall,
+Cell(9,39): black,nobaggle,notopwall,noleftwall,
+Cell(9,41): black,nobaggle,notopwall,noleftwall,
+Cell(9,44): black,nobaggle,notopwall,noleftwall,
+Cell(9,47): black,nobaggle,notopwall,noleftwall,
+Cell(9,49): black,nobaggle,notopwall,noleftwall,
+Cell(9,50): black,nobaggle,notopwall,noleftwall,
+Cell(9,54): black,nobaggle,notopwall,noleftwall,
+Cell(9,56): black,nobaggle,notopwall,noleftwall,
+Cell(9,57): black,nobaggle,notopwall,noleftwall,
+Cell(9,58): black,nobaggle,notopwall,noleftwall,
+Cell(10,31): black,nobaggle,notopwall,noleftwall,
+Cell(10,36): black,nobaggle,notopwall,noleftwall,
+Cell(10,41): black,nobaggle,notopwall,noleftwall,
+Cell(10,47): black,nobaggle,notopwall,noleftwall,
+Cell(10,48): black,nobaggle,notopwall,noleftwall,
+Cell(10,49): black,nobaggle,notopwall,noleftwall,
+Cell(10,56): black,nobaggle,notopwall,noleftwall,
+Cell(10,58): black,nobaggle,notopwall,noleftwall,
+Cell(11,31): black,nobaggle,notopwall,noleftwall,
+Cell(11,32): black,nobaggle,notopwall,noleftwall,
+Cell(11,33): black,nobaggle,notopwall,noleftwall,
+Cell(11,34): black,nobaggle,notopwall,noleftwall,
+Cell(11,35): black,nobaggle,notopwall,noleftwall,
+Cell(11,39): black,nobaggle,notopwall,noleftwall,
+Cell(11,41): black,nobaggle,notopwall,noleftwall,
+Cell(11,42): black,nobaggle,notopwall,noleftwall,
+Cell(11,43): black,nobaggle,notopwall,noleftwall,
+Cell(11,44): black,nobaggle,notopwall,noleftwall,
+Cell(11,48): black,nobaggle,notopwall,noleftwall,
+Cell(11,49): black,nobaggle,notopwall,noleftwall,
+Cell(11,50): black,nobaggle,notopwall,noleftwall,
+Cell(11,52): black,nobaggle,notopwall,noleftwall,
+Cell(11,54): black,nobaggle,notopwall,noleftwall,
+Cell(11,55): black,nobaggle,notopwall,noleftwall,
+Cell(11,57): black,nobaggle,notopwall,noleftwall,
+Cell(11,58): black,nobaggle,notopwall,noleftwall,
+Cell(12,34): black,nobaggle,notopwall,noleftwall,
+Cell(12,35): black,nobaggle,notopwall,noleftwall,
+Cell(12,37): black,nobaggle,notopwall,noleftwall,
+Cell(12,38): black,nobaggle,notopwall,noleftwall,
+Cell(12,39): black,nobaggle,notopwall,noleftwall,
+Cell(12,41): black,nobaggle,notopwall,noleftwall,
+Cell(12,44): black,nobaggle,notopwall,noleftwall,
+Cell(12,45): black,nobaggle,notopwall,noleftwall,
+Cell(12,46): black,nobaggle,notopwall,noleftwall,
+Cell(12,47): black,nobaggle,notopwall,noleftwall,
+Cell(12,49): black,nobaggle,notopwall,noleftwall,
+Cell(12,50): black,nobaggle,notopwall,noleftwall,
+Cell(12,51): black,nobaggle,notopwall,noleftwall,
+Cell(12,52): black,nobaggle,notopwall,noleftwall,
+Cell(12,53): black,nobaggle,notopwall,noleftwall,
+Cell(12,54): black,nobaggle,notopwall,noleftwall,
+Cell(12,55): black,nobaggle,notopwall,noleftwall,
+Cell(12,57): black,nobaggle,notopwall,noleftwall,
+Cell(12,58): black,nobaggle,notopwall,noleftwall,
+Cell(12,59): black,nobaggle,notopwall,noleftwall,
+Cell(13,34): black,nobaggle,notopwall,noleftwall,
+Cell(13,35): black,nobaggle,notopwall,noleftwall,
+Cell(13,37): black,nobaggle,notopwall,noleftwall,
+Cell(13,41): black,nobaggle,notopwall,noleftwall,
+Cell(13,42): black,nobaggle,notopwall,noleftwall,
+Cell(13,43): black,nobaggle,notopwall,noleftwall,
+Cell(13,44): black,nobaggle,notopwall,noleftwall,
+Cell(13,45): black,nobaggle,notopwall,noleftwall,
+Cell(13,46): black,nobaggle,notopwall,noleftwall,
+Cell(13,47): black,nobaggle,notopwall,noleftwall,
+Cell(13,48): black,nobaggle,notopwall,noleftwall,
+Cell(13,49): black,nobaggle,notopwall,noleftwall,
+Cell(13,51): black,nobaggle,notopwall,noleftwall,
+Cell(13,55): black,nobaggle,notopwall,noleftwall,
+Cell(13,57): black,nobaggle,notopwall,noleftwall,
+Cell(13,59): black,nobaggle,notopwall,noleftwall,
+Cell(13,60): black,nobaggle,notopwall,noleftwall,
+Cell(14,33): black,nobaggle,notopwall,noleftwall,
+Cell(14,34): black,nobaggle,notopwall,noleftwall,
+Cell(14,37): black,nobaggle,notopwall,noleftwall,
+Cell(14,39): black,nobaggle,notopwall,noleftwall,
+Cell(14,41): black,nobaggle,notopwall,noleftwall,
+Cell(14,42): black,nobaggle,notopwall,noleftwall,
+Cell(14,44): black,nobaggle,notopwall,noleftwall,
+Cell(14,45): black,nobaggle,notopwall,noleftwall,
+Cell(14,47): black,nobaggle,notopwall,noleftwall,
+Cell(14,48): black,nobaggle,notopwall,noleftwall,
+Cell(14,49): black,nobaggle,notopwall,noleftwall,
+Cell(14,54): black,nobaggle,notopwall,noleftwall,
+Cell(14,55): black,nobaggle,notopwall,noleftwall,
+Cell(14,58): black,nobaggle,notopwall,noleftwall,
+Cell(14,60): black,nobaggle,notopwall,noleftwall,
+Cell(14,61): black,nobaggle,notopwall,noleftwall,
+Cell(15,32): black,nobaggle,notopwall,noleftwall,
+Cell(15,33): black,nobaggle,notopwall,noleftwall,
+Cell(15,41): black,nobaggle,notopwall,noleftwall,
+Cell(15,43): black,nobaggle,notopwall,noleftwall,
+Cell(15,44): black,nobaggle,notopwall,noleftwall,
+Cell(15,45): black,nobaggle,notopwall,noleftwall,
+Cell(15,47): black,nobaggle,notopwall,noleftwall,
+Cell(15,49): black,nobaggle,notopwall,noleftwall,
+Cell(15,50): black,nobaggle,notopwall,noleftwall,
+Cell(15,51): black,nobaggle,notopwall,noleftwall,
+Cell(15,55): black,nobaggle,notopwall,noleftwall,
+Cell(15,56): black,nobaggle,notopwall,noleftwall,
+Cell(15,58): black,nobaggle,notopwall,noleftwall,
+Cell(15,59): black,nobaggle,notopwall,noleftwall,
+Cell(15,61): black,nobaggle,notopwall,noleftwall,
+Cell(15,62): black,nobaggle,notopwall,noleftwall,
+Cell(16,29): black,nobaggle,notopwall,noleftwall,
+Cell(16,32): black,nobaggle,notopwall,noleftwall,
+Cell(16,33): black,nobaggle,notopwall,noleftwall,
+Cell(16,38): black,nobaggle,notopwall,noleftwall,
+Cell(16,40): black,nobaggle,notopwall,noleftwall,
+Cell(16,41): black,nobaggle,notopwall,noleftwall,
+Cell(16,42): black,nobaggle,notopwall,noleftwall,
+Cell(16,43): black,nobaggle,notopwall,noleftwall,
+Cell(16,45): black,nobaggle,notopwall,noleftwall,
+Cell(16,46): black,nobaggle,notopwall,noleftwall,
+Cell(16,47): black,nobaggle,notopwall,noleftwall,
+Cell(16,50): black,nobaggle,notopwall,noleftwall,
+Cell(16,55): black,nobaggle,notopwall,noleftwall,
+Cell(16,57): black,nobaggle,notopwall,noleftwall,
+Cell(16,59): black,nobaggle,notopwall,noleftwall,
+Cell(16,60): black,nobaggle,notopwall,noleftwall,
+Cell(16,62): black,nobaggle,notopwall,noleftwall,
+Cell(17,29): black,nobaggle,notopwall,noleftwall,
+Cell(17,30): black,nobaggle,notopwall,noleftwall,
+Cell(17,31): black,nobaggle,notopwall,noleftwall,
+Cell(17,33): black,nobaggle,notopwall,noleftwall,
+Cell(17,36): black,nobaggle,notopwall,noleftwall,
+Cell(17,39): black,nobaggle,notopwall,noleftwall,
+Cell(17,41): black,nobaggle,notopwall,noleftwall,
+Cell(17,42): black,nobaggle,notopwall,noleftwall,
+Cell(17,45): black,nobaggle,notopwall,noleftwall,
+Cell(17,46): black,nobaggle,notopwall,noleftwall,
+Cell(17,48): black,nobaggle,notopwall,noleftwall,
+Cell(17,49): black,nobaggle,notopwall,noleftwall,
+Cell(17,50): black,nobaggle,notopwall,noleftwall,
+Cell(17,52): black,nobaggle,notopwall,noleftwall,
+Cell(17,55): black,nobaggle,notopwall,noleftwall,
+Cell(17,56): black,nobaggle,notopwall,noleftwall,
+Cell(17,61): black,nobaggle,notopwall,noleftwall,
+Cell(17,62): black,nobaggle,notopwall,noleftwall,
+Cell(18,22): black,nobaggle,notopwall,noleftwall,
+Cell(18,24): black,nobaggle,notopwall,noleftwall,
+Cell(18,25): black,nobaggle,notopwall,noleftwall,
+Cell(18,30): black,nobaggle,notopwall,noleftwall,
+Cell(18,31): black,nobaggle,notopwall,noleftwall,
+Cell(18,33): black,nobaggle,notopwall,noleftwall,
+Cell(18,35): black,nobaggle,notopwall,noleftwall,
+Cell(18,39): black,nobaggle,notopwall,noleftwall,
+Cell(18,40): black,nobaggle,notopwall,noleftwall,
+Cell(18,41): black,nobaggle,notopwall,noleftwall,
+Cell(18,42): black,nobaggle,notopwall,noleftwall,
+Cell(18,44): black,nobaggle,notopwall,noleftwall,
+Cell(18,49): black,nobaggle,notopwall,noleftwall,
+Cell(18,55): black,nobaggle,notopwall,noleftwall,
+Cell(18,57): black,nobaggle,notopwall,noleftwall,
+Cell(18,60): black,nobaggle,notopwall,noleftwall,
+Cell(18,61): black,nobaggle,notopwall,noleftwall,
+Cell(19,22): black,nobaggle,notopwall,noleftwall,
+Cell(19,23): black,nobaggle,notopwall,noleftwall,
+Cell(19,24): black,nobaggle,notopwall,noleftwall,
+Cell(19,29): black,nobaggle,notopwall,noleftwall,
+Cell(19,30): black,nobaggle,notopwall,noleftwall,
+Cell(19,31): black,nobaggle,notopwall,noleftwall,
+Cell(19,32): black,nobaggle,notopwall,noleftwall,
+Cell(19,33): black,nobaggle,notopwall,noleftwall,
+Cell(19,35): black,nobaggle,notopwall,noleftwall,
+Cell(19,36): black,nobaggle,notopwall,noleftwall,
+Cell(19,39): black,nobaggle,notopwall,noleftwall,
+Cell(19,40): black,nobaggle,notopwall,noleftwall,
+Cell(19,41): black,nobaggle,notopwall,noleftwall,
+Cell(19,42): black,nobaggle,notopwall,noleftwall,
+Cell(19,43): black,nobaggle,notopwall,noleftwall,
+Cell(19,44): black,nobaggle,notopwall,noleftwall,
+Cell(19,45): black,nobaggle,notopwall,noleftwall,
+Cell(19,46): black,nobaggle,notopwall,noleftwall,
+Cell(19,47): black,nobaggle,notopwall,noleftwall,
+Cell(19,48): black,nobaggle,notopwall,noleftwall,
+Cell(19,55): black,nobaggle,notopwall,noleftwall,
+Cell(19,57): black,nobaggle,notopwall,noleftwall,
+Cell(19,60): black,nobaggle,notopwall,noleftwall,
+Cell(19,61): black,nobaggle,notopwall,noleftwall,
+Cell(20,22): black,nobaggle,notopwall,noleftwall,
+Cell(20,23): black,nobaggle,notopwall,noleftwall,
+Cell(20,24): black,nobaggle,notopwall,noleftwall,
+Cell(20,32): black,nobaggle,notopwall,noleftwall,
+Cell(20,33): black,nobaggle,notopwall,noleftwall,
+Cell(20,34): black,nobaggle,notopwall,noleftwall,
+Cell(20,35): black,nobaggle,notopwall,noleftwall,
+Cell(20,36): black,nobaggle,notopwall,noleftwall,
+Cell(20,37): black,nobaggle,notopwall,noleftwall,
+Cell(20,39): black,nobaggle,notopwall,noleftwall,
+Cell(20,40): black,nobaggle,notopwall,noleftwall,
+Cell(20,42): black,nobaggle,notopwall,noleftwall,
+Cell(20,45): black,nobaggle,notopwall,noleftwall,
+Cell(20,47): black,nobaggle,notopwall,noleftwall,
+Cell(20,48): black,nobaggle,notopwall,noleftwall,
+Cell(20,52): black,nobaggle,notopwall,noleftwall,
+Cell(20,53): black,nobaggle,notopwall,noleftwall,
+Cell(20,60): black,nobaggle,notopwall,noleftwall,
+Cell(21,14): black,nobaggle,notopwall,noleftwall,
+Cell(21,15): black,nobaggle,notopwall,noleftwall,
+Cell(21,16): black,nobaggle,notopwall,noleftwall,
+Cell(21,21): black,nobaggle,notopwall,noleftwall,
+Cell(21,22): black,nobaggle,notopwall,noleftwall,
+Cell(21,25): black,nobaggle,notopwall,noleftwall,
+Cell(21,26): black,nobaggle,notopwall,noleftwall,
+Cell(21,33): black,nobaggle,notopwall,noleftwall,
+Cell(21,35): black,nobaggle,notopwall,noleftwall,
+Cell(21,36): black,nobaggle,notopwall,noleftwall,
+Cell(21,37): black,nobaggle,notopwall,noleftwall,
+Cell(21,38): black,nobaggle,notopwall,noleftwall,
+Cell(21,40): black,nobaggle,notopwall,noleftwall,
+Cell(21,42): black,nobaggle,notopwall,noleftwall,
+Cell(21,44): black,nobaggle,notopwall,noleftwall,
+Cell(21,45): black,nobaggle,notopwall,noleftwall,
+Cell(21,46): black,nobaggle,notopwall,noleftwall,
+Cell(21,52): black,nobaggle,notopwall,noleftwall,
+Cell(21,53): black,nobaggle,notopwall,noleftwall,
+Cell(21,54): black,nobaggle,notopwall,noleftwall,
+Cell(21,56): black,nobaggle,notopwall,noleftwall,
+Cell(21,58): black,nobaggle,notopwall,noleftwall,
+Cell(21,59): black,nobaggle,notopwall,noleftwall,
+Cell(21,60): black,nobaggle,notopwall,noleftwall,
+Cell(22,13): black,nobaggle,notopwall,noleftwall,
+Cell(22,14): black,nobaggle,notopwall,noleftwall,
+Cell(22,16): black,nobaggle,notopwall,noleftwall,
+Cell(22,17): black,nobaggle,notopwall,noleftwall,
+Cell(22,18): black,nobaggle,notopwall,noleftwall,
+Cell(22,21): black,nobaggle,notopwall,noleftwall,
+Cell(22,22): black,nobaggle,notopwall,noleftwall,
+Cell(22,23): black,nobaggle,notopwall,noleftwall,
+Cell(22,24): black,nobaggle,notopwall,noleftwall,
+Cell(22,25): black,nobaggle,notopwall,noleftwall,
+Cell(22,26): black,nobaggle,notopwall,noleftwall,
+Cell(22,27): black,nobaggle,notopwall,noleftwall,
+Cell(22,33): black,nobaggle,notopwall,noleftwall,
+Cell(22,35): black,nobaggle,notopwall,noleftwall,
+Cell(22,36): black,nobaggle,notopwall,noleftwall,
+Cell(22,42): black,nobaggle,notopwall,noleftwall,
+Cell(22,43): black,nobaggle,notopwall,noleftwall,
+Cell(22,44): black,nobaggle,notopwall,noleftwall,
+Cell(22,47): black,nobaggle,notopwall,noleftwall,
+Cell(22,48): black,nobaggle,notopwall,noleftwall,
+Cell(22,50): black,nobaggle,notopwall,noleftwall,
+Cell(22,54): black,nobaggle,notopwall,noleftwall,
+Cell(22,55): black,nobaggle,notopwall,noleftwall,
+Cell(22,57): black,nobaggle,notopwall,noleftwall,
+Cell(22,58): black,nobaggle,notopwall,noleftwall,
+Cell(22,60): black,nobaggle,notopwall,noleftwall,
+Cell(22,61): black,nobaggle,notopwall,noleftwall,
+Cell(22,62): black,nobaggle,notopwall,noleftwall,
+Cell(23,12): black,nobaggle,notopwall,noleftwall,
+Cell(23,13): black,nobaggle,notopwall,noleftwall,
+Cell(23,15): black,nobaggle,notopwall,noleftwall,
+Cell(23,17): black,nobaggle,notopwall,noleftwall,
+Cell(23,18): black,nobaggle,notopwall,noleftwall,
+Cell(23,19): black,nobaggle,notopwall,noleftwall,
+Cell(23,20): black,nobaggle,notopwall,noleftwall,
+Cell(23,21): black,nobaggle,notopwall,noleftwall,
+Cell(23,22): black,nobaggle,notopwall,noleftwall,
+Cell(23,23): black,nobaggle,notopwall,noleftwall,
+Cell(23,25): black,nobaggle,notopwall,noleftwall,
+Cell(23,27): black,nobaggle,notopwall,noleftwall,
+Cell(23,28): black,nobaggle,notopwall,noleftwall,
+Cell(23,33): black,nobaggle,notopwall,noleftwall,
+Cell(23,34): black,nobaggle,notopwall,noleftwall,
+Cell(23,35): black,nobaggle,notopwall,noleftwall,
+Cell(23,40): black,nobaggle,notopwall,noleftwall,
+Cell(23,44): black,nobaggle,notopwall,noleftwall,
+Cell(23,45): black,nobaggle,notopwall,noleftwall,
+Cell(23,46): black,nobaggle,notopwall,noleftwall,
+Cell(23,47): black,nobaggle,notopwall,noleftwall,
+Cell(23,48): black,nobaggle,notopwall,noleftwall,
+Cell(23,50): black,nobaggle,notopwall,noleftwall,
+Cell(23,51): black,nobaggle,notopwall,noleftwall,
+Cell(23,52): black,nobaggle,notopwall,noleftwall,
+Cell(23,53): black,nobaggle,notopwall,noleftwall,
+Cell(23,54): black,nobaggle,notopwall,noleftwall,
+Cell(23,55): black,nobaggle,notopwall,noleftwall,
+Cell(23,56): black,nobaggle,notopwall,noleftwall,
+Cell(23,57): black,nobaggle,notopwall,noleftwall,
+Cell(23,58): black,nobaggle,notopwall,noleftwall,
+Cell(23,59): black,nobaggle,notopwall,noleftwall,
+Cell(23,60): black,nobaggle,notopwall,noleftwall,
+Cell(23,61): black,nobaggle,notopwall,noleftwall,
+Cell(23,62): black,nobaggle,notopwall,noleftwall,
+Cell(23,63): black,nobaggle,notopwall,noleftwall,
+Cell(23,64): black,nobaggle,notopwall,noleftwall,
+Cell(23,65): black,nobaggle,notopwall,noleftwall,
+Cell(24,11): black,nobaggle,notopwall,noleftwall,
+Cell(24,12): black,nobaggle,notopwall,noleftwall,
+Cell(24,14): black,nobaggle,notopwall,noleftwall,
+Cell(24,15): black,nobaggle,notopwall,noleftwall,
+Cell(24,20): black,nobaggle,notopwall,noleftwall,
+Cell(24,22): black,nobaggle,notopwall,noleftwall,
+Cell(24,23): black,nobaggle,notopwall,noleftwall,
+Cell(24,27): black,nobaggle,notopwall,noleftwall,
+Cell(24,36): black,nobaggle,notopwall,noleftwall,
+Cell(24,39): black,nobaggle,notopwall,noleftwall,
+Cell(24,40): black,nobaggle,notopwall,noleftwall,
+Cell(24,42): black,nobaggle,notopwall,noleftwall,
+Cell(24,43): black,nobaggle,notopwall,noleftwall,
+Cell(24,46): black,nobaggle,notopwall,noleftwall,
+Cell(24,47): black,nobaggle,notopwall,noleftwall,
+Cell(24,52): black,nobaggle,notopwall,noleftwall,
+Cell(24,56): black,nobaggle,notopwall,noleftwall,
+Cell(24,57): black,nobaggle,notopwall,noleftwall,
+Cell(24,59): black,nobaggle,notopwall,noleftwall,
+Cell(24,60): black,nobaggle,notopwall,noleftwall,
+Cell(24,61): black,nobaggle,notopwall,noleftwall,
+Cell(24,63): black,nobaggle,notopwall,noleftwall,
+Cell(24,64): black,nobaggle,notopwall,noleftwall,
+Cell(25,8): black,nobaggle,notopwall,noleftwall,
+Cell(25,9): black,nobaggle,notopwall,noleftwall,
+Cell(25,10): black,nobaggle,notopwall,noleftwall,
+Cell(25,11): black,nobaggle,notopwall,noleftwall,
+Cell(25,13): black,nobaggle,notopwall,noleftwall,
+Cell(25,14): black,nobaggle,notopwall,noleftwall,
+Cell(25,20): black,nobaggle,notopwall,noleftwall,
+Cell(25,21): black,nobaggle,notopwall,noleftwall,
+Cell(25,22): black,nobaggle,notopwall,noleftwall,
+Cell(25,31): black,nobaggle,notopwall,noleftwall,
+Cell(25,32): black,nobaggle,notopwall,noleftwall,
+Cell(25,33): black,nobaggle,notopwall,noleftwall,
+Cell(25,36): black,nobaggle,notopwall,noleftwall,
+Cell(25,37): black,nobaggle,notopwall,noleftwall,
+Cell(25,38): black,nobaggle,notopwall,noleftwall,
+Cell(25,39): black,nobaggle,notopwall,noleftwall,
+Cell(25,41): black,nobaggle,notopwall,noleftwall,
+Cell(25,42): black,nobaggle,notopwall,noleftwall,
+Cell(25,43): black,nobaggle,notopwall,noleftwall,
+Cell(25,44): black,nobaggle,notopwall,noleftwall,
+Cell(25,45): black,nobaggle,notopwall,noleftwall,
+Cell(25,47): black,nobaggle,notopwall,noleftwall,
+Cell(25,49): black,nobaggle,notopwall,noleftwall,
+Cell(25,50): black,nobaggle,notopwall,noleftwall,
+Cell(25,51): black,nobaggle,notopwall,noleftwall,
+Cell(25,55): black,nobaggle,notopwall,noleftwall,
+Cell(25,56): black,nobaggle,notopwall,noleftwall,
+Cell(25,61): black,nobaggle,notopwall,noleftwall,
+Cell(25,63): black,nobaggle,notopwall,noleftwall,
+Cell(25,64): black,nobaggle,notopwall,noleftwall,
+Cell(25,65): black,nobaggle,notopwall,noleftwall,
+Cell(26,8): black,nobaggle,notopwall,noleftwall,
+Cell(26,10): black,nobaggle,notopwall,noleftwall,
+Cell(26,11): black,nobaggle,notopwall,noleftwall,
+Cell(26,12): black,nobaggle,notopwall,noleftwall,
+Cell(26,15): black,nobaggle,notopwall,noleftwall,
+Cell(26,17): black,nobaggle,notopwall,noleftwall,
+Cell(26,18): black,nobaggle,notopwall,noleftwall,
+Cell(26,21): black,nobaggle,notopwall,noleftwall,
+Cell(26,22): black,nobaggle,notopwall,noleftwall,
+Cell(26,23): black,nobaggle,notopwall,noleftwall,
+Cell(26,25): black,nobaggle,notopwall,noleftwall,
+Cell(26,27): black,nobaggle,notopwall,noleftwall,
+Cell(26,28): black,nobaggle,notopwall,noleftwall,
+Cell(26,31): black,nobaggle,notopwall,noleftwall,
+Cell(26,32): black,nobaggle,notopwall,noleftwall,
+Cell(26,33): black,nobaggle,notopwall,noleftwall,
+Cell(26,34): black,nobaggle,notopwall,noleftwall,
+Cell(26,35): black,nobaggle,notopwall,noleftwall,
+Cell(26,37): black,nobaggle,notopwall,noleftwall,
+Cell(26,40): black,nobaggle,notopwall,noleftwall,
+Cell(26,42): black,nobaggle,notopwall,noleftwall,
+Cell(26,45): black,nobaggle,notopwall,noleftwall,
+Cell(26,49): black,nobaggle,notopwall,noleftwall,
+Cell(26,51): black,nobaggle,notopwall,noleftwall,
+Cell(26,56): black,nobaggle,notopwall,noleftwall,
+Cell(26,57): black,nobaggle,notopwall,noleftwall,
+Cell(26,60): black,nobaggle,notopwall,noleftwall,
+Cell(26,61): black,nobaggle,notopwall,noleftwall,
+Cell(26,62): black,nobaggle,notopwall,noleftwall,
+Cell(26,65): black,nobaggle,notopwall,noleftwall,
+Cell(27,8): black,nobaggle,notopwall,noleftwall,
+Cell(27,9): black,nobaggle,notopwall,noleftwall,
+Cell(27,14): black,nobaggle,notopwall,noleftwall,
+Cell(27,16): black,nobaggle,notopwall,noleftwall,
+Cell(27,20): black,nobaggle,notopwall,noleftwall,
+Cell(27,22): black,nobaggle,notopwall,noleftwall,
+Cell(27,23): black,nobaggle,notopwall,noleftwall,
+Cell(27,24): black,nobaggle,notopwall,noleftwall,
+Cell(27,25): black,nobaggle,notopwall,noleftwall,
+Cell(27,26): black,nobaggle,notopwall,noleftwall,
+Cell(27,27): black,nobaggle,notopwall,noleftwall,
+Cell(27,28): black,nobaggle,notopwall,noleftwall,
+Cell(27,30): black,nobaggle,notopwall,noleftwall,
+Cell(27,31): black,nobaggle,notopwall,noleftwall,
+Cell(27,32): black,nobaggle,notopwall,noleftwall,
+Cell(27,33): black,nobaggle,notopwall,noleftwall,
+Cell(27,34): black,nobaggle,notopwall,noleftwall,
+Cell(27,35): black,nobaggle,notopwall,noleftwall,
+Cell(27,36): black,nobaggle,notopwall,noleftwall,
+Cell(27,38): black,nobaggle,notopwall,noleftwall,
+Cell(27,43): black,nobaggle,notopwall,noleftwall,
+Cell(27,44): black,nobaggle,notopwall,noleftwall,
+Cell(27,47): black,nobaggle,notopwall,noleftwall,
+Cell(27,49): black,nobaggle,notopwall,noleftwall,
+Cell(27,50): black,nobaggle,notopwall,noleftwall,
+Cell(27,51): black,nobaggle,notopwall,noleftwall,
+Cell(27,56): black,nobaggle,notopwall,noleftwall,
+Cell(27,61): black,nobaggle,notopwall,noleftwall,
+Cell(27,62): black,nobaggle,notopwall,noleftwall,
+Cell(28,7): black,nobaggle,notopwall,noleftwall,
+Cell(28,10): black,nobaggle,notopwall,noleftwall,
+Cell(28,11): black,nobaggle,notopwall,noleftwall,
+Cell(28,12): black,nobaggle,notopwall,noleftwall,
+Cell(28,13): black,nobaggle,notopwall,noleftwall,
+Cell(28,14): black,nobaggle,notopwall,noleftwall,
+Cell(28,15): black,nobaggle,notopwall,noleftwall,
+Cell(28,16): black,nobaggle,notopwall,noleftwall,
+Cell(28,17): black,nobaggle,notopwall,noleftwall,
+Cell(28,18): black,nobaggle,notopwall,noleftwall,
+Cell(28,21): black,nobaggle,notopwall,noleftwall,
+Cell(28,22): black,nobaggle,notopwall,noleftwall,
+Cell(28,24): black,nobaggle,notopwall,noleftwall,
+Cell(28,28): black,nobaggle,notopwall,noleftwall,
+Cell(28,29): black,nobaggle,notopwall,noleftwall,
+Cell(28,30): black,nobaggle,notopwall,noleftwall,
+Cell(28,32): black,nobaggle,notopwall,noleftwall,
+Cell(28,33): black,nobaggle,notopwall,noleftwall,
+Cell(28,39): black,nobaggle,notopwall,noleftwall,
+Cell(28,44): black,nobaggle,notopwall,noleftwall,
+Cell(28,47): black,nobaggle,notopwall,noleftwall,
+Cell(28,48): black,nobaggle,notopwall,noleftwall,
+Cell(28,49): black,nobaggle,notopwall,noleftwall,
+Cell(28,50): black,nobaggle,notopwall,noleftwall,
+Cell(28,54): black,nobaggle,notopwall,noleftwall,
+Cell(28,56): black,nobaggle,notopwall,noleftwall,
+Cell(28,57): black,nobaggle,notopwall,noleftwall,
+Cell(28,59): black,nobaggle,notopwall,noleftwall,
+Cell(28,60): black,nobaggle,notopwall,noleftwall,
+Cell(28,61): black,nobaggle,notopwall,noleftwall,
+Cell(29,6): black,nobaggle,notopwall,noleftwall,
+Cell(29,7): black,nobaggle,notopwall,noleftwall,
+Cell(29,8): black,nobaggle,notopwall,noleftwall,
+Cell(29,10): black,nobaggle,notopwall,noleftwall,
+Cell(29,11): black,nobaggle,notopwall,noleftwall,
+Cell(29,13): black,nobaggle,notopwall,noleftwall,
+Cell(29,20): black,nobaggle,notopwall,noleftwall,
+Cell(29,21): black,nobaggle,notopwall,noleftwall,
+Cell(29,22): black,nobaggle,notopwall,noleftwall,
+Cell(29,27): black,nobaggle,notopwall,noleftwall,
+Cell(29,28): black,nobaggle,notopwall,noleftwall,
+Cell(29,33): black,nobaggle,notopwall,noleftwall,
+Cell(29,36): black,nobaggle,notopwall,noleftwall,
+Cell(29,38): black,nobaggle,notopwall,noleftwall,
+Cell(29,39): black,nobaggle,notopwall,noleftwall,
+Cell(29,41): black,nobaggle,notopwall,noleftwall,
+Cell(29,42): black,nobaggle,notopwall,noleftwall,
+Cell(29,44): black,nobaggle,notopwall,noleftwall,
+Cell(29,45): black,nobaggle,notopwall,noleftwall,
+Cell(29,46): black,nobaggle,notopwall,noleftwall,
+Cell(29,49): black,nobaggle,notopwall,noleftwall,
+Cell(29,50): black,nobaggle,notopwall,noleftwall,
+Cell(29,51): black,nobaggle,notopwall,noleftwall,
+Cell(29,52): black,nobaggle,notopwall,noleftwall,
+Cell(29,53): black,nobaggle,notopwall,noleftwall,
+Cell(29,54): black,nobaggle,notopwall,noleftwall,
+Cell(29,55): black,nobaggle,notopwall,noleftwall,
+Cell(29,56): black,nobaggle,notopwall,noleftwall,
+Cell(29,57): black,nobaggle,notopwall,noleftwall,
+Cell(29,60): black,nobaggle,notopwall,noleftwall,
+Cell(30,5): black,nobaggle,notopwall,noleftwall,
+Cell(30,6): black,nobaggle,notopwall,noleftwall,
+Cell(30,11): black,nobaggle,notopwall,noleftwall,
+Cell(30,19): black,nobaggle,notopwall,noleftwall,
+Cell(30,20): black,nobaggle,notopwall,noleftwall,
+Cell(30,22): black,nobaggle,notopwall,noleftwall,
+Cell(30,28): black,nobaggle,notopwall,noleftwall,
+Cell(30,30): black,nobaggle,notopwall,noleftwall,
+Cell(30,31): black,nobaggle,notopwall,noleftwall,
+Cell(30,32): black,nobaggle,notopwall,noleftwall,
+Cell(30,33): black,nobaggle,notopwall,noleftwall,
+Cell(30,38): black,nobaggle,notopwall,noleftwall,
+Cell(30,39): black,nobaggle,notopwall,noleftwall,
+Cell(30,42): black,nobaggle,notopwall,noleftwall,
+Cell(30,44): black,nobaggle,notopwall,noleftwall,
+Cell(30,47): black,nobaggle,notopwall,noleftwall,
+Cell(30,48): black,nobaggle,notopwall,noleftwall,
+Cell(30,51): black,nobaggle,notopwall,noleftwall,
+Cell(30,53): black,nobaggle,notopwall,noleftwall,
+Cell(30,58): black,nobaggle,notopwall,noleftwall,
+Cell(30,59): black,nobaggle,notopwall,noleftwall,
+Cell(31,2): black,nobaggle,notopwall,noleftwall,
+Cell(31,5): black,nobaggle,notopwall,noleftwall,
+Cell(31,6): black,nobaggle,notopwall,noleftwall,
+Cell(31,7): black,nobaggle,notopwall,noleftwall,
+Cell(31,10): black,nobaggle,notopwall,noleftwall,
+Cell(31,11): black,nobaggle,notopwall,noleftwall,
+Cell(31,30): black,nobaggle,notopwall,noleftwall,
+Cell(31,31): black,nobaggle,notopwall,noleftwall,
+Cell(31,32): black,nobaggle,notopwall,noleftwall,
+Cell(31,33): black,nobaggle,notopwall,noleftwall,
+Cell(31,37): black,nobaggle,notopwall,noleftwall,
+Cell(31,42): black,nobaggle,notopwall,noleftwall,
+Cell(31,44): black,nobaggle,notopwall,noleftwall,
+Cell(31,45): black,nobaggle,notopwall,noleftwall,
+Cell(31,48): black,nobaggle,notopwall,noleftwall,
+Cell(31,49): black,nobaggle,notopwall,noleftwall,
+Cell(31,50): black,nobaggle,notopwall,noleftwall,
+Cell(31,52): black,nobaggle,notopwall,noleftwall,
+Cell(31,55): black,nobaggle,notopwall,noleftwall,
+Cell(31,59): black,nobaggle,notopwall,noleftwall,
+Cell(32,2): black,nobaggle,notopwall,noleftwall,
+Cell(32,3): black,nobaggle,notopwall,noleftwall,
+Cell(32,4): black,nobaggle,notopwall,noleftwall,
+Cell(32,6): black,nobaggle,notopwall,noleftwall,
+Cell(32,11): black,nobaggle,notopwall,noleftwall,
+Cell(32,12): black,nobaggle,notopwall,noleftwall,
+Cell(32,30): black,nobaggle,notopwall,noleftwall,
+Cell(32,36): black,nobaggle,notopwall,noleftwall,
+Cell(32,37): black,nobaggle,notopwall,noleftwall,
+Cell(32,41): black,nobaggle,notopwall,noleftwall,
+Cell(32,43): black,nobaggle,notopwall,noleftwall,
+Cell(32,44): black,nobaggle,notopwall,noleftwall,
+Cell(32,46): black,nobaggle,notopwall,noleftwall,
+Cell(32,47): black,nobaggle,notopwall,noleftwall,
+Cell(32,50): black,nobaggle,notopwall,noleftwall,
+Cell(32,52): black,nobaggle,notopwall,noleftwall,
+Cell(32,55): black,nobaggle,notopwall,noleftwall,
+Cell(32,56): black,nobaggle,notopwall,noleftwall,
+Cell(32,57): black,nobaggle,notopwall,noleftwall,
+Cell(32,58): black,nobaggle,notopwall,noleftwall,
+Cell(33,3): black,nobaggle,notopwall,noleftwall,
+Cell(33,4): black,nobaggle,notopwall,noleftwall,
+Cell(33,6): black,nobaggle,notopwall,noleftwall,
+Cell(33,7): black,nobaggle,notopwall,noleftwall,
+Cell(33,8): black,nobaggle,notopwall,noleftwall,
+Cell(33,10): black,nobaggle,notopwall,noleftwall,
+Cell(33,11): black,nobaggle,notopwall,noleftwall,
+Cell(33,28): black,nobaggle,notopwall,noleftwall,
+Cell(33,29): black,nobaggle,notopwall,noleftwall,
+Cell(33,30): black,nobaggle,notopwall,noleftwall,
+Cell(33,32): black,nobaggle,notopwall,noleftwall,
+Cell(33,34): black,nobaggle,notopwall,noleftwall,
+Cell(33,35): black,nobaggle,notopwall,noleftwall,
+Cell(33,37): black,nobaggle,notopwall,noleftwall,
+Cell(33,40): black,nobaggle,notopwall,noleftwall,
+Cell(33,41): black,nobaggle,notopwall,noleftwall,
+Cell(33,43): black,nobaggle,notopwall,noleftwall,
+Cell(33,45): black,nobaggle,notopwall,noleftwall,
+Cell(33,46): black,nobaggle,notopwall,noleftwall,
+Cell(33,47): black,nobaggle,notopwall,noleftwall,
+Cell(33,49): black,nobaggle,notopwall,noleftwall,
+Cell(33,50): black,nobaggle,notopwall,noleftwall,
+Cell(33,51): black,nobaggle,notopwall,noleftwall,
+Cell(33,54): black,nobaggle,notopwall,noleftwall,
+Cell(33,57): black,nobaggle,notopwall,noleftwall,
+Cell(33,58): black,nobaggle,notopwall,noleftwall,
+Cell(33,59): black,nobaggle,notopwall,noleftwall,
+Cell(34,2): black,nobaggle,notopwall,noleftwall,
+Cell(34,3): black,nobaggle,notopwall,noleftwall,
+Cell(34,4): black,nobaggle,notopwall,noleftwall,
+Cell(34,5): black,nobaggle,notopwall,noleftwall,
+Cell(34,6): black,nobaggle,notopwall,noleftwall,
+Cell(34,7): black,nobaggle,notopwall,noleftwall,
+Cell(34,8): black,nobaggle,notopwall,noleftwall,
+Cell(34,9): black,nobaggle,notopwall,noleftwall,
+Cell(34,10): black,nobaggle,notopwall,noleftwall,
+Cell(34,11): black,nobaggle,notopwall,noleftwall,
+Cell(34,12): black,nobaggle,notopwall,noleftwall,
+Cell(34,13): black,nobaggle,notopwall,noleftwall,
+Cell(34,14): black,nobaggle,notopwall,noleftwall,
+Cell(34,28): black,nobaggle,notopwall,noleftwall,
+Cell(34,29): black,nobaggle,notopwall,noleftwall,
+Cell(34,33): black,nobaggle,notopwall,noleftwall,
+Cell(34,34): black,nobaggle,notopwall,noleftwall,
+Cell(34,35): black,nobaggle,notopwall,noleftwall,
+Cell(34,36): black,nobaggle,notopwall,noleftwall,
+Cell(34,37): black,nobaggle,notopwall,noleftwall,
+Cell(34,39): black,nobaggle,notopwall,noleftwall,
+Cell(34,40): black,nobaggle,notopwall,noleftwall,
+Cell(34,44): black,nobaggle,notopwall,noleftwall,
+Cell(34,47): black,nobaggle,notopwall,noleftwall,
+Cell(34,51): black,nobaggle,notopwall,noleftwall,
+Cell(34,52): black,nobaggle,notopwall,noleftwall,
+Cell(34,53): black,nobaggle,notopwall,noleftwall,
+Cell(34,54): black,nobaggle,notopwall,noleftwall,
+Cell(34,55): black,nobaggle,notopwall,noleftwall,
+Cell(34,59): black,nobaggle,notopwall,noleftwall,
+Cell(35,5): black,nobaggle,notopwall,noleftwall,
+Cell(35,6): black,nobaggle,notopwall,noleftwall,
+Cell(35,7): black,nobaggle,notopwall,noleftwall,
+Cell(35,9): black,nobaggle,notopwall,noleftwall,
+Cell(35,10): black,nobaggle,notopwall,noleftwall,
+Cell(35,12): black,nobaggle,notopwall,noleftwall,
+Cell(35,13): black,nobaggle,notopwall,noleftwall,
+Cell(35,26): black,nobaggle,notopwall,noleftwall,
+Cell(35,29): black,nobaggle,notopwall,noleftwall,
+Cell(35,33): black,nobaggle,notopwall,noleftwall,
+Cell(35,40): black,nobaggle,notopwall,noleftwall,
+Cell(35,41): black,nobaggle,notopwall,noleftwall,
+Cell(35,43): black,nobaggle,notopwall,noleftwall,
+Cell(35,49): black,nobaggle,notopwall,noleftwall,
+Cell(35,50): black,nobaggle,notopwall,noleftwall,
+Cell(35,51): black,nobaggle,notopwall,noleftwall,
+Cell(35,56): black,nobaggle,notopwall,noleftwall,
+Cell(35,57): black,nobaggle,notopwall,noleftwall,
+Cell(36,7): black,nobaggle,notopwall,noleftwall,
+Cell(36,8): black,nobaggle,notopwall,noleftwall,
+Cell(36,9): black,nobaggle,notopwall,noleftwall,
+Cell(36,11): black,nobaggle,notopwall,noleftwall,
+Cell(36,13): black,nobaggle,notopwall,noleftwall,
+Cell(36,14): black,nobaggle,notopwall,noleftwall,
+Cell(36,26): black,nobaggle,notopwall,noleftwall,
+Cell(36,27): black,nobaggle,notopwall,noleftwall,
+Cell(36,29): black,nobaggle,notopwall,noleftwall,
+Cell(36,31): black,nobaggle,notopwall,noleftwall,
+Cell(36,32): black,nobaggle,notopwall,noleftwall,
+Cell(36,33): black,nobaggle,notopwall,noleftwall,
+Cell(36,36): black,nobaggle,notopwall,noleftwall,
+Cell(36,40): black,nobaggle,notopwall,noleftwall,
+Cell(36,43): black,nobaggle,notopwall,noleftwall,
+Cell(36,46): black,nobaggle,notopwall,noleftwall,
+Cell(36,47): black,nobaggle,notopwall,noleftwall,
+Cell(36,49): black,nobaggle,notopwall,noleftwall,
+Cell(36,51): black,nobaggle,notopwall,noleftwall,
+Cell(36,52): black,nobaggle,notopwall,noleftwall,
+Cell(36,53): black,nobaggle,notopwall,noleftwall,
+Cell(37,7): black,nobaggle,notopwall,noleftwall,
+Cell(37,14): black,nobaggle,notopwall,noleftwall,
+Cell(37,27): black,nobaggle,notopwall,noleftwall,
+Cell(37,28): black,nobaggle,notopwall,noleftwall,
+Cell(37,30): black,nobaggle,notopwall,noleftwall,
+Cell(37,31): black,nobaggle,notopwall,noleftwall,
+Cell(37,33): black,nobaggle,notopwall,noleftwall,
+Cell(37,34): black,nobaggle,notopwall,noleftwall,
+Cell(37,35): black,nobaggle,notopwall,noleftwall,
+Cell(37,41): black,nobaggle,notopwall,noleftwall,
+Cell(37,44): black,nobaggle,notopwall,noleftwall,
+Cell(37,45): black,nobaggle,notopwall,noleftwall,
+Cell(37,46): black,nobaggle,notopwall,noleftwall,
+Cell(37,51): black,nobaggle,notopwall,noleftwall,
+Cell(37,52): black,nobaggle,notopwall,noleftwall,
+Cell(38,6): black,nobaggle,notopwall,noleftwall,
+Cell(38,7): black,nobaggle,notopwall,noleftwall,
+Cell(38,10): black,nobaggle,notopwall,noleftwall,
+Cell(38,12): black,nobaggle,notopwall,noleftwall,
+Cell(38,26): black,nobaggle,notopwall,noleftwall,
+Cell(38,27): black,nobaggle,notopwall,noleftwall,
+Cell(38,28): black,nobaggle,notopwall,noleftwall,
+Cell(38,29): black,nobaggle,notopwall,noleftwall,
+Cell(38,30): black,nobaggle,notopwall,noleftwall,
+Cell(38,31): black,nobaggle,notopwall,noleftwall,
+Cell(38,32): black,nobaggle,notopwall,noleftwall,
+Cell(38,33): black,nobaggle,notopwall,noleftwall,
+Cell(38,34): black,nobaggle,notopwall,noleftwall,
+Cell(38,35): black,nobaggle,notopwall,noleftwall,
+Cell(38,36): black,nobaggle,notopwall,noleftwall,
+Cell(38,37): black,nobaggle,notopwall,noleftwall,
+Cell(38,38): black,nobaggle,notopwall,noleftwall,
+Cell(38,39): black,nobaggle,notopwall,noleftwall,
+Cell(38,41): black,nobaggle,notopwall,noleftwall,
+Cell(38,43): black,nobaggle,notopwall,noleftwall,
+Cell(38,47): black,nobaggle,notopwall,noleftwall,
+Cell(38,48): black,nobaggle,notopwall,noleftwall,
+Cell(38,52): black,nobaggle,notopwall,noleftwall,
+Cell(39,6): black,nobaggle,notopwall,noleftwall,
+Cell(39,7): black,nobaggle,notopwall,noleftwall,
+Cell(39,10): black,nobaggle,notopwall,noleftwall,
+Cell(39,12): black,nobaggle,notopwall,noleftwall,
+Cell(39,29): black,nobaggle,notopwall,noleftwall,
+Cell(39,30): black,nobaggle,notopwall,noleftwall,
+Cell(39,32): black,nobaggle,notopwall,noleftwall,
+Cell(39,33): black,nobaggle,notopwall,noleftwall,
+Cell(39,34): black,nobaggle,notopwall,noleftwall,
+Cell(39,36): black,nobaggle,notopwall,noleftwall,
+Cell(39,39): black,nobaggle,notopwall,noleftwall,
+Cell(39,41): black,nobaggle,notopwall,noleftwall,
+Cell(39,43): black,nobaggle,notopwall,noleftwall,
+Cell(39,47): black,nobaggle,notopwall,noleftwall,
+Cell(39,48): black,nobaggle,notopwall,noleftwall,
+Cell(39,51): black,nobaggle,notopwall,noleftwall,
+Cell(39,52): black,nobaggle,notopwall,noleftwall,
+Cell(40,5): black,nobaggle,notopwall,noleftwall,
+Cell(40,6): black,nobaggle,notopwall,noleftwall,
+Cell(40,11): black,nobaggle,notopwall,noleftwall,
+Cell(40,12): black,nobaggle,notopwall,noleftwall,
+Cell(40,28): black,nobaggle,notopwall,noleftwall,
+Cell(40,29): black,nobaggle,notopwall,noleftwall,
+Cell(40,34): black,nobaggle,notopwall,noleftwall,
+Cell(40,36): black,nobaggle,notopwall,noleftwall,
+Cell(40,39): black,nobaggle,notopwall,noleftwall,
+Cell(40,40): black,nobaggle,notopwall,noleftwall,
+Cell(40,43): black,nobaggle,notopwall,noleftwall,
+Cell(40,45): black,nobaggle,notopwall,noleftwall,
+Cell(40,46): black,nobaggle,notopwall,noleftwall,
+Cell(40,48): black,nobaggle,notopwall,noleftwall,
+Cell(40,49): black,nobaggle,notopwall,noleftwall,
+Cell(40,50): black,nobaggle,notopwall,noleftwall,
+Cell(41,5): black,nobaggle,notopwall,noleftwall,
+Cell(41,7): black,nobaggle,notopwall,noleftwall,
+Cell(41,8): black,nobaggle,notopwall,noleftwall,
+Cell(41,10): black,nobaggle,notopwall,noleftwall,
+Cell(41,12): black,nobaggle,notopwall,noleftwall,
+Cell(41,29): black,nobaggle,notopwall,noleftwall,
+Cell(41,30): black,nobaggle,notopwall,noleftwall,
+Cell(41,33): black,nobaggle,notopwall,noleftwall,
+Cell(41,34): black,nobaggle,notopwall,noleftwall,
+Cell(41,35): black,nobaggle,notopwall,noleftwall,
+Cell(41,38): black,nobaggle,notopwall,noleftwall,
+Cell(41,40): black,nobaggle,notopwall,noleftwall,
+Cell(41,41): black,nobaggle,notopwall,noleftwall,
+Cell(41,43): black,nobaggle,notopwall,noleftwall,
+Cell(41,44): black,nobaggle,notopwall,noleftwall,
+Cell(41,50): black,nobaggle,notopwall,noleftwall,
+Cell(42,5): black,nobaggle,notopwall,noleftwall,
+Cell(42,6): black,nobaggle,notopwall,noleftwall,
+Cell(42,8): black,nobaggle,notopwall,noleftwall,
+Cell(42,9): black,nobaggle,notopwall,noleftwall,
+Cell(42,11): black,nobaggle,notopwall,noleftwall,
+Cell(42,12): black,nobaggle,notopwall,noleftwall,
+Cell(42,18): black,nobaggle,notopwall,noleftwall,
+Cell(42,20): black,nobaggle,notopwall,noleftwall,
+Cell(42,21): black,nobaggle,notopwall,noleftwall,
+Cell(42,29): black,nobaggle,notopwall,noleftwall,
+Cell(42,34): black,nobaggle,notopwall,noleftwall,
+Cell(42,35): black,nobaggle,notopwall,noleftwall,
+Cell(42,37): black,nobaggle,notopwall,noleftwall,
+Cell(42,38): black,nobaggle,notopwall,noleftwall,
+Cell(42,41): black,nobaggle,notopwall,noleftwall,
+Cell(42,45): black,nobaggle,notopwall,noleftwall,
+Cell(43,6): black,nobaggle,notopwall,noleftwall,
+Cell(43,7): black,nobaggle,notopwall,noleftwall,
+Cell(43,9): black,nobaggle,notopwall,noleftwall,
+Cell(43,12): black,nobaggle,notopwall,noleftwall,
+Cell(43,13): black,nobaggle,notopwall,noleftwall,
+Cell(43,18): black,nobaggle,notopwall,noleftwall,
+Cell(43,19): black,nobaggle,notopwall,noleftwall,
+Cell(43,20): black,nobaggle,notopwall,noleftwall,
+Cell(43,27): black,nobaggle,notopwall,noleftwall,
+Cell(43,29): black,nobaggle,notopwall,noleftwall,
+Cell(43,30): black,nobaggle,notopwall,noleftwall,
+Cell(43,32): black,nobaggle,notopwall,noleftwall,
+Cell(43,33): black,nobaggle,notopwall,noleftwall,
+Cell(43,34): black,nobaggle,notopwall,noleftwall,
+Cell(43,35): black,nobaggle,notopwall,noleftwall,
+Cell(43,36): black,nobaggle,notopwall,noleftwall,
+Cell(43,43): black,nobaggle,notopwall,noleftwall,
+Cell(43,45): black,nobaggle,notopwall,noleftwall,
+Cell(44,7): black,nobaggle,notopwall,noleftwall,
+Cell(44,8): black,nobaggle,notopwall,noleftwall,
+Cell(44,10): black,nobaggle,notopwall,noleftwall,
+Cell(44,12): black,nobaggle,notopwall,noleftwall,
+Cell(44,16): black,nobaggle,notopwall,noleftwall,
+Cell(44,18): black,nobaggle,notopwall,noleftwall,
+Cell(44,19): black,nobaggle,notopwall,noleftwall,
+Cell(44,22): black,nobaggle,notopwall,noleftwall,
+Cell(44,23): black,nobaggle,notopwall,noleftwall,
+Cell(44,24): black,nobaggle,notopwall,noleftwall,
+Cell(44,25): black,nobaggle,notopwall,noleftwall,
+Cell(44,26): black,nobaggle,notopwall,noleftwall,
+Cell(44,27): black,nobaggle,notopwall,noleftwall,
+Cell(44,28): black,nobaggle,notopwall,noleftwall,
+Cell(44,29): black,nobaggle,notopwall,noleftwall,
+Cell(44,30): black,nobaggle,notopwall,noleftwall,
+Cell(44,33): black,nobaggle,notopwall,noleftwall,
+Cell(44,37): black,nobaggle,notopwall,noleftwall,
+Cell(44,38): black,nobaggle,notopwall,noleftwall,
+Cell(44,40): black,nobaggle,notopwall,noleftwall,
+Cell(44,41): black,nobaggle,notopwall,noleftwall,
+Cell(44,44): black,nobaggle,notopwall,noleftwall,
+Cell(44,45): black,nobaggle,notopwall,noleftwall,
+Cell(45,8): black,nobaggle,notopwall,noleftwall,
+Cell(45,9): black,nobaggle,notopwall,noleftwall,
+Cell(45,10): black,nobaggle,notopwall,noleftwall,
+Cell(45,12): black,nobaggle,notopwall,noleftwall,
+Cell(45,13): black,nobaggle,notopwall,noleftwall,
+Cell(45,14): black,nobaggle,notopwall,noleftwall,
+Cell(45,15): black,nobaggle,notopwall,noleftwall,
+Cell(45,16): black,nobaggle,notopwall,noleftwall,
+Cell(45,17): black,nobaggle,notopwall,noleftwall,
+Cell(45,18): black,nobaggle,notopwall,noleftwall,
+Cell(45,20): black,nobaggle,notopwall,noleftwall,
+Cell(45,24): black,nobaggle,notopwall,noleftwall,
+Cell(45,26): black,nobaggle,notopwall,noleftwall,
+Cell(45,31): black,nobaggle,notopwall,noleftwall,
+Cell(45,32): black,nobaggle,notopwall,noleftwall,
+Cell(45,34): black,nobaggle,notopwall,noleftwall,
+Cell(45,35): black,nobaggle,notopwall,noleftwall,
+Cell(45,38): black,nobaggle,notopwall,noleftwall,
+Cell(45,39): black,nobaggle,notopwall,noleftwall,
+Cell(45,40): black,nobaggle,notopwall,noleftwall,
+Cell(45,42): black,nobaggle,notopwall,noleftwall,
+Cell(45,43): black,nobaggle,notopwall,noleftwall,
+Cell(46,9): black,nobaggle,notopwall,noleftwall,
+Cell(46,10): black,nobaggle,notopwall,noleftwall,
+Cell(46,12): black,nobaggle,notopwall,noleftwall,
+Cell(46,13): black,nobaggle,notopwall,noleftwall,
+Cell(46,15): black,nobaggle,notopwall,noleftwall,
+Cell(46,17): black,nobaggle,notopwall,noleftwall,
+Cell(46,18): black,nobaggle,notopwall,noleftwall,
+Cell(46,19): black,nobaggle,notopwall,noleftwall,
+Cell(46,22): black,nobaggle,notopwall,noleftwall,
+Cell(46,23): black,nobaggle,notopwall,noleftwall,
+Cell(46,25): black,nobaggle,notopwall,noleftwall,
+Cell(46,28): black,nobaggle,notopwall,noleftwall,
+Cell(46,29): black,nobaggle,notopwall,noleftwall,
+Cell(46,30): black,nobaggle,notopwall,noleftwall,
+Cell(46,32): black,nobaggle,notopwall,noleftwall,
+Cell(46,34): black,nobaggle,notopwall,noleftwall,
+Cell(46,36): black,nobaggle,notopwall,noleftwall,
+Cell(46,37): black,nobaggle,notopwall,noleftwall,
+Cell(46,39): black,nobaggle,notopwall,noleftwall,
+Cell(46,40): black,nobaggle,notopwall,noleftwall,
+Cell(46,41): black,nobaggle,notopwall,noleftwall,
+Cell(46,42): black,nobaggle,notopwall,noleftwall,
+Cell(46,43): black,nobaggle,notopwall,noleftwall,
+Cell(46,44): black,nobaggle,notopwall,noleftwall,
+Cell(46,45): black,nobaggle,notopwall,noleftwall,
+Cell(46,46): black,nobaggle,notopwall,noleftwall,
+Cell(46,60): black,nobaggle,notopwall,noleftwall,
+Cell(46,61): black,nobaggle,notopwall,noleftwall,
+Cell(46,62): black,nobaggle,notopwall,noleftwall,
+Cell(47,9): black,nobaggle,notopwall,noleftwall,
+Cell(47,11): black,nobaggle,notopwall,noleftwall,
+Cell(47,18): black,nobaggle,notopwall,noleftwall,
+Cell(47,19): black,nobaggle,notopwall,noleftwall,
+Cell(47,20): black,nobaggle,notopwall,noleftwall,
+Cell(47,26): black,nobaggle,notopwall,noleftwall,
+Cell(47,27): black,nobaggle,notopwall,noleftwall,
+Cell(47,29): black,nobaggle,notopwall,noleftwall,
+Cell(47,30): black,nobaggle,notopwall,noleftwall,
+Cell(47,31): black,nobaggle,notopwall,noleftwall,
+Cell(47,32): black,nobaggle,notopwall,noleftwall,
+Cell(47,33): black,nobaggle,notopwall,noleftwall,
+Cell(47,34): black,nobaggle,notopwall,noleftwall,
+Cell(47,35): black,nobaggle,notopwall,noleftwall,
+Cell(47,36): black,nobaggle,notopwall,noleftwall,
+Cell(47,37): black,nobaggle,notopwall,noleftwall,
+Cell(47,40): black,nobaggle,notopwall,noleftwall,
+Cell(47,41): black,nobaggle,notopwall,noleftwall,
+Cell(47,42): black,nobaggle,notopwall,noleftwall,
+Cell(47,44): black,nobaggle,notopwall,noleftwall,
+Cell(47,45): black,nobaggle,notopwall,noleftwall,
+Cell(47,59): black,nobaggle,notopwall,noleftwall,
+Cell(47,60): black,nobaggle,notopwall,noleftwall,
+Cell(47,62): black,nobaggle,notopwall,noleftwall,
+Cell(48,9): black,nobaggle,notopwall,noleftwall,
+Cell(48,10): black,nobaggle,notopwall,noleftwall,
+Cell(48,11): black,nobaggle,notopwall,noleftwall,
+Cell(48,13): black,nobaggle,notopwall,noleftwall,
+Cell(48,17): black,nobaggle,notopwall,noleftwall,
+Cell(48,18): black,nobaggle,notopwall,noleftwall,
+Cell(48,20): black,nobaggle,notopwall,noleftwall,
+Cell(48,25): black,nobaggle,notopwall,noleftwall,
+Cell(48,26): black,nobaggle,notopwall,noleftwall,
+Cell(48,28): black,nobaggle,notopwall,noleftwall,
+Cell(48,29): black,nobaggle,notopwall,noleftwall,
+Cell(48,34): black,nobaggle,notopwall,noleftwall,
+Cell(48,35): black,nobaggle,notopwall,noleftwall,
+Cell(48,37): black,nobaggle,notopwall,noleftwall,
+Cell(48,42): black,nobaggle,notopwall,noleftwall,
+Cell(48,43): black,nobaggle,notopwall,noleftwall,
+Cell(48,45): black,nobaggle,notopwall,noleftwall,
+Cell(48,46): black,nobaggle,notopwall,noleftwall,
+Cell(48,61): black,nobaggle,notopwall,noleftwall,
+Cell(48,62): black,nobaggle,notopwall,noleftwall,
+Cell(49,12): black,nobaggle,notopwall,noleftwall,
+Cell(49,13): black,nobaggle,notopwall,noleftwall,
+Cell(49,15): black,nobaggle,notopwall,noleftwall,
+Cell(49,17): black,nobaggle,notopwall,noleftwall,
+Cell(49,18): black,nobaggle,notopwall,noleftwall,
+Cell(49,19): black,nobaggle,notopwall,noleftwall,
+Cell(49,20): black,nobaggle,notopwall,noleftwall,
+Cell(49,21): black,nobaggle,notopwall,noleftwall,
+Cell(49,22): black,nobaggle,notopwall,noleftwall,
+Cell(49,23): black,nobaggle,notopwall,noleftwall,
+Cell(49,25): black,nobaggle,notopwall,noleftwall,
+Cell(49,27): black,nobaggle,notopwall,noleftwall,
+Cell(49,28): black,nobaggle,notopwall,noleftwall,
+Cell(49,43): black,nobaggle,notopwall,noleftwall,
+Cell(49,46): black,nobaggle,notopwall,noleftwall,
+Cell(49,58): black,nobaggle,notopwall,noleftwall,
+Cell(49,59): black,nobaggle,notopwall,noleftwall,
+Cell(49,61): black,nobaggle,notopwall,noleftwall,
+Cell(49,62): black,nobaggle,notopwall,noleftwall,
+Cell(49,63): black,nobaggle,notopwall,noleftwall,
+Cell(50,13): black,nobaggle,notopwall,noleftwall,
+Cell(50,14): black,nobaggle,notopwall,noleftwall,
+Cell(50,15): black,nobaggle,notopwall,noleftwall,
+Cell(50,16): black,nobaggle,notopwall,noleftwall,
+Cell(50,17): black,nobaggle,notopwall,noleftwall,
+Cell(50,18): black,nobaggle,notopwall,noleftwall,
+Cell(50,19): black,nobaggle,notopwall,noleftwall,
+Cell(50,22): black,nobaggle,notopwall,noleftwall,
+Cell(50,23): black,nobaggle,notopwall,noleftwall,
+Cell(50,24): black,nobaggle,notopwall,noleftwall,
+Cell(50,26): black,nobaggle,notopwall,noleftwall,
+Cell(50,27): black,nobaggle,notopwall,noleftwall,
+Cell(50,38): black,nobaggle,notopwall,noleftwall,
+Cell(50,41): black,nobaggle,notopwall,noleftwall,
+Cell(50,42): black,nobaggle,notopwall,noleftwall,
+Cell(50,43): black,nobaggle,notopwall,noleftwall,
+Cell(50,44): black,nobaggle,notopwall,noleftwall,
+Cell(50,59): black,nobaggle,notopwall,noleftwall,
+Cell(50,61): black,nobaggle,notopwall,noleftwall,
+Cell(50,63): black,nobaggle,notopwall,noleftwall,
+Cell(50,64): black,nobaggle,notopwall,noleftwall,
+Cell(51,14): black,nobaggle,notopwall,noleftwall,
+Cell(51,15): black,nobaggle,notopwall,noleftwall,
+Cell(51,18): black,nobaggle,notopwall,noleftwall,
+Cell(51,19): black,nobaggle,notopwall,noleftwall,
+Cell(51,24): black,nobaggle,notopwall,noleftwall,
+Cell(51,25): black,nobaggle,notopwall,noleftwall,
+Cell(51,26): black,nobaggle,notopwall,noleftwall,
+Cell(51,37): black,nobaggle,notopwall,noleftwall,
+Cell(51,38): black,nobaggle,notopwall,noleftwall,
+Cell(51,39): black,nobaggle,notopwall,noleftwall,
+Cell(51,41): black,nobaggle,notopwall,noleftwall,
+Cell(51,42): black,nobaggle,notopwall,noleftwall,
+Cell(51,44): black,nobaggle,notopwall,noleftwall,
+Cell(51,58): black,nobaggle,notopwall,noleftwall,
+Cell(51,59): black,nobaggle,notopwall,noleftwall,
+Cell(51,62): black,nobaggle,notopwall,noleftwall,
+Cell(51,64): black,nobaggle,notopwall,noleftwall,
+Cell(51,65): black,nobaggle,notopwall,noleftwall,
+Cell(52,16): black,nobaggle,notopwall,noleftwall,
+Cell(52,17): black,nobaggle,notopwall,noleftwall,
+Cell(52,18): black,nobaggle,notopwall,noleftwall,
+Cell(52,36): black,nobaggle,notopwall,noleftwall,
+Cell(52,37): black,nobaggle,notopwall,noleftwall,
+Cell(52,42): black,nobaggle,notopwall,noleftwall,
+Cell(52,59): black,nobaggle,notopwall,noleftwall,
+Cell(52,60): black,nobaggle,notopwall,noleftwall,
+Cell(52,62): black,nobaggle,notopwall,noleftwall,
+Cell(52,63): black,nobaggle,notopwall,noleftwall,
+Cell(52,65): black,nobaggle,notopwall,noleftwall,
+Cell(52,66): black,nobaggle,notopwall,noleftwall,
+Cell(53,16): black,nobaggle,notopwall,noleftwall,
+Cell(53,17): black,nobaggle,notopwall,noleftwall,
+Cell(53,18): black,nobaggle,notopwall,noleftwall,
+Cell(53,33): black,nobaggle,notopwall,noleftwall,
+Cell(53,36): black,nobaggle,notopwall,noleftwall,
+Cell(53,37): black,nobaggle,notopwall,noleftwall,
+Cell(53,38): black,nobaggle,notopwall,noleftwall,
+Cell(53,41): black,nobaggle,notopwall,noleftwall,
+Cell(53,42): black,nobaggle,notopwall,noleftwall,
+Cell(53,59): black,nobaggle,notopwall,noleftwall,
+Cell(53,61): black,nobaggle,notopwall,noleftwall,
+Cell(53,63): black,nobaggle,notopwall,noleftwall,
+Cell(53,64): black,nobaggle,notopwall,noleftwall,
+Cell(53,66): black,nobaggle,notopwall,noleftwall,
+Cell(54,15): black,nobaggle,notopwall,noleftwall,
+Cell(54,16): black,nobaggle,notopwall,noleftwall,
+Cell(54,18): black,nobaggle,notopwall,noleftwall,
+Cell(54,33): black,nobaggle,notopwall,noleftwall,
+Cell(54,34): black,nobaggle,notopwall,noleftwall,
+Cell(54,35): black,nobaggle,notopwall,noleftwall,
+Cell(54,37): black,nobaggle,notopwall,noleftwall,
+Cell(54,42): black,nobaggle,notopwall,noleftwall,
+Cell(54,43): black,nobaggle,notopwall,noleftwall,
+Cell(54,59): black,nobaggle,notopwall,noleftwall,
+Cell(54,60): black,nobaggle,notopwall,noleftwall,
+Cell(54,65): black,nobaggle,notopwall,noleftwall,
+Cell(54,66): black,nobaggle,notopwall,noleftwall,
+Cell(55,34): black,nobaggle,notopwall,noleftwall,
+Cell(55,35): black,nobaggle,notopwall,noleftwall,
+Cell(55,37): black,nobaggle,notopwall,noleftwall,
+Cell(55,38): black,nobaggle,notopwall,noleftwall,
+Cell(55,39): black,nobaggle,notopwall,noleftwall,
+Cell(55,41): black,nobaggle,notopwall,noleftwall,
+Cell(55,42): black,nobaggle,notopwall,noleftwall,
+Cell(55,59): black,nobaggle,notopwall,noleftwall,
+Cell(55,61): black,nobaggle,notopwall,noleftwall,
+Cell(55,64): black,nobaggle,notopwall,noleftwall,
+Cell(55,65): black,nobaggle,notopwall,noleftwall,
+Cell(56,33): black,nobaggle,notopwall,noleftwall,
+Cell(56,34): black,nobaggle,notopwall,noleftwall,
+Cell(56,35): black,nobaggle,notopwall,noleftwall,
+Cell(56,36): black,nobaggle,notopwall,noleftwall,
+Cell(56,37): black,nobaggle,notopwall,noleftwall,
+Cell(56,38): black,nobaggle,notopwall,noleftwall,
+Cell(56,39): black,nobaggle,notopwall,noleftwall,
+Cell(56,40): black,nobaggle,notopwall,noleftwall,
+Cell(56,41): black,nobaggle,notopwall,noleftwall,
+Cell(56,42): black,nobaggle,notopwall,noleftwall,
+Cell(56,43): black,nobaggle,notopwall,noleftwall,
+Cell(56,44): black,nobaggle,notopwall,noleftwall,
+Cell(56,45): black,nobaggle,notopwall,noleftwall,
+Cell(56,59): black,nobaggle,notopwall,noleftwall,
+Cell(56,61): black,nobaggle,notopwall,noleftwall,
+Cell(56,64): black,nobaggle,notopwall,noleftwall,
+Cell(56,65): black,nobaggle,notopwall,noleftwall,
+Cell(57,36): black,nobaggle,notopwall,noleftwall,
+Cell(57,37): black,nobaggle,notopwall,noleftwall,
+Cell(57,38): black,nobaggle,notopwall,noleftwall,
+Cell(57,40): black,nobaggle,notopwall,noleftwall,
+Cell(57,41): black,nobaggle,notopwall,noleftwall,
+Cell(57,43): black,nobaggle,notopwall,noleftwall,
+Cell(57,44): black,nobaggle,notopwall,noleftwall,
+Cell(57,57): black,nobaggle,notopwall,noleftwall,
+Cell(57,64): black,nobaggle,notopwall,noleftwall,
+Cell(58,38): black,nobaggle,notopwall,noleftwall,
+Cell(58,39): black,nobaggle,notopwall,noleftwall,
+Cell(58,40): black,nobaggle,notopwall,noleftwall,
+Cell(58,42): black,nobaggle,notopwall,noleftwall,
+Cell(58,44): black,nobaggle,notopwall,noleftwall,
+Cell(58,45): black,nobaggle,notopwall,noleftwall,
+Cell(58,57): black,nobaggle,notopwall,noleftwall,
+Cell(58,58): black,nobaggle,notopwall,noleftwall,
+Cell(58,60): black,nobaggle,notopwall,noleftwall,
+Cell(58,62): black,nobaggle,notopwall,noleftwall,
+Cell(58,63): black,nobaggle,notopwall,noleftwall,
+Cell(58,64): black,nobaggle,notopwall,noleftwall,
+Cell(59,38): black,nobaggle,notopwall,noleftwall,
+Cell(59,45): black,nobaggle,notopwall,noleftwall,
+Cell(59,58): black,nobaggle,notopwall,noleftwall,
+Cell(59,59): black,nobaggle,notopwall,noleftwall,
+Cell(59,61): black,nobaggle,notopwall,noleftwall,
+Cell(59,62): black,nobaggle,notopwall,noleftwall,
+Cell(59,64): black,nobaggle,notopwall,noleftwall,
+Cell(59,65): black,nobaggle,notopwall,noleftwall,
+Cell(59,66): black,nobaggle,notopwall,noleftwall,
+Cell(60,37): black,nobaggle,notopwall,noleftwall,
+Cell(60,38): black,nobaggle,notopwall,noleftwall,
+Cell(60,41): black,nobaggle,notopwall,noleftwall,
+Cell(60,43): black,nobaggle,notopwall,noleftwall,
+Cell(60,57): black,nobaggle,notopwall,noleftwall,
+Cell(60,58): black,nobaggle,notopwall,noleftwall,
+Cell(60,59): black,nobaggle,notopwall,noleftwall,
+Cell(60,60): black,nobaggle,notopwall,noleftwall,
+Cell(60,61): black,nobaggle,notopwall,noleftwall,
+Cell(60,62): black,nobaggle,notopwall,noleftwall,
+Cell(60,63): black,nobaggle,notopwall,noleftwall,
+Cell(60,64): black,nobaggle,notopwall,noleftwall,
+Cell(60,65): black,nobaggle,notopwall,noleftwall,
+Cell(60,66): black,nobaggle,notopwall,noleftwall,
+Cell(60,67): black,nobaggle,notopwall,noleftwall,
+Cell(60,68): black,nobaggle,notopwall,noleftwall,
+Cell(60,69): black,nobaggle,notopwall,noleftwall,
+Cell(61,37): black,nobaggle,notopwall,noleftwall,
+Cell(61,38): black,nobaggle,notopwall,noleftwall,
+Cell(61,41): black,nobaggle,notopwall,noleftwall,
+Cell(61,43): black,nobaggle,notopwall,noleftwall,
+Cell(61,60): black,nobaggle,notopwall,noleftwall,
+Cell(61,61): black,nobaggle,notopwall,noleftwall,
+Cell(61,63): black,nobaggle,notopwall,noleftwall,
+Cell(61,64): black,nobaggle,notopwall,noleftwall,
+Cell(61,65): black,nobaggle,notopwall,noleftwall,
+Cell(61,67): black,nobaggle,notopwall,noleftwall,
+Cell(61,68): black,nobaggle,notopwall,noleftwall,
+Cell(62,36): black,nobaggle,notopwall,noleftwall,
+Cell(62,37): black,nobaggle,notopwall,noleftwall,
+Cell(62,42): black,nobaggle,notopwall,noleftwall,
+Cell(62,43): black,nobaggle,notopwall,noleftwall,
+Cell(62,59): black,nobaggle,notopwall,noleftwall,
+Cell(62,60): black,nobaggle,notopwall,noleftwall,
+Cell(62,65): black,nobaggle,notopwall,noleftwall,
+Cell(62,67): black,nobaggle,notopwall,noleftwall,
+Cell(62,68): black,nobaggle,notopwall,noleftwall,
+Cell(62,69): black,nobaggle,notopwall,noleftwall,
+Cell(63,36): black,nobaggle,notopwall,noleftwall,
+Cell(63,38): black,nobaggle,notopwall,noleftwall,
+Cell(63,39): black,nobaggle,notopwall,noleftwall,
+Cell(63,41): black,nobaggle,notopwall,noleftwall,
+Cell(63,43): black,nobaggle,notopwall,noleftwall,
+Cell(63,60): black,nobaggle,notopwall,noleftwall,
+Cell(63,61): black,nobaggle,notopwall,noleftwall,
+Cell(63,64): black,nobaggle,notopwall,noleftwall,
+Cell(63,65): black,nobaggle,notopwall,noleftwall,
+Cell(63,66): black,nobaggle,notopwall,noleftwall,
+Cell(63,69): black,nobaggle,notopwall,noleftwall,
+Cell(64,36): black,nobaggle,notopwall,noleftwall,
+Cell(64,37): black,nobaggle,notopwall,noleftwall,
+Cell(64,39): black,nobaggle,notopwall,noleftwall,
+Cell(64,40): black,nobaggle,notopwall,noleftwall,
+Cell(64,42): black,nobaggle,notopwall,noleftwall,
+Cell(64,43): black,nobaggle,notopwall,noleftwall,
+Cell(64,49): black,nobaggle,notopwall,noleftwall,
+Cell(64,51): black,nobaggle,notopwall,noleftwall,
+Cell(64,52): black,nobaggle,notopwall,noleftwall,
+Cell(64,60): black,nobaggle,notopwall,noleftwall,
+Cell(64,65): black,nobaggle,notopwall,noleftwall,
+Cell(64,66): black,nobaggle,notopwall,noleftwall,
+Cell(65,37): black,nobaggle,notopwall,noleftwall,
+Cell(65,38): black,nobaggle,notopwall,noleftwall,
+Cell(65,40): black,nobaggle,notopwall,noleftwall,
+Cell(65,43): black,nobaggle,notopwall,noleftwall,
+Cell(65,44): black,nobaggle,notopwall,noleftwall,
+Cell(65,49): black,nobaggle,notopwall,noleftwall,
+Cell(65,50): black,nobaggle,notopwall,noleftwall,
+Cell(65,51): black,nobaggle,notopwall,noleftwall,
+Cell(65,58): black,nobaggle,notopwall,noleftwall,
+Cell(65,60): black,nobaggle,notopwall,noleftwall,
+Cell(65,61): black,nobaggle,notopwall,noleftwall,
+Cell(65,63): black,nobaggle,notopwall,noleftwall,
+Cell(65,64): black,nobaggle,notopwall,noleftwall,
+Cell(65,65): black,nobaggle,notopwall,noleftwall,
+Cell(66,38): black,nobaggle,notopwall,noleftwall,
+Cell(66,39): black,nobaggle,notopwall,noleftwall,
+Cell(66,41): black,nobaggle,notopwall,noleftwall,
+Cell(66,43): black,nobaggle,notopwall,noleftwall,
+Cell(66,47): black,nobaggle,notopwall,noleftwall,
+Cell(66,49): black,nobaggle,notopwall,noleftwall,
+Cell(66,50): black,nobaggle,notopwall,noleftwall,
+Cell(66,53): black,nobaggle,notopwall,noleftwall,
+Cell(66,54): black,nobaggle,notopwall,noleftwall,
+Cell(66,55): black,nobaggle,notopwall,noleftwall,
+Cell(66,56): black,nobaggle,notopwall,noleftwall,
+Cell(66,57): black,nobaggle,notopwall,noleftwall,
+Cell(66,58): black,nobaggle,notopwall,noleftwall,
+Cell(66,59): black,nobaggle,notopwall,noleftwall,
+Cell(66,60): black,nobaggle,notopwall,noleftwall,
+Cell(66,61): black,nobaggle,notopwall,noleftwall,
+Cell(66,64): black,nobaggle,notopwall,noleftwall,
+Cell(67,39): black,nobaggle,notopwall,noleftwall,
+Cell(67,40): black,nobaggle,notopwall,noleftwall,
+Cell(67,41): black,nobaggle,notopwall,noleftwall,
+Cell(67,43): black,nobaggle,notopwall,noleftwall,
+Cell(67,44): black,nobaggle,notopwall,noleftwall,
+Cell(67,45): black,nobaggle,notopwall,noleftwall,
+Cell(67,46): black,nobaggle,notopwall,noleftwall,
+Cell(67,47): black,nobaggle,notopwall,noleftwall,
+Cell(67,48): black,nobaggle,notopwall,noleftwall,
+Cell(67,49): black,nobaggle,notopwall,noleftwall,
+Cell(67,51): black,nobaggle,notopwall,noleftwall,
+Cell(67,55): black,nobaggle,notopwall,noleftwall,
+Cell(67,57): black,nobaggle,notopwall,noleftwall,
+Cell(67,62): black,nobaggle,notopwall,noleftwall,
+Cell(67,63): black,nobaggle,notopwall,noleftwall,
+Cell(68,40): black,nobaggle,notopwall,noleftwall,
+Cell(68,41): black,nobaggle,notopwall,noleftwall,
+Cell(68,43): black,nobaggle,notopwall,noleftwall,
+Cell(68,44): black,nobaggle,notopwall,noleftwall,
+Cell(68,46): black,nobaggle,notopwall,noleftwall,
+Cell(68,48): black,nobaggle,notopwall,noleftwall,
+Cell(68,49): black,nobaggle,notopwall,noleftwall,
+Cell(68,50): black,nobaggle,notopwall,noleftwall,
+Cell(68,53): black,nobaggle,notopwall,noleftwall,
+Cell(68,54): black,nobaggle,notopwall,noleftwall,
+Cell(68,56): black,nobaggle,notopwall,noleftwall,
+Cell(68,59): black,nobaggle,notopwall,noleftwall,
+Cell(68,60): black,nobaggle,notopwall,noleftwall,
+Cell(68,61): black,nobaggle,notopwall,noleftwall,
+Cell(68,63): black,nobaggle,notopwall,noleftwall,
+Cell(69,40): black,nobaggle,notopwall,noleftwall,
+Cell(69,42): black,nobaggle,notopwall,noleftwall,
+Cell(69,49): black,nobaggle,notopwall,noleftwall,
+Cell(69,50): black,nobaggle,notopwall,noleftwall,
+Cell(69,51): black,nobaggle,notopwall,noleftwall,
+Cell(69,57): black,nobaggle,notopwall,noleftwall,
+Cell(69,58): black,nobaggle,notopwall,noleftwall,
+Cell(69,60): black,nobaggle,notopwall,noleftwall,
+Cell(69,61): black,nobaggle,notopwall,noleftwall,
+Cell(69,62): black,nobaggle,notopwall,noleftwall,
+Cell(69,63): black,nobaggle,notopwall,noleftwall,
+Cell(70,40): black,nobaggle,notopwall,noleftwall,
+Cell(70,41): black,nobaggle,notopwall,noleftwall,
+Cell(70,42): black,nobaggle,notopwall,noleftwall,
+Cell(70,44): black,nobaggle,notopwall,noleftwall,
+Cell(70,48): black,nobaggle,notopwall,noleftwall,
+Cell(70,49): black,nobaggle,notopwall,noleftwall,
+Cell(70,51): black,nobaggle,notopwall,noleftwall,
+Cell(70,56): black,nobaggle,notopwall,noleftwall,
+Cell(70,57): black,nobaggle,notopwall,noleftwall,
+Cell(70,59): black,nobaggle,notopwall,noleftwall,
+Cell(70,60): black,nobaggle,notopwall,noleftwall,
+Cell(71,43): black,nobaggle,notopwall,noleftwall,
+Cell(71,44): black,nobaggle,notopwall,noleftwall,
+Cell(71,46): black,nobaggle,notopwall,noleftwall,
+Cell(71,48): black,nobaggle,notopwall,noleftwall,
+Cell(71,49): black,nobaggle,notopwall,noleftwall,
+Cell(71,50): black,nobaggle,notopwall,noleftwall,
+Cell(71,51): black,nobaggle,notopwall,noleftwall,
+Cell(71,52): black,nobaggle,notopwall,noleftwall,
+Cell(71,53): black,nobaggle,notopwall,noleftwall,
+Cell(71,54): black,nobaggle,notopwall,noleftwall,
+Cell(71,56): black,nobaggle,notopwall,noleftwall,
+Cell(71,58): black,nobaggle,notopwall,noleftwall,
+Cell(71,59): black,nobaggle,notopwall,noleftwall,
+Cell(72,44): black,nobaggle,notopwall,noleftwall,
+Cell(72,45): black,nobaggle,notopwall,noleftwall,
+Cell(72,46): black,nobaggle,notopwall,noleftwall,
+Cell(72,47): black,nobaggle,notopwall,noleftwall,
+Cell(72,48): black,nobaggle,notopwall,noleftwall,
+Cell(72,49): black,nobaggle,notopwall,noleftwall,
+Cell(72,50): black,nobaggle,notopwall,noleftwall,
+Cell(72,53): black,nobaggle,notopwall,noleftwall,
+Cell(72,54): black,nobaggle,notopwall,noleftwall,
+Cell(72,55): black,nobaggle,notopwall,noleftwall,
+Cell(72,57): black,nobaggle,notopwall,noleftwall,
+Cell(72,58): black,nobaggle,notopwall,noleftwall,
+Cell(73,45): black,nobaggle,notopwall,noleftwall,
+Cell(73,46): black,nobaggle,notopwall,noleftwall,
+Cell(73,49): black,nobaggle,notopwall,noleftwall,
+Cell(73,50): black,nobaggle,notopwall,noleftwall,
+Cell(73,55): black,nobaggle,notopwall,noleftwall,
+Cell(73,56): black,nobaggle,notopwall,noleftwall,
+Cell(73,57): black,nobaggle,notopwall,noleftwall,
+Cell(74,47): black,nobaggle,notopwall,noleftwall,
+Cell(74,48): black,nobaggle,notopwall,noleftwall,
+Cell(74,49): black,nobaggle,notopwall,noleftwall,
+Cell(75,47): black,nobaggle,notopwall,noleftwall,
+Cell(75,48): black,nobaggle,notopwall,noleftwall,
+Cell(75,49): black,nobaggle,notopwall,noleftwall,
+Cell(76,46): black,nobaggle,notopwall,noleftwall,
+Cell(76,47): black,nobaggle,notopwall,noleftwall,
+Cell(76,49): black,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/helloturmite/HelloTurmite-answer1.map b/src/lessons/turmites/helloturmite/HelloTurmite-answer1.map
new file mode 100644
index 0000000..ab996c4
--- /dev/null
+++ b/src/lessons/turmites/helloturmite/HelloTurmite-answer1.map
@@ -0,0 +1,2457 @@
+TurmiteWorld: snail (10100 steps)
+Size: 68x72
+Buggle(45,60): west,red,black,ant
+Cell(3,26): black,nobaggle,notopwall,noleftwall,
+Cell(3,27): black,nobaggle,notopwall,noleftwall,
+Cell(3,28): black,nobaggle,notopwall,noleftwall,
+Cell(3,29): black,nobaggle,notopwall,noleftwall,
+Cell(3,30): black,nobaggle,notopwall,noleftwall,
+Cell(3,31): black,nobaggle,notopwall,noleftwall,
+Cell(3,32): black,nobaggle,notopwall,noleftwall,
+Cell(3,33): black,nobaggle,notopwall,noleftwall,
+Cell(3,34): black,nobaggle,notopwall,noleftwall,
+Cell(3,35): black,nobaggle,notopwall,noleftwall,
+Cell(3,36): black,nobaggle,notopwall,noleftwall,
+Cell(3,37): black,nobaggle,notopwall,noleftwall,
+Cell(3,38): black,nobaggle,notopwall,noleftwall,
+Cell(3,39): black,nobaggle,notopwall,noleftwall,
+Cell(3,40): black,nobaggle,notopwall,noleftwall,
+Cell(3,41): black,nobaggle,notopwall,noleftwall,
+Cell(3,42): black,nobaggle,notopwall,noleftwall,
+Cell(3,43): black,nobaggle,notopwall,noleftwall,
+Cell(4,26): black,nobaggle,notopwall,noleftwall,
+Cell(4,29): black,nobaggle,notopwall,noleftwall,
+Cell(4,31): black,nobaggle,notopwall,noleftwall,
+Cell(4,33): black,nobaggle,notopwall,noleftwall,
+Cell(4,35): black,nobaggle,notopwall,noleftwall,
+Cell(4,37): black,nobaggle,notopwall,noleftwall,
+Cell(4,39): black,nobaggle,notopwall,noleftwall,
+Cell(4,41): black,nobaggle,notopwall,noleftwall,
+Cell(4,43): black,nobaggle,notopwall,noleftwall,
+Cell(5,24): black,nobaggle,notopwall,noleftwall,
+Cell(5,25): black,nobaggle,notopwall,noleftwall,
+Cell(5,26): black,nobaggle,notopwall,noleftwall,
+Cell(5,27): black,nobaggle,notopwall,noleftwall,
+Cell(5,28): black,nobaggle,notopwall,noleftwall,
+Cell(5,29): black,nobaggle,notopwall,noleftwall,
+Cell(5,31): black,nobaggle,notopwall,noleftwall,
+Cell(5,32): black,nobaggle,notopwall,noleftwall,
+Cell(5,33): black,nobaggle,notopwall,noleftwall,
+Cell(5,35): black,nobaggle,notopwall,noleftwall,
+Cell(5,36): black,nobaggle,notopwall,noleftwall,
+Cell(5,37): black,nobaggle,notopwall,noleftwall,
+Cell(5,39): black,nobaggle,notopwall,noleftwall,
+Cell(5,40): black,nobaggle,notopwall,noleftwall,
+Cell(5,41): black,nobaggle,notopwall,noleftwall,
+Cell(5,43): black,nobaggle,notopwall,noleftwall,
+Cell(5,44): black,nobaggle,notopwall,noleftwall,
+Cell(5,45): black,nobaggle,notopwall,noleftwall,
+Cell(5,46): black,nobaggle,notopwall,noleftwall,
+Cell(5,47): black,nobaggle,notopwall,noleftwall,
+Cell(5,48): black,nobaggle,notopwall,noleftwall,
+Cell(5,49): black,nobaggle,notopwall,noleftwall,
+Cell(6,24): black,nobaggle,notopwall,noleftwall,
+Cell(6,27): black,nobaggle,notopwall,noleftwall,
+Cell(6,29): black,nobaggle,notopwall,noleftwall,
+Cell(6,30): black,nobaggle,notopwall,noleftwall,
+Cell(6,31): black,nobaggle,notopwall,noleftwall,
+Cell(6,33): black,nobaggle,notopwall,noleftwall,
+Cell(6,34): black,nobaggle,notopwall,noleftwall,
+Cell(6,35): black,nobaggle,notopwall,noleftwall,
+Cell(6,37): black,nobaggle,notopwall,noleftwall,
+Cell(6,38): black,nobaggle,notopwall,noleftwall,
+Cell(6,39): black,nobaggle,notopwall,noleftwall,
+Cell(6,41): black,nobaggle,notopwall,noleftwall,
+Cell(6,42): black,nobaggle,notopwall,noleftwall,
+Cell(6,43): black,nobaggle,notopwall,noleftwall,
+Cell(6,45): black,nobaggle,notopwall,noleftwall,
+Cell(6,47): black,nobaggle,notopwall,noleftwall,
+Cell(6,49): black,nobaggle,notopwall,noleftwall,
+Cell(7,20): black,nobaggle,notopwall,noleftwall,
+Cell(7,21): black,nobaggle,notopwall,noleftwall,
+Cell(7,22): black,nobaggle,notopwall,noleftwall,
+Cell(7,23): black,nobaggle,notopwall,noleftwall,
+Cell(7,24): black,nobaggle,notopwall,noleftwall,
+Cell(7,25): black,nobaggle,notopwall,noleftwall,
+Cell(7,26): black,nobaggle,notopwall,noleftwall,
+Cell(7,27): black,nobaggle,notopwall,noleftwall,
+Cell(7,28): black,nobaggle,notopwall,noleftwall,
+Cell(7,29): black,nobaggle,notopwall,noleftwall,
+Cell(7,30): black,nobaggle,notopwall,noleftwall,
+Cell(7,31): black,nobaggle,notopwall,noleftwall,
+Cell(7,32): black,nobaggle,notopwall,noleftwall,
+Cell(7,33): black,nobaggle,notopwall,noleftwall,
+Cell(7,34): black,nobaggle,notopwall,noleftwall,
+Cell(7,35): black,nobaggle,notopwall,noleftwall,
+Cell(7,36): black,nobaggle,notopwall,noleftwall,
+Cell(7,37): black,nobaggle,notopwall,noleftwall,
+Cell(7,38): black,nobaggle,notopwall,noleftwall,
+Cell(7,39): black,nobaggle,notopwall,noleftwall,
+Cell(7,40): black,nobaggle,notopwall,noleftwall,
+Cell(7,41): black,nobaggle,notopwall,noleftwall,
+Cell(7,42): black,nobaggle,notopwall,noleftwall,
+Cell(7,43): black,nobaggle,notopwall,noleftwall,
+Cell(7,44): black,nobaggle,notopwall,noleftwall,
+Cell(7,45): black,nobaggle,notopwall,noleftwall,
+Cell(7,46): black,nobaggle,notopwall,noleftwall,
+Cell(7,47): black,nobaggle,notopwall,noleftwall,
+Cell(7,49): black,nobaggle,notopwall,noleftwall,
+Cell(7,50): black,nobaggle,notopwall,noleftwall,
+Cell(7,51): black,nobaggle,notopwall,noleftwall,
+Cell(7,52): black,nobaggle,notopwall,noleftwall,
+Cell(7,53): black,nobaggle,notopwall,noleftwall,
+Cell(7,54): black,nobaggle,notopwall,noleftwall,
+Cell(7,55): black,nobaggle,notopwall,noleftwall,
+Cell(8,20): black,nobaggle,notopwall,noleftwall,
+Cell(8,23): black,nobaggle,notopwall,noleftwall,
+Cell(8,25): black,nobaggle,notopwall,noleftwall,
+Cell(8,26): black,nobaggle,notopwall,noleftwall,
+Cell(8,28): black,nobaggle,notopwall,noleftwall,
+Cell(8,30): black,nobaggle,notopwall,noleftwall,
+Cell(8,32): black,nobaggle,notopwall,noleftwall,
+Cell(8,34): black,nobaggle,notopwall,noleftwall,
+Cell(8,36): black,nobaggle,notopwall,noleftwall,
+Cell(8,38): black,nobaggle,notopwall,noleftwall,
+Cell(8,40): black,nobaggle,notopwall,noleftwall,
+Cell(8,42): black,nobaggle,notopwall,noleftwall,
+Cell(8,45): black,nobaggle,notopwall,noleftwall,
+Cell(8,47): black,nobaggle,notopwall,noleftwall,
+Cell(8,48): black,nobaggle,notopwall,noleftwall,
+Cell(8,49): black,nobaggle,notopwall,noleftwall,
+Cell(8,51): black,nobaggle,notopwall,noleftwall,
+Cell(8,53): black,nobaggle,notopwall,noleftwall,
+Cell(8,55): black,nobaggle,notopwall,noleftwall,
+Cell(9,14): black,nobaggle,notopwall,noleftwall,
+Cell(9,15): black,nobaggle,notopwall,noleftwall,
+Cell(9,16): black,nobaggle,notopwall,noleftwall,
+Cell(9,17): black,nobaggle,notopwall,noleftwall,
+Cell(9,18): black,nobaggle,notopwall,noleftwall,
+Cell(9,19): black,nobaggle,notopwall,noleftwall,
+Cell(9,20): black,nobaggle,notopwall,noleftwall,
+Cell(9,21): black,nobaggle,notopwall,noleftwall,
+Cell(9,22): black,nobaggle,notopwall,noleftwall,
+Cell(9,23): black,nobaggle,notopwall,noleftwall,
+Cell(9,25): black,nobaggle,notopwall,noleftwall,
+Cell(9,27): black,nobaggle,notopwall,noleftwall,
+Cell(9,29): black,nobaggle,notopwall,noleftwall,
+Cell(9,31): black,nobaggle,notopwall,noleftwall,
+Cell(9,33): black,nobaggle,notopwall,noleftwall,
+Cell(9,35): black,nobaggle,notopwall,noleftwall,
+Cell(9,37): black,nobaggle,notopwall,noleftwall,
+Cell(9,39): black,nobaggle,notopwall,noleftwall,
+Cell(9,41): black,nobaggle,notopwall,noleftwall,
+Cell(9,43): black,nobaggle,notopwall,noleftwall,
+Cell(9,44): black,nobaggle,notopwall,noleftwall,
+Cell(9,45): black,nobaggle,notopwall,noleftwall,
+Cell(9,46): black,nobaggle,notopwall,noleftwall,
+Cell(9,47): black,nobaggle,notopwall,noleftwall,
+Cell(9,48): black,nobaggle,notopwall,noleftwall,
+Cell(9,49): black,nobaggle,notopwall,noleftwall,
+Cell(9,50): black,nobaggle,notopwall,noleftwall,
+Cell(9,51): black,nobaggle,notopwall,noleftwall,
+Cell(9,52): black,nobaggle,notopwall,noleftwall,
+Cell(9,53): black,nobaggle,notopwall,noleftwall,
+Cell(9,55): black,nobaggle,notopwall,noleftwall,
+Cell(10,14): black,nobaggle,notopwall,noleftwall,
+Cell(10,17): black,nobaggle,notopwall,noleftwall,
+Cell(10,19): black,nobaggle,notopwall,noleftwall,
+Cell(10,21): black,nobaggle,notopwall,noleftwall,
+Cell(10,23): black,nobaggle,notopwall,noleftwall,
+Cell(10,24): black,nobaggle,notopwall,noleftwall,
+Cell(10,25): black,nobaggle,notopwall,noleftwall,
+Cell(10,26): black,nobaggle,notopwall,noleftwall,
+Cell(10,27): black,nobaggle,notopwall,noleftwall,
+Cell(10,28): black,nobaggle,notopwall,noleftwall,
+Cell(10,29): black,nobaggle,notopwall,noleftwall,
+Cell(10,30): black,nobaggle,notopwall,noleftwall,
+Cell(10,31): black,nobaggle,notopwall,noleftwall,
+Cell(10,32): black,nobaggle,notopwall,noleftwall,
+Cell(10,33): black,nobaggle,notopwall,noleftwall,
+Cell(10,34): black,nobaggle,notopwall,noleftwall,
+Cell(10,35): black,nobaggle,notopwall,noleftwall,
+Cell(10,36): black,nobaggle,notopwall,noleftwall,
+Cell(10,37): black,nobaggle,notopwall,noleftwall,
+Cell(10,38): black,nobaggle,notopwall,noleftwall,
+Cell(10,39): black,nobaggle,notopwall,noleftwall,
+Cell(10,40): black,nobaggle,notopwall,noleftwall,
+Cell(10,41): black,nobaggle,notopwall,noleftwall,
+Cell(10,42): black,nobaggle,notopwall,noleftwall,
+Cell(10,43): black,nobaggle,notopwall,noleftwall,
+Cell(10,44): black,nobaggle,notopwall,noleftwall,
+Cell(10,46): black,nobaggle,notopwall,noleftwall,
+Cell(10,48): black,nobaggle,notopwall,noleftwall,
+Cell(10,51): black,nobaggle,notopwall,noleftwall,
+Cell(10,53): black,nobaggle,notopwall,noleftwall,
+Cell(10,54): black,nobaggle,notopwall,noleftwall,
+Cell(10,55): black,nobaggle,notopwall,noleftwall,
+Cell(11,12): black,nobaggle,notopwall,noleftwall,
+Cell(11,13): black,nobaggle,notopwall,noleftwall,
+Cell(11,14): black,nobaggle,notopwall,noleftwall,
+Cell(11,15): black,nobaggle,notopwall,noleftwall,
+Cell(11,16): black,nobaggle,notopwall,noleftwall,
+Cell(11,17): black,nobaggle,notopwall,noleftwall,
+Cell(11,19): black,nobaggle,notopwall,noleftwall,
+Cell(11,20): black,nobaggle,notopwall,noleftwall,
+Cell(11,21): black,nobaggle,notopwall,noleftwall,
+Cell(11,22): black,nobaggle,notopwall,noleftwall,
+Cell(11,23): black,nobaggle,notopwall,noleftwall,
+Cell(11,24): black,nobaggle,notopwall,noleftwall,
+Cell(11,25): black,nobaggle,notopwall,noleftwall,
+Cell(11,27): black,nobaggle,notopwall,noleftwall,
+Cell(11,28): black,nobaggle,notopwall,noleftwall,
+Cell(11,29): black,nobaggle,notopwall,noleftwall,
+Cell(11,30): black,nobaggle,notopwall,noleftwall,
+Cell(11,31): black,nobaggle,notopwall,noleftwall,
+Cell(11,32): black,nobaggle,notopwall,noleftwall,
+Cell(11,33): black,nobaggle,notopwall,noleftwall,
+Cell(11,34): black,nobaggle,notopwall,noleftwall,
+Cell(11,35): black,nobaggle,notopwall,noleftwall,
+Cell(11,36): black,nobaggle,notopwall,noleftwall,
+Cell(11,37): black,nobaggle,notopwall,noleftwall,
+Cell(11,38): black,nobaggle,notopwall,noleftwall,
+Cell(11,39): black,nobaggle,notopwall,noleftwall,
+Cell(11,40): black,nobaggle,notopwall,noleftwall,
+Cell(11,41): black,nobaggle,notopwall,noleftwall,
+Cell(11,43): black,nobaggle,notopwall,noleftwall,
+Cell(11,45): black,nobaggle,notopwall,noleftwall,
+Cell(11,47): black,nobaggle,notopwall,noleftwall,
+Cell(11,49): black,nobaggle,notopwall,noleftwall,
+Cell(11,50): black,nobaggle,notopwall,noleftwall,
+Cell(11,51): black,nobaggle,notopwall,noleftwall,
+Cell(11,52): black,nobaggle,notopwall,noleftwall,
+Cell(11,53): black,nobaggle,notopwall,noleftwall,
+Cell(11,54): black,nobaggle,notopwall,noleftwall,
+Cell(11,55): black,nobaggle,notopwall,noleftwall,
+Cell(11,56): black,nobaggle,notopwall,noleftwall,
+Cell(11,57): black,nobaggle,notopwall,noleftwall,
+Cell(12,12): black,nobaggle,notopwall,noleftwall,
+Cell(12,15): black,nobaggle,notopwall,noleftwall,
+Cell(12,17): black,nobaggle,notopwall,noleftwall,
+Cell(12,18): black,nobaggle,notopwall,noleftwall,
+Cell(12,19): black,nobaggle,notopwall,noleftwall,
+Cell(12,21): black,nobaggle,notopwall,noleftwall,
+Cell(12,23): black,nobaggle,notopwall,noleftwall,
+Cell(12,25): black,nobaggle,notopwall,noleftwall,
+Cell(12,26): black,nobaggle,notopwall,noleftwall,
+Cell(12,27): black,nobaggle,notopwall,noleftwall,
+Cell(12,28): black,nobaggle,notopwall,noleftwall,
+Cell(12,31): black,nobaggle,notopwall,noleftwall,
+Cell(12,33): black,nobaggle,notopwall,noleftwall,
+Cell(12,35): black,nobaggle,notopwall,noleftwall,
+Cell(12,37): black,nobaggle,notopwall,noleftwall,
+Cell(12,39): black,nobaggle,notopwall,noleftwall,
+Cell(12,41): black,nobaggle,notopwall,noleftwall,
+Cell(12,42): black,nobaggle,notopwall,noleftwall,
+Cell(12,43): black,nobaggle,notopwall,noleftwall,
+Cell(12,44): black,nobaggle,notopwall,noleftwall,
+Cell(12,45): black,nobaggle,notopwall,noleftwall,
+Cell(12,46): black,nobaggle,notopwall,noleftwall,
+Cell(12,47): black,nobaggle,notopwall,noleftwall,
+Cell(12,48): black,nobaggle,notopwall,noleftwall,
+Cell(12,49): black,nobaggle,notopwall,noleftwall,
+Cell(12,50): black,nobaggle,notopwall,noleftwall,
+Cell(12,52): black,nobaggle,notopwall,noleftwall,
+Cell(12,55): black,nobaggle,notopwall,noleftwall,
+Cell(12,57): black,nobaggle,notopwall,noleftwall,
+Cell(13,10): black,nobaggle,notopwall,noleftwall,
+Cell(13,11): black,nobaggle,notopwall,noleftwall,
+Cell(13,12): black,nobaggle,notopwall,noleftwall,
+Cell(13,13): black,nobaggle,notopwall,noleftwall,
+Cell(13,14): black,nobaggle,notopwall,noleftwall,
+Cell(13,15): black,nobaggle,notopwall,noleftwall,
+Cell(13,16): black,nobaggle,notopwall,noleftwall,
+Cell(13,17): black,nobaggle,notopwall,noleftwall,
+Cell(13,18): black,nobaggle,notopwall,noleftwall,
+Cell(13,19): black,nobaggle,notopwall,noleftwall,
+Cell(13,20): black,nobaggle,notopwall,noleftwall,
+Cell(13,22): black,nobaggle,notopwall,noleftwall,
+Cell(13,24): black,nobaggle,notopwall,noleftwall,
+Cell(13,26): black,nobaggle,notopwall,noleftwall,
+Cell(13,27): black,nobaggle,notopwall,noleftwall,
+Cell(13,28): black,nobaggle,notopwall,noleftwall,
+Cell(13,29): black,nobaggle,notopwall,noleftwall,
+Cell(13,30): black,nobaggle,notopwall,noleftwall,
+Cell(13,31): black,nobaggle,notopwall,noleftwall,
+Cell(13,33): black,nobaggle,notopwall,noleftwall,
+Cell(13,34): black,nobaggle,notopwall,noleftwall,
+Cell(13,35): black,nobaggle,notopwall,noleftwall,
+Cell(13,37): black,nobaggle,notopwall,noleftwall,
+Cell(13,38): black,nobaggle,notopwall,noleftwall,
+Cell(13,39): black,nobaggle,notopwall,noleftwall,
+Cell(13,41): black,nobaggle,notopwall,noleftwall,
+Cell(13,42): black,nobaggle,notopwall,noleftwall,
+Cell(13,43): black,nobaggle,notopwall,noleftwall,
+Cell(13,44): black,nobaggle,notopwall,noleftwall,
+Cell(13,45): black,nobaggle,notopwall,noleftwall,
+Cell(13,46): black,nobaggle,notopwall,noleftwall,
+Cell(13,47): black,nobaggle,notopwall,noleftwall,
+Cell(13,49): black,nobaggle,notopwall,noleftwall,
+Cell(13,51): black,nobaggle,notopwall,noleftwall,
+Cell(13,53): black,nobaggle,notopwall,noleftwall,
+Cell(13,54): black,nobaggle,notopwall,noleftwall,
+Cell(13,55): black,nobaggle,notopwall,noleftwall,
+Cell(13,56): black,nobaggle,notopwall,noleftwall,
+Cell(13,57): black,nobaggle,notopwall,noleftwall,
+Cell(13,58): black,nobaggle,notopwall,noleftwall,
+Cell(13,59): black,nobaggle,notopwall,noleftwall,
+Cell(14,10): black,nobaggle,notopwall,noleftwall,
+Cell(14,13): black,nobaggle,notopwall,noleftwall,
+Cell(14,14): black,nobaggle,notopwall,noleftwall,
+Cell(14,16): black,nobaggle,notopwall,noleftwall,
+Cell(14,19): black,nobaggle,notopwall,noleftwall,
+Cell(14,20): black,nobaggle,notopwall,noleftwall,
+Cell(14,21): black,nobaggle,notopwall,noleftwall,
+Cell(14,22): black,nobaggle,notopwall,noleftwall,
+Cell(14,23): black,nobaggle,notopwall,noleftwall,
+Cell(14,24): black,nobaggle,notopwall,noleftwall,
+Cell(14,25): black,nobaggle,notopwall,noleftwall,
+Cell(14,26): black,nobaggle,notopwall,noleftwall,
+Cell(14,29): black,nobaggle,notopwall,noleftwall,
+Cell(14,31): black,nobaggle,notopwall,noleftwall,
+Cell(14,32): black,nobaggle,notopwall,noleftwall,
+Cell(14,33): black,nobaggle,notopwall,noleftwall,
+Cell(14,35): black,nobaggle,notopwall,noleftwall,
+Cell(14,36): black,nobaggle,notopwall,noleftwall,
+Cell(14,37): black,nobaggle,notopwall,noleftwall,
+Cell(14,39): black,nobaggle,notopwall,noleftwall,
+Cell(14,40): black,nobaggle,notopwall,noleftwall,
+Cell(14,41): black,nobaggle,notopwall,noleftwall,
+Cell(14,43): black,nobaggle,notopwall,noleftwall,
+Cell(14,45): black,nobaggle,notopwall,noleftwall,
+Cell(14,47): black,nobaggle,notopwall,noleftwall,
+Cell(14,48): black,nobaggle,notopwall,noleftwall,
+Cell(14,49): black,nobaggle,notopwall,noleftwall,
+Cell(14,50): black,nobaggle,notopwall,noleftwall,
+Cell(14,51): black,nobaggle,notopwall,noleftwall,
+Cell(14,52): black,nobaggle,notopwall,noleftwall,
+Cell(14,53): black,nobaggle,notopwall,noleftwall,
+Cell(14,54): black,nobaggle,notopwall,noleftwall,
+Cell(14,57): black,nobaggle,notopwall,noleftwall,
+Cell(14,59): black,nobaggle,notopwall,noleftwall,
+Cell(15,8): black,nobaggle,notopwall,noleftwall,
+Cell(15,9): black,nobaggle,notopwall,noleftwall,
+Cell(15,10): black,nobaggle,notopwall,noleftwall,
+Cell(15,11): black,nobaggle,notopwall,noleftwall,
+Cell(15,12): black,nobaggle,notopwall,noleftwall,
+Cell(15,13): black,nobaggle,notopwall,noleftwall,
+Cell(15,15): black,nobaggle,notopwall,noleftwall,
+Cell(15,16): black,nobaggle,notopwall,noleftwall,
+Cell(15,17): black,nobaggle,notopwall,noleftwall,
+Cell(15,18): black,nobaggle,notopwall,noleftwall,
+Cell(15,19): black,nobaggle,notopwall,noleftwall,
+Cell(15,21): black,nobaggle,notopwall,noleftwall,
+Cell(15,22): black,nobaggle,notopwall,noleftwall,
+Cell(15,23): black,nobaggle,notopwall,noleftwall,
+Cell(15,24): black,nobaggle,notopwall,noleftwall,
+Cell(15,25): black,nobaggle,notopwall,noleftwall,
+Cell(15,26): black,nobaggle,notopwall,noleftwall,
+Cell(15,27): black,nobaggle,notopwall,noleftwall,
+Cell(15,28): black,nobaggle,notopwall,noleftwall,
+Cell(15,29): black,nobaggle,notopwall,noleftwall,
+Cell(15,30): black,nobaggle,notopwall,noleftwall,
+Cell(15,31): black,nobaggle,notopwall,noleftwall,
+Cell(15,32): black,nobaggle,notopwall,noleftwall,
+Cell(15,33): black,nobaggle,notopwall,noleftwall,
+Cell(15,34): black,nobaggle,notopwall,noleftwall,
+Cell(15,35): black,nobaggle,notopwall,noleftwall,
+Cell(15,36): black,nobaggle,notopwall,noleftwall,
+Cell(15,37): black,nobaggle,notopwall,noleftwall,
+Cell(15,38): black,nobaggle,notopwall,noleftwall,
+Cell(15,39): black,nobaggle,notopwall,noleftwall,
+Cell(15,40): black,nobaggle,notopwall,noleftwall,
+Cell(15,41): black,nobaggle,notopwall,noleftwall,
+Cell(15,42): black,nobaggle,notopwall,noleftwall,
+Cell(15,43): black,nobaggle,notopwall,noleftwall,
+Cell(15,44): black,nobaggle,notopwall,noleftwall,
+Cell(15,45): black,nobaggle,notopwall,noleftwall,
+Cell(15,47): black,nobaggle,notopwall,noleftwall,
+Cell(15,48): black,nobaggle,notopwall,noleftwall,
+Cell(15,49): black,nobaggle,notopwall,noleftwall,
+Cell(15,50): black,nobaggle,notopwall,noleftwall,
+Cell(15,53): black,nobaggle,notopwall,noleftwall,
+Cell(15,55): black,nobaggle,notopwall,noleftwall,
+Cell(15,56): black,nobaggle,notopwall,noleftwall,
+Cell(15,57): black,nobaggle,notopwall,noleftwall,
+Cell(15,59): black,nobaggle,notopwall,noleftwall,
+Cell(15,60): black,nobaggle,notopwall,noleftwall,
+Cell(15,61): black,nobaggle,notopwall,noleftwall,
+Cell(16,8): black,nobaggle,notopwall,noleftwall,
+Cell(16,10): black,nobaggle,notopwall,noleftwall,
+Cell(16,12): black,nobaggle,notopwall,noleftwall,
+Cell(16,14): black,nobaggle,notopwall,noleftwall,
+Cell(16,15): black,nobaggle,notopwall,noleftwall,
+Cell(16,17): black,nobaggle,notopwall,noleftwall,
+Cell(16,19): black,nobaggle,notopwall,noleftwall,
+Cell(16,20): black,nobaggle,notopwall,noleftwall,
+Cell(16,21): black,nobaggle,notopwall,noleftwall,
+Cell(16,22): black,nobaggle,notopwall,noleftwall,
+Cell(16,25): black,nobaggle,notopwall,noleftwall,
+Cell(16,27): black,nobaggle,notopwall,noleftwall,
+Cell(16,28): black,nobaggle,notopwall,noleftwall,
+Cell(16,30): black,nobaggle,notopwall,noleftwall,
+Cell(16,32): black,nobaggle,notopwall,noleftwall,
+Cell(16,34): black,nobaggle,notopwall,noleftwall,
+Cell(16,36): black,nobaggle,notopwall,noleftwall,
+Cell(16,38): black,nobaggle,notopwall,noleftwall,
+Cell(16,40): black,nobaggle,notopwall,noleftwall,
+Cell(16,43): black,nobaggle,notopwall,noleftwall,
+Cell(16,45): black,nobaggle,notopwall,noleftwall,
+Cell(16,46): black,nobaggle,notopwall,noleftwall,
+Cell(16,47): black,nobaggle,notopwall,noleftwall,
+Cell(16,49): black,nobaggle,notopwall,noleftwall,
+Cell(16,50): black,nobaggle,notopwall,noleftwall,
+Cell(16,51): black,nobaggle,notopwall,noleftwall,
+Cell(16,52): black,nobaggle,notopwall,noleftwall,
+Cell(16,53): black,nobaggle,notopwall,noleftwall,
+Cell(16,54): black,nobaggle,notopwall,noleftwall,
+Cell(16,55): black,nobaggle,notopwall,noleftwall,
+Cell(16,57): black,nobaggle,notopwall,noleftwall,
+Cell(16,58): black,nobaggle,notopwall,noleftwall,
+Cell(16,59): black,nobaggle,notopwall,noleftwall,
+Cell(16,61): black,nobaggle,notopwall,noleftwall,
+Cell(17,4): black,nobaggle,notopwall,noleftwall,
+Cell(17,5): black,nobaggle,notopwall,noleftwall,
+Cell(17,6): black,nobaggle,notopwall,noleftwall,
+Cell(17,7): black,nobaggle,notopwall,noleftwall,
+Cell(17,8): black,nobaggle,notopwall,noleftwall,
+Cell(17,9): black,nobaggle,notopwall,noleftwall,
+Cell(17,10): black,nobaggle,notopwall,noleftwall,
+Cell(17,12): black,nobaggle,notopwall,noleftwall,
+Cell(17,13): black,nobaggle,notopwall,noleftwall,
+Cell(17,15): black,nobaggle,notopwall,noleftwall,
+Cell(17,16): black,nobaggle,notopwall,noleftwall,
+Cell(17,17): black,nobaggle,notopwall,noleftwall,
+Cell(17,18): black,nobaggle,notopwall,noleftwall,
+Cell(17,20): black,nobaggle,notopwall,noleftwall,
+Cell(17,21): black,nobaggle,notopwall,noleftwall,
+Cell(17,22): black,nobaggle,notopwall,noleftwall,
+Cell(17,23): black,nobaggle,notopwall,noleftwall,
+Cell(17,24): black,nobaggle,notopwall,noleftwall,
+Cell(17,25): black,nobaggle,notopwall,noleftwall,
+Cell(17,27): black,nobaggle,notopwall,noleftwall,
+Cell(17,29): black,nobaggle,notopwall,noleftwall,
+Cell(17,31): black,nobaggle,notopwall,noleftwall,
+Cell(17,33): black,nobaggle,notopwall,noleftwall,
+Cell(17,35): black,nobaggle,notopwall,noleftwall,
+Cell(17,37): black,nobaggle,notopwall,noleftwall,
+Cell(17,39): black,nobaggle,notopwall,noleftwall,
+Cell(17,41): black,nobaggle,notopwall,noleftwall,
+Cell(17,42): black,nobaggle,notopwall,noleftwall,
+Cell(17,43): black,nobaggle,notopwall,noleftwall,
+Cell(17,44): black,nobaggle,notopwall,noleftwall,
+Cell(17,45): black,nobaggle,notopwall,noleftwall,
+Cell(17,46): black,nobaggle,notopwall,noleftwall,
+Cell(17,47): black,nobaggle,notopwall,noleftwall,
+Cell(17,48): black,nobaggle,notopwall,noleftwall,
+Cell(17,49): black,nobaggle,notopwall,noleftwall,
+Cell(17,50): black,nobaggle,notopwall,noleftwall,
+Cell(17,51): black,nobaggle,notopwall,noleftwall,
+Cell(17,53): black,nobaggle,notopwall,noleftwall,
+Cell(17,54): black,nobaggle,notopwall,noleftwall,
+Cell(17,56): black,nobaggle,notopwall,noleftwall,
+Cell(17,58): black,nobaggle,notopwall,noleftwall,
+Cell(17,59): black,nobaggle,notopwall,noleftwall,
+Cell(17,61): black,nobaggle,notopwall,noleftwall,
+Cell(17,62): black,nobaggle,notopwall,noleftwall,
+Cell(17,63): black,nobaggle,notopwall,noleftwall,
+Cell(18,4): black,nobaggle,notopwall,noleftwall,
+Cell(18,7): black,nobaggle,notopwall,noleftwall,
+Cell(18,8): black,nobaggle,notopwall,noleftwall,
+Cell(18,10): black,nobaggle,notopwall,noleftwall,
+Cell(18,11): black,nobaggle,notopwall,noleftwall,
+Cell(18,13): black,nobaggle,notopwall,noleftwall,
+Cell(18,14): black,nobaggle,notopwall,noleftwall,
+Cell(18,15): black,nobaggle,notopwall,noleftwall,
+Cell(18,17): black,nobaggle,notopwall,noleftwall,
+Cell(18,18): black,nobaggle,notopwall,noleftwall,
+Cell(18,19): black,nobaggle,notopwall,noleftwall,
+Cell(18,20): black,nobaggle,notopwall,noleftwall,
+Cell(18,23): black,nobaggle,notopwall,noleftwall,
+Cell(18,25): black,nobaggle,notopwall,noleftwall,
+Cell(18,26): black,nobaggle,notopwall,noleftwall,
+Cell(18,27): black,nobaggle,notopwall,noleftwall,
+Cell(18,28): black,nobaggle,notopwall,noleftwall,
+Cell(18,29): black,nobaggle,notopwall,noleftwall,
+Cell(18,30): black,nobaggle,notopwall,noleftwall,
+Cell(18,31): black,nobaggle,notopwall,noleftwall,
+Cell(18,32): black,nobaggle,notopwall,noleftwall,
+Cell(18,33): black,nobaggle,notopwall,noleftwall,
+Cell(18,34): black,nobaggle,notopwall,noleftwall,
+Cell(18,35): black,nobaggle,notopwall,noleftwall,
+Cell(18,36): black,nobaggle,notopwall,noleftwall,
+Cell(18,37): black,nobaggle,notopwall,noleftwall,
+Cell(18,38): black,nobaggle,notopwall,noleftwall,
+Cell(18,39): black,nobaggle,notopwall,noleftwall,
+Cell(18,40): black,nobaggle,notopwall,noleftwall,
+Cell(18,41): black,nobaggle,notopwall,noleftwall,
+Cell(18,42): black,nobaggle,notopwall,noleftwall,
+Cell(18,44): black,nobaggle,notopwall,noleftwall,
+Cell(18,46): black,nobaggle,notopwall,noleftwall,
+Cell(18,49): black,nobaggle,notopwall,noleftwall,
+Cell(18,51): black,nobaggle,notopwall,noleftwall,
+Cell(18,52): black,nobaggle,notopwall,noleftwall,
+Cell(18,53): black,nobaggle,notopwall,noleftwall,
+Cell(18,54): black,nobaggle,notopwall,noleftwall,
+Cell(18,55): black,nobaggle,notopwall,noleftwall,
+Cell(18,56): black,nobaggle,notopwall,noleftwall,
+Cell(18,57): black,nobaggle,notopwall,noleftwall,
+Cell(18,59): black,nobaggle,notopwall,noleftwall,
+Cell(18,60): black,nobaggle,notopwall,noleftwall,
+Cell(18,61): black,nobaggle,notopwall,noleftwall,
+Cell(18,63): black,nobaggle,notopwall,noleftwall,
+Cell(19,4): black,nobaggle,notopwall,noleftwall,
+Cell(19,5): black,nobaggle,notopwall,noleftwall,
+Cell(19,6): black,nobaggle,notopwall,noleftwall,
+Cell(19,7): black,nobaggle,notopwall,noleftwall,
+Cell(19,8): black,nobaggle,notopwall,noleftwall,
+Cell(19,10): black,nobaggle,notopwall,noleftwall,
+Cell(19,11): black,nobaggle,notopwall,noleftwall,
+Cell(19,12): black,nobaggle,notopwall,noleftwall,
+Cell(19,13): black,nobaggle,notopwall,noleftwall,
+Cell(19,14): black,nobaggle,notopwall,noleftwall,
+Cell(19,15): black,nobaggle,notopwall,noleftwall,
+Cell(19,16): black,nobaggle,notopwall,noleftwall,
+Cell(19,17): black,nobaggle,notopwall,noleftwall,
+Cell(19,18): black,nobaggle,notopwall,noleftwall,
+Cell(19,19): black,nobaggle,notopwall,noleftwall,
+Cell(19,20): black,nobaggle,notopwall,noleftwall,
+Cell(19,21): black,nobaggle,notopwall,noleftwall,
+Cell(19,22): black,nobaggle,notopwall,noleftwall,
+Cell(19,23): black,nobaggle,notopwall,noleftwall,
+Cell(19,24): black,nobaggle,notopwall,noleftwall,
+Cell(19,25): black,nobaggle,notopwall,noleftwall,
+Cell(19,26): black,nobaggle,notopwall,noleftwall,
+Cell(19,27): black,nobaggle,notopwall,noleftwall,
+Cell(19,29): black,nobaggle,notopwall,noleftwall,
+Cell(19,30): black,nobaggle,notopwall,noleftwall,
+Cell(19,31): black,nobaggle,notopwall,noleftwall,
+Cell(19,32): black,nobaggle,notopwall,noleftwall,
+Cell(19,33): black,nobaggle,notopwall,noleftwall,
+Cell(19,34): black,nobaggle,notopwall,noleftwall,
+Cell(19,35): black,nobaggle,notopwall,noleftwall,
+Cell(19,36): black,nobaggle,notopwall,noleftwall,
+Cell(19,37): black,nobaggle,notopwall,noleftwall,
+Cell(19,38): black,nobaggle,notopwall,noleftwall,
+Cell(19,39): black,nobaggle,notopwall,noleftwall,
+Cell(19,41): black,nobaggle,notopwall,noleftwall,
+Cell(19,43): black,nobaggle,notopwall,noleftwall,
+Cell(19,45): black,nobaggle,notopwall,noleftwall,
+Cell(19,47): black,nobaggle,notopwall,noleftwall,
+Cell(19,48): black,nobaggle,notopwall,noleftwall,
+Cell(19,49): black,nobaggle,notopwall,noleftwall,
+Cell(19,50): black,nobaggle,notopwall,noleftwall,
+Cell(19,51): black,nobaggle,notopwall,noleftwall,
+Cell(19,52): black,nobaggle,notopwall,noleftwall,
+Cell(19,53): black,nobaggle,notopwall,noleftwall,
+Cell(19,55): black,nobaggle,notopwall,noleftwall,
+Cell(19,57): black,nobaggle,notopwall,noleftwall,
+Cell(19,58): black,nobaggle,notopwall,noleftwall,
+Cell(19,59): black,nobaggle,notopwall,noleftwall,
+Cell(19,61): black,nobaggle,notopwall,noleftwall,
+Cell(19,63): black,nobaggle,notopwall,noleftwall,
+Cell(20,4): black,nobaggle,notopwall,noleftwall,
+Cell(20,6): black,nobaggle,notopwall,noleftwall,
+Cell(20,8): black,nobaggle,notopwall,noleftwall,
+Cell(20,9): black,nobaggle,notopwall,noleftwall,
+Cell(20,11): black,nobaggle,notopwall,noleftwall,
+Cell(20,13): black,nobaggle,notopwall,noleftwall,
+Cell(20,15): black,nobaggle,notopwall,noleftwall,
+Cell(20,16): black,nobaggle,notopwall,noleftwall,
+Cell(20,19): black,nobaggle,notopwall,noleftwall,
+Cell(20,21): black,nobaggle,notopwall,noleftwall,
+Cell(20,23): black,nobaggle,notopwall,noleftwall,
+Cell(20,25): black,nobaggle,notopwall,noleftwall,
+Cell(20,27): black,nobaggle,notopwall,noleftwall,
+Cell(20,28): black,nobaggle,notopwall,noleftwall,
+Cell(20,29): black,nobaggle,notopwall,noleftwall,
+Cell(20,30): black,nobaggle,notopwall,noleftwall,
+Cell(20,33): black,nobaggle,notopwall,noleftwall,
+Cell(20,35): black,nobaggle,notopwall,noleftwall,
+Cell(20,37): black,nobaggle,notopwall,noleftwall,
+Cell(20,39): black,nobaggle,notopwall,noleftwall,
+Cell(20,40): black,nobaggle,notopwall,noleftwall,
+Cell(20,41): black,nobaggle,notopwall,noleftwall,
+Cell(20,42): black,nobaggle,notopwall,noleftwall,
+Cell(20,43): black,nobaggle,notopwall,noleftwall,
+Cell(20,44): black,nobaggle,notopwall,noleftwall,
+Cell(20,45): black,nobaggle,notopwall,noleftwall,
+Cell(20,46): black,nobaggle,notopwall,noleftwall,
+Cell(20,47): black,nobaggle,notopwall,noleftwall,
+Cell(20,48): black,nobaggle,notopwall,noleftwall,
+Cell(20,51): black,nobaggle,notopwall,noleftwall,
+Cell(20,53): black,nobaggle,notopwall,noleftwall,
+Cell(20,54): black,nobaggle,notopwall,noleftwall,
+Cell(20,55): black,nobaggle,notopwall,noleftwall,
+Cell(20,56): black,nobaggle,notopwall,noleftwall,
+Cell(20,57): black,nobaggle,notopwall,noleftwall,
+Cell(20,59): black,nobaggle,notopwall,noleftwall,
+Cell(20,60): black,nobaggle,notopwall,noleftwall,
+Cell(20,61): black,nobaggle,notopwall,noleftwall,
+Cell(20,62): black,nobaggle,notopwall,noleftwall,
+Cell(20,63): black,nobaggle,notopwall,noleftwall,
+Cell(21,4): black,nobaggle,notopwall,noleftwall,
+Cell(21,5): black,nobaggle,notopwall,noleftwall,
+Cell(21,6): black,nobaggle,notopwall,noleftwall,
+Cell(21,7): black,nobaggle,notopwall,noleftwall,
+Cell(21,8): black,nobaggle,notopwall,noleftwall,
+Cell(21,10): black,nobaggle,notopwall,noleftwall,
+Cell(21,11): black,nobaggle,notopwall,noleftwall,
+Cell(21,13): black,nobaggle,notopwall,noleftwall,
+Cell(21,14): black,nobaggle,notopwall,noleftwall,
+Cell(21,15): black,nobaggle,notopwall,noleftwall,
+Cell(21,16): black,nobaggle,notopwall,noleftwall,
+Cell(21,17): black,nobaggle,notopwall,noleftwall,
+Cell(21,18): black,nobaggle,notopwall,noleftwall,
+Cell(21,19): black,nobaggle,notopwall,noleftwall,
+Cell(21,20): black,nobaggle,notopwall,noleftwall,
+Cell(21,21): black,nobaggle,notopwall,noleftwall,
+Cell(21,22): black,nobaggle,notopwall,noleftwall,
+Cell(21,24): black,nobaggle,notopwall,noleftwall,
+Cell(21,26): black,nobaggle,notopwall,noleftwall,
+Cell(21,28): black,nobaggle,notopwall,noleftwall,
+Cell(21,29): black,nobaggle,notopwall,noleftwall,
+Cell(21,30): black,nobaggle,notopwall,noleftwall,
+Cell(21,31): black,nobaggle,notopwall,noleftwall,
+Cell(21,32): black,nobaggle,notopwall,noleftwall,
+Cell(21,33): black,nobaggle,notopwall,noleftwall,
+Cell(21,35): black,nobaggle,notopwall,noleftwall,
+Cell(21,36): black,nobaggle,notopwall,noleftwall,
+Cell(21,37): black,nobaggle,notopwall,noleftwall,
+Cell(21,39): black,nobaggle,notopwall,noleftwall,
+Cell(21,40): black,nobaggle,notopwall,noleftwall,
+Cell(21,41): black,nobaggle,notopwall,noleftwall,
+Cell(21,42): black,nobaggle,notopwall,noleftwall,
+Cell(21,43): black,nobaggle,notopwall,noleftwall,
+Cell(21,44): black,nobaggle,notopwall,noleftwall,
+Cell(21,45): black,nobaggle,notopwall,noleftwall,
+Cell(21,47): black,nobaggle,notopwall,noleftwall,
+Cell(21,49): black,nobaggle,notopwall,noleftwall,
+Cell(21,50): black,nobaggle,notopwall,noleftwall,
+Cell(21,51): black,nobaggle,notopwall,noleftwall,
+Cell(21,53): black,nobaggle,notopwall,noleftwall,
+Cell(21,54): black,nobaggle,notopwall,noleftwall,
+Cell(21,55): black,nobaggle,notopwall,noleftwall,
+Cell(21,57): black,nobaggle,notopwall,noleftwall,
+Cell(21,59): black,nobaggle,notopwall,noleftwall,
+Cell(21,60): black,nobaggle,notopwall,noleftwall,
+Cell(21,63): black,nobaggle,notopwall,noleftwall,
+Cell(22,4): black,nobaggle,notopwall,noleftwall,
+Cell(22,6): black,nobaggle,notopwall,noleftwall,
+Cell(22,8): black,nobaggle,notopwall,noleftwall,
+Cell(22,9): black,nobaggle,notopwall,noleftwall,
+Cell(22,11): black,nobaggle,notopwall,noleftwall,
+Cell(22,12): black,nobaggle,notopwall,noleftwall,
+Cell(22,13): black,nobaggle,notopwall,noleftwall,
+Cell(22,14): black,nobaggle,notopwall,noleftwall,
+Cell(22,16): black,nobaggle,notopwall,noleftwall,
+Cell(22,18): black,nobaggle,notopwall,noleftwall,
+Cell(22,21): black,nobaggle,notopwall,noleftwall,
+Cell(22,22): black,nobaggle,notopwall,noleftwall,
+Cell(22,23): black,nobaggle,notopwall,noleftwall,
+Cell(22,24): black,nobaggle,notopwall,noleftwall,
+Cell(22,25): black,nobaggle,notopwall,noleftwall,
+Cell(22,26): black,nobaggle,notopwall,noleftwall,
+Cell(22,27): black,nobaggle,notopwall,noleftwall,
+Cell(22,28): black,nobaggle,notopwall,noleftwall,
+Cell(22,31): black,nobaggle,notopwall,noleftwall,
+Cell(22,33): black,nobaggle,notopwall,noleftwall,
+Cell(22,34): black,nobaggle,notopwall,noleftwall,
+Cell(22,35): black,nobaggle,notopwall,noleftwall,
+Cell(22,37): black,nobaggle,notopwall,noleftwall,
+Cell(22,38): black,nobaggle,notopwall,noleftwall,
+Cell(22,39): black,nobaggle,notopwall,noleftwall,
+Cell(22,41): black,nobaggle,notopwall,noleftwall,
+Cell(22,43): black,nobaggle,notopwall,noleftwall,
+Cell(22,45): black,nobaggle,notopwall,noleftwall,
+Cell(22,46): black,nobaggle,notopwall,noleftwall,
+Cell(22,47): black,nobaggle,notopwall,noleftwall,
+Cell(22,48): black,nobaggle,notopwall,noleftwall,
+Cell(22,49): black,nobaggle,notopwall,noleftwall,
+Cell(22,51): black,nobaggle,notopwall,noleftwall,
+Cell(22,52): black,nobaggle,notopwall,noleftwall,
+Cell(22,53): black,nobaggle,notopwall,noleftwall,
+Cell(22,54): black,nobaggle,notopwall,noleftwall,
+Cell(22,56): black,nobaggle,notopwall,noleftwall,
+Cell(22,57): black,nobaggle,notopwall,noleftwall,
+Cell(22,58): black,nobaggle,notopwall,noleftwall,
+Cell(22,59): black,nobaggle,notopwall,noleftwall,
+Cell(22,60): black,nobaggle,notopwall,noleftwall,
+Cell(22,61): black,nobaggle,notopwall,noleftwall,
+Cell(22,62): black,nobaggle,notopwall,noleftwall,
+Cell(22,63): black,nobaggle,notopwall,noleftwall,
+Cell(23,2): black,nobaggle,notopwall,noleftwall,
+Cell(23,3): black,nobaggle,notopwall,noleftwall,
+Cell(23,4): black,nobaggle,notopwall,noleftwall,
+Cell(23,5): black,nobaggle,notopwall,noleftwall,
+Cell(23,6): black,nobaggle,notopwall,noleftwall,
+Cell(23,8): black,nobaggle,notopwall,noleftwall,
+Cell(23,9): black,nobaggle,notopwall,noleftwall,
+Cell(23,10): black,nobaggle,notopwall,noleftwall,
+Cell(23,11): black,nobaggle,notopwall,noleftwall,
+Cell(23,12): black,nobaggle,notopwall,noleftwall,
+Cell(23,13): black,nobaggle,notopwall,noleftwall,
+Cell(23,14): black,nobaggle,notopwall,noleftwall,
+Cell(23,15): black,nobaggle,notopwall,noleftwall,
+Cell(23,16): black,nobaggle,notopwall,noleftwall,
+Cell(23,18): black,nobaggle,notopwall,noleftwall,
+Cell(23,19): black,nobaggle,notopwall,noleftwall,
+Cell(23,20): black,nobaggle,notopwall,noleftwall,
+Cell(23,21): black,nobaggle,notopwall,noleftwall,
+Cell(23,23): black,nobaggle,notopwall,noleftwall,
+Cell(23,24): black,nobaggle,notopwall,noleftwall,
+Cell(23,25): black,nobaggle,notopwall,noleftwall,
+Cell(23,26): black,nobaggle,notopwall,noleftwall,
+Cell(23,27): black,nobaggle,notopwall,noleftwall,
+Cell(23,28): black,nobaggle,notopwall,noleftwall,
+Cell(23,29): black,nobaggle,notopwall,noleftwall,
+Cell(23,30): black,nobaggle,notopwall,noleftwall,
+Cell(23,31): black,nobaggle,notopwall,noleftwall,
+Cell(23,32): black,nobaggle,notopwall,noleftwall,
+Cell(23,33): black,nobaggle,notopwall,noleftwall,
+Cell(23,34): black,nobaggle,notopwall,noleftwall,
+Cell(23,35): black,nobaggle,notopwall,noleftwall,
+Cell(23,36): black,nobaggle,notopwall,noleftwall,
+Cell(23,37): black,nobaggle,notopwall,noleftwall,
+Cell(23,38): black,nobaggle,notopwall,noleftwall,
+Cell(23,39): black,nobaggle,notopwall,noleftwall,
+Cell(23,40): black,nobaggle,notopwall,noleftwall,
+Cell(23,41): black,nobaggle,notopwall,noleftwall,
+Cell(23,42): black,nobaggle,notopwall,noleftwall,
+Cell(23,43): black,nobaggle,notopwall,noleftwall,
+Cell(23,45): black,nobaggle,notopwall,noleftwall,
+Cell(23,46): black,nobaggle,notopwall,noleftwall,
+Cell(23,47): black,nobaggle,notopwall,noleftwall,
+Cell(23,49): black,nobaggle,notopwall,noleftwall,
+Cell(23,51): black,nobaggle,notopwall,noleftwall,
+Cell(23,53): black,nobaggle,notopwall,noleftwall,
+Cell(23,54): black,nobaggle,notopwall,noleftwall,
+Cell(23,55): black,nobaggle,notopwall,noleftwall,
+Cell(23,56): black,nobaggle,notopwall,noleftwall,
+Cell(23,58): black,nobaggle,notopwall,noleftwall,
+Cell(23,59): black,nobaggle,notopwall,noleftwall,
+Cell(23,61): black,nobaggle,notopwall,noleftwall,
+Cell(23,63): black,nobaggle,notopwall,noleftwall,
+Cell(23,64): black,nobaggle,notopwall,noleftwall,
+Cell(23,65): black,nobaggle,notopwall,noleftwall,
+Cell(23,66): black,nobaggle,notopwall,noleftwall,
+Cell(23,67): black,nobaggle,notopwall,noleftwall,
+Cell(24,2): black,nobaggle,notopwall,noleftwall,
+Cell(24,5): black,nobaggle,notopwall,noleftwall,
+Cell(24,6): black,nobaggle,notopwall,noleftwall,
+Cell(24,7): black,nobaggle,notopwall,noleftwall,
+Cell(24,9): black,nobaggle,notopwall,noleftwall,
+Cell(24,11): black,nobaggle,notopwall,noleftwall,
+Cell(24,12): black,nobaggle,notopwall,noleftwall,
+Cell(24,14): black,nobaggle,notopwall,noleftwall,
+Cell(24,16): black,nobaggle,notopwall,noleftwall,
+Cell(24,17): black,nobaggle,notopwall,noleftwall,
+Cell(24,19): black,nobaggle,notopwall,noleftwall,
+Cell(24,21): black,nobaggle,notopwall,noleftwall,
+Cell(24,22): black,nobaggle,notopwall,noleftwall,
+Cell(24,23): black,nobaggle,notopwall,noleftwall,
+Cell(24,24): black,nobaggle,notopwall,noleftwall,
+Cell(24,27): black,nobaggle,notopwall,noleftwall,
+Cell(24,29): black,nobaggle,notopwall,noleftwall,
+Cell(24,30): black,nobaggle,notopwall,noleftwall,
+Cell(24,32): black,nobaggle,notopwall,noleftwall,
+Cell(24,34): black,nobaggle,notopwall,noleftwall,
+Cell(24,36): black,nobaggle,notopwall,noleftwall,
+Cell(24,38): black,nobaggle,notopwall,noleftwall,
+Cell(24,41): black,nobaggle,notopwall,noleftwall,
+Cell(24,43): black,nobaggle,notopwall,noleftwall,
+Cell(24,44): black,nobaggle,notopwall,noleftwall,
+Cell(24,45): black,nobaggle,notopwall,noleftwall,
+Cell(24,46): black,nobaggle,notopwall,noleftwall,
+Cell(24,48): black,nobaggle,notopwall,noleftwall,
+Cell(24,49): black,nobaggle,notopwall,noleftwall,
+Cell(24,50): black,nobaggle,notopwall,noleftwall,
+Cell(24,51): black,nobaggle,notopwall,noleftwall,
+Cell(24,52): black,nobaggle,notopwall,noleftwall,
+Cell(24,53): black,nobaggle,notopwall,noleftwall,
+Cell(24,55): black,nobaggle,notopwall,noleftwall,
+Cell(24,56): black,nobaggle,notopwall,noleftwall,
+Cell(24,57): black,nobaggle,notopwall,noleftwall,
+Cell(24,58): black,nobaggle,notopwall,noleftwall,
+Cell(24,60): black,nobaggle,notopwall,noleftwall,
+Cell(24,61): black,nobaggle,notopwall,noleftwall,
+Cell(24,62): black,nobaggle,notopwall,noleftwall,
+Cell(24,63): black,nobaggle,notopwall,noleftwall,
+Cell(24,65): black,nobaggle,notopwall,noleftwall,
+Cell(24,67): black,nobaggle,notopwall,noleftwall,
+Cell(25,2): black,nobaggle,notopwall,noleftwall,
+Cell(25,3): black,nobaggle,notopwall,noleftwall,
+Cell(25,4): black,nobaggle,notopwall,noleftwall,
+Cell(25,5): black,nobaggle,notopwall,noleftwall,
+Cell(25,6): black,nobaggle,notopwall,noleftwall,
+Cell(25,8): black,nobaggle,notopwall,noleftwall,
+Cell(25,9): black,nobaggle,notopwall,noleftwall,
+Cell(25,10): black,nobaggle,notopwall,noleftwall,
+Cell(25,11): black,nobaggle,notopwall,noleftwall,
+Cell(25,12): black,nobaggle,notopwall,noleftwall,
+Cell(25,13): black,nobaggle,notopwall,noleftwall,
+Cell(25,14): black,nobaggle,notopwall,noleftwall,
+Cell(25,16): black,nobaggle,notopwall,noleftwall,
+Cell(25,17): black,nobaggle,notopwall,noleftwall,
+Cell(25,18): black,nobaggle,notopwall,noleftwall,
+Cell(25,19): black,nobaggle,notopwall,noleftwall,
+Cell(25,20): black,nobaggle,notopwall,noleftwall,
+Cell(25,22): black,nobaggle,notopwall,noleftwall,
+Cell(25,23): black,nobaggle,notopwall,noleftwall,
+Cell(25,24): black,nobaggle,notopwall,noleftwall,
+Cell(25,25): black,nobaggle,notopwall,noleftwall,
+Cell(25,26): black,nobaggle,notopwall,noleftwall,
+Cell(25,27): black,nobaggle,notopwall,noleftwall,
+Cell(25,28): black,nobaggle,notopwall,noleftwall,
+Cell(25,29): black,nobaggle,notopwall,noleftwall,
+Cell(25,31): black,nobaggle,notopwall,noleftwall,
+Cell(25,33): black,nobaggle,notopwall,noleftwall,
+Cell(25,35): black,nobaggle,notopwall,noleftwall,
+Cell(25,37): black,nobaggle,notopwall,noleftwall,
+Cell(25,39): black,nobaggle,notopwall,noleftwall,
+Cell(25,40): black,nobaggle,notopwall,noleftwall,
+Cell(25,41): black,nobaggle,notopwall,noleftwall,
+Cell(25,42): black,nobaggle,notopwall,noleftwall,
+Cell(25,43): black,nobaggle,notopwall,noleftwall,
+Cell(25,44): black,nobaggle,notopwall,noleftwall,
+Cell(25,45): black,nobaggle,notopwall,noleftwall,
+Cell(25,46): black,nobaggle,notopwall,noleftwall,
+Cell(25,47): black,nobaggle,notopwall,noleftwall,
+Cell(25,48): black,nobaggle,notopwall,noleftwall,
+Cell(25,50): black,nobaggle,notopwall,noleftwall,
+Cell(25,51): black,nobaggle,notopwall,noleftwall,
+Cell(25,53): black,nobaggle,notopwall,noleftwall,
+Cell(25,55): black,nobaggle,notopwall,noleftwall,
+Cell(25,56): black,nobaggle,notopwall,noleftwall,
+Cell(25,57): black,nobaggle,notopwall,noleftwall,
+Cell(25,58): black,nobaggle,notopwall,noleftwall,
+Cell(25,59): black,nobaggle,notopwall,noleftwall,
+Cell(25,60): black,nobaggle,notopwall,noleftwall,
+Cell(25,62): black,nobaggle,notopwall,noleftwall,
+Cell(25,64): black,nobaggle,notopwall,noleftwall,
+Cell(25,65): black,nobaggle,notopwall,noleftwall,
+Cell(25,67): black,nobaggle,notopwall,noleftwall,
+Cell(26,2): black,nobaggle,notopwall,noleftwall,
+Cell(26,4): black,nobaggle,notopwall,noleftwall,
+Cell(26,6): black,nobaggle,notopwall,noleftwall,
+Cell(26,7): black,nobaggle,notopwall,noleftwall,
+Cell(26,9): black,nobaggle,notopwall,noleftwall,
+Cell(26,10): black,nobaggle,notopwall,noleftwall,
+Cell(26,13): black,nobaggle,notopwall,noleftwall,
+Cell(26,14): black,nobaggle,notopwall,noleftwall,
+Cell(26,15): black,nobaggle,notopwall,noleftwall,
+Cell(26,17): black,nobaggle,notopwall,noleftwall,
+Cell(26,19): black,nobaggle,notopwall,noleftwall,
+Cell(26,20): black,nobaggle,notopwall,noleftwall,
+Cell(26,21): black,nobaggle,notopwall,noleftwall,
+Cell(26,22): black,nobaggle,notopwall,noleftwall,
+Cell(26,24): black,nobaggle,notopwall,noleftwall,
+Cell(26,26): black,nobaggle,notopwall,noleftwall,
+Cell(26,29): black,nobaggle,notopwall,noleftwall,
+Cell(26,30): black,nobaggle,notopwall,noleftwall,
+Cell(26,31): black,nobaggle,notopwall,noleftwall,
+Cell(26,32): black,nobaggle,notopwall,noleftwall,
+Cell(26,33): black,nobaggle,notopwall,noleftwall,
+Cell(26,34): black,nobaggle,notopwall,noleftwall,
+Cell(26,35): black,nobaggle,notopwall,noleftwall,
+Cell(26,36): black,nobaggle,notopwall,noleftwall,
+Cell(26,37): black,nobaggle,notopwall,noleftwall,
+Cell(26,38): black,nobaggle,notopwall,noleftwall,
+Cell(26,39): black,nobaggle,notopwall,noleftwall,
+Cell(26,40): black,nobaggle,notopwall,noleftwall,
+Cell(26,42): black,nobaggle,notopwall,noleftwall,
+Cell(26,45): black,nobaggle,notopwall,noleftwall,
+Cell(26,47): black,nobaggle,notopwall,noleftwall,
+Cell(26,48): black,nobaggle,notopwall,noleftwall,
+Cell(26,49): black,nobaggle,notopwall,noleftwall,
+Cell(26,50): black,nobaggle,notopwall,noleftwall,
+Cell(26,52): black,nobaggle,notopwall,noleftwall,
+Cell(26,53): black,nobaggle,notopwall,noleftwall,
+Cell(26,54): black,nobaggle,notopwall,noleftwall,
+Cell(26,55): black,nobaggle,notopwall,noleftwall,
+Cell(26,57): black,nobaggle,notopwall,noleftwall,
+Cell(26,59): black,nobaggle,notopwall,noleftwall,
+Cell(26,60): black,nobaggle,notopwall,noleftwall,
+Cell(26,61): black,nobaggle,notopwall,noleftwall,
+Cell(26,62): black,nobaggle,notopwall,noleftwall,
+Cell(26,63): black,nobaggle,notopwall,noleftwall,
+Cell(26,65): black,nobaggle,notopwall,noleftwall,
+Cell(26,66): black,nobaggle,notopwall,noleftwall,
+Cell(26,67): black,nobaggle,notopwall,noleftwall,
+Cell(27,2): black,nobaggle,notopwall,noleftwall,
+Cell(27,3): black,nobaggle,notopwall,noleftwall,
+Cell(27,4): black,nobaggle,notopwall,noleftwall,
+Cell(27,5): black,nobaggle,notopwall,noleftwall,
+Cell(27,6): black,nobaggle,notopwall,noleftwall,
+Cell(27,8): black,nobaggle,notopwall,noleftwall,
+Cell(27,9): black,nobaggle,notopwall,noleftwall,
+Cell(27,10): black,nobaggle,notopwall,noleftwall,
+Cell(27,11): black,nobaggle,notopwall,noleftwall,
+Cell(27,12): black,nobaggle,notopwall,noleftwall,
+Cell(27,13): black,nobaggle,notopwall,noleftwall,
+Cell(27,14): black,nobaggle,notopwall,noleftwall,
+Cell(27,16): black,nobaggle,notopwall,noleftwall,
+Cell(27,17): black,nobaggle,notopwall,noleftwall,
+Cell(27,18): black,nobaggle,notopwall,noleftwall,
+Cell(27,19): black,nobaggle,notopwall,noleftwall,
+Cell(27,20): black,nobaggle,notopwall,noleftwall,
+Cell(27,21): black,nobaggle,notopwall,noleftwall,
+Cell(27,22): black,nobaggle,notopwall,noleftwall,
+Cell(27,23): black,nobaggle,notopwall,noleftwall,
+Cell(27,24): black,nobaggle,notopwall,noleftwall,
+Cell(27,26): black,nobaggle,notopwall,noleftwall,
+Cell(27,27): black,nobaggle,notopwall,noleftwall,
+Cell(27,28): black,nobaggle,notopwall,noleftwall,
+Cell(27,29): black,nobaggle,notopwall,noleftwall,
+Cell(27,31): black,nobaggle,notopwall,noleftwall,
+Cell(27,32): black,nobaggle,notopwall,noleftwall,
+Cell(27,33): black,nobaggle,notopwall,noleftwall,
+Cell(27,34): black,nobaggle,notopwall,noleftwall,
+Cell(27,35): black,nobaggle,notopwall,noleftwall,
+Cell(27,36): black,nobaggle,notopwall,noleftwall,
+Cell(27,37): black,nobaggle,notopwall,noleftwall,
+Cell(27,39): black,nobaggle,notopwall,noleftwall,
+Cell(27,41): black,nobaggle,notopwall,noleftwall,
+Cell(27,43): black,nobaggle,notopwall,noleftwall,
+Cell(27,44): black,nobaggle,notopwall,noleftwall,
+Cell(27,45): black,nobaggle,notopwall,noleftwall,
+Cell(27,46): black,nobaggle,notopwall,noleftwall,
+Cell(27,47): black,nobaggle,notopwall,noleftwall,
+Cell(27,48): black,nobaggle,notopwall,noleftwall,
+Cell(27,49): black,nobaggle,notopwall,noleftwall,
+Cell(27,50): black,nobaggle,notopwall,noleftwall,
+Cell(27,52): black,nobaggle,notopwall,noleftwall,
+Cell(27,54): black,nobaggle,notopwall,noleftwall,
+Cell(27,56): black,nobaggle,notopwall,noleftwall,
+Cell(27,57): black,nobaggle,notopwall,noleftwall,
+Cell(27,59): black,nobaggle,notopwall,noleftwall,
+Cell(27,60): black,nobaggle,notopwall,noleftwall,
+Cell(27,61): black,nobaggle,notopwall,noleftwall,
+Cell(27,63): black,nobaggle,notopwall,noleftwall,
+Cell(27,65): black,nobaggle,notopwall,noleftwall,
+Cell(27,67): black,nobaggle,notopwall,noleftwall,
+Cell(28,2): black,nobaggle,notopwall,noleftwall,
+Cell(28,5): black,nobaggle,notopwall,noleftwall,
+Cell(28,6): black,nobaggle,notopwall,noleftwall,
+Cell(28,7): black,nobaggle,notopwall,noleftwall,
+Cell(28,9): black,nobaggle,notopwall,noleftwall,
+Cell(28,10): black,nobaggle,notopwall,noleftwall,
+Cell(28,12): black,nobaggle,notopwall,noleftwall,
+Cell(28,14): black,nobaggle,notopwall,noleftwall,
+Cell(28,15): black,nobaggle,notopwall,noleftwall,
+Cell(28,17): black,nobaggle,notopwall,noleftwall,
+Cell(28,18): black,nobaggle,notopwall,noleftwall,
+Cell(28,21): black,nobaggle,notopwall,noleftwall,
+Cell(28,22): black,nobaggle,notopwall,noleftwall,
+Cell(28,24): black,nobaggle,notopwall,noleftwall,
+Cell(28,25): black,nobaggle,notopwall,noleftwall,
+Cell(28,27): black,nobaggle,notopwall,noleftwall,
+Cell(28,29): black,nobaggle,notopwall,noleftwall,
+Cell(28,30): black,nobaggle,notopwall,noleftwall,
+Cell(28,31): black,nobaggle,notopwall,noleftwall,
+Cell(28,32): black,nobaggle,notopwall,noleftwall,
+Cell(28,35): black,nobaggle,notopwall,noleftwall,
+Cell(28,37): black,nobaggle,notopwall,noleftwall,
+Cell(28,38): black,nobaggle,notopwall,noleftwall,
+Cell(28,39): black,nobaggle,notopwall,noleftwall,
+Cell(28,40): black,nobaggle,notopwall,noleftwall,
+Cell(28,41): black,nobaggle,notopwall,noleftwall,
+Cell(28,42): black,nobaggle,notopwall,noleftwall,
+Cell(28,43): black,nobaggle,notopwall,noleftwall,
+Cell(28,44): black,nobaggle,notopwall,noleftwall,
+Cell(28,47): black,nobaggle,notopwall,noleftwall,
+Cell(28,49): black,nobaggle,notopwall,noleftwall,
+Cell(28,50): black,nobaggle,notopwall,noleftwall,
+Cell(28,51): black,nobaggle,notopwall,noleftwall,
+Cell(28,52): black,nobaggle,notopwall,noleftwall,
+Cell(28,53): black,nobaggle,notopwall,noleftwall,
+Cell(28,54): black,nobaggle,notopwall,noleftwall,
+Cell(28,55): black,nobaggle,notopwall,noleftwall,
+Cell(28,57): black,nobaggle,notopwall,noleftwall,
+Cell(28,58): black,nobaggle,notopwall,noleftwall,
+Cell(28,59): black,nobaggle,notopwall,noleftwall,
+Cell(28,60): black,nobaggle,notopwall,noleftwall,
+Cell(28,62): black,nobaggle,notopwall,noleftwall,
+Cell(28,63): black,nobaggle,notopwall,noleftwall,
+Cell(28,64): black,nobaggle,notopwall,noleftwall,
+Cell(28,65): black,nobaggle,notopwall,noleftwall,
+Cell(28,66): black,nobaggle,notopwall,noleftwall,
+Cell(28,67): black,nobaggle,notopwall,noleftwall,
+Cell(29,2): black,nobaggle,notopwall,noleftwall,
+Cell(29,3): black,nobaggle,notopwall,noleftwall,
+Cell(29,4): black,nobaggle,notopwall,noleftwall,
+Cell(29,5): black,nobaggle,notopwall,noleftwall,
+Cell(29,6): black,nobaggle,notopwall,noleftwall,
+Cell(29,8): black,nobaggle,notopwall,noleftwall,
+Cell(29,9): black,nobaggle,notopwall,noleftwall,
+Cell(29,10): black,nobaggle,notopwall,noleftwall,
+Cell(29,11): black,nobaggle,notopwall,noleftwall,
+Cell(29,12): black,nobaggle,notopwall,noleftwall,
+Cell(29,13): black,nobaggle,notopwall,noleftwall,
+Cell(29,14): black,nobaggle,notopwall,noleftwall,
+Cell(29,16): black,nobaggle,notopwall,noleftwall,
+Cell(29,17): black,nobaggle,notopwall,noleftwall,
+Cell(29,18): black,nobaggle,notopwall,noleftwall,
+Cell(29,19): black,nobaggle,notopwall,noleftwall,
+Cell(29,20): black,nobaggle,notopwall,noleftwall,
+Cell(29,21): black,nobaggle,notopwall,noleftwall,
+Cell(29,22): black,nobaggle,notopwall,noleftwall,
+Cell(29,24): black,nobaggle,notopwall,noleftwall,
+Cell(29,25): black,nobaggle,notopwall,noleftwall,
+Cell(29,26): black,nobaggle,notopwall,noleftwall,
+Cell(29,27): black,nobaggle,notopwall,noleftwall,
+Cell(29,28): black,nobaggle,notopwall,noleftwall,
+Cell(29,30): black,nobaggle,notopwall,noleftwall,
+Cell(29,31): black,nobaggle,notopwall,noleftwall,
+Cell(29,32): black,nobaggle,notopwall,noleftwall,
+Cell(29,33): black,nobaggle,notopwall,noleftwall,
+Cell(29,34): black,nobaggle,notopwall,noleftwall,
+Cell(29,35): black,nobaggle,notopwall,noleftwall,
+Cell(29,36): black,nobaggle,notopwall,noleftwall,
+Cell(29,37): black,nobaggle,notopwall,noleftwall,
+Cell(29,38): black,nobaggle,notopwall,noleftwall,
+Cell(29,39): black,nobaggle,notopwall,noleftwall,
+Cell(29,40): black,nobaggle,notopwall,noleftwall,
+Cell(29,43): black,nobaggle,notopwall,noleftwall,
+Cell(29,45): black,nobaggle,notopwall,noleftwall,
+Cell(29,46): black,nobaggle,notopwall,noleftwall,
+Cell(29,47): black,nobaggle,notopwall,noleftwall,
+Cell(29,49): black,nobaggle,notopwall,noleftwall,
+Cell(29,50): black,nobaggle,notopwall,noleftwall,
+Cell(29,51): black,nobaggle,notopwall,noleftwall,
+Cell(29,53): black,nobaggle,notopwall,noleftwall,
+Cell(29,54): black,nobaggle,notopwall,noleftwall,
+Cell(29,55): black,nobaggle,notopwall,noleftwall,
+Cell(29,57): black,nobaggle,notopwall,noleftwall,
+Cell(29,59): black,nobaggle,notopwall,noleftwall,
+Cell(29,60): black,nobaggle,notopwall,noleftwall,
+Cell(29,61): black,nobaggle,notopwall,noleftwall,
+Cell(29,63): black,nobaggle,notopwall,noleftwall,
+Cell(29,65): black,nobaggle,notopwall,noleftwall,
+Cell(29,67): black,nobaggle,notopwall,noleftwall,
+Cell(30,2): black,nobaggle,notopwall,noleftwall,
+Cell(30,4): black,nobaggle,notopwall,noleftwall,
+Cell(30,6): black,nobaggle,notopwall,noleftwall,
+Cell(30,7): black,nobaggle,notopwall,noleftwall,
+Cell(30,9): black,nobaggle,notopwall,noleftwall,
+Cell(30,10): black,nobaggle,notopwall,noleftwall,
+Cell(30,13): black,nobaggle,notopwall,noleftwall,
+Cell(30,14): black,nobaggle,notopwall,noleftwall,
+Cell(30,15): black,nobaggle,notopwall,noleftwall,
+Cell(30,17): black,nobaggle,notopwall,noleftwall,
+Cell(30,18): black,nobaggle,notopwall,noleftwall,
+Cell(30,20): black,nobaggle,notopwall,noleftwall,
+Cell(30,22): black,nobaggle,notopwall,noleftwall,
+Cell(30,23): black,nobaggle,notopwall,noleftwall,
+Cell(30,25): black,nobaggle,notopwall,noleftwall,
+Cell(30,27): black,nobaggle,notopwall,noleftwall,
+Cell(30,28): black,nobaggle,notopwall,noleftwall,
+Cell(30,29): black,nobaggle,notopwall,noleftwall,
+Cell(30,30): black,nobaggle,notopwall,noleftwall,
+Cell(30,32): black,nobaggle,notopwall,noleftwall,
+Cell(30,34): black,nobaggle,notopwall,noleftwall,
+Cell(30,37): black,nobaggle,notopwall,noleftwall,
+Cell(30,39): black,nobaggle,notopwall,noleftwall,
+Cell(30,40): black,nobaggle,notopwall,noleftwall,
+Cell(30,41): black,nobaggle,notopwall,noleftwall,
+Cell(30,42): black,nobaggle,notopwall,noleftwall,
+Cell(30,43): black,nobaggle,notopwall,noleftwall,
+Cell(30,44): black,nobaggle,notopwall,noleftwall,
+Cell(30,45): black,nobaggle,notopwall,noleftwall,
+Cell(30,47): black,nobaggle,notopwall,noleftwall,
+Cell(30,48): black,nobaggle,notopwall,noleftwall,
+Cell(30,49): black,nobaggle,notopwall,noleftwall,
+Cell(30,51): black,nobaggle,notopwall,noleftwall,
+Cell(30,52): black,nobaggle,notopwall,noleftwall,
+Cell(30,53): black,nobaggle,notopwall,noleftwall,
+Cell(30,54): black,nobaggle,notopwall,noleftwall,
+Cell(30,56): black,nobaggle,notopwall,noleftwall,
+Cell(30,57): black,nobaggle,notopwall,noleftwall,
+Cell(30,58): black,nobaggle,notopwall,noleftwall,
+Cell(30,59): black,nobaggle,notopwall,noleftwall,
+Cell(30,60): black,nobaggle,notopwall,noleftwall,
+Cell(30,62): black,nobaggle,notopwall,noleftwall,
+Cell(30,63): black,nobaggle,notopwall,noleftwall,
+Cell(30,64): black,nobaggle,notopwall,noleftwall,
+Cell(30,65): black,nobaggle,notopwall,noleftwall,
+Cell(30,66): black,nobaggle,notopwall,noleftwall,
+Cell(30,67): black,nobaggle,notopwall,noleftwall,
+Cell(31,2): black,nobaggle,notopwall,noleftwall,
+Cell(31,3): black,nobaggle,notopwall,noleftwall,
+Cell(31,4): black,nobaggle,notopwall,noleftwall,
+Cell(31,5): black,nobaggle,notopwall,noleftwall,
+Cell(31,6): black,nobaggle,notopwall,noleftwall,
+Cell(31,8): black,nobaggle,notopwall,noleftwall,
+Cell(31,9): black,nobaggle,notopwall,noleftwall,
+Cell(31,10): black,nobaggle,notopwall,noleftwall,
+Cell(31,11): black,nobaggle,notopwall,noleftwall,
+Cell(31,12): black,nobaggle,notopwall,noleftwall,
+Cell(31,13): black,nobaggle,notopwall,noleftwall,
+Cell(31,14): black,nobaggle,notopwall,noleftwall,
+Cell(31,16): black,nobaggle,notopwall,noleftwall,
+Cell(31,17): black,nobaggle,notopwall,noleftwall,
+Cell(31,18): black,nobaggle,notopwall,noleftwall,
+Cell(31,19): black,nobaggle,notopwall,noleftwall,
+Cell(31,20): black,nobaggle,notopwall,noleftwall,
+Cell(31,21): black,nobaggle,notopwall,noleftwall,
+Cell(31,22): black,nobaggle,notopwall,noleftwall,
+Cell(31,24): black,nobaggle,notopwall,noleftwall,
+Cell(31,25): black,nobaggle,notopwall,noleftwall,
+Cell(31,26): black,nobaggle,notopwall,noleftwall,
+Cell(31,27): black,nobaggle,notopwall,noleftwall,
+Cell(31,28): black,nobaggle,notopwall,noleftwall,
+Cell(31,29): black,nobaggle,notopwall,noleftwall,
+Cell(31,30): black,nobaggle,notopwall,noleftwall,
+Cell(31,31): black,nobaggle,notopwall,noleftwall,
+Cell(31,32): black,nobaggle,notopwall,noleftwall,
+Cell(31,34): black,nobaggle,notopwall,noleftwall,
+Cell(31,35): black,nobaggle,notopwall,noleftwall,
+Cell(31,36): black,nobaggle,notopwall,noleftwall,
+Cell(31,37): black,nobaggle,notopwall,noleftwall,
+Cell(31,38): black,nobaggle,notopwall,noleftwall,
+Cell(31,39): black,nobaggle,notopwall,noleftwall,
+Cell(31,40): black,nobaggle,notopwall,noleftwall,
+Cell(31,41): black,nobaggle,notopwall,noleftwall,
+Cell(31,43): black,nobaggle,notopwall,noleftwall,
+Cell(31,44): black,nobaggle,notopwall,noleftwall,
+Cell(31,46): black,nobaggle,notopwall,noleftwall,
+Cell(31,48): black,nobaggle,notopwall,noleftwall,
+Cell(31,49): black,nobaggle,notopwall,noleftwall,
+Cell(31,51): black,nobaggle,notopwall,noleftwall,
+Cell(31,52): black,nobaggle,notopwall,noleftwall,
+Cell(31,53): black,nobaggle,notopwall,noleftwall,
+Cell(31,55): black,nobaggle,notopwall,noleftwall,
+Cell(31,56): black,nobaggle,notopwall,noleftwall,
+Cell(31,57): black,nobaggle,notopwall,noleftwall,
+Cell(31,59): black,nobaggle,notopwall,noleftwall,
+Cell(31,60): black,nobaggle,notopwall,noleftwall,
+Cell(31,61): black,nobaggle,notopwall,noleftwall,
+Cell(31,62): black,nobaggle,notopwall,noleftwall,
+Cell(31,63): black,nobaggle,notopwall,noleftwall,
+Cell(31,64): black,nobaggle,notopwall,noleftwall,
+Cell(31,67): black,nobaggle,notopwall,noleftwall,
+Cell(32,2): black,nobaggle,notopwall,noleftwall,
+Cell(32,5): black,nobaggle,notopwall,noleftwall,
+Cell(32,6): black,nobaggle,notopwall,noleftwall,
+Cell(32,7): black,nobaggle,notopwall,noleftwall,
+Cell(32,9): black,nobaggle,notopwall,noleftwall,
+Cell(32,10): black,nobaggle,notopwall,noleftwall,
+Cell(32,12): black,nobaggle,notopwall,noleftwall,
+Cell(32,14): black,nobaggle,notopwall,noleftwall,
+Cell(32,15): black,nobaggle,notopwall,noleftwall,
+Cell(32,17): black,nobaggle,notopwall,noleftwall,
+Cell(32,18): black,nobaggle,notopwall,noleftwall,
+Cell(32,21): black,nobaggle,notopwall,noleftwall,
+Cell(32,22): black,nobaggle,notopwall,noleftwall,
+Cell(32,23): black,nobaggle,notopwall,noleftwall,
+Cell(32,25): black,nobaggle,notopwall,noleftwall,
+Cell(32,26): black,nobaggle,notopwall,noleftwall,
+Cell(32,29): black,nobaggle,notopwall,noleftwall,
+Cell(32,30): black,nobaggle,notopwall,noleftwall,
+Cell(32,32): black,nobaggle,notopwall,noleftwall,
+Cell(32,33): black,nobaggle,notopwall,noleftwall,
+Cell(32,35): black,nobaggle,notopwall,noleftwall,
+Cell(32,36): black,nobaggle,notopwall,noleftwall,
+Cell(32,39): black,nobaggle,notopwall,noleftwall,
+Cell(32,41): black,nobaggle,notopwall,noleftwall,
+Cell(32,42): black,nobaggle,notopwall,noleftwall,
+Cell(32,43): black,nobaggle,notopwall,noleftwall,
+Cell(32,44): black,nobaggle,notopwall,noleftwall,
+Cell(32,45): black,nobaggle,notopwall,noleftwall,
+Cell(32,46): black,nobaggle,notopwall,noleftwall,
+Cell(32,47): black,nobaggle,notopwall,noleftwall,
+Cell(32,49): black,nobaggle,notopwall,noleftwall,
+Cell(32,50): black,nobaggle,notopwall,noleftwall,
+Cell(32,51): black,nobaggle,notopwall,noleftwall,
+Cell(32,53): black,nobaggle,notopwall,noleftwall,
+Cell(32,54): black,nobaggle,notopwall,noleftwall,
+Cell(32,55): black,nobaggle,notopwall,noleftwall,
+Cell(32,57): black,nobaggle,notopwall,noleftwall,
+Cell(32,58): black,nobaggle,notopwall,noleftwall,
+Cell(32,59): black,nobaggle,notopwall,noleftwall,
+Cell(32,61): black,nobaggle,notopwall,noleftwall,
+Cell(32,62): black,nobaggle,notopwall,noleftwall,
+Cell(32,64): black,nobaggle,notopwall,noleftwall,
+Cell(32,65): black,nobaggle,notopwall,noleftwall,
+Cell(32,66): black,nobaggle,notopwall,noleftwall,
+Cell(32,67): black,nobaggle,notopwall,noleftwall,
+Cell(33,2): black,nobaggle,notopwall,noleftwall,
+Cell(33,3): black,nobaggle,notopwall,noleftwall,
+Cell(33,4): black,nobaggle,notopwall,noleftwall,
+Cell(33,5): black,nobaggle,notopwall,noleftwall,
+Cell(33,6): black,nobaggle,notopwall,noleftwall,
+Cell(33,8): black,nobaggle,notopwall,noleftwall,
+Cell(33,9): black,nobaggle,notopwall,noleftwall,
+Cell(33,10): black,nobaggle,notopwall,noleftwall,
+Cell(33,11): black,nobaggle,notopwall,noleftwall,
+Cell(33,12): black,nobaggle,notopwall,noleftwall,
+Cell(33,13): black,nobaggle,notopwall,noleftwall,
+Cell(33,14): black,nobaggle,notopwall,noleftwall,
+Cell(33,16): black,nobaggle,notopwall,noleftwall,
+Cell(33,17): black,nobaggle,notopwall,noleftwall,
+Cell(33,18): black,nobaggle,notopwall,noleftwall,
+Cell(33,19): black,nobaggle,notopwall,noleftwall,
+Cell(33,20): black,nobaggle,notopwall,noleftwall,
+Cell(33,21): black,nobaggle,notopwall,noleftwall,
+Cell(33,22): black,nobaggle,notopwall,noleftwall,
+Cell(33,24): black,nobaggle,notopwall,noleftwall,
+Cell(33,25): black,nobaggle,notopwall,noleftwall,
+Cell(33,26): black,nobaggle,notopwall,noleftwall,
+Cell(33,27): black,nobaggle,notopwall,noleftwall,
+Cell(33,28): black,nobaggle,notopwall,noleftwall,
+Cell(33,29): black,nobaggle,notopwall,noleftwall,
+Cell(33,30): black,nobaggle,notopwall,noleftwall,
+Cell(33,32): black,nobaggle,notopwall,noleftwall,
+Cell(33,33): black,nobaggle,notopwall,noleftwall,
+Cell(33,34): black,nobaggle,notopwall,noleftwall,
+Cell(33,35): black,nobaggle,notopwall,noleftwall,
+Cell(33,37): black,nobaggle,notopwall,noleftwall,
+Cell(33,38): black,nobaggle,notopwall,noleftwall,
+Cell(33,39): black,nobaggle,notopwall,noleftwall,
+Cell(33,41): black,nobaggle,notopwall,noleftwall,
+Cell(33,42): black,nobaggle,notopwall,noleftwall,
+Cell(33,43): black,nobaggle,notopwall,noleftwall,
+Cell(33,45): black,nobaggle,notopwall,noleftwall,
+Cell(33,47): black,nobaggle,notopwall,noleftwall,
+Cell(33,48): black,nobaggle,notopwall,noleftwall,
+Cell(33,49): black,nobaggle,notopwall,noleftwall,
+Cell(33,51): black,nobaggle,notopwall,noleftwall,
+Cell(33,53): black,nobaggle,notopwall,noleftwall,
+Cell(33,54): black,nobaggle,notopwall,noleftwall,
+Cell(33,56): black,nobaggle,notopwall,noleftwall,
+Cell(33,57): black,nobaggle,notopwall,noleftwall,
+Cell(33,59): black,nobaggle,notopwall,noleftwall,
+Cell(33,61): black,nobaggle,notopwall,noleftwall,
+Cell(33,62): black,nobaggle,notopwall,noleftwall,
+Cell(33,64): black,nobaggle,notopwall,noleftwall,
+Cell(33,65): black,nobaggle,notopwall,noleftwall,
+Cell(33,67): black,nobaggle,notopwall,noleftwall,
+Cell(33,68): black,nobaggle,notopwall,noleftwall,
+Cell(33,69): black,nobaggle,notopwall,noleftwall,
+Cell(34,2): black,nobaggle,notopwall,noleftwall,
+Cell(34,4): black,nobaggle,notopwall,noleftwall,
+Cell(34,6): black,nobaggle,notopwall,noleftwall,
+Cell(34,7): black,nobaggle,notopwall,noleftwall,
+Cell(34,9): black,nobaggle,notopwall,noleftwall,
+Cell(34,10): black,nobaggle,notopwall,noleftwall,
+Cell(34,13): black,nobaggle,notopwall,noleftwall,
+Cell(34,14): black,nobaggle,notopwall,noleftwall,
+Cell(34,15): black,nobaggle,notopwall,noleftwall,
+Cell(34,17): black,nobaggle,notopwall,noleftwall,
+Cell(34,18): black,nobaggle,notopwall,noleftwall,
+Cell(34,20): black,nobaggle,notopwall,noleftwall,
+Cell(34,22): black,nobaggle,notopwall,noleftwall,
+Cell(34,23): black,nobaggle,notopwall,noleftwall,
+Cell(34,25): black,nobaggle,notopwall,noleftwall,
+Cell(34,26): black,nobaggle,notopwall,noleftwall,
+Cell(34,28): black,nobaggle,notopwall,noleftwall,
+Cell(34,30): black,nobaggle,notopwall,noleftwall,
+Cell(34,31): black,nobaggle,notopwall,noleftwall,
+Cell(34,33): black,nobaggle,notopwall,noleftwall,
+Cell(34,35): black,nobaggle,notopwall,noleftwall,
+Cell(34,36): black,nobaggle,notopwall,noleftwall,
+Cell(34,37): black,nobaggle,notopwall,noleftwall,
+Cell(34,39): black,nobaggle,notopwall,noleftwall,
+Cell(34,40): black,nobaggle,notopwall,noleftwall,
+Cell(34,41): black,nobaggle,notopwall,noleftwall,
+Cell(34,43): black,nobaggle,notopwall,noleftwall,
+Cell(34,44): black,nobaggle,notopwall,noleftwall,
+Cell(34,45): black,nobaggle,notopwall,noleftwall,
+Cell(34,46): black,nobaggle,notopwall,noleftwall,
+Cell(34,47): black,nobaggle,notopwall,noleftwall,
+Cell(34,49): black,nobaggle,notopwall,noleftwall,
+Cell(34,50): black,nobaggle,notopwall,noleftwall,
+Cell(34,51): black,nobaggle,notopwall,noleftwall,
+Cell(34,52): black,nobaggle,notopwall,noleftwall,
+Cell(34,53): black,nobaggle,notopwall,noleftwall,
+Cell(34,54): black,nobaggle,notopwall,noleftwall,
+Cell(34,55): black,nobaggle,notopwall,noleftwall,
+Cell(34,57): black,nobaggle,notopwall,noleftwall,
+Cell(34,58): black,nobaggle,notopwall,noleftwall,
+Cell(34,59): black,nobaggle,notopwall,noleftwall,
+Cell(34,60): black,nobaggle,notopwall,noleftwall,
+Cell(34,61): black,nobaggle,notopwall,noleftwall,
+Cell(34,62): black,nobaggle,notopwall,noleftwall,
+Cell(34,63): black,nobaggle,notopwall,noleftwall,
+Cell(34,65): black,nobaggle,notopwall,noleftwall,
+Cell(34,66): black,nobaggle,notopwall,noleftwall,
+Cell(34,67): black,nobaggle,notopwall,noleftwall,
+Cell(34,69): black,nobaggle,notopwall,noleftwall,
+Cell(35,2): black,nobaggle,notopwall,noleftwall,
+Cell(35,3): black,nobaggle,notopwall,noleftwall,
+Cell(35,4): black,nobaggle,notopwall,noleftwall,
+Cell(35,5): black,nobaggle,notopwall,noleftwall,
+Cell(35,6): black,nobaggle,notopwall,noleftwall,
+Cell(35,8): black,nobaggle,notopwall,noleftwall,
+Cell(35,9): black,nobaggle,notopwall,noleftwall,
+Cell(35,10): black,nobaggle,notopwall,noleftwall,
+Cell(35,11): black,nobaggle,notopwall,noleftwall,
+Cell(35,12): black,nobaggle,notopwall,noleftwall,
+Cell(35,13): black,nobaggle,notopwall,noleftwall,
+Cell(35,14): black,nobaggle,notopwall,noleftwall,
+Cell(35,16): black,nobaggle,notopwall,noleftwall,
+Cell(35,17): black,nobaggle,notopwall,noleftwall,
+Cell(35,18): black,nobaggle,notopwall,noleftwall,
+Cell(35,19): black,nobaggle,notopwall,noleftwall,
+Cell(35,20): black,nobaggle,notopwall,noleftwall,
+Cell(35,21): black,nobaggle,notopwall,noleftwall,
+Cell(35,22): black,nobaggle,notopwall,noleftwall,
+Cell(35,24): black,nobaggle,notopwall,noleftwall,
+Cell(35,25): black,nobaggle,notopwall,noleftwall,
+Cell(35,26): black,nobaggle,notopwall,noleftwall,
+Cell(35,28): black,nobaggle,notopwall,noleftwall,
+Cell(35,29): black,nobaggle,notopwall,noleftwall,
+Cell(35,30): black,nobaggle,notopwall,noleftwall,
+Cell(35,32): black,nobaggle,notopwall,noleftwall,
+Cell(35,33): black,nobaggle,notopwall,noleftwall,
+Cell(35,34): black,nobaggle,notopwall,noleftwall,
+Cell(35,35): black,nobaggle,notopwall,noleftwall,
+Cell(35,36): black,nobaggle,notopwall,noleftwall,
+Cell(35,38): black,nobaggle,notopwall,noleftwall,
+Cell(35,39): black,nobaggle,notopwall,noleftwall,
+Cell(35,41): black,nobaggle,notopwall,noleftwall,
+Cell(35,43): black,nobaggle,notopwall,noleftwall,
+Cell(35,44): black,nobaggle,notopwall,noleftwall,
+Cell(35,46): black,nobaggle,notopwall,noleftwall,
+Cell(35,47): black,nobaggle,notopwall,noleftwall,
+Cell(35,49): black,nobaggle,notopwall,noleftwall,
+Cell(35,50): black,nobaggle,notopwall,noleftwall,
+Cell(35,53): black,nobaggle,notopwall,noleftwall,
+Cell(35,54): black,nobaggle,notopwall,noleftwall,
+Cell(35,56): black,nobaggle,notopwall,noleftwall,
+Cell(35,57): black,nobaggle,notopwall,noleftwall,
+Cell(35,58): black,nobaggle,notopwall,noleftwall,
+Cell(35,61): black,nobaggle,notopwall,noleftwall,
+Cell(35,62): black,nobaggle,notopwall,noleftwall,
+Cell(35,64): black,nobaggle,notopwall,noleftwall,
+Cell(35,65): black,nobaggle,notopwall,noleftwall,
+Cell(35,67): black,nobaggle,notopwall,noleftwall,
+Cell(35,69): black,nobaggle,notopwall,noleftwall,
+Cell(36,2): black,nobaggle,notopwall,noleftwall,
+Cell(36,5): black,nobaggle,notopwall,noleftwall,
+Cell(36,6): black,nobaggle,notopwall,noleftwall,
+Cell(36,7): black,nobaggle,notopwall,noleftwall,
+Cell(36,9): black,nobaggle,notopwall,noleftwall,
+Cell(36,10): black,nobaggle,notopwall,noleftwall,
+Cell(36,12): black,nobaggle,notopwall,noleftwall,
+Cell(36,14): black,nobaggle,notopwall,noleftwall,
+Cell(36,15): black,nobaggle,notopwall,noleftwall,
+Cell(36,17): black,nobaggle,notopwall,noleftwall,
+Cell(36,18): black,nobaggle,notopwall,noleftwall,
+Cell(36,20): black,nobaggle,notopwall,noleftwall,
+Cell(36,22): black,nobaggle,notopwall,noleftwall,
+Cell(36,23): black,nobaggle,notopwall,noleftwall,
+Cell(36,24): black,nobaggle,notopwall,noleftwall,
+Cell(36,26): black,nobaggle,notopwall,noleftwall,
+Cell(36,27): black,nobaggle,notopwall,noleftwall,
+Cell(36,28): black,nobaggle,notopwall,noleftwall,
+Cell(36,30): black,nobaggle,notopwall,noleftwall,
+Cell(36,31): black,nobaggle,notopwall,noleftwall,
+Cell(36,32): black,nobaggle,notopwall,noleftwall,
+Cell(36,35): black,nobaggle,notopwall,noleftwall,
+Cell(36,36): black,nobaggle,notopwall,noleftwall,
+Cell(36,37): black,nobaggle,notopwall,noleftwall,
+Cell(36,39): black,nobaggle,notopwall,noleftwall,
+Cell(36,40): black,nobaggle,notopwall,noleftwall,
+Cell(36,41): black,nobaggle,notopwall,noleftwall,
+Cell(36,42): black,nobaggle,notopwall,noleftwall,
+Cell(36,43): black,nobaggle,notopwall,noleftwall,
+Cell(36,44): black,nobaggle,notopwall,noleftwall,
+Cell(36,45): black,nobaggle,notopwall,noleftwall,
+Cell(36,47): black,nobaggle,notopwall,noleftwall,
+Cell(36,48): black,nobaggle,notopwall,noleftwall,
+Cell(36,49): black,nobaggle,notopwall,noleftwall,
+Cell(36,50): black,nobaggle,notopwall,noleftwall,
+Cell(36,51): black,nobaggle,notopwall,noleftwall,
+Cell(36,52): black,nobaggle,notopwall,noleftwall,
+Cell(36,53): black,nobaggle,notopwall,noleftwall,
+Cell(36,54): black,nobaggle,notopwall,noleftwall,
+Cell(36,55): black,nobaggle,notopwall,noleftwall,
+Cell(36,57): black,nobaggle,notopwall,noleftwall,
+Cell(36,58): black,nobaggle,notopwall,noleftwall,
+Cell(36,59): black,nobaggle,notopwall,noleftwall,
+Cell(36,60): black,nobaggle,notopwall,noleftwall,
+Cell(36,61): black,nobaggle,notopwall,noleftwall,
+Cell(36,62): black,nobaggle,notopwall,noleftwall,
+Cell(36,63): black,nobaggle,notopwall,noleftwall,
+Cell(36,65): black,nobaggle,notopwall,noleftwall,
+Cell(36,66): black,nobaggle,notopwall,noleftwall,
+Cell(36,67): black,nobaggle,notopwall,noleftwall,
+Cell(36,68): black,nobaggle,notopwall,noleftwall,
+Cell(36,69): black,nobaggle,notopwall,noleftwall,
+Cell(37,2): black,nobaggle,notopwall,noleftwall,
+Cell(37,3): black,nobaggle,notopwall,noleftwall,
+Cell(37,4): black,nobaggle,notopwall,noleftwall,
+Cell(37,5): black,nobaggle,notopwall,noleftwall,
+Cell(37,6): black,nobaggle,notopwall,noleftwall,
+Cell(37,8): black,nobaggle,notopwall,noleftwall,
+Cell(37,9): black,nobaggle,notopwall,noleftwall,
+Cell(37,10): black,nobaggle,notopwall,noleftwall,
+Cell(37,11): black,nobaggle,notopwall,noleftwall,
+Cell(37,12): black,nobaggle,notopwall,noleftwall,
+Cell(37,13): black,nobaggle,notopwall,noleftwall,
+Cell(37,14): black,nobaggle,notopwall,noleftwall,
+Cell(37,16): black,nobaggle,notopwall,noleftwall,
+Cell(37,17): black,nobaggle,notopwall,noleftwall,
+Cell(37,18): black,nobaggle,notopwall,noleftwall,
+Cell(37,19): black,nobaggle,notopwall,noleftwall,
+Cell(37,20): black,nobaggle,notopwall,noleftwall,
+Cell(37,22): black,nobaggle,notopwall,noleftwall,
+Cell(37,23): black,nobaggle,notopwall,noleftwall,
+Cell(37,24): black,nobaggle,notopwall,noleftwall,
+Cell(37,25): black,nobaggle,notopwall,noleftwall,
+Cell(37,26): black,nobaggle,notopwall,noleftwall,
+Cell(37,27): black,nobaggle,notopwall,noleftwall,
+Cell(37,28): black,nobaggle,notopwall,noleftwall,
+Cell(37,30): black,nobaggle,notopwall,noleftwall,
+Cell(37,33): black,nobaggle,notopwall,noleftwall,
+Cell(37,35): black,nobaggle,notopwall,noleftwall,
+Cell(37,36): black,nobaggle,notopwall,noleftwall,
+Cell(37,38): black,nobaggle,notopwall,noleftwall,
+Cell(37,39): black,nobaggle,notopwall,noleftwall,
+Cell(37,40): black,nobaggle,notopwall,noleftwall,
+Cell(37,43): black,nobaggle,notopwall,noleftwall,
+Cell(37,44): black,nobaggle,notopwall,noleftwall,
+Cell(37,46): black,nobaggle,notopwall,noleftwall,
+Cell(37,47): black,nobaggle,notopwall,noleftwall,
+Cell(37,49): black,nobaggle,notopwall,noleftwall,
+Cell(37,51): black,nobaggle,notopwall,noleftwall,
+Cell(37,52): black,nobaggle,notopwall,noleftwall,
+Cell(37,54): black,nobaggle,notopwall,noleftwall,
+Cell(37,56): black,nobaggle,notopwall,noleftwall,
+Cell(37,57): black,nobaggle,notopwall,noleftwall,
+Cell(37,59): black,nobaggle,notopwall,noleftwall,
+Cell(37,61): black,nobaggle,notopwall,noleftwall,
+Cell(37,62): black,nobaggle,notopwall,noleftwall,
+Cell(37,64): black,nobaggle,notopwall,noleftwall,
+Cell(37,65): black,nobaggle,notopwall,noleftwall,
+Cell(37,66): black,nobaggle,notopwall,noleftwall,
+Cell(37,69): black,nobaggle,notopwall,noleftwall,
+Cell(38,2): black,nobaggle,notopwall,noleftwall,
+Cell(38,4): black,nobaggle,notopwall,noleftwall,
+Cell(38,6): black,nobaggle,notopwall,noleftwall,
+Cell(38,7): black,nobaggle,notopwall,noleftwall,
+Cell(38,9): black,nobaggle,notopwall,noleftwall,
+Cell(38,10): black,nobaggle,notopwall,noleftwall,
+Cell(38,13): black,nobaggle,notopwall,noleftwall,
+Cell(38,14): black,nobaggle,notopwall,noleftwall,
+Cell(38,15): black,nobaggle,notopwall,noleftwall,
+Cell(38,17): black,nobaggle,notopwall,noleftwall,
+Cell(38,18): black,nobaggle,notopwall,noleftwall,
+Cell(38,20): black,nobaggle,notopwall,noleftwall,
+Cell(38,21): black,nobaggle,notopwall,noleftwall,
+Cell(38,22): black,nobaggle,notopwall,noleftwall,
+Cell(38,24): black,nobaggle,notopwall,noleftwall,
+Cell(38,27): black,nobaggle,notopwall,noleftwall,
+Cell(38,28): black,nobaggle,notopwall,noleftwall,
+Cell(38,29): black,nobaggle,notopwall,noleftwall,
+Cell(38,30): black,nobaggle,notopwall,noleftwall,
+Cell(38,31): black,nobaggle,notopwall,noleftwall,
+Cell(38,32): black,nobaggle,notopwall,noleftwall,
+Cell(38,33): black,nobaggle,notopwall,noleftwall,
+Cell(38,34): black,nobaggle,notopwall,noleftwall,
+Cell(38,35): black,nobaggle,notopwall,noleftwall,
+Cell(38,36): black,nobaggle,notopwall,noleftwall,
+Cell(38,37): black,nobaggle,notopwall,noleftwall,
+Cell(38,39): black,nobaggle,notopwall,noleftwall,
+Cell(38,40): black,nobaggle,notopwall,noleftwall,
+Cell(38,41): black,nobaggle,notopwall,noleftwall,
+Cell(38,42): black,nobaggle,notopwall,noleftwall,
+Cell(38,43): black,nobaggle,notopwall,noleftwall,
+Cell(38,44): black,nobaggle,notopwall,noleftwall,
+Cell(38,45): black,nobaggle,notopwall,noleftwall,
+Cell(38,47): black,nobaggle,notopwall,noleftwall,
+Cell(38,48): black,nobaggle,notopwall,noleftwall,
+Cell(38,49): black,nobaggle,notopwall,noleftwall,
+Cell(38,50): black,nobaggle,notopwall,noleftwall,
+Cell(38,51): black,nobaggle,notopwall,noleftwall,
+Cell(38,52): black,nobaggle,notopwall,noleftwall,
+Cell(38,53): black,nobaggle,notopwall,noleftwall,
+Cell(38,54): black,nobaggle,notopwall,noleftwall,
+Cell(38,55): black,nobaggle,notopwall,noleftwall,
+Cell(38,57): black,nobaggle,notopwall,noleftwall,
+Cell(38,58): black,nobaggle,notopwall,noleftwall,
+Cell(38,59): black,nobaggle,notopwall,noleftwall,
+Cell(38,60): black,nobaggle,notopwall,noleftwall,
+Cell(38,61): black,nobaggle,notopwall,noleftwall,
+Cell(38,62): black,nobaggle,notopwall,noleftwall,
+Cell(38,63): black,nobaggle,notopwall,noleftwall,
+Cell(38,65): black,nobaggle,notopwall,noleftwall,
+Cell(38,66): black,nobaggle,notopwall,noleftwall,
+Cell(38,67): black,nobaggle,notopwall,noleftwall,
+Cell(38,68): black,nobaggle,notopwall,noleftwall,
+Cell(38,69): black,nobaggle,notopwall,noleftwall,
+Cell(39,2): black,nobaggle,notopwall,noleftwall,
+Cell(39,3): black,nobaggle,notopwall,noleftwall,
+Cell(39,4): black,nobaggle,notopwall,noleftwall,
+Cell(39,5): black,nobaggle,notopwall,noleftwall,
+Cell(39,6): black,nobaggle,notopwall,noleftwall,
+Cell(39,8): black,nobaggle,notopwall,noleftwall,
+Cell(39,9): black,nobaggle,notopwall,noleftwall,
+Cell(39,10): black,nobaggle,notopwall,noleftwall,
+Cell(39,11): black,nobaggle,notopwall,noleftwall,
+Cell(39,12): black,nobaggle,notopwall,noleftwall,
+Cell(39,13): black,nobaggle,notopwall,noleftwall,
+Cell(39,14): black,nobaggle,notopwall,noleftwall,
+Cell(39,16): black,nobaggle,notopwall,noleftwall,
+Cell(39,17): black,nobaggle,notopwall,noleftwall,
+Cell(39,18): black,nobaggle,notopwall,noleftwall,
+Cell(39,20): black,nobaggle,notopwall,noleftwall,
+Cell(39,23): black,nobaggle,notopwall,noleftwall,
+Cell(39,24): black,nobaggle,notopwall,noleftwall,
+Cell(39,25): black,nobaggle,notopwall,noleftwall,
+Cell(39,26): black,nobaggle,notopwall,noleftwall,
+Cell(39,27): black,nobaggle,notopwall,noleftwall,
+Cell(39,28): black,nobaggle,notopwall,noleftwall,
+Cell(39,29): black,nobaggle,notopwall,noleftwall,
+Cell(39,30): black,nobaggle,notopwall,noleftwall,
+Cell(39,32): black,nobaggle,notopwall,noleftwall,
+Cell(39,35): black,nobaggle,notopwall,noleftwall,
+Cell(39,36): black,nobaggle,notopwall,noleftwall,
+Cell(39,38): black,nobaggle,notopwall,noleftwall,
+Cell(39,39): black,nobaggle,notopwall,noleftwall,
+Cell(39,41): black,nobaggle,notopwall,noleftwall,
+Cell(39,43): black,nobaggle,notopwall,noleftwall,
+Cell(39,44): black,nobaggle,notopwall,noleftwall,
+Cell(39,46): black,nobaggle,notopwall,noleftwall,
+Cell(39,47): black,nobaggle,notopwall,noleftwall,
+Cell(39,48): black,nobaggle,notopwall,noleftwall,
+Cell(39,51): black,nobaggle,notopwall,noleftwall,
+Cell(39,52): black,nobaggle,notopwall,noleftwall,
+Cell(39,54): black,nobaggle,notopwall,noleftwall,
+Cell(39,55): black,nobaggle,notopwall,noleftwall,
+Cell(39,57): black,nobaggle,notopwall,noleftwall,
+Cell(39,58): black,nobaggle,notopwall,noleftwall,
+Cell(39,61): black,nobaggle,notopwall,noleftwall,
+Cell(39,62): black,nobaggle,notopwall,noleftwall,
+Cell(39,64): black,nobaggle,notopwall,noleftwall,
+Cell(39,65): black,nobaggle,notopwall,noleftwall,
+Cell(39,67): black,nobaggle,notopwall,noleftwall,
+Cell(39,69): black,nobaggle,notopwall,noleftwall,
+Cell(40,2): black,nobaggle,notopwall,noleftwall,
+Cell(40,5): black,nobaggle,notopwall,noleftwall,
+Cell(40,6): black,nobaggle,notopwall,noleftwall,
+Cell(40,7): black,nobaggle,notopwall,noleftwall,
+Cell(40,9): black,nobaggle,notopwall,noleftwall,
+Cell(40,10): black,nobaggle,notopwall,noleftwall,
+Cell(40,12): black,nobaggle,notopwall,noleftwall,
+Cell(40,14): black,nobaggle,notopwall,noleftwall,
+Cell(40,15): black,nobaggle,notopwall,noleftwall,
+Cell(40,17): black,nobaggle,notopwall,noleftwall,
+Cell(40,18): black,nobaggle,notopwall,noleftwall,
+Cell(40,19): black,nobaggle,notopwall,noleftwall,
+Cell(40,20): black,nobaggle,notopwall,noleftwall,
+Cell(40,21): black,nobaggle,notopwall,noleftwall,
+Cell(40,22): black,nobaggle,notopwall,noleftwall,
+Cell(40,23): black,nobaggle,notopwall,noleftwall,
+Cell(40,24): black,nobaggle,notopwall,noleftwall,
+Cell(40,26): black,nobaggle,notopwall,noleftwall,
+Cell(40,28): black,nobaggle,notopwall,noleftwall,
+Cell(40,30): black,nobaggle,notopwall,noleftwall,
+Cell(40,31): black,nobaggle,notopwall,noleftwall,
+Cell(40,32): black,nobaggle,notopwall,noleftwall,
+Cell(40,33): black,nobaggle,notopwall,noleftwall,
+Cell(40,34): black,nobaggle,notopwall,noleftwall,
+Cell(40,35): black,nobaggle,notopwall,noleftwall,
+Cell(40,36): black,nobaggle,notopwall,noleftwall,
+Cell(40,37): black,nobaggle,notopwall,noleftwall,
+Cell(40,39): black,nobaggle,notopwall,noleftwall,
+Cell(40,40): black,nobaggle,notopwall,noleftwall,
+Cell(40,41): black,nobaggle,notopwall,noleftwall,
+Cell(40,42): black,nobaggle,notopwall,noleftwall,
+Cell(40,43): black,nobaggle,notopwall,noleftwall,
+Cell(40,44): black,nobaggle,notopwall,noleftwall,
+Cell(40,45): black,nobaggle,notopwall,noleftwall,
+Cell(40,47): black,nobaggle,notopwall,noleftwall,
+Cell(40,48): black,nobaggle,notopwall,noleftwall,
+Cell(40,49): black,nobaggle,notopwall,noleftwall,
+Cell(40,50): black,nobaggle,notopwall,noleftwall,
+Cell(40,51): black,nobaggle,notopwall,noleftwall,
+Cell(40,52): black,nobaggle,notopwall,noleftwall,
+Cell(40,53): black,nobaggle,notopwall,noleftwall,
+Cell(40,55): black,nobaggle,notopwall,noleftwall,
+Cell(40,56): black,nobaggle,notopwall,noleftwall,
+Cell(40,57): black,nobaggle,notopwall,noleftwall,
+Cell(40,58): black,nobaggle,notopwall,noleftwall,
+Cell(40,59): black,nobaggle,notopwall,noleftwall,
+Cell(40,60): black,nobaggle,notopwall,noleftwall,
+Cell(40,61): black,nobaggle,notopwall,noleftwall,
+Cell(40,62): black,nobaggle,notopwall,noleftwall,
+Cell(40,63): black,nobaggle,notopwall,noleftwall,
+Cell(40,65): black,nobaggle,notopwall,noleftwall,
+Cell(40,66): black,nobaggle,notopwall,noleftwall,
+Cell(40,67): black,nobaggle,notopwall,noleftwall,
+Cell(40,68): black,nobaggle,notopwall,noleftwall,
+Cell(40,69): black,nobaggle,notopwall,noleftwall,
+Cell(41,2): black,nobaggle,notopwall,noleftwall,
+Cell(41,3): black,nobaggle,notopwall,noleftwall,
+Cell(41,4): black,nobaggle,notopwall,noleftwall,
+Cell(41,5): black,nobaggle,notopwall,noleftwall,
+Cell(41,6): black,nobaggle,notopwall,noleftwall,
+Cell(41,8): black,nobaggle,notopwall,noleftwall,
+Cell(41,9): black,nobaggle,notopwall,noleftwall,
+Cell(41,10): black,nobaggle,notopwall,noleftwall,
+Cell(41,12): black,nobaggle,notopwall,noleftwall,
+Cell(41,13): black,nobaggle,notopwall,noleftwall,
+Cell(41,14): black,nobaggle,notopwall,noleftwall,
+Cell(41,16): black,nobaggle,notopwall,noleftwall,
+Cell(41,17): black,nobaggle,notopwall,noleftwall,
+Cell(41,18): black,nobaggle,notopwall,noleftwall,
+Cell(41,19): black,nobaggle,notopwall,noleftwall,
+Cell(41,20): black,nobaggle,notopwall,noleftwall,
+Cell(41,22): black,nobaggle,notopwall,noleftwall,
+Cell(41,25): black,nobaggle,notopwall,noleftwall,
+Cell(41,27): black,nobaggle,notopwall,noleftwall,
+Cell(41,28): black,nobaggle,notopwall,noleftwall,
+Cell(41,29): black,nobaggle,notopwall,noleftwall,
+Cell(41,30): black,nobaggle,notopwall,noleftwall,
+Cell(41,31): black,nobaggle,notopwall,noleftwall,
+Cell(41,32): black,nobaggle,notopwall,noleftwall,
+Cell(41,33): black,nobaggle,notopwall,noleftwall,
+Cell(41,34): black,nobaggle,notopwall,noleftwall,
+Cell(41,36): black,nobaggle,notopwall,noleftwall,
+Cell(41,38): black,nobaggle,notopwall,noleftwall,
+Cell(41,39): black,nobaggle,notopwall,noleftwall,
+Cell(41,40): black,nobaggle,notopwall,noleftwall,
+Cell(41,43): black,nobaggle,notopwall,noleftwall,
+Cell(41,44): black,nobaggle,notopwall,noleftwall,
+Cell(41,46): black,nobaggle,notopwall,noleftwall,
+Cell(41,47): black,nobaggle,notopwall,noleftwall,
+Cell(41,49): black,nobaggle,notopwall,noleftwall,
+Cell(41,51): black,nobaggle,notopwall,noleftwall,
+Cell(41,52): black,nobaggle,notopwall,noleftwall,
+Cell(41,54): black,nobaggle,notopwall,noleftwall,
+Cell(41,55): black,nobaggle,notopwall,noleftwall,
+Cell(41,57): black,nobaggle,notopwall,noleftwall,
+Cell(41,59): black,nobaggle,notopwall,noleftwall,
+Cell(41,60): black,nobaggle,notopwall,noleftwall,
+Cell(41,61): black,nobaggle,notopwall,noleftwall,
+Cell(41,63): black,nobaggle,notopwall,noleftwall,
+Cell(41,65): black,nobaggle,notopwall,noleftwall,
+Cell(41,66): black,nobaggle,notopwall,noleftwall,
+Cell(41,69): black,nobaggle,notopwall,noleftwall,
+Cell(42,2): black,nobaggle,notopwall,noleftwall,
+Cell(42,4): black,nobaggle,notopwall,noleftwall,
+Cell(42,6): black,nobaggle,notopwall,noleftwall,
+Cell(42,7): black,nobaggle,notopwall,noleftwall,
+Cell(42,9): black,nobaggle,notopwall,noleftwall,
+Cell(42,10): black,nobaggle,notopwall,noleftwall,
+Cell(42,11): black,nobaggle,notopwall,noleftwall,
+Cell(42,12): black,nobaggle,notopwall,noleftwall,
+Cell(42,14): black,nobaggle,notopwall,noleftwall,
+Cell(42,15): black,nobaggle,notopwall,noleftwall,
+Cell(42,17): black,nobaggle,notopwall,noleftwall,
+Cell(42,19): black,nobaggle,notopwall,noleftwall,
+Cell(42,20): black,nobaggle,notopwall,noleftwall,
+Cell(42,21): black,nobaggle,notopwall,noleftwall,
+Cell(42,22): black,nobaggle,notopwall,noleftwall,
+Cell(42,23): black,nobaggle,notopwall,noleftwall,
+Cell(42,24): black,nobaggle,notopwall,noleftwall,
+Cell(42,25): black,nobaggle,notopwall,noleftwall,
+Cell(42,26): black,nobaggle,notopwall,noleftwall,
+Cell(42,27): black,nobaggle,notopwall,noleftwall,
+Cell(42,28): black,nobaggle,notopwall,noleftwall,
+Cell(42,30): black,nobaggle,notopwall,noleftwall,
+Cell(42,32): black,nobaggle,notopwall,noleftwall,
+Cell(42,34): black,nobaggle,notopwall,noleftwall,
+Cell(42,35): black,nobaggle,notopwall,noleftwall,
+Cell(42,36): black,nobaggle,notopwall,noleftwall,
+Cell(42,37): black,nobaggle,notopwall,noleftwall,
+Cell(42,39): black,nobaggle,notopwall,noleftwall,
+Cell(42,40): black,nobaggle,notopwall,noleftwall,
+Cell(42,41): black,nobaggle,notopwall,noleftwall,
+Cell(42,42): black,nobaggle,notopwall,noleftwall,
+Cell(42,43): black,nobaggle,notopwall,noleftwall,
+Cell(42,44): black,nobaggle,notopwall,noleftwall,
+Cell(42,45): black,nobaggle,notopwall,noleftwall,
+Cell(42,47): black,nobaggle,notopwall,noleftwall,
+Cell(42,48): black,nobaggle,notopwall,noleftwall,
+Cell(42,49): black,nobaggle,notopwall,noleftwall,
+Cell(42,50): black,nobaggle,notopwall,noleftwall,
+Cell(42,51): black,nobaggle,notopwall,noleftwall,
+Cell(42,52): black,nobaggle,notopwall,noleftwall,
+Cell(42,53): black,nobaggle,notopwall,noleftwall,
+Cell(42,55): black,nobaggle,notopwall,noleftwall,
+Cell(42,56): black,nobaggle,notopwall,noleftwall,
+Cell(42,57): black,nobaggle,notopwall,noleftwall,
+Cell(42,58): black,nobaggle,notopwall,noleftwall,
+Cell(42,59): black,nobaggle,notopwall,noleftwall,
+Cell(42,60): black,nobaggle,notopwall,noleftwall,
+Cell(42,62): black,nobaggle,notopwall,noleftwall,
+Cell(42,63): black,nobaggle,notopwall,noleftwall,
+Cell(42,64): black,nobaggle,notopwall,noleftwall,
+Cell(42,65): black,nobaggle,notopwall,noleftwall,
+Cell(42,66): black,nobaggle,notopwall,noleftwall,
+Cell(42,67): black,nobaggle,notopwall,noleftwall,
+Cell(42,68): black,nobaggle,notopwall,noleftwall,
+Cell(42,69): black,nobaggle,notopwall,noleftwall,
+Cell(43,2): black,nobaggle,notopwall,noleftwall,
+Cell(43,4): black,nobaggle,notopwall,noleftwall,
+Cell(43,5): black,nobaggle,notopwall,noleftwall,
+Cell(43,6): black,nobaggle,notopwall,noleftwall,
+Cell(43,8): black,nobaggle,notopwall,noleftwall,
+Cell(43,9): black,nobaggle,notopwall,noleftwall,
+Cell(43,10): black,nobaggle,notopwall,noleftwall,
+Cell(43,11): black,nobaggle,notopwall,noleftwall,
+Cell(43,12): black,nobaggle,notopwall,noleftwall,
+Cell(43,14): black,nobaggle,notopwall,noleftwall,
+Cell(43,15): black,nobaggle,notopwall,noleftwall,
+Cell(43,16): black,nobaggle,notopwall,noleftwall,
+Cell(43,17): black,nobaggle,notopwall,noleftwall,
+Cell(43,18): black,nobaggle,notopwall,noleftwall,
+Cell(43,19): black,nobaggle,notopwall,noleftwall,
+Cell(43,21): black,nobaggle,notopwall,noleftwall,
+Cell(43,22): black,nobaggle,notopwall,noleftwall,
+Cell(43,23): black,nobaggle,notopwall,noleftwall,
+Cell(43,24): black,nobaggle,notopwall,noleftwall,
+Cell(43,26): black,nobaggle,notopwall,noleftwall,
+Cell(43,29): black,nobaggle,notopwall,noleftwall,
+Cell(43,31): black,nobaggle,notopwall,noleftwall,
+Cell(43,33): black,nobaggle,notopwall,noleftwall,
+Cell(43,34): black,nobaggle,notopwall,noleftwall,
+Cell(43,36): black,nobaggle,notopwall,noleftwall,
+Cell(43,37): black,nobaggle,notopwall,noleftwall,
+Cell(43,39): black,nobaggle,notopwall,noleftwall,
+Cell(43,41): black,nobaggle,notopwall,noleftwall,
+Cell(43,42): black,nobaggle,notopwall,noleftwall,
+Cell(43,44): black,nobaggle,notopwall,noleftwall,
+Cell(43,46): black,nobaggle,notopwall,noleftwall,
+Cell(43,47): black,nobaggle,notopwall,noleftwall,
+Cell(43,48): black,nobaggle,notopwall,noleftwall,
+Cell(43,51): black,nobaggle,notopwall,noleftwall,
+Cell(43,52): black,nobaggle,notopwall,noleftwall,
+Cell(43,54): black,nobaggle,notopwall,noleftwall,
+Cell(43,55): black,nobaggle,notopwall,noleftwall,
+Cell(43,56): black,nobaggle,notopwall,noleftwall,
+Cell(43,59): black,nobaggle,notopwall,noleftwall,
+Cell(43,60): black,nobaggle,notopwall,noleftwall,
+Cell(43,61): black,nobaggle,notopwall,noleftwall,
+Cell(43,62): black,nobaggle,notopwall,noleftwall,
+Cell(43,65): black,nobaggle,notopwall,noleftwall,
+Cell(44,2): black,nobaggle,notopwall,noleftwall,
+Cell(44,3): black,nobaggle,notopwall,noleftwall,
+Cell(44,4): black,nobaggle,notopwall,noleftwall,
+Cell(44,6): black,nobaggle,notopwall,noleftwall,
+Cell(44,7): black,nobaggle,notopwall,noleftwall,
+Cell(44,9): black,nobaggle,notopwall,noleftwall,
+Cell(44,11): black,nobaggle,notopwall,noleftwall,
+Cell(44,12): black,nobaggle,notopwall,noleftwall,
+Cell(44,13): black,nobaggle,notopwall,noleftwall,
+Cell(44,14): black,nobaggle,notopwall,noleftwall,
+Cell(44,16): black,nobaggle,notopwall,noleftwall,
+Cell(44,18): black,nobaggle,notopwall,noleftwall,
+Cell(44,20): black,nobaggle,notopwall,noleftwall,
+Cell(44,21): black,nobaggle,notopwall,noleftwall,
+Cell(44,22): black,nobaggle,notopwall,noleftwall,
+Cell(44,24): black,nobaggle,notopwall,noleftwall,
+Cell(44,25): black,nobaggle,notopwall,noleftwall,
+Cell(44,26): black,nobaggle,notopwall,noleftwall,
+Cell(44,27): black,nobaggle,notopwall,noleftwall,
+Cell(44,28): black,nobaggle,notopwall,noleftwall,
+Cell(44,29): black,nobaggle,notopwall,noleftwall,
+Cell(44,30): black,nobaggle,notopwall,noleftwall,
+Cell(44,31): black,nobaggle,notopwall,noleftwall,
+Cell(44,32): black,nobaggle,notopwall,noleftwall,
+Cell(44,33): black,nobaggle,notopwall,noleftwall,
+Cell(44,34): black,nobaggle,notopwall,noleftwall,
+Cell(44,35): black,nobaggle,notopwall,noleftwall,
+Cell(44,37): black,nobaggle,notopwall,noleftwall,
+Cell(44,38): black,nobaggle,notopwall,noleftwall,
+Cell(44,39): black,nobaggle,notopwall,noleftwall,
+Cell(44,40): black,nobaggle,notopwall,noleftwall,
+Cell(44,41): black,nobaggle,notopwall,noleftwall,
+Cell(44,42): black,nobaggle,notopwall,noleftwall,
+Cell(44,43): black,nobaggle,notopwall,noleftwall,
+Cell(44,44): black,nobaggle,notopwall,noleftwall,
+Cell(44,45): black,nobaggle,notopwall,noleftwall,
+Cell(44,47): black,nobaggle,notopwall,noleftwall,
+Cell(44,48): black,nobaggle,notopwall,noleftwall,
+Cell(44,49): black,nobaggle,notopwall,noleftwall,
+Cell(44,50): black,nobaggle,notopwall,noleftwall,
+Cell(44,51): black,nobaggle,notopwall,noleftwall,
+Cell(44,52): black,nobaggle,notopwall,noleftwall,
+Cell(44,53): black,nobaggle,notopwall,noleftwall,
+Cell(44,55): black,nobaggle,notopwall,noleftwall,
+Cell(44,56): black,nobaggle,notopwall,noleftwall,
+Cell(44,57): black,nobaggle,notopwall,noleftwall,
+Cell(44,58): black,nobaggle,notopwall,noleftwall,
+Cell(44,59): black,nobaggle,notopwall,noleftwall,
+Cell(44,60): black,nobaggle,notopwall,noleftwall,
+Cell(44,62): black,nobaggle,notopwall,noleftwall,
+Cell(44,63): black,nobaggle,notopwall,noleftwall,
+Cell(44,64): black,nobaggle,notopwall,noleftwall,
+Cell(44,65): black,nobaggle,notopwall,noleftwall,
+Cell(45,4): black,nobaggle,notopwall,noleftwall,
+Cell(45,5): black,nobaggle,notopwall,noleftwall,
+Cell(45,6): black,nobaggle,notopwall,noleftwall,
+Cell(45,7): black,nobaggle,notopwall,noleftwall,
+Cell(45,8): black,nobaggle,notopwall,noleftwall,
+Cell(45,9): black,nobaggle,notopwall,noleftwall,
+Cell(45,10): black,nobaggle,notopwall,noleftwall,
+Cell(45,11): black,nobaggle,notopwall,noleftwall,
+Cell(45,13): black,nobaggle,notopwall,noleftwall,
+Cell(45,14): black,nobaggle,notopwall,noleftwall,
+Cell(45,15): black,nobaggle,notopwall,noleftwall,
+Cell(45,16): black,nobaggle,notopwall,noleftwall,
+Cell(45,18): black,nobaggle,notopwall,noleftwall,
+Cell(45,19): black,nobaggle,notopwall,noleftwall,
+Cell(45,20): black,nobaggle,notopwall,noleftwall,
+Cell(45,21): black,nobaggle,notopwall,noleftwall,
+Cell(45,22): black,nobaggle,notopwall,noleftwall,
+Cell(45,24): black,nobaggle,notopwall,noleftwall,
+Cell(45,26): black,nobaggle,notopwall,noleftwall,
+Cell(45,28): black,nobaggle,notopwall,noleftwall,
+Cell(45,29): black,nobaggle,notopwall,noleftwall,
+Cell(45,30): black,nobaggle,notopwall,noleftwall,
+Cell(45,32): black,nobaggle,notopwall,noleftwall,
+Cell(45,35): black,nobaggle,notopwall,noleftwall,
+Cell(45,37): black,nobaggle,notopwall,noleftwall,
+Cell(45,39): black,nobaggle,notopwall,noleftwall,
+Cell(45,40): black,nobaggle,notopwall,noleftwall,
+Cell(45,41): black,nobaggle,notopwall,noleftwall,
+Cell(45,42): black,nobaggle,notopwall,noleftwall,
+Cell(45,44): black,nobaggle,notopwall,noleftwall,
+Cell(45,45): black,nobaggle,notopwall,noleftwall,
+Cell(45,47): black,nobaggle,notopwall,noleftwall,
+Cell(45,49): black,nobaggle,notopwall,noleftwall,
+Cell(45,50): black,nobaggle,notopwall,noleftwall,
+Cell(45,52): black,nobaggle,notopwall,noleftwall,
+Cell(45,54): black,nobaggle,notopwall,noleftwall,
+Cell(45,55): black,nobaggle,notopwall,noleftwall,
+Cell(45,57): black,nobaggle,notopwall,noleftwall,
+Cell(45,59): black,nobaggle,notopwall,noleftwall,
+Cell(45,61): black,nobaggle,notopwall,noleftwall,
+Cell(46,4): black,nobaggle,notopwall,noleftwall,
+Cell(46,7): black,nobaggle,notopwall,noleftwall,
+Cell(46,8): black,nobaggle,notopwall,noleftwall,
+Cell(46,10): black,nobaggle,notopwall,noleftwall,
+Cell(46,12): black,nobaggle,notopwall,noleftwall,
+Cell(46,13): black,nobaggle,notopwall,noleftwall,
+Cell(46,14): black,nobaggle,notopwall,noleftwall,
+Cell(46,16): black,nobaggle,notopwall,noleftwall,
+Cell(46,17): black,nobaggle,notopwall,noleftwall,
+Cell(46,18): black,nobaggle,notopwall,noleftwall,
+Cell(46,20): black,nobaggle,notopwall,noleftwall,
+Cell(46,22): black,nobaggle,notopwall,noleftwall,
+Cell(46,23): black,nobaggle,notopwall,noleftwall,
+Cell(46,24): black,nobaggle,notopwall,noleftwall,
+Cell(46,25): black,nobaggle,notopwall,noleftwall,
+Cell(46,26): black,nobaggle,notopwall,noleftwall,
+Cell(46,27): black,nobaggle,notopwall,noleftwall,
+Cell(46,28): black,nobaggle,notopwall,noleftwall,
+Cell(46,30): black,nobaggle,notopwall,noleftwall,
+Cell(46,31): black,nobaggle,notopwall,noleftwall,
+Cell(46,32): black,nobaggle,notopwall,noleftwall,
+Cell(46,33): black,nobaggle,notopwall,noleftwall,
+Cell(46,34): black,nobaggle,notopwall,noleftwall,
+Cell(46,35): black,nobaggle,notopwall,noleftwall,
+Cell(46,36): black,nobaggle,notopwall,noleftwall,
+Cell(46,37): black,nobaggle,notopwall,noleftwall,
+Cell(46,38): black,nobaggle,notopwall,noleftwall,
+Cell(46,39): black,nobaggle,notopwall,noleftwall,
+Cell(46,40): black,nobaggle,notopwall,noleftwall,
+Cell(46,42): black,nobaggle,notopwall,noleftwall,
+Cell(46,43): black,nobaggle,notopwall,noleftwall,
+Cell(46,45): black,nobaggle,notopwall,noleftwall,
+Cell(46,46): black,nobaggle,notopwall,noleftwall,
+Cell(46,47): black,nobaggle,notopwall,noleftwall,
+Cell(46,48): black,nobaggle,notopwall,noleftwall,
+Cell(46,49): black,nobaggle,notopwall,noleftwall,
+Cell(46,50): black,nobaggle,notopwall,noleftwall,
+Cell(46,51): black,nobaggle,notopwall,noleftwall,
+Cell(46,52): black,nobaggle,notopwall,noleftwall,
+Cell(46,53): black,nobaggle,notopwall,noleftwall,
+Cell(46,55): black,nobaggle,notopwall,noleftwall,
+Cell(46,56): black,nobaggle,notopwall,noleftwall,
+Cell(46,57): black,nobaggle,notopwall,noleftwall,
+Cell(46,58): black,nobaggle,notopwall,noleftwall,
+Cell(46,59): black,nobaggle,notopwall,noleftwall,
+Cell(46,60): black,nobaggle,notopwall,noleftwall,
+Cell(46,61): black,nobaggle,notopwall,noleftwall,
+Cell(47,4): black,nobaggle,notopwall,noleftwall,
+Cell(47,5): black,nobaggle,notopwall,noleftwall,
+Cell(47,6): black,nobaggle,notopwall,noleftwall,
+Cell(47,7): black,nobaggle,notopwall,noleftwall,
+Cell(47,8): black,nobaggle,notopwall,noleftwall,
+Cell(47,10): black,nobaggle,notopwall,noleftwall,
+Cell(47,11): black,nobaggle,notopwall,noleftwall,
+Cell(47,12): black,nobaggle,notopwall,noleftwall,
+Cell(47,13): black,nobaggle,notopwall,noleftwall,
+Cell(47,14): black,nobaggle,notopwall,noleftwall,
+Cell(47,16): black,nobaggle,notopwall,noleftwall,
+Cell(47,19): black,nobaggle,notopwall,noleftwall,
+Cell(47,20): black,nobaggle,notopwall,noleftwall,
+Cell(47,21): black,nobaggle,notopwall,noleftwall,
+Cell(47,22): black,nobaggle,notopwall,noleftwall,
+Cell(47,23): black,nobaggle,notopwall,noleftwall,
+Cell(47,24): black,nobaggle,notopwall,noleftwall,
+Cell(47,25): black,nobaggle,notopwall,noleftwall,
+Cell(47,26): black,nobaggle,notopwall,noleftwall,
+Cell(47,27): black,nobaggle,notopwall,noleftwall,
+Cell(47,28): black,nobaggle,notopwall,noleftwall,
+Cell(47,30): black,nobaggle,notopwall,noleftwall,
+Cell(47,32): black,nobaggle,notopwall,noleftwall,
+Cell(47,34): black,nobaggle,notopwall,noleftwall,
+Cell(47,37): black,nobaggle,notopwall,noleftwall,
+Cell(47,38): black,nobaggle,notopwall,noleftwall,
+Cell(47,40): black,nobaggle,notopwall,noleftwall,
+Cell(47,42): black,nobaggle,notopwall,noleftwall,
+Cell(47,44): black,nobaggle,notopwall,noleftwall,
+Cell(47,45): black,nobaggle,notopwall,noleftwall,
+Cell(47,47): black,nobaggle,notopwall,noleftwall,
+Cell(47,49): black,nobaggle,notopwall,noleftwall,
+Cell(47,50): black,nobaggle,notopwall,noleftwall,
+Cell(47,52): black,nobaggle,notopwall,noleftwall,
+Cell(47,53): black,nobaggle,notopwall,noleftwall,
+Cell(47,55): black,nobaggle,notopwall,noleftwall,
+Cell(47,56): black,nobaggle,notopwall,noleftwall,
+Cell(47,59): black,nobaggle,notopwall,noleftwall,
+Cell(48,4): black,nobaggle,notopwall,noleftwall,
+Cell(48,6): black,nobaggle,notopwall,noleftwall,
+Cell(48,8): black,nobaggle,notopwall,noleftwall,
+Cell(48,9): black,nobaggle,notopwall,noleftwall,
+Cell(48,10): black,nobaggle,notopwall,noleftwall,
+Cell(48,12): black,nobaggle,notopwall,noleftwall,
+Cell(48,14): black,nobaggle,notopwall,noleftwall,
+Cell(48,15): black,nobaggle,notopwall,noleftwall,
+Cell(48,16): black,nobaggle,notopwall,noleftwall,
+Cell(48,17): black,nobaggle,notopwall,noleftwall,
+Cell(48,18): black,nobaggle,notopwall,noleftwall,
+Cell(48,19): black,nobaggle,notopwall,noleftwall,
+Cell(48,20): black,nobaggle,notopwall,noleftwall,
+Cell(48,22): black,nobaggle,notopwall,noleftwall,
+Cell(48,24): black,nobaggle,notopwall,noleftwall,
+Cell(48,26): black,nobaggle,notopwall,noleftwall,
+Cell(48,28): black,nobaggle,notopwall,noleftwall,
+Cell(48,29): black,nobaggle,notopwall,noleftwall,
+Cell(48,30): black,nobaggle,notopwall,noleftwall,
+Cell(48,31): black,nobaggle,notopwall,noleftwall,
+Cell(48,32): black,nobaggle,notopwall,noleftwall,
+Cell(48,33): black,nobaggle,notopwall,noleftwall,
+Cell(48,34): black,nobaggle,notopwall,noleftwall,
+Cell(48,35): black,nobaggle,notopwall,noleftwall,
+Cell(48,36): black,nobaggle,notopwall,noleftwall,
+Cell(48,37): black,nobaggle,notopwall,noleftwall,
+Cell(48,38): black,nobaggle,notopwall,noleftwall,
+Cell(48,39): black,nobaggle,notopwall,noleftwall,
+Cell(48,40): black,nobaggle,notopwall,noleftwall,
+Cell(48,41): black,nobaggle,notopwall,noleftwall,
+Cell(48,42): black,nobaggle,notopwall,noleftwall,
+Cell(48,43): black,nobaggle,notopwall,noleftwall,
+Cell(48,45): black,nobaggle,notopwall,noleftwall,
+Cell(48,46): black,nobaggle,notopwall,noleftwall,
+Cell(48,47): black,nobaggle,notopwall,noleftwall,
+Cell(48,48): black,nobaggle,notopwall,noleftwall,
+Cell(48,49): black,nobaggle,notopwall,noleftwall,
+Cell(48,50): black,nobaggle,notopwall,noleftwall,
+Cell(48,51): black,nobaggle,notopwall,noleftwall,
+Cell(48,53): black,nobaggle,notopwall,noleftwall,
+Cell(48,54): black,nobaggle,notopwall,noleftwall,
+Cell(48,55): black,nobaggle,notopwall,noleftwall,
+Cell(48,56): black,nobaggle,notopwall,noleftwall,
+Cell(48,57): black,nobaggle,notopwall,noleftwall,
+Cell(48,58): black,nobaggle,notopwall,noleftwall,
+Cell(48,59): black,nobaggle,notopwall,noleftwall,
+Cell(49,4): black,nobaggle,notopwall,noleftwall,
+Cell(49,6): black,nobaggle,notopwall,noleftwall,
+Cell(49,7): black,nobaggle,notopwall,noleftwall,
+Cell(49,8): black,nobaggle,notopwall,noleftwall,
+Cell(49,10): black,nobaggle,notopwall,noleftwall,
+Cell(49,11): black,nobaggle,notopwall,noleftwall,
+Cell(49,12): black,nobaggle,notopwall,noleftwall,
+Cell(49,13): black,nobaggle,notopwall,noleftwall,
+Cell(49,14): black,nobaggle,notopwall,noleftwall,
+Cell(49,15): black,nobaggle,notopwall,noleftwall,
+Cell(49,16): black,nobaggle,notopwall,noleftwall,
+Cell(49,18): black,nobaggle,notopwall,noleftwall,
+Cell(49,21): black,nobaggle,notopwall,noleftwall,
+Cell(49,23): black,nobaggle,notopwall,noleftwall,
+Cell(49,25): black,nobaggle,notopwall,noleftwall,
+Cell(49,26): black,nobaggle,notopwall,noleftwall,
+Cell(49,27): black,nobaggle,notopwall,noleftwall,
+Cell(49,28): black,nobaggle,notopwall,noleftwall,
+Cell(49,29): black,nobaggle,notopwall,noleftwall,
+Cell(49,30): black,nobaggle,notopwall,noleftwall,
+Cell(49,31): black,nobaggle,notopwall,noleftwall,
+Cell(49,32): black,nobaggle,notopwall,noleftwall,
+Cell(49,33): black,nobaggle,notopwall,noleftwall,
+Cell(49,34): black,nobaggle,notopwall,noleftwall,
+Cell(49,35): black,nobaggle,notopwall,noleftwall,
+Cell(49,36): black,nobaggle,notopwall,noleftwall,
+Cell(49,38): black,nobaggle,notopwall,noleftwall,
+Cell(49,39): black,nobaggle,notopwall,noleftwall,
+Cell(49,40): black,nobaggle,notopwall,noleftwall,
+Cell(49,42): black,nobaggle,notopwall,noleftwall,
+Cell(49,43): black,nobaggle,notopwall,noleftwall,
+Cell(49,45): black,nobaggle,notopwall,noleftwall,
+Cell(49,46): black,nobaggle,notopwall,noleftwall,
+Cell(49,49): black,nobaggle,notopwall,noleftwall,
+Cell(49,50): black,nobaggle,notopwall,noleftwall,
+Cell(49,52): black,nobaggle,notopwall,noleftwall,
+Cell(49,53): black,nobaggle,notopwall,noleftwall,
+Cell(49,55): black,nobaggle,notopwall,noleftwall,
+Cell(49,57): black,nobaggle,notopwall,noleftwall,
+Cell(50,4): black,nobaggle,notopwall,noleftwall,
+Cell(50,5): black,nobaggle,notopwall,noleftwall,
+Cell(50,6): black,nobaggle,notopwall,noleftwall,
+Cell(50,8): black,nobaggle,notopwall,noleftwall,
+Cell(50,9): black,nobaggle,notopwall,noleftwall,
+Cell(50,11): black,nobaggle,notopwall,noleftwall,
+Cell(50,13): black,nobaggle,notopwall,noleftwall,
+Cell(50,14): black,nobaggle,notopwall,noleftwall,
+Cell(50,16): black,nobaggle,notopwall,noleftwall,
+Cell(50,17): black,nobaggle,notopwall,noleftwall,
+Cell(50,18): black,nobaggle,notopwall,noleftwall,
+Cell(50,19): black,nobaggle,notopwall,noleftwall,
+Cell(50,20): black,nobaggle,notopwall,noleftwall,
+Cell(50,21): black,nobaggle,notopwall,noleftwall,
+Cell(50,22): black,nobaggle,notopwall,noleftwall,
+Cell(50,23): black,nobaggle,notopwall,noleftwall,
+Cell(50,24): black,nobaggle,notopwall,noleftwall,
+Cell(50,25): black,nobaggle,notopwall,noleftwall,
+Cell(50,26): black,nobaggle,notopwall,noleftwall,
+Cell(50,28): black,nobaggle,notopwall,noleftwall,
+Cell(50,30): black,nobaggle,notopwall,noleftwall,
+Cell(50,32): black,nobaggle,notopwall,noleftwall,
+Cell(50,34): black,nobaggle,notopwall,noleftwall,
+Cell(50,36): black,nobaggle,notopwall,noleftwall,
+Cell(50,37): black,nobaggle,notopwall,noleftwall,
+Cell(50,38): black,nobaggle,notopwall,noleftwall,
+Cell(50,40): black,nobaggle,notopwall,noleftwall,
+Cell(50,41): black,nobaggle,notopwall,noleftwall,
+Cell(50,43): black,nobaggle,notopwall,noleftwall,
+Cell(50,44): black,nobaggle,notopwall,noleftwall,
+Cell(50,45): black,nobaggle,notopwall,noleftwall,
+Cell(50,46): black,nobaggle,notopwall,noleftwall,
+Cell(50,47): black,nobaggle,notopwall,noleftwall,
+Cell(50,48): black,nobaggle,notopwall,noleftwall,
+Cell(50,49): black,nobaggle,notopwall,noleftwall,
+Cell(50,50): black,nobaggle,notopwall,noleftwall,
+Cell(50,51): black,nobaggle,notopwall,noleftwall,
+Cell(50,53): black,nobaggle,notopwall,noleftwall,
+Cell(50,54): black,nobaggle,notopwall,noleftwall,
+Cell(50,55): black,nobaggle,notopwall,noleftwall,
+Cell(50,56): black,nobaggle,notopwall,noleftwall,
+Cell(50,57): black,nobaggle,notopwall,noleftwall,
+Cell(51,6): black,nobaggle,notopwall,noleftwall,
+Cell(51,8): black,nobaggle,notopwall,noleftwall,
+Cell(51,9): black,nobaggle,notopwall,noleftwall,
+Cell(51,10): black,nobaggle,notopwall,noleftwall,
+Cell(51,12): black,nobaggle,notopwall,noleftwall,
+Cell(51,13): black,nobaggle,notopwall,noleftwall,
+Cell(51,14): black,nobaggle,notopwall,noleftwall,
+Cell(51,15): black,nobaggle,notopwall,noleftwall,
+Cell(51,16): black,nobaggle,notopwall,noleftwall,
+Cell(51,17): black,nobaggle,notopwall,noleftwall,
+Cell(51,18): black,nobaggle,notopwall,noleftwall,
+Cell(51,20): black,nobaggle,notopwall,noleftwall,
+Cell(51,21): black,nobaggle,notopwall,noleftwall,
+Cell(51,22): black,nobaggle,notopwall,noleftwall,
+Cell(51,24): black,nobaggle,notopwall,noleftwall,
+Cell(51,27): black,nobaggle,notopwall,noleftwall,
+Cell(51,29): black,nobaggle,notopwall,noleftwall,
+Cell(51,31): black,nobaggle,notopwall,noleftwall,
+Cell(51,33): black,nobaggle,notopwall,noleftwall,
+Cell(51,35): black,nobaggle,notopwall,noleftwall,
+Cell(51,36): black,nobaggle,notopwall,noleftwall,
+Cell(51,38): black,nobaggle,notopwall,noleftwall,
+Cell(51,39): black,nobaggle,notopwall,noleftwall,
+Cell(51,41): black,nobaggle,notopwall,noleftwall,
+Cell(51,43): black,nobaggle,notopwall,noleftwall,
+Cell(51,45): black,nobaggle,notopwall,noleftwall,
+Cell(51,46): black,nobaggle,notopwall,noleftwall,
+Cell(51,47): black,nobaggle,notopwall,noleftwall,
+Cell(51,48): black,nobaggle,notopwall,noleftwall,
+Cell(51,50): black,nobaggle,notopwall,noleftwall,
+Cell(51,52): black,nobaggle,notopwall,noleftwall,
+Cell(51,53): black,nobaggle,notopwall,noleftwall,
+Cell(51,54): black,nobaggle,notopwall,noleftwall,
+Cell(51,57): black,nobaggle,notopwall,noleftwall,
+Cell(52,6): black,nobaggle,notopwall,noleftwall,
+Cell(52,7): black,nobaggle,notopwall,noleftwall,
+Cell(52,8): black,nobaggle,notopwall,noleftwall,
+Cell(52,10): black,nobaggle,notopwall,noleftwall,
+Cell(52,11): black,nobaggle,notopwall,noleftwall,
+Cell(52,12): black,nobaggle,notopwall,noleftwall,
+Cell(52,14): black,nobaggle,notopwall,noleftwall,
+Cell(52,17): black,nobaggle,notopwall,noleftwall,
+Cell(52,18): black,nobaggle,notopwall,noleftwall,
+Cell(52,19): black,nobaggle,notopwall,noleftwall,
+Cell(52,20): black,nobaggle,notopwall,noleftwall,
+Cell(52,22): black,nobaggle,notopwall,noleftwall,
+Cell(52,23): black,nobaggle,notopwall,noleftwall,
+Cell(52,24): black,nobaggle,notopwall,noleftwall,
+Cell(52,25): black,nobaggle,notopwall,noleftwall,
+Cell(52,26): black,nobaggle,notopwall,noleftwall,
+Cell(52,27): black,nobaggle,notopwall,noleftwall,
+Cell(52,28): black,nobaggle,notopwall,noleftwall,
+Cell(52,29): black,nobaggle,notopwall,noleftwall,
+Cell(52,30): black,nobaggle,notopwall,noleftwall,
+Cell(52,31): black,nobaggle,notopwall,noleftwall,
+Cell(52,32): black,nobaggle,notopwall,noleftwall,
+Cell(52,33): black,nobaggle,notopwall,noleftwall,
+Cell(52,34): black,nobaggle,notopwall,noleftwall,
+Cell(52,35): black,nobaggle,notopwall,noleftwall,
+Cell(52,36): black,nobaggle,notopwall,noleftwall,
+Cell(52,37): black,nobaggle,notopwall,noleftwall,
+Cell(52,38): black,nobaggle,notopwall,noleftwall,
+Cell(52,40): black,nobaggle,notopwall,noleftwall,
+Cell(52,41): black,nobaggle,notopwall,noleftwall,
+Cell(52,42): black,nobaggle,notopwall,noleftwall,
+Cell(52,43): black,nobaggle,notopwall,noleftwall,
+Cell(52,44): black,nobaggle,notopwall,noleftwall,
+Cell(52,45): black,nobaggle,notopwall,noleftwall,
+Cell(52,47): black,nobaggle,notopwall,noleftwall,
+Cell(52,48): black,nobaggle,notopwall,noleftwall,
+Cell(52,49): black,nobaggle,notopwall,noleftwall,
+Cell(52,50): black,nobaggle,notopwall,noleftwall,
+Cell(52,51): black,nobaggle,notopwall,noleftwall,
+Cell(52,53): black,nobaggle,notopwall,noleftwall,
+Cell(52,54): black,nobaggle,notopwall,noleftwall,
+Cell(52,55): black,nobaggle,notopwall,noleftwall,
+Cell(52,56): black,nobaggle,notopwall,noleftwall,
+Cell(52,57): black,nobaggle,notopwall,noleftwall,
+Cell(53,8): black,nobaggle,notopwall,noleftwall,
+Cell(53,10): black,nobaggle,notopwall,noleftwall,
+Cell(53,13): black,nobaggle,notopwall,noleftwall,
+Cell(53,14): black,nobaggle,notopwall,noleftwall,
+Cell(53,15): black,nobaggle,notopwall,noleftwall,
+Cell(53,16): black,nobaggle,notopwall,noleftwall,
+Cell(53,17): black,nobaggle,notopwall,noleftwall,
+Cell(53,18): black,nobaggle,notopwall,noleftwall,
+Cell(53,19): black,nobaggle,notopwall,noleftwall,
+Cell(53,20): black,nobaggle,notopwall,noleftwall,
+Cell(53,22): black,nobaggle,notopwall,noleftwall,
+Cell(53,24): black,nobaggle,notopwall,noleftwall,
+Cell(53,26): black,nobaggle,notopwall,noleftwall,
+Cell(53,27): black,nobaggle,notopwall,noleftwall,
+Cell(53,28): black,nobaggle,notopwall,noleftwall,
+Cell(53,30): black,nobaggle,notopwall,noleftwall,
+Cell(53,31): black,nobaggle,notopwall,noleftwall,
+Cell(53,32): black,nobaggle,notopwall,noleftwall,
+Cell(53,34): black,nobaggle,notopwall,noleftwall,
+Cell(53,37): black,nobaggle,notopwall,noleftwall,
+Cell(53,39): black,nobaggle,notopwall,noleftwall,
+Cell(53,40): black,nobaggle,notopwall,noleftwall,
+Cell(53,43): black,nobaggle,notopwall,noleftwall,
+Cell(53,44): black,nobaggle,notopwall,noleftwall,
+Cell(53,45): black,nobaggle,notopwall,noleftwall,
+Cell(53,46): black,nobaggle,notopwall,noleftwall,
+Cell(53,48): black,nobaggle,notopwall,noleftwall,
+Cell(53,50): black,nobaggle,notopwall,noleftwall,
+Cell(53,51): black,nobaggle,notopwall,noleftwall,
+Cell(53,53): black,nobaggle,notopwall,noleftwall,
+Cell(53,55): black,nobaggle,notopwall,noleftwall,
+Cell(54,8): black,nobaggle,notopwall,noleftwall,
+Cell(54,9): black,nobaggle,notopwall,noleftwall,
+Cell(54,10): black,nobaggle,notopwall,noleftwall,
+Cell(54,11): black,nobaggle,notopwall,noleftwall,
+Cell(54,12): black,nobaggle,notopwall,noleftwall,
+Cell(54,13): black,nobaggle,notopwall,noleftwall,
+Cell(54,14): black,nobaggle,notopwall,noleftwall,
+Cell(54,16): black,nobaggle,notopwall,noleftwall,
+Cell(54,18): black,nobaggle,notopwall,noleftwall,
+Cell(54,20): black,nobaggle,notopwall,noleftwall,
+Cell(54,21): black,nobaggle,notopwall,noleftwall,
+Cell(54,22): black,nobaggle,notopwall,noleftwall,
+Cell(54,23): black,nobaggle,notopwall,noleftwall,
+Cell(54,24): black,nobaggle,notopwall,noleftwall,
+Cell(54,25): black,nobaggle,notopwall,noleftwall,
+Cell(54,26): black,nobaggle,notopwall,noleftwall,
+Cell(54,28): black,nobaggle,notopwall,noleftwall,
+Cell(54,29): black,nobaggle,notopwall,noleftwall,
+Cell(54,30): black,nobaggle,notopwall,noleftwall,
+Cell(54,32): black,nobaggle,notopwall,noleftwall,
+Cell(54,33): black,nobaggle,notopwall,noleftwall,
+Cell(54,34): black,nobaggle,notopwall,noleftwall,
+Cell(54,35): black,nobaggle,notopwall,noleftwall,
+Cell(54,36): black,nobaggle,notopwall,noleftwall,
+Cell(54,37): black,nobaggle,notopwall,noleftwall,
+Cell(54,38): black,nobaggle,notopwall,noleftwall,
+Cell(54,39): black,nobaggle,notopwall,noleftwall,
+Cell(54,40): black,nobaggle,notopwall,noleftwall,
+Cell(54,41): black,nobaggle,notopwall,noleftwall,
+Cell(54,42): black,nobaggle,notopwall,noleftwall,
+Cell(54,43): black,nobaggle,notopwall,noleftwall,
+Cell(54,44): black,nobaggle,notopwall,noleftwall,
+Cell(54,46): black,nobaggle,notopwall,noleftwall,
+Cell(54,47): black,nobaggle,notopwall,noleftwall,
+Cell(54,48): black,nobaggle,notopwall,noleftwall,
+Cell(54,49): black,nobaggle,notopwall,noleftwall,
+Cell(54,51): black,nobaggle,notopwall,noleftwall,
+Cell(54,52): black,nobaggle,notopwall,noleftwall,
+Cell(54,53): black,nobaggle,notopwall,noleftwall,
+Cell(54,54): black,nobaggle,notopwall,noleftwall,
+Cell(54,55): black,nobaggle,notopwall,noleftwall,
+Cell(55,10): black,nobaggle,notopwall,noleftwall,
+Cell(55,12): black,nobaggle,notopwall,noleftwall,
+Cell(55,15): black,nobaggle,notopwall,noleftwall,
+Cell(55,17): black,nobaggle,notopwall,noleftwall,
+Cell(55,18): black,nobaggle,notopwall,noleftwall,
+Cell(55,19): black,nobaggle,notopwall,noleftwall,
+Cell(55,20): black,nobaggle,notopwall,noleftwall,
+Cell(55,21): black,nobaggle,notopwall,noleftwall,
+Cell(55,22): black,nobaggle,notopwall,noleftwall,
+Cell(55,23): black,nobaggle,notopwall,noleftwall,
+Cell(55,24): black,nobaggle,notopwall,noleftwall,
+Cell(55,25): black,nobaggle,notopwall,noleftwall,
+Cell(55,26): black,nobaggle,notopwall,noleftwall,
+Cell(55,28): black,nobaggle,notopwall,noleftwall,
+Cell(55,30): black,nobaggle,notopwall,noleftwall,
+Cell(55,32): black,nobaggle,notopwall,noleftwall,
+Cell(55,34): black,nobaggle,notopwall,noleftwall,
+Cell(55,35): black,nobaggle,notopwall,noleftwall,
+Cell(55,36): black,nobaggle,notopwall,noleftwall,
+Cell(55,38): black,nobaggle,notopwall,noleftwall,
+Cell(55,41): black,nobaggle,notopwall,noleftwall,
+Cell(55,42): black,nobaggle,notopwall,noleftwall,
+Cell(55,43): black,nobaggle,notopwall,noleftwall,
+Cell(55,44): black,nobaggle,notopwall,noleftwall,
+Cell(55,45): black,nobaggle,notopwall,noleftwall,
+Cell(55,46): black,nobaggle,notopwall,noleftwall,
+Cell(55,49): black,nobaggle,notopwall,noleftwall,
+Cell(55,51): black,nobaggle,notopwall,noleftwall,
+Cell(55,53): black,nobaggle,notopwall,noleftwall,
+Cell(56,10): black,nobaggle,notopwall,noleftwall,
+Cell(56,11): black,nobaggle,notopwall,noleftwall,
+Cell(56,12): black,nobaggle,notopwall,noleftwall,
+Cell(56,13): black,nobaggle,notopwall,noleftwall,
+Cell(56,14): black,nobaggle,notopwall,noleftwall,
+Cell(56,15): black,nobaggle,notopwall,noleftwall,
+Cell(56,16): black,nobaggle,notopwall,noleftwall,
+Cell(56,17): black,nobaggle,notopwall,noleftwall,
+Cell(56,18): black,nobaggle,notopwall,noleftwall,
+Cell(56,20): black,nobaggle,notopwall,noleftwall,
+Cell(56,22): black,nobaggle,notopwall,noleftwall,
+Cell(56,24): black,nobaggle,notopwall,noleftwall,
+Cell(56,26): black,nobaggle,notopwall,noleftwall,
+Cell(56,27): black,nobaggle,notopwall,noleftwall,
+Cell(56,28): black,nobaggle,notopwall,noleftwall,
+Cell(56,29): black,nobaggle,notopwall,noleftwall,
+Cell(56,30): black,nobaggle,notopwall,noleftwall,
+Cell(56,31): black,nobaggle,notopwall,noleftwall,
+Cell(56,32): black,nobaggle,notopwall,noleftwall,
+Cell(56,33): black,nobaggle,notopwall,noleftwall,
+Cell(56,34): black,nobaggle,notopwall,noleftwall,
+Cell(56,36): black,nobaggle,notopwall,noleftwall,
+Cell(56,37): black,nobaggle,notopwall,noleftwall,
+Cell(56,38): black,nobaggle,notopwall,noleftwall,
+Cell(56,39): black,nobaggle,notopwall,noleftwall,
+Cell(56,40): black,nobaggle,notopwall,noleftwall,
+Cell(56,41): black,nobaggle,notopwall,noleftwall,
+Cell(56,42): black,nobaggle,notopwall,noleftwall,
+Cell(56,45): black,nobaggle,notopwall,noleftwall,
+Cell(56,46): black,nobaggle,notopwall,noleftwall,
+Cell(56,47): black,nobaggle,notopwall,noleftwall,
+Cell(56,48): black,nobaggle,notopwall,noleftwall,
+Cell(56,49): black,nobaggle,notopwall,noleftwall,
+Cell(56,50): black,nobaggle,notopwall,noleftwall,
+Cell(56,51): black,nobaggle,notopwall,noleftwall,
+Cell(56,52): black,nobaggle,notopwall,noleftwall,
+Cell(56,53): black,nobaggle,notopwall,noleftwall,
+Cell(57,12): black,nobaggle,notopwall,noleftwall,
+Cell(57,13): black,nobaggle,notopwall,noleftwall,
+Cell(57,14): black,nobaggle,notopwall,noleftwall,
+Cell(57,16): black,nobaggle,notopwall,noleftwall,
+Cell(57,19): black,nobaggle,notopwall,noleftwall,
+Cell(57,21): black,nobaggle,notopwall,noleftwall,
+Cell(57,23): black,nobaggle,notopwall,noleftwall,
+Cell(57,24): black,nobaggle,notopwall,noleftwall,
+Cell(57,25): black,nobaggle,notopwall,noleftwall,
+Cell(57,26): black,nobaggle,notopwall,noleftwall,
+Cell(57,27): black,nobaggle,notopwall,noleftwall,
+Cell(57,28): black,nobaggle,notopwall,noleftwall,
+Cell(57,29): black,nobaggle,notopwall,noleftwall,
+Cell(57,30): black,nobaggle,notopwall,noleftwall,
+Cell(57,31): black,nobaggle,notopwall,noleftwall,
+Cell(57,32): black,nobaggle,notopwall,noleftwall,
+Cell(57,33): black,nobaggle,notopwall,noleftwall,
+Cell(57,34): black,nobaggle,notopwall,noleftwall,
+Cell(57,36): black,nobaggle,notopwall,noleftwall,
+Cell(57,39): black,nobaggle,notopwall,noleftwall,
+Cell(57,40): black,nobaggle,notopwall,noleftwall,
+Cell(57,42): black,nobaggle,notopwall,noleftwall,
+Cell(57,43): black,nobaggle,notopwall,noleftwall,
+Cell(57,44): black,nobaggle,notopwall,noleftwall,
+Cell(57,46): black,nobaggle,notopwall,noleftwall,
+Cell(57,48): black,nobaggle,notopwall,noleftwall,
+Cell(57,51): black,nobaggle,notopwall,noleftwall,
+Cell(58,12): black,nobaggle,notopwall,noleftwall,
+Cell(58,14): black,nobaggle,notopwall,noleftwall,
+Cell(58,15): black,nobaggle,notopwall,noleftwall,
+Cell(58,16): black,nobaggle,notopwall,noleftwall,
+Cell(58,17): black,nobaggle,notopwall,noleftwall,
+Cell(58,18): black,nobaggle,notopwall,noleftwall,
+Cell(58,19): black,nobaggle,notopwall,noleftwall,
+Cell(58,20): black,nobaggle,notopwall,noleftwall,
+Cell(58,21): black,nobaggle,notopwall,noleftwall,
+Cell(58,22): black,nobaggle,notopwall,noleftwall,
+Cell(58,23): black,nobaggle,notopwall,noleftwall,
+Cell(58,24): black,nobaggle,notopwall,noleftwall,
+Cell(58,26): black,nobaggle,notopwall,noleftwall,
+Cell(58,28): black,nobaggle,notopwall,noleftwall,
+Cell(58,30): black,nobaggle,notopwall,noleftwall,
+Cell(58,32): black,nobaggle,notopwall,noleftwall,
+Cell(58,34): black,nobaggle,notopwall,noleftwall,
+Cell(58,35): black,nobaggle,notopwall,noleftwall,
+Cell(58,36): black,nobaggle,notopwall,noleftwall,
+Cell(58,37): black,nobaggle,notopwall,noleftwall,
+Cell(58,38): black,nobaggle,notopwall,noleftwall,
+Cell(58,39): black,nobaggle,notopwall,noleftwall,
+Cell(58,40): black,nobaggle,notopwall,noleftwall,
+Cell(58,41): black,nobaggle,notopwall,noleftwall,
+Cell(58,42): black,nobaggle,notopwall,noleftwall,
+Cell(58,44): black,nobaggle,notopwall,noleftwall,
+Cell(58,45): black,nobaggle,notopwall,noleftwall,
+Cell(58,46): black,nobaggle,notopwall,noleftwall,
+Cell(58,47): black,nobaggle,notopwall,noleftwall,
+Cell(58,48): black,nobaggle,notopwall,noleftwall,
+Cell(58,49): black,nobaggle,notopwall,noleftwall,
+Cell(58,50): black,nobaggle,notopwall,noleftwall,
+Cell(58,51): black,nobaggle,notopwall,noleftwall,
+Cell(59,12): black,nobaggle,notopwall,noleftwall,
+Cell(59,14): black,nobaggle,notopwall,noleftwall,
+Cell(59,16): black,nobaggle,notopwall,noleftwall,
+Cell(59,18): black,nobaggle,notopwall,noleftwall,
+Cell(59,19): black,nobaggle,notopwall,noleftwall,
+Cell(59,20): black,nobaggle,notopwall,noleftwall,
+Cell(59,22): black,nobaggle,notopwall,noleftwall,
+Cell(59,25): black,nobaggle,notopwall,noleftwall,
+Cell(59,27): black,nobaggle,notopwall,noleftwall,
+Cell(59,29): black,nobaggle,notopwall,noleftwall,
+Cell(59,31): black,nobaggle,notopwall,noleftwall,
+Cell(59,32): black,nobaggle,notopwall,noleftwall,
+Cell(59,33): black,nobaggle,notopwall,noleftwall,
+Cell(59,34): black,nobaggle,notopwall,noleftwall,
+Cell(59,35): black,nobaggle,notopwall,noleftwall,
+Cell(59,36): black,nobaggle,notopwall,noleftwall,
+Cell(59,37): black,nobaggle,notopwall,noleftwall,
+Cell(59,38): black,nobaggle,notopwall,noleftwall,
+Cell(59,40): black,nobaggle,notopwall,noleftwall,
+Cell(59,41): black,nobaggle,notopwall,noleftwall,
+Cell(59,42): black,nobaggle,notopwall,noleftwall,
+Cell(59,43): black,nobaggle,notopwall,noleftwall,
+Cell(59,44): black,nobaggle,notopwall,noleftwall,
+Cell(59,47): black,nobaggle,notopwall,noleftwall,
+Cell(60,12): black,nobaggle,notopwall,noleftwall,
+Cell(60,13): black,nobaggle,notopwall,noleftwall,
+Cell(60,14): black,nobaggle,notopwall,noleftwall,
+Cell(60,15): black,nobaggle,notopwall,noleftwall,
+Cell(60,16): black,nobaggle,notopwall,noleftwall,
+Cell(60,17): black,nobaggle,notopwall,noleftwall,
+Cell(60,18): black,nobaggle,notopwall,noleftwall,
+Cell(60,20): black,nobaggle,notopwall,noleftwall,
+Cell(60,21): black,nobaggle,notopwall,noleftwall,
+Cell(60,22): black,nobaggle,notopwall,noleftwall,
+Cell(60,23): black,nobaggle,notopwall,noleftwall,
+Cell(60,24): black,nobaggle,notopwall,noleftwall,
+Cell(60,25): black,nobaggle,notopwall,noleftwall,
+Cell(60,26): black,nobaggle,notopwall,noleftwall,
+Cell(60,27): black,nobaggle,notopwall,noleftwall,
+Cell(60,28): black,nobaggle,notopwall,noleftwall,
+Cell(60,29): black,nobaggle,notopwall,noleftwall,
+Cell(60,30): black,nobaggle,notopwall,noleftwall,
+Cell(60,31): black,nobaggle,notopwall,noleftwall,
+Cell(60,32): black,nobaggle,notopwall,noleftwall,
+Cell(60,34): black,nobaggle,notopwall,noleftwall,
+Cell(60,36): black,nobaggle,notopwall,noleftwall,
+Cell(60,38): black,nobaggle,notopwall,noleftwall,
+Cell(60,39): black,nobaggle,notopwall,noleftwall,
+Cell(60,41): black,nobaggle,notopwall,noleftwall,
+Cell(60,42): black,nobaggle,notopwall,noleftwall,
+Cell(60,44): black,nobaggle,notopwall,noleftwall,
+Cell(60,45): black,nobaggle,notopwall,noleftwall,
+Cell(60,46): black,nobaggle,notopwall,noleftwall,
+Cell(60,47): black,nobaggle,notopwall,noleftwall,
+Cell(61,18): black,nobaggle,notopwall,noleftwall,
+Cell(61,20): black,nobaggle,notopwall,noleftwall,
+Cell(61,22): black,nobaggle,notopwall,noleftwall,
+Cell(61,23): black,nobaggle,notopwall,noleftwall,
+Cell(61,24): black,nobaggle,notopwall,noleftwall,
+Cell(61,26): black,nobaggle,notopwall,noleftwall,
+Cell(61,27): black,nobaggle,notopwall,noleftwall,
+Cell(61,28): black,nobaggle,notopwall,noleftwall,
+Cell(61,30): black,nobaggle,notopwall,noleftwall,
+Cell(61,33): black,nobaggle,notopwall,noleftwall,
+Cell(61,35): black,nobaggle,notopwall,noleftwall,
+Cell(61,37): black,nobaggle,notopwall,noleftwall,
+Cell(61,39): black,nobaggle,notopwall,noleftwall,
+Cell(61,40): black,nobaggle,notopwall,noleftwall,
+Cell(61,43): black,nobaggle,notopwall,noleftwall,
+Cell(61,45): black,nobaggle,notopwall,noleftwall,
+Cell(62,18): black,nobaggle,notopwall,noleftwall,
+Cell(62,19): black,nobaggle,notopwall,noleftwall,
+Cell(62,20): black,nobaggle,notopwall,noleftwall,
+Cell(62,21): black,nobaggle,notopwall,noleftwall,
+Cell(62,22): black,nobaggle,notopwall,noleftwall,
+Cell(62,24): black,nobaggle,notopwall,noleftwall,
+Cell(62,25): black,nobaggle,notopwall,noleftwall,
+Cell(62,26): black,nobaggle,notopwall,noleftwall,
+Cell(62,28): black,nobaggle,notopwall,noleftwall,
+Cell(62,29): black,nobaggle,notopwall,noleftwall,
+Cell(62,30): black,nobaggle,notopwall,noleftwall,
+Cell(62,31): black,nobaggle,notopwall,noleftwall,
+Cell(62,32): black,nobaggle,notopwall,noleftwall,
+Cell(62,33): black,nobaggle,notopwall,noleftwall,
+Cell(62,34): black,nobaggle,notopwall,noleftwall,
+Cell(62,35): black,nobaggle,notopwall,noleftwall,
+Cell(62,36): black,nobaggle,notopwall,noleftwall,
+Cell(62,37): black,nobaggle,notopwall,noleftwall,
+Cell(62,38): black,nobaggle,notopwall,noleftwall,
+Cell(62,39): black,nobaggle,notopwall,noleftwall,
+Cell(62,40): black,nobaggle,notopwall,noleftwall,
+Cell(62,41): black,nobaggle,notopwall,noleftwall,
+Cell(62,42): black,nobaggle,notopwall,noleftwall,
+Cell(62,43): black,nobaggle,notopwall,noleftwall,
+Cell(62,44): black,nobaggle,notopwall,noleftwall,
+Cell(62,45): black,nobaggle,notopwall,noleftwall,
+Cell(63,22): black,nobaggle,notopwall,noleftwall,
+Cell(63,24): black,nobaggle,notopwall,noleftwall,
+Cell(63,26): black,nobaggle,notopwall,noleftwall,
+Cell(63,28): black,nobaggle,notopwall,noleftwall,
+Cell(63,30): black,nobaggle,notopwall,noleftwall,
+Cell(63,31): black,nobaggle,notopwall,noleftwall,
+Cell(63,32): black,nobaggle,notopwall,noleftwall,
+Cell(63,34): black,nobaggle,notopwall,noleftwall,
+Cell(63,35): black,nobaggle,notopwall,noleftwall,
+Cell(63,36): black,nobaggle,notopwall,noleftwall,
+Cell(63,38): black,nobaggle,notopwall,noleftwall,
+Cell(63,40): black,nobaggle,notopwall,noleftwall,
+Cell(63,42): black,nobaggle,notopwall,noleftwall,
+Cell(63,45): black,nobaggle,notopwall,noleftwall,
+Cell(64,22): black,nobaggle,notopwall,noleftwall,
+Cell(64,23): black,nobaggle,notopwall,noleftwall,
+Cell(64,24): black,nobaggle,notopwall,noleftwall,
+Cell(64,25): black,nobaggle,notopwall,noleftwall,
+Cell(64,26): black,nobaggle,notopwall,noleftwall,
+Cell(64,27): black,nobaggle,notopwall,noleftwall,
+Cell(64,28): black,nobaggle,notopwall,noleftwall,
+Cell(64,29): black,nobaggle,notopwall,noleftwall,
+Cell(64,30): black,nobaggle,notopwall,noleftwall,
+Cell(64,32): black,nobaggle,notopwall,noleftwall,
+Cell(64,33): black,nobaggle,notopwall,noleftwall,
+Cell(64,34): black,nobaggle,notopwall,noleftwall,
+Cell(64,36): black,nobaggle,notopwall,noleftwall,
+Cell(64,37): black,nobaggle,notopwall,noleftwall,
+Cell(64,38): black,nobaggle,notopwall,noleftwall,
+Cell(64,39): black,nobaggle,notopwall,noleftwall,
+Cell(64,40): black,nobaggle,notopwall,noleftwall,
+Cell(64,41): black,nobaggle,notopwall,noleftwall,
+Cell(64,42): black,nobaggle,notopwall,noleftwall,
+Cell(64,43): black,nobaggle,notopwall,noleftwall,
+Cell(64,44): black,nobaggle,notopwall,noleftwall,
+Cell(64,45): black,nobaggle,notopwall,noleftwall,
+Cell(65,30): black,nobaggle,notopwall,noleftwall,
+Cell(65,32): black,nobaggle,notopwall,noleftwall,
+Cell(65,34): black,nobaggle,notopwall,noleftwall,
+Cell(65,36): black,nobaggle,notopwall,noleftwall,
+Cell(65,39): black,nobaggle,notopwall,noleftwall,
+Cell(66,30): black,nobaggle,notopwall,noleftwall,
+Cell(66,31): black,nobaggle,notopwall,noleftwall,
+Cell(66,32): black,nobaggle,notopwall,noleftwall,
+Cell(66,33): black,nobaggle,notopwall,noleftwall,
+Cell(66,34): black,nobaggle,notopwall,noleftwall,
+Cell(66,35): black,nobaggle,notopwall,noleftwall,
+Cell(66,36): black,nobaggle,notopwall,noleftwall,
+Cell(66,37): black,nobaggle,notopwall,noleftwall,
+Cell(66,38): black,nobaggle,notopwall,noleftwall,
+Cell(66,39): black,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/helloturmite/HelloTurmite-answer2.map b/src/lessons/turmites/helloturmite/HelloTurmite-answer2.map
new file mode 100644
index 0000000..efd37e6
--- /dev/null
+++ b/src/lessons/turmites/helloturmite/HelloTurmite-answer2.map
@@ -0,0 +1,947 @@
+TurmiteWorld: stepped pyramid (4800 steps)
+Size: 65x65
+Buggle(13,38): east,red,white,ant
+Cell(3,54): black,nobaggle,notopwall,noleftwall,
+Cell(3,55): black,nobaggle,notopwall,noleftwall,
+Cell(4,52): black,nobaggle,notopwall,noleftwall,
+Cell(4,53): black,nobaggle,notopwall,noleftwall,
+Cell(4,54): black,nobaggle,notopwall,noleftwall,
+Cell(4,55): black,nobaggle,notopwall,noleftwall,
+Cell(4,56): black,nobaggle,notopwall,noleftwall,
+Cell(4,57): black,nobaggle,notopwall,noleftwall,
+Cell(5,50): black,nobaggle,notopwall,noleftwall,
+Cell(5,51): black,nobaggle,notopwall,noleftwall,
+Cell(5,53): black,nobaggle,notopwall,noleftwall,
+Cell(5,54): black,nobaggle,notopwall,noleftwall,
+Cell(5,55): black,nobaggle,notopwall,noleftwall,
+Cell(6,48): black,nobaggle,notopwall,noleftwall,
+Cell(6,49): black,nobaggle,notopwall,noleftwall,
+Cell(6,51): black,nobaggle,notopwall,noleftwall,
+Cell(6,53): black,nobaggle,notopwall,noleftwall,
+Cell(7,46): black,nobaggle,notopwall,noleftwall,
+Cell(7,47): black,nobaggle,notopwall,noleftwall,
+Cell(7,49): black,nobaggle,notopwall,noleftwall,
+Cell(7,51): black,nobaggle,notopwall,noleftwall,
+Cell(7,53): black,nobaggle,notopwall,noleftwall,
+Cell(8,44): black,nobaggle,notopwall,noleftwall,
+Cell(8,45): black,nobaggle,notopwall,noleftwall,
+Cell(8,47): black,nobaggle,notopwall,noleftwall,
+Cell(8,49): black,nobaggle,notopwall,noleftwall,
+Cell(8,51): black,nobaggle,notopwall,noleftwall,
+Cell(8,53): black,nobaggle,notopwall,noleftwall,
+Cell(9,42): black,nobaggle,notopwall,noleftwall,
+Cell(9,43): black,nobaggle,notopwall,noleftwall,
+Cell(9,45): black,nobaggle,notopwall,noleftwall,
+Cell(9,47): black,nobaggle,notopwall,noleftwall,
+Cell(9,49): black,nobaggle,notopwall,noleftwall,
+Cell(9,51): black,nobaggle,notopwall,noleftwall,
+Cell(9,53): black,nobaggle,notopwall,noleftwall,
+Cell(10,40): black,nobaggle,notopwall,noleftwall,
+Cell(10,41): black,nobaggle,notopwall,noleftwall,
+Cell(10,43): black,nobaggle,notopwall,noleftwall,
+Cell(10,45): black,nobaggle,notopwall,noleftwall,
+Cell(10,47): black,nobaggle,notopwall,noleftwall,
+Cell(10,49): black,nobaggle,notopwall,noleftwall,
+Cell(10,51): black,nobaggle,notopwall,noleftwall,
+Cell(10,53): black,nobaggle,notopwall,noleftwall,
+Cell(11,38): black,nobaggle,notopwall,noleftwall,
+Cell(11,39): black,nobaggle,notopwall,noleftwall,
+Cell(11,41): black,nobaggle,notopwall,noleftwall,
+Cell(11,43): black,nobaggle,notopwall,noleftwall,
+Cell(11,45): black,nobaggle,notopwall,noleftwall,
+Cell(11,47): black,nobaggle,notopwall,noleftwall,
+Cell(11,49): black,nobaggle,notopwall,noleftwall,
+Cell(11,51): black,nobaggle,notopwall,noleftwall,
+Cell(11,53): black,nobaggle,notopwall,noleftwall,
+Cell(12,36): black,nobaggle,notopwall,noleftwall,
+Cell(12,37): black,nobaggle,notopwall,noleftwall,
+Cell(12,39): black,nobaggle,notopwall,noleftwall,
+Cell(12,41): black,nobaggle,notopwall,noleftwall,
+Cell(12,43): black,nobaggle,notopwall,noleftwall,
+Cell(12,45): black,nobaggle,notopwall,noleftwall,
+Cell(12,47): black,nobaggle,notopwall,noleftwall,
+Cell(12,49): black,nobaggle,notopwall,noleftwall,
+Cell(12,51): black,nobaggle,notopwall,noleftwall,
+Cell(12,53): black,nobaggle,notopwall,noleftwall,
+Cell(13,34): black,nobaggle,notopwall,noleftwall,
+Cell(13,35): black,nobaggle,notopwall,noleftwall,
+Cell(13,36): black,nobaggle,notopwall,noleftwall,
+Cell(13,37): black,nobaggle,notopwall,noleftwall,
+Cell(13,39): black,nobaggle,notopwall,noleftwall,
+Cell(13,41): black,nobaggle,notopwall,noleftwall,
+Cell(13,43): black,nobaggle,notopwall,noleftwall,
+Cell(13,45): black,nobaggle,notopwall,noleftwall,
+Cell(13,47): black,nobaggle,notopwall,noleftwall,
+Cell(13,49): black,nobaggle,notopwall,noleftwall,
+Cell(13,51): black,nobaggle,notopwall,noleftwall,
+Cell(13,53): black,nobaggle,notopwall,noleftwall,
+Cell(14,32): black,nobaggle,notopwall,noleftwall,
+Cell(14,33): black,nobaggle,notopwall,noleftwall,
+Cell(14,34): black,nobaggle,notopwall,noleftwall,
+Cell(14,35): black,nobaggle,notopwall,noleftwall,
+Cell(14,37): black,nobaggle,notopwall,noleftwall,
+Cell(14,39): black,nobaggle,notopwall,noleftwall,
+Cell(14,41): black,nobaggle,notopwall,noleftwall,
+Cell(14,43): black,nobaggle,notopwall,noleftwall,
+Cell(14,45): black,nobaggle,notopwall,noleftwall,
+Cell(14,47): black,nobaggle,notopwall,noleftwall,
+Cell(14,49): black,nobaggle,notopwall,noleftwall,
+Cell(14,51): black,nobaggle,notopwall,noleftwall,
+Cell(14,53): black,nobaggle,notopwall,noleftwall,
+Cell(15,30): black,nobaggle,notopwall,noleftwall,
+Cell(15,31): black,nobaggle,notopwall,noleftwall,
+Cell(15,32): black,nobaggle,notopwall,noleftwall,
+Cell(15,33): black,nobaggle,notopwall,noleftwall,
+Cell(15,35): black,nobaggle,notopwall,noleftwall,
+Cell(15,37): black,nobaggle,notopwall,noleftwall,
+Cell(15,39): black,nobaggle,notopwall,noleftwall,
+Cell(15,41): black,nobaggle,notopwall,noleftwall,
+Cell(15,43): black,nobaggle,notopwall,noleftwall,
+Cell(15,45): black,nobaggle,notopwall,noleftwall,
+Cell(15,47): black,nobaggle,notopwall,noleftwall,
+Cell(15,49): black,nobaggle,notopwall,noleftwall,
+Cell(15,51): black,nobaggle,notopwall,noleftwall,
+Cell(15,53): black,nobaggle,notopwall,noleftwall,
+Cell(16,28): black,nobaggle,notopwall,noleftwall,
+Cell(16,29): black,nobaggle,notopwall,noleftwall,
+Cell(16,30): black,nobaggle,notopwall,noleftwall,
+Cell(16,31): black,nobaggle,notopwall,noleftwall,
+Cell(16,33): black,nobaggle,notopwall,noleftwall,
+Cell(16,35): black,nobaggle,notopwall,noleftwall,
+Cell(16,37): black,nobaggle,notopwall,noleftwall,
+Cell(16,39): black,nobaggle,notopwall,noleftwall,
+Cell(16,41): black,nobaggle,notopwall,noleftwall,
+Cell(16,43): black,nobaggle,notopwall,noleftwall,
+Cell(16,45): black,nobaggle,notopwall,noleftwall,
+Cell(16,47): black,nobaggle,notopwall,noleftwall,
+Cell(16,49): black,nobaggle,notopwall,noleftwall,
+Cell(16,51): black,nobaggle,notopwall,noleftwall,
+Cell(16,53): black,nobaggle,notopwall,noleftwall,
+Cell(17,26): black,nobaggle,notopwall,noleftwall,
+Cell(17,27): black,nobaggle,notopwall,noleftwall,
+Cell(17,28): black,nobaggle,notopwall,noleftwall,
+Cell(17,29): black,nobaggle,notopwall,noleftwall,
+Cell(17,31): black,nobaggle,notopwall,noleftwall,
+Cell(17,33): black,nobaggle,notopwall,noleftwall,
+Cell(17,35): black,nobaggle,notopwall,noleftwall,
+Cell(17,37): black,nobaggle,notopwall,noleftwall,
+Cell(17,39): black,nobaggle,notopwall,noleftwall,
+Cell(17,41): black,nobaggle,notopwall,noleftwall,
+Cell(17,43): black,nobaggle,notopwall,noleftwall,
+Cell(17,45): black,nobaggle,notopwall,noleftwall,
+Cell(17,47): black,nobaggle,notopwall,noleftwall,
+Cell(17,49): black,nobaggle,notopwall,noleftwall,
+Cell(17,51): black,nobaggle,notopwall,noleftwall,
+Cell(17,53): black,nobaggle,notopwall,noleftwall,
+Cell(18,24): black,nobaggle,notopwall,noleftwall,
+Cell(18,25): black,nobaggle,notopwall,noleftwall,
+Cell(18,26): black,nobaggle,notopwall,noleftwall,
+Cell(18,27): black,nobaggle,notopwall,noleftwall,
+Cell(18,29): black,nobaggle,notopwall,noleftwall,
+Cell(18,31): black,nobaggle,notopwall,noleftwall,
+Cell(18,33): black,nobaggle,notopwall,noleftwall,
+Cell(18,35): black,nobaggle,notopwall,noleftwall,
+Cell(18,37): black,nobaggle,notopwall,noleftwall,
+Cell(18,39): black,nobaggle,notopwall,noleftwall,
+Cell(18,41): black,nobaggle,notopwall,noleftwall,
+Cell(18,43): black,nobaggle,notopwall,noleftwall,
+Cell(18,45): black,nobaggle,notopwall,noleftwall,
+Cell(18,47): black,nobaggle,notopwall,noleftwall,
+Cell(18,49): black,nobaggle,notopwall,noleftwall,
+Cell(18,51): black,nobaggle,notopwall,noleftwall,
+Cell(18,53): black,nobaggle,notopwall,noleftwall,
+Cell(19,22): black,nobaggle,notopwall,noleftwall,
+Cell(19,23): black,nobaggle,notopwall,noleftwall,
+Cell(19,24): black,nobaggle,notopwall,noleftwall,
+Cell(19,25): black,nobaggle,notopwall,noleftwall,
+Cell(19,27): black,nobaggle,notopwall,noleftwall,
+Cell(19,29): black,nobaggle,notopwall,noleftwall,
+Cell(19,31): black,nobaggle,notopwall,noleftwall,
+Cell(19,33): black,nobaggle,notopwall,noleftwall,
+Cell(19,35): black,nobaggle,notopwall,noleftwall,
+Cell(19,37): black,nobaggle,notopwall,noleftwall,
+Cell(19,39): black,nobaggle,notopwall,noleftwall,
+Cell(19,41): black,nobaggle,notopwall,noleftwall,
+Cell(19,43): black,nobaggle,notopwall,noleftwall,
+Cell(19,45): black,nobaggle,notopwall,noleftwall,
+Cell(19,47): black,nobaggle,notopwall,noleftwall,
+Cell(19,49): black,nobaggle,notopwall,noleftwall,
+Cell(19,51): black,nobaggle,notopwall,noleftwall,
+Cell(19,53): black,nobaggle,notopwall,noleftwall,
+Cell(20,20): black,nobaggle,notopwall,noleftwall,
+Cell(20,21): black,nobaggle,notopwall,noleftwall,
+Cell(20,22): black,nobaggle,notopwall,noleftwall,
+Cell(20,23): black,nobaggle,notopwall,noleftwall,
+Cell(20,25): black,nobaggle,notopwall,noleftwall,
+Cell(20,27): black,nobaggle,notopwall,noleftwall,
+Cell(20,29): black,nobaggle,notopwall,noleftwall,
+Cell(20,31): black,nobaggle,notopwall,noleftwall,
+Cell(20,33): black,nobaggle,notopwall,noleftwall,
+Cell(20,35): black,nobaggle,notopwall,noleftwall,
+Cell(20,37): black,nobaggle,notopwall,noleftwall,
+Cell(20,39): black,nobaggle,notopwall,noleftwall,
+Cell(20,41): black,nobaggle,notopwall,noleftwall,
+Cell(20,43): black,nobaggle,notopwall,noleftwall,
+Cell(20,45): black,nobaggle,notopwall,noleftwall,
+Cell(20,47): black,nobaggle,notopwall,noleftwall,
+Cell(20,49): black,nobaggle,notopwall,noleftwall,
+Cell(20,51): black,nobaggle,notopwall,noleftwall,
+Cell(20,53): black,nobaggle,notopwall,noleftwall,
+Cell(21,18): black,nobaggle,notopwall,noleftwall,
+Cell(21,19): black,nobaggle,notopwall,noleftwall,
+Cell(21,20): black,nobaggle,notopwall,noleftwall,
+Cell(21,21): black,nobaggle,notopwall,noleftwall,
+Cell(21,23): black,nobaggle,notopwall,noleftwall,
+Cell(21,25): black,nobaggle,notopwall,noleftwall,
+Cell(21,27): black,nobaggle,notopwall,noleftwall,
+Cell(21,29): black,nobaggle,notopwall,noleftwall,
+Cell(21,31): black,nobaggle,notopwall,noleftwall,
+Cell(21,33): black,nobaggle,notopwall,noleftwall,
+Cell(21,35): black,nobaggle,notopwall,noleftwall,
+Cell(21,37): black,nobaggle,notopwall,noleftwall,
+Cell(21,39): black,nobaggle,notopwall,noleftwall,
+Cell(21,41): black,nobaggle,notopwall,noleftwall,
+Cell(21,43): black,nobaggle,notopwall,noleftwall,
+Cell(21,45): black,nobaggle,notopwall,noleftwall,
+Cell(21,47): black,nobaggle,notopwall,noleftwall,
+Cell(21,49): black,nobaggle,notopwall,noleftwall,
+Cell(21,51): black,nobaggle,notopwall,noleftwall,
+Cell(21,53): black,nobaggle,notopwall,noleftwall,
+Cell(22,16): black,nobaggle,notopwall,noleftwall,
+Cell(22,17): black,nobaggle,notopwall,noleftwall,
+Cell(22,18): black,nobaggle,notopwall,noleftwall,
+Cell(22,19): black,nobaggle,notopwall,noleftwall,
+Cell(22,21): black,nobaggle,notopwall,noleftwall,
+Cell(22,23): black,nobaggle,notopwall,noleftwall,
+Cell(22,25): black,nobaggle,notopwall,noleftwall,
+Cell(22,27): black,nobaggle,notopwall,noleftwall,
+Cell(22,29): black,nobaggle,notopwall,noleftwall,
+Cell(22,31): black,nobaggle,notopwall,noleftwall,
+Cell(22,33): black,nobaggle,notopwall,noleftwall,
+Cell(22,35): black,nobaggle,notopwall,noleftwall,
+Cell(22,37): black,nobaggle,notopwall,noleftwall,
+Cell(22,39): black,nobaggle,notopwall,noleftwall,
+Cell(22,41): black,nobaggle,notopwall,noleftwall,
+Cell(22,43): black,nobaggle,notopwall,noleftwall,
+Cell(22,45): black,nobaggle,notopwall,noleftwall,
+Cell(22,47): black,nobaggle,notopwall,noleftwall,
+Cell(22,49): black,nobaggle,notopwall,noleftwall,
+Cell(22,51): black,nobaggle,notopwall,noleftwall,
+Cell(22,53): black,nobaggle,notopwall,noleftwall,
+Cell(23,14): black,nobaggle,notopwall,noleftwall,
+Cell(23,15): black,nobaggle,notopwall,noleftwall,
+Cell(23,16): black,nobaggle,notopwall,noleftwall,
+Cell(23,17): black,nobaggle,notopwall,noleftwall,
+Cell(23,19): black,nobaggle,notopwall,noleftwall,
+Cell(23,21): black,nobaggle,notopwall,noleftwall,
+Cell(23,23): black,nobaggle,notopwall,noleftwall,
+Cell(23,25): black,nobaggle,notopwall,noleftwall,
+Cell(23,27): black,nobaggle,notopwall,noleftwall,
+Cell(23,29): black,nobaggle,notopwall,noleftwall,
+Cell(23,31): black,nobaggle,notopwall,noleftwall,
+Cell(23,33): black,nobaggle,notopwall,noleftwall,
+Cell(23,35): black,nobaggle,notopwall,noleftwall,
+Cell(23,37): black,nobaggle,notopwall,noleftwall,
+Cell(23,39): black,nobaggle,notopwall,noleftwall,
+Cell(23,41): black,nobaggle,notopwall,noleftwall,
+Cell(23,43): black,nobaggle,notopwall,noleftwall,
+Cell(23,45): black,nobaggle,notopwall,noleftwall,
+Cell(23,47): black,nobaggle,notopwall,noleftwall,
+Cell(23,49): black,nobaggle,notopwall,noleftwall,
+Cell(23,51): black,nobaggle,notopwall,noleftwall,
+Cell(23,53): black,nobaggle,notopwall,noleftwall,
+Cell(24,12): black,nobaggle,notopwall,noleftwall,
+Cell(24,13): black,nobaggle,notopwall,noleftwall,
+Cell(24,14): black,nobaggle,notopwall,noleftwall,
+Cell(24,15): black,nobaggle,notopwall,noleftwall,
+Cell(24,17): black,nobaggle,notopwall,noleftwall,
+Cell(24,19): black,nobaggle,notopwall,noleftwall,
+Cell(24,21): black,nobaggle,notopwall,noleftwall,
+Cell(24,23): black,nobaggle,notopwall,noleftwall,
+Cell(24,25): black,nobaggle,notopwall,noleftwall,
+Cell(24,27): black,nobaggle,notopwall,noleftwall,
+Cell(24,29): black,nobaggle,notopwall,noleftwall,
+Cell(24,31): black,nobaggle,notopwall,noleftwall,
+Cell(24,33): black,nobaggle,notopwall,noleftwall,
+Cell(24,35): black,nobaggle,notopwall,noleftwall,
+Cell(24,37): black,nobaggle,notopwall,noleftwall,
+Cell(24,39): black,nobaggle,notopwall,noleftwall,
+Cell(24,41): black,nobaggle,notopwall,noleftwall,
+Cell(24,43): black,nobaggle,notopwall,noleftwall,
+Cell(24,45): black,nobaggle,notopwall,noleftwall,
+Cell(24,47): black,nobaggle,notopwall,noleftwall,
+Cell(24,49): black,nobaggle,notopwall,noleftwall,
+Cell(24,51): black,nobaggle,notopwall,noleftwall,
+Cell(24,53): black,nobaggle,notopwall,noleftwall,
+Cell(25,10): black,nobaggle,notopwall,noleftwall,
+Cell(25,11): black,nobaggle,notopwall,noleftwall,
+Cell(25,12): black,nobaggle,notopwall,noleftwall,
+Cell(25,13): black,nobaggle,notopwall,noleftwall,
+Cell(25,15): black,nobaggle,notopwall,noleftwall,
+Cell(25,17): black,nobaggle,notopwall,noleftwall,
+Cell(25,19): black,nobaggle,notopwall,noleftwall,
+Cell(25,21): black,nobaggle,notopwall,noleftwall,
+Cell(25,23): black,nobaggle,notopwall,noleftwall,
+Cell(25,25): black,nobaggle,notopwall,noleftwall,
+Cell(25,27): black,nobaggle,notopwall,noleftwall,
+Cell(25,29): black,nobaggle,notopwall,noleftwall,
+Cell(25,31): black,nobaggle,notopwall,noleftwall,
+Cell(25,33): black,nobaggle,notopwall,noleftwall,
+Cell(25,35): black,nobaggle,notopwall,noleftwall,
+Cell(25,37): black,nobaggle,notopwall,noleftwall,
+Cell(25,39): black,nobaggle,notopwall,noleftwall,
+Cell(25,41): black,nobaggle,notopwall,noleftwall,
+Cell(25,43): black,nobaggle,notopwall,noleftwall,
+Cell(25,45): black,nobaggle,notopwall,noleftwall,
+Cell(25,47): black,nobaggle,notopwall,noleftwall,
+Cell(25,49): black,nobaggle,notopwall,noleftwall,
+Cell(25,51): black,nobaggle,notopwall,noleftwall,
+Cell(25,53): black,nobaggle,notopwall,noleftwall,
+Cell(26,8): black,nobaggle,notopwall,noleftwall,
+Cell(26,9): black,nobaggle,notopwall,noleftwall,
+Cell(26,10): black,nobaggle,notopwall,noleftwall,
+Cell(26,11): black,nobaggle,notopwall,noleftwall,
+Cell(26,13): black,nobaggle,notopwall,noleftwall,
+Cell(26,15): black,nobaggle,notopwall,noleftwall,
+Cell(26,17): black,nobaggle,notopwall,noleftwall,
+Cell(26,19): black,nobaggle,notopwall,noleftwall,
+Cell(26,21): black,nobaggle,notopwall,noleftwall,
+Cell(26,23): black,nobaggle,notopwall,noleftwall,
+Cell(26,25): black,nobaggle,notopwall,noleftwall,
+Cell(26,27): black,nobaggle,notopwall,noleftwall,
+Cell(26,29): black,nobaggle,notopwall,noleftwall,
+Cell(26,31): black,nobaggle,notopwall,noleftwall,
+Cell(26,33): black,nobaggle,notopwall,noleftwall,
+Cell(26,35): black,nobaggle,notopwall,noleftwall,
+Cell(26,37): black,nobaggle,notopwall,noleftwall,
+Cell(26,39): black,nobaggle,notopwall,noleftwall,
+Cell(26,41): black,nobaggle,notopwall,noleftwall,
+Cell(26,43): black,nobaggle,notopwall,noleftwall,
+Cell(26,45): black,nobaggle,notopwall,noleftwall,
+Cell(26,47): black,nobaggle,notopwall,noleftwall,
+Cell(26,49): black,nobaggle,notopwall,noleftwall,
+Cell(26,51): black,nobaggle,notopwall,noleftwall,
+Cell(26,53): black,nobaggle,notopwall,noleftwall,
+Cell(27,6): black,nobaggle,notopwall,noleftwall,
+Cell(27,7): black,nobaggle,notopwall,noleftwall,
+Cell(27,8): black,nobaggle,notopwall,noleftwall,
+Cell(27,9): black,nobaggle,notopwall,noleftwall,
+Cell(27,11): black,nobaggle,notopwall,noleftwall,
+Cell(27,13): black,nobaggle,notopwall,noleftwall,
+Cell(27,15): black,nobaggle,notopwall,noleftwall,
+Cell(27,17): black,nobaggle,notopwall,noleftwall,
+Cell(27,19): black,nobaggle,notopwall,noleftwall,
+Cell(27,21): black,nobaggle,notopwall,noleftwall,
+Cell(27,23): black,nobaggle,notopwall,noleftwall,
+Cell(27,25): black,nobaggle,notopwall,noleftwall,
+Cell(27,27): black,nobaggle,notopwall,noleftwall,
+Cell(27,29): black,nobaggle,notopwall,noleftwall,
+Cell(27,31): black,nobaggle,notopwall,noleftwall,
+Cell(27,33): black,nobaggle,notopwall,noleftwall,
+Cell(27,35): black,nobaggle,notopwall,noleftwall,
+Cell(27,37): black,nobaggle,notopwall,noleftwall,
+Cell(27,39): black,nobaggle,notopwall,noleftwall,
+Cell(27,41): black,nobaggle,notopwall,noleftwall,
+Cell(27,43): black,nobaggle,notopwall,noleftwall,
+Cell(27,45): black,nobaggle,notopwall,noleftwall,
+Cell(27,47): black,nobaggle,notopwall,noleftwall,
+Cell(27,49): black,nobaggle,notopwall,noleftwall,
+Cell(27,51): black,nobaggle,notopwall,noleftwall,
+Cell(27,53): black,nobaggle,notopwall,noleftwall,
+Cell(28,4): black,nobaggle,notopwall,noleftwall,
+Cell(28,5): black,nobaggle,notopwall,noleftwall,
+Cell(28,6): black,nobaggle,notopwall,noleftwall,
+Cell(28,7): black,nobaggle,notopwall,noleftwall,
+Cell(28,9): black,nobaggle,notopwall,noleftwall,
+Cell(28,11): black,nobaggle,notopwall,noleftwall,
+Cell(28,13): black,nobaggle,notopwall,noleftwall,
+Cell(28,15): black,nobaggle,notopwall,noleftwall,
+Cell(28,17): black,nobaggle,notopwall,noleftwall,
+Cell(28,19): black,nobaggle,notopwall,noleftwall,
+Cell(28,21): black,nobaggle,notopwall,noleftwall,
+Cell(28,23): black,nobaggle,notopwall,noleftwall,
+Cell(28,25): black,nobaggle,notopwall,noleftwall,
+Cell(28,27): black,nobaggle,notopwall,noleftwall,
+Cell(28,29): black,nobaggle,notopwall,noleftwall,
+Cell(28,31): black,nobaggle,notopwall,noleftwall,
+Cell(28,33): black,nobaggle,notopwall,noleftwall,
+Cell(28,35): black,nobaggle,notopwall,noleftwall,
+Cell(28,37): black,nobaggle,notopwall,noleftwall,
+Cell(28,39): black,nobaggle,notopwall,noleftwall,
+Cell(28,41): black,nobaggle,notopwall,noleftwall,
+Cell(28,43): black,nobaggle,notopwall,noleftwall,
+Cell(28,45): black,nobaggle,notopwall,noleftwall,
+Cell(28,47): black,nobaggle,notopwall,noleftwall,
+Cell(28,49): black,nobaggle,notopwall,noleftwall,
+Cell(28,51): black,nobaggle,notopwall,noleftwall,
+Cell(28,53): black,nobaggle,notopwall,noleftwall,
+Cell(29,2): black,nobaggle,notopwall,noleftwall,
+Cell(29,3): black,nobaggle,notopwall,noleftwall,
+Cell(29,4): black,nobaggle,notopwall,noleftwall,
+Cell(29,5): black,nobaggle,notopwall,noleftwall,
+Cell(29,7): black,nobaggle,notopwall,noleftwall,
+Cell(29,9): black,nobaggle,notopwall,noleftwall,
+Cell(29,11): black,nobaggle,notopwall,noleftwall,
+Cell(29,13): black,nobaggle,notopwall,noleftwall,
+Cell(29,15): black,nobaggle,notopwall,noleftwall,
+Cell(29,17): black,nobaggle,notopwall,noleftwall,
+Cell(29,19): black,nobaggle,notopwall,noleftwall,
+Cell(29,21): black,nobaggle,notopwall,noleftwall,
+Cell(29,23): black,nobaggle,notopwall,noleftwall,
+Cell(29,25): black,nobaggle,notopwall,noleftwall,
+Cell(29,27): black,nobaggle,notopwall,noleftwall,
+Cell(29,29): black,nobaggle,notopwall,noleftwall,
+Cell(29,31): black,nobaggle,notopwall,noleftwall,
+Cell(29,33): black,nobaggle,notopwall,noleftwall,
+Cell(29,35): black,nobaggle,notopwall,noleftwall,
+Cell(29,37): black,nobaggle,notopwall,noleftwall,
+Cell(29,39): black,nobaggle,notopwall,noleftwall,
+Cell(29,41): black,nobaggle,notopwall,noleftwall,
+Cell(29,43): black,nobaggle,notopwall,noleftwall,
+Cell(29,45): black,nobaggle,notopwall,noleftwall,
+Cell(29,47): black,nobaggle,notopwall,noleftwall,
+Cell(29,49): black,nobaggle,notopwall,noleftwall,
+Cell(29,51): black,nobaggle,notopwall,noleftwall,
+Cell(29,53): black,nobaggle,notopwall,noleftwall,
+Cell(30,2): black,nobaggle,notopwall,noleftwall,
+Cell(30,3): black,nobaggle,notopwall,noleftwall,
+Cell(30,5): black,nobaggle,notopwall,noleftwall,
+Cell(30,7): black,nobaggle,notopwall,noleftwall,
+Cell(30,9): black,nobaggle,notopwall,noleftwall,
+Cell(30,11): black,nobaggle,notopwall,noleftwall,
+Cell(30,13): black,nobaggle,notopwall,noleftwall,
+Cell(30,15): black,nobaggle,notopwall,noleftwall,
+Cell(30,17): black,nobaggle,notopwall,noleftwall,
+Cell(30,19): black,nobaggle,notopwall,noleftwall,
+Cell(30,21): black,nobaggle,notopwall,noleftwall,
+Cell(30,23): black,nobaggle,notopwall,noleftwall,
+Cell(30,25): black,nobaggle,notopwall,noleftwall,
+Cell(30,27): black,nobaggle,notopwall,noleftwall,
+Cell(30,29): black,nobaggle,notopwall,noleftwall,
+Cell(30,31): black,nobaggle,notopwall,noleftwall,
+Cell(30,33): black,nobaggle,notopwall,noleftwall,
+Cell(30,35): black,nobaggle,notopwall,noleftwall,
+Cell(30,37): black,nobaggle,notopwall,noleftwall,
+Cell(30,39): black,nobaggle,notopwall,noleftwall,
+Cell(30,41): black,nobaggle,notopwall,noleftwall,
+Cell(30,43): black,nobaggle,notopwall,noleftwall,
+Cell(30,45): black,nobaggle,notopwall,noleftwall,
+Cell(30,47): black,nobaggle,notopwall,noleftwall,
+Cell(30,49): black,nobaggle,notopwall,noleftwall,
+Cell(30,51): black,nobaggle,notopwall,noleftwall,
+Cell(30,53): black,nobaggle,notopwall,noleftwall,
+Cell(31,1): black,nobaggle,notopwall,noleftwall,
+Cell(31,2): black,nobaggle,notopwall,noleftwall,
+Cell(31,5): black,nobaggle,notopwall,noleftwall,
+Cell(31,7): black,nobaggle,notopwall,noleftwall,
+Cell(31,9): black,nobaggle,notopwall,noleftwall,
+Cell(31,11): black,nobaggle,notopwall,noleftwall,
+Cell(31,13): black,nobaggle,notopwall,noleftwall,
+Cell(31,15): black,nobaggle,notopwall,noleftwall,
+Cell(31,17): black,nobaggle,notopwall,noleftwall,
+Cell(31,19): black,nobaggle,notopwall,noleftwall,
+Cell(31,21): black,nobaggle,notopwall,noleftwall,
+Cell(31,23): black,nobaggle,notopwall,noleftwall,
+Cell(31,25): black,nobaggle,notopwall,noleftwall,
+Cell(31,27): black,nobaggle,notopwall,noleftwall,
+Cell(31,29): black,nobaggle,notopwall,noleftwall,
+Cell(31,31): black,nobaggle,notopwall,noleftwall,
+Cell(31,33): black,nobaggle,notopwall,noleftwall,
+Cell(31,35): black,nobaggle,notopwall,noleftwall,
+Cell(31,37): black,nobaggle,notopwall,noleftwall,
+Cell(31,39): black,nobaggle,notopwall,noleftwall,
+Cell(31,41): black,nobaggle,notopwall,noleftwall,
+Cell(31,43): black,nobaggle,notopwall,noleftwall,
+Cell(31,45): black,nobaggle,notopwall,noleftwall,
+Cell(31,47): black,nobaggle,notopwall,noleftwall,
+Cell(31,49): black,nobaggle,notopwall,noleftwall,
+Cell(31,51): black,nobaggle,notopwall,noleftwall,
+Cell(31,53): black,nobaggle,notopwall,noleftwall,
+Cell(32,1): black,nobaggle,notopwall,noleftwall,
+Cell(32,2): black,nobaggle,notopwall,noleftwall,
+Cell(32,5): black,nobaggle,notopwall,noleftwall,
+Cell(32,6): black,nobaggle,notopwall,noleftwall,
+Cell(32,7): black,nobaggle,notopwall,noleftwall,
+Cell(32,9): black,nobaggle,notopwall,noleftwall,
+Cell(32,11): black,nobaggle,notopwall,noleftwall,
+Cell(32,13): black,nobaggle,notopwall,noleftwall,
+Cell(32,15): black,nobaggle,notopwall,noleftwall,
+Cell(32,17): black,nobaggle,notopwall,noleftwall,
+Cell(32,19): black,nobaggle,notopwall,noleftwall,
+Cell(32,21): black,nobaggle,notopwall,noleftwall,
+Cell(32,23): black,nobaggle,notopwall,noleftwall,
+Cell(32,25): black,nobaggle,notopwall,noleftwall,
+Cell(32,27): black,nobaggle,notopwall,noleftwall,
+Cell(32,29): black,nobaggle,notopwall,noleftwall,
+Cell(32,31): black,nobaggle,notopwall,noleftwall,
+Cell(32,33): black,nobaggle,notopwall,noleftwall,
+Cell(32,35): black,nobaggle,notopwall,noleftwall,
+Cell(32,37): black,nobaggle,notopwall,noleftwall,
+Cell(32,39): black,nobaggle,notopwall,noleftwall,
+Cell(32,41): black,nobaggle,notopwall,noleftwall,
+Cell(32,43): black,nobaggle,notopwall,noleftwall,
+Cell(32,45): black,nobaggle,notopwall,noleftwall,
+Cell(32,47): black,nobaggle,notopwall,noleftwall,
+Cell(32,49): black,nobaggle,notopwall,noleftwall,
+Cell(32,51): black,nobaggle,notopwall,noleftwall,
+Cell(32,53): black,nobaggle,notopwall,noleftwall,
+Cell(33,3): black,nobaggle,notopwall,noleftwall,
+Cell(33,4): black,nobaggle,notopwall,noleftwall,
+Cell(33,7): black,nobaggle,notopwall,noleftwall,
+Cell(33,8): black,nobaggle,notopwall,noleftwall,
+Cell(33,9): black,nobaggle,notopwall,noleftwall,
+Cell(33,11): black,nobaggle,notopwall,noleftwall,
+Cell(33,13): black,nobaggle,notopwall,noleftwall,
+Cell(33,15): black,nobaggle,notopwall,noleftwall,
+Cell(33,17): black,nobaggle,notopwall,noleftwall,
+Cell(33,19): black,nobaggle,notopwall,noleftwall,
+Cell(33,21): black,nobaggle,notopwall,noleftwall,
+Cell(33,23): black,nobaggle,notopwall,noleftwall,
+Cell(33,25): black,nobaggle,notopwall,noleftwall,
+Cell(33,27): black,nobaggle,notopwall,noleftwall,
+Cell(33,29): black,nobaggle,notopwall,noleftwall,
+Cell(33,31): black,nobaggle,notopwall,noleftwall,
+Cell(33,33): black,nobaggle,notopwall,noleftwall,
+Cell(33,35): black,nobaggle,notopwall,noleftwall,
+Cell(33,37): black,nobaggle,notopwall,noleftwall,
+Cell(33,39): black,nobaggle,notopwall,noleftwall,
+Cell(33,41): black,nobaggle,notopwall,noleftwall,
+Cell(33,43): black,nobaggle,notopwall,noleftwall,
+Cell(33,45): black,nobaggle,notopwall,noleftwall,
+Cell(33,47): black,nobaggle,notopwall,noleftwall,
+Cell(33,49): black,nobaggle,notopwall,noleftwall,
+Cell(33,51): black,nobaggle,notopwall,noleftwall,
+Cell(33,53): black,nobaggle,notopwall,noleftwall,
+Cell(34,4): black,nobaggle,notopwall,noleftwall,
+Cell(34,5): black,nobaggle,notopwall,noleftwall,
+Cell(34,9): black,nobaggle,notopwall,noleftwall,
+Cell(34,10): black,nobaggle,notopwall,noleftwall,
+Cell(34,11): black,nobaggle,notopwall,noleftwall,
+Cell(34,13): black,nobaggle,notopwall,noleftwall,
+Cell(34,15): black,nobaggle,notopwall,noleftwall,
+Cell(34,17): black,nobaggle,notopwall,noleftwall,
+Cell(34,19): black,nobaggle,notopwall,noleftwall,
+Cell(34,21): black,nobaggle,notopwall,noleftwall,
+Cell(34,23): black,nobaggle,notopwall,noleftwall,
+Cell(34,25): black,nobaggle,notopwall,noleftwall,
+Cell(34,27): black,nobaggle,notopwall,noleftwall,
+Cell(34,29): black,nobaggle,notopwall,noleftwall,
+Cell(34,31): black,nobaggle,notopwall,noleftwall,
+Cell(34,33): black,nobaggle,notopwall,noleftwall,
+Cell(34,35): black,nobaggle,notopwall,noleftwall,
+Cell(34,37): black,nobaggle,notopwall,noleftwall,
+Cell(34,39): black,nobaggle,notopwall,noleftwall,
+Cell(34,41): black,nobaggle,notopwall,noleftwall,
+Cell(34,43): black,nobaggle,notopwall,noleftwall,
+Cell(34,45): black,nobaggle,notopwall,noleftwall,
+Cell(34,47): black,nobaggle,notopwall,noleftwall,
+Cell(34,49): black,nobaggle,notopwall,noleftwall,
+Cell(34,51): black,nobaggle,notopwall,noleftwall,
+Cell(34,53): black,nobaggle,notopwall,noleftwall,
+Cell(35,4): black,nobaggle,notopwall,noleftwall,
+Cell(35,5): black,nobaggle,notopwall,noleftwall,
+Cell(35,6): black,nobaggle,notopwall,noleftwall,
+Cell(35,7): black,nobaggle,notopwall,noleftwall,
+Cell(35,11): black,nobaggle,notopwall,noleftwall,
+Cell(35,12): black,nobaggle,notopwall,noleftwall,
+Cell(35,13): black,nobaggle,notopwall,noleftwall,
+Cell(35,15): black,nobaggle,notopwall,noleftwall,
+Cell(35,17): black,nobaggle,notopwall,noleftwall,
+Cell(35,19): black,nobaggle,notopwall,noleftwall,
+Cell(35,21): black,nobaggle,notopwall,noleftwall,
+Cell(35,23): black,nobaggle,notopwall,noleftwall,
+Cell(35,25): black,nobaggle,notopwall,noleftwall,
+Cell(35,27): black,nobaggle,notopwall,noleftwall,
+Cell(35,29): black,nobaggle,notopwall,noleftwall,
+Cell(35,31): black,nobaggle,notopwall,noleftwall,
+Cell(35,33): black,nobaggle,notopwall,noleftwall,
+Cell(35,35): black,nobaggle,notopwall,noleftwall,
+Cell(35,37): black,nobaggle,notopwall,noleftwall,
+Cell(35,39): black,nobaggle,notopwall,noleftwall,
+Cell(35,41): black,nobaggle,notopwall,noleftwall,
+Cell(35,43): black,nobaggle,notopwall,noleftwall,
+Cell(35,45): black,nobaggle,notopwall,noleftwall,
+Cell(35,47): black,nobaggle,notopwall,noleftwall,
+Cell(35,49): black,nobaggle,notopwall,noleftwall,
+Cell(35,51): black,nobaggle,notopwall,noleftwall,
+Cell(35,53): black,nobaggle,notopwall,noleftwall,
+Cell(36,6): black,nobaggle,notopwall,noleftwall,
+Cell(36,7): black,nobaggle,notopwall,noleftwall,
+Cell(36,8): black,nobaggle,notopwall,noleftwall,
+Cell(36,9): black,nobaggle,notopwall,noleftwall,
+Cell(36,13): black,nobaggle,notopwall,noleftwall,
+Cell(36,14): black,nobaggle,notopwall,noleftwall,
+Cell(36,15): black,nobaggle,notopwall,noleftwall,
+Cell(36,17): black,nobaggle,notopwall,noleftwall,
+Cell(36,19): black,nobaggle,notopwall,noleftwall,
+Cell(36,21): black,nobaggle,notopwall,noleftwall,
+Cell(36,23): black,nobaggle,notopwall,noleftwall,
+Cell(36,25): black,nobaggle,notopwall,noleftwall,
+Cell(36,27): black,nobaggle,notopwall,noleftwall,
+Cell(36,29): black,nobaggle,notopwall,noleftwall,
+Cell(36,31): black,nobaggle,notopwall,noleftwall,
+Cell(36,33): black,nobaggle,notopwall,noleftwall,
+Cell(36,35): black,nobaggle,notopwall,noleftwall,
+Cell(36,37): black,nobaggle,notopwall,noleftwall,
+Cell(36,39): black,nobaggle,notopwall,noleftwall,
+Cell(36,41): black,nobaggle,notopwall,noleftwall,
+Cell(36,43): black,nobaggle,notopwall,noleftwall,
+Cell(36,45): black,nobaggle,notopwall,noleftwall,
+Cell(36,47): black,nobaggle,notopwall,noleftwall,
+Cell(36,49): black,nobaggle,notopwall,noleftwall,
+Cell(36,51): black,nobaggle,notopwall,noleftwall,
+Cell(36,53): black,nobaggle,notopwall,noleftwall,
+Cell(37,8): black,nobaggle,notopwall,noleftwall,
+Cell(37,9): black,nobaggle,notopwall,noleftwall,
+Cell(37,10): black,nobaggle,notopwall,noleftwall,
+Cell(37,11): black,nobaggle,notopwall,noleftwall,
+Cell(37,15): black,nobaggle,notopwall,noleftwall,
+Cell(37,16): black,nobaggle,notopwall,noleftwall,
+Cell(37,17): black,nobaggle,notopwall,noleftwall,
+Cell(37,19): black,nobaggle,notopwall,noleftwall,
+Cell(37,21): black,nobaggle,notopwall,noleftwall,
+Cell(37,23): black,nobaggle,notopwall,noleftwall,
+Cell(37,25): black,nobaggle,notopwall,noleftwall,
+Cell(37,27): black,nobaggle,notopwall,noleftwall,
+Cell(37,29): black,nobaggle,notopwall,noleftwall,
+Cell(37,31): black,nobaggle,notopwall,noleftwall,
+Cell(37,33): black,nobaggle,notopwall,noleftwall,
+Cell(37,35): black,nobaggle,notopwall,noleftwall,
+Cell(37,37): black,nobaggle,notopwall,noleftwall,
+Cell(37,39): black,nobaggle,notopwall,noleftwall,
+Cell(37,41): black,nobaggle,notopwall,noleftwall,
+Cell(37,43): black,nobaggle,notopwall,noleftwall,
+Cell(37,45): black,nobaggle,notopwall,noleftwall,
+Cell(37,47): black,nobaggle,notopwall,noleftwall,
+Cell(37,49): black,nobaggle,notopwall,noleftwall,
+Cell(37,51): black,nobaggle,notopwall,noleftwall,
+Cell(37,53): black,nobaggle,notopwall,noleftwall,
+Cell(38,10): black,nobaggle,notopwall,noleftwall,
+Cell(38,11): black,nobaggle,notopwall,noleftwall,
+Cell(38,12): black,nobaggle,notopwall,noleftwall,
+Cell(38,13): black,nobaggle,notopwall,noleftwall,
+Cell(38,17): black,nobaggle,notopwall,noleftwall,
+Cell(38,18): black,nobaggle,notopwall,noleftwall,
+Cell(38,19): black,nobaggle,notopwall,noleftwall,
+Cell(38,21): black,nobaggle,notopwall,noleftwall,
+Cell(38,23): black,nobaggle,notopwall,noleftwall,
+Cell(38,25): black,nobaggle,notopwall,noleftwall,
+Cell(38,27): black,nobaggle,notopwall,noleftwall,
+Cell(38,29): black,nobaggle,notopwall,noleftwall,
+Cell(38,31): black,nobaggle,notopwall,noleftwall,
+Cell(38,33): black,nobaggle,notopwall,noleftwall,
+Cell(38,35): black,nobaggle,notopwall,noleftwall,
+Cell(38,37): black,nobaggle,notopwall,noleftwall,
+Cell(38,39): black,nobaggle,notopwall,noleftwall,
+Cell(38,41): black,nobaggle,notopwall,noleftwall,
+Cell(38,43): black,nobaggle,notopwall,noleftwall,
+Cell(38,45): black,nobaggle,notopwall,noleftwall,
+Cell(38,47): black,nobaggle,notopwall,noleftwall,
+Cell(38,49): black,nobaggle,notopwall,noleftwall,
+Cell(38,51): black,nobaggle,notopwall,noleftwall,
+Cell(38,53): black,nobaggle,notopwall,noleftwall,
+Cell(39,12): black,nobaggle,notopwall,noleftwall,
+Cell(39,13): black,nobaggle,notopwall,noleftwall,
+Cell(39,14): black,nobaggle,notopwall,noleftwall,
+Cell(39,15): black,nobaggle,notopwall,noleftwall,
+Cell(39,19): black,nobaggle,notopwall,noleftwall,
+Cell(39,20): black,nobaggle,notopwall,noleftwall,
+Cell(39,21): black,nobaggle,notopwall,noleftwall,
+Cell(39,23): black,nobaggle,notopwall,noleftwall,
+Cell(39,25): black,nobaggle,notopwall,noleftwall,
+Cell(39,27): black,nobaggle,notopwall,noleftwall,
+Cell(39,29): black,nobaggle,notopwall,noleftwall,
+Cell(39,31): black,nobaggle,notopwall,noleftwall,
+Cell(39,33): black,nobaggle,notopwall,noleftwall,
+Cell(39,35): black,nobaggle,notopwall,noleftwall,
+Cell(39,37): black,nobaggle,notopwall,noleftwall,
+Cell(39,39): black,nobaggle,notopwall,noleftwall,
+Cell(39,41): black,nobaggle,notopwall,noleftwall,
+Cell(39,43): black,nobaggle,notopwall,noleftwall,
+Cell(39,45): black,nobaggle,notopwall,noleftwall,
+Cell(39,47): black,nobaggle,notopwall,noleftwall,
+Cell(39,49): black,nobaggle,notopwall,noleftwall,
+Cell(39,51): black,nobaggle,notopwall,noleftwall,
+Cell(39,53): black,nobaggle,notopwall,noleftwall,
+Cell(40,14): black,nobaggle,notopwall,noleftwall,
+Cell(40,15): black,nobaggle,notopwall,noleftwall,
+Cell(40,16): black,nobaggle,notopwall,noleftwall,
+Cell(40,17): black,nobaggle,notopwall,noleftwall,
+Cell(40,21): black,nobaggle,notopwall,noleftwall,
+Cell(40,22): black,nobaggle,notopwall,noleftwall,
+Cell(40,23): black,nobaggle,notopwall,noleftwall,
+Cell(40,25): black,nobaggle,notopwall,noleftwall,
+Cell(40,27): black,nobaggle,notopwall,noleftwall,
+Cell(40,29): black,nobaggle,notopwall,noleftwall,
+Cell(40,31): black,nobaggle,notopwall,noleftwall,
+Cell(40,33): black,nobaggle,notopwall,noleftwall,
+Cell(40,35): black,nobaggle,notopwall,noleftwall,
+Cell(40,37): black,nobaggle,notopwall,noleftwall,
+Cell(40,39): black,nobaggle,notopwall,noleftwall,
+Cell(40,41): black,nobaggle,notopwall,noleftwall,
+Cell(40,43): black,nobaggle,notopwall,noleftwall,
+Cell(40,45): black,nobaggle,notopwall,noleftwall,
+Cell(40,47): black,nobaggle,notopwall,noleftwall,
+Cell(40,49): black,nobaggle,notopwall,noleftwall,
+Cell(40,51): black,nobaggle,notopwall,noleftwall,
+Cell(40,53): black,nobaggle,notopwall,noleftwall,
+Cell(41,16): black,nobaggle,notopwall,noleftwall,
+Cell(41,17): black,nobaggle,notopwall,noleftwall,
+Cell(41,18): black,nobaggle,notopwall,noleftwall,
+Cell(41,19): black,nobaggle,notopwall,noleftwall,
+Cell(41,23): black,nobaggle,notopwall,noleftwall,
+Cell(41,24): black,nobaggle,notopwall,noleftwall,
+Cell(41,25): black,nobaggle,notopwall,noleftwall,
+Cell(41,27): black,nobaggle,notopwall,noleftwall,
+Cell(41,29): black,nobaggle,notopwall,noleftwall,
+Cell(41,31): black,nobaggle,notopwall,noleftwall,
+Cell(41,33): black,nobaggle,notopwall,noleftwall,
+Cell(41,35): black,nobaggle,notopwall,noleftwall,
+Cell(41,37): black,nobaggle,notopwall,noleftwall,
+Cell(41,39): black,nobaggle,notopwall,noleftwall,
+Cell(41,41): black,nobaggle,notopwall,noleftwall,
+Cell(41,43): black,nobaggle,notopwall,noleftwall,
+Cell(41,45): black,nobaggle,notopwall,noleftwall,
+Cell(41,47): black,nobaggle,notopwall,noleftwall,
+Cell(41,49): black,nobaggle,notopwall,noleftwall,
+Cell(41,51): black,nobaggle,notopwall,noleftwall,
+Cell(41,53): black,nobaggle,notopwall,noleftwall,
+Cell(42,18): black,nobaggle,notopwall,noleftwall,
+Cell(42,19): black,nobaggle,notopwall,noleftwall,
+Cell(42,20): black,nobaggle,notopwall,noleftwall,
+Cell(42,21): black,nobaggle,notopwall,noleftwall,
+Cell(42,25): black,nobaggle,notopwall,noleftwall,
+Cell(42,26): black,nobaggle,notopwall,noleftwall,
+Cell(42,27): black,nobaggle,notopwall,noleftwall,
+Cell(42,29): black,nobaggle,notopwall,noleftwall,
+Cell(42,31): black,nobaggle,notopwall,noleftwall,
+Cell(42,33): black,nobaggle,notopwall,noleftwall,
+Cell(42,35): black,nobaggle,notopwall,noleftwall,
+Cell(42,37): black,nobaggle,notopwall,noleftwall,
+Cell(42,39): black,nobaggle,notopwall,noleftwall,
+Cell(42,41): black,nobaggle,notopwall,noleftwall,
+Cell(42,43): black,nobaggle,notopwall,noleftwall,
+Cell(42,45): black,nobaggle,notopwall,noleftwall,
+Cell(42,47): black,nobaggle,notopwall,noleftwall,
+Cell(42,49): black,nobaggle,notopwall,noleftwall,
+Cell(42,51): black,nobaggle,notopwall,noleftwall,
+Cell(42,53): black,nobaggle,notopwall,noleftwall,
+Cell(43,20): black,nobaggle,notopwall,noleftwall,
+Cell(43,21): black,nobaggle,notopwall,noleftwall,
+Cell(43,22): black,nobaggle,notopwall,noleftwall,
+Cell(43,23): black,nobaggle,notopwall,noleftwall,
+Cell(43,27): black,nobaggle,notopwall,noleftwall,
+Cell(43,28): black,nobaggle,notopwall,noleftwall,
+Cell(43,29): black,nobaggle,notopwall,noleftwall,
+Cell(43,31): black,nobaggle,notopwall,noleftwall,
+Cell(43,33): black,nobaggle,notopwall,noleftwall,
+Cell(43,35): black,nobaggle,notopwall,noleftwall,
+Cell(43,37): black,nobaggle,notopwall,noleftwall,
+Cell(43,39): black,nobaggle,notopwall,noleftwall,
+Cell(43,41): black,nobaggle,notopwall,noleftwall,
+Cell(43,43): black,nobaggle,notopwall,noleftwall,
+Cell(43,45): black,nobaggle,notopwall,noleftwall,
+Cell(43,47): black,nobaggle,notopwall,noleftwall,
+Cell(43,49): black,nobaggle,notopwall,noleftwall,
+Cell(43,51): black,nobaggle,notopwall,noleftwall,
+Cell(43,53): black,nobaggle,notopwall,noleftwall,
+Cell(44,22): black,nobaggle,notopwall,noleftwall,
+Cell(44,23): black,nobaggle,notopwall,noleftwall,
+Cell(44,24): black,nobaggle,notopwall,noleftwall,
+Cell(44,25): black,nobaggle,notopwall,noleftwall,
+Cell(44,29): black,nobaggle,notopwall,noleftwall,
+Cell(44,30): black,nobaggle,notopwall,noleftwall,
+Cell(44,31): black,nobaggle,notopwall,noleftwall,
+Cell(44,33): black,nobaggle,notopwall,noleftwall,
+Cell(44,35): black,nobaggle,notopwall,noleftwall,
+Cell(44,37): black,nobaggle,notopwall,noleftwall,
+Cell(44,39): black,nobaggle,notopwall,noleftwall,
+Cell(44,41): black,nobaggle,notopwall,noleftwall,
+Cell(44,43): black,nobaggle,notopwall,noleftwall,
+Cell(44,45): black,nobaggle,notopwall,noleftwall,
+Cell(44,47): black,nobaggle,notopwall,noleftwall,
+Cell(44,49): black,nobaggle,notopwall,noleftwall,
+Cell(44,51): black,nobaggle,notopwall,noleftwall,
+Cell(44,53): black,nobaggle,notopwall,noleftwall,
+Cell(45,24): black,nobaggle,notopwall,noleftwall,
+Cell(45,25): black,nobaggle,notopwall,noleftwall,
+Cell(45,26): black,nobaggle,notopwall,noleftwall,
+Cell(45,27): black,nobaggle,notopwall,noleftwall,
+Cell(45,31): black,nobaggle,notopwall,noleftwall,
+Cell(45,32): black,nobaggle,notopwall,noleftwall,
+Cell(45,33): black,nobaggle,notopwall,noleftwall,
+Cell(45,35): black,nobaggle,notopwall,noleftwall,
+Cell(45,37): black,nobaggle,notopwall,noleftwall,
+Cell(45,39): black,nobaggle,notopwall,noleftwall,
+Cell(45,41): black,nobaggle,notopwall,noleftwall,
+Cell(45,43): black,nobaggle,notopwall,noleftwall,
+Cell(45,45): black,nobaggle,notopwall,noleftwall,
+Cell(45,47): black,nobaggle,notopwall,noleftwall,
+Cell(45,49): black,nobaggle,notopwall,noleftwall,
+Cell(45,51): black,nobaggle,notopwall,noleftwall,
+Cell(45,53): black,nobaggle,notopwall,noleftwall,
+Cell(46,26): black,nobaggle,notopwall,noleftwall,
+Cell(46,27): black,nobaggle,notopwall,noleftwall,
+Cell(46,28): black,nobaggle,notopwall,noleftwall,
+Cell(46,29): black,nobaggle,notopwall,noleftwall,
+Cell(46,33): black,nobaggle,notopwall,noleftwall,
+Cell(46,34): black,nobaggle,notopwall,noleftwall,
+Cell(46,35): black,nobaggle,notopwall,noleftwall,
+Cell(46,37): black,nobaggle,notopwall,noleftwall,
+Cell(46,39): black,nobaggle,notopwall,noleftwall,
+Cell(46,41): black,nobaggle,notopwall,noleftwall,
+Cell(46,43): black,nobaggle,notopwall,noleftwall,
+Cell(46,45): black,nobaggle,notopwall,noleftwall,
+Cell(46,47): black,nobaggle,notopwall,noleftwall,
+Cell(46,49): black,nobaggle,notopwall,noleftwall,
+Cell(46,51): black,nobaggle,notopwall,noleftwall,
+Cell(46,53): black,nobaggle,notopwall,noleftwall,
+Cell(47,28): black,nobaggle,notopwall,noleftwall,
+Cell(47,29): black,nobaggle,notopwall,noleftwall,
+Cell(47,30): black,nobaggle,notopwall,noleftwall,
+Cell(47,31): black,nobaggle,notopwall,noleftwall,
+Cell(47,35): black,nobaggle,notopwall,noleftwall,
+Cell(47,36): black,nobaggle,notopwall,noleftwall,
+Cell(47,37): black,nobaggle,notopwall,noleftwall,
+Cell(47,39): black,nobaggle,notopwall,noleftwall,
+Cell(47,41): black,nobaggle,notopwall,noleftwall,
+Cell(47,43): black,nobaggle,notopwall,noleftwall,
+Cell(47,45): black,nobaggle,notopwall,noleftwall,
+Cell(47,47): black,nobaggle,notopwall,noleftwall,
+Cell(47,49): black,nobaggle,notopwall,noleftwall,
+Cell(47,51): black,nobaggle,notopwall,noleftwall,
+Cell(47,53): black,nobaggle,notopwall,noleftwall,
+Cell(48,30): black,nobaggle,notopwall,noleftwall,
+Cell(48,31): black,nobaggle,notopwall,noleftwall,
+Cell(48,32): black,nobaggle,notopwall,noleftwall,
+Cell(48,33): black,nobaggle,notopwall,noleftwall,
+Cell(48,37): black,nobaggle,notopwall,noleftwall,
+Cell(48,38): black,nobaggle,notopwall,noleftwall,
+Cell(48,39): black,nobaggle,notopwall,noleftwall,
+Cell(48,41): black,nobaggle,notopwall,noleftwall,
+Cell(48,43): black,nobaggle,notopwall,noleftwall,
+Cell(48,45): black,nobaggle,notopwall,noleftwall,
+Cell(48,47): black,nobaggle,notopwall,noleftwall,
+Cell(48,49): black,nobaggle,notopwall,noleftwall,
+Cell(48,51): black,nobaggle,notopwall,noleftwall,
+Cell(48,53): black,nobaggle,notopwall,noleftwall,
+Cell(49,32): black,nobaggle,notopwall,noleftwall,
+Cell(49,33): black,nobaggle,notopwall,noleftwall,
+Cell(49,34): black,nobaggle,notopwall,noleftwall,
+Cell(49,35): black,nobaggle,notopwall,noleftwall,
+Cell(49,39): black,nobaggle,notopwall,noleftwall,
+Cell(49,40): black,nobaggle,notopwall,noleftwall,
+Cell(49,41): black,nobaggle,notopwall,noleftwall,
+Cell(49,43): black,nobaggle,notopwall,noleftwall,
+Cell(49,45): black,nobaggle,notopwall,noleftwall,
+Cell(49,47): black,nobaggle,notopwall,noleftwall,
+Cell(49,49): black,nobaggle,notopwall,noleftwall,
+Cell(49,51): black,nobaggle,notopwall,noleftwall,
+Cell(49,53): black,nobaggle,notopwall,noleftwall,
+Cell(50,34): black,nobaggle,notopwall,noleftwall,
+Cell(50,35): black,nobaggle,notopwall,noleftwall,
+Cell(50,36): black,nobaggle,notopwall,noleftwall,
+Cell(50,37): black,nobaggle,notopwall,noleftwall,
+Cell(50,41): black,nobaggle,notopwall,noleftwall,
+Cell(50,42): black,nobaggle,notopwall,noleftwall,
+Cell(50,43): black,nobaggle,notopwall,noleftwall,
+Cell(50,45): black,nobaggle,notopwall,noleftwall,
+Cell(50,47): black,nobaggle,notopwall,noleftwall,
+Cell(50,49): black,nobaggle,notopwall,noleftwall,
+Cell(50,51): black,nobaggle,notopwall,noleftwall,
+Cell(50,53): black,nobaggle,notopwall,noleftwall,
+Cell(51,36): black,nobaggle,notopwall,noleftwall,
+Cell(51,37): black,nobaggle,notopwall,noleftwall,
+Cell(51,38): black,nobaggle,notopwall,noleftwall,
+Cell(51,39): black,nobaggle,notopwall,noleftwall,
+Cell(51,43): black,nobaggle,notopwall,noleftwall,
+Cell(51,44): black,nobaggle,notopwall,noleftwall,
+Cell(51,45): black,nobaggle,notopwall,noleftwall,
+Cell(51,47): black,nobaggle,notopwall,noleftwall,
+Cell(51,49): black,nobaggle,notopwall,noleftwall,
+Cell(51,51): black,nobaggle,notopwall,noleftwall,
+Cell(51,53): black,nobaggle,notopwall,noleftwall,
+Cell(52,38): black,nobaggle,notopwall,noleftwall,
+Cell(52,39): black,nobaggle,notopwall,noleftwall,
+Cell(52,40): black,nobaggle,notopwall,noleftwall,
+Cell(52,41): black,nobaggle,notopwall,noleftwall,
+Cell(52,45): black,nobaggle,notopwall,noleftwall,
+Cell(52,46): black,nobaggle,notopwall,noleftwall,
+Cell(52,47): black,nobaggle,notopwall,noleftwall,
+Cell(52,49): black,nobaggle,notopwall,noleftwall,
+Cell(52,51): black,nobaggle,notopwall,noleftwall,
+Cell(52,53): black,nobaggle,notopwall,noleftwall,
+Cell(53,40): black,nobaggle,notopwall,noleftwall,
+Cell(53,41): black,nobaggle,notopwall,noleftwall,
+Cell(53,42): black,nobaggle,notopwall,noleftwall,
+Cell(53,43): black,nobaggle,notopwall,noleftwall,
+Cell(53,47): black,nobaggle,notopwall,noleftwall,
+Cell(53,48): black,nobaggle,notopwall,noleftwall,
+Cell(53,49): black,nobaggle,notopwall,noleftwall,
+Cell(53,51): black,nobaggle,notopwall,noleftwall,
+Cell(53,53): black,nobaggle,notopwall,noleftwall,
+Cell(54,42): black,nobaggle,notopwall,noleftwall,
+Cell(54,43): black,nobaggle,notopwall,noleftwall,
+Cell(54,44): black,nobaggle,notopwall,noleftwall,
+Cell(54,45): black,nobaggle,notopwall,noleftwall,
+Cell(54,49): black,nobaggle,notopwall,noleftwall,
+Cell(54,50): black,nobaggle,notopwall,noleftwall,
+Cell(54,51): black,nobaggle,notopwall,noleftwall,
+Cell(54,53): black,nobaggle,notopwall,noleftwall,
+Cell(55,44): black,nobaggle,notopwall,noleftwall,
+Cell(55,45): black,nobaggle,notopwall,noleftwall,
+Cell(55,46): black,nobaggle,notopwall,noleftwall,
+Cell(55,47): black,nobaggle,notopwall,noleftwall,
+Cell(55,51): black,nobaggle,notopwall,noleftwall,
+Cell(55,52): black,nobaggle,notopwall,noleftwall,
+Cell(55,53): black,nobaggle,notopwall,noleftwall,
+Cell(55,56): black,nobaggle,notopwall,noleftwall,
+Cell(55,57): black,nobaggle,notopwall,noleftwall,
+Cell(56,46): black,nobaggle,notopwall,noleftwall,
+Cell(56,47): black,nobaggle,notopwall,noleftwall,
+Cell(56,48): black,nobaggle,notopwall,noleftwall,
+Cell(56,49): black,nobaggle,notopwall,noleftwall,
+Cell(56,53): black,nobaggle,notopwall,noleftwall,
+Cell(56,54): black,nobaggle,notopwall,noleftwall,
+Cell(56,57): black,nobaggle,notopwall,noleftwall,
+Cell(56,58): black,nobaggle,notopwall,noleftwall,
+Cell(57,48): black,nobaggle,notopwall,noleftwall,
+Cell(57,49): black,nobaggle,notopwall,noleftwall,
+Cell(57,50): black,nobaggle,notopwall,noleftwall,
+Cell(57,51): black,nobaggle,notopwall,noleftwall,
+Cell(57,56): black,nobaggle,notopwall,noleftwall,
+Cell(57,57): black,nobaggle,notopwall,noleftwall,
+Cell(57,58): black,nobaggle,notopwall,noleftwall,
+Cell(57,59): black,nobaggle,notopwall,noleftwall,
+Cell(57,60): black,nobaggle,notopwall,noleftwall,
+Cell(58,50): black,nobaggle,notopwall,noleftwall,
+Cell(58,51): black,nobaggle,notopwall,noleftwall,
+Cell(58,52): black,nobaggle,notopwall,noleftwall,
+Cell(58,53): black,nobaggle,notopwall,noleftwall,
+Cell(58,58): black,nobaggle,notopwall,noleftwall,
+Cell(58,59): black,nobaggle,notopwall,noleftwall,
+Cell(58,60): black,nobaggle,notopwall,noleftwall,
+Cell(59,52): black,nobaggle,notopwall,noleftwall,
+Cell(59,53): black,nobaggle,notopwall,noleftwall,
+Cell(59,54): black,nobaggle,notopwall,noleftwall,
+Cell(59,55): black,nobaggle,notopwall,noleftwall,
+Cell(59,58): black,nobaggle,notopwall,noleftwall,
+Cell(60,52): black,nobaggle,notopwall,noleftwall,
+Cell(60,53): black,nobaggle,notopwall,noleftwall,
+Cell(60,54): black,nobaggle,notopwall,noleftwall,
+Cell(60,58): black,nobaggle,notopwall,noleftwall,
+Cell(60,59): black,nobaggle,notopwall,noleftwall,
+Cell(61,52): black,nobaggle,notopwall,noleftwall,
+Cell(61,53): black,nobaggle,notopwall,noleftwall,
+Cell(61,54): black,nobaggle,notopwall,noleftwall,
+Cell(61,55): black,nobaggle,notopwall,noleftwall,
+Cell(61,56): black,nobaggle,notopwall,noleftwall,
+Cell(61,57): black,nobaggle,notopwall,noleftwall,
+Cell(61,58): black,nobaggle,notopwall,noleftwall,
+Cell(61,59): black,nobaggle,notopwall,noleftwall,
+Cell(62,54): black,nobaggle,notopwall,noleftwall,
+Cell(62,55): black,nobaggle,notopwall,noleftwall,
+Cell(62,57): black,nobaggle,notopwall,noleftwall,
+Cell(62,58): black,nobaggle,notopwall,noleftwall,
+Cell(63,57): black,nobaggle,notopwall,noleftwall,
+Cell(63,58): black,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/helloturmite/HelloTurmite.fr.html b/src/lessons/turmites/helloturmite/HelloTurmite.fr.html
new file mode 100644
index 0000000..a593dc1
--- /dev/null
+++ b/src/lessons/turmites/helloturmite/HelloTurmite.fr.html
@@ -0,0 +1,89 @@
+<h2>Turmites</h2>
+
+<p>Cette exercice explore une nouvelle façon d'étendre le concept de la fourmi
+de Langton. Maintenant, le comportement de la fourmi ne dépend plus
+seulement de la couleur du sol, mais aussi de son état interne (représenté
+par une valeur entière). L'idée de changer la fourmi en un automate découle
+naturellement du concept de la machine de Turing. Ceci explique le nom de
+ces nouveaux animaux, qui est un mélange de <i>Turing</i> et de
+<i>Termite</i> (si vous ne savez pas ce qu'est une machine de Turing, vous
+devriez vous jeter sur Wikipedia parce qu'il est tout simplement impossible
+d'être un vrai informaticien sans le savoir).</p>     
+
+<p>Une fois encore, vous devez seulement écrire la méthode <code>step()</code>,
+qui s'occupe de faire faire un pas à la turmite. Une fois encore, vous devez
+tout d'abord trouver le rang de la couleur actuelle du sol dans la liste des
+couleurs. Mais cette fois, <code>rule</code> dépend à la fois de la couleur
+courante et de l'état courant. <code>rule</code> contient en fait trois
+informations dans chaque situation : la couleur à mettre, le mouvement à
+effectuer, et la valeur du prochain état. Par exemple, rule[1][0] contient
+l'information à utiliser quand <code>state==1</code> et
+<code>color==0</code>. En d'autres mots, vous pouvez récupérer l'information
+relative à votre situation actuelle en utilisant
+<code>rule[etatCourant][couleurActuelle]</code></p> 
+
+<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=droite, 4=demi-tour, 8=gauche. 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
+est la valeur du prochain <code>state</code> à avoir après cette itération.</p> 
+
+<p class="Java">Puisque ces notations arbitraires sont parfois difficiles à se souvenir, le
+code fourni définit un ensemble de constantes que vous pouvez utiliser à la
+place des valeurs numériques. Leurs noms sont LEFT, RIGHT, etc.
+Le modifieur <code>final static</code> avant leur type est la façon
+d'indiquer les variables comme constantes en Java (désolés si la notation
+semble complexe).
+Utiliser de telles constantes rend le code beaucoup plus simple à
+lire :</p> 
+<p class="python">Puisque ces notations arbitraires sont parfois difficiles à se souvenir, le
+code fourni définit un ensemble de constantes que vous pouvez utiliser à la
+place des valeurs numériques. Leurs noms sont NOTURN, LEFT, RIGHT,
+etc. (pour TOUTDROIT, GAUCHE, DROITE). Par convention, de telles constantes
+sont écrites en majuscules en python. Techniquement, vous pouvez modifier la
+valeur de ces variables, but ce serait une très mauvause idée.
+Utiliser de telles constantes rend le code beaucoup plus simple à
+lire :</p> 
+<pre class="Java">
+  if (rule[state][currentColor][NEXT_MOVE] == LEFT) {
+    turnLeft();
+  }
+</pre>
+<pre class="python">
+  if rule[state][currentColor][NEXT_MOVE] == LEFT:
+    turnLeft()
+</pre>
+<p>C'est beaucoup plus simple à lire que ceci :</p>
+<pre class="Java">
+  if (rule[x][y][1] == 2) {
+    turnLeft();
+  }
+</pre>
+<pre class="python">
+  if rule[x][y][1] == 2:
+    turnLeft()
+</pre>
+ 
+<p class="python">Enfin, vous devriez également écrire une branche <code>elif</code> pour la
+condition <code>STOP</code>. Avoir une branche <code>else</code> qui affiche
+un message d'erreur tel que "situation inattendue" est une bonne
+pratique. Celà permet d'expliciter les présuposés du code, et assure un
+message d'erreur plus explicite si ces suppositions s'avèrent erronées. Le
+problème suivant est que nous n'avons rien à faire faire dans la branche du
+cas <code>STOP</code>, mais que python n'autorise pas de branche
+<code>else</code> vide. Il faut alors utiliser l'instruction
+<code>pass</code> là où il n'y a rien à faire. Cela indique à Python qu'il y
+a bien une branche à cet emplacement, mais qu'elle ne fait rien.</p>
+ 
+<p>Vous devriez maintenant avoir assez d'informations pour réussir.</p>
+
+<h2>Notes bibliographiques</h2>
+<p>D'après Wikipedia, les turmites ont été inventés indépendamment à la fin des
+années 80. Il a été démontré que les turmites en général sont exactement
+équivalent en terme de puissance à des machines de Turing à une dimension
+avec un ruban infini, et peut donc simuler les autres. Cela signifie
+qu'absolument tous les programmes auxquels vous pouvez penser peuvent
+théoriquement être calculé sur cet outil.</p>
diff --git a/src/lessons/welcome/turmites/helloturmite/HelloTurmite.html b/src/lessons/turmites/helloturmite/HelloTurmite.html
similarity index 100%
rename from src/lessons/welcome/turmites/helloturmite/HelloTurmite.html
rename to src/lessons/turmites/helloturmite/HelloTurmite.html
diff --git a/src/lessons/turmites/helloturmite/HelloTurmite.java b/src/lessons/turmites/helloturmite/HelloTurmite.java
new file mode 100644
index 0000000..2d75c29
--- /dev/null
+++ b/src/lessons/turmites/helloturmite/HelloTurmite.java
@@ -0,0 +1,33 @@
+package lessons.turmites.helloturmite;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bugglequest.BuggleWorld;
+import lessons.turmites.universe.TurmiteWorld;
+
+public class HelloTurmite extends ExerciseTemplated {
+	final static int NOTURN = 1;
+	final static int LEFT   = 2;
+	final static int BACK   = 4;
+	final static int RIGHT  = 8;
+
+	public HelloTurmite(Lesson lesson) {
+		super(lesson);
+		tabName = "Turmite";
+
+		BuggleWorld[] myWorlds = new BuggleWorld[] { // Name, #steps, rules, worldWidth, worldHeight, buggleX, buggleY
+				new TurmiteWorld("crabe (8342 steps)",           8342, 
+						         new int[][][] {{{1, LEFT, 0}, {1, LEFT, 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}}, 
+						         78, 72, 8, 33),
+				new TurmiteWorld("snail (10100 steps)",         10100, 
+						         new int[][][] {{{1, NOTURN, 1}, {1, RIGHT, 0}}, {{1, LEFT, 1}, {0, NOTURN, 0}}}, 
+						         68, 72, 36, 33),
+				new TurmiteWorld("stepped pyramid (4800 steps)", 4800, 
+						         new int[][][] {{{0, LEFT, 1}, {0, RIGHT, 0}}, {{1, RIGHT, 1}, {1, NOTURN, 0}}}, 
+						         65, 65, 60, 55), 
+		};
+
+		setup(myWorlds);
+
+	}
+}
\ No newline at end of file
diff --git a/src/lessons/turmites/helloturmite/HelloTurmiteEntity.java b/src/lessons/turmites/helloturmite/HelloTurmiteEntity.java
new file mode 100644
index 0000000..21ae3cd
--- /dev/null
+++ b/src/lessons/turmites/helloturmite/HelloTurmiteEntity.java
@@ -0,0 +1,72 @@
+package lessons.turmites.helloturmite;
+
+import java.awt.Color;
+
+import jlm.universe.bugglequest.SimpleBuggle;
+
+public class HelloTurmiteEntity extends SimpleBuggle {
+	Color[] allColors = {Color.white, Color.black, Color.blue, Color.cyan, Color.green, Color.orange, Color.red, 
+			Color.gray, Color.magenta, Color.darkGray, Color.pink, Color.lightGray};
+
+	/* BEGIN TEMPLATE */
+	/* Do not change these definitions */
+	final static int STOP   = 0;
+	final static int NOTURN = 1;
+	final static int LEFT   = 2;
+	final static int BACK   = 4;
+	final static int RIGHT  = 8;
+
+	final static int NEXT_COLOR = 0;
+	final static int NEXT_MOVE  = 1;
+	final static int NEXT_STATE = 2;
+
+
+	int state = 0;
+
+	public void step(Color[] colors, int[][][] rule ) {
+		int currentColor=0;
+		/* Your code comes here */
+		/* BEGIN SOLUTION */
+		Color current = getGroundColor(); 
+		for (int i=0;i<colors.length;i++) 
+			if (current.equals(colors[i])) 
+				currentColor = i;
+
+		setBrushColor(colors[ rule[state][currentColor][NEXT_COLOR] ]);
+		brushDown();
+		brushUp();
+
+		switch (rule[state][currentColor][NEXT_MOVE]) {
+		case STOP:   /* nothing */;            break;
+		case NOTURN: /* no turn */; forward(); break;
+		case LEFT:   turnLeft();   	forward(); break;
+		case RIGHT:  turnRight();   forward(); break;
+		case BACK:   turnBack();    forward(); break;
+		default:
+			System.out.println("Unknown turn command associated to i="+currentColor+": "+rule[state][currentColor][NEXT_MOVE]);
+		}
+
+		state = rule[state][currentColor][NEXT_STATE];
+
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+	@Override
+	public void run() { 
+		int nbSteps = (Integer)getParam(0);
+		Color[] colors; 
+		int[][][] rule; 
+
+		rule = ((int[][][])getParam(1));
+
+		colors = new Color[rule.length];
+		for (int i=0; i<rule.length; i++)
+			colors[i] = allColors[i];
+
+		for (int i=0;i<nbSteps;i++) {
+			((lessons.turmites.universe.TurmiteWorld)world).stepDone();
+			step(colors,rule);
+		}
+	}
+}
diff --git a/src/lessons/welcome/turmites/helloturmite/HelloTurmiteEntity.py b/src/lessons/turmites/helloturmite/HelloTurmiteEntity.py
similarity index 100%
rename from src/lessons/welcome/turmites/helloturmite/HelloTurmiteEntity.py
rename to src/lessons/turmites/helloturmite/HelloTurmiteEntity.py
diff --git a/src/lessons/turmites/icon.png b/src/lessons/turmites/icon.png
new file mode 100644
index 0000000..7a99c85
Binary files /dev/null and b/src/lessons/turmites/icon.png differ
diff --git a/src/lessons/turmites/langton/Langton-answer0.map b/src/lessons/turmites/langton/Langton-answer0.map
new file mode 100644
index 0000000..f908ee8
--- /dev/null
+++ b/src/lessons/turmites/langton/Langton-answer0.map
@@ -0,0 +1,955 @@
+TurmiteWorld: 12000 steps
+Size: 100x70
+Buggle(10,55): north,red,black,ant
+Cell(9,52): black,nobaggle,notopwall,noleftwall,
+Cell(9,53): black,nobaggle,notopwall,noleftwall,
+Cell(10,51): black,nobaggle,notopwall,noleftwall,
+Cell(10,52): black,nobaggle,notopwall,noleftwall,
+Cell(10,53): black,nobaggle,notopwall,noleftwall,
+Cell(10,54): black,nobaggle,notopwall,noleftwall,
+Cell(10,56): black,nobaggle,notopwall,noleftwall,
+Cell(11,50): black,nobaggle,notopwall,noleftwall,
+Cell(11,52): black,nobaggle,notopwall,noleftwall,
+Cell(11,53): black,nobaggle,notopwall,noleftwall,
+Cell(11,56): black,nobaggle,notopwall,noleftwall,
+Cell(12,49): black,nobaggle,notopwall,noleftwall,
+Cell(12,50): black,nobaggle,notopwall,noleftwall,
+Cell(12,52): black,nobaggle,notopwall,noleftwall,
+Cell(12,54): black,nobaggle,notopwall,noleftwall,
+Cell(12,55): black,nobaggle,notopwall,noleftwall,
+Cell(12,56): black,nobaggle,notopwall,noleftwall,
+Cell(13,48): black,nobaggle,notopwall,noleftwall,
+Cell(13,50): black,nobaggle,notopwall,noleftwall,
+Cell(13,51): black,nobaggle,notopwall,noleftwall,
+Cell(13,52): black,nobaggle,notopwall,noleftwall,
+Cell(13,54): black,nobaggle,notopwall,noleftwall,
+Cell(13,55): black,nobaggle,notopwall,noleftwall,
+Cell(13,56): black,nobaggle,notopwall,noleftwall,
+Cell(13,57): black,nobaggle,notopwall,noleftwall,
+Cell(14,47): black,nobaggle,notopwall,noleftwall,
+Cell(14,48): black,nobaggle,notopwall,noleftwall,
+Cell(14,51): black,nobaggle,notopwall,noleftwall,
+Cell(14,53): black,nobaggle,notopwall,noleftwall,
+Cell(14,54): black,nobaggle,notopwall,noleftwall,
+Cell(14,55): black,nobaggle,notopwall,noleftwall,
+Cell(14,56): black,nobaggle,notopwall,noleftwall,
+Cell(14,57): black,nobaggle,notopwall,noleftwall,
+Cell(15,46): black,nobaggle,notopwall,noleftwall,
+Cell(15,48): black,nobaggle,notopwall,noleftwall,
+Cell(15,49): black,nobaggle,notopwall,noleftwall,
+Cell(15,51): black,nobaggle,notopwall,noleftwall,
+Cell(15,52): black,nobaggle,notopwall,noleftwall,
+Cell(15,56): black,nobaggle,notopwall,noleftwall,
+Cell(16,45): black,nobaggle,notopwall,noleftwall,
+Cell(16,46): black,nobaggle,notopwall,noleftwall,
+Cell(16,49): black,nobaggle,notopwall,noleftwall,
+Cell(16,53): black,nobaggle,notopwall,noleftwall,
+Cell(16,54): black,nobaggle,notopwall,noleftwall,
+Cell(16,55): black,nobaggle,notopwall,noleftwall,
+Cell(17,44): black,nobaggle,notopwall,noleftwall,
+Cell(17,46): black,nobaggle,notopwall,noleftwall,
+Cell(17,47): black,nobaggle,notopwall,noleftwall,
+Cell(17,49): black,nobaggle,notopwall,noleftwall,
+Cell(17,50): black,nobaggle,notopwall,noleftwall,
+Cell(17,54): black,nobaggle,notopwall,noleftwall,
+Cell(18,43): black,nobaggle,notopwall,noleftwall,
+Cell(18,44): black,nobaggle,notopwall,noleftwall,
+Cell(18,47): black,nobaggle,notopwall,noleftwall,
+Cell(18,51): black,nobaggle,notopwall,noleftwall,
+Cell(18,52): black,nobaggle,notopwall,noleftwall,
+Cell(18,53): black,nobaggle,notopwall,noleftwall,
+Cell(19,42): black,nobaggle,notopwall,noleftwall,
+Cell(19,44): black,nobaggle,notopwall,noleftwall,
+Cell(19,45): black,nobaggle,notopwall,noleftwall,
+Cell(19,47): black,nobaggle,notopwall,noleftwall,
+Cell(19,48): black,nobaggle,notopwall,noleftwall,
+Cell(19,52): black,nobaggle,notopwall,noleftwall,
+Cell(20,41): black,nobaggle,notopwall,noleftwall,
+Cell(20,42): black,nobaggle,notopwall,noleftwall,
+Cell(20,45): black,nobaggle,notopwall,noleftwall,
+Cell(20,49): black,nobaggle,notopwall,noleftwall,
+Cell(20,50): black,nobaggle,notopwall,noleftwall,
+Cell(20,51): black,nobaggle,notopwall,noleftwall,
+Cell(21,40): black,nobaggle,notopwall,noleftwall,
+Cell(21,42): black,nobaggle,notopwall,noleftwall,
+Cell(21,43): black,nobaggle,notopwall,noleftwall,
+Cell(21,45): black,nobaggle,notopwall,noleftwall,
+Cell(21,46): black,nobaggle,notopwall,noleftwall,
+Cell(21,50): black,nobaggle,notopwall,noleftwall,
+Cell(22,39): black,nobaggle,notopwall,noleftwall,
+Cell(22,40): black,nobaggle,notopwall,noleftwall,
+Cell(22,43): black,nobaggle,notopwall,noleftwall,
+Cell(22,47): black,nobaggle,notopwall,noleftwall,
+Cell(22,48): black,nobaggle,notopwall,noleftwall,
+Cell(22,49): black,nobaggle,notopwall,noleftwall,
+Cell(23,38): black,nobaggle,notopwall,noleftwall,
+Cell(23,40): black,nobaggle,notopwall,noleftwall,
+Cell(23,41): black,nobaggle,notopwall,noleftwall,
+Cell(23,43): black,nobaggle,notopwall,noleftwall,
+Cell(23,44): black,nobaggle,notopwall,noleftwall,
+Cell(23,48): black,nobaggle,notopwall,noleftwall,
+Cell(24,37): black,nobaggle,notopwall,noleftwall,
+Cell(24,38): black,nobaggle,notopwall,noleftwall,
+Cell(24,41): black,nobaggle,notopwall,noleftwall,
+Cell(24,45): black,nobaggle,notopwall,noleftwall,
+Cell(24,46): black,nobaggle,notopwall,noleftwall,
+Cell(24,47): black,nobaggle,notopwall,noleftwall,
+Cell(25,36): black,nobaggle,notopwall,noleftwall,
+Cell(25,38): black,nobaggle,notopwall,noleftwall,
+Cell(25,39): black,nobaggle,notopwall,noleftwall,
+Cell(25,41): black,nobaggle,notopwall,noleftwall,
+Cell(25,42): black,nobaggle,notopwall,noleftwall,
+Cell(25,46): black,nobaggle,notopwall,noleftwall,
+Cell(26,35): black,nobaggle,notopwall,noleftwall,
+Cell(26,36): black,nobaggle,notopwall,noleftwall,
+Cell(26,39): black,nobaggle,notopwall,noleftwall,
+Cell(26,43): black,nobaggle,notopwall,noleftwall,
+Cell(26,44): black,nobaggle,notopwall,noleftwall,
+Cell(26,45): black,nobaggle,notopwall,noleftwall,
+Cell(27,34): black,nobaggle,notopwall,noleftwall,
+Cell(27,36): black,nobaggle,notopwall,noleftwall,
+Cell(27,37): black,nobaggle,notopwall,noleftwall,
+Cell(27,39): black,nobaggle,notopwall,noleftwall,
+Cell(27,40): black,nobaggle,notopwall,noleftwall,
+Cell(27,44): black,nobaggle,notopwall,noleftwall,
+Cell(28,33): black,nobaggle,notopwall,noleftwall,
+Cell(28,34): black,nobaggle,notopwall,noleftwall,
+Cell(28,37): black,nobaggle,notopwall,noleftwall,
+Cell(28,41): black,nobaggle,notopwall,noleftwall,
+Cell(28,42): black,nobaggle,notopwall,noleftwall,
+Cell(28,43): black,nobaggle,notopwall,noleftwall,
+Cell(29,32): black,nobaggle,notopwall,noleftwall,
+Cell(29,34): black,nobaggle,notopwall,noleftwall,
+Cell(29,35): black,nobaggle,notopwall,noleftwall,
+Cell(29,37): black,nobaggle,notopwall,noleftwall,
+Cell(29,38): black,nobaggle,notopwall,noleftwall,
+Cell(29,42): black,nobaggle,notopwall,noleftwall,
+Cell(30,31): black,nobaggle,notopwall,noleftwall,
+Cell(30,32): black,nobaggle,notopwall,noleftwall,
+Cell(30,35): black,nobaggle,notopwall,noleftwall,
+Cell(30,39): black,nobaggle,notopwall,noleftwall,
+Cell(30,40): black,nobaggle,notopwall,noleftwall,
+Cell(30,41): black,nobaggle,notopwall,noleftwall,
+Cell(31,30): black,nobaggle,notopwall,noleftwall,
+Cell(31,32): black,nobaggle,notopwall,noleftwall,
+Cell(31,33): black,nobaggle,notopwall,noleftwall,
+Cell(31,35): black,nobaggle,notopwall,noleftwall,
+Cell(31,36): black,nobaggle,notopwall,noleftwall,
+Cell(31,40): black,nobaggle,notopwall,noleftwall,
+Cell(32,29): black,nobaggle,notopwall,noleftwall,
+Cell(32,30): black,nobaggle,notopwall,noleftwall,
+Cell(32,33): black,nobaggle,notopwall,noleftwall,
+Cell(32,37): black,nobaggle,notopwall,noleftwall,
+Cell(32,38): black,nobaggle,notopwall,noleftwall,
+Cell(32,39): black,nobaggle,notopwall,noleftwall,
+Cell(33,28): black,nobaggle,notopwall,noleftwall,
+Cell(33,30): black,nobaggle,notopwall,noleftwall,
+Cell(33,31): black,nobaggle,notopwall,noleftwall,
+Cell(33,33): black,nobaggle,notopwall,noleftwall,
+Cell(33,34): black,nobaggle,notopwall,noleftwall,
+Cell(33,38): black,nobaggle,notopwall,noleftwall,
+Cell(34,27): black,nobaggle,notopwall,noleftwall,
+Cell(34,28): black,nobaggle,notopwall,noleftwall,
+Cell(34,31): black,nobaggle,notopwall,noleftwall,
+Cell(34,35): black,nobaggle,notopwall,noleftwall,
+Cell(34,36): black,nobaggle,notopwall,noleftwall,
+Cell(34,37): black,nobaggle,notopwall,noleftwall,
+Cell(35,26): black,nobaggle,notopwall,noleftwall,
+Cell(35,28): black,nobaggle,notopwall,noleftwall,
+Cell(35,29): black,nobaggle,notopwall,noleftwall,
+Cell(35,31): black,nobaggle,notopwall,noleftwall,
+Cell(35,32): black,nobaggle,notopwall,noleftwall,
+Cell(35,36): black,nobaggle,notopwall,noleftwall,
+Cell(36,25): black,nobaggle,notopwall,noleftwall,
+Cell(36,26): black,nobaggle,notopwall,noleftwall,
+Cell(36,29): black,nobaggle,notopwall,noleftwall,
+Cell(36,33): black,nobaggle,notopwall,noleftwall,
+Cell(36,34): black,nobaggle,notopwall,noleftwall,
+Cell(36,35): black,nobaggle,notopwall,noleftwall,
+Cell(37,24): black,nobaggle,notopwall,noleftwall,
+Cell(37,26): black,nobaggle,notopwall,noleftwall,
+Cell(37,27): black,nobaggle,notopwall,noleftwall,
+Cell(37,29): black,nobaggle,notopwall,noleftwall,
+Cell(37,30): black,nobaggle,notopwall,noleftwall,
+Cell(37,34): black,nobaggle,notopwall,noleftwall,
+Cell(38,23): black,nobaggle,notopwall,noleftwall,
+Cell(38,24): black,nobaggle,notopwall,noleftwall,
+Cell(38,27): black,nobaggle,notopwall,noleftwall,
+Cell(38,31): black,nobaggle,notopwall,noleftwall,
+Cell(38,32): black,nobaggle,notopwall,noleftwall,
+Cell(38,33): black,nobaggle,notopwall,noleftwall,
+Cell(39,22): black,nobaggle,notopwall,noleftwall,
+Cell(39,24): black,nobaggle,notopwall,noleftwall,
+Cell(39,25): black,nobaggle,notopwall,noleftwall,
+Cell(39,27): black,nobaggle,notopwall,noleftwall,
+Cell(39,28): black,nobaggle,notopwall,noleftwall,
+Cell(39,32): black,nobaggle,notopwall,noleftwall,
+Cell(40,21): black,nobaggle,notopwall,noleftwall,
+Cell(40,22): black,nobaggle,notopwall,noleftwall,
+Cell(40,25): black,nobaggle,notopwall,noleftwall,
+Cell(40,29): black,nobaggle,notopwall,noleftwall,
+Cell(40,30): black,nobaggle,notopwall,noleftwall,
+Cell(40,31): black,nobaggle,notopwall,noleftwall,
+Cell(41,20): black,nobaggle,notopwall,noleftwall,
+Cell(41,22): black,nobaggle,notopwall,noleftwall,
+Cell(41,23): black,nobaggle,notopwall,noleftwall,
+Cell(41,25): black,nobaggle,notopwall,noleftwall,
+Cell(41,26): black,nobaggle,notopwall,noleftwall,
+Cell(41,30): black,nobaggle,notopwall,noleftwall,
+Cell(42,19): black,nobaggle,notopwall,noleftwall,
+Cell(42,20): black,nobaggle,notopwall,noleftwall,
+Cell(42,23): black,nobaggle,notopwall,noleftwall,
+Cell(42,27): black,nobaggle,notopwall,noleftwall,
+Cell(42,28): black,nobaggle,notopwall,noleftwall,
+Cell(42,29): black,nobaggle,notopwall,noleftwall,
+Cell(43,18): black,nobaggle,notopwall,noleftwall,
+Cell(43,20): black,nobaggle,notopwall,noleftwall,
+Cell(43,21): black,nobaggle,notopwall,noleftwall,
+Cell(43,23): black,nobaggle,notopwall,noleftwall,
+Cell(43,24): black,nobaggle,notopwall,noleftwall,
+Cell(43,28): black,nobaggle,notopwall,noleftwall,
+Cell(44,17): black,nobaggle,notopwall,noleftwall,
+Cell(44,18): black,nobaggle,notopwall,noleftwall,
+Cell(44,21): black,nobaggle,notopwall,noleftwall,
+Cell(44,25): black,nobaggle,notopwall,noleftwall,
+Cell(44,26): black,nobaggle,notopwall,noleftwall,
+Cell(44,27): black,nobaggle,notopwall,noleftwall,
+Cell(45,16): black,nobaggle,notopwall,noleftwall,
+Cell(45,18): black,nobaggle,notopwall,noleftwall,
+Cell(45,19): black,nobaggle,notopwall,noleftwall,
+Cell(45,21): black,nobaggle,notopwall,noleftwall,
+Cell(45,22): black,nobaggle,notopwall,noleftwall,
+Cell(45,26): black,nobaggle,notopwall,noleftwall,
+Cell(46,15): black,nobaggle,notopwall,noleftwall,
+Cell(46,16): black,nobaggle,notopwall,noleftwall,
+Cell(46,19): black,nobaggle,notopwall,noleftwall,
+Cell(46,23): black,nobaggle,notopwall,noleftwall,
+Cell(46,24): black,nobaggle,notopwall,noleftwall,
+Cell(46,25): black,nobaggle,notopwall,noleftwall,
+Cell(47,10): black,nobaggle,notopwall,noleftwall,
+Cell(47,11): black,nobaggle,notopwall,noleftwall,
+Cell(47,14): black,nobaggle,notopwall,noleftwall,
+Cell(47,16): black,nobaggle,notopwall,noleftwall,
+Cell(47,17): black,nobaggle,notopwall,noleftwall,
+Cell(47,19): black,nobaggle,notopwall,noleftwall,
+Cell(47,20): black,nobaggle,notopwall,noleftwall,
+Cell(47,24): black,nobaggle,notopwall,noleftwall,
+Cell(48,9): black,nobaggle,notopwall,noleftwall,
+Cell(48,10): black,nobaggle,notopwall,noleftwall,
+Cell(48,13): black,nobaggle,notopwall,noleftwall,
+Cell(48,14): black,nobaggle,notopwall,noleftwall,
+Cell(48,17): black,nobaggle,notopwall,noleftwall,
+Cell(48,21): black,nobaggle,notopwall,noleftwall,
+Cell(48,22): black,nobaggle,notopwall,noleftwall,
+Cell(48,23): black,nobaggle,notopwall,noleftwall,
+Cell(49,6): black,nobaggle,notopwall,noleftwall,
+Cell(49,10): black,nobaggle,notopwall,noleftwall,
+Cell(49,11): black,nobaggle,notopwall,noleftwall,
+Cell(49,14): black,nobaggle,notopwall,noleftwall,
+Cell(49,15): black,nobaggle,notopwall,noleftwall,
+Cell(49,17): black,nobaggle,notopwall,noleftwall,
+Cell(49,18): black,nobaggle,notopwall,noleftwall,
+Cell(49,22): black,nobaggle,notopwall,noleftwall,
+Cell(50,6): black,nobaggle,notopwall,noleftwall,
+Cell(50,7): black,nobaggle,notopwall,noleftwall,
+Cell(50,8): black,nobaggle,notopwall,noleftwall,
+Cell(50,11): black,nobaggle,notopwall,noleftwall,
+Cell(50,15): black,nobaggle,notopwall,noleftwall,
+Cell(50,19): black,nobaggle,notopwall,noleftwall,
+Cell(50,20): black,nobaggle,notopwall,noleftwall,
+Cell(50,21): black,nobaggle,notopwall,noleftwall,
+Cell(50,25): black,nobaggle,notopwall,noleftwall,
+Cell(50,26): black,nobaggle,notopwall,noleftwall,
+Cell(50,27): black,nobaggle,notopwall,noleftwall,
+Cell(50,28): black,nobaggle,notopwall,noleftwall,
+Cell(51,6): black,nobaggle,notopwall,noleftwall,
+Cell(51,10): black,nobaggle,notopwall,noleftwall,
+Cell(51,11): black,nobaggle,notopwall,noleftwall,
+Cell(51,12): black,nobaggle,notopwall,noleftwall,
+Cell(51,13): black,nobaggle,notopwall,noleftwall,
+Cell(51,15): black,nobaggle,notopwall,noleftwall,
+Cell(51,16): black,nobaggle,notopwall,noleftwall,
+Cell(51,20): black,nobaggle,notopwall,noleftwall,
+Cell(51,24): black,nobaggle,notopwall,noleftwall,
+Cell(51,29): black,nobaggle,notopwall,noleftwall,
+Cell(52,5): black,nobaggle,notopwall,noleftwall,
+Cell(52,7): black,nobaggle,notopwall,noleftwall,
+Cell(52,8): black,nobaggle,notopwall,noleftwall,
+Cell(52,10): black,nobaggle,notopwall,noleftwall,
+Cell(52,17): black,nobaggle,notopwall,noleftwall,
+Cell(52,19): black,nobaggle,notopwall,noleftwall,
+Cell(52,23): black,nobaggle,notopwall,noleftwall,
+Cell(52,28): black,nobaggle,notopwall,noleftwall,
+Cell(52,29): black,nobaggle,notopwall,noleftwall,
+Cell(52,30): black,nobaggle,notopwall,noleftwall,
+Cell(53,5): black,nobaggle,notopwall,noleftwall,
+Cell(53,6): black,nobaggle,notopwall,noleftwall,
+Cell(53,8): black,nobaggle,notopwall,noleftwall,
+Cell(53,11): black,nobaggle,notopwall,noleftwall,
+Cell(53,12): black,nobaggle,notopwall,noleftwall,
+Cell(53,14): black,nobaggle,notopwall,noleftwall,
+Cell(53,20): black,nobaggle,notopwall,noleftwall,
+Cell(53,21): black,nobaggle,notopwall,noleftwall,
+Cell(53,23): black,nobaggle,notopwall,noleftwall,
+Cell(53,28): black,nobaggle,notopwall,noleftwall,
+Cell(53,29): black,nobaggle,notopwall,noleftwall,
+Cell(53,30): black,nobaggle,notopwall,noleftwall,
+Cell(54,8): black,nobaggle,notopwall,noleftwall,
+Cell(54,9): black,nobaggle,notopwall,noleftwall,
+Cell(54,15): black,nobaggle,notopwall,noleftwall,
+Cell(54,17): black,nobaggle,notopwall,noleftwall,
+Cell(54,19): black,nobaggle,notopwall,noleftwall,
+Cell(54,20): black,nobaggle,notopwall,noleftwall,
+Cell(54,24): black,nobaggle,notopwall,noleftwall,
+Cell(54,29): black,nobaggle,notopwall,noleftwall,
+Cell(55,7): black,nobaggle,notopwall,noleftwall,
+Cell(55,11): black,nobaggle,notopwall,noleftwall,
+Cell(55,14): black,nobaggle,notopwall,noleftwall,
+Cell(55,15): black,nobaggle,notopwall,noleftwall,
+Cell(55,16): black,nobaggle,notopwall,noleftwall,
+Cell(55,17): black,nobaggle,notopwall,noleftwall,
+Cell(55,18): black,nobaggle,notopwall,noleftwall,
+Cell(55,20): black,nobaggle,notopwall,noleftwall,
+Cell(55,27): black,nobaggle,notopwall,noleftwall,
+Cell(55,29): black,nobaggle,notopwall,noleftwall,
+Cell(56,3): black,nobaggle,notopwall,noleftwall,
+Cell(56,4): black,nobaggle,notopwall,noleftwall,
+Cell(56,5): black,nobaggle,notopwall,noleftwall,
+Cell(56,6): black,nobaggle,notopwall,noleftwall,
+Cell(56,7): black,nobaggle,notopwall,noleftwall,
+Cell(56,8): black,nobaggle,notopwall,noleftwall,
+Cell(56,10): black,nobaggle,notopwall,noleftwall,
+Cell(56,11): black,nobaggle,notopwall,noleftwall,
+Cell(56,22): black,nobaggle,notopwall,noleftwall,
+Cell(56,23): black,nobaggle,notopwall,noleftwall,
+Cell(56,24): black,nobaggle,notopwall,noleftwall,
+Cell(56,25): black,nobaggle,notopwall,noleftwall,
+Cell(56,26): black,nobaggle,notopwall,noleftwall,
+Cell(56,30): black,nobaggle,notopwall,noleftwall,
+Cell(57,2): black,nobaggle,notopwall,noleftwall,
+Cell(57,3): black,nobaggle,notopwall,noleftwall,
+Cell(57,5): black,nobaggle,notopwall,noleftwall,
+Cell(57,7): black,nobaggle,notopwall,noleftwall,
+Cell(57,8): black,nobaggle,notopwall,noleftwall,
+Cell(57,12): black,nobaggle,notopwall,noleftwall,
+Cell(57,14): black,nobaggle,notopwall,noleftwall,
+Cell(57,16): black,nobaggle,notopwall,noleftwall,
+Cell(57,18): black,nobaggle,notopwall,noleftwall,
+Cell(57,19): black,nobaggle,notopwall,noleftwall,
+Cell(57,21): black,nobaggle,notopwall,noleftwall,
+Cell(57,24): black,nobaggle,notopwall,noleftwall,
+Cell(57,25): black,nobaggle,notopwall,noleftwall,
+Cell(57,28): black,nobaggle,notopwall,noleftwall,
+Cell(57,29): black,nobaggle,notopwall,noleftwall,
+Cell(57,30): black,nobaggle,notopwall,noleftwall,
+Cell(58,1): black,nobaggle,notopwall,noleftwall,
+Cell(58,3): black,nobaggle,notopwall,noleftwall,
+Cell(58,4): black,nobaggle,notopwall,noleftwall,
+Cell(58,9): black,nobaggle,notopwall,noleftwall,
+Cell(58,10): black,nobaggle,notopwall,noleftwall,
+Cell(58,11): black,nobaggle,notopwall,noleftwall,
+Cell(58,14): black,nobaggle,notopwall,noleftwall,
+Cell(58,18): black,nobaggle,notopwall,noleftwall,
+Cell(58,20): black,nobaggle,notopwall,noleftwall,
+Cell(58,21): black,nobaggle,notopwall,noleftwall,
+Cell(58,22): black,nobaggle,notopwall,noleftwall,
+Cell(58,23): black,nobaggle,notopwall,noleftwall,
+Cell(58,24): black,nobaggle,notopwall,noleftwall,
+Cell(58,25): black,nobaggle,notopwall,noleftwall,
+Cell(58,26): black,nobaggle,notopwall,noleftwall,
+Cell(58,28): black,nobaggle,notopwall,noleftwall,
+Cell(58,31): black,nobaggle,notopwall,noleftwall,
+Cell(58,32): black,nobaggle,notopwall,noleftwall,
+Cell(59,1): black,nobaggle,notopwall,noleftwall,
+Cell(59,5): black,nobaggle,notopwall,noleftwall,
+Cell(59,9): black,nobaggle,notopwall,noleftwall,
+Cell(59,10): black,nobaggle,notopwall,noleftwall,
+Cell(59,12): black,nobaggle,notopwall,noleftwall,
+Cell(59,15): black,nobaggle,notopwall,noleftwall,
+Cell(59,19): black,nobaggle,notopwall,noleftwall,
+Cell(59,20): black,nobaggle,notopwall,noleftwall,
+Cell(59,22): black,nobaggle,notopwall,noleftwall,
+Cell(59,23): black,nobaggle,notopwall,noleftwall,
+Cell(59,24): black,nobaggle,notopwall,noleftwall,
+Cell(59,25): black,nobaggle,notopwall,noleftwall,
+Cell(59,26): black,nobaggle,notopwall,noleftwall,
+Cell(59,27): black,nobaggle,notopwall,noleftwall,
+Cell(59,30): black,nobaggle,notopwall,noleftwall,
+Cell(59,33): black,nobaggle,notopwall,noleftwall,
+Cell(60,2): black,nobaggle,notopwall,noleftwall,
+Cell(60,6): black,nobaggle,notopwall,noleftwall,
+Cell(60,7): black,nobaggle,notopwall,noleftwall,
+Cell(60,8): black,nobaggle,notopwall,noleftwall,
+Cell(60,9): black,nobaggle,notopwall,noleftwall,
+Cell(60,10): black,nobaggle,notopwall,noleftwall,
+Cell(60,11): black,nobaggle,notopwall,noleftwall,
+Cell(60,12): black,nobaggle,notopwall,noleftwall,
+Cell(60,14): black,nobaggle,notopwall,noleftwall,
+Cell(60,15): black,nobaggle,notopwall,noleftwall,
+Cell(60,16): black,nobaggle,notopwall,noleftwall,
+Cell(60,17): black,nobaggle,notopwall,noleftwall,
+Cell(60,18): black,nobaggle,notopwall,noleftwall,
+Cell(60,19): black,nobaggle,notopwall,noleftwall,
+Cell(60,22): black,nobaggle,notopwall,noleftwall,
+Cell(60,24): black,nobaggle,notopwall,noleftwall,
+Cell(60,25): black,nobaggle,notopwall,noleftwall,
+Cell(60,27): black,nobaggle,notopwall,noleftwall,
+Cell(60,29): black,nobaggle,notopwall,noleftwall,
+Cell(60,34): black,nobaggle,notopwall,noleftwall,
+Cell(61,2): black,nobaggle,notopwall,noleftwall,
+Cell(61,4): black,nobaggle,notopwall,noleftwall,
+Cell(61,5): black,nobaggle,notopwall,noleftwall,
+Cell(61,7): black,nobaggle,notopwall,noleftwall,
+Cell(61,9): black,nobaggle,notopwall,noleftwall,
+Cell(61,10): black,nobaggle,notopwall,noleftwall,
+Cell(61,13): black,nobaggle,notopwall,noleftwall,
+Cell(61,14): black,nobaggle,notopwall,noleftwall,
+Cell(61,19): black,nobaggle,notopwall,noleftwall,
+Cell(61,20): black,nobaggle,notopwall,noleftwall,
+Cell(61,21): black,nobaggle,notopwall,noleftwall,
+Cell(61,22): black,nobaggle,notopwall,noleftwall,
+Cell(61,24): black,nobaggle,notopwall,noleftwall,
+Cell(61,26): black,nobaggle,notopwall,noleftwall,
+Cell(61,27): black,nobaggle,notopwall,noleftwall,
+Cell(61,29): black,nobaggle,notopwall,noleftwall,
+Cell(61,30): black,nobaggle,notopwall,noleftwall,
+Cell(61,31): black,nobaggle,notopwall,noleftwall,
+Cell(61,32): black,nobaggle,notopwall,noleftwall,
+Cell(61,34): black,nobaggle,notopwall,noleftwall,
+Cell(62,1): black,nobaggle,notopwall,noleftwall,
+Cell(62,2): black,nobaggle,notopwall,noleftwall,
+Cell(62,3): black,nobaggle,notopwall,noleftwall,
+Cell(62,8): black,nobaggle,notopwall,noleftwall,
+Cell(62,9): black,nobaggle,notopwall,noleftwall,
+Cell(62,11): black,nobaggle,notopwall,noleftwall,
+Cell(62,12): black,nobaggle,notopwall,noleftwall,
+Cell(62,13): black,nobaggle,notopwall,noleftwall,
+Cell(62,14): black,nobaggle,notopwall,noleftwall,
+Cell(62,15): black,nobaggle,notopwall,noleftwall,
+Cell(62,16): black,nobaggle,notopwall,noleftwall,
+Cell(62,18): black,nobaggle,notopwall,noleftwall,
+Cell(62,21): black,nobaggle,notopwall,noleftwall,
+Cell(62,25): black,nobaggle,notopwall,noleftwall,
+Cell(62,26): black,nobaggle,notopwall,noleftwall,
+Cell(62,27): black,nobaggle,notopwall,noleftwall,
+Cell(62,28): black,nobaggle,notopwall,noleftwall,
+Cell(62,33): black,nobaggle,notopwall,noleftwall,
+Cell(63,1): black,nobaggle,notopwall,noleftwall,
+Cell(63,2): black,nobaggle,notopwall,noleftwall,
+Cell(63,3): black,nobaggle,notopwall,noleftwall,
+Cell(63,7): black,nobaggle,notopwall,noleftwall,
+Cell(63,8): black,nobaggle,notopwall,noleftwall,
+Cell(63,11): black,nobaggle,notopwall,noleftwall,
+Cell(63,12): black,nobaggle,notopwall,noleftwall,
+Cell(63,15): black,nobaggle,notopwall,noleftwall,
+Cell(63,17): black,nobaggle,notopwall,noleftwall,
+Cell(63,18): black,nobaggle,notopwall,noleftwall,
+Cell(63,19): black,nobaggle,notopwall,noleftwall,
+Cell(63,21): black,nobaggle,notopwall,noleftwall,
+Cell(63,23): black,nobaggle,notopwall,noleftwall,
+Cell(63,24): black,nobaggle,notopwall,noleftwall,
+Cell(63,26): black,nobaggle,notopwall,noleftwall,
+Cell(63,30): black,nobaggle,notopwall,noleftwall,
+Cell(64,1): black,nobaggle,notopwall,noleftwall,
+Cell(64,7): black,nobaggle,notopwall,noleftwall,
+Cell(64,9): black,nobaggle,notopwall,noleftwall,
+Cell(64,10): black,nobaggle,notopwall,noleftwall,
+Cell(64,12): black,nobaggle,notopwall,noleftwall,
+Cell(64,13): black,nobaggle,notopwall,noleftwall,
+Cell(64,16): black,nobaggle,notopwall,noleftwall,
+Cell(64,21): black,nobaggle,notopwall,noleftwall,
+Cell(64,22): black,nobaggle,notopwall,noleftwall,
+Cell(64,23): black,nobaggle,notopwall,noleftwall,
+Cell(64,24): black,nobaggle,notopwall,noleftwall,
+Cell(64,25): black,nobaggle,notopwall,noleftwall,
+Cell(64,26): black,nobaggle,notopwall,noleftwall,
+Cell(64,27): black,nobaggle,notopwall,noleftwall,
+Cell(65,1): black,nobaggle,notopwall,noleftwall,
+Cell(65,7): black,nobaggle,notopwall,noleftwall,
+Cell(65,10): black,nobaggle,notopwall,noleftwall,
+Cell(65,11): black,nobaggle,notopwall,noleftwall,
+Cell(65,13): black,nobaggle,notopwall,noleftwall,
+Cell(65,14): black,nobaggle,notopwall,noleftwall,
+Cell(65,16): black,nobaggle,notopwall,noleftwall,
+Cell(65,17): black,nobaggle,notopwall,noleftwall,
+Cell(65,19): black,nobaggle,notopwall,noleftwall,
+Cell(65,20): black,nobaggle,notopwall,noleftwall,
+Cell(65,21): black,nobaggle,notopwall,noleftwall,
+Cell(65,22): black,nobaggle,notopwall,noleftwall,
+Cell(65,25): black,nobaggle,notopwall,noleftwall,
+Cell(65,26): black,nobaggle,notopwall,noleftwall,
+Cell(65,28): black,nobaggle,notopwall,noleftwall,
+Cell(65,29): black,nobaggle,notopwall,noleftwall,
+Cell(65,32): black,nobaggle,notopwall,noleftwall,
+Cell(65,33): black,nobaggle,notopwall,noleftwall,
+Cell(65,34): black,nobaggle,notopwall,noleftwall,
+Cell(65,35): black,nobaggle,notopwall,noleftwall,
+Cell(66,1): black,nobaggle,notopwall,noleftwall,
+Cell(66,6): black,nobaggle,notopwall,noleftwall,
+Cell(66,7): black,nobaggle,notopwall,noleftwall,
+Cell(66,8): black,nobaggle,notopwall,noleftwall,
+Cell(66,9): black,nobaggle,notopwall,noleftwall,
+Cell(66,11): black,nobaggle,notopwall,noleftwall,
+Cell(66,16): black,nobaggle,notopwall,noleftwall,
+Cell(66,17): black,nobaggle,notopwall,noleftwall,
+Cell(66,18): black,nobaggle,notopwall,noleftwall,
+Cell(66,20): black,nobaggle,notopwall,noleftwall,
+Cell(66,21): black,nobaggle,notopwall,noleftwall,
+Cell(66,23): black,nobaggle,notopwall,noleftwall,
+Cell(66,24): black,nobaggle,notopwall,noleftwall,
+Cell(66,25): black,nobaggle,notopwall,noleftwall,
+Cell(66,29): black,nobaggle,notopwall,noleftwall,
+Cell(66,31): black,nobaggle,notopwall,noleftwall,
+Cell(66,36): black,nobaggle,notopwall,noleftwall,
+Cell(67,1): black,nobaggle,notopwall,noleftwall,
+Cell(67,8): black,nobaggle,notopwall,noleftwall,
+Cell(67,10): black,nobaggle,notopwall,noleftwall,
+Cell(67,15): black,nobaggle,notopwall,noleftwall,
+Cell(67,16): black,nobaggle,notopwall,noleftwall,
+Cell(67,17): black,nobaggle,notopwall,noleftwall,
+Cell(67,18): black,nobaggle,notopwall,noleftwall,
+Cell(67,19): black,nobaggle,notopwall,noleftwall,
+Cell(67,21): black,nobaggle,notopwall,noleftwall,
+Cell(67,23): black,nobaggle,notopwall,noleftwall,
+Cell(67,25): black,nobaggle,notopwall,noleftwall,
+Cell(67,26): black,nobaggle,notopwall,noleftwall,
+Cell(67,27): black,nobaggle,notopwall,noleftwall,
+Cell(67,35): black,nobaggle,notopwall,noleftwall,
+Cell(67,36): black,nobaggle,notopwall,noleftwall,
+Cell(67,37): black,nobaggle,notopwall,noleftwall,
+Cell(68,1): black,nobaggle,notopwall,noleftwall,
+Cell(68,7): black,nobaggle,notopwall,noleftwall,
+Cell(68,8): black,nobaggle,notopwall,noleftwall,
+Cell(68,10): black,nobaggle,notopwall,noleftwall,
+Cell(68,11): black,nobaggle,notopwall,noleftwall,
+Cell(68,12): black,nobaggle,notopwall,noleftwall,
+Cell(68,14): black,nobaggle,notopwall,noleftwall,
+Cell(68,15): black,nobaggle,notopwall,noleftwall,
+Cell(68,19): black,nobaggle,notopwall,noleftwall,
+Cell(68,21): black,nobaggle,notopwall,noleftwall,
+Cell(68,22): black,nobaggle,notopwall,noleftwall,
+Cell(68,24): black,nobaggle,notopwall,noleftwall,
+Cell(68,25): black,nobaggle,notopwall,noleftwall,
+Cell(68,26): black,nobaggle,notopwall,noleftwall,
+Cell(68,27): black,nobaggle,notopwall,noleftwall,
+Cell(68,29): black,nobaggle,notopwall,noleftwall,
+Cell(68,30): black,nobaggle,notopwall,noleftwall,
+Cell(68,31): black,nobaggle,notopwall,noleftwall,
+Cell(68,35): black,nobaggle,notopwall,noleftwall,
+Cell(68,37): black,nobaggle,notopwall,noleftwall,
+Cell(69,1): black,nobaggle,notopwall,noleftwall,
+Cell(69,7): black,nobaggle,notopwall,noleftwall,
+Cell(69,9): black,nobaggle,notopwall,noleftwall,
+Cell(69,11): black,nobaggle,notopwall,noleftwall,
+Cell(69,13): black,nobaggle,notopwall,noleftwall,
+Cell(69,14): black,nobaggle,notopwall,noleftwall,
+Cell(69,15): black,nobaggle,notopwall,noleftwall,
+Cell(69,16): black,nobaggle,notopwall,noleftwall,
+Cell(69,21): black,nobaggle,notopwall,noleftwall,
+Cell(69,22): black,nobaggle,notopwall,noleftwall,
+Cell(69,23): black,nobaggle,notopwall,noleftwall,
+Cell(69,24): black,nobaggle,notopwall,noleftwall,
+Cell(69,27): black,nobaggle,notopwall,noleftwall,
+Cell(69,28): black,nobaggle,notopwall,noleftwall,
+Cell(69,30): black,nobaggle,notopwall,noleftwall,
+Cell(69,31): black,nobaggle,notopwall,noleftwall,
+Cell(70,1): black,nobaggle,notopwall,noleftwall,
+Cell(70,8): black,nobaggle,notopwall,noleftwall,
+Cell(70,9): black,nobaggle,notopwall,noleftwall,
+Cell(70,10): black,nobaggle,notopwall,noleftwall,
+Cell(70,16): black,nobaggle,notopwall,noleftwall,
+Cell(70,17): black,nobaggle,notopwall,noleftwall,
+Cell(70,18): black,nobaggle,notopwall,noleftwall,
+Cell(70,21): black,nobaggle,notopwall,noleftwall,
+Cell(70,22): black,nobaggle,notopwall,noleftwall,
+Cell(70,23): black,nobaggle,notopwall,noleftwall,
+Cell(70,27): black,nobaggle,notopwall,noleftwall,
+Cell(70,28): black,nobaggle,notopwall,noleftwall,
+Cell(70,31): black,nobaggle,notopwall,noleftwall,
+Cell(70,36): black,nobaggle,notopwall,noleftwall,
+Cell(71,1): black,nobaggle,notopwall,noleftwall,
+Cell(71,4): black,nobaggle,notopwall,noleftwall,
+Cell(71,5): black,nobaggle,notopwall,noleftwall,
+Cell(71,9): black,nobaggle,notopwall,noleftwall,
+Cell(71,10): black,nobaggle,notopwall,noleftwall,
+Cell(71,11): black,nobaggle,notopwall,noleftwall,
+Cell(71,18): black,nobaggle,notopwall,noleftwall,
+Cell(71,21): black,nobaggle,notopwall,noleftwall,
+Cell(71,22): black,nobaggle,notopwall,noleftwall,
+Cell(71,23): black,nobaggle,notopwall,noleftwall,
+Cell(71,24): black,nobaggle,notopwall,noleftwall,
+Cell(71,26): black,nobaggle,notopwall,noleftwall,
+Cell(71,27): black,nobaggle,notopwall,noleftwall,
+Cell(71,28): black,nobaggle,notopwall,noleftwall,
+Cell(71,30): black,nobaggle,notopwall,noleftwall,
+Cell(71,31): black,nobaggle,notopwall,noleftwall,
+Cell(71,35): black,nobaggle,notopwall,noleftwall,
+Cell(71,36): black,nobaggle,notopwall,noleftwall,
+Cell(72,1): black,nobaggle,notopwall,noleftwall,
+Cell(72,5): black,nobaggle,notopwall,noleftwall,
+Cell(72,6): black,nobaggle,notopwall,noleftwall,
+Cell(72,8): black,nobaggle,notopwall,noleftwall,
+Cell(72,9): black,nobaggle,notopwall,noleftwall,
+Cell(72,10): black,nobaggle,notopwall,noleftwall,
+Cell(72,12): black,nobaggle,notopwall,noleftwall,
+Cell(72,13): black,nobaggle,notopwall,noleftwall,
+Cell(72,15): black,nobaggle,notopwall,noleftwall,
+Cell(72,18): black,nobaggle,notopwall,noleftwall,
+Cell(72,22): black,nobaggle,notopwall,noleftwall,
+Cell(72,28): black,nobaggle,notopwall,noleftwall,
+Cell(72,29): black,nobaggle,notopwall,noleftwall,
+Cell(72,30): black,nobaggle,notopwall,noleftwall,
+Cell(72,31): black,nobaggle,notopwall,noleftwall,
+Cell(72,33): black,nobaggle,notopwall,noleftwall,
+Cell(72,35): black,nobaggle,notopwall,noleftwall,
+Cell(72,36): black,nobaggle,notopwall,noleftwall,
+Cell(73,1): black,nobaggle,notopwall,noleftwall,
+Cell(73,5): black,nobaggle,notopwall,noleftwall,
+Cell(73,6): black,nobaggle,notopwall,noleftwall,
+Cell(73,7): black,nobaggle,notopwall,noleftwall,
+Cell(73,10): black,nobaggle,notopwall,noleftwall,
+Cell(73,13): black,nobaggle,notopwall,noleftwall,
+Cell(73,16): black,nobaggle,notopwall,noleftwall,
+Cell(73,18): black,nobaggle,notopwall,noleftwall,
+Cell(73,21): black,nobaggle,notopwall,noleftwall,
+Cell(73,22): black,nobaggle,notopwall,noleftwall,
+Cell(73,23): black,nobaggle,notopwall,noleftwall,
+Cell(73,24): black,nobaggle,notopwall,noleftwall,
+Cell(73,26): black,nobaggle,notopwall,noleftwall,
+Cell(73,27): black,nobaggle,notopwall,noleftwall,
+Cell(73,31): black,nobaggle,notopwall,noleftwall,
+Cell(73,32): black,nobaggle,notopwall,noleftwall,
+Cell(73,34): black,nobaggle,notopwall,noleftwall,
+Cell(73,35): black,nobaggle,notopwall,noleftwall,
+Cell(73,36): black,nobaggle,notopwall,noleftwall,
+Cell(73,37): black,nobaggle,notopwall,noleftwall,
+Cell(74,2): black,nobaggle,notopwall,noleftwall,
+Cell(74,4): black,nobaggle,notopwall,noleftwall,
+Cell(74,10): black,nobaggle,notopwall,noleftwall,
+Cell(74,12): black,nobaggle,notopwall,noleftwall,
+Cell(74,18): black,nobaggle,notopwall,noleftwall,
+Cell(74,20): black,nobaggle,notopwall,noleftwall,
+Cell(74,22): black,nobaggle,notopwall,noleftwall,
+Cell(74,23): black,nobaggle,notopwall,noleftwall,
+Cell(74,25): black,nobaggle,notopwall,noleftwall,
+Cell(74,27): black,nobaggle,notopwall,noleftwall,
+Cell(74,30): black,nobaggle,notopwall,noleftwall,
+Cell(74,31): black,nobaggle,notopwall,noleftwall,
+Cell(74,32): black,nobaggle,notopwall,noleftwall,
+Cell(74,34): black,nobaggle,notopwall,noleftwall,
+Cell(74,35): black,nobaggle,notopwall,noleftwall,
+Cell(74,37): black,nobaggle,notopwall,noleftwall,
+Cell(75,6): black,nobaggle,notopwall,noleftwall,
+Cell(75,7): black,nobaggle,notopwall,noleftwall,
+Cell(75,9): black,nobaggle,notopwall,noleftwall,
+Cell(75,10): black,nobaggle,notopwall,noleftwall,
+Cell(75,11): black,nobaggle,notopwall,noleftwall,
+Cell(75,14): black,nobaggle,notopwall,noleftwall,
+Cell(75,16): black,nobaggle,notopwall,noleftwall,
+Cell(75,19): black,nobaggle,notopwall,noleftwall,
+Cell(75,20): black,nobaggle,notopwall,noleftwall,
+Cell(75,22): black,nobaggle,notopwall,noleftwall,
+Cell(75,23): black,nobaggle,notopwall,noleftwall,
+Cell(75,28): black,nobaggle,notopwall,noleftwall,
+Cell(75,31): black,nobaggle,notopwall,noleftwall,
+Cell(75,33): black,nobaggle,notopwall,noleftwall,
+Cell(76,1): black,nobaggle,notopwall,noleftwall,
+Cell(76,3): black,nobaggle,notopwall,noleftwall,
+Cell(76,6): black,nobaggle,notopwall,noleftwall,
+Cell(76,11): black,nobaggle,notopwall,noleftwall,
+Cell(76,16): black,nobaggle,notopwall,noleftwall,
+Cell(76,18): black,nobaggle,notopwall,noleftwall,
+Cell(76,19): black,nobaggle,notopwall,noleftwall,
+Cell(76,20): black,nobaggle,notopwall,noleftwall,
+Cell(76,21): black,nobaggle,notopwall,noleftwall,
+Cell(76,22): black,nobaggle,notopwall,noleftwall,
+Cell(76,25): black,nobaggle,notopwall,noleftwall,
+Cell(76,30): black,nobaggle,notopwall,noleftwall,
+Cell(76,32): black,nobaggle,notopwall,noleftwall,
+Cell(76,33): black,nobaggle,notopwall,noleftwall,
+Cell(77,1): black,nobaggle,notopwall,noleftwall,
+Cell(77,2): black,nobaggle,notopwall,noleftwall,
+Cell(77,3): black,nobaggle,notopwall,noleftwall,
+Cell(77,10): black,nobaggle,notopwall,noleftwall,
+Cell(77,11): black,nobaggle,notopwall,noleftwall,
+Cell(77,12): black,nobaggle,notopwall,noleftwall,
+Cell(77,15): black,nobaggle,notopwall,noleftwall,
+Cell(77,17): black,nobaggle,notopwall,noleftwall,
+Cell(77,18): black,nobaggle,notopwall,noleftwall,
+Cell(77,20): black,nobaggle,notopwall,noleftwall,
+Cell(77,21): black,nobaggle,notopwall,noleftwall,
+Cell(77,26): black,nobaggle,notopwall,noleftwall,
+Cell(77,29): black,nobaggle,notopwall,noleftwall,
+Cell(77,31): black,nobaggle,notopwall,noleftwall,
+Cell(77,32): black,nobaggle,notopwall,noleftwall,
+Cell(77,34): black,nobaggle,notopwall,noleftwall,
+Cell(78,2): black,nobaggle,notopwall,noleftwall,
+Cell(78,7): black,nobaggle,notopwall,noleftwall,
+Cell(78,8): black,nobaggle,notopwall,noleftwall,
+Cell(78,11): black,nobaggle,notopwall,noleftwall,
+Cell(78,12): black,nobaggle,notopwall,noleftwall,
+Cell(78,16): black,nobaggle,notopwall,noleftwall,
+Cell(78,17): black,nobaggle,notopwall,noleftwall,
+Cell(78,18): black,nobaggle,notopwall,noleftwall,
+Cell(78,21): black,nobaggle,notopwall,noleftwall,
+Cell(78,24): black,nobaggle,notopwall,noleftwall,
+Cell(78,27): black,nobaggle,notopwall,noleftwall,
+Cell(78,30): black,nobaggle,notopwall,noleftwall,
+Cell(78,34): black,nobaggle,notopwall,noleftwall,
+Cell(78,36): black,nobaggle,notopwall,noleftwall,
+Cell(79,3): black,nobaggle,notopwall,noleftwall,
+Cell(79,4): black,nobaggle,notopwall,noleftwall,
+Cell(79,6): black,nobaggle,notopwall,noleftwall,
+Cell(79,8): black,nobaggle,notopwall,noleftwall,
+Cell(79,9): black,nobaggle,notopwall,noleftwall,
+Cell(79,10): black,nobaggle,notopwall,noleftwall,
+Cell(79,11): black,nobaggle,notopwall,noleftwall,
+Cell(79,12): black,nobaggle,notopwall,noleftwall,
+Cell(79,13): black,nobaggle,notopwall,noleftwall,
+Cell(79,14): black,nobaggle,notopwall,noleftwall,
+Cell(79,16): black,nobaggle,notopwall,noleftwall,
+Cell(79,17): black,nobaggle,notopwall,noleftwall,
+Cell(79,18): black,nobaggle,notopwall,noleftwall,
+Cell(79,20): black,nobaggle,notopwall,noleftwall,
+Cell(79,21): black,nobaggle,notopwall,noleftwall,
+Cell(79,22): black,nobaggle,notopwall,noleftwall,
+Cell(79,23): black,nobaggle,notopwall,noleftwall,
+Cell(79,24): black,nobaggle,notopwall,noleftwall,
+Cell(79,25): black,nobaggle,notopwall,noleftwall,
+Cell(79,27): black,nobaggle,notopwall,noleftwall,
+Cell(79,28): black,nobaggle,notopwall,noleftwall,
+Cell(79,29): black,nobaggle,notopwall,noleftwall,
+Cell(79,30): black,nobaggle,notopwall,noleftwall,
+Cell(79,31): black,nobaggle,notopwall,noleftwall,
+Cell(79,33): black,nobaggle,notopwall,noleftwall,
+Cell(79,35): black,nobaggle,notopwall,noleftwall,
+Cell(79,36): black,nobaggle,notopwall,noleftwall,
+Cell(79,37): black,nobaggle,notopwall,noleftwall,
+Cell(80,6): black,nobaggle,notopwall,noleftwall,
+Cell(80,7): black,nobaggle,notopwall,noleftwall,
+Cell(80,8): black,nobaggle,notopwall,noleftwall,
+Cell(80,9): black,nobaggle,notopwall,noleftwall,
+Cell(80,10): black,nobaggle,notopwall,noleftwall,
+Cell(80,12): black,nobaggle,notopwall,noleftwall,
+Cell(80,13): black,nobaggle,notopwall,noleftwall,
+Cell(80,14): black,nobaggle,notopwall,noleftwall,
+Cell(80,15): black,nobaggle,notopwall,noleftwall,
+Cell(80,16): black,nobaggle,notopwall,noleftwall,
+Cell(80,19): black,nobaggle,notopwall,noleftwall,
+Cell(80,20): black,nobaggle,notopwall,noleftwall,
+Cell(80,24): black,nobaggle,notopwall,noleftwall,
+Cell(80,25): black,nobaggle,notopwall,noleftwall,
+Cell(80,26): black,nobaggle,notopwall,noleftwall,
+Cell(80,27): black,nobaggle,notopwall,noleftwall,
+Cell(80,28): black,nobaggle,notopwall,noleftwall,
+Cell(80,33): black,nobaggle,notopwall,noleftwall,
+Cell(80,35): black,nobaggle,notopwall,noleftwall,
+Cell(80,37): black,nobaggle,notopwall,noleftwall,
+Cell(81,5): black,nobaggle,notopwall,noleftwall,
+Cell(81,6): black,nobaggle,notopwall,noleftwall,
+Cell(81,7): black,nobaggle,notopwall,noleftwall,
+Cell(81,9): black,nobaggle,notopwall,noleftwall,
+Cell(81,10): black,nobaggle,notopwall,noleftwall,
+Cell(81,11): black,nobaggle,notopwall,noleftwall,
+Cell(81,14): black,nobaggle,notopwall,noleftwall,
+Cell(81,15): black,nobaggle,notopwall,noleftwall,
+Cell(81,17): black,nobaggle,notopwall,noleftwall,
+Cell(81,20): black,nobaggle,notopwall,noleftwall,
+Cell(81,27): black,nobaggle,notopwall,noleftwall,
+Cell(81,31): black,nobaggle,notopwall,noleftwall,
+Cell(81,32): black,nobaggle,notopwall,noleftwall,
+Cell(81,35): black,nobaggle,notopwall,noleftwall,
+Cell(82,11): black,nobaggle,notopwall,noleftwall,
+Cell(82,13): black,nobaggle,notopwall,noleftwall,
+Cell(82,17): black,nobaggle,notopwall,noleftwall,
+Cell(82,18): black,nobaggle,notopwall,noleftwall,
+Cell(82,19): black,nobaggle,notopwall,noleftwall,
+Cell(82,20): black,nobaggle,notopwall,noleftwall,
+Cell(82,21): black,nobaggle,notopwall,noleftwall,
+Cell(82,22): black,nobaggle,notopwall,noleftwall,
+Cell(82,23): black,nobaggle,notopwall,noleftwall,
+Cell(82,24): black,nobaggle,notopwall,noleftwall,
+Cell(82,25): black,nobaggle,notopwall,noleftwall,
+Cell(82,27): black,nobaggle,notopwall,noleftwall,
+Cell(82,28): black,nobaggle,notopwall,noleftwall,
+Cell(82,29): black,nobaggle,notopwall,noleftwall,
+Cell(82,30): black,nobaggle,notopwall,noleftwall,
+Cell(82,31): black,nobaggle,notopwall,noleftwall,
+Cell(82,35): black,nobaggle,notopwall,noleftwall,
+Cell(82,36): black,nobaggle,notopwall,noleftwall,
+Cell(82,37): black,nobaggle,notopwall,noleftwall,
+Cell(82,38): black,nobaggle,notopwall,noleftwall,
+Cell(83,9): black,nobaggle,notopwall,noleftwall,
+Cell(83,10): black,nobaggle,notopwall,noleftwall,
+Cell(83,11): black,nobaggle,notopwall,noleftwall,
+Cell(83,14): black,nobaggle,notopwall,noleftwall,
+Cell(83,15): black,nobaggle,notopwall,noleftwall,
+Cell(83,16): black,nobaggle,notopwall,noleftwall,
+Cell(83,18): black,nobaggle,notopwall,noleftwall,
+Cell(83,22): black,nobaggle,notopwall,noleftwall,
+Cell(83,24): black,nobaggle,notopwall,noleftwall,
+Cell(83,26): black,nobaggle,notopwall,noleftwall,
+Cell(83,27): black,nobaggle,notopwall,noleftwall,
+Cell(83,28): black,nobaggle,notopwall,noleftwall,
+Cell(83,34): black,nobaggle,notopwall,noleftwall,
+Cell(83,37): black,nobaggle,notopwall,noleftwall,
+Cell(83,42): black,nobaggle,notopwall,noleftwall,
+Cell(83,43): black,nobaggle,notopwall,noleftwall,
+Cell(84,7): black,nobaggle,notopwall,noleftwall,
+Cell(84,8): black,nobaggle,notopwall,noleftwall,
+Cell(84,14): black,nobaggle,notopwall,noleftwall,
+Cell(84,15): black,nobaggle,notopwall,noleftwall,
+Cell(84,17): black,nobaggle,notopwall,noleftwall,
+Cell(84,18): black,nobaggle,notopwall,noleftwall,
+Cell(84,19): black,nobaggle,notopwall,noleftwall,
+Cell(84,23): black,nobaggle,notopwall,noleftwall,
+Cell(84,24): black,nobaggle,notopwall,noleftwall,
+Cell(84,26): black,nobaggle,notopwall,noleftwall,
+Cell(84,27): black,nobaggle,notopwall,noleftwall,
+Cell(84,28): black,nobaggle,notopwall,noleftwall,
+Cell(84,32): black,nobaggle,notopwall,noleftwall,
+Cell(84,33): black,nobaggle,notopwall,noleftwall,
+Cell(84,35): black,nobaggle,notopwall,noleftwall,
+Cell(84,36): black,nobaggle,notopwall,noleftwall,
+Cell(84,37): black,nobaggle,notopwall,noleftwall,
+Cell(84,38): black,nobaggle,notopwall,noleftwall,
+Cell(84,41): black,nobaggle,notopwall,noleftwall,
+Cell(84,44): black,nobaggle,notopwall,noleftwall,
+Cell(85,7): black,nobaggle,notopwall,noleftwall,
+Cell(85,8): black,nobaggle,notopwall,noleftwall,
+Cell(85,9): black,nobaggle,notopwall,noleftwall,
+Cell(85,11): black,nobaggle,notopwall,noleftwall,
+Cell(85,12): black,nobaggle,notopwall,noleftwall,
+Cell(85,15): black,nobaggle,notopwall,noleftwall,
+Cell(85,18): black,nobaggle,notopwall,noleftwall,
+Cell(85,23): black,nobaggle,notopwall,noleftwall,
+Cell(85,27): black,nobaggle,notopwall,noleftwall,
+Cell(85,28): black,nobaggle,notopwall,noleftwall,
+Cell(85,29): black,nobaggle,notopwall,noleftwall,
+Cell(85,30): black,nobaggle,notopwall,noleftwall,
+Cell(85,31): black,nobaggle,notopwall,noleftwall,
+Cell(85,33): black,nobaggle,notopwall,noleftwall,
+Cell(85,35): black,nobaggle,notopwall,noleftwall,
+Cell(85,36): black,nobaggle,notopwall,noleftwall,
+Cell(85,38): black,nobaggle,notopwall,noleftwall,
+Cell(85,43): black,nobaggle,notopwall,noleftwall,
+Cell(85,44): black,nobaggle,notopwall,noleftwall,
+Cell(85,45): black,nobaggle,notopwall,noleftwall,
+Cell(86,8): black,nobaggle,notopwall,noleftwall,
+Cell(86,11): black,nobaggle,notopwall,noleftwall,
+Cell(86,15): black,nobaggle,notopwall,noleftwall,
+Cell(86,20): black,nobaggle,notopwall,noleftwall,
+Cell(86,26): black,nobaggle,notopwall,noleftwall,
+Cell(86,27): black,nobaggle,notopwall,noleftwall,
+Cell(86,30): black,nobaggle,notopwall,noleftwall,
+Cell(86,31): black,nobaggle,notopwall,noleftwall,
+Cell(86,35): black,nobaggle,notopwall,noleftwall,
+Cell(86,37): black,nobaggle,notopwall,noleftwall,
+Cell(86,39): black,nobaggle,notopwall,noleftwall,
+Cell(86,40): black,nobaggle,notopwall,noleftwall,
+Cell(86,41): black,nobaggle,notopwall,noleftwall,
+Cell(86,42): black,nobaggle,notopwall,noleftwall,
+Cell(86,43): black,nobaggle,notopwall,noleftwall,
+Cell(86,45): black,nobaggle,notopwall,noleftwall,
+Cell(87,9): black,nobaggle,notopwall,noleftwall,
+Cell(87,10): black,nobaggle,notopwall,noleftwall,
+Cell(87,12): black,nobaggle,notopwall,noleftwall,
+Cell(87,14): black,nobaggle,notopwall,noleftwall,
+Cell(87,17): black,nobaggle,notopwall,noleftwall,
+Cell(87,18): black,nobaggle,notopwall,noleftwall,
+Cell(87,21): black,nobaggle,notopwall,noleftwall,
+Cell(87,25): black,nobaggle,notopwall,noleftwall,
+Cell(87,27): black,nobaggle,notopwall,noleftwall,
+Cell(87,28): black,nobaggle,notopwall,noleftwall,
+Cell(87,31): black,nobaggle,notopwall,noleftwall,
+Cell(87,32): black,nobaggle,notopwall,noleftwall,
+Cell(87,33): black,nobaggle,notopwall,noleftwall,
+Cell(87,34): black,nobaggle,notopwall,noleftwall,
+Cell(87,36): black,nobaggle,notopwall,noleftwall,
+Cell(87,37): black,nobaggle,notopwall,noleftwall,
+Cell(87,38): black,nobaggle,notopwall,noleftwall,
+Cell(87,39): black,nobaggle,notopwall,noleftwall,
+Cell(87,40): black,nobaggle,notopwall,noleftwall,
+Cell(87,41): black,nobaggle,notopwall,noleftwall,
+Cell(88,12): black,nobaggle,notopwall,noleftwall,
+Cell(88,13): black,nobaggle,notopwall,noleftwall,
+Cell(88,14): black,nobaggle,notopwall,noleftwall,
+Cell(88,18): black,nobaggle,notopwall,noleftwall,
+Cell(88,22): black,nobaggle,notopwall,noleftwall,
+Cell(88,23): black,nobaggle,notopwall,noleftwall,
+Cell(88,24): black,nobaggle,notopwall,noleftwall,
+Cell(88,25): black,nobaggle,notopwall,noleftwall,
+Cell(88,28): black,nobaggle,notopwall,noleftwall,
+Cell(88,29): black,nobaggle,notopwall,noleftwall,
+Cell(88,31): black,nobaggle,notopwall,noleftwall,
+Cell(88,32): black,nobaggle,notopwall,noleftwall,
+Cell(88,33): black,nobaggle,notopwall,noleftwall,
+Cell(88,35): black,nobaggle,notopwall,noleftwall,
+Cell(88,42): black,nobaggle,notopwall,noleftwall,
+Cell(88,43): black,nobaggle,notopwall,noleftwall,
+Cell(89,13): black,nobaggle,notopwall,noleftwall,
+Cell(89,16): black,nobaggle,notopwall,noleftwall,
+Cell(89,19): black,nobaggle,notopwall,noleftwall,
+Cell(89,23): black,nobaggle,notopwall,noleftwall,
+Cell(89,24): black,nobaggle,notopwall,noleftwall,
+Cell(89,26): black,nobaggle,notopwall,noleftwall,
+Cell(89,30): black,nobaggle,notopwall,noleftwall,
+Cell(89,33): black,nobaggle,notopwall,noleftwall,
+Cell(89,34): black,nobaggle,notopwall,noleftwall,
+Cell(89,35): black,nobaggle,notopwall,noleftwall,
+Cell(89,36): black,nobaggle,notopwall,noleftwall,
+Cell(89,37): black,nobaggle,notopwall,noleftwall,
+Cell(89,39): black,nobaggle,notopwall,noleftwall,
+Cell(89,42): black,nobaggle,notopwall,noleftwall,
+Cell(90,14): black,nobaggle,notopwall,noleftwall,
+Cell(90,15): black,nobaggle,notopwall,noleftwall,
+Cell(90,17): black,nobaggle,notopwall,noleftwall,
+Cell(90,23): black,nobaggle,notopwall,noleftwall,
+Cell(90,29): black,nobaggle,notopwall,noleftwall,
+Cell(90,30): black,nobaggle,notopwall,noleftwall,
+Cell(90,31): black,nobaggle,notopwall,noleftwall,
+Cell(90,32): black,nobaggle,notopwall,noleftwall,
+Cell(90,33): black,nobaggle,notopwall,noleftwall,
+Cell(90,34): black,nobaggle,notopwall,noleftwall,
+Cell(90,35): black,nobaggle,notopwall,noleftwall,
+Cell(90,37): black,nobaggle,notopwall,noleftwall,
+Cell(90,38): black,nobaggle,notopwall,noleftwall,
+Cell(90,39): black,nobaggle,notopwall,noleftwall,
+Cell(90,41): black,nobaggle,notopwall,noleftwall,
+Cell(90,42): black,nobaggle,notopwall,noleftwall,
+Cell(91,17): black,nobaggle,notopwall,noleftwall,
+Cell(91,22): black,nobaggle,notopwall,noleftwall,
+Cell(91,23): black,nobaggle,notopwall,noleftwall,
+Cell(91,27): black,nobaggle,notopwall,noleftwall,
+Cell(91,34): black,nobaggle,notopwall,noleftwall,
+Cell(91,35): black,nobaggle,notopwall,noleftwall,
+Cell(91,37): black,nobaggle,notopwall,noleftwall,
+Cell(91,38): black,nobaggle,notopwall,noleftwall,
+Cell(91,41): black,nobaggle,notopwall,noleftwall,
+Cell(91,43): black,nobaggle,notopwall,noleftwall,
+Cell(92,18): black,nobaggle,notopwall,noleftwall,
+Cell(92,21): black,nobaggle,notopwall,noleftwall,
+Cell(92,22): black,nobaggle,notopwall,noleftwall,
+Cell(92,25): black,nobaggle,notopwall,noleftwall,
+Cell(92,26): black,nobaggle,notopwall,noleftwall,
+Cell(92,27): black,nobaggle,notopwall,noleftwall,
+Cell(92,36): black,nobaggle,notopwall,noleftwall,
+Cell(92,37): black,nobaggle,notopwall,noleftwall,
+Cell(92,38): black,nobaggle,notopwall,noleftwall,
+Cell(92,39): black,nobaggle,notopwall,noleftwall,
+Cell(92,41): black,nobaggle,notopwall,noleftwall,
+Cell(92,44): black,nobaggle,notopwall,noleftwall,
+Cell(93,19): black,nobaggle,notopwall,noleftwall,
+Cell(93,20): black,nobaggle,notopwall,noleftwall,
+Cell(93,23): black,nobaggle,notopwall,noleftwall,
+Cell(93,24): black,nobaggle,notopwall,noleftwall,
+Cell(93,37): black,nobaggle,notopwall,noleftwall,
+Cell(93,38): black,nobaggle,notopwall,noleftwall,
+Cell(93,39): black,nobaggle,notopwall,noleftwall,
+Cell(93,41): black,nobaggle,notopwall,noleftwall,
+Cell(93,42): black,nobaggle,notopwall,noleftwall,
+Cell(93,44): black,nobaggle,notopwall,noleftwall,
+Cell(94,42): black,nobaggle,notopwall,noleftwall,
+Cell(94,43): black,nobaggle,notopwall,noleftwall,
+Cell(95,41): black,nobaggle,notopwall,noleftwall,
+Cell(95,42): black,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/langton/Langton.fr.html b/src/lessons/turmites/langton/Langton.fr.html
new file mode 100644
index 0000000..cd4dac3
--- /dev/null
+++ b/src/lessons/turmites/langton/Langton.fr.html
@@ -0,0 +1,49 @@
+<h2>La fourmi de Langton</h2>
+
+<p>Dans cet exercice, vous aller métamorphoser votre buggle en une <i>fourmi de
+Langton</i>. Ces petits animaux artificiels sont très intéressants parce
+qu'ils suivent des règles simples qui dépendent seulement de leur
+environnement local, et qu'après une période d'un comportement d'apparence
+chaotique, un schéma général <i>apparaît</i></p>
+
+<p>Les règles sont absolument triviales: pour calculer quel sera le prochain
+pas, vous devez regarder la couleur actuelle du sol ( en utilisant
+<code>getGroundColor()</code>). Si c'est blanc, changez la en noir, tournez
+à droite et avancez d'une case. Si la couleur du sol est le noir, changez la
+en blanc, tournez à gauche et avancez d'une case.</p> 
+
+<p>Il est difficile de trouver des règles plus simples, n'est-ce pas ? Et bien,
+allons-y et codons-les maintenant. Vous avez à compléter la méthode
+<code>step()</code>, qui définit le comportement de la fourmi à chaque
+pas. Vous utiliserez probablement la méthode <code>getGroundColor()</code>
+pour récupérer la valeur de la case sur laquelle la fourmi se trouve. Les
+couleurs intéressantes sont tout simplement <code>Color.black</code> pour le
+noir ou <code>Color.white</code> pour le blanc.</p>
+
+<p class="Java">Pour comparer les couleurs, il n'est pas possible d'utiliser le signe égal
+(=) parce ces choses ne sont pas des valeurs scalaires normales mais des
+objets. À la place, vous devez écrire quelque chose comme cela :
+</p> 
+<pre class="Java">
+Color c /* = une initialisation*/;
+if (c.equals(Color.black)) {
+  /* c'était égal */
+} else {
+  /* ce n'était pas égal */
+}
+</pre>
+
+<p>Changer la couleur du sol n'est pas difficile, seulement un peu long : vous
+avez à changer la couleur de la brosse de votre buggle, l'abaisser (pour
+marquer la case courante -- avec <code>brushDown()</code>), et relever la
+brosse (avec <code>brushUp()</code>) pour éviter des problèmes lorsque la
+buggle va se déplacer. Vous être naturellement libre d'organiser votre code
+comme vous le souhaitez, mais vous pouvez vouloir écrire une méthode
+<code>setGroundColor(couleur)</code> pour factoriser le tout.</p>
+
+<p>Comme vous pouvez le constater avec l'exécution de cet exercice, l'intérêt
+dans cet algorithme est qu'après environ 10 000 pas de comportement
+relativement chaotique, la fourmi commence à suivre un schéma
+régulier. L'émergence de ce schéma régulier à partir du chaos est réellement
+fascinant, n'est-ce pas ? Passez à l'exercice suivant pour en voir plus.</p>   
+
diff --git a/src/lessons/turmites/langton/Langton.html b/src/lessons/turmites/langton/Langton.html
new file mode 100644
index 0000000..c32038e
--- /dev/null
+++ b/src/lessons/turmites/langton/Langton.html
@@ -0,0 +1,43 @@
+<h2>Langton's ant</h2>
+
+<p>In this exercise, you will turn your buggle into a <i>Langton's ant</i>. These 
+artificial little animals are very interesting because they are given simple 
+rules that depend only on their local environment, and after a period of 
+apparent chaotic behavior, a general pattern <i>emerges</i>.</p>
+
+<p>The rules are absolutely trivial: to compute what the next step should be, 
+you should check the current color of the ground (using 
+<code>getGroundColor()</code>). If it's white, change it to black, turn right 
+and move forward by one cell. If the ground is currently black, change it to 
+white, turn left and move forward by one cell.</p> 
+
+<p>It's hard to come up with simpler rules isn't it? Well, let's go and code it 
+now. You have to complete the <code>step()</code> method, which encodes the 
+behavior of the ant at each step. You will probably use the <code>getGroundColor()</code> 
+method to retrieve the color of the cell on which the ant is currently. 
+Colors of interest are simply named <code>Color.black</code> and <code>Color.white</code>.</p>
+
+<p class="Java">To compare colors, you cannot use the equal sign (=), because these things are not 
+scalar values but objects. Instead, you need to write something like the following:
+</p> 
+<pre class="Java">
+Color c /* = some initialization */;
+if (c.equals(Color.black)) {
+  /* that's equal */
+} else {
+  /* that was not equal */
+}
+</pre>
+
+<p>Changing the ground color is not difficult, but a bit long: you have to 
+change the brush color of your buggle, set the brush down (to mark the current 
+cell -- with <code>brushDown()</code>), and set the brush back up (with 
+<code>brushUp()</code>) to avoid further issues when the buggle will 
+move. You are naturally free of organizing your code the way you want, but you may
+want to write a <code>setGroundColor(color)</code> method to factorize things a bit.</p>
+
+<p>As you can see from the execution of this exercise, the interest in this algorithm 
+is that after about 10000 steps of relative chaotic behavior, the ant start building 
+a regular pattern. This emergence of a regular pattern from the chaos is rather 
+fascinating, isn't it? Move on to the next exercise to see more of them.</p>   
+
diff --git a/src/lessons/turmites/langton/Langton.java b/src/lessons/turmites/langton/Langton.java
new file mode 100644
index 0000000..9a9b248
--- /dev/null
+++ b/src/lessons/turmites/langton/Langton.java
@@ -0,0 +1,16 @@
+package lessons.turmites.langton;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.turmites.universe.TurmiteWorld;
+
+public class Langton extends ExerciseTemplated {
+
+	public Langton(Lesson lesson) {
+		super(lesson);
+		tabName = "LangtonsAnt";
+
+		setup(new TurmiteWorld("12000 steps",12000,null,100, 70, 66,23));
+
+	}
+}
diff --git a/src/lessons/turmites/langton/LangtonEntity.java b/src/lessons/turmites/langton/LangtonEntity.java
new file mode 100644
index 0000000..1d7cc40
--- /dev/null
+++ b/src/lessons/turmites/langton/LangtonEntity.java
@@ -0,0 +1,40 @@
+package lessons.turmites.langton;
+
+import java.awt.Color;
+
+import jlm.universe.bugglequest.SimpleBuggle;
+
+public class LangtonEntity extends SimpleBuggle {
+	/* BEGIN TEMPLATE */
+	public void step() {
+		/* BEGIN SOLUTION */
+		if (getGroundColor().equals(Color.white)) {
+			turnRight();
+
+			setBrushColor(Color.black);
+			brushDown();
+			brushUp();
+
+			forward();
+		} else {
+			turnLeft();
+
+			setBrushColor(Color.white);
+			brushDown();
+			brushUp();
+
+			forward();				
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+	@Override
+	public void run() { 
+		int nbSteps = (Integer)getParam(0); 
+		for (int i=0;i<nbSteps;i++) {
+			step();
+			((lessons.turmites.universe.TurmiteWorld)world).stepDone();
+		}
+	}
+}
diff --git a/src/lessons/welcome/turmites/langton/LangtonEntity.py b/src/lessons/turmites/langton/LangtonEntity.py
similarity index 100%
rename from src/lessons/welcome/turmites/langton/LangtonEntity.py
rename to src/lessons/turmites/langton/LangtonEntity.py
diff --git a/src/lessons/turmites/langtoncolors/LangtonColors-answer0.map b/src/lessons/turmites/langtoncolors/LangtonColors-answer0.map
new file mode 100644
index 0000000..374e0b3
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColors-answer0.map
@@ -0,0 +1,956 @@
+TurmiteWorld: RL (12001 steps)
+Size: 100x70
+Buggle(11,55): east,red,black,ant
+Cell(9,52): black,nobaggle,notopwall,noleftwall,
+Cell(9,53): black,nobaggle,notopwall,noleftwall,
+Cell(10,51): black,nobaggle,notopwall,noleftwall,
+Cell(10,52): black,nobaggle,notopwall,noleftwall,
+Cell(10,53): black,nobaggle,notopwall,noleftwall,
+Cell(10,54): black,nobaggle,notopwall,noleftwall,
+Cell(10,55): black,nobaggle,notopwall,noleftwall,
+Cell(10,56): black,nobaggle,notopwall,noleftwall,
+Cell(11,50): black,nobaggle,notopwall,noleftwall,
+Cell(11,52): black,nobaggle,notopwall,noleftwall,
+Cell(11,53): black,nobaggle,notopwall,noleftwall,
+Cell(11,56): black,nobaggle,notopwall,noleftwall,
+Cell(12,49): black,nobaggle,notopwall,noleftwall,
+Cell(12,50): black,nobaggle,notopwall,noleftwall,
+Cell(12,52): black,nobaggle,notopwall,noleftwall,
+Cell(12,54): black,nobaggle,notopwall,noleftwall,
+Cell(12,55): black,nobaggle,notopwall,noleftwall,
+Cell(12,56): black,nobaggle,notopwall,noleftwall,
+Cell(13,48): black,nobaggle,notopwall,noleftwall,
+Cell(13,50): black,nobaggle,notopwall,noleftwall,
+Cell(13,51): black,nobaggle,notopwall,noleftwall,
+Cell(13,52): black,nobaggle,notopwall,noleftwall,
+Cell(13,54): black,nobaggle,notopwall,noleftwall,
+Cell(13,55): black,nobaggle,notopwall,noleftwall,
+Cell(13,56): black,nobaggle,notopwall,noleftwall,
+Cell(13,57): black,nobaggle,notopwall,noleftwall,
+Cell(14,47): black,nobaggle,notopwall,noleftwall,
+Cell(14,48): black,nobaggle,notopwall,noleftwall,
+Cell(14,51): black,nobaggle,notopwall,noleftwall,
+Cell(14,53): black,nobaggle,notopwall,noleftwall,
+Cell(14,54): black,nobaggle,notopwall,noleftwall,
+Cell(14,55): black,nobaggle,notopwall,noleftwall,
+Cell(14,56): black,nobaggle,notopwall,noleftwall,
+Cell(14,57): black,nobaggle,notopwall,noleftwall,
+Cell(15,46): black,nobaggle,notopwall,noleftwall,
+Cell(15,48): black,nobaggle,notopwall,noleftwall,
+Cell(15,49): black,nobaggle,notopwall,noleftwall,
+Cell(15,51): black,nobaggle,notopwall,noleftwall,
+Cell(15,52): black,nobaggle,notopwall,noleftwall,
+Cell(15,56): black,nobaggle,notopwall,noleftwall,
+Cell(16,45): black,nobaggle,notopwall,noleftwall,
+Cell(16,46): black,nobaggle,notopwall,noleftwall,
+Cell(16,49): black,nobaggle,notopwall,noleftwall,
+Cell(16,53): black,nobaggle,notopwall,noleftwall,
+Cell(16,54): black,nobaggle,notopwall,noleftwall,
+Cell(16,55): black,nobaggle,notopwall,noleftwall,
+Cell(17,44): black,nobaggle,notopwall,noleftwall,
+Cell(17,46): black,nobaggle,notopwall,noleftwall,
+Cell(17,47): black,nobaggle,notopwall,noleftwall,
+Cell(17,49): black,nobaggle,notopwall,noleftwall,
+Cell(17,50): black,nobaggle,notopwall,noleftwall,
+Cell(17,54): black,nobaggle,notopwall,noleftwall,
+Cell(18,43): black,nobaggle,notopwall,noleftwall,
+Cell(18,44): black,nobaggle,notopwall,noleftwall,
+Cell(18,47): black,nobaggle,notopwall,noleftwall,
+Cell(18,51): black,nobaggle,notopwall,noleftwall,
+Cell(18,52): black,nobaggle,notopwall,noleftwall,
+Cell(18,53): black,nobaggle,notopwall,noleftwall,
+Cell(19,42): black,nobaggle,notopwall,noleftwall,
+Cell(19,44): black,nobaggle,notopwall,noleftwall,
+Cell(19,45): black,nobaggle,notopwall,noleftwall,
+Cell(19,47): black,nobaggle,notopwall,noleftwall,
+Cell(19,48): black,nobaggle,notopwall,noleftwall,
+Cell(19,52): black,nobaggle,notopwall,noleftwall,
+Cell(20,41): black,nobaggle,notopwall,noleftwall,
+Cell(20,42): black,nobaggle,notopwall,noleftwall,
+Cell(20,45): black,nobaggle,notopwall,noleftwall,
+Cell(20,49): black,nobaggle,notopwall,noleftwall,
+Cell(20,50): black,nobaggle,notopwall,noleftwall,
+Cell(20,51): black,nobaggle,notopwall,noleftwall,
+Cell(21,40): black,nobaggle,notopwall,noleftwall,
+Cell(21,42): black,nobaggle,notopwall,noleftwall,
+Cell(21,43): black,nobaggle,notopwall,noleftwall,
+Cell(21,45): black,nobaggle,notopwall,noleftwall,
+Cell(21,46): black,nobaggle,notopwall,noleftwall,
+Cell(21,50): black,nobaggle,notopwall,noleftwall,
+Cell(22,39): black,nobaggle,notopwall,noleftwall,
+Cell(22,40): black,nobaggle,notopwall,noleftwall,
+Cell(22,43): black,nobaggle,notopwall,noleftwall,
+Cell(22,47): black,nobaggle,notopwall,noleftwall,
+Cell(22,48): black,nobaggle,notopwall,noleftwall,
+Cell(22,49): black,nobaggle,notopwall,noleftwall,
+Cell(23,38): black,nobaggle,notopwall,noleftwall,
+Cell(23,40): black,nobaggle,notopwall,noleftwall,
+Cell(23,41): black,nobaggle,notopwall,noleftwall,
+Cell(23,43): black,nobaggle,notopwall,noleftwall,
+Cell(23,44): black,nobaggle,notopwall,noleftwall,
+Cell(23,48): black,nobaggle,notopwall,noleftwall,
+Cell(24,37): black,nobaggle,notopwall,noleftwall,
+Cell(24,38): black,nobaggle,notopwall,noleftwall,
+Cell(24,41): black,nobaggle,notopwall,noleftwall,
+Cell(24,45): black,nobaggle,notopwall,noleftwall,
+Cell(24,46): black,nobaggle,notopwall,noleftwall,
+Cell(24,47): black,nobaggle,notopwall,noleftwall,
+Cell(25,36): black,nobaggle,notopwall,noleftwall,
+Cell(25,38): black,nobaggle,notopwall,noleftwall,
+Cell(25,39): black,nobaggle,notopwall,noleftwall,
+Cell(25,41): black,nobaggle,notopwall,noleftwall,
+Cell(25,42): black,nobaggle,notopwall,noleftwall,
+Cell(25,46): black,nobaggle,notopwall,noleftwall,
+Cell(26,35): black,nobaggle,notopwall,noleftwall,
+Cell(26,36): black,nobaggle,notopwall,noleftwall,
+Cell(26,39): black,nobaggle,notopwall,noleftwall,
+Cell(26,43): black,nobaggle,notopwall,noleftwall,
+Cell(26,44): black,nobaggle,notopwall,noleftwall,
+Cell(26,45): black,nobaggle,notopwall,noleftwall,
+Cell(27,34): black,nobaggle,notopwall,noleftwall,
+Cell(27,36): black,nobaggle,notopwall,noleftwall,
+Cell(27,37): black,nobaggle,notopwall,noleftwall,
+Cell(27,39): black,nobaggle,notopwall,noleftwall,
+Cell(27,40): black,nobaggle,notopwall,noleftwall,
+Cell(27,44): black,nobaggle,notopwall,noleftwall,
+Cell(28,33): black,nobaggle,notopwall,noleftwall,
+Cell(28,34): black,nobaggle,notopwall,noleftwall,
+Cell(28,37): black,nobaggle,notopwall,noleftwall,
+Cell(28,41): black,nobaggle,notopwall,noleftwall,
+Cell(28,42): black,nobaggle,notopwall,noleftwall,
+Cell(28,43): black,nobaggle,notopwall,noleftwall,
+Cell(29,32): black,nobaggle,notopwall,noleftwall,
+Cell(29,34): black,nobaggle,notopwall,noleftwall,
+Cell(29,35): black,nobaggle,notopwall,noleftwall,
+Cell(29,37): black,nobaggle,notopwall,noleftwall,
+Cell(29,38): black,nobaggle,notopwall,noleftwall,
+Cell(29,42): black,nobaggle,notopwall,noleftwall,
+Cell(30,31): black,nobaggle,notopwall,noleftwall,
+Cell(30,32): black,nobaggle,notopwall,noleftwall,
+Cell(30,35): black,nobaggle,notopwall,noleftwall,
+Cell(30,39): black,nobaggle,notopwall,noleftwall,
+Cell(30,40): black,nobaggle,notopwall,noleftwall,
+Cell(30,41): black,nobaggle,notopwall,noleftwall,
+Cell(31,30): black,nobaggle,notopwall,noleftwall,
+Cell(31,32): black,nobaggle,notopwall,noleftwall,
+Cell(31,33): black,nobaggle,notopwall,noleftwall,
+Cell(31,35): black,nobaggle,notopwall,noleftwall,
+Cell(31,36): black,nobaggle,notopwall,noleftwall,
+Cell(31,40): black,nobaggle,notopwall,noleftwall,
+Cell(32,29): black,nobaggle,notopwall,noleftwall,
+Cell(32,30): black,nobaggle,notopwall,noleftwall,
+Cell(32,33): black,nobaggle,notopwall,noleftwall,
+Cell(32,37): black,nobaggle,notopwall,noleftwall,
+Cell(32,38): black,nobaggle,notopwall,noleftwall,
+Cell(32,39): black,nobaggle,notopwall,noleftwall,
+Cell(33,28): black,nobaggle,notopwall,noleftwall,
+Cell(33,30): black,nobaggle,notopwall,noleftwall,
+Cell(33,31): black,nobaggle,notopwall,noleftwall,
+Cell(33,33): black,nobaggle,notopwall,noleftwall,
+Cell(33,34): black,nobaggle,notopwall,noleftwall,
+Cell(33,38): black,nobaggle,notopwall,noleftwall,
+Cell(34,27): black,nobaggle,notopwall,noleftwall,
+Cell(34,28): black,nobaggle,notopwall,noleftwall,
+Cell(34,31): black,nobaggle,notopwall,noleftwall,
+Cell(34,35): black,nobaggle,notopwall,noleftwall,
+Cell(34,36): black,nobaggle,notopwall,noleftwall,
+Cell(34,37): black,nobaggle,notopwall,noleftwall,
+Cell(35,26): black,nobaggle,notopwall,noleftwall,
+Cell(35,28): black,nobaggle,notopwall,noleftwall,
+Cell(35,29): black,nobaggle,notopwall,noleftwall,
+Cell(35,31): black,nobaggle,notopwall,noleftwall,
+Cell(35,32): black,nobaggle,notopwall,noleftwall,
+Cell(35,36): black,nobaggle,notopwall,noleftwall,
+Cell(36,25): black,nobaggle,notopwall,noleftwall,
+Cell(36,26): black,nobaggle,notopwall,noleftwall,
+Cell(36,29): black,nobaggle,notopwall,noleftwall,
+Cell(36,33): black,nobaggle,notopwall,noleftwall,
+Cell(36,34): black,nobaggle,notopwall,noleftwall,
+Cell(36,35): black,nobaggle,notopwall,noleftwall,
+Cell(37,24): black,nobaggle,notopwall,noleftwall,
+Cell(37,26): black,nobaggle,notopwall,noleftwall,
+Cell(37,27): black,nobaggle,notopwall,noleftwall,
+Cell(37,29): black,nobaggle,notopwall,noleftwall,
+Cell(37,30): black,nobaggle,notopwall,noleftwall,
+Cell(37,34): black,nobaggle,notopwall,noleftwall,
+Cell(38,23): black,nobaggle,notopwall,noleftwall,
+Cell(38,24): black,nobaggle,notopwall,noleftwall,
+Cell(38,27): black,nobaggle,notopwall,noleftwall,
+Cell(38,31): black,nobaggle,notopwall,noleftwall,
+Cell(38,32): black,nobaggle,notopwall,noleftwall,
+Cell(38,33): black,nobaggle,notopwall,noleftwall,
+Cell(39,22): black,nobaggle,notopwall,noleftwall,
+Cell(39,24): black,nobaggle,notopwall,noleftwall,
+Cell(39,25): black,nobaggle,notopwall,noleftwall,
+Cell(39,27): black,nobaggle,notopwall,noleftwall,
+Cell(39,28): black,nobaggle,notopwall,noleftwall,
+Cell(39,32): black,nobaggle,notopwall,noleftwall,
+Cell(40,21): black,nobaggle,notopwall,noleftwall,
+Cell(40,22): black,nobaggle,notopwall,noleftwall,
+Cell(40,25): black,nobaggle,notopwall,noleftwall,
+Cell(40,29): black,nobaggle,notopwall,noleftwall,
+Cell(40,30): black,nobaggle,notopwall,noleftwall,
+Cell(40,31): black,nobaggle,notopwall,noleftwall,
+Cell(41,20): black,nobaggle,notopwall,noleftwall,
+Cell(41,22): black,nobaggle,notopwall,noleftwall,
+Cell(41,23): black,nobaggle,notopwall,noleftwall,
+Cell(41,25): black,nobaggle,notopwall,noleftwall,
+Cell(41,26): black,nobaggle,notopwall,noleftwall,
+Cell(41,30): black,nobaggle,notopwall,noleftwall,
+Cell(42,19): black,nobaggle,notopwall,noleftwall,
+Cell(42,20): black,nobaggle,notopwall,noleftwall,
+Cell(42,23): black,nobaggle,notopwall,noleftwall,
+Cell(42,27): black,nobaggle,notopwall,noleftwall,
+Cell(42,28): black,nobaggle,notopwall,noleftwall,
+Cell(42,29): black,nobaggle,notopwall,noleftwall,
+Cell(43,18): black,nobaggle,notopwall,noleftwall,
+Cell(43,20): black,nobaggle,notopwall,noleftwall,
+Cell(43,21): black,nobaggle,notopwall,noleftwall,
+Cell(43,23): black,nobaggle,notopwall,noleftwall,
+Cell(43,24): black,nobaggle,notopwall,noleftwall,
+Cell(43,28): black,nobaggle,notopwall,noleftwall,
+Cell(44,17): black,nobaggle,notopwall,noleftwall,
+Cell(44,18): black,nobaggle,notopwall,noleftwall,
+Cell(44,21): black,nobaggle,notopwall,noleftwall,
+Cell(44,25): black,nobaggle,notopwall,noleftwall,
+Cell(44,26): black,nobaggle,notopwall,noleftwall,
+Cell(44,27): black,nobaggle,notopwall,noleftwall,
+Cell(45,16): black,nobaggle,notopwall,noleftwall,
+Cell(45,18): black,nobaggle,notopwall,noleftwall,
+Cell(45,19): black,nobaggle,notopwall,noleftwall,
+Cell(45,21): black,nobaggle,notopwall,noleftwall,
+Cell(45,22): black,nobaggle,notopwall,noleftwall,
+Cell(45,26): black,nobaggle,notopwall,noleftwall,
+Cell(46,15): black,nobaggle,notopwall,noleftwall,
+Cell(46,16): black,nobaggle,notopwall,noleftwall,
+Cell(46,19): black,nobaggle,notopwall,noleftwall,
+Cell(46,23): black,nobaggle,notopwall,noleftwall,
+Cell(46,24): black,nobaggle,notopwall,noleftwall,
+Cell(46,25): black,nobaggle,notopwall,noleftwall,
+Cell(47,10): black,nobaggle,notopwall,noleftwall,
+Cell(47,11): black,nobaggle,notopwall,noleftwall,
+Cell(47,14): black,nobaggle,notopwall,noleftwall,
+Cell(47,16): black,nobaggle,notopwall,noleftwall,
+Cell(47,17): black,nobaggle,notopwall,noleftwall,
+Cell(47,19): black,nobaggle,notopwall,noleftwall,
+Cell(47,20): black,nobaggle,notopwall,noleftwall,
+Cell(47,24): black,nobaggle,notopwall,noleftwall,
+Cell(48,9): black,nobaggle,notopwall,noleftwall,
+Cell(48,10): black,nobaggle,notopwall,noleftwall,
+Cell(48,13): black,nobaggle,notopwall,noleftwall,
+Cell(48,14): black,nobaggle,notopwall,noleftwall,
+Cell(48,17): black,nobaggle,notopwall,noleftwall,
+Cell(48,21): black,nobaggle,notopwall,noleftwall,
+Cell(48,22): black,nobaggle,notopwall,noleftwall,
+Cell(48,23): black,nobaggle,notopwall,noleftwall,
+Cell(49,6): black,nobaggle,notopwall,noleftwall,
+Cell(49,10): black,nobaggle,notopwall,noleftwall,
+Cell(49,11): black,nobaggle,notopwall,noleftwall,
+Cell(49,14): black,nobaggle,notopwall,noleftwall,
+Cell(49,15): black,nobaggle,notopwall,noleftwall,
+Cell(49,17): black,nobaggle,notopwall,noleftwall,
+Cell(49,18): black,nobaggle,notopwall,noleftwall,
+Cell(49,22): black,nobaggle,notopwall,noleftwall,
+Cell(50,6): black,nobaggle,notopwall,noleftwall,
+Cell(50,7): black,nobaggle,notopwall,noleftwall,
+Cell(50,8): black,nobaggle,notopwall,noleftwall,
+Cell(50,11): black,nobaggle,notopwall,noleftwall,
+Cell(50,15): black,nobaggle,notopwall,noleftwall,
+Cell(50,19): black,nobaggle,notopwall,noleftwall,
+Cell(50,20): black,nobaggle,notopwall,noleftwall,
+Cell(50,21): black,nobaggle,notopwall,noleftwall,
+Cell(50,25): black,nobaggle,notopwall,noleftwall,
+Cell(50,26): black,nobaggle,notopwall,noleftwall,
+Cell(50,27): black,nobaggle,notopwall,noleftwall,
+Cell(50,28): black,nobaggle,notopwall,noleftwall,
+Cell(51,6): black,nobaggle,notopwall,noleftwall,
+Cell(51,10): black,nobaggle,notopwall,noleftwall,
+Cell(51,11): black,nobaggle,notopwall,noleftwall,
+Cell(51,12): black,nobaggle,notopwall,noleftwall,
+Cell(51,13): black,nobaggle,notopwall,noleftwall,
+Cell(51,15): black,nobaggle,notopwall,noleftwall,
+Cell(51,16): black,nobaggle,notopwall,noleftwall,
+Cell(51,20): black,nobaggle,notopwall,noleftwall,
+Cell(51,24): black,nobaggle,notopwall,noleftwall,
+Cell(51,29): black,nobaggle,notopwall,noleftwall,
+Cell(52,5): black,nobaggle,notopwall,noleftwall,
+Cell(52,7): black,nobaggle,notopwall,noleftwall,
+Cell(52,8): black,nobaggle,notopwall,noleftwall,
+Cell(52,10): black,nobaggle,notopwall,noleftwall,
+Cell(52,17): black,nobaggle,notopwall,noleftwall,
+Cell(52,19): black,nobaggle,notopwall,noleftwall,
+Cell(52,23): black,nobaggle,notopwall,noleftwall,
+Cell(52,28): black,nobaggle,notopwall,noleftwall,
+Cell(52,29): black,nobaggle,notopwall,noleftwall,
+Cell(52,30): black,nobaggle,notopwall,noleftwall,
+Cell(53,5): black,nobaggle,notopwall,noleftwall,
+Cell(53,6): black,nobaggle,notopwall,noleftwall,
+Cell(53,8): black,nobaggle,notopwall,noleftwall,
+Cell(53,11): black,nobaggle,notopwall,noleftwall,
+Cell(53,12): black,nobaggle,notopwall,noleftwall,
+Cell(53,14): black,nobaggle,notopwall,noleftwall,
+Cell(53,20): black,nobaggle,notopwall,noleftwall,
+Cell(53,21): black,nobaggle,notopwall,noleftwall,
+Cell(53,23): black,nobaggle,notopwall,noleftwall,
+Cell(53,28): black,nobaggle,notopwall,noleftwall,
+Cell(53,29): black,nobaggle,notopwall,noleftwall,
+Cell(53,30): black,nobaggle,notopwall,noleftwall,
+Cell(54,8): black,nobaggle,notopwall,noleftwall,
+Cell(54,9): black,nobaggle,notopwall,noleftwall,
+Cell(54,15): black,nobaggle,notopwall,noleftwall,
+Cell(54,17): black,nobaggle,notopwall,noleftwall,
+Cell(54,19): black,nobaggle,notopwall,noleftwall,
+Cell(54,20): black,nobaggle,notopwall,noleftwall,
+Cell(54,24): black,nobaggle,notopwall,noleftwall,
+Cell(54,29): black,nobaggle,notopwall,noleftwall,
+Cell(55,7): black,nobaggle,notopwall,noleftwall,
+Cell(55,11): black,nobaggle,notopwall,noleftwall,
+Cell(55,14): black,nobaggle,notopwall,noleftwall,
+Cell(55,15): black,nobaggle,notopwall,noleftwall,
+Cell(55,16): black,nobaggle,notopwall,noleftwall,
+Cell(55,17): black,nobaggle,notopwall,noleftwall,
+Cell(55,18): black,nobaggle,notopwall,noleftwall,
+Cell(55,20): black,nobaggle,notopwall,noleftwall,
+Cell(55,27): black,nobaggle,notopwall,noleftwall,
+Cell(55,29): black,nobaggle,notopwall,noleftwall,
+Cell(56,3): black,nobaggle,notopwall,noleftwall,
+Cell(56,4): black,nobaggle,notopwall,noleftwall,
+Cell(56,5): black,nobaggle,notopwall,noleftwall,
+Cell(56,6): black,nobaggle,notopwall,noleftwall,
+Cell(56,7): black,nobaggle,notopwall,noleftwall,
+Cell(56,8): black,nobaggle,notopwall,noleftwall,
+Cell(56,10): black,nobaggle,notopwall,noleftwall,
+Cell(56,11): black,nobaggle,notopwall,noleftwall,
+Cell(56,22): black,nobaggle,notopwall,noleftwall,
+Cell(56,23): black,nobaggle,notopwall,noleftwall,
+Cell(56,24): black,nobaggle,notopwall,noleftwall,
+Cell(56,25): black,nobaggle,notopwall,noleftwall,
+Cell(56,26): black,nobaggle,notopwall,noleftwall,
+Cell(56,30): black,nobaggle,notopwall,noleftwall,
+Cell(57,2): black,nobaggle,notopwall,noleftwall,
+Cell(57,3): black,nobaggle,notopwall,noleftwall,
+Cell(57,5): black,nobaggle,notopwall,noleftwall,
+Cell(57,7): black,nobaggle,notopwall,noleftwall,
+Cell(57,8): black,nobaggle,notopwall,noleftwall,
+Cell(57,12): black,nobaggle,notopwall,noleftwall,
+Cell(57,14): black,nobaggle,notopwall,noleftwall,
+Cell(57,16): black,nobaggle,notopwall,noleftwall,
+Cell(57,18): black,nobaggle,notopwall,noleftwall,
+Cell(57,19): black,nobaggle,notopwall,noleftwall,
+Cell(57,21): black,nobaggle,notopwall,noleftwall,
+Cell(57,24): black,nobaggle,notopwall,noleftwall,
+Cell(57,25): black,nobaggle,notopwall,noleftwall,
+Cell(57,28): black,nobaggle,notopwall,noleftwall,
+Cell(57,29): black,nobaggle,notopwall,noleftwall,
+Cell(57,30): black,nobaggle,notopwall,noleftwall,
+Cell(58,1): black,nobaggle,notopwall,noleftwall,
+Cell(58,3): black,nobaggle,notopwall,noleftwall,
+Cell(58,4): black,nobaggle,notopwall,noleftwall,
+Cell(58,9): black,nobaggle,notopwall,noleftwall,
+Cell(58,10): black,nobaggle,notopwall,noleftwall,
+Cell(58,11): black,nobaggle,notopwall,noleftwall,
+Cell(58,14): black,nobaggle,notopwall,noleftwall,
+Cell(58,18): black,nobaggle,notopwall,noleftwall,
+Cell(58,20): black,nobaggle,notopwall,noleftwall,
+Cell(58,21): black,nobaggle,notopwall,noleftwall,
+Cell(58,22): black,nobaggle,notopwall,noleftwall,
+Cell(58,23): black,nobaggle,notopwall,noleftwall,
+Cell(58,24): black,nobaggle,notopwall,noleftwall,
+Cell(58,25): black,nobaggle,notopwall,noleftwall,
+Cell(58,26): black,nobaggle,notopwall,noleftwall,
+Cell(58,28): black,nobaggle,notopwall,noleftwall,
+Cell(58,31): black,nobaggle,notopwall,noleftwall,
+Cell(58,32): black,nobaggle,notopwall,noleftwall,
+Cell(59,1): black,nobaggle,notopwall,noleftwall,
+Cell(59,5): black,nobaggle,notopwall,noleftwall,
+Cell(59,9): black,nobaggle,notopwall,noleftwall,
+Cell(59,10): black,nobaggle,notopwall,noleftwall,
+Cell(59,12): black,nobaggle,notopwall,noleftwall,
+Cell(59,15): black,nobaggle,notopwall,noleftwall,
+Cell(59,19): black,nobaggle,notopwall,noleftwall,
+Cell(59,20): black,nobaggle,notopwall,noleftwall,
+Cell(59,22): black,nobaggle,notopwall,noleftwall,
+Cell(59,23): black,nobaggle,notopwall,noleftwall,
+Cell(59,24): black,nobaggle,notopwall,noleftwall,
+Cell(59,25): black,nobaggle,notopwall,noleftwall,
+Cell(59,26): black,nobaggle,notopwall,noleftwall,
+Cell(59,27): black,nobaggle,notopwall,noleftwall,
+Cell(59,30): black,nobaggle,notopwall,noleftwall,
+Cell(59,33): black,nobaggle,notopwall,noleftwall,
+Cell(60,2): black,nobaggle,notopwall,noleftwall,
+Cell(60,6): black,nobaggle,notopwall,noleftwall,
+Cell(60,7): black,nobaggle,notopwall,noleftwall,
+Cell(60,8): black,nobaggle,notopwall,noleftwall,
+Cell(60,9): black,nobaggle,notopwall,noleftwall,
+Cell(60,10): black,nobaggle,notopwall,noleftwall,
+Cell(60,11): black,nobaggle,notopwall,noleftwall,
+Cell(60,12): black,nobaggle,notopwall,noleftwall,
+Cell(60,14): black,nobaggle,notopwall,noleftwall,
+Cell(60,15): black,nobaggle,notopwall,noleftwall,
+Cell(60,16): black,nobaggle,notopwall,noleftwall,
+Cell(60,17): black,nobaggle,notopwall,noleftwall,
+Cell(60,18): black,nobaggle,notopwall,noleftwall,
+Cell(60,19): black,nobaggle,notopwall,noleftwall,
+Cell(60,22): black,nobaggle,notopwall,noleftwall,
+Cell(60,24): black,nobaggle,notopwall,noleftwall,
+Cell(60,25): black,nobaggle,notopwall,noleftwall,
+Cell(60,27): black,nobaggle,notopwall,noleftwall,
+Cell(60,29): black,nobaggle,notopwall,noleftwall,
+Cell(60,34): black,nobaggle,notopwall,noleftwall,
+Cell(61,2): black,nobaggle,notopwall,noleftwall,
+Cell(61,4): black,nobaggle,notopwall,noleftwall,
+Cell(61,5): black,nobaggle,notopwall,noleftwall,
+Cell(61,7): black,nobaggle,notopwall,noleftwall,
+Cell(61,9): black,nobaggle,notopwall,noleftwall,
+Cell(61,10): black,nobaggle,notopwall,noleftwall,
+Cell(61,13): black,nobaggle,notopwall,noleftwall,
+Cell(61,14): black,nobaggle,notopwall,noleftwall,
+Cell(61,19): black,nobaggle,notopwall,noleftwall,
+Cell(61,20): black,nobaggle,notopwall,noleftwall,
+Cell(61,21): black,nobaggle,notopwall,noleftwall,
+Cell(61,22): black,nobaggle,notopwall,noleftwall,
+Cell(61,24): black,nobaggle,notopwall,noleftwall,
+Cell(61,26): black,nobaggle,notopwall,noleftwall,
+Cell(61,27): black,nobaggle,notopwall,noleftwall,
+Cell(61,29): black,nobaggle,notopwall,noleftwall,
+Cell(61,30): black,nobaggle,notopwall,noleftwall,
+Cell(61,31): black,nobaggle,notopwall,noleftwall,
+Cell(61,32): black,nobaggle,notopwall,noleftwall,
+Cell(61,34): black,nobaggle,notopwall,noleftwall,
+Cell(62,1): black,nobaggle,notopwall,noleftwall,
+Cell(62,2): black,nobaggle,notopwall,noleftwall,
+Cell(62,3): black,nobaggle,notopwall,noleftwall,
+Cell(62,8): black,nobaggle,notopwall,noleftwall,
+Cell(62,9): black,nobaggle,notopwall,noleftwall,
+Cell(62,11): black,nobaggle,notopwall,noleftwall,
+Cell(62,12): black,nobaggle,notopwall,noleftwall,
+Cell(62,13): black,nobaggle,notopwall,noleftwall,
+Cell(62,14): black,nobaggle,notopwall,noleftwall,
+Cell(62,15): black,nobaggle,notopwall,noleftwall,
+Cell(62,16): black,nobaggle,notopwall,noleftwall,
+Cell(62,18): black,nobaggle,notopwall,noleftwall,
+Cell(62,21): black,nobaggle,notopwall,noleftwall,
+Cell(62,25): black,nobaggle,notopwall,noleftwall,
+Cell(62,26): black,nobaggle,notopwall,noleftwall,
+Cell(62,27): black,nobaggle,notopwall,noleftwall,
+Cell(62,28): black,nobaggle,notopwall,noleftwall,
+Cell(62,33): black,nobaggle,notopwall,noleftwall,
+Cell(63,1): black,nobaggle,notopwall,noleftwall,
+Cell(63,2): black,nobaggle,notopwall,noleftwall,
+Cell(63,3): black,nobaggle,notopwall,noleftwall,
+Cell(63,7): black,nobaggle,notopwall,noleftwall,
+Cell(63,8): black,nobaggle,notopwall,noleftwall,
+Cell(63,11): black,nobaggle,notopwall,noleftwall,
+Cell(63,12): black,nobaggle,notopwall,noleftwall,
+Cell(63,15): black,nobaggle,notopwall,noleftwall,
+Cell(63,17): black,nobaggle,notopwall,noleftwall,
+Cell(63,18): black,nobaggle,notopwall,noleftwall,
+Cell(63,19): black,nobaggle,notopwall,noleftwall,
+Cell(63,21): black,nobaggle,notopwall,noleftwall,
+Cell(63,23): black,nobaggle,notopwall,noleftwall,
+Cell(63,24): black,nobaggle,notopwall,noleftwall,
+Cell(63,26): black,nobaggle,notopwall,noleftwall,
+Cell(63,30): black,nobaggle,notopwall,noleftwall,
+Cell(64,1): black,nobaggle,notopwall,noleftwall,
+Cell(64,7): black,nobaggle,notopwall,noleftwall,
+Cell(64,9): black,nobaggle,notopwall,noleftwall,
+Cell(64,10): black,nobaggle,notopwall,noleftwall,
+Cell(64,12): black,nobaggle,notopwall,noleftwall,
+Cell(64,13): black,nobaggle,notopwall,noleftwall,
+Cell(64,16): black,nobaggle,notopwall,noleftwall,
+Cell(64,21): black,nobaggle,notopwall,noleftwall,
+Cell(64,22): black,nobaggle,notopwall,noleftwall,
+Cell(64,23): black,nobaggle,notopwall,noleftwall,
+Cell(64,24): black,nobaggle,notopwall,noleftwall,
+Cell(64,25): black,nobaggle,notopwall,noleftwall,
+Cell(64,26): black,nobaggle,notopwall,noleftwall,
+Cell(64,27): black,nobaggle,notopwall,noleftwall,
+Cell(65,1): black,nobaggle,notopwall,noleftwall,
+Cell(65,7): black,nobaggle,notopwall,noleftwall,
+Cell(65,10): black,nobaggle,notopwall,noleftwall,
+Cell(65,11): black,nobaggle,notopwall,noleftwall,
+Cell(65,13): black,nobaggle,notopwall,noleftwall,
+Cell(65,14): black,nobaggle,notopwall,noleftwall,
+Cell(65,16): black,nobaggle,notopwall,noleftwall,
+Cell(65,17): black,nobaggle,notopwall,noleftwall,
+Cell(65,19): black,nobaggle,notopwall,noleftwall,
+Cell(65,20): black,nobaggle,notopwall,noleftwall,
+Cell(65,21): black,nobaggle,notopwall,noleftwall,
+Cell(65,22): black,nobaggle,notopwall,noleftwall,
+Cell(65,25): black,nobaggle,notopwall,noleftwall,
+Cell(65,26): black,nobaggle,notopwall,noleftwall,
+Cell(65,28): black,nobaggle,notopwall,noleftwall,
+Cell(65,29): black,nobaggle,notopwall,noleftwall,
+Cell(65,32): black,nobaggle,notopwall,noleftwall,
+Cell(65,33): black,nobaggle,notopwall,noleftwall,
+Cell(65,34): black,nobaggle,notopwall,noleftwall,
+Cell(65,35): black,nobaggle,notopwall,noleftwall,
+Cell(66,1): black,nobaggle,notopwall,noleftwall,
+Cell(66,6): black,nobaggle,notopwall,noleftwall,
+Cell(66,7): black,nobaggle,notopwall,noleftwall,
+Cell(66,8): black,nobaggle,notopwall,noleftwall,
+Cell(66,9): black,nobaggle,notopwall,noleftwall,
+Cell(66,11): black,nobaggle,notopwall,noleftwall,
+Cell(66,16): black,nobaggle,notopwall,noleftwall,
+Cell(66,17): black,nobaggle,notopwall,noleftwall,
+Cell(66,18): black,nobaggle,notopwall,noleftwall,
+Cell(66,20): black,nobaggle,notopwall,noleftwall,
+Cell(66,21): black,nobaggle,notopwall,noleftwall,
+Cell(66,23): black,nobaggle,notopwall,noleftwall,
+Cell(66,24): black,nobaggle,notopwall,noleftwall,
+Cell(66,25): black,nobaggle,notopwall,noleftwall,
+Cell(66,29): black,nobaggle,notopwall,noleftwall,
+Cell(66,31): black,nobaggle,notopwall,noleftwall,
+Cell(66,36): black,nobaggle,notopwall,noleftwall,
+Cell(67,1): black,nobaggle,notopwall,noleftwall,
+Cell(67,8): black,nobaggle,notopwall,noleftwall,
+Cell(67,10): black,nobaggle,notopwall,noleftwall,
+Cell(67,15): black,nobaggle,notopwall,noleftwall,
+Cell(67,16): black,nobaggle,notopwall,noleftwall,
+Cell(67,17): black,nobaggle,notopwall,noleftwall,
+Cell(67,18): black,nobaggle,notopwall,noleftwall,
+Cell(67,19): black,nobaggle,notopwall,noleftwall,
+Cell(67,21): black,nobaggle,notopwall,noleftwall,
+Cell(67,23): black,nobaggle,notopwall,noleftwall,
+Cell(67,25): black,nobaggle,notopwall,noleftwall,
+Cell(67,26): black,nobaggle,notopwall,noleftwall,
+Cell(67,27): black,nobaggle,notopwall,noleftwall,
+Cell(67,35): black,nobaggle,notopwall,noleftwall,
+Cell(67,36): black,nobaggle,notopwall,noleftwall,
+Cell(67,37): black,nobaggle,notopwall,noleftwall,
+Cell(68,1): black,nobaggle,notopwall,noleftwall,
+Cell(68,7): black,nobaggle,notopwall,noleftwall,
+Cell(68,8): black,nobaggle,notopwall,noleftwall,
+Cell(68,10): black,nobaggle,notopwall,noleftwall,
+Cell(68,11): black,nobaggle,notopwall,noleftwall,
+Cell(68,12): black,nobaggle,notopwall,noleftwall,
+Cell(68,14): black,nobaggle,notopwall,noleftwall,
+Cell(68,15): black,nobaggle,notopwall,noleftwall,
+Cell(68,19): black,nobaggle,notopwall,noleftwall,
+Cell(68,21): black,nobaggle,notopwall,noleftwall,
+Cell(68,22): black,nobaggle,notopwall,noleftwall,
+Cell(68,24): black,nobaggle,notopwall,noleftwall,
+Cell(68,25): black,nobaggle,notopwall,noleftwall,
+Cell(68,26): black,nobaggle,notopwall,noleftwall,
+Cell(68,27): black,nobaggle,notopwall,noleftwall,
+Cell(68,29): black,nobaggle,notopwall,noleftwall,
+Cell(68,30): black,nobaggle,notopwall,noleftwall,
+Cell(68,31): black,nobaggle,notopwall,noleftwall,
+Cell(68,35): black,nobaggle,notopwall,noleftwall,
+Cell(68,37): black,nobaggle,notopwall,noleftwall,
+Cell(69,1): black,nobaggle,notopwall,noleftwall,
+Cell(69,7): black,nobaggle,notopwall,noleftwall,
+Cell(69,9): black,nobaggle,notopwall,noleftwall,
+Cell(69,11): black,nobaggle,notopwall,noleftwall,
+Cell(69,13): black,nobaggle,notopwall,noleftwall,
+Cell(69,14): black,nobaggle,notopwall,noleftwall,
+Cell(69,15): black,nobaggle,notopwall,noleftwall,
+Cell(69,16): black,nobaggle,notopwall,noleftwall,
+Cell(69,21): black,nobaggle,notopwall,noleftwall,
+Cell(69,22): black,nobaggle,notopwall,noleftwall,
+Cell(69,23): black,nobaggle,notopwall,noleftwall,
+Cell(69,24): black,nobaggle,notopwall,noleftwall,
+Cell(69,27): black,nobaggle,notopwall,noleftwall,
+Cell(69,28): black,nobaggle,notopwall,noleftwall,
+Cell(69,30): black,nobaggle,notopwall,noleftwall,
+Cell(69,31): black,nobaggle,notopwall,noleftwall,
+Cell(70,1): black,nobaggle,notopwall,noleftwall,
+Cell(70,8): black,nobaggle,notopwall,noleftwall,
+Cell(70,9): black,nobaggle,notopwall,noleftwall,
+Cell(70,10): black,nobaggle,notopwall,noleftwall,
+Cell(70,16): black,nobaggle,notopwall,noleftwall,
+Cell(70,17): black,nobaggle,notopwall,noleftwall,
+Cell(70,18): black,nobaggle,notopwall,noleftwall,
+Cell(70,21): black,nobaggle,notopwall,noleftwall,
+Cell(70,22): black,nobaggle,notopwall,noleftwall,
+Cell(70,23): black,nobaggle,notopwall,noleftwall,
+Cell(70,27): black,nobaggle,notopwall,noleftwall,
+Cell(70,28): black,nobaggle,notopwall,noleftwall,
+Cell(70,31): black,nobaggle,notopwall,noleftwall,
+Cell(70,36): black,nobaggle,notopwall,noleftwall,
+Cell(71,1): black,nobaggle,notopwall,noleftwall,
+Cell(71,4): black,nobaggle,notopwall,noleftwall,
+Cell(71,5): black,nobaggle,notopwall,noleftwall,
+Cell(71,9): black,nobaggle,notopwall,noleftwall,
+Cell(71,10): black,nobaggle,notopwall,noleftwall,
+Cell(71,11): black,nobaggle,notopwall,noleftwall,
+Cell(71,18): black,nobaggle,notopwall,noleftwall,
+Cell(71,21): black,nobaggle,notopwall,noleftwall,
+Cell(71,22): black,nobaggle,notopwall,noleftwall,
+Cell(71,23): black,nobaggle,notopwall,noleftwall,
+Cell(71,24): black,nobaggle,notopwall,noleftwall,
+Cell(71,26): black,nobaggle,notopwall,noleftwall,
+Cell(71,27): black,nobaggle,notopwall,noleftwall,
+Cell(71,28): black,nobaggle,notopwall,noleftwall,
+Cell(71,30): black,nobaggle,notopwall,noleftwall,
+Cell(71,31): black,nobaggle,notopwall,noleftwall,
+Cell(71,35): black,nobaggle,notopwall,noleftwall,
+Cell(71,36): black,nobaggle,notopwall,noleftwall,
+Cell(72,1): black,nobaggle,notopwall,noleftwall,
+Cell(72,5): black,nobaggle,notopwall,noleftwall,
+Cell(72,6): black,nobaggle,notopwall,noleftwall,
+Cell(72,8): black,nobaggle,notopwall,noleftwall,
+Cell(72,9): black,nobaggle,notopwall,noleftwall,
+Cell(72,10): black,nobaggle,notopwall,noleftwall,
+Cell(72,12): black,nobaggle,notopwall,noleftwall,
+Cell(72,13): black,nobaggle,notopwall,noleftwall,
+Cell(72,15): black,nobaggle,notopwall,noleftwall,
+Cell(72,18): black,nobaggle,notopwall,noleftwall,
+Cell(72,22): black,nobaggle,notopwall,noleftwall,
+Cell(72,28): black,nobaggle,notopwall,noleftwall,
+Cell(72,29): black,nobaggle,notopwall,noleftwall,
+Cell(72,30): black,nobaggle,notopwall,noleftwall,
+Cell(72,31): black,nobaggle,notopwall,noleftwall,
+Cell(72,33): black,nobaggle,notopwall,noleftwall,
+Cell(72,35): black,nobaggle,notopwall,noleftwall,
+Cell(72,36): black,nobaggle,notopwall,noleftwall,
+Cell(73,1): black,nobaggle,notopwall,noleftwall,
+Cell(73,5): black,nobaggle,notopwall,noleftwall,
+Cell(73,6): black,nobaggle,notopwall,noleftwall,
+Cell(73,7): black,nobaggle,notopwall,noleftwall,
+Cell(73,10): black,nobaggle,notopwall,noleftwall,
+Cell(73,13): black,nobaggle,notopwall,noleftwall,
+Cell(73,16): black,nobaggle,notopwall,noleftwall,
+Cell(73,18): black,nobaggle,notopwall,noleftwall,
+Cell(73,21): black,nobaggle,notopwall,noleftwall,
+Cell(73,22): black,nobaggle,notopwall,noleftwall,
+Cell(73,23): black,nobaggle,notopwall,noleftwall,
+Cell(73,24): black,nobaggle,notopwall,noleftwall,
+Cell(73,26): black,nobaggle,notopwall,noleftwall,
+Cell(73,27): black,nobaggle,notopwall,noleftwall,
+Cell(73,31): black,nobaggle,notopwall,noleftwall,
+Cell(73,32): black,nobaggle,notopwall,noleftwall,
+Cell(73,34): black,nobaggle,notopwall,noleftwall,
+Cell(73,35): black,nobaggle,notopwall,noleftwall,
+Cell(73,36): black,nobaggle,notopwall,noleftwall,
+Cell(73,37): black,nobaggle,notopwall,noleftwall,
+Cell(74,2): black,nobaggle,notopwall,noleftwall,
+Cell(74,4): black,nobaggle,notopwall,noleftwall,
+Cell(74,10): black,nobaggle,notopwall,noleftwall,
+Cell(74,12): black,nobaggle,notopwall,noleftwall,
+Cell(74,18): black,nobaggle,notopwall,noleftwall,
+Cell(74,20): black,nobaggle,notopwall,noleftwall,
+Cell(74,22): black,nobaggle,notopwall,noleftwall,
+Cell(74,23): black,nobaggle,notopwall,noleftwall,
+Cell(74,25): black,nobaggle,notopwall,noleftwall,
+Cell(74,27): black,nobaggle,notopwall,noleftwall,
+Cell(74,30): black,nobaggle,notopwall,noleftwall,
+Cell(74,31): black,nobaggle,notopwall,noleftwall,
+Cell(74,32): black,nobaggle,notopwall,noleftwall,
+Cell(74,34): black,nobaggle,notopwall,noleftwall,
+Cell(74,35): black,nobaggle,notopwall,noleftwall,
+Cell(74,37): black,nobaggle,notopwall,noleftwall,
+Cell(75,6): black,nobaggle,notopwall,noleftwall,
+Cell(75,7): black,nobaggle,notopwall,noleftwall,
+Cell(75,9): black,nobaggle,notopwall,noleftwall,
+Cell(75,10): black,nobaggle,notopwall,noleftwall,
+Cell(75,11): black,nobaggle,notopwall,noleftwall,
+Cell(75,14): black,nobaggle,notopwall,noleftwall,
+Cell(75,16): black,nobaggle,notopwall,noleftwall,
+Cell(75,19): black,nobaggle,notopwall,noleftwall,
+Cell(75,20): black,nobaggle,notopwall,noleftwall,
+Cell(75,22): black,nobaggle,notopwall,noleftwall,
+Cell(75,23): black,nobaggle,notopwall,noleftwall,
+Cell(75,28): black,nobaggle,notopwall,noleftwall,
+Cell(75,31): black,nobaggle,notopwall,noleftwall,
+Cell(75,33): black,nobaggle,notopwall,noleftwall,
+Cell(76,1): black,nobaggle,notopwall,noleftwall,
+Cell(76,3): black,nobaggle,notopwall,noleftwall,
+Cell(76,6): black,nobaggle,notopwall,noleftwall,
+Cell(76,11): black,nobaggle,notopwall,noleftwall,
+Cell(76,16): black,nobaggle,notopwall,noleftwall,
+Cell(76,18): black,nobaggle,notopwall,noleftwall,
+Cell(76,19): black,nobaggle,notopwall,noleftwall,
+Cell(76,20): black,nobaggle,notopwall,noleftwall,
+Cell(76,21): black,nobaggle,notopwall,noleftwall,
+Cell(76,22): black,nobaggle,notopwall,noleftwall,
+Cell(76,25): black,nobaggle,notopwall,noleftwall,
+Cell(76,30): black,nobaggle,notopwall,noleftwall,
+Cell(76,32): black,nobaggle,notopwall,noleftwall,
+Cell(76,33): black,nobaggle,notopwall,noleftwall,
+Cell(77,1): black,nobaggle,notopwall,noleftwall,
+Cell(77,2): black,nobaggle,notopwall,noleftwall,
+Cell(77,3): black,nobaggle,notopwall,noleftwall,
+Cell(77,10): black,nobaggle,notopwall,noleftwall,
+Cell(77,11): black,nobaggle,notopwall,noleftwall,
+Cell(77,12): black,nobaggle,notopwall,noleftwall,
+Cell(77,15): black,nobaggle,notopwall,noleftwall,
+Cell(77,17): black,nobaggle,notopwall,noleftwall,
+Cell(77,18): black,nobaggle,notopwall,noleftwall,
+Cell(77,20): black,nobaggle,notopwall,noleftwall,
+Cell(77,21): black,nobaggle,notopwall,noleftwall,
+Cell(77,26): black,nobaggle,notopwall,noleftwall,
+Cell(77,29): black,nobaggle,notopwall,noleftwall,
+Cell(77,31): black,nobaggle,notopwall,noleftwall,
+Cell(77,32): black,nobaggle,notopwall,noleftwall,
+Cell(77,34): black,nobaggle,notopwall,noleftwall,
+Cell(78,2): black,nobaggle,notopwall,noleftwall,
+Cell(78,7): black,nobaggle,notopwall,noleftwall,
+Cell(78,8): black,nobaggle,notopwall,noleftwall,
+Cell(78,11): black,nobaggle,notopwall,noleftwall,
+Cell(78,12): black,nobaggle,notopwall,noleftwall,
+Cell(78,16): black,nobaggle,notopwall,noleftwall,
+Cell(78,17): black,nobaggle,notopwall,noleftwall,
+Cell(78,18): black,nobaggle,notopwall,noleftwall,
+Cell(78,21): black,nobaggle,notopwall,noleftwall,
+Cell(78,24): black,nobaggle,notopwall,noleftwall,
+Cell(78,27): black,nobaggle,notopwall,noleftwall,
+Cell(78,30): black,nobaggle,notopwall,noleftwall,
+Cell(78,34): black,nobaggle,notopwall,noleftwall,
+Cell(78,36): black,nobaggle,notopwall,noleftwall,
+Cell(79,3): black,nobaggle,notopwall,noleftwall,
+Cell(79,4): black,nobaggle,notopwall,noleftwall,
+Cell(79,6): black,nobaggle,notopwall,noleftwall,
+Cell(79,8): black,nobaggle,notopwall,noleftwall,
+Cell(79,9): black,nobaggle,notopwall,noleftwall,
+Cell(79,10): black,nobaggle,notopwall,noleftwall,
+Cell(79,11): black,nobaggle,notopwall,noleftwall,
+Cell(79,12): black,nobaggle,notopwall,noleftwall,
+Cell(79,13): black,nobaggle,notopwall,noleftwall,
+Cell(79,14): black,nobaggle,notopwall,noleftwall,
+Cell(79,16): black,nobaggle,notopwall,noleftwall,
+Cell(79,17): black,nobaggle,notopwall,noleftwall,
+Cell(79,18): black,nobaggle,notopwall,noleftwall,
+Cell(79,20): black,nobaggle,notopwall,noleftwall,
+Cell(79,21): black,nobaggle,notopwall,noleftwall,
+Cell(79,22): black,nobaggle,notopwall,noleftwall,
+Cell(79,23): black,nobaggle,notopwall,noleftwall,
+Cell(79,24): black,nobaggle,notopwall,noleftwall,
+Cell(79,25): black,nobaggle,notopwall,noleftwall,
+Cell(79,27): black,nobaggle,notopwall,noleftwall,
+Cell(79,28): black,nobaggle,notopwall,noleftwall,
+Cell(79,29): black,nobaggle,notopwall,noleftwall,
+Cell(79,30): black,nobaggle,notopwall,noleftwall,
+Cell(79,31): black,nobaggle,notopwall,noleftwall,
+Cell(79,33): black,nobaggle,notopwall,noleftwall,
+Cell(79,35): black,nobaggle,notopwall,noleftwall,
+Cell(79,36): black,nobaggle,notopwall,noleftwall,
+Cell(79,37): black,nobaggle,notopwall,noleftwall,
+Cell(80,6): black,nobaggle,notopwall,noleftwall,
+Cell(80,7): black,nobaggle,notopwall,noleftwall,
+Cell(80,8): black,nobaggle,notopwall,noleftwall,
+Cell(80,9): black,nobaggle,notopwall,noleftwall,
+Cell(80,10): black,nobaggle,notopwall,noleftwall,
+Cell(80,12): black,nobaggle,notopwall,noleftwall,
+Cell(80,13): black,nobaggle,notopwall,noleftwall,
+Cell(80,14): black,nobaggle,notopwall,noleftwall,
+Cell(80,15): black,nobaggle,notopwall,noleftwall,
+Cell(80,16): black,nobaggle,notopwall,noleftwall,
+Cell(80,19): black,nobaggle,notopwall,noleftwall,
+Cell(80,20): black,nobaggle,notopwall,noleftwall,
+Cell(80,24): black,nobaggle,notopwall,noleftwall,
+Cell(80,25): black,nobaggle,notopwall,noleftwall,
+Cell(80,26): black,nobaggle,notopwall,noleftwall,
+Cell(80,27): black,nobaggle,notopwall,noleftwall,
+Cell(80,28): black,nobaggle,notopwall,noleftwall,
+Cell(80,33): black,nobaggle,notopwall,noleftwall,
+Cell(80,35): black,nobaggle,notopwall,noleftwall,
+Cell(80,37): black,nobaggle,notopwall,noleftwall,
+Cell(81,5): black,nobaggle,notopwall,noleftwall,
+Cell(81,6): black,nobaggle,notopwall,noleftwall,
+Cell(81,7): black,nobaggle,notopwall,noleftwall,
+Cell(81,9): black,nobaggle,notopwall,noleftwall,
+Cell(81,10): black,nobaggle,notopwall,noleftwall,
+Cell(81,11): black,nobaggle,notopwall,noleftwall,
+Cell(81,14): black,nobaggle,notopwall,noleftwall,
+Cell(81,15): black,nobaggle,notopwall,noleftwall,
+Cell(81,17): black,nobaggle,notopwall,noleftwall,
+Cell(81,20): black,nobaggle,notopwall,noleftwall,
+Cell(81,27): black,nobaggle,notopwall,noleftwall,
+Cell(81,31): black,nobaggle,notopwall,noleftwall,
+Cell(81,32): black,nobaggle,notopwall,noleftwall,
+Cell(81,35): black,nobaggle,notopwall,noleftwall,
+Cell(82,11): black,nobaggle,notopwall,noleftwall,
+Cell(82,13): black,nobaggle,notopwall,noleftwall,
+Cell(82,17): black,nobaggle,notopwall,noleftwall,
+Cell(82,18): black,nobaggle,notopwall,noleftwall,
+Cell(82,19): black,nobaggle,notopwall,noleftwall,
+Cell(82,20): black,nobaggle,notopwall,noleftwall,
+Cell(82,21): black,nobaggle,notopwall,noleftwall,
+Cell(82,22): black,nobaggle,notopwall,noleftwall,
+Cell(82,23): black,nobaggle,notopwall,noleftwall,
+Cell(82,24): black,nobaggle,notopwall,noleftwall,
+Cell(82,25): black,nobaggle,notopwall,noleftwall,
+Cell(82,27): black,nobaggle,notopwall,noleftwall,
+Cell(82,28): black,nobaggle,notopwall,noleftwall,
+Cell(82,29): black,nobaggle,notopwall,noleftwall,
+Cell(82,30): black,nobaggle,notopwall,noleftwall,
+Cell(82,31): black,nobaggle,notopwall,noleftwall,
+Cell(82,35): black,nobaggle,notopwall,noleftwall,
+Cell(82,36): black,nobaggle,notopwall,noleftwall,
+Cell(82,37): black,nobaggle,notopwall,noleftwall,
+Cell(82,38): black,nobaggle,notopwall,noleftwall,
+Cell(83,9): black,nobaggle,notopwall,noleftwall,
+Cell(83,10): black,nobaggle,notopwall,noleftwall,
+Cell(83,11): black,nobaggle,notopwall,noleftwall,
+Cell(83,14): black,nobaggle,notopwall,noleftwall,
+Cell(83,15): black,nobaggle,notopwall,noleftwall,
+Cell(83,16): black,nobaggle,notopwall,noleftwall,
+Cell(83,18): black,nobaggle,notopwall,noleftwall,
+Cell(83,22): black,nobaggle,notopwall,noleftwall,
+Cell(83,24): black,nobaggle,notopwall,noleftwall,
+Cell(83,26): black,nobaggle,notopwall,noleftwall,
+Cell(83,27): black,nobaggle,notopwall,noleftwall,
+Cell(83,28): black,nobaggle,notopwall,noleftwall,
+Cell(83,34): black,nobaggle,notopwall,noleftwall,
+Cell(83,37): black,nobaggle,notopwall,noleftwall,
+Cell(83,42): black,nobaggle,notopwall,noleftwall,
+Cell(83,43): black,nobaggle,notopwall,noleftwall,
+Cell(84,7): black,nobaggle,notopwall,noleftwall,
+Cell(84,8): black,nobaggle,notopwall,noleftwall,
+Cell(84,14): black,nobaggle,notopwall,noleftwall,
+Cell(84,15): black,nobaggle,notopwall,noleftwall,
+Cell(84,17): black,nobaggle,notopwall,noleftwall,
+Cell(84,18): black,nobaggle,notopwall,noleftwall,
+Cell(84,19): black,nobaggle,notopwall,noleftwall,
+Cell(84,23): black,nobaggle,notopwall,noleftwall,
+Cell(84,24): black,nobaggle,notopwall,noleftwall,
+Cell(84,26): black,nobaggle,notopwall,noleftwall,
+Cell(84,27): black,nobaggle,notopwall,noleftwall,
+Cell(84,28): black,nobaggle,notopwall,noleftwall,
+Cell(84,32): black,nobaggle,notopwall,noleftwall,
+Cell(84,33): black,nobaggle,notopwall,noleftwall,
+Cell(84,35): black,nobaggle,notopwall,noleftwall,
+Cell(84,36): black,nobaggle,notopwall,noleftwall,
+Cell(84,37): black,nobaggle,notopwall,noleftwall,
+Cell(84,38): black,nobaggle,notopwall,noleftwall,
+Cell(84,41): black,nobaggle,notopwall,noleftwall,
+Cell(84,44): black,nobaggle,notopwall,noleftwall,
+Cell(85,7): black,nobaggle,notopwall,noleftwall,
+Cell(85,8): black,nobaggle,notopwall,noleftwall,
+Cell(85,9): black,nobaggle,notopwall,noleftwall,
+Cell(85,11): black,nobaggle,notopwall,noleftwall,
+Cell(85,12): black,nobaggle,notopwall,noleftwall,
+Cell(85,15): black,nobaggle,notopwall,noleftwall,
+Cell(85,18): black,nobaggle,notopwall,noleftwall,
+Cell(85,23): black,nobaggle,notopwall,noleftwall,
+Cell(85,27): black,nobaggle,notopwall,noleftwall,
+Cell(85,28): black,nobaggle,notopwall,noleftwall,
+Cell(85,29): black,nobaggle,notopwall,noleftwall,
+Cell(85,30): black,nobaggle,notopwall,noleftwall,
+Cell(85,31): black,nobaggle,notopwall,noleftwall,
+Cell(85,33): black,nobaggle,notopwall,noleftwall,
+Cell(85,35): black,nobaggle,notopwall,noleftwall,
+Cell(85,36): black,nobaggle,notopwall,noleftwall,
+Cell(85,38): black,nobaggle,notopwall,noleftwall,
+Cell(85,43): black,nobaggle,notopwall,noleftwall,
+Cell(85,44): black,nobaggle,notopwall,noleftwall,
+Cell(85,45): black,nobaggle,notopwall,noleftwall,
+Cell(86,8): black,nobaggle,notopwall,noleftwall,
+Cell(86,11): black,nobaggle,notopwall,noleftwall,
+Cell(86,15): black,nobaggle,notopwall,noleftwall,
+Cell(86,20): black,nobaggle,notopwall,noleftwall,
+Cell(86,26): black,nobaggle,notopwall,noleftwall,
+Cell(86,27): black,nobaggle,notopwall,noleftwall,
+Cell(86,30): black,nobaggle,notopwall,noleftwall,
+Cell(86,31): black,nobaggle,notopwall,noleftwall,
+Cell(86,35): black,nobaggle,notopwall,noleftwall,
+Cell(86,37): black,nobaggle,notopwall,noleftwall,
+Cell(86,39): black,nobaggle,notopwall,noleftwall,
+Cell(86,40): black,nobaggle,notopwall,noleftwall,
+Cell(86,41): black,nobaggle,notopwall,noleftwall,
+Cell(86,42): black,nobaggle,notopwall,noleftwall,
+Cell(86,43): black,nobaggle,notopwall,noleftwall,
+Cell(86,45): black,nobaggle,notopwall,noleftwall,
+Cell(87,9): black,nobaggle,notopwall,noleftwall,
+Cell(87,10): black,nobaggle,notopwall,noleftwall,
+Cell(87,12): black,nobaggle,notopwall,noleftwall,
+Cell(87,14): black,nobaggle,notopwall,noleftwall,
+Cell(87,17): black,nobaggle,notopwall,noleftwall,
+Cell(87,18): black,nobaggle,notopwall,noleftwall,
+Cell(87,21): black,nobaggle,notopwall,noleftwall,
+Cell(87,25): black,nobaggle,notopwall,noleftwall,
+Cell(87,27): black,nobaggle,notopwall,noleftwall,
+Cell(87,28): black,nobaggle,notopwall,noleftwall,
+Cell(87,31): black,nobaggle,notopwall,noleftwall,
+Cell(87,32): black,nobaggle,notopwall,noleftwall,
+Cell(87,33): black,nobaggle,notopwall,noleftwall,
+Cell(87,34): black,nobaggle,notopwall,noleftwall,
+Cell(87,36): black,nobaggle,notopwall,noleftwall,
+Cell(87,37): black,nobaggle,notopwall,noleftwall,
+Cell(87,38): black,nobaggle,notopwall,noleftwall,
+Cell(87,39): black,nobaggle,notopwall,noleftwall,
+Cell(87,40): black,nobaggle,notopwall,noleftwall,
+Cell(87,41): black,nobaggle,notopwall,noleftwall,
+Cell(88,12): black,nobaggle,notopwall,noleftwall,
+Cell(88,13): black,nobaggle,notopwall,noleftwall,
+Cell(88,14): black,nobaggle,notopwall,noleftwall,
+Cell(88,18): black,nobaggle,notopwall,noleftwall,
+Cell(88,22): black,nobaggle,notopwall,noleftwall,
+Cell(88,23): black,nobaggle,notopwall,noleftwall,
+Cell(88,24): black,nobaggle,notopwall,noleftwall,
+Cell(88,25): black,nobaggle,notopwall,noleftwall,
+Cell(88,28): black,nobaggle,notopwall,noleftwall,
+Cell(88,29): black,nobaggle,notopwall,noleftwall,
+Cell(88,31): black,nobaggle,notopwall,noleftwall,
+Cell(88,32): black,nobaggle,notopwall,noleftwall,
+Cell(88,33): black,nobaggle,notopwall,noleftwall,
+Cell(88,35): black,nobaggle,notopwall,noleftwall,
+Cell(88,42): black,nobaggle,notopwall,noleftwall,
+Cell(88,43): black,nobaggle,notopwall,noleftwall,
+Cell(89,13): black,nobaggle,notopwall,noleftwall,
+Cell(89,16): black,nobaggle,notopwall,noleftwall,
+Cell(89,19): black,nobaggle,notopwall,noleftwall,
+Cell(89,23): black,nobaggle,notopwall,noleftwall,
+Cell(89,24): black,nobaggle,notopwall,noleftwall,
+Cell(89,26): black,nobaggle,notopwall,noleftwall,
+Cell(89,30): black,nobaggle,notopwall,noleftwall,
+Cell(89,33): black,nobaggle,notopwall,noleftwall,
+Cell(89,34): black,nobaggle,notopwall,noleftwall,
+Cell(89,35): black,nobaggle,notopwall,noleftwall,
+Cell(89,36): black,nobaggle,notopwall,noleftwall,
+Cell(89,37): black,nobaggle,notopwall,noleftwall,
+Cell(89,39): black,nobaggle,notopwall,noleftwall,
+Cell(89,42): black,nobaggle,notopwall,noleftwall,
+Cell(90,14): black,nobaggle,notopwall,noleftwall,
+Cell(90,15): black,nobaggle,notopwall,noleftwall,
+Cell(90,17): black,nobaggle,notopwall,noleftwall,
+Cell(90,23): black,nobaggle,notopwall,noleftwall,
+Cell(90,29): black,nobaggle,notopwall,noleftwall,
+Cell(90,30): black,nobaggle,notopwall,noleftwall,
+Cell(90,31): black,nobaggle,notopwall,noleftwall,
+Cell(90,32): black,nobaggle,notopwall,noleftwall,
+Cell(90,33): black,nobaggle,notopwall,noleftwall,
+Cell(90,34): black,nobaggle,notopwall,noleftwall,
+Cell(90,35): black,nobaggle,notopwall,noleftwall,
+Cell(90,37): black,nobaggle,notopwall,noleftwall,
+Cell(90,38): black,nobaggle,notopwall,noleftwall,
+Cell(90,39): black,nobaggle,notopwall,noleftwall,
+Cell(90,41): black,nobaggle,notopwall,noleftwall,
+Cell(90,42): black,nobaggle,notopwall,noleftwall,
+Cell(91,17): black,nobaggle,notopwall,noleftwall,
+Cell(91,22): black,nobaggle,notopwall,noleftwall,
+Cell(91,23): black,nobaggle,notopwall,noleftwall,
+Cell(91,27): black,nobaggle,notopwall,noleftwall,
+Cell(91,34): black,nobaggle,notopwall,noleftwall,
+Cell(91,35): black,nobaggle,notopwall,noleftwall,
+Cell(91,37): black,nobaggle,notopwall,noleftwall,
+Cell(91,38): black,nobaggle,notopwall,noleftwall,
+Cell(91,41): black,nobaggle,notopwall,noleftwall,
+Cell(91,43): black,nobaggle,notopwall,noleftwall,
+Cell(92,18): black,nobaggle,notopwall,noleftwall,
+Cell(92,21): black,nobaggle,notopwall,noleftwall,
+Cell(92,22): black,nobaggle,notopwall,noleftwall,
+Cell(92,25): black,nobaggle,notopwall,noleftwall,
+Cell(92,26): black,nobaggle,notopwall,noleftwall,
+Cell(92,27): black,nobaggle,notopwall,noleftwall,
+Cell(92,36): black,nobaggle,notopwall,noleftwall,
+Cell(92,37): black,nobaggle,notopwall,noleftwall,
+Cell(92,38): black,nobaggle,notopwall,noleftwall,
+Cell(92,39): black,nobaggle,notopwall,noleftwall,
+Cell(92,41): black,nobaggle,notopwall,noleftwall,
+Cell(92,44): black,nobaggle,notopwall,noleftwall,
+Cell(93,19): black,nobaggle,notopwall,noleftwall,
+Cell(93,20): black,nobaggle,notopwall,noleftwall,
+Cell(93,23): black,nobaggle,notopwall,noleftwall,
+Cell(93,24): black,nobaggle,notopwall,noleftwall,
+Cell(93,37): black,nobaggle,notopwall,noleftwall,
+Cell(93,38): black,nobaggle,notopwall,noleftwall,
+Cell(93,39): black,nobaggle,notopwall,noleftwall,
+Cell(93,41): black,nobaggle,notopwall,noleftwall,
+Cell(93,42): black,nobaggle,notopwall,noleftwall,
+Cell(93,44): black,nobaggle,notopwall,noleftwall,
+Cell(94,42): black,nobaggle,notopwall,noleftwall,
+Cell(94,43): black,nobaggle,notopwall,noleftwall,
+Cell(95,41): black,nobaggle,notopwall,noleftwall,
+Cell(95,42): black,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/langtoncolors/LangtonColors-answer1.map b/src/lessons/turmites/langtoncolors/LangtonColors-answer1.map
new file mode 100644
index 0000000..4ab57c7
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColors-answer1.map
@@ -0,0 +1,425 @@
+TurmiteWorld: LLRR (20001 steps)
+Size: 30x30
+Buggle(16,15): east,red,cyan,ant
+Cell(1,6): blue,nobaggle,notopwall,noleftwall,
+Cell(1,7): blue,nobaggle,notopwall,noleftwall,
+Cell(1,8): blue,nobaggle,notopwall,noleftwall,
+Cell(1,9): blue,nobaggle,notopwall,noleftwall,
+Cell(1,10): blue,nobaggle,notopwall,noleftwall,
+Cell(1,11): blue,nobaggle,notopwall,noleftwall,
+Cell(1,12): blue,nobaggle,notopwall,noleftwall,
+Cell(1,13): blue,nobaggle,notopwall,noleftwall,
+Cell(1,14): blue,nobaggle,notopwall,noleftwall,
+Cell(1,15): blue,nobaggle,notopwall,noleftwall,
+Cell(1,16): blue,nobaggle,notopwall,noleftwall,
+Cell(1,17): blue,nobaggle,notopwall,noleftwall,
+Cell(1,18): blue,nobaggle,notopwall,noleftwall,
+Cell(1,19): blue,nobaggle,notopwall,noleftwall,
+Cell(1,20): blue,nobaggle,notopwall,noleftwall,
+Cell(1,21): blue,nobaggle,notopwall,noleftwall,
+Cell(1,22): blue,nobaggle,notopwall,noleftwall,
+Cell(1,23): blue,nobaggle,notopwall,noleftwall,
+Cell(1,24): blue,nobaggle,notopwall,noleftwall,
+Cell(1,25): blue,nobaggle,notopwall,noleftwall,
+Cell(2,5): blue,nobaggle,notopwall,noleftwall,
+Cell(2,7): blue,nobaggle,notopwall,noleftwall,
+Cell(2,24): blue,nobaggle,notopwall,noleftwall,
+Cell(2,26): blue,nobaggle,notopwall,noleftwall,
+Cell(3,4): blue,nobaggle,notopwall,noleftwall,
+Cell(3,6): blue,nobaggle,notopwall,noleftwall,
+Cell(3,10): blue,nobaggle,notopwall,noleftwall,
+Cell(3,11): blue,nobaggle,notopwall,noleftwall,
+Cell(3,12): blue,nobaggle,notopwall,noleftwall,
+Cell(3,13): blue,nobaggle,notopwall,noleftwall,
+Cell(3,14): blue,nobaggle,notopwall,noleftwall,
+Cell(3,15): blue,nobaggle,notopwall,noleftwall,
+Cell(3,16): blue,nobaggle,notopwall,noleftwall,
+Cell(3,17): blue,nobaggle,notopwall,noleftwall,
+Cell(3,18): blue,nobaggle,notopwall,noleftwall,
+Cell(3,19): blue,nobaggle,notopwall,noleftwall,
+Cell(3,20): blue,nobaggle,notopwall,noleftwall,
+Cell(3,21): blue,nobaggle,notopwall,noleftwall,
+Cell(3,25): blue,nobaggle,notopwall,noleftwall,
+Cell(3,27): blue,nobaggle,notopwall,noleftwall,
+Cell(4,3): blue,nobaggle,notopwall,noleftwall,
+Cell(4,6): blue,nobaggle,notopwall,noleftwall,
+Cell(4,7): blue,nobaggle,notopwall,noleftwall,
+Cell(4,8): blue,nobaggle,notopwall,noleftwall,
+Cell(4,9): blue,nobaggle,notopwall,noleftwall,
+Cell(4,10): blue,nobaggle,notopwall,noleftwall,
+Cell(4,11): blue,nobaggle,notopwall,noleftwall,
+Cell(4,12): blue,nobaggle,notopwall,noleftwall,
+Cell(4,13): blue,nobaggle,notopwall,noleftwall,
+Cell(4,14): blue,nobaggle,notopwall,noleftwall,
+Cell(4,15): blue,nobaggle,notopwall,noleftwall,
+Cell(4,16): blue,nobaggle,notopwall,noleftwall,
+Cell(4,17): blue,nobaggle,notopwall,noleftwall,
+Cell(4,18): blue,nobaggle,notopwall,noleftwall,
+Cell(4,19): blue,nobaggle,notopwall,noleftwall,
+Cell(4,20): blue,nobaggle,notopwall,noleftwall,
+Cell(4,21): blue,nobaggle,notopwall,noleftwall,
+Cell(4,22): blue,nobaggle,notopwall,noleftwall,
+Cell(4,23): blue,nobaggle,notopwall,noleftwall,
+Cell(4,24): blue,nobaggle,notopwall,noleftwall,
+Cell(4,25): blue,nobaggle,notopwall,noleftwall,
+Cell(4,28): blue,nobaggle,notopwall,noleftwall,
+Cell(5,3): blue,nobaggle,notopwall,noleftwall,
+Cell(5,4): blue,nobaggle,notopwall,noleftwall,
+Cell(5,7): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,8): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,9): blue,nobaggle,notopwall,noleftwall,
+Cell(5,12): blue,nobaggle,notopwall,noleftwall,
+Cell(5,19): blue,nobaggle,notopwall,noleftwall,
+Cell(5,22): blue,nobaggle,notopwall,noleftwall,
+Cell(5,23): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,24): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,27): blue,nobaggle,notopwall,noleftwall,
+Cell(5,28): blue,nobaggle,notopwall,noleftwall,
+Cell(6,0): black,nobaggle,notopwall,noleftwall,
+Cell(6,1): black,nobaggle,notopwall,noleftwall,
+Cell(6,2): black,nobaggle,notopwall,noleftwall,
+Cell(6,3): blue,nobaggle,notopwall,noleftwall,
+Cell(6,4): blue,nobaggle,notopwall,noleftwall,
+Cell(6,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,8): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,12): blue,nobaggle,notopwall,noleftwall,
+Cell(6,19): blue,nobaggle,notopwall,noleftwall,
+Cell(6,23): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,27): blue,nobaggle,notopwall,noleftwall,
+Cell(6,28): blue,nobaggle,notopwall,noleftwall,
+Cell(6,29): black,nobaggle,notopwall,noleftwall,
+Cell(7,0): black,nobaggle,notopwall,noleftwall,
+Cell(7,1): black,nobaggle,notopwall,noleftwall,
+Cell(7,2): black,nobaggle,notopwall,noleftwall,
+Cell(7,3): blue,nobaggle,notopwall,noleftwall,
+Cell(7,4): blue,nobaggle,notopwall,noleftwall,
+Cell(7,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(7,7): cyan,nobaggle,notopwall,noleftwall,
+Cell(7,9): blue,nobaggle,notopwall,noleftwall,
+Cell(7,11): blue,nobaggle,notopwall,noleftwall,
+Cell(7,13): blue,nobaggle,notopwall,noleftwall,
+Cell(7,14): black,nobaggle,notopwall,noleftwall,
+Cell(7,15): black,nobaggle,notopwall,noleftwall,
+Cell(7,16): black,nobaggle,notopwall,noleftwall,
+Cell(7,17): black,nobaggle,notopwall,noleftwall,
+Cell(7,18): blue,nobaggle,notopwall,noleftwall,
+Cell(7,20): blue,nobaggle,notopwall,noleftwall,
+Cell(7,22): blue,nobaggle,notopwall,noleftwall,
+Cell(7,24): cyan,nobaggle,notopwall,noleftwall,
+Cell(7,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(7,27): blue,nobaggle,notopwall,noleftwall,
+Cell(7,28): blue,nobaggle,notopwall,noleftwall,
+Cell(7,29): black,nobaggle,notopwall,noleftwall,
+Cell(8,0): blue,nobaggle,notopwall,noleftwall,
+Cell(8,1): blue,nobaggle,notopwall,noleftwall,
+Cell(8,4): blue,nobaggle,notopwall,noleftwall,
+Cell(8,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,12): blue,nobaggle,notopwall,noleftwall,
+Cell(8,13): blue,nobaggle,notopwall,noleftwall,
+Cell(8,14): black,nobaggle,notopwall,noleftwall,
+Cell(8,15): black,nobaggle,notopwall,noleftwall,
+Cell(8,16): black,nobaggle,notopwall,noleftwall,
+Cell(8,17): black,nobaggle,notopwall,noleftwall,
+Cell(8,18): blue,nobaggle,notopwall,noleftwall,
+Cell(8,19): blue,nobaggle,notopwall,noleftwall,
+Cell(8,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,27): blue,nobaggle,notopwall,noleftwall,
+Cell(9,0): blue,nobaggle,notopwall,noleftwall,
+Cell(9,1): blue,nobaggle,notopwall,noleftwall,
+Cell(9,2): black,nobaggle,notopwall,noleftwall,
+Cell(9,3): black,nobaggle,notopwall,noleftwall,
+Cell(9,4): black,nobaggle,notopwall,noleftwall,
+Cell(9,5): black,nobaggle,notopwall,noleftwall,
+Cell(9,9): blue,nobaggle,notopwall,noleftwall,
+Cell(9,10): blue,nobaggle,notopwall,noleftwall,
+Cell(9,11): blue,nobaggle,notopwall,noleftwall,
+Cell(9,13): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,14): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,20): blue,nobaggle,notopwall,noleftwall,
+Cell(9,21): blue,nobaggle,notopwall,noleftwall,
+Cell(9,22): blue,nobaggle,notopwall,noleftwall,
+Cell(9,26): black,nobaggle,notopwall,noleftwall,
+Cell(9,27): black,nobaggle,notopwall,noleftwall,
+Cell(9,28): black,nobaggle,notopwall,noleftwall,
+Cell(9,29): black,nobaggle,notopwall,noleftwall,
+Cell(10,0): black,nobaggle,notopwall,noleftwall,
+Cell(10,1): black,nobaggle,notopwall,noleftwall,
+Cell(10,2): blue,nobaggle,notopwall,noleftwall,
+Cell(10,3): black,nobaggle,notopwall,noleftwall,
+Cell(10,4): black,nobaggle,notopwall,noleftwall,
+Cell(10,5): black,nobaggle,notopwall,noleftwall,
+Cell(10,9): blue,nobaggle,notopwall,noleftwall,
+Cell(10,11): blue,nobaggle,notopwall,noleftwall,
+Cell(10,12): blue,nobaggle,notopwall,noleftwall,
+Cell(10,13): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,14): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,19): blue,nobaggle,notopwall,noleftwall,
+Cell(10,20): blue,nobaggle,notopwall,noleftwall,
+Cell(10,22): blue,nobaggle,notopwall,noleftwall,
+Cell(10,26): black,nobaggle,notopwall,noleftwall,
+Cell(10,27): black,nobaggle,notopwall,noleftwall,
+Cell(10,28): black,nobaggle,notopwall,noleftwall,
+Cell(10,29): blue,nobaggle,notopwall,noleftwall,
+Cell(11,0): black,nobaggle,notopwall,noleftwall,
+Cell(11,1): black,nobaggle,notopwall,noleftwall,
+Cell(11,2): black,nobaggle,notopwall,noleftwall,
+Cell(11,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(11,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(11,7): blue,nobaggle,notopwall,noleftwall,
+Cell(11,8): blue,nobaggle,notopwall,noleftwall,
+Cell(11,9): blue,nobaggle,notopwall,noleftwall,
+Cell(11,14): blue,nobaggle,notopwall,noleftwall,
+Cell(11,17): blue,nobaggle,notopwall,noleftwall,
+Cell(11,22): blue,nobaggle,notopwall,noleftwall,
+Cell(11,23): blue,nobaggle,notopwall,noleftwall,
+Cell(11,24): blue,nobaggle,notopwall,noleftwall,
+Cell(11,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(11,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(11,29): black,nobaggle,notopwall,noleftwall,
+Cell(12,0): blue,nobaggle,notopwall,noleftwall,
+Cell(12,1): blue,nobaggle,notopwall,noleftwall,
+Cell(12,4): blue,nobaggle,notopwall,noleftwall,
+Cell(12,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,8): blue,nobaggle,notopwall,noleftwall,
+Cell(12,10): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,11): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,12): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,13): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,14): blue,nobaggle,notopwall,noleftwall,
+Cell(12,15): blue,nobaggle,notopwall,noleftwall,
+Cell(12,16): blue,nobaggle,notopwall,noleftwall,
+Cell(12,17): blue,nobaggle,notopwall,noleftwall,
+Cell(12,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,20): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,23): blue,nobaggle,notopwall,noleftwall,
+Cell(12,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,27): blue,nobaggle,notopwall,noleftwall,
+Cell(13,2): blue,nobaggle,notopwall,noleftwall,
+Cell(13,3): blue,nobaggle,notopwall,noleftwall,
+Cell(13,6): black,nobaggle,notopwall,noleftwall,
+Cell(13,7): black,nobaggle,notopwall,noleftwall,
+Cell(13,10): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,11): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,12): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,13): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,14): black,nobaggle,notopwall,noleftwall,
+Cell(13,15): black,nobaggle,notopwall,noleftwall,
+Cell(13,16): black,nobaggle,notopwall,noleftwall,
+Cell(13,17): black,nobaggle,notopwall,noleftwall,
+Cell(13,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,20): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,24): black,nobaggle,notopwall,noleftwall,
+Cell(13,25): black,nobaggle,notopwall,noleftwall,
+Cell(13,28): blue,nobaggle,notopwall,noleftwall,
+Cell(13,29): blue,nobaggle,notopwall,noleftwall,
+Cell(14,2): blue,nobaggle,notopwall,noleftwall,
+Cell(14,3): blue,nobaggle,notopwall,noleftwall,
+Cell(14,4): blue,nobaggle,notopwall,noleftwall,
+Cell(14,5): black,nobaggle,notopwall,noleftwall,
+Cell(14,7): blue,nobaggle,notopwall,noleftwall,
+Cell(14,8): black,nobaggle,notopwall,noleftwall,
+Cell(14,9): blue,nobaggle,notopwall,noleftwall,
+Cell(14,12): blue,nobaggle,notopwall,noleftwall,
+Cell(14,13): blue,nobaggle,notopwall,noleftwall,
+Cell(14,14): black,nobaggle,notopwall,noleftwall,
+Cell(14,15): black,nobaggle,notopwall,noleftwall,
+Cell(14,16): black,nobaggle,notopwall,noleftwall,
+Cell(14,17): black,nobaggle,notopwall,noleftwall,
+Cell(14,18): blue,nobaggle,notopwall,noleftwall,
+Cell(14,19): blue,nobaggle,notopwall,noleftwall,
+Cell(14,22): blue,nobaggle,notopwall,noleftwall,
+Cell(14,23): black,nobaggle,notopwall,noleftwall,
+Cell(14,24): blue,nobaggle,notopwall,noleftwall,
+Cell(14,26): black,nobaggle,notopwall,noleftwall,
+Cell(14,27): blue,nobaggle,notopwall,noleftwall,
+Cell(14,28): blue,nobaggle,notopwall,noleftwall,
+Cell(14,29): blue,nobaggle,notopwall,noleftwall,
+Cell(15,0): blue,nobaggle,notopwall,noleftwall,
+Cell(15,1): blue,nobaggle,notopwall,noleftwall,
+Cell(15,4): black,nobaggle,notopwall,noleftwall,
+Cell(15,5): blue,nobaggle,notopwall,noleftwall,
+Cell(15,8): black,nobaggle,notopwall,noleftwall,
+Cell(15,10): blue,nobaggle,notopwall,noleftwall,
+Cell(15,11): blue,nobaggle,notopwall,noleftwall,
+Cell(15,14): blue,nobaggle,notopwall,noleftwall,
+Cell(15,15): cyan,nobaggle,notopwall,noleftwall,
+Cell(15,16): blue,nobaggle,notopwall,noleftwall,
+Cell(15,17): blue,nobaggle,notopwall,noleftwall,
+Cell(15,20): blue,nobaggle,notopwall,noleftwall,
+Cell(15,21): blue,nobaggle,notopwall,noleftwall,
+Cell(15,23): black,nobaggle,notopwall,noleftwall,
+Cell(15,26): blue,nobaggle,notopwall,noleftwall,
+Cell(15,27): black,nobaggle,notopwall,noleftwall,
+Cell(16,0): blue,nobaggle,notopwall,noleftwall,
+Cell(16,1): blue,nobaggle,notopwall,noleftwall,
+Cell(16,3): black,nobaggle,notopwall,noleftwall,
+Cell(16,4): blue,nobaggle,notopwall,noleftwall,
+Cell(16,5): blue,nobaggle,notopwall,noleftwall,
+Cell(16,6): blue,nobaggle,notopwall,noleftwall,
+Cell(16,8): black,nobaggle,notopwall,noleftwall,
+Cell(16,12): blue,nobaggle,notopwall,noleftwall,
+Cell(16,13): black,nobaggle,notopwall,noleftwall,
+Cell(16,14): black,nobaggle,notopwall,noleftwall,
+Cell(16,15): blue,nobaggle,notopwall,noleftwall,
+Cell(16,16): blue,nobaggle,notopwall,noleftwall,
+Cell(16,17): black,nobaggle,notopwall,noleftwall,
+Cell(16,18): black,nobaggle,notopwall,noleftwall,
+Cell(16,19): blue,nobaggle,notopwall,noleftwall,
+Cell(16,23): black,nobaggle,notopwall,noleftwall,
+Cell(16,25): blue,nobaggle,notopwall,noleftwall,
+Cell(16,26): blue,nobaggle,notopwall,noleftwall,
+Cell(16,27): blue,nobaggle,notopwall,noleftwall,
+Cell(16,28): black,nobaggle,notopwall,noleftwall,
+Cell(17,3): black,nobaggle,notopwall,noleftwall,
+Cell(17,4): blue,nobaggle,notopwall,noleftwall,
+Cell(17,5): blue,nobaggle,notopwall,noleftwall,
+Cell(17,8): black,nobaggle,notopwall,noleftwall,
+Cell(17,11): blue,nobaggle,notopwall,noleftwall,
+Cell(17,13): black,nobaggle,notopwall,noleftwall,
+Cell(17,14): black,nobaggle,notopwall,noleftwall,
+Cell(17,15): blue,nobaggle,notopwall,noleftwall,
+Cell(17,16): blue,nobaggle,notopwall,noleftwall,
+Cell(17,17): black,nobaggle,notopwall,noleftwall,
+Cell(17,18): black,nobaggle,notopwall,noleftwall,
+Cell(17,20): blue,nobaggle,notopwall,noleftwall,
+Cell(17,23): black,nobaggle,notopwall,noleftwall,
+Cell(17,26): blue,nobaggle,notopwall,noleftwall,
+Cell(17,27): blue,nobaggle,notopwall,noleftwall,
+Cell(17,28): black,nobaggle,notopwall,noleftwall,
+Cell(18,2): blue,nobaggle,notopwall,noleftwall,
+Cell(18,4): black,nobaggle,notopwall,noleftwall,
+Cell(18,6): blue,nobaggle,notopwall,noleftwall,
+Cell(18,8): black,nobaggle,notopwall,noleftwall,
+Cell(18,12): blue,nobaggle,notopwall,noleftwall,
+Cell(18,13): blue,nobaggle,notopwall,noleftwall,
+Cell(18,15): blue,nobaggle,notopwall,noleftwall,
+Cell(18,16): blue,nobaggle,notopwall,noleftwall,
+Cell(18,18): blue,nobaggle,notopwall,noleftwall,
+Cell(18,19): blue,nobaggle,notopwall,noleftwall,
+Cell(18,23): black,nobaggle,notopwall,noleftwall,
+Cell(18,25): blue,nobaggle,notopwall,noleftwall,
+Cell(18,27): black,nobaggle,notopwall,noleftwall,
+Cell(18,29): blue,nobaggle,notopwall,noleftwall,
+Cell(19,0): blue,nobaggle,notopwall,noleftwall,
+Cell(19,1): blue,nobaggle,notopwall,noleftwall,
+Cell(19,3): blue,nobaggle,notopwall,noleftwall,
+Cell(19,4): black,nobaggle,notopwall,noleftwall,
+Cell(19,5): blue,nobaggle,notopwall,noleftwall,
+Cell(19,6): black,nobaggle,notopwall,noleftwall,
+Cell(19,7): black,nobaggle,notopwall,noleftwall,
+Cell(19,9): black,nobaggle,notopwall,noleftwall,
+Cell(19,10): black,nobaggle,notopwall,noleftwall,
+Cell(19,11): black,nobaggle,notopwall,noleftwall,
+Cell(19,14): blue,nobaggle,notopwall,noleftwall,
+Cell(19,17): blue,nobaggle,notopwall,noleftwall,
+Cell(19,20): black,nobaggle,notopwall,noleftwall,
+Cell(19,21): black,nobaggle,notopwall,noleftwall,
+Cell(19,22): black,nobaggle,notopwall,noleftwall,
+Cell(19,24): black,nobaggle,notopwall,noleftwall,
+Cell(19,25): black,nobaggle,notopwall,noleftwall,
+Cell(19,26): blue,nobaggle,notopwall,noleftwall,
+Cell(19,27): black,nobaggle,notopwall,noleftwall,
+Cell(19,28): blue,nobaggle,notopwall,noleftwall,
+Cell(20,2): blue,nobaggle,notopwall,noleftwall,
+Cell(20,4): black,nobaggle,notopwall,noleftwall,
+Cell(20,6): black,nobaggle,notopwall,noleftwall,
+Cell(20,7): black,nobaggle,notopwall,noleftwall,
+Cell(20,8): blue,nobaggle,notopwall,noleftwall,
+Cell(20,9): blue,nobaggle,notopwall,noleftwall,
+Cell(20,11): black,nobaggle,notopwall,noleftwall,
+Cell(20,13): blue,nobaggle,notopwall,noleftwall,
+Cell(20,14): blue,nobaggle,notopwall,noleftwall,
+Cell(20,17): blue,nobaggle,notopwall,noleftwall,
+Cell(20,18): blue,nobaggle,notopwall,noleftwall,
+Cell(20,20): black,nobaggle,notopwall,noleftwall,
+Cell(20,22): blue,nobaggle,notopwall,noleftwall,
+Cell(20,23): blue,nobaggle,notopwall,noleftwall,
+Cell(20,24): black,nobaggle,notopwall,noleftwall,
+Cell(20,25): black,nobaggle,notopwall,noleftwall,
+Cell(20,27): black,nobaggle,notopwall,noleftwall,
+Cell(20,29): blue,nobaggle,notopwall,noleftwall,
+Cell(21,3): blue,nobaggle,notopwall,noleftwall,
+Cell(21,5): black,nobaggle,notopwall,noleftwall,
+Cell(21,6): blue,nobaggle,notopwall,noleftwall,
+Cell(21,7): blue,nobaggle,notopwall,noleftwall,
+Cell(21,10): black,nobaggle,notopwall,noleftwall,
+Cell(21,12): blue,nobaggle,notopwall,noleftwall,
+Cell(21,14): black,nobaggle,notopwall,noleftwall,
+Cell(21,15): black,nobaggle,notopwall,noleftwall,
+Cell(21,16): black,nobaggle,notopwall,noleftwall,
+Cell(21,17): black,nobaggle,notopwall,noleftwall,
+Cell(21,19): blue,nobaggle,notopwall,noleftwall,
+Cell(21,21): black,nobaggle,notopwall,noleftwall,
+Cell(21,24): blue,nobaggle,notopwall,noleftwall,
+Cell(21,25): blue,nobaggle,notopwall,noleftwall,
+Cell(21,26): black,nobaggle,notopwall,noleftwall,
+Cell(21,28): blue,nobaggle,notopwall,noleftwall,
+Cell(22,4): blue,nobaggle,notopwall,noleftwall,
+Cell(22,6): black,nobaggle,notopwall,noleftwall,
+Cell(22,7): blue,nobaggle,notopwall,noleftwall,
+Cell(22,10): black,nobaggle,notopwall,noleftwall,
+Cell(22,11): blue,nobaggle,notopwall,noleftwall,
+Cell(22,13): black,nobaggle,notopwall,noleftwall,
+Cell(22,14): blue,nobaggle,notopwall,noleftwall,
+Cell(22,15): black,nobaggle,notopwall,noleftwall,
+Cell(22,16): black,nobaggle,notopwall,noleftwall,
+Cell(22,17): blue,nobaggle,notopwall,noleftwall,
+Cell(22,18): black,nobaggle,notopwall,noleftwall,
+Cell(22,20): blue,nobaggle,notopwall,noleftwall,
+Cell(22,21): black,nobaggle,notopwall,noleftwall,
+Cell(22,24): blue,nobaggle,notopwall,noleftwall,
+Cell(22,25): black,nobaggle,notopwall,noleftwall,
+Cell(22,27): blue,nobaggle,notopwall,noleftwall,
+Cell(23,5): blue,nobaggle,notopwall,noleftwall,
+Cell(23,7): black,nobaggle,notopwall,noleftwall,
+Cell(23,8): blue,nobaggle,notopwall,noleftwall,
+Cell(23,9): cyan,nobaggle,notopwall,noleftwall,
+Cell(23,10): cyan,nobaggle,notopwall,noleftwall,
+Cell(23,11): black,nobaggle,notopwall,noleftwall,
+Cell(23,12): blue,nobaggle,notopwall,noleftwall,
+Cell(23,13): black,nobaggle,notopwall,noleftwall,
+Cell(23,14): black,nobaggle,notopwall,noleftwall,
+Cell(23,17): black,nobaggle,notopwall,noleftwall,
+Cell(23,18): black,nobaggle,notopwall,noleftwall,
+Cell(23,19): blue,nobaggle,notopwall,noleftwall,
+Cell(23,20): black,nobaggle,notopwall,noleftwall,
+Cell(23,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(23,22): cyan,nobaggle,notopwall,noleftwall,
+Cell(23,23): blue,nobaggle,notopwall,noleftwall,
+Cell(23,24): black,nobaggle,notopwall,noleftwall,
+Cell(23,26): blue,nobaggle,notopwall,noleftwall,
+Cell(24,6): blue,nobaggle,notopwall,noleftwall,
+Cell(24,8): black,nobaggle,notopwall,noleftwall,
+Cell(24,9): cyan,nobaggle,notopwall,noleftwall,
+Cell(24,10): cyan,nobaggle,notopwall,noleftwall,
+Cell(24,12): black,nobaggle,notopwall,noleftwall,
+Cell(24,19): black,nobaggle,notopwall,noleftwall,
+Cell(24,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(24,22): cyan,nobaggle,notopwall,noleftwall,
+Cell(24,23): black,nobaggle,notopwall,noleftwall,
+Cell(24,25): blue,nobaggle,notopwall,noleftwall,
+Cell(25,7): blue,nobaggle,notopwall,noleftwall,
+Cell(25,8): blue,nobaggle,notopwall,noleftwall,
+Cell(25,9): black,nobaggle,notopwall,noleftwall,
+Cell(25,10): black,nobaggle,notopwall,noleftwall,
+Cell(25,11): black,nobaggle,notopwall,noleftwall,
+Cell(25,12): black,nobaggle,notopwall,noleftwall,
+Cell(25,19): black,nobaggle,notopwall,noleftwall,
+Cell(25,20): black,nobaggle,notopwall,noleftwall,
+Cell(25,21): black,nobaggle,notopwall,noleftwall,
+Cell(25,22): black,nobaggle,notopwall,noleftwall,
+Cell(25,23): blue,nobaggle,notopwall,noleftwall,
+Cell(25,24): blue,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/langtoncolors/LangtonColors-answer2.map b/src/lessons/turmites/langtoncolors/LangtonColors-answer2.map
new file mode 100644
index 0000000..65daef1
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColors-answer2.map
@@ -0,0 +1,464 @@
+TurmiteWorld: LRRRRRLLR (9001 steps)
+Size: 25x24
+Buggle(18,8): west,red,blue,ant
+Cell(1,3): black,nobaggle,notopwall,noleftwall,
+Cell(1,4): black,nobaggle,notopwall,noleftwall,
+Cell(1,5): black,nobaggle,notopwall,noleftwall,
+Cell(1,6): black,nobaggle,notopwall,noleftwall,
+Cell(1,7): black,nobaggle,notopwall,noleftwall,
+Cell(1,8): black,nobaggle,notopwall,noleftwall,
+Cell(1,9): black,nobaggle,notopwall,noleftwall,
+Cell(1,10): black,nobaggle,notopwall,noleftwall,
+Cell(1,11): black,nobaggle,notopwall,noleftwall,
+Cell(1,12): black,nobaggle,notopwall,noleftwall,
+Cell(1,13): black,nobaggle,notopwall,noleftwall,
+Cell(1,14): black,nobaggle,notopwall,noleftwall,
+Cell(1,15): black,nobaggle,notopwall,noleftwall,
+Cell(1,16): black,nobaggle,notopwall,noleftwall,
+Cell(1,17): black,nobaggle,notopwall,noleftwall,
+Cell(1,18): black,nobaggle,notopwall,noleftwall,
+Cell(1,19): black,nobaggle,notopwall,noleftwall,
+Cell(1,20): black,nobaggle,notopwall,noleftwall,
+Cell(1,21): black,nobaggle,notopwall,noleftwall,
+Cell(1,22): black,nobaggle,notopwall,noleftwall,
+Cell(2,3): black,nobaggle,notopwall,noleftwall,
+Cell(2,4): cyan,nobaggle,notopwall,noleftwall,
+Cell(2,5): blue,nobaggle,notopwall,noleftwall,
+Cell(2,6): blue,nobaggle,notopwall,noleftwall,
+Cell(2,7): blue,nobaggle,notopwall,noleftwall,
+Cell(2,8): blue,nobaggle,notopwall,noleftwall,
+Cell(2,9): blue,nobaggle,notopwall,noleftwall,
+Cell(2,10): blue,nobaggle,notopwall,noleftwall,
+Cell(2,11): blue,nobaggle,notopwall,noleftwall,
+Cell(2,12): blue,nobaggle,notopwall,noleftwall,
+Cell(2,13): blue,nobaggle,notopwall,noleftwall,
+Cell(2,14): blue,nobaggle,notopwall,noleftwall,
+Cell(2,15): blue,nobaggle,notopwall,noleftwall,
+Cell(2,16): blue,nobaggle,notopwall,noleftwall,
+Cell(2,17): blue,nobaggle,notopwall,noleftwall,
+Cell(2,18): blue,nobaggle,notopwall,noleftwall,
+Cell(2,19): blue,nobaggle,notopwall,noleftwall,
+Cell(2,20): blue,nobaggle,notopwall,noleftwall,
+Cell(2,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(2,22): black,nobaggle,notopwall,noleftwall,
+Cell(3,1): black,nobaggle,notopwall,noleftwall,
+Cell(3,2): black,nobaggle,notopwall,noleftwall,
+Cell(3,3): black,nobaggle,notopwall,noleftwall,
+Cell(3,4): blue,nobaggle,notopwall,noleftwall,
+Cell(3,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,6): blue,nobaggle,notopwall,noleftwall,
+Cell(3,7): blue,nobaggle,notopwall,noleftwall,
+Cell(3,8): blue,nobaggle,notopwall,noleftwall,
+Cell(3,9): blue,nobaggle,notopwall,noleftwall,
+Cell(3,10): blue,nobaggle,notopwall,noleftwall,
+Cell(3,11): blue,nobaggle,notopwall,noleftwall,
+Cell(3,12): blue,nobaggle,notopwall,noleftwall,
+Cell(3,13): blue,nobaggle,notopwall,noleftwall,
+Cell(3,14): blue,nobaggle,notopwall,noleftwall,
+Cell(3,15): blue,nobaggle,notopwall,noleftwall,
+Cell(3,16): blue,nobaggle,notopwall,noleftwall,
+Cell(3,17): blue,nobaggle,notopwall,noleftwall,
+Cell(3,18): blue,nobaggle,notopwall,noleftwall,
+Cell(3,19): blue,nobaggle,notopwall,noleftwall,
+Cell(3,20): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,21): blue,nobaggle,notopwall,noleftwall,
+Cell(3,22): black,nobaggle,notopwall,noleftwall,
+Cell(4,1): black,nobaggle,notopwall,noleftwall,
+Cell(4,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,3): blue,nobaggle,notopwall,noleftwall,
+Cell(4,4): black,nobaggle,notopwall,noleftwall,
+Cell(4,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,6): green,nobaggle,notopwall,noleftwall,
+Cell(4,7): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,8): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,9): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,10): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,11): orange,nobaggle,notopwall,noleftwall,
+Cell(4,12): orange,nobaggle,notopwall,noleftwall,
+Cell(4,13): orange,nobaggle,notopwall,noleftwall,
+Cell(4,14): orange,nobaggle,notopwall,noleftwall,
+Cell(4,15): blue,nobaggle,notopwall,noleftwall,
+Cell(4,16): blue,nobaggle,notopwall,noleftwall,
+Cell(4,17): blue,nobaggle,notopwall,noleftwall,
+Cell(4,18): blue,nobaggle,notopwall,noleftwall,
+Cell(4,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,20): blue,nobaggle,notopwall,noleftwall,
+Cell(4,21): blue,nobaggle,notopwall,noleftwall,
+Cell(4,22): black,nobaggle,notopwall,noleftwall,
+Cell(5,1): black,nobaggle,notopwall,noleftwall,
+Cell(5,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,3): green,nobaggle,notopwall,noleftwall,
+Cell(5,4): orange,nobaggle,notopwall,noleftwall,
+Cell(5,5): orange,nobaggle,notopwall,noleftwall,
+Cell(5,6): magenta,nobaggle,notopwall,noleftwall,
+Cell(5,8): red,nobaggle,notopwall,noleftwall,
+Cell(5,9): red,nobaggle,notopwall,noleftwall,
+Cell(5,11): black,nobaggle,notopwall,noleftwall,
+Cell(5,12): black,nobaggle,notopwall,noleftwall,
+Cell(5,13): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,14): gray,nobaggle,notopwall,noleftwall,
+Cell(5,15): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,16): blue,nobaggle,notopwall,noleftwall,
+Cell(5,17): blue,nobaggle,notopwall,noleftwall,
+Cell(5,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,19): blue,nobaggle,notopwall,noleftwall,
+Cell(5,20): blue,nobaggle,notopwall,noleftwall,
+Cell(5,21): blue,nobaggle,notopwall,noleftwall,
+Cell(5,22): black,nobaggle,notopwall,noleftwall,
+Cell(6,1): black,nobaggle,notopwall,noleftwall,
+Cell(6,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,4): green,nobaggle,notopwall,noleftwall,
+Cell(6,6): blue,nobaggle,notopwall,noleftwall,
+Cell(6,7): black,nobaggle,notopwall,noleftwall,
+Cell(6,8): gray,nobaggle,notopwall,noleftwall,
+Cell(6,9): gray,nobaggle,notopwall,noleftwall,
+Cell(6,10): black,nobaggle,notopwall,noleftwall,
+Cell(6,11): gray,nobaggle,notopwall,noleftwall,
+Cell(6,12): gray,nobaggle,notopwall,noleftwall,
+Cell(6,13): red,nobaggle,notopwall,noleftwall,
+Cell(6,14): black,nobaggle,notopwall,noleftwall,
+Cell(6,15): orange,nobaggle,notopwall,noleftwall,
+Cell(6,16): green,nobaggle,notopwall,noleftwall,
+Cell(6,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,18): blue,nobaggle,notopwall,noleftwall,
+Cell(6,19): blue,nobaggle,notopwall,noleftwall,
+Cell(6,20): blue,nobaggle,notopwall,noleftwall,
+Cell(6,21): blue,nobaggle,notopwall,noleftwall,
+Cell(6,22): black,nobaggle,notopwall,noleftwall,
+Cell(7,1): black,nobaggle,notopwall,noleftwall,
+Cell(7,2): red,nobaggle,notopwall,noleftwall,
+Cell(7,3): blue,nobaggle,notopwall,noleftwall,
+Cell(7,4): blue,nobaggle,notopwall,noleftwall,
+Cell(7,6): red,nobaggle,notopwall,noleftwall,
+Cell(7,7): cyan,nobaggle,notopwall,noleftwall,
+Cell(7,8): blue,nobaggle,notopwall,noleftwall,
+Cell(7,9): red,nobaggle,notopwall,noleftwall,
+Cell(7,10): magenta,nobaggle,notopwall,noleftwall,
+Cell(7,12): green,nobaggle,notopwall,noleftwall,
+Cell(7,13): gray,nobaggle,notopwall,noleftwall,
+Cell(7,14): orange,nobaggle,notopwall,noleftwall,
+Cell(7,17): red,nobaggle,notopwall,noleftwall,
+Cell(7,18): blue,nobaggle,notopwall,noleftwall,
+Cell(7,19): blue,nobaggle,notopwall,noleftwall,
+Cell(7,20): blue,nobaggle,notopwall,noleftwall,
+Cell(7,21): blue,nobaggle,notopwall,noleftwall,
+Cell(7,22): black,nobaggle,notopwall,noleftwall,
+Cell(8,1): black,nobaggle,notopwall,noleftwall,
+Cell(8,2): red,nobaggle,notopwall,noleftwall,
+Cell(8,3): black,nobaggle,notopwall,noleftwall,
+Cell(8,5): gray,nobaggle,notopwall,noleftwall,
+Cell(8,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,8): blue,nobaggle,notopwall,noleftwall,
+Cell(8,9): magenta,nobaggle,notopwall,noleftwall,
+Cell(8,10): blue,nobaggle,notopwall,noleftwall,
+Cell(8,11): black,nobaggle,notopwall,noleftwall,
+Cell(8,12): magenta,nobaggle,notopwall,noleftwall,
+Cell(8,13): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,14): magenta,nobaggle,notopwall,noleftwall,
+Cell(8,15): red,nobaggle,notopwall,noleftwall,
+Cell(8,16): green,nobaggle,notopwall,noleftwall,
+Cell(8,17): blue,nobaggle,notopwall,noleftwall,
+Cell(8,18): red,nobaggle,notopwall,noleftwall,
+Cell(8,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,20): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,21): blue,nobaggle,notopwall,noleftwall,
+Cell(8,22): black,nobaggle,notopwall,noleftwall,
+Cell(9,1): black,nobaggle,notopwall,noleftwall,
+Cell(9,2): red,nobaggle,notopwall,noleftwall,
+Cell(9,3): black,nobaggle,notopwall,noleftwall,
+Cell(9,4): magenta,nobaggle,notopwall,noleftwall,
+Cell(9,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,6): orange,nobaggle,notopwall,noleftwall,
+Cell(9,7): orange,nobaggle,notopwall,noleftwall,
+Cell(9,8): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,10): green,nobaggle,notopwall,noleftwall,
+Cell(9,13): green,nobaggle,notopwall,noleftwall,
+Cell(9,14): green,nobaggle,notopwall,noleftwall,
+Cell(9,15): red,nobaggle,notopwall,noleftwall,
+Cell(9,16): orange,nobaggle,notopwall,noleftwall,
+Cell(9,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,19): magenta,nobaggle,notopwall,noleftwall,
+Cell(9,20): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,21): blue,nobaggle,notopwall,noleftwall,
+Cell(9,22): black,nobaggle,notopwall,noleftwall,
+Cell(10,1): black,nobaggle,notopwall,noleftwall,
+Cell(10,2): red,nobaggle,notopwall,noleftwall,
+Cell(10,3): green,nobaggle,notopwall,noleftwall,
+Cell(10,4): black,nobaggle,notopwall,noleftwall,
+Cell(10,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,7): green,nobaggle,notopwall,noleftwall,
+Cell(10,8): blue,nobaggle,notopwall,noleftwall,
+Cell(10,9): blue,nobaggle,notopwall,noleftwall,
+Cell(10,10): orange,nobaggle,notopwall,noleftwall,
+Cell(10,11): magenta,nobaggle,notopwall,noleftwall,
+Cell(10,12): magenta,nobaggle,notopwall,noleftwall,
+Cell(10,13): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,14): orange,nobaggle,notopwall,noleftwall,
+Cell(10,15): red,nobaggle,notopwall,noleftwall,
+Cell(10,16): black,nobaggle,notopwall,noleftwall,
+Cell(10,17): blue,nobaggle,notopwall,noleftwall,
+Cell(10,18): red,nobaggle,notopwall,noleftwall,
+Cell(10,19): black,nobaggle,notopwall,noleftwall,
+Cell(10,20): green,nobaggle,notopwall,noleftwall,
+Cell(10,21): blue,nobaggle,notopwall,noleftwall,
+Cell(10,22): black,nobaggle,notopwall,noleftwall,
+Cell(11,1): black,nobaggle,notopwall,noleftwall,
+Cell(11,2): green,nobaggle,notopwall,noleftwall,
+Cell(11,3): green,nobaggle,notopwall,noleftwall,
+Cell(11,5): black,nobaggle,notopwall,noleftwall,
+Cell(11,6): gray,nobaggle,notopwall,noleftwall,
+Cell(11,7): cyan,nobaggle,notopwall,noleftwall,
+Cell(11,8): orange,nobaggle,notopwall,noleftwall,
+Cell(11,9): black,nobaggle,notopwall,noleftwall,
+Cell(11,10): black,nobaggle,notopwall,noleftwall,
+Cell(11,11): blue,nobaggle,notopwall,noleftwall,
+Cell(11,12): magenta,nobaggle,notopwall,noleftwall,
+Cell(11,13): green,nobaggle,notopwall,noleftwall,
+Cell(11,14): cyan,nobaggle,notopwall,noleftwall,
+Cell(11,15): gray,nobaggle,notopwall,noleftwall,
+Cell(11,16): green,nobaggle,notopwall,noleftwall,
+Cell(11,17): orange,nobaggle,notopwall,noleftwall,
+Cell(11,18): orange,nobaggle,notopwall,noleftwall,
+Cell(11,19): blue,nobaggle,notopwall,noleftwall,
+Cell(11,20): green,nobaggle,notopwall,noleftwall,
+Cell(11,21): blue,nobaggle,notopwall,noleftwall,
+Cell(11,22): black,nobaggle,notopwall,noleftwall,
+Cell(12,1): black,nobaggle,notopwall,noleftwall,
+Cell(12,2): green,nobaggle,notopwall,noleftwall,
+Cell(12,3): orange,nobaggle,notopwall,noleftwall,
+Cell(12,4): green,nobaggle,notopwall,noleftwall,
+Cell(12,5): black,nobaggle,notopwall,noleftwall,
+Cell(12,6): red,nobaggle,notopwall,noleftwall,
+Cell(12,7): magenta,nobaggle,notopwall,noleftwall,
+Cell(12,8): magenta,nobaggle,notopwall,noleftwall,
+Cell(12,9): magenta,nobaggle,notopwall,noleftwall,
+Cell(12,10): green,nobaggle,notopwall,noleftwall,
+Cell(12,11): red,nobaggle,notopwall,noleftwall,
+Cell(12,12): magenta,nobaggle,notopwall,noleftwall,
+Cell(12,14): gray,nobaggle,notopwall,noleftwall,
+Cell(12,15): magenta,nobaggle,notopwall,noleftwall,
+Cell(12,16): gray,nobaggle,notopwall,noleftwall,
+Cell(12,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,20): orange,nobaggle,notopwall,noleftwall,
+Cell(12,21): blue,nobaggle,notopwall,noleftwall,
+Cell(12,22): black,nobaggle,notopwall,noleftwall,
+Cell(13,1): black,nobaggle,notopwall,noleftwall,
+Cell(13,2): green,nobaggle,notopwall,noleftwall,
+Cell(13,3): orange,nobaggle,notopwall,noleftwall,
+Cell(13,4): blue,nobaggle,notopwall,noleftwall,
+Cell(13,5): black,nobaggle,notopwall,noleftwall,
+Cell(13,6): green,nobaggle,notopwall,noleftwall,
+Cell(13,7): red,nobaggle,notopwall,noleftwall,
+Cell(13,8): blue,nobaggle,notopwall,noleftwall,
+Cell(13,9): blue,nobaggle,notopwall,noleftwall,
+Cell(13,10): green,nobaggle,notopwall,noleftwall,
+Cell(13,11): blue,nobaggle,notopwall,noleftwall,
+Cell(13,13): blue,nobaggle,notopwall,noleftwall,
+Cell(13,14): gray,nobaggle,notopwall,noleftwall,
+Cell(13,15): blue,nobaggle,notopwall,noleftwall,
+Cell(13,16): orange,nobaggle,notopwall,noleftwall,
+Cell(13,17): blue,nobaggle,notopwall,noleftwall,
+Cell(13,18): magenta,nobaggle,notopwall,noleftwall,
+Cell(13,19): magenta,nobaggle,notopwall,noleftwall,
+Cell(13,20): orange,nobaggle,notopwall,noleftwall,
+Cell(13,21): blue,nobaggle,notopwall,noleftwall,
+Cell(13,22): black,nobaggle,notopwall,noleftwall,
+Cell(14,1): black,nobaggle,notopwall,noleftwall,
+Cell(14,2): green,nobaggle,notopwall,noleftwall,
+Cell(14,3): black,nobaggle,notopwall,noleftwall,
+Cell(14,4): red,nobaggle,notopwall,noleftwall,
+Cell(14,5): magenta,nobaggle,notopwall,noleftwall,
+Cell(14,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(14,8): black,nobaggle,notopwall,noleftwall,
+Cell(14,9): green,nobaggle,notopwall,noleftwall,
+Cell(14,10): green,nobaggle,notopwall,noleftwall,
+Cell(14,11): magenta,nobaggle,notopwall,noleftwall,
+Cell(14,12): black,nobaggle,notopwall,noleftwall,
+Cell(14,13): red,nobaggle,notopwall,noleftwall,
+Cell(14,14): gray,nobaggle,notopwall,noleftwall,
+Cell(14,15): orange,nobaggle,notopwall,noleftwall,
+Cell(14,16): blue,nobaggle,notopwall,noleftwall,
+Cell(14,17): orange,nobaggle,notopwall,noleftwall,
+Cell(14,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(14,19): orange,nobaggle,notopwall,noleftwall,
+Cell(14,20): green,nobaggle,notopwall,noleftwall,
+Cell(14,21): blue,nobaggle,notopwall,noleftwall,
+Cell(14,22): black,nobaggle,notopwall,noleftwall,
+Cell(15,1): black,nobaggle,notopwall,noleftwall,
+Cell(15,2): green,nobaggle,notopwall,noleftwall,
+Cell(15,4): red,nobaggle,notopwall,noleftwall,
+Cell(15,5): gray,nobaggle,notopwall,noleftwall,
+Cell(15,6): gray,nobaggle,notopwall,noleftwall,
+Cell(15,7): magenta,nobaggle,notopwall,noleftwall,
+Cell(15,8): orange,nobaggle,notopwall,noleftwall,
+Cell(15,9): gray,nobaggle,notopwall,noleftwall,
+Cell(15,10): orange,nobaggle,notopwall,noleftwall,
+Cell(15,11): cyan,nobaggle,notopwall,noleftwall,
+Cell(15,12): gray,nobaggle,notopwall,noleftwall,
+Cell(15,14): magenta,nobaggle,notopwall,noleftwall,
+Cell(15,16): blue,nobaggle,notopwall,noleftwall,
+Cell(15,18): green,nobaggle,notopwall,noleftwall,
+Cell(15,19): gray,nobaggle,notopwall,noleftwall,
+Cell(15,20): green,nobaggle,notopwall,noleftwall,
+Cell(15,21): blue,nobaggle,notopwall,noleftwall,
+Cell(15,22): black,nobaggle,notopwall,noleftwall,
+Cell(16,1): black,nobaggle,notopwall,noleftwall,
+Cell(16,2): green,nobaggle,notopwall,noleftwall,
+Cell(16,4): green,nobaggle,notopwall,noleftwall,
+Cell(16,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(16,7): orange,nobaggle,notopwall,noleftwall,
+Cell(16,8): blue,nobaggle,notopwall,noleftwall,
+Cell(16,9): cyan,nobaggle,notopwall,noleftwall,
+Cell(16,10): gray,nobaggle,notopwall,noleftwall,
+Cell(16,11): green,nobaggle,notopwall,noleftwall,
+Cell(16,12): cyan,nobaggle,notopwall,noleftwall,
+Cell(16,13): blue,nobaggle,notopwall,noleftwall,
+Cell(16,14): orange,nobaggle,notopwall,noleftwall,
+Cell(16,15): black,nobaggle,notopwall,noleftwall,
+Cell(16,16): magenta,nobaggle,notopwall,noleftwall,
+Cell(16,17): orange,nobaggle,notopwall,noleftwall,
+Cell(16,18): magenta,nobaggle,notopwall,noleftwall,
+Cell(16,19): red,nobaggle,notopwall,noleftwall,
+Cell(16,20): blue,nobaggle,notopwall,noleftwall,
+Cell(16,21): blue,nobaggle,notopwall,noleftwall,
+Cell(16,22): black,nobaggle,notopwall,noleftwall,
+Cell(17,1): black,nobaggle,notopwall,noleftwall,
+Cell(17,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(17,3): magenta,nobaggle,notopwall,noleftwall,
+Cell(17,4): blue,nobaggle,notopwall,noleftwall,
+Cell(17,5): black,nobaggle,notopwall,noleftwall,
+Cell(17,6): red,nobaggle,notopwall,noleftwall,
+Cell(17,7): green,nobaggle,notopwall,noleftwall,
+Cell(17,8): black,nobaggle,notopwall,noleftwall,
+Cell(17,9): gray,nobaggle,notopwall,noleftwall,
+Cell(17,10): cyan,nobaggle,notopwall,noleftwall,
+Cell(17,11): cyan,nobaggle,notopwall,noleftwall,
+Cell(17,12): magenta,nobaggle,notopwall,noleftwall,
+Cell(17,13): orange,nobaggle,notopwall,noleftwall,
+Cell(17,14): blue,nobaggle,notopwall,noleftwall,
+Cell(17,15): gray,nobaggle,notopwall,noleftwall,
+Cell(17,16): magenta,nobaggle,notopwall,noleftwall,
+Cell(17,17): orange,nobaggle,notopwall,noleftwall,
+Cell(17,18): green,nobaggle,notopwall,noleftwall,
+Cell(17,19): red,nobaggle,notopwall,noleftwall,
+Cell(17,20): blue,nobaggle,notopwall,noleftwall,
+Cell(17,21): blue,nobaggle,notopwall,noleftwall,
+Cell(17,22): black,nobaggle,notopwall,noleftwall,
+Cell(18,1): black,nobaggle,notopwall,noleftwall,
+Cell(18,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(18,3): orange,nobaggle,notopwall,noleftwall,
+Cell(18,5): magenta,nobaggle,notopwall,noleftwall,
+Cell(18,6): black,nobaggle,notopwall,noleftwall,
+Cell(18,7): black,nobaggle,notopwall,noleftwall,
+Cell(18,8): magenta,nobaggle,notopwall,noleftwall,
+Cell(18,9): black,nobaggle,notopwall,noleftwall,
+Cell(18,10): green,nobaggle,notopwall,noleftwall,
+Cell(18,11): magenta,nobaggle,notopwall,noleftwall,
+Cell(18,13): orange,nobaggle,notopwall,noleftwall,
+Cell(18,14): magenta,nobaggle,notopwall,noleftwall,
+Cell(18,15): cyan,nobaggle,notopwall,noleftwall,
+Cell(18,16): black,nobaggle,notopwall,noleftwall,
+Cell(18,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(18,18): green,nobaggle,notopwall,noleftwall,
+Cell(18,19): red,nobaggle,notopwall,noleftwall,
+Cell(18,20): green,nobaggle,notopwall,noleftwall,
+Cell(18,21): blue,nobaggle,notopwall,noleftwall,
+Cell(18,22): black,nobaggle,notopwall,noleftwall,
+Cell(19,1): black,nobaggle,notopwall,noleftwall,
+Cell(19,2): blue,nobaggle,notopwall,noleftwall,
+Cell(19,3): green,nobaggle,notopwall,noleftwall,
+Cell(19,5): green,nobaggle,notopwall,noleftwall,
+Cell(19,6): gray,nobaggle,notopwall,noleftwall,
+Cell(19,7): magenta,nobaggle,notopwall,noleftwall,
+Cell(19,8): blue,nobaggle,notopwall,noleftwall,
+Cell(19,9): magenta,nobaggle,notopwall,noleftwall,
+Cell(19,10): blue,nobaggle,notopwall,noleftwall,
+Cell(19,11): red,nobaggle,notopwall,noleftwall,
+Cell(19,12): black,nobaggle,notopwall,noleftwall,
+Cell(19,13): orange,nobaggle,notopwall,noleftwall,
+Cell(19,14): green,nobaggle,notopwall,noleftwall,
+Cell(19,15): cyan,nobaggle,notopwall,noleftwall,
+Cell(19,16): gray,nobaggle,notopwall,noleftwall,
+Cell(19,17): magenta,nobaggle,notopwall,noleftwall,
+Cell(19,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(19,20): cyan,nobaggle,notopwall,noleftwall,
+Cell(19,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(19,22): black,nobaggle,notopwall,noleftwall,
+Cell(20,1): black,nobaggle,notopwall,noleftwall,
+Cell(20,2): blue,nobaggle,notopwall,noleftwall,
+Cell(20,3): cyan,nobaggle,notopwall,noleftwall,
+Cell(20,4): red,nobaggle,notopwall,noleftwall,
+Cell(20,5): green,nobaggle,notopwall,noleftwall,
+Cell(20,6): gray,nobaggle,notopwall,noleftwall,
+Cell(20,7): blue,nobaggle,notopwall,noleftwall,
+Cell(20,8): red,nobaggle,notopwall,noleftwall,
+Cell(20,9): magenta,nobaggle,notopwall,noleftwall,
+Cell(20,10): green,nobaggle,notopwall,noleftwall,
+Cell(20,11): blue,nobaggle,notopwall,noleftwall,
+Cell(20,12): cyan,nobaggle,notopwall,noleftwall,
+Cell(20,13): orange,nobaggle,notopwall,noleftwall,
+Cell(20,14): magenta,nobaggle,notopwall,noleftwall,
+Cell(20,16): green,nobaggle,notopwall,noleftwall,
+Cell(20,17): red,nobaggle,notopwall,noleftwall,
+Cell(20,18): black,nobaggle,notopwall,noleftwall,
+Cell(20,19): gray,nobaggle,notopwall,noleftwall,
+Cell(20,20): red,nobaggle,notopwall,noleftwall,
+Cell(20,21): black,nobaggle,notopwall,noleftwall,
+Cell(20,22): black,nobaggle,notopwall,noleftwall,
+Cell(21,1): black,nobaggle,notopwall,noleftwall,
+Cell(21,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(21,3): blue,nobaggle,notopwall,noleftwall,
+Cell(21,4): blue,nobaggle,notopwall,noleftwall,
+Cell(21,5): gray,nobaggle,notopwall,noleftwall,
+Cell(21,6): magenta,nobaggle,notopwall,noleftwall,
+Cell(21,7): red,nobaggle,notopwall,noleftwall,
+Cell(21,8): red,nobaggle,notopwall,noleftwall,
+Cell(21,9): magenta,nobaggle,notopwall,noleftwall,
+Cell(21,10): magenta,nobaggle,notopwall,noleftwall,
+Cell(21,11): red,nobaggle,notopwall,noleftwall,
+Cell(21,12): orange,nobaggle,notopwall,noleftwall,
+Cell(21,13): orange,nobaggle,notopwall,noleftwall,
+Cell(21,14): red,nobaggle,notopwall,noleftwall,
+Cell(21,16): blue,nobaggle,notopwall,noleftwall,
+Cell(21,17): blue,nobaggle,notopwall,noleftwall,
+Cell(21,18): blue,nobaggle,notopwall,noleftwall,
+Cell(21,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(21,20): gray,nobaggle,notopwall,noleftwall,
+Cell(22,1): black,nobaggle,notopwall,noleftwall,
+Cell(22,2): black,nobaggle,notopwall,noleftwall,
+Cell(22,3): black,nobaggle,notopwall,noleftwall,
+Cell(22,4): black,nobaggle,notopwall,noleftwall,
+Cell(22,6): black,nobaggle,notopwall,noleftwall,
+Cell(22,7): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,8): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,9): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,10): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,11): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,12): blue,nobaggle,notopwall,noleftwall,
+Cell(22,13): blue,nobaggle,notopwall,noleftwall,
+Cell(22,14): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,15): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,16): green,nobaggle,notopwall,noleftwall,
+Cell(22,17): green,nobaggle,notopwall,noleftwall,
+Cell(22,18): green,nobaggle,notopwall,noleftwall,
+Cell(22,19): green,nobaggle,notopwall,noleftwall,
+Cell(22,20): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,21): black,nobaggle,notopwall,noleftwall,
+Cell(23,6): black,nobaggle,notopwall,noleftwall,
+Cell(23,7): black,nobaggle,notopwall,noleftwall,
+Cell(23,8): black,nobaggle,notopwall,noleftwall,
+Cell(23,9): black,nobaggle,notopwall,noleftwall,
+Cell(23,10): black,nobaggle,notopwall,noleftwall,
+Cell(23,11): black,nobaggle,notopwall,noleftwall,
+Cell(23,12): black,nobaggle,notopwall,noleftwall,
+Cell(23,13): black,nobaggle,notopwall,noleftwall,
+Cell(23,14): black,nobaggle,notopwall,noleftwall,
+Cell(23,15): black,nobaggle,notopwall,noleftwall,
+Cell(23,16): black,nobaggle,notopwall,noleftwall,
+Cell(23,17): black,nobaggle,notopwall,noleftwall,
+Cell(23,18): black,nobaggle,notopwall,noleftwall,
+Cell(23,19): black,nobaggle,notopwall,noleftwall,
+Cell(23,20): black,nobaggle,notopwall,noleftwall,
+Cell(23,21): black,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/langtoncolors/LangtonColors-answer3.map b/src/lessons/turmites/langtoncolors/LangtonColors-answer3.map
new file mode 100644
index 0000000..ca24ecd
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColors-answer3.map
@@ -0,0 +1,2170 @@
+TurmiteWorld: LLRRRLRLRLLR (36001 steps)
+Size: 120x60
+Buggle(11,36): east,red,cyan,ant
+Cell(6,35): black,nobaggle,notopwall,noleftwall,
+Cell(6,36): black,nobaggle,notopwall,noleftwall,
+Cell(6,39): black,nobaggle,notopwall,noleftwall,
+Cell(6,40): black,nobaggle,notopwall,noleftwall,
+Cell(7,34): black,nobaggle,notopwall,noleftwall,
+Cell(7,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(7,36): orange,nobaggle,notopwall,noleftwall,
+Cell(7,37): red,nobaggle,notopwall,noleftwall,
+Cell(7,38): red,nobaggle,notopwall,noleftwall,
+Cell(7,39): green,nobaggle,notopwall,noleftwall,
+Cell(7,40): black,nobaggle,notopwall,noleftwall,
+Cell(8,31): black,nobaggle,notopwall,noleftwall,
+Cell(8,32): black,nobaggle,notopwall,noleftwall,
+Cell(8,33): black,nobaggle,notopwall,noleftwall,
+Cell(8,34): blue,nobaggle,notopwall,noleftwall,
+Cell(8,35): orange,nobaggle,notopwall,noleftwall,
+Cell(8,36): lightGray,nobaggle,notopwall,noleftwall,
+Cell(8,37): orange,nobaggle,notopwall,noleftwall,
+Cell(8,38): blue,nobaggle,notopwall,noleftwall,
+Cell(8,39): orange,nobaggle,notopwall,noleftwall,
+Cell(8,40): black,nobaggle,notopwall,noleftwall,
+Cell(9,30): black,nobaggle,notopwall,noleftwall,
+Cell(9,31): blue,nobaggle,notopwall,noleftwall,
+Cell(9,32): green,nobaggle,notopwall,noleftwall,
+Cell(9,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(9,34): blue,nobaggle,notopwall,noleftwall,
+Cell(9,35): green,nobaggle,notopwall,noleftwall,
+Cell(9,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(9,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,39): orange,nobaggle,notopwall,noleftwall,
+Cell(9,40): black,nobaggle,notopwall,noleftwall,
+Cell(10,29): black,nobaggle,notopwall,noleftwall,
+Cell(10,30): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,31): red,nobaggle,notopwall,noleftwall,
+Cell(10,32): red,nobaggle,notopwall,noleftwall,
+Cell(10,33): lightGray,nobaggle,notopwall,noleftwall,
+Cell(10,34): orange,nobaggle,notopwall,noleftwall,
+Cell(10,35): lightGray,nobaggle,notopwall,noleftwall,
+Cell(10,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,37): lightGray,nobaggle,notopwall,noleftwall,
+Cell(10,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,39): orange,nobaggle,notopwall,noleftwall,
+Cell(10,40): black,nobaggle,notopwall,noleftwall,
+Cell(11,29): black,nobaggle,notopwall,noleftwall,
+Cell(11,30): red,nobaggle,notopwall,noleftwall,
+Cell(11,31): darkGray,nobaggle,notopwall,noleftwall,
+Cell(11,32): pink,nobaggle,notopwall,noleftwall,
+Cell(11,33): cyan,nobaggle,notopwall,noleftwall,
+Cell(11,34): red,nobaggle,notopwall,noleftwall,
+Cell(11,35): black,nobaggle,notopwall,noleftwall,
+Cell(11,36): pink,nobaggle,notopwall,noleftwall,
+Cell(11,37): blue,nobaggle,notopwall,noleftwall,
+Cell(11,38): black,nobaggle,notopwall,noleftwall,
+Cell(11,39): red,nobaggle,notopwall,noleftwall,
+Cell(11,40): blue,nobaggle,notopwall,noleftwall,
+Cell(11,41): black,nobaggle,notopwall,noleftwall,
+Cell(12,25): black,nobaggle,notopwall,noleftwall,
+Cell(12,26): black,nobaggle,notopwall,noleftwall,
+Cell(12,27): black,nobaggle,notopwall,noleftwall,
+Cell(12,28): black,nobaggle,notopwall,noleftwall,
+Cell(12,29): black,nobaggle,notopwall,noleftwall,
+Cell(12,30): red,nobaggle,notopwall,noleftwall,
+Cell(12,31): pink,nobaggle,notopwall,noleftwall,
+Cell(12,33): gray,nobaggle,notopwall,noleftwall,
+Cell(12,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(12,37): orange,nobaggle,notopwall,noleftwall,
+Cell(12,38): red,nobaggle,notopwall,noleftwall,
+Cell(12,39): gray,nobaggle,notopwall,noleftwall,
+Cell(12,40): green,nobaggle,notopwall,noleftwall,
+Cell(12,41): black,nobaggle,notopwall,noleftwall,
+Cell(13,25): black,nobaggle,notopwall,noleftwall,
+Cell(13,26): green,nobaggle,notopwall,noleftwall,
+Cell(13,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,30): green,nobaggle,notopwall,noleftwall,
+Cell(13,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(13,32): black,nobaggle,notopwall,noleftwall,
+Cell(13,33): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(13,36): green,nobaggle,notopwall,noleftwall,
+Cell(13,37): blue,nobaggle,notopwall,noleftwall,
+Cell(13,38): blue,nobaggle,notopwall,noleftwall,
+Cell(13,39): green,nobaggle,notopwall,noleftwall,
+Cell(13,40): green,nobaggle,notopwall,noleftwall,
+Cell(13,41): black,nobaggle,notopwall,noleftwall,
+Cell(14,25): black,nobaggle,notopwall,noleftwall,
+Cell(14,26): green,nobaggle,notopwall,noleftwall,
+Cell(14,27): red,nobaggle,notopwall,noleftwall,
+Cell(14,28): gray,nobaggle,notopwall,noleftwall,
+Cell(14,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(14,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(14,32): black,nobaggle,notopwall,noleftwall,
+Cell(14,33): pink,nobaggle,notopwall,noleftwall,
+Cell(14,34): gray,nobaggle,notopwall,noleftwall,
+Cell(14,35): green,nobaggle,notopwall,noleftwall,
+Cell(14,36): blue,nobaggle,notopwall,noleftwall,
+Cell(14,37): black,nobaggle,notopwall,noleftwall,
+Cell(14,38): black,nobaggle,notopwall,noleftwall,
+Cell(14,39): black,nobaggle,notopwall,noleftwall,
+Cell(14,40): black,nobaggle,notopwall,noleftwall,
+Cell(14,41): black,nobaggle,notopwall,noleftwall,
+Cell(15,25): black,nobaggle,notopwall,noleftwall,
+Cell(15,26): black,nobaggle,notopwall,noleftwall,
+Cell(15,27): magenta,nobaggle,notopwall,noleftwall,
+Cell(15,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(15,29): red,nobaggle,notopwall,noleftwall,
+Cell(15,30): gray,nobaggle,notopwall,noleftwall,
+Cell(15,31): black,nobaggle,notopwall,noleftwall,
+Cell(15,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(15,33): orange,nobaggle,notopwall,noleftwall,
+Cell(15,34): blue,nobaggle,notopwall,noleftwall,
+Cell(15,35): black,nobaggle,notopwall,noleftwall,
+Cell(15,36): black,nobaggle,notopwall,noleftwall,
+Cell(16,27): magenta,nobaggle,notopwall,noleftwall,
+Cell(16,28): green,nobaggle,notopwall,noleftwall,
+Cell(16,30): blue,nobaggle,notopwall,noleftwall,
+Cell(16,31): black,nobaggle,notopwall,noleftwall,
+Cell(16,32): orange,nobaggle,notopwall,noleftwall,
+Cell(16,33): blue,nobaggle,notopwall,noleftwall,
+Cell(17,26): black,nobaggle,notopwall,noleftwall,
+Cell(17,27): red,nobaggle,notopwall,noleftwall,
+Cell(17,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(17,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(17,30): blue,nobaggle,notopwall,noleftwall,
+Cell(17,31): red,nobaggle,notopwall,noleftwall,
+Cell(17,32): gray,nobaggle,notopwall,noleftwall,
+Cell(17,33): black,nobaggle,notopwall,noleftwall,
+Cell(18,26): black,nobaggle,notopwall,noleftwall,
+Cell(18,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(18,28): red,nobaggle,notopwall,noleftwall,
+Cell(18,29): blue,nobaggle,notopwall,noleftwall,
+Cell(18,30): orange,nobaggle,notopwall,noleftwall,
+Cell(18,31): green,nobaggle,notopwall,noleftwall,
+Cell(18,33): green,nobaggle,notopwall,noleftwall,
+Cell(18,34): black,nobaggle,notopwall,noleftwall,
+Cell(18,37): black,nobaggle,notopwall,noleftwall,
+Cell(18,38): black,nobaggle,notopwall,noleftwall,
+Cell(18,39): black,nobaggle,notopwall,noleftwall,
+Cell(18,40): black,nobaggle,notopwall,noleftwall,
+Cell(19,27): black,nobaggle,notopwall,noleftwall,
+Cell(19,28): blue,nobaggle,notopwall,noleftwall,
+Cell(19,29): pink,nobaggle,notopwall,noleftwall,
+Cell(19,30): black,nobaggle,notopwall,noleftwall,
+Cell(19,31): black,nobaggle,notopwall,noleftwall,
+Cell(19,32): black,nobaggle,notopwall,noleftwall,
+Cell(19,33): red,nobaggle,notopwall,noleftwall,
+Cell(19,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(19,35): black,nobaggle,notopwall,noleftwall,
+Cell(19,37): black,nobaggle,notopwall,noleftwall,
+Cell(19,38): green,nobaggle,notopwall,noleftwall,
+Cell(19,39): green,nobaggle,notopwall,noleftwall,
+Cell(19,40): blue,nobaggle,notopwall,noleftwall,
+Cell(19,41): black,nobaggle,notopwall,noleftwall,
+Cell(20,28): black,nobaggle,notopwall,noleftwall,
+Cell(20,29): orange,nobaggle,notopwall,noleftwall,
+Cell(20,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(20,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(20,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(20,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(20,34): gray,nobaggle,notopwall,noleftwall,
+Cell(20,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(20,36): black,nobaggle,notopwall,noleftwall,
+Cell(20,37): blue,nobaggle,notopwall,noleftwall,
+Cell(20,38): gray,nobaggle,notopwall,noleftwall,
+Cell(20,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(20,40): green,nobaggle,notopwall,noleftwall,
+Cell(20,41): blue,nobaggle,notopwall,noleftwall,
+Cell(20,42): black,nobaggle,notopwall,noleftwall,
+Cell(21,29): black,nobaggle,notopwall,noleftwall,
+Cell(21,30): green,nobaggle,notopwall,noleftwall,
+Cell(21,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(21,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(21,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(21,34): pink,nobaggle,notopwall,noleftwall,
+Cell(21,35): orange,nobaggle,notopwall,noleftwall,
+Cell(21,36): blue,nobaggle,notopwall,noleftwall,
+Cell(21,37): gray,nobaggle,notopwall,noleftwall,
+Cell(21,38): black,nobaggle,notopwall,noleftwall,
+Cell(21,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(21,40): orange,nobaggle,notopwall,noleftwall,
+Cell(21,41): green,nobaggle,notopwall,noleftwall,
+Cell(21,42): black,nobaggle,notopwall,noleftwall,
+Cell(22,29): black,nobaggle,notopwall,noleftwall,
+Cell(22,30): green,nobaggle,notopwall,noleftwall,
+Cell(22,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(22,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(22,33): gray,nobaggle,notopwall,noleftwall,
+Cell(22,34): darkGray,nobaggle,notopwall,noleftwall,
+Cell(22,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(22,36): green,nobaggle,notopwall,noleftwall,
+Cell(22,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(22,38): blue,nobaggle,notopwall,noleftwall,
+Cell(22,39): pink,nobaggle,notopwall,noleftwall,
+Cell(22,40): red,nobaggle,notopwall,noleftwall,
+Cell(22,41): green,nobaggle,notopwall,noleftwall,
+Cell(22,42): black,nobaggle,notopwall,noleftwall,
+Cell(23,29): black,nobaggle,notopwall,noleftwall,
+Cell(23,30): blue,nobaggle,notopwall,noleftwall,
+Cell(23,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(23,32): gray,nobaggle,notopwall,noleftwall,
+Cell(23,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(23,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(23,35): lightGray,nobaggle,notopwall,noleftwall,
+Cell(23,37): blue,nobaggle,notopwall,noleftwall,
+Cell(23,38): blue,nobaggle,notopwall,noleftwall,
+Cell(23,39): pink,nobaggle,notopwall,noleftwall,
+Cell(23,40): red,nobaggle,notopwall,noleftwall,
+Cell(23,41): blue,nobaggle,notopwall,noleftwall,
+Cell(23,42): black,nobaggle,notopwall,noleftwall,
+Cell(24,30): black,nobaggle,notopwall,noleftwall,
+Cell(24,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(24,32): gray,nobaggle,notopwall,noleftwall,
+Cell(24,33): pink,nobaggle,notopwall,noleftwall,
+Cell(24,34): pink,nobaggle,notopwall,noleftwall,
+Cell(24,35): blue,nobaggle,notopwall,noleftwall,
+Cell(24,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(24,37): blue,nobaggle,notopwall,noleftwall,
+Cell(24,38): darkGray,nobaggle,notopwall,noleftwall,
+Cell(24,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(24,40): cyan,nobaggle,notopwall,noleftwall,
+Cell(24,41): black,nobaggle,notopwall,noleftwall,
+Cell(25,30): blue,nobaggle,notopwall,noleftwall,
+Cell(25,31): red,nobaggle,notopwall,noleftwall,
+Cell(25,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(25,33): blue,nobaggle,notopwall,noleftwall,
+Cell(25,35): black,nobaggle,notopwall,noleftwall,
+Cell(25,36): blue,nobaggle,notopwall,noleftwall,
+Cell(25,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(25,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(25,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(25,40): blue,nobaggle,notopwall,noleftwall,
+Cell(25,41): black,nobaggle,notopwall,noleftwall,
+Cell(26,29): blue,nobaggle,notopwall,noleftwall,
+Cell(26,30): green,nobaggle,notopwall,noleftwall,
+Cell(26,31): pink,nobaggle,notopwall,noleftwall,
+Cell(26,33): green,nobaggle,notopwall,noleftwall,
+Cell(26,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(26,35): orange,nobaggle,notopwall,noleftwall,
+Cell(26,36): gray,nobaggle,notopwall,noleftwall,
+Cell(26,37): green,nobaggle,notopwall,noleftwall,
+Cell(26,38): blue,nobaggle,notopwall,noleftwall,
+Cell(26,39): blue,nobaggle,notopwall,noleftwall,
+Cell(26,40): green,nobaggle,notopwall,noleftwall,
+Cell(26,41): black,nobaggle,notopwall,noleftwall,
+Cell(27,29): blue,nobaggle,notopwall,noleftwall,
+Cell(27,30): gray,nobaggle,notopwall,noleftwall,
+Cell(27,32): orange,nobaggle,notopwall,noleftwall,
+Cell(27,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(27,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(27,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(27,37): gray,nobaggle,notopwall,noleftwall,
+Cell(27,38): gray,nobaggle,notopwall,noleftwall,
+Cell(27,39): black,nobaggle,notopwall,noleftwall,
+Cell(27,40): gray,nobaggle,notopwall,noleftwall,
+Cell(27,41): blue,nobaggle,notopwall,noleftwall,
+Cell(28,25): black,nobaggle,notopwall,noleftwall,
+Cell(28,26): black,nobaggle,notopwall,noleftwall,
+Cell(28,27): black,nobaggle,notopwall,noleftwall,
+Cell(28,28): black,nobaggle,notopwall,noleftwall,
+Cell(28,29): black,nobaggle,notopwall,noleftwall,
+Cell(28,30): magenta,nobaggle,notopwall,noleftwall,
+Cell(28,32): blue,nobaggle,notopwall,noleftwall,
+Cell(28,33): black,nobaggle,notopwall,noleftwall,
+Cell(28,34): gray,nobaggle,notopwall,noleftwall,
+Cell(28,35): green,nobaggle,notopwall,noleftwall,
+Cell(28,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(28,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(28,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(28,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(28,41): green,nobaggle,notopwall,noleftwall,
+Cell(29,25): black,nobaggle,notopwall,noleftwall,
+Cell(29,26): green,nobaggle,notopwall,noleftwall,
+Cell(29,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(29,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(29,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(29,30): orange,nobaggle,notopwall,noleftwall,
+Cell(29,32): blue,nobaggle,notopwall,noleftwall,
+Cell(29,33): red,nobaggle,notopwall,noleftwall,
+Cell(29,34): red,nobaggle,notopwall,noleftwall,
+Cell(29,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(29,36): blue,nobaggle,notopwall,noleftwall,
+Cell(29,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(29,38): magenta,nobaggle,notopwall,noleftwall,
+Cell(29,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(29,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(29,41): green,nobaggle,notopwall,noleftwall,
+Cell(30,25): black,nobaggle,notopwall,noleftwall,
+Cell(30,26): green,nobaggle,notopwall,noleftwall,
+Cell(30,27): red,nobaggle,notopwall,noleftwall,
+Cell(30,28): gray,nobaggle,notopwall,noleftwall,
+Cell(30,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(30,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(30,32): cyan,nobaggle,notopwall,noleftwall,
+Cell(30,33): black,nobaggle,notopwall,noleftwall,
+Cell(30,34): pink,nobaggle,notopwall,noleftwall,
+Cell(30,35): pink,nobaggle,notopwall,noleftwall,
+Cell(30,36): gray,nobaggle,notopwall,noleftwall,
+Cell(30,37): orange,nobaggle,notopwall,noleftwall,
+Cell(30,38): orange,nobaggle,notopwall,noleftwall,
+Cell(30,39): green,nobaggle,notopwall,noleftwall,
+Cell(30,40): green,nobaggle,notopwall,noleftwall,
+Cell(30,41): blue,nobaggle,notopwall,noleftwall,
+Cell(31,25): black,nobaggle,notopwall,noleftwall,
+Cell(31,26): black,nobaggle,notopwall,noleftwall,
+Cell(31,27): magenta,nobaggle,notopwall,noleftwall,
+Cell(31,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(31,29): red,nobaggle,notopwall,noleftwall,
+Cell(31,30): gray,nobaggle,notopwall,noleftwall,
+Cell(31,31): black,nobaggle,notopwall,noleftwall,
+Cell(31,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(31,33): gray,nobaggle,notopwall,noleftwall,
+Cell(31,34): orange,nobaggle,notopwall,noleftwall,
+Cell(31,35): orange,nobaggle,notopwall,noleftwall,
+Cell(31,36): green,nobaggle,notopwall,noleftwall,
+Cell(31,37): black,nobaggle,notopwall,noleftwall,
+Cell(32,27): magenta,nobaggle,notopwall,noleftwall,
+Cell(32,28): green,nobaggle,notopwall,noleftwall,
+Cell(32,30): blue,nobaggle,notopwall,noleftwall,
+Cell(32,31): black,nobaggle,notopwall,noleftwall,
+Cell(32,32): orange,nobaggle,notopwall,noleftwall,
+Cell(32,33): blue,nobaggle,notopwall,noleftwall,
+Cell(32,34): black,nobaggle,notopwall,noleftwall,
+Cell(32,35): black,nobaggle,notopwall,noleftwall,
+Cell(32,36): black,nobaggle,notopwall,noleftwall,
+Cell(32,37): black,nobaggle,notopwall,noleftwall,
+Cell(33,26): black,nobaggle,notopwall,noleftwall,
+Cell(33,27): red,nobaggle,notopwall,noleftwall,
+Cell(33,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(33,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(33,30): blue,nobaggle,notopwall,noleftwall,
+Cell(33,31): red,nobaggle,notopwall,noleftwall,
+Cell(33,32): gray,nobaggle,notopwall,noleftwall,
+Cell(33,33): black,nobaggle,notopwall,noleftwall,
+Cell(34,26): black,nobaggle,notopwall,noleftwall,
+Cell(34,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(34,28): red,nobaggle,notopwall,noleftwall,
+Cell(34,29): blue,nobaggle,notopwall,noleftwall,
+Cell(34,30): orange,nobaggle,notopwall,noleftwall,
+Cell(34,31): green,nobaggle,notopwall,noleftwall,
+Cell(34,33): green,nobaggle,notopwall,noleftwall,
+Cell(34,34): black,nobaggle,notopwall,noleftwall,
+Cell(34,37): black,nobaggle,notopwall,noleftwall,
+Cell(34,38): black,nobaggle,notopwall,noleftwall,
+Cell(34,39): black,nobaggle,notopwall,noleftwall,
+Cell(34,40): black,nobaggle,notopwall,noleftwall,
+Cell(35,27): black,nobaggle,notopwall,noleftwall,
+Cell(35,28): blue,nobaggle,notopwall,noleftwall,
+Cell(35,29): pink,nobaggle,notopwall,noleftwall,
+Cell(35,30): black,nobaggle,notopwall,noleftwall,
+Cell(35,31): black,nobaggle,notopwall,noleftwall,
+Cell(35,32): black,nobaggle,notopwall,noleftwall,
+Cell(35,33): red,nobaggle,notopwall,noleftwall,
+Cell(35,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(35,35): black,nobaggle,notopwall,noleftwall,
+Cell(35,37): black,nobaggle,notopwall,noleftwall,
+Cell(35,38): green,nobaggle,notopwall,noleftwall,
+Cell(35,39): green,nobaggle,notopwall,noleftwall,
+Cell(35,40): blue,nobaggle,notopwall,noleftwall,
+Cell(35,41): black,nobaggle,notopwall,noleftwall,
+Cell(36,28): black,nobaggle,notopwall,noleftwall,
+Cell(36,29): orange,nobaggle,notopwall,noleftwall,
+Cell(36,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(36,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(36,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(36,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(36,34): gray,nobaggle,notopwall,noleftwall,
+Cell(36,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(36,36): black,nobaggle,notopwall,noleftwall,
+Cell(36,37): blue,nobaggle,notopwall,noleftwall,
+Cell(36,38): gray,nobaggle,notopwall,noleftwall,
+Cell(36,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(36,40): green,nobaggle,notopwall,noleftwall,
+Cell(36,41): blue,nobaggle,notopwall,noleftwall,
+Cell(36,42): black,nobaggle,notopwall,noleftwall,
+Cell(37,29): black,nobaggle,notopwall,noleftwall,
+Cell(37,30): green,nobaggle,notopwall,noleftwall,
+Cell(37,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(37,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(37,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(37,34): pink,nobaggle,notopwall,noleftwall,
+Cell(37,35): orange,nobaggle,notopwall,noleftwall,
+Cell(37,36): blue,nobaggle,notopwall,noleftwall,
+Cell(37,37): gray,nobaggle,notopwall,noleftwall,
+Cell(37,38): black,nobaggle,notopwall,noleftwall,
+Cell(37,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(37,40): orange,nobaggle,notopwall,noleftwall,
+Cell(37,41): green,nobaggle,notopwall,noleftwall,
+Cell(37,42): black,nobaggle,notopwall,noleftwall,
+Cell(38,29): black,nobaggle,notopwall,noleftwall,
+Cell(38,30): green,nobaggle,notopwall,noleftwall,
+Cell(38,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(38,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(38,33): gray,nobaggle,notopwall,noleftwall,
+Cell(38,34): darkGray,nobaggle,notopwall,noleftwall,
+Cell(38,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(38,36): green,nobaggle,notopwall,noleftwall,
+Cell(38,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(38,38): blue,nobaggle,notopwall,noleftwall,
+Cell(38,39): pink,nobaggle,notopwall,noleftwall,
+Cell(38,40): red,nobaggle,notopwall,noleftwall,
+Cell(38,41): green,nobaggle,notopwall,noleftwall,
+Cell(38,42): black,nobaggle,notopwall,noleftwall,
+Cell(39,29): black,nobaggle,notopwall,noleftwall,
+Cell(39,30): blue,nobaggle,notopwall,noleftwall,
+Cell(39,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(39,32): gray,nobaggle,notopwall,noleftwall,
+Cell(39,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(39,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(39,35): lightGray,nobaggle,notopwall,noleftwall,
+Cell(39,37): blue,nobaggle,notopwall,noleftwall,
+Cell(39,38): blue,nobaggle,notopwall,noleftwall,
+Cell(39,39): pink,nobaggle,notopwall,noleftwall,
+Cell(39,40): red,nobaggle,notopwall,noleftwall,
+Cell(39,41): blue,nobaggle,notopwall,noleftwall,
+Cell(39,42): black,nobaggle,notopwall,noleftwall,
+Cell(40,30): black,nobaggle,notopwall,noleftwall,
+Cell(40,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(40,32): gray,nobaggle,notopwall,noleftwall,
+Cell(40,33): pink,nobaggle,notopwall,noleftwall,
+Cell(40,34): pink,nobaggle,notopwall,noleftwall,
+Cell(40,35): blue,nobaggle,notopwall,noleftwall,
+Cell(40,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(40,37): blue,nobaggle,notopwall,noleftwall,
+Cell(40,38): darkGray,nobaggle,notopwall,noleftwall,
+Cell(40,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(40,40): cyan,nobaggle,notopwall,noleftwall,
+Cell(40,41): black,nobaggle,notopwall,noleftwall,
+Cell(41,30): blue,nobaggle,notopwall,noleftwall,
+Cell(41,31): red,nobaggle,notopwall,noleftwall,
+Cell(41,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(41,33): blue,nobaggle,notopwall,noleftwall,
+Cell(41,35): black,nobaggle,notopwall,noleftwall,
+Cell(41,36): blue,nobaggle,notopwall,noleftwall,
+Cell(41,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(41,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(41,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(41,40): blue,nobaggle,notopwall,noleftwall,
+Cell(41,41): black,nobaggle,notopwall,noleftwall,
+Cell(42,29): blue,nobaggle,notopwall,noleftwall,
+Cell(42,30): green,nobaggle,notopwall,noleftwall,
+Cell(42,31): pink,nobaggle,notopwall,noleftwall,
+Cell(42,33): green,nobaggle,notopwall,noleftwall,
+Cell(42,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(42,35): orange,nobaggle,notopwall,noleftwall,
+Cell(42,36): gray,nobaggle,notopwall,noleftwall,
+Cell(42,37): green,nobaggle,notopwall,noleftwall,
+Cell(42,38): blue,nobaggle,notopwall,noleftwall,
+Cell(42,39): blue,nobaggle,notopwall,noleftwall,
+Cell(42,40): green,nobaggle,notopwall,noleftwall,
+Cell(42,41): black,nobaggle,notopwall,noleftwall,
+Cell(43,29): blue,nobaggle,notopwall,noleftwall,
+Cell(43,30): gray,nobaggle,notopwall,noleftwall,
+Cell(43,32): orange,nobaggle,notopwall,noleftwall,
+Cell(43,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(43,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(43,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(43,37): gray,nobaggle,notopwall,noleftwall,
+Cell(43,38): gray,nobaggle,notopwall,noleftwall,
+Cell(43,39): black,nobaggle,notopwall,noleftwall,
+Cell(43,40): gray,nobaggle,notopwall,noleftwall,
+Cell(43,41): blue,nobaggle,notopwall,noleftwall,
+Cell(44,25): black,nobaggle,notopwall,noleftwall,
+Cell(44,26): black,nobaggle,notopwall,noleftwall,
+Cell(44,27): black,nobaggle,notopwall,noleftwall,
+Cell(44,28): black,nobaggle,notopwall,noleftwall,
+Cell(44,29): black,nobaggle,notopwall,noleftwall,
+Cell(44,30): magenta,nobaggle,notopwall,noleftwall,
+Cell(44,32): blue,nobaggle,notopwall,noleftwall,
+Cell(44,33): black,nobaggle,notopwall,noleftwall,
+Cell(44,34): gray,nobaggle,notopwall,noleftwall,
+Cell(44,35): green,nobaggle,notopwall,noleftwall,
+Cell(44,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(44,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(44,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(44,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(44,41): green,nobaggle,notopwall,noleftwall,
+Cell(45,25): black,nobaggle,notopwall,noleftwall,
+Cell(45,26): green,nobaggle,notopwall,noleftwall,
+Cell(45,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(45,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(45,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(45,30): orange,nobaggle,notopwall,noleftwall,
+Cell(45,32): blue,nobaggle,notopwall,noleftwall,
+Cell(45,33): red,nobaggle,notopwall,noleftwall,
+Cell(45,34): red,nobaggle,notopwall,noleftwall,
+Cell(45,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(45,36): blue,nobaggle,notopwall,noleftwall,
+Cell(45,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(45,38): magenta,nobaggle,notopwall,noleftwall,
+Cell(45,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(45,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(45,41): green,nobaggle,notopwall,noleftwall,
+Cell(46,25): black,nobaggle,notopwall,noleftwall,
+Cell(46,26): green,nobaggle,notopwall,noleftwall,
+Cell(46,27): red,nobaggle,notopwall,noleftwall,
+Cell(46,28): gray,nobaggle,notopwall,noleftwall,
+Cell(46,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(46,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(46,32): cyan,nobaggle,notopwall,noleftwall,
+Cell(46,33): black,nobaggle,notopwall,noleftwall,
+Cell(46,34): pink,nobaggle,notopwall,noleftwall,
+Cell(46,35): pink,nobaggle,notopwall,noleftwall,
+Cell(46,36): gray,nobaggle,notopwall,noleftwall,
+Cell(46,37): orange,nobaggle,notopwall,noleftwall,
+Cell(46,38): orange,nobaggle,notopwall,noleftwall,
+Cell(46,39): green,nobaggle,notopwall,noleftwall,
+Cell(46,40): green,nobaggle,notopwall,noleftwall,
+Cell(46,41): blue,nobaggle,notopwall,noleftwall,
+Cell(47,25): black,nobaggle,notopwall,noleftwall,
+Cell(47,26): black,nobaggle,notopwall,noleftwall,
+Cell(47,27): magenta,nobaggle,notopwall,noleftwall,
+Cell(47,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(47,29): red,nobaggle,notopwall,noleftwall,
+Cell(47,30): gray,nobaggle,notopwall,noleftwall,
+Cell(47,31): black,nobaggle,notopwall,noleftwall,
+Cell(47,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(47,33): gray,nobaggle,notopwall,noleftwall,
+Cell(47,34): orange,nobaggle,notopwall,noleftwall,
+Cell(47,35): orange,nobaggle,notopwall,noleftwall,
+Cell(47,36): green,nobaggle,notopwall,noleftwall,
+Cell(47,37): black,nobaggle,notopwall,noleftwall,
+Cell(48,27): magenta,nobaggle,notopwall,noleftwall,
+Cell(48,28): green,nobaggle,notopwall,noleftwall,
+Cell(48,30): blue,nobaggle,notopwall,noleftwall,
+Cell(48,31): black,nobaggle,notopwall,noleftwall,
+Cell(48,32): orange,nobaggle,notopwall,noleftwall,
+Cell(48,33): blue,nobaggle,notopwall,noleftwall,
+Cell(48,34): black,nobaggle,notopwall,noleftwall,
+Cell(48,35): black,nobaggle,notopwall,noleftwall,
+Cell(48,36): black,nobaggle,notopwall,noleftwall,
+Cell(48,37): black,nobaggle,notopwall,noleftwall,
+Cell(49,26): black,nobaggle,notopwall,noleftwall,
+Cell(49,27): red,nobaggle,notopwall,noleftwall,
+Cell(49,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(49,30): blue,nobaggle,notopwall,noleftwall,
+Cell(49,31): red,nobaggle,notopwall,noleftwall,
+Cell(49,32): gray,nobaggle,notopwall,noleftwall,
+Cell(49,33): black,nobaggle,notopwall,noleftwall,
+Cell(50,26): black,nobaggle,notopwall,noleftwall,
+Cell(50,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(50,28): red,nobaggle,notopwall,noleftwall,
+Cell(50,29): blue,nobaggle,notopwall,noleftwall,
+Cell(50,30): orange,nobaggle,notopwall,noleftwall,
+Cell(50,31): green,nobaggle,notopwall,noleftwall,
+Cell(50,33): green,nobaggle,notopwall,noleftwall,
+Cell(50,34): black,nobaggle,notopwall,noleftwall,
+Cell(50,37): black,nobaggle,notopwall,noleftwall,
+Cell(50,38): black,nobaggle,notopwall,noleftwall,
+Cell(50,39): black,nobaggle,notopwall,noleftwall,
+Cell(50,40): black,nobaggle,notopwall,noleftwall,
+Cell(51,27): black,nobaggle,notopwall,noleftwall,
+Cell(51,28): blue,nobaggle,notopwall,noleftwall,
+Cell(51,29): pink,nobaggle,notopwall,noleftwall,
+Cell(51,30): black,nobaggle,notopwall,noleftwall,
+Cell(51,31): black,nobaggle,notopwall,noleftwall,
+Cell(51,32): black,nobaggle,notopwall,noleftwall,
+Cell(51,33): red,nobaggle,notopwall,noleftwall,
+Cell(51,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(51,35): black,nobaggle,notopwall,noleftwall,
+Cell(51,37): black,nobaggle,notopwall,noleftwall,
+Cell(51,38): green,nobaggle,notopwall,noleftwall,
+Cell(51,39): green,nobaggle,notopwall,noleftwall,
+Cell(51,40): blue,nobaggle,notopwall,noleftwall,
+Cell(51,41): black,nobaggle,notopwall,noleftwall,
+Cell(52,28): black,nobaggle,notopwall,noleftwall,
+Cell(52,29): orange,nobaggle,notopwall,noleftwall,
+Cell(52,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(52,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(52,34): gray,nobaggle,notopwall,noleftwall,
+Cell(52,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(52,36): black,nobaggle,notopwall,noleftwall,
+Cell(52,37): blue,nobaggle,notopwall,noleftwall,
+Cell(52,38): gray,nobaggle,notopwall,noleftwall,
+Cell(52,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(52,40): green,nobaggle,notopwall,noleftwall,
+Cell(52,41): blue,nobaggle,notopwall,noleftwall,
+Cell(52,42): black,nobaggle,notopwall,noleftwall,
+Cell(53,29): black,nobaggle,notopwall,noleftwall,
+Cell(53,30): green,nobaggle,notopwall,noleftwall,
+Cell(53,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(53,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(53,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(53,34): pink,nobaggle,notopwall,noleftwall,
+Cell(53,35): orange,nobaggle,notopwall,noleftwall,
+Cell(53,36): blue,nobaggle,notopwall,noleftwall,
+Cell(53,37): gray,nobaggle,notopwall,noleftwall,
+Cell(53,38): black,nobaggle,notopwall,noleftwall,
+Cell(53,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(53,40): orange,nobaggle,notopwall,noleftwall,
+Cell(53,41): green,nobaggle,notopwall,noleftwall,
+Cell(53,42): black,nobaggle,notopwall,noleftwall,
+Cell(54,29): black,nobaggle,notopwall,noleftwall,
+Cell(54,30): green,nobaggle,notopwall,noleftwall,
+Cell(54,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(54,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(54,33): gray,nobaggle,notopwall,noleftwall,
+Cell(54,34): darkGray,nobaggle,notopwall,noleftwall,
+Cell(54,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(54,36): green,nobaggle,notopwall,noleftwall,
+Cell(54,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(54,38): blue,nobaggle,notopwall,noleftwall,
+Cell(54,39): pink,nobaggle,notopwall,noleftwall,
+Cell(54,40): red,nobaggle,notopwall,noleftwall,
+Cell(54,41): green,nobaggle,notopwall,noleftwall,
+Cell(54,42): black,nobaggle,notopwall,noleftwall,
+Cell(55,29): black,nobaggle,notopwall,noleftwall,
+Cell(55,30): blue,nobaggle,notopwall,noleftwall,
+Cell(55,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(55,32): gray,nobaggle,notopwall,noleftwall,
+Cell(55,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(55,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(55,35): lightGray,nobaggle,notopwall,noleftwall,
+Cell(55,37): blue,nobaggle,notopwall,noleftwall,
+Cell(55,38): blue,nobaggle,notopwall,noleftwall,
+Cell(55,39): pink,nobaggle,notopwall,noleftwall,
+Cell(55,40): red,nobaggle,notopwall,noleftwall,
+Cell(55,41): blue,nobaggle,notopwall,noleftwall,
+Cell(55,42): black,nobaggle,notopwall,noleftwall,
+Cell(56,30): black,nobaggle,notopwall,noleftwall,
+Cell(56,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(56,32): gray,nobaggle,notopwall,noleftwall,
+Cell(56,33): pink,nobaggle,notopwall,noleftwall,
+Cell(56,34): pink,nobaggle,notopwall,noleftwall,
+Cell(56,35): blue,nobaggle,notopwall,noleftwall,
+Cell(56,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(56,37): blue,nobaggle,notopwall,noleftwall,
+Cell(56,38): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(56,40): cyan,nobaggle,notopwall,noleftwall,
+Cell(56,41): black,nobaggle,notopwall,noleftwall,
+Cell(57,30): blue,nobaggle,notopwall,noleftwall,
+Cell(57,31): red,nobaggle,notopwall,noleftwall,
+Cell(57,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(57,33): blue,nobaggle,notopwall,noleftwall,
+Cell(57,35): black,nobaggle,notopwall,noleftwall,
+Cell(57,36): blue,nobaggle,notopwall,noleftwall,
+Cell(57,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(57,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(57,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(57,40): blue,nobaggle,notopwall,noleftwall,
+Cell(57,41): black,nobaggle,notopwall,noleftwall,
+Cell(58,29): blue,nobaggle,notopwall,noleftwall,
+Cell(58,30): green,nobaggle,notopwall,noleftwall,
+Cell(58,31): pink,nobaggle,notopwall,noleftwall,
+Cell(58,33): green,nobaggle,notopwall,noleftwall,
+Cell(58,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(58,35): orange,nobaggle,notopwall,noleftwall,
+Cell(58,36): gray,nobaggle,notopwall,noleftwall,
+Cell(58,37): green,nobaggle,notopwall,noleftwall,
+Cell(58,38): blue,nobaggle,notopwall,noleftwall,
+Cell(58,39): blue,nobaggle,notopwall,noleftwall,
+Cell(58,40): green,nobaggle,notopwall,noleftwall,
+Cell(58,41): black,nobaggle,notopwall,noleftwall,
+Cell(59,29): blue,nobaggle,notopwall,noleftwall,
+Cell(59,30): gray,nobaggle,notopwall,noleftwall,
+Cell(59,32): orange,nobaggle,notopwall,noleftwall,
+Cell(59,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(59,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(59,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(59,37): gray,nobaggle,notopwall,noleftwall,
+Cell(59,38): gray,nobaggle,notopwall,noleftwall,
+Cell(59,39): black,nobaggle,notopwall,noleftwall,
+Cell(59,40): gray,nobaggle,notopwall,noleftwall,
+Cell(59,41): blue,nobaggle,notopwall,noleftwall,
+Cell(60,25): black,nobaggle,notopwall,noleftwall,
+Cell(60,26): black,nobaggle,notopwall,noleftwall,
+Cell(60,27): black,nobaggle,notopwall,noleftwall,
+Cell(60,28): black,nobaggle,notopwall,noleftwall,
+Cell(60,29): black,nobaggle,notopwall,noleftwall,
+Cell(60,30): magenta,nobaggle,notopwall,noleftwall,
+Cell(60,32): blue,nobaggle,notopwall,noleftwall,
+Cell(60,33): black,nobaggle,notopwall,noleftwall,
+Cell(60,34): gray,nobaggle,notopwall,noleftwall,
+Cell(60,35): green,nobaggle,notopwall,noleftwall,
+Cell(60,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(60,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(60,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(60,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(60,41): green,nobaggle,notopwall,noleftwall,
+Cell(61,25): black,nobaggle,notopwall,noleftwall,
+Cell(61,26): green,nobaggle,notopwall,noleftwall,
+Cell(61,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(61,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(61,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(61,30): orange,nobaggle,notopwall,noleftwall,
+Cell(61,32): blue,nobaggle,notopwall,noleftwall,
+Cell(61,33): red,nobaggle,notopwall,noleftwall,
+Cell(61,34): red,nobaggle,notopwall,noleftwall,
+Cell(61,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(61,36): blue,nobaggle,notopwall,noleftwall,
+Cell(61,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(61,38): magenta,nobaggle,notopwall,noleftwall,
+Cell(61,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(61,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(61,41): green,nobaggle,notopwall,noleftwall,
+Cell(62,25): black,nobaggle,notopwall,noleftwall,
+Cell(62,26): green,nobaggle,notopwall,noleftwall,
+Cell(62,27): red,nobaggle,notopwall,noleftwall,
+Cell(62,28): gray,nobaggle,notopwall,noleftwall,
+Cell(62,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(62,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(62,32): cyan,nobaggle,notopwall,noleftwall,
+Cell(62,33): black,nobaggle,notopwall,noleftwall,
+Cell(62,34): pink,nobaggle,notopwall,noleftwall,
+Cell(62,35): pink,nobaggle,notopwall,noleftwall,
+Cell(62,36): gray,nobaggle,notopwall,noleftwall,
+Cell(62,37): orange,nobaggle,notopwall,noleftwall,
+Cell(62,38): orange,nobaggle,notopwall,noleftwall,
+Cell(62,39): green,nobaggle,notopwall,noleftwall,
+Cell(62,40): green,nobaggle,notopwall,noleftwall,
+Cell(62,41): blue,nobaggle,notopwall,noleftwall,
+Cell(63,25): black,nobaggle,notopwall,noleftwall,
+Cell(63,26): blue,nobaggle,notopwall,noleftwall,
+Cell(63,27): gray,nobaggle,notopwall,noleftwall,
+Cell(63,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(63,29): red,nobaggle,notopwall,noleftwall,
+Cell(63,30): green,nobaggle,notopwall,noleftwall,
+Cell(63,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(63,33): gray,nobaggle,notopwall,noleftwall,
+Cell(63,34): orange,nobaggle,notopwall,noleftwall,
+Cell(63,35): orange,nobaggle,notopwall,noleftwall,
+Cell(63,36): green,nobaggle,notopwall,noleftwall,
+Cell(63,37): black,nobaggle,notopwall,noleftwall,
+Cell(64,26): black,nobaggle,notopwall,noleftwall,
+Cell(64,27): gray,nobaggle,notopwall,noleftwall,
+Cell(64,28): green,nobaggle,notopwall,noleftwall,
+Cell(64,30): pink,nobaggle,notopwall,noleftwall,
+Cell(64,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(64,32): orange,nobaggle,notopwall,noleftwall,
+Cell(64,33): blue,nobaggle,notopwall,noleftwall,
+Cell(64,34): black,nobaggle,notopwall,noleftwall,
+Cell(64,35): black,nobaggle,notopwall,noleftwall,
+Cell(64,36): black,nobaggle,notopwall,noleftwall,
+Cell(64,37): black,nobaggle,notopwall,noleftwall,
+Cell(65,26): black,nobaggle,notopwall,noleftwall,
+Cell(65,27): red,nobaggle,notopwall,noleftwall,
+Cell(65,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(65,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(65,30): orange,nobaggle,notopwall,noleftwall,
+Cell(65,31): red,nobaggle,notopwall,noleftwall,
+Cell(65,32): orange,nobaggle,notopwall,noleftwall,
+Cell(65,33): blue,nobaggle,notopwall,noleftwall,
+Cell(65,34): blue,nobaggle,notopwall,noleftwall,
+Cell(65,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(65,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(65,37): green,nobaggle,notopwall,noleftwall,
+Cell(65,38): green,nobaggle,notopwall,noleftwall,
+Cell(65,39): blue,nobaggle,notopwall,noleftwall,
+Cell(65,40): black,nobaggle,notopwall,noleftwall,
+Cell(65,41): black,nobaggle,notopwall,noleftwall,
+Cell(66,26): black,nobaggle,notopwall,noleftwall,
+Cell(66,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(66,28): red,nobaggle,notopwall,noleftwall,
+Cell(66,29): blue,nobaggle,notopwall,noleftwall,
+Cell(66,30): lightGray,nobaggle,notopwall,noleftwall,
+Cell(66,31): pink,nobaggle,notopwall,noleftwall,
+Cell(66,32): lightGray,nobaggle,notopwall,noleftwall,
+Cell(66,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(66,34): darkGray,nobaggle,notopwall,noleftwall,
+Cell(66,35): gray,nobaggle,notopwall,noleftwall,
+Cell(66,36): red,nobaggle,notopwall,noleftwall,
+Cell(66,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(66,38): darkGray,nobaggle,notopwall,noleftwall,
+Cell(66,39): red,nobaggle,notopwall,noleftwall,
+Cell(66,40): green,nobaggle,notopwall,noleftwall,
+Cell(66,41): black,nobaggle,notopwall,noleftwall,
+Cell(67,27): black,nobaggle,notopwall,noleftwall,
+Cell(67,28): blue,nobaggle,notopwall,noleftwall,
+Cell(67,29): pink,nobaggle,notopwall,noleftwall,
+Cell(67,30): blue,nobaggle,notopwall,noleftwall,
+Cell(67,31): red,nobaggle,notopwall,noleftwall,
+Cell(67,32): lightGray,nobaggle,notopwall,noleftwall,
+Cell(67,33): orange,nobaggle,notopwall,noleftwall,
+Cell(67,34): gray,nobaggle,notopwall,noleftwall,
+Cell(67,35): green,nobaggle,notopwall,noleftwall,
+Cell(67,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(67,37): pink,nobaggle,notopwall,noleftwall,
+Cell(67,38): black,nobaggle,notopwall,noleftwall,
+Cell(67,39): cyan,nobaggle,notopwall,noleftwall,
+Cell(67,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(67,41): black,nobaggle,notopwall,noleftwall,
+Cell(68,28): black,nobaggle,notopwall,noleftwall,
+Cell(68,29): orange,nobaggle,notopwall,noleftwall,
+Cell(68,30): pink,nobaggle,notopwall,noleftwall,
+Cell(68,31): gray,nobaggle,notopwall,noleftwall,
+Cell(68,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,34): black,nobaggle,notopwall,noleftwall,
+Cell(68,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(68,37): cyan,nobaggle,notopwall,noleftwall,
+Cell(68,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(68,39): blue,nobaggle,notopwall,noleftwall,
+Cell(68,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,41): black,nobaggle,notopwall,noleftwall,
+Cell(69,28): black,nobaggle,notopwall,noleftwall,
+Cell(69,29): blue,nobaggle,notopwall,noleftwall,
+Cell(69,30): gray,nobaggle,notopwall,noleftwall,
+Cell(69,31): black,nobaggle,notopwall,noleftwall,
+Cell(69,32): black,nobaggle,notopwall,noleftwall,
+Cell(69,33): red,nobaggle,notopwall,noleftwall,
+Cell(69,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(69,35): black,nobaggle,notopwall,noleftwall,
+Cell(69,36): pink,nobaggle,notopwall,noleftwall,
+Cell(69,37): gray,nobaggle,notopwall,noleftwall,
+Cell(69,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(69,40): red,nobaggle,notopwall,noleftwall,
+Cell(70,27): black,nobaggle,notopwall,noleftwall,
+Cell(70,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(70,29): red,nobaggle,notopwall,noleftwall,
+Cell(70,30): lightGray,nobaggle,notopwall,noleftwall,
+Cell(70,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(70,32): lightGray,nobaggle,notopwall,noleftwall,
+Cell(70,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(70,34): red,nobaggle,notopwall,noleftwall,
+Cell(70,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(70,36): lightGray,nobaggle,notopwall,noleftwall,
+Cell(70,37): black,nobaggle,notopwall,noleftwall,
+Cell(70,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(70,40): red,nobaggle,notopwall,noleftwall,
+Cell(70,41): black,nobaggle,notopwall,noleftwall,
+Cell(70,42): black,nobaggle,notopwall,noleftwall,
+Cell(70,43): black,nobaggle,notopwall,noleftwall,
+Cell(70,44): black,nobaggle,notopwall,noleftwall,
+Cell(71,22): black,nobaggle,notopwall,noleftwall,
+Cell(71,23): black,nobaggle,notopwall,noleftwall,
+Cell(71,24): black,nobaggle,notopwall,noleftwall,
+Cell(71,25): black,nobaggle,notopwall,noleftwall,
+Cell(71,26): black,nobaggle,notopwall,noleftwall,
+Cell(71,27): blue,nobaggle,notopwall,noleftwall,
+Cell(71,28): orange,nobaggle,notopwall,noleftwall,
+Cell(71,29): gray,nobaggle,notopwall,noleftwall,
+Cell(71,30): black,nobaggle,notopwall,noleftwall,
+Cell(71,31): red,nobaggle,notopwall,noleftwall,
+Cell(71,32): lightGray,nobaggle,notopwall,noleftwall,
+Cell(71,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(71,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(71,35): gray,nobaggle,notopwall,noleftwall,
+Cell(71,36): pink,nobaggle,notopwall,noleftwall,
+Cell(71,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(71,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(71,39): blue,nobaggle,notopwall,noleftwall,
+Cell(71,40): darkGray,nobaggle,notopwall,noleftwall,
+Cell(71,41): cyan,nobaggle,notopwall,noleftwall,
+Cell(71,42): cyan,nobaggle,notopwall,noleftwall,
+Cell(71,43): green,nobaggle,notopwall,noleftwall,
+Cell(71,44): blue,nobaggle,notopwall,noleftwall,
+Cell(71,45): black,nobaggle,notopwall,noleftwall,
+Cell(72,22): black,nobaggle,notopwall,noleftwall,
+Cell(72,23): green,nobaggle,notopwall,noleftwall,
+Cell(72,24): cyan,nobaggle,notopwall,noleftwall,
+Cell(72,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(72,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(72,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(72,28): magenta,nobaggle,notopwall,noleftwall,
+Cell(72,29): darkGray,nobaggle,notopwall,noleftwall,
+Cell(72,31): red,nobaggle,notopwall,noleftwall,
+Cell(72,32): orange,nobaggle,notopwall,noleftwall,
+Cell(72,33): cyan,nobaggle,notopwall,noleftwall,
+Cell(72,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(72,35): orange,nobaggle,notopwall,noleftwall,
+Cell(72,36): blue,nobaggle,notopwall,noleftwall,
+Cell(72,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(72,38): green,nobaggle,notopwall,noleftwall,
+Cell(72,39): orange,nobaggle,notopwall,noleftwall,
+Cell(72,40): cyan,nobaggle,notopwall,noleftwall,
+Cell(72,41): pink,nobaggle,notopwall,noleftwall,
+Cell(72,42): gray,nobaggle,notopwall,noleftwall,
+Cell(72,43): red,nobaggle,notopwall,noleftwall,
+Cell(72,44): red,nobaggle,notopwall,noleftwall,
+Cell(72,45): cyan,nobaggle,notopwall,noleftwall,
+Cell(72,46): black,nobaggle,notopwall,noleftwall,
+Cell(73,22): black,nobaggle,notopwall,noleftwall,
+Cell(73,23): green,nobaggle,notopwall,noleftwall,
+Cell(73,24): red,nobaggle,notopwall,noleftwall,
+Cell(73,25): red,nobaggle,notopwall,noleftwall,
+Cell(73,26): orange,nobaggle,notopwall,noleftwall,
+Cell(73,27): green,nobaggle,notopwall,noleftwall,
+Cell(73,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(73,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(73,30): gray,nobaggle,notopwall,noleftwall,
+Cell(73,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(73,34): gray,nobaggle,notopwall,noleftwall,
+Cell(73,35): pink,nobaggle,notopwall,noleftwall,
+Cell(73,36): black,nobaggle,notopwall,noleftwall,
+Cell(73,37): red,nobaggle,notopwall,noleftwall,
+Cell(73,38): gray,nobaggle,notopwall,noleftwall,
+Cell(73,39): black,nobaggle,notopwall,noleftwall,
+Cell(73,40): gray,nobaggle,notopwall,noleftwall,
+Cell(73,41): orange,nobaggle,notopwall,noleftwall,
+Cell(73,43): darkGray,nobaggle,notopwall,noleftwall,
+Cell(73,44): darkGray,nobaggle,notopwall,noleftwall,
+Cell(73,45): red,nobaggle,notopwall,noleftwall,
+Cell(73,46): black,nobaggle,notopwall,noleftwall,
+Cell(74,22): black,nobaggle,notopwall,noleftwall,
+Cell(74,23): green,nobaggle,notopwall,noleftwall,
+Cell(74,24): red,nobaggle,notopwall,noleftwall,
+Cell(74,25): pink,nobaggle,notopwall,noleftwall,
+Cell(74,26): darkGray,nobaggle,notopwall,noleftwall,
+Cell(74,27): magenta,nobaggle,notopwall,noleftwall,
+Cell(74,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(74,29): red,nobaggle,notopwall,noleftwall,
+Cell(74,30): cyan,nobaggle,notopwall,noleftwall,
+Cell(74,31): orange,nobaggle,notopwall,noleftwall,
+Cell(74,32): green,nobaggle,notopwall,noleftwall,
+Cell(74,33): black,nobaggle,notopwall,noleftwall,
+Cell(74,34): darkGray,nobaggle,notopwall,noleftwall,
+Cell(74,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(74,36): lightGray,nobaggle,notopwall,noleftwall,
+Cell(74,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(74,38): orange,nobaggle,notopwall,noleftwall,
+Cell(74,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(74,41): pink,nobaggle,notopwall,noleftwall,
+Cell(74,42): gray,nobaggle,notopwall,noleftwall,
+Cell(74,43): cyan,nobaggle,notopwall,noleftwall,
+Cell(74,45): gray,nobaggle,notopwall,noleftwall,
+Cell(74,46): black,nobaggle,notopwall,noleftwall,
+Cell(75,22): black,nobaggle,notopwall,noleftwall,
+Cell(75,23): green,nobaggle,notopwall,noleftwall,
+Cell(75,24): orange,nobaggle,notopwall,noleftwall,
+Cell(75,25): magenta,nobaggle,notopwall,noleftwall,
+Cell(75,26): blue,nobaggle,notopwall,noleftwall,
+Cell(75,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(75,28): blue,nobaggle,notopwall,noleftwall,
+Cell(75,29): pink,nobaggle,notopwall,noleftwall,
+Cell(75,30): orange,nobaggle,notopwall,noleftwall,
+Cell(75,31): orange,nobaggle,notopwall,noleftwall,
+Cell(75,32): green,nobaggle,notopwall,noleftwall,
+Cell(75,33): pink,nobaggle,notopwall,noleftwall,
+Cell(75,34): blue,nobaggle,notopwall,noleftwall,
+Cell(75,35): blue,nobaggle,notopwall,noleftwall,
+Cell(75,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(75,37): orange,nobaggle,notopwall,noleftwall,
+Cell(75,38): blue,nobaggle,notopwall,noleftwall,
+Cell(75,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(75,40): red,nobaggle,notopwall,noleftwall,
+Cell(75,41): cyan,nobaggle,notopwall,noleftwall,
+Cell(75,42): magenta,nobaggle,notopwall,noleftwall,
+Cell(75,43): pink,nobaggle,notopwall,noleftwall,
+Cell(75,44): green,nobaggle,notopwall,noleftwall,
+Cell(75,45): gray,nobaggle,notopwall,noleftwall,
+Cell(75,46): blue,nobaggle,notopwall,noleftwall,
+Cell(75,47): black,nobaggle,notopwall,noleftwall,
+Cell(76,22): black,nobaggle,notopwall,noleftwall,
+Cell(76,23): blue,nobaggle,notopwall,noleftwall,
+Cell(76,24): orange,nobaggle,notopwall,noleftwall,
+Cell(76,25): magenta,nobaggle,notopwall,noleftwall,
+Cell(76,26): blue,nobaggle,notopwall,noleftwall,
+Cell(76,27): lightGray,nobaggle,notopwall,noleftwall,
+Cell(76,28): orange,nobaggle,notopwall,noleftwall,
+Cell(76,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(76,30): gray,nobaggle,notopwall,noleftwall,
+Cell(76,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(76,33): red,nobaggle,notopwall,noleftwall,
+Cell(76,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(76,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(76,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(76,37): orange,nobaggle,notopwall,noleftwall,
+Cell(76,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(76,39): red,nobaggle,notopwall,noleftwall,
+Cell(76,40): cyan,nobaggle,notopwall,noleftwall,
+Cell(76,41): darkGray,nobaggle,notopwall,noleftwall,
+Cell(76,42): blue,nobaggle,notopwall,noleftwall,
+Cell(76,43): cyan,nobaggle,notopwall,noleftwall,
+Cell(76,44): pink,nobaggle,notopwall,noleftwall,
+Cell(76,45): pink,nobaggle,notopwall,noleftwall,
+Cell(76,46): green,nobaggle,notopwall,noleftwall,
+Cell(76,47): black,nobaggle,notopwall,noleftwall,
+Cell(77,23): black,nobaggle,notopwall,noleftwall,
+Cell(77,24): orange,nobaggle,notopwall,noleftwall,
+Cell(77,25): darkGray,nobaggle,notopwall,noleftwall,
+Cell(77,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(77,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(77,28): darkGray,nobaggle,notopwall,noleftwall,
+Cell(77,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(77,30): lightGray,nobaggle,notopwall,noleftwall,
+Cell(77,31): gray,nobaggle,notopwall,noleftwall,
+Cell(77,32): green,nobaggle,notopwall,noleftwall,
+Cell(77,33): black,nobaggle,notopwall,noleftwall,
+Cell(77,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(77,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(77,36): orange,nobaggle,notopwall,noleftwall,
+Cell(77,37): green,nobaggle,notopwall,noleftwall,
+Cell(77,39): black,nobaggle,notopwall,noleftwall,
+Cell(77,40): green,nobaggle,notopwall,noleftwall,
+Cell(77,41): green,nobaggle,notopwall,noleftwall,
+Cell(77,42): pink,nobaggle,notopwall,noleftwall,
+Cell(77,43): red,nobaggle,notopwall,noleftwall,
+Cell(77,44): pink,nobaggle,notopwall,noleftwall,
+Cell(77,45): black,nobaggle,notopwall,noleftwall,
+Cell(77,46): orange,nobaggle,notopwall,noleftwall,
+Cell(77,47): black,nobaggle,notopwall,noleftwall,
+Cell(78,23): blue,nobaggle,notopwall,noleftwall,
+Cell(78,24): red,nobaggle,notopwall,noleftwall,
+Cell(78,25): lightGray,nobaggle,notopwall,noleftwall,
+Cell(78,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(78,27): red,nobaggle,notopwall,noleftwall,
+Cell(78,28): black,nobaggle,notopwall,noleftwall,
+Cell(78,29): black,nobaggle,notopwall,noleftwall,
+Cell(78,30): black,nobaggle,notopwall,noleftwall,
+Cell(78,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(78,32): black,nobaggle,notopwall,noleftwall,
+Cell(78,33): green,nobaggle,notopwall,noleftwall,
+Cell(78,34): gray,nobaggle,notopwall,noleftwall,
+Cell(78,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(78,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(78,37): blue,nobaggle,notopwall,noleftwall,
+Cell(78,38): blue,nobaggle,notopwall,noleftwall,
+Cell(78,39): blue,nobaggle,notopwall,noleftwall,
+Cell(78,40): black,nobaggle,notopwall,noleftwall,
+Cell(78,41): gray,nobaggle,notopwall,noleftwall,
+Cell(78,42): darkGray,nobaggle,notopwall,noleftwall,
+Cell(78,43): lightGray,nobaggle,notopwall,noleftwall,
+Cell(78,45): pink,nobaggle,notopwall,noleftwall,
+Cell(78,46): orange,nobaggle,notopwall,noleftwall,
+Cell(78,47): black,nobaggle,notopwall,noleftwall,
+Cell(79,23): blue,nobaggle,notopwall,noleftwall,
+Cell(79,24): red,nobaggle,notopwall,noleftwall,
+Cell(79,25): lightGray,nobaggle,notopwall,noleftwall,
+Cell(79,26): darkGray,nobaggle,notopwall,noleftwall,
+Cell(79,27): red,nobaggle,notopwall,noleftwall,
+Cell(79,30): blue,nobaggle,notopwall,noleftwall,
+Cell(79,31): red,nobaggle,notopwall,noleftwall,
+Cell(79,32): gray,nobaggle,notopwall,noleftwall,
+Cell(79,33): orange,nobaggle,notopwall,noleftwall,
+Cell(79,34): pink,nobaggle,notopwall,noleftwall,
+Cell(79,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(79,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(79,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(79,38): blue,nobaggle,notopwall,noleftwall,
+Cell(79,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(79,40): orange,nobaggle,notopwall,noleftwall,
+Cell(79,41): blue,nobaggle,notopwall,noleftwall,
+Cell(79,42): lightGray,nobaggle,notopwall,noleftwall,
+Cell(79,43): magenta,nobaggle,notopwall,noleftwall,
+Cell(79,44): lightGray,nobaggle,notopwall,noleftwall,
+Cell(79,45): gray,nobaggle,notopwall,noleftwall,
+Cell(79,46): green,nobaggle,notopwall,noleftwall,
+Cell(79,47): black,nobaggle,notopwall,noleftwall,
+Cell(80,23): blue,nobaggle,notopwall,noleftwall,
+Cell(80,24): red,nobaggle,notopwall,noleftwall,
+Cell(80,25): red,nobaggle,notopwall,noleftwall,
+Cell(80,26): red,nobaggle,notopwall,noleftwall,
+Cell(80,27): pink,nobaggle,notopwall,noleftwall,
+Cell(80,28): blue,nobaggle,notopwall,noleftwall,
+Cell(80,30): magenta,nobaggle,notopwall,noleftwall,
+Cell(80,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(80,32): lightGray,nobaggle,notopwall,noleftwall,
+Cell(80,33): gray,nobaggle,notopwall,noleftwall,
+Cell(80,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(80,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(80,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(80,37): blue,nobaggle,notopwall,noleftwall,
+Cell(80,38): orange,nobaggle,notopwall,noleftwall,
+Cell(80,41): darkGray,nobaggle,notopwall,noleftwall,
+Cell(80,42): cyan,nobaggle,notopwall,noleftwall,
+Cell(80,44): orange,nobaggle,notopwall,noleftwall,
+Cell(80,45): gray,nobaggle,notopwall,noleftwall,
+Cell(80,46): blue,nobaggle,notopwall,noleftwall,
+Cell(80,47): blue,nobaggle,notopwall,noleftwall,
+Cell(80,48): black,nobaggle,notopwall,noleftwall,
+Cell(80,49): black,nobaggle,notopwall,noleftwall,
+Cell(80,50): black,nobaggle,notopwall,noleftwall,
+Cell(81,23): blue,nobaggle,notopwall,noleftwall,
+Cell(81,24): cyan,nobaggle,notopwall,noleftwall,
+Cell(81,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(81,26): red,nobaggle,notopwall,noleftwall,
+Cell(81,27): black,nobaggle,notopwall,noleftwall,
+Cell(81,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(81,29): orange,nobaggle,notopwall,noleftwall,
+Cell(81,30): red,nobaggle,notopwall,noleftwall,
+Cell(81,31): black,nobaggle,notopwall,noleftwall,
+Cell(81,32): black,nobaggle,notopwall,noleftwall,
+Cell(81,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(81,35): blue,nobaggle,notopwall,noleftwall,
+Cell(81,36): blue,nobaggle,notopwall,noleftwall,
+Cell(81,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(81,38): gray,nobaggle,notopwall,noleftwall,
+Cell(81,39): pink,nobaggle,notopwall,noleftwall,
+Cell(81,40): lightGray,nobaggle,notopwall,noleftwall,
+Cell(81,41): cyan,nobaggle,notopwall,noleftwall,
+Cell(81,42): pink,nobaggle,notopwall,noleftwall,
+Cell(81,43): pink,nobaggle,notopwall,noleftwall,
+Cell(81,44): black,nobaggle,notopwall,noleftwall,
+Cell(81,45): orange,nobaggle,notopwall,noleftwall,
+Cell(81,46): cyan,nobaggle,notopwall,noleftwall,
+Cell(81,47): blue,nobaggle,notopwall,noleftwall,
+Cell(81,48): green,nobaggle,notopwall,noleftwall,
+Cell(81,49): green,nobaggle,notopwall,noleftwall,
+Cell(81,50): blue,nobaggle,notopwall,noleftwall,
+Cell(81,51): black,nobaggle,notopwall,noleftwall,
+Cell(82,25): black,nobaggle,notopwall,noleftwall,
+Cell(82,26): green,nobaggle,notopwall,noleftwall,
+Cell(82,27): pink,nobaggle,notopwall,noleftwall,
+Cell(82,28): darkGray,nobaggle,notopwall,noleftwall,
+Cell(82,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(82,30): red,nobaggle,notopwall,noleftwall,
+Cell(82,31): blue,nobaggle,notopwall,noleftwall,
+Cell(82,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(82,33): blue,nobaggle,notopwall,noleftwall,
+Cell(82,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(82,35): orange,nobaggle,notopwall,noleftwall,
+Cell(82,36): green,nobaggle,notopwall,noleftwall,
+Cell(82,37): cyan,nobaggle,notopwall,noleftwall,
+Cell(82,38): gray,nobaggle,notopwall,noleftwall,
+Cell(82,39): pink,nobaggle,notopwall,noleftwall,
+Cell(82,40): lightGray,nobaggle,notopwall,noleftwall,
+Cell(82,41): cyan,nobaggle,notopwall,noleftwall,
+Cell(82,42): gray,nobaggle,notopwall,noleftwall,
+Cell(82,43): green,nobaggle,notopwall,noleftwall,
+Cell(82,44): orange,nobaggle,notopwall,noleftwall,
+Cell(82,46): lightGray,nobaggle,notopwall,noleftwall,
+Cell(82,47): black,nobaggle,notopwall,noleftwall,
+Cell(82,48): black,nobaggle,notopwall,noleftwall,
+Cell(82,49): magenta,nobaggle,notopwall,noleftwall,
+Cell(82,50): green,nobaggle,notopwall,noleftwall,
+Cell(82,51): black,nobaggle,notopwall,noleftwall,
+Cell(83,24): black,nobaggle,notopwall,noleftwall,
+Cell(83,25): green,nobaggle,notopwall,noleftwall,
+Cell(83,26): gray,nobaggle,notopwall,noleftwall,
+Cell(83,29): blue,nobaggle,notopwall,noleftwall,
+Cell(83,31): gray,nobaggle,notopwall,noleftwall,
+Cell(83,32): green,nobaggle,notopwall,noleftwall,
+Cell(83,33): lightGray,nobaggle,notopwall,noleftwall,
+Cell(83,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(83,35): blue,nobaggle,notopwall,noleftwall,
+Cell(83,36): orange,nobaggle,notopwall,noleftwall,
+Cell(83,37): blue,nobaggle,notopwall,noleftwall,
+Cell(83,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(83,39): orange,nobaggle,notopwall,noleftwall,
+Cell(83,40): orange,nobaggle,notopwall,noleftwall,
+Cell(83,41): darkGray,nobaggle,notopwall,noleftwall,
+Cell(83,42): magenta,nobaggle,notopwall,noleftwall,
+Cell(83,43): gray,nobaggle,notopwall,noleftwall,
+Cell(83,44): red,nobaggle,notopwall,noleftwall,
+Cell(83,45): pink,nobaggle,notopwall,noleftwall,
+Cell(83,46): black,nobaggle,notopwall,noleftwall,
+Cell(83,47): green,nobaggle,notopwall,noleftwall,
+Cell(83,48): green,nobaggle,notopwall,noleftwall,
+Cell(83,49): gray,nobaggle,notopwall,noleftwall,
+Cell(83,50): green,nobaggle,notopwall,noleftwall,
+Cell(83,51): black,nobaggle,notopwall,noleftwall,
+Cell(84,24): black,nobaggle,notopwall,noleftwall,
+Cell(84,25): gray,nobaggle,notopwall,noleftwall,
+Cell(84,27): blue,nobaggle,notopwall,noleftwall,
+Cell(84,28): darkGray,nobaggle,notopwall,noleftwall,
+Cell(84,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(84,30): magenta,nobaggle,notopwall,noleftwall,
+Cell(84,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(84,32): gray,nobaggle,notopwall,noleftwall,
+Cell(84,33): pink,nobaggle,notopwall,noleftwall,
+Cell(84,34): red,nobaggle,notopwall,noleftwall,
+Cell(84,36): orange,nobaggle,notopwall,noleftwall,
+Cell(84,38): green,nobaggle,notopwall,noleftwall,
+Cell(84,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(84,40): orange,nobaggle,notopwall,noleftwall,
+Cell(84,41): darkGray,nobaggle,notopwall,noleftwall,
+Cell(84,42): blue,nobaggle,notopwall,noleftwall,
+Cell(84,43): black,nobaggle,notopwall,noleftwall,
+Cell(84,44): pink,nobaggle,notopwall,noleftwall,
+Cell(84,45): lightGray,nobaggle,notopwall,noleftwall,
+Cell(84,47): blue,nobaggle,notopwall,noleftwall,
+Cell(84,48): cyan,nobaggle,notopwall,noleftwall,
+Cell(84,49): red,nobaggle,notopwall,noleftwall,
+Cell(84,50): green,nobaggle,notopwall,noleftwall,
+Cell(84,51): black,nobaggle,notopwall,noleftwall,
+Cell(85,24): black,nobaggle,notopwall,noleftwall,
+Cell(85,25): gray,nobaggle,notopwall,noleftwall,
+Cell(85,27): blue,nobaggle,notopwall,noleftwall,
+Cell(85,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(85,29): blue,nobaggle,notopwall,noleftwall,
+Cell(85,30): cyan,nobaggle,notopwall,noleftwall,
+Cell(85,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(85,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(85,33): green,nobaggle,notopwall,noleftwall,
+Cell(85,34): black,nobaggle,notopwall,noleftwall,
+Cell(85,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(85,37): lightGray,nobaggle,notopwall,noleftwall,
+Cell(85,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(85,39): green,nobaggle,notopwall,noleftwall,
+Cell(85,40): cyan,nobaggle,notopwall,noleftwall,
+Cell(85,41): magenta,nobaggle,notopwall,noleftwall,
+Cell(85,42): darkGray,nobaggle,notopwall,noleftwall,
+Cell(85,43): red,nobaggle,notopwall,noleftwall,
+Cell(85,44): black,nobaggle,notopwall,noleftwall,
+Cell(85,45): green,nobaggle,notopwall,noleftwall,
+Cell(85,46): red,nobaggle,notopwall,noleftwall,
+Cell(85,47): red,nobaggle,notopwall,noleftwall,
+Cell(85,48): blue,nobaggle,notopwall,noleftwall,
+Cell(85,49): gray,nobaggle,notopwall,noleftwall,
+Cell(85,50): cyan,nobaggle,notopwall,noleftwall,
+Cell(85,51): black,nobaggle,notopwall,noleftwall,
+Cell(86,21): black,nobaggle,notopwall,noleftwall,
+Cell(86,22): black,nobaggle,notopwall,noleftwall,
+Cell(86,23): black,nobaggle,notopwall,noleftwall,
+Cell(86,24): blue,nobaggle,notopwall,noleftwall,
+Cell(86,25): gray,nobaggle,notopwall,noleftwall,
+Cell(86,27): blue,nobaggle,notopwall,noleftwall,
+Cell(86,28): green,nobaggle,notopwall,noleftwall,
+Cell(86,29): orange,nobaggle,notopwall,noleftwall,
+Cell(86,31): darkGray,nobaggle,notopwall,noleftwall,
+Cell(86,33): green,nobaggle,notopwall,noleftwall,
+Cell(86,34): red,nobaggle,notopwall,noleftwall,
+Cell(86,35): black,nobaggle,notopwall,noleftwall,
+Cell(86,36): red,nobaggle,notopwall,noleftwall,
+Cell(86,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(86,39): blue,nobaggle,notopwall,noleftwall,
+Cell(86,40): darkGray,nobaggle,notopwall,noleftwall,
+Cell(86,41): blue,nobaggle,notopwall,noleftwall,
+Cell(86,42): green,nobaggle,notopwall,noleftwall,
+Cell(86,45): green,nobaggle,notopwall,noleftwall,
+Cell(86,46): black,nobaggle,notopwall,noleftwall,
+Cell(86,47): black,nobaggle,notopwall,noleftwall,
+Cell(86,48): lightGray,nobaggle,notopwall,noleftwall,
+Cell(86,49): red,nobaggle,notopwall,noleftwall,
+Cell(86,50): cyan,nobaggle,notopwall,noleftwall,
+Cell(86,51): black,nobaggle,notopwall,noleftwall,
+Cell(87,20): black,nobaggle,notopwall,noleftwall,
+Cell(87,21): blue,nobaggle,notopwall,noleftwall,
+Cell(87,22): green,nobaggle,notopwall,noleftwall,
+Cell(87,23): green,nobaggle,notopwall,noleftwall,
+Cell(87,24): green,nobaggle,notopwall,noleftwall,
+Cell(87,25): pink,nobaggle,notopwall,noleftwall,
+Cell(87,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(87,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(87,28): darkGray,nobaggle,notopwall,noleftwall,
+Cell(87,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(87,31): green,nobaggle,notopwall,noleftwall,
+Cell(87,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(87,33): lightGray,nobaggle,notopwall,noleftwall,
+Cell(87,34): green,nobaggle,notopwall,noleftwall,
+Cell(87,35): blue,nobaggle,notopwall,noleftwall,
+Cell(87,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(87,37): black,nobaggle,notopwall,noleftwall,
+Cell(87,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(87,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(87,40): green,nobaggle,notopwall,noleftwall,
+Cell(87,41): orange,nobaggle,notopwall,noleftwall,
+Cell(87,42): lightGray,nobaggle,notopwall,noleftwall,
+Cell(87,43): darkGray,nobaggle,notopwall,noleftwall,
+Cell(87,44): pink,nobaggle,notopwall,noleftwall,
+Cell(87,45): black,nobaggle,notopwall,noleftwall,
+Cell(87,47): darkGray,nobaggle,notopwall,noleftwall,
+Cell(87,48): magenta,nobaggle,notopwall,noleftwall,
+Cell(87,49): pink,nobaggle,notopwall,noleftwall,
+Cell(87,50): orange,nobaggle,notopwall,noleftwall,
+Cell(87,51): black,nobaggle,notopwall,noleftwall,
+Cell(88,20): black,nobaggle,notopwall,noleftwall,
+Cell(88,21): green,nobaggle,notopwall,noleftwall,
+Cell(88,22): orange,nobaggle,notopwall,noleftwall,
+Cell(88,23): red,nobaggle,notopwall,noleftwall,
+Cell(88,24): gray,nobaggle,notopwall,noleftwall,
+Cell(88,25): pink,nobaggle,notopwall,noleftwall,
+Cell(88,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(88,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(88,28): orange,nobaggle,notopwall,noleftwall,
+Cell(88,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(88,30): green,nobaggle,notopwall,noleftwall,
+Cell(88,32): blue,nobaggle,notopwall,noleftwall,
+Cell(88,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(88,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(88,35): black,nobaggle,notopwall,noleftwall,
+Cell(88,36): red,nobaggle,notopwall,noleftwall,
+Cell(88,37): green,nobaggle,notopwall,noleftwall,
+Cell(88,38): gray,nobaggle,notopwall,noleftwall,
+Cell(88,39): green,nobaggle,notopwall,noleftwall,
+Cell(88,40): green,nobaggle,notopwall,noleftwall,
+Cell(88,41): darkGray,nobaggle,notopwall,noleftwall,
+Cell(88,42): green,nobaggle,notopwall,noleftwall,
+Cell(88,43): green,nobaggle,notopwall,noleftwall,
+Cell(88,44): gray,nobaggle,notopwall,noleftwall,
+Cell(88,45): pink,nobaggle,notopwall,noleftwall,
+Cell(88,46): blue,nobaggle,notopwall,noleftwall,
+Cell(88,47): cyan,nobaggle,notopwall,noleftwall,
+Cell(88,48): cyan,nobaggle,notopwall,noleftwall,
+Cell(88,49): blue,nobaggle,notopwall,noleftwall,
+Cell(88,50): red,nobaggle,notopwall,noleftwall,
+Cell(88,51): black,nobaggle,notopwall,noleftwall,
+Cell(89,18): black,nobaggle,notopwall,noleftwall,
+Cell(89,19): black,nobaggle,notopwall,noleftwall,
+Cell(89,20): black,nobaggle,notopwall,noleftwall,
+Cell(89,21): orange,nobaggle,notopwall,noleftwall,
+Cell(89,22): gray,nobaggle,notopwall,noleftwall,
+Cell(89,23): darkGray,nobaggle,notopwall,noleftwall,
+Cell(89,24): blue,nobaggle,notopwall,noleftwall,
+Cell(89,25): blue,nobaggle,notopwall,noleftwall,
+Cell(89,26): blue,nobaggle,notopwall,noleftwall,
+Cell(89,27): blue,nobaggle,notopwall,noleftwall,
+Cell(89,28): blue,nobaggle,notopwall,noleftwall,
+Cell(89,29): orange,nobaggle,notopwall,noleftwall,
+Cell(89,30): magenta,nobaggle,notopwall,noleftwall,
+Cell(89,31): blue,nobaggle,notopwall,noleftwall,
+Cell(89,32): blue,nobaggle,notopwall,noleftwall,
+Cell(89,33): magenta,nobaggle,notopwall,noleftwall,
+Cell(89,34): green,nobaggle,notopwall,noleftwall,
+Cell(89,35): pink,nobaggle,notopwall,noleftwall,
+Cell(89,36): blue,nobaggle,notopwall,noleftwall,
+Cell(89,37): gray,nobaggle,notopwall,noleftwall,
+Cell(89,38): blue,nobaggle,notopwall,noleftwall,
+Cell(89,39): red,nobaggle,notopwall,noleftwall,
+Cell(89,40): lightGray,nobaggle,notopwall,noleftwall,
+Cell(89,41): cyan,nobaggle,notopwall,noleftwall,
+Cell(89,42): green,nobaggle,notopwall,noleftwall,
+Cell(89,44): green,nobaggle,notopwall,noleftwall,
+Cell(89,45): lightGray,nobaggle,notopwall,noleftwall,
+Cell(89,46): green,nobaggle,notopwall,noleftwall,
+Cell(89,49): cyan,nobaggle,notopwall,noleftwall,
+Cell(89,50): gray,nobaggle,notopwall,noleftwall,
+Cell(89,51): black,nobaggle,notopwall,noleftwall,
+Cell(90,18): black,nobaggle,notopwall,noleftwall,
+Cell(90,19): green,nobaggle,notopwall,noleftwall,
+Cell(90,20): orange,nobaggle,notopwall,noleftwall,
+Cell(90,21): gray,nobaggle,notopwall,noleftwall,
+Cell(90,23): cyan,nobaggle,notopwall,noleftwall,
+Cell(90,24): orange,nobaggle,notopwall,noleftwall,
+Cell(90,25): darkGray,nobaggle,notopwall,noleftwall,
+Cell(90,26): lightGray,nobaggle,notopwall,noleftwall,
+Cell(90,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(90,28): magenta,nobaggle,notopwall,noleftwall,
+Cell(90,29): orange,nobaggle,notopwall,noleftwall,
+Cell(90,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(90,31): red,nobaggle,notopwall,noleftwall,
+Cell(90,32): pink,nobaggle,notopwall,noleftwall,
+Cell(90,33): red,nobaggle,notopwall,noleftwall,
+Cell(90,34): black,nobaggle,notopwall,noleftwall,
+Cell(90,35): red,nobaggle,notopwall,noleftwall,
+Cell(90,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(90,37): lightGray,nobaggle,notopwall,noleftwall,
+Cell(90,38): red,nobaggle,notopwall,noleftwall,
+Cell(90,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(90,40): gray,nobaggle,notopwall,noleftwall,
+Cell(90,41): blue,nobaggle,notopwall,noleftwall,
+Cell(90,42): darkGray,nobaggle,notopwall,noleftwall,
+Cell(90,43): cyan,nobaggle,notopwall,noleftwall,
+Cell(90,44): darkGray,nobaggle,notopwall,noleftwall,
+Cell(90,45): blue,nobaggle,notopwall,noleftwall,
+Cell(90,46): magenta,nobaggle,notopwall,noleftwall,
+Cell(90,47): magenta,nobaggle,notopwall,noleftwall,
+Cell(90,48): orange,nobaggle,notopwall,noleftwall,
+Cell(90,49): blue,nobaggle,notopwall,noleftwall,
+Cell(90,50): gray,nobaggle,notopwall,noleftwall,
+Cell(90,51): black,nobaggle,notopwall,noleftwall,
+Cell(91,12): black,nobaggle,notopwall,noleftwall,
+Cell(91,13): black,nobaggle,notopwall,noleftwall,
+Cell(91,14): blue,nobaggle,notopwall,noleftwall,
+Cell(91,15): blue,nobaggle,notopwall,noleftwall,
+Cell(91,16): blue,nobaggle,notopwall,noleftwall,
+Cell(91,17): blue,nobaggle,notopwall,noleftwall,
+Cell(91,18): blue,nobaggle,notopwall,noleftwall,
+Cell(91,19): red,nobaggle,notopwall,noleftwall,
+Cell(91,21): black,nobaggle,notopwall,noleftwall,
+Cell(91,24): black,nobaggle,notopwall,noleftwall,
+Cell(91,25): gray,nobaggle,notopwall,noleftwall,
+Cell(91,26): green,nobaggle,notopwall,noleftwall,
+Cell(91,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(91,28): green,nobaggle,notopwall,noleftwall,
+Cell(91,29): orange,nobaggle,notopwall,noleftwall,
+Cell(91,30): cyan,nobaggle,notopwall,noleftwall,
+Cell(91,31): red,nobaggle,notopwall,noleftwall,
+Cell(91,32): cyan,nobaggle,notopwall,noleftwall,
+Cell(91,33): blue,nobaggle,notopwall,noleftwall,
+Cell(91,34): darkGray,nobaggle,notopwall,noleftwall,
+Cell(91,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(91,36): green,nobaggle,notopwall,noleftwall,
+Cell(91,37): blue,nobaggle,notopwall,noleftwall,
+Cell(91,39): pink,nobaggle,notopwall,noleftwall,
+Cell(91,40): darkGray,nobaggle,notopwall,noleftwall,
+Cell(91,41): red,nobaggle,notopwall,noleftwall,
+Cell(91,42): green,nobaggle,notopwall,noleftwall,
+Cell(91,43): blue,nobaggle,notopwall,noleftwall,
+Cell(91,46): green,nobaggle,notopwall,noleftwall,
+Cell(91,47): lightGray,nobaggle,notopwall,noleftwall,
+Cell(91,49): blue,nobaggle,notopwall,noleftwall,
+Cell(91,50): gray,nobaggle,notopwall,noleftwall,
+Cell(91,51): black,nobaggle,notopwall,noleftwall,
+Cell(92,11): black,nobaggle,notopwall,noleftwall,
+Cell(92,12): blue,nobaggle,notopwall,noleftwall,
+Cell(92,13): green,nobaggle,notopwall,noleftwall,
+Cell(92,14): red,nobaggle,notopwall,noleftwall,
+Cell(92,15): orange,nobaggle,notopwall,noleftwall,
+Cell(92,16): cyan,nobaggle,notopwall,noleftwall,
+Cell(92,17): orange,nobaggle,notopwall,noleftwall,
+Cell(92,18): green,nobaggle,notopwall,noleftwall,
+Cell(92,19): red,nobaggle,notopwall,noleftwall,
+Cell(92,20): lightGray,nobaggle,notopwall,noleftwall,
+Cell(92,21): lightGray,nobaggle,notopwall,noleftwall,
+Cell(92,22): gray,nobaggle,notopwall,noleftwall,
+Cell(92,23): black,nobaggle,notopwall,noleftwall,
+Cell(92,26): gray,nobaggle,notopwall,noleftwall,
+Cell(92,27): red,nobaggle,notopwall,noleftwall,
+Cell(92,28): gray,nobaggle,notopwall,noleftwall,
+Cell(92,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(92,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(92,31): darkGray,nobaggle,notopwall,noleftwall,
+Cell(92,32): red,nobaggle,notopwall,noleftwall,
+Cell(92,33): blue,nobaggle,notopwall,noleftwall,
+Cell(92,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(92,35): red,nobaggle,notopwall,noleftwall,
+Cell(92,36): gray,nobaggle,notopwall,noleftwall,
+Cell(92,37): green,nobaggle,notopwall,noleftwall,
+Cell(92,38): orange,nobaggle,notopwall,noleftwall,
+Cell(92,39): gray,nobaggle,notopwall,noleftwall,
+Cell(92,40): cyan,nobaggle,notopwall,noleftwall,
+Cell(92,41): pink,nobaggle,notopwall,noleftwall,
+Cell(92,42): green,nobaggle,notopwall,noleftwall,
+Cell(92,43): gray,nobaggle,notopwall,noleftwall,
+Cell(92,44): gray,nobaggle,notopwall,noleftwall,
+Cell(92,45): green,nobaggle,notopwall,noleftwall,
+Cell(92,46): darkGray,nobaggle,notopwall,noleftwall,
+Cell(92,49): black,nobaggle,notopwall,noleftwall,
+Cell(92,50): magenta,nobaggle,notopwall,noleftwall,
+Cell(92,51): blue,nobaggle,notopwall,noleftwall,
+Cell(92,52): black,nobaggle,notopwall,noleftwall,
+Cell(93,11): black,nobaggle,notopwall,noleftwall,
+Cell(93,12): green,nobaggle,notopwall,noleftwall,
+Cell(93,13): magenta,nobaggle,notopwall,noleftwall,
+Cell(93,14): darkGray,nobaggle,notopwall,noleftwall,
+Cell(93,15): pink,nobaggle,notopwall,noleftwall,
+Cell(93,16): darkGray,nobaggle,notopwall,noleftwall,
+Cell(93,17): magenta,nobaggle,notopwall,noleftwall,
+Cell(93,18): darkGray,nobaggle,notopwall,noleftwall,
+Cell(93,19): pink,nobaggle,notopwall,noleftwall,
+Cell(93,20): orange,nobaggle,notopwall,noleftwall,
+Cell(93,21): magenta,nobaggle,notopwall,noleftwall,
+Cell(93,22): red,nobaggle,notopwall,noleftwall,
+Cell(93,23): black,nobaggle,notopwall,noleftwall,
+Cell(93,25): blue,nobaggle,notopwall,noleftwall,
+Cell(93,26): magenta,nobaggle,notopwall,noleftwall,
+Cell(93,27): blue,nobaggle,notopwall,noleftwall,
+Cell(93,28): orange,nobaggle,notopwall,noleftwall,
+Cell(93,29): pink,nobaggle,notopwall,noleftwall,
+Cell(93,30): cyan,nobaggle,notopwall,noleftwall,
+Cell(93,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(93,32): gray,nobaggle,notopwall,noleftwall,
+Cell(93,33): blue,nobaggle,notopwall,noleftwall,
+Cell(93,34): blue,nobaggle,notopwall,noleftwall,
+Cell(93,35): pink,nobaggle,notopwall,noleftwall,
+Cell(93,36): black,nobaggle,notopwall,noleftwall,
+Cell(93,37): green,nobaggle,notopwall,noleftwall,
+Cell(93,38): orange,nobaggle,notopwall,noleftwall,
+Cell(93,39): pink,nobaggle,notopwall,noleftwall,
+Cell(93,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(93,41): red,nobaggle,notopwall,noleftwall,
+Cell(93,42): black,nobaggle,notopwall,noleftwall,
+Cell(93,43): darkGray,nobaggle,notopwall,noleftwall,
+Cell(93,44): orange,nobaggle,notopwall,noleftwall,
+Cell(93,45): gray,nobaggle,notopwall,noleftwall,
+Cell(93,46): darkGray,nobaggle,notopwall,noleftwall,
+Cell(93,47): blue,nobaggle,notopwall,noleftwall,
+Cell(93,48): gray,nobaggle,notopwall,noleftwall,
+Cell(93,49): blue,nobaggle,notopwall,noleftwall,
+Cell(93,50): magenta,nobaggle,notopwall,noleftwall,
+Cell(93,51): green,nobaggle,notopwall,noleftwall,
+Cell(93,52): black,nobaggle,notopwall,noleftwall,
+Cell(94,11): black,nobaggle,notopwall,noleftwall,
+Cell(94,12): orange,nobaggle,notopwall,noleftwall,
+Cell(94,13): lightGray,nobaggle,notopwall,noleftwall,
+Cell(94,14): cyan,nobaggle,notopwall,noleftwall,
+Cell(94,15): red,nobaggle,notopwall,noleftwall,
+Cell(94,16): green,nobaggle,notopwall,noleftwall,
+Cell(94,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(94,18): orange,nobaggle,notopwall,noleftwall,
+Cell(94,19): lightGray,nobaggle,notopwall,noleftwall,
+Cell(94,20): black,nobaggle,notopwall,noleftwall,
+Cell(94,21): orange,nobaggle,notopwall,noleftwall,
+Cell(94,22): black,nobaggle,notopwall,noleftwall,
+Cell(94,23): pink,nobaggle,notopwall,noleftwall,
+Cell(94,24): blue,nobaggle,notopwall,noleftwall,
+Cell(94,25): green,nobaggle,notopwall,noleftwall,
+Cell(94,26): magenta,nobaggle,notopwall,noleftwall,
+Cell(94,28): orange,nobaggle,notopwall,noleftwall,
+Cell(94,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(94,30): gray,nobaggle,notopwall,noleftwall,
+Cell(94,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(94,32): black,nobaggle,notopwall,noleftwall,
+Cell(94,33): blue,nobaggle,notopwall,noleftwall,
+Cell(94,35): pink,nobaggle,notopwall,noleftwall,
+Cell(94,36): red,nobaggle,notopwall,noleftwall,
+Cell(94,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(94,39): gray,nobaggle,notopwall,noleftwall,
+Cell(94,41): lightGray,nobaggle,notopwall,noleftwall,
+Cell(94,43): lightGray,nobaggle,notopwall,noleftwall,
+Cell(94,44): magenta,nobaggle,notopwall,noleftwall,
+Cell(94,45): red,nobaggle,notopwall,noleftwall,
+Cell(94,47): darkGray,nobaggle,notopwall,noleftwall,
+Cell(94,48): pink,nobaggle,notopwall,noleftwall,
+Cell(94,49): orange,nobaggle,notopwall,noleftwall,
+Cell(94,50): magenta,nobaggle,notopwall,noleftwall,
+Cell(94,51): green,nobaggle,notopwall,noleftwall,
+Cell(94,52): black,nobaggle,notopwall,noleftwall,
+Cell(95,11): black,nobaggle,notopwall,noleftwall,
+Cell(95,12): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,13): magenta,nobaggle,notopwall,noleftwall,
+Cell(95,14): gray,nobaggle,notopwall,noleftwall,
+Cell(95,15): blue,nobaggle,notopwall,noleftwall,
+Cell(95,16): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,19): magenta,nobaggle,notopwall,noleftwall,
+Cell(95,20): pink,nobaggle,notopwall,noleftwall,
+Cell(95,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,22): gray,nobaggle,notopwall,noleftwall,
+Cell(95,23): gray,nobaggle,notopwall,noleftwall,
+Cell(95,24): pink,nobaggle,notopwall,noleftwall,
+Cell(95,25): red,nobaggle,notopwall,noleftwall,
+Cell(95,26): darkGray,nobaggle,notopwall,noleftwall,
+Cell(95,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,31): pink,nobaggle,notopwall,noleftwall,
+Cell(95,32): black,nobaggle,notopwall,noleftwall,
+Cell(95,33): blue,nobaggle,notopwall,noleftwall,
+Cell(95,34): green,nobaggle,notopwall,noleftwall,
+Cell(95,35): pink,nobaggle,notopwall,noleftwall,
+Cell(95,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(95,37): pink,nobaggle,notopwall,noleftwall,
+Cell(95,38): gray,nobaggle,notopwall,noleftwall,
+Cell(95,39): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,40): red,nobaggle,notopwall,noleftwall,
+Cell(95,41): gray,nobaggle,notopwall,noleftwall,
+Cell(95,42): lightGray,nobaggle,notopwall,noleftwall,
+Cell(95,43): blue,nobaggle,notopwall,noleftwall,
+Cell(95,44): cyan,nobaggle,notopwall,noleftwall,
+Cell(95,45): red,nobaggle,notopwall,noleftwall,
+Cell(95,46): black,nobaggle,notopwall,noleftwall,
+Cell(95,47): red,nobaggle,notopwall,noleftwall,
+Cell(95,48): red,nobaggle,notopwall,noleftwall,
+Cell(95,49): blue,nobaggle,notopwall,noleftwall,
+Cell(95,50): darkGray,nobaggle,notopwall,noleftwall,
+Cell(95,51): blue,nobaggle,notopwall,noleftwall,
+Cell(95,52): black,nobaggle,notopwall,noleftwall,
+Cell(96,11): black,nobaggle,notopwall,noleftwall,
+Cell(96,12): cyan,nobaggle,notopwall,noleftwall,
+Cell(96,13): gray,nobaggle,notopwall,noleftwall,
+Cell(96,14): lightGray,nobaggle,notopwall,noleftwall,
+Cell(96,15): darkGray,nobaggle,notopwall,noleftwall,
+Cell(96,16): darkGray,nobaggle,notopwall,noleftwall,
+Cell(96,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(96,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(96,19): blue,nobaggle,notopwall,noleftwall,
+Cell(96,20): pink,nobaggle,notopwall,noleftwall,
+Cell(96,21): darkGray,nobaggle,notopwall,noleftwall,
+Cell(96,22): black,nobaggle,notopwall,noleftwall,
+Cell(96,23): blue,nobaggle,notopwall,noleftwall,
+Cell(96,24): orange,nobaggle,notopwall,noleftwall,
+Cell(96,25): pink,nobaggle,notopwall,noleftwall,
+Cell(96,26): magenta,nobaggle,notopwall,noleftwall,
+Cell(96,27): lightGray,nobaggle,notopwall,noleftwall,
+Cell(96,28): orange,nobaggle,notopwall,noleftwall,
+Cell(96,29): pink,nobaggle,notopwall,noleftwall,
+Cell(96,30): gray,nobaggle,notopwall,noleftwall,
+Cell(96,31): red,nobaggle,notopwall,noleftwall,
+Cell(96,32): black,nobaggle,notopwall,noleftwall,
+Cell(96,33): black,nobaggle,notopwall,noleftwall,
+Cell(96,34): red,nobaggle,notopwall,noleftwall,
+Cell(96,35): black,nobaggle,notopwall,noleftwall,
+Cell(96,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(96,38): darkGray,nobaggle,notopwall,noleftwall,
+Cell(96,39): gray,nobaggle,notopwall,noleftwall,
+Cell(96,41): orange,nobaggle,notopwall,noleftwall,
+Cell(96,42): pink,nobaggle,notopwall,noleftwall,
+Cell(96,44): lightGray,nobaggle,notopwall,noleftwall,
+Cell(96,45): orange,nobaggle,notopwall,noleftwall,
+Cell(96,46): darkGray,nobaggle,notopwall,noleftwall,
+Cell(96,47): blue,nobaggle,notopwall,noleftwall,
+Cell(96,48): green,nobaggle,notopwall,noleftwall,
+Cell(96,49): lightGray,nobaggle,notopwall,noleftwall,
+Cell(96,50): darkGray,nobaggle,notopwall,noleftwall,
+Cell(96,51): green,nobaggle,notopwall,noleftwall,
+Cell(96,52): black,nobaggle,notopwall,noleftwall,
+Cell(97,10): black,nobaggle,notopwall,noleftwall,
+Cell(97,11): orange,nobaggle,notopwall,noleftwall,
+Cell(97,12): magenta,nobaggle,notopwall,noleftwall,
+Cell(97,13): black,nobaggle,notopwall,noleftwall,
+Cell(97,14): darkGray,nobaggle,notopwall,noleftwall,
+Cell(97,15): cyan,nobaggle,notopwall,noleftwall,
+Cell(97,16): orange,nobaggle,notopwall,noleftwall,
+Cell(97,17): blue,nobaggle,notopwall,noleftwall,
+Cell(97,18): green,nobaggle,notopwall,noleftwall,
+Cell(97,19): darkGray,nobaggle,notopwall,noleftwall,
+Cell(97,20): blue,nobaggle,notopwall,noleftwall,
+Cell(97,21): pink,nobaggle,notopwall,noleftwall,
+Cell(97,22): black,nobaggle,notopwall,noleftwall,
+Cell(97,23): cyan,nobaggle,notopwall,noleftwall,
+Cell(97,24): black,nobaggle,notopwall,noleftwall,
+Cell(97,25): darkGray,nobaggle,notopwall,noleftwall,
+Cell(97,26): blue,nobaggle,notopwall,noleftwall,
+Cell(97,27): green,nobaggle,notopwall,noleftwall,
+Cell(97,28): gray,nobaggle,notopwall,noleftwall,
+Cell(97,29): orange,nobaggle,notopwall,noleftwall,
+Cell(97,30): magenta,nobaggle,notopwall,noleftwall,
+Cell(97,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(97,32): blue,nobaggle,notopwall,noleftwall,
+Cell(97,33): lightGray,nobaggle,notopwall,noleftwall,
+Cell(97,34): blue,nobaggle,notopwall,noleftwall,
+Cell(97,35): green,nobaggle,notopwall,noleftwall,
+Cell(97,37): cyan,nobaggle,notopwall,noleftwall,
+Cell(97,38): green,nobaggle,notopwall,noleftwall,
+Cell(97,39): red,nobaggle,notopwall,noleftwall,
+Cell(97,40): lightGray,nobaggle,notopwall,noleftwall,
+Cell(97,41): green,nobaggle,notopwall,noleftwall,
+Cell(97,42): black,nobaggle,notopwall,noleftwall,
+Cell(97,43): magenta,nobaggle,notopwall,noleftwall,
+Cell(97,44): darkGray,nobaggle,notopwall,noleftwall,
+Cell(97,45): lightGray,nobaggle,notopwall,noleftwall,
+Cell(97,46): darkGray,nobaggle,notopwall,noleftwall,
+Cell(97,47): orange,nobaggle,notopwall,noleftwall,
+Cell(97,48): cyan,nobaggle,notopwall,noleftwall,
+Cell(97,49): darkGray,nobaggle,notopwall,noleftwall,
+Cell(97,50): darkGray,nobaggle,notopwall,noleftwall,
+Cell(97,51): magenta,nobaggle,notopwall,noleftwall,
+Cell(97,52): black,nobaggle,notopwall,noleftwall,
+Cell(98,9): black,nobaggle,notopwall,noleftwall,
+Cell(98,10): blue,nobaggle,notopwall,noleftwall,
+Cell(98,11): darkGray,nobaggle,notopwall,noleftwall,
+Cell(98,12): blue,nobaggle,notopwall,noleftwall,
+Cell(98,13): black,nobaggle,notopwall,noleftwall,
+Cell(98,14): lightGray,nobaggle,notopwall,noleftwall,
+Cell(98,15): lightGray,nobaggle,notopwall,noleftwall,
+Cell(98,16): blue,nobaggle,notopwall,noleftwall,
+Cell(98,17): orange,nobaggle,notopwall,noleftwall,
+Cell(98,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(98,20): green,nobaggle,notopwall,noleftwall,
+Cell(98,21): darkGray,nobaggle,notopwall,noleftwall,
+Cell(98,23): red,nobaggle,notopwall,noleftwall,
+Cell(98,24): cyan,nobaggle,notopwall,noleftwall,
+Cell(98,25): gray,nobaggle,notopwall,noleftwall,
+Cell(98,26): red,nobaggle,notopwall,noleftwall,
+Cell(98,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(98,28): red,nobaggle,notopwall,noleftwall,
+Cell(98,29): gray,nobaggle,notopwall,noleftwall,
+Cell(98,30): gray,nobaggle,notopwall,noleftwall,
+Cell(98,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(98,32): green,nobaggle,notopwall,noleftwall,
+Cell(98,33): pink,nobaggle,notopwall,noleftwall,
+Cell(98,34): black,nobaggle,notopwall,noleftwall,
+Cell(98,35): green,nobaggle,notopwall,noleftwall,
+Cell(98,36): blue,nobaggle,notopwall,noleftwall,
+Cell(98,37): pink,nobaggle,notopwall,noleftwall,
+Cell(98,38): red,nobaggle,notopwall,noleftwall,
+Cell(98,39): gray,nobaggle,notopwall,noleftwall,
+Cell(98,41): lightGray,nobaggle,notopwall,noleftwall,
+Cell(98,42): red,nobaggle,notopwall,noleftwall,
+Cell(98,43): orange,nobaggle,notopwall,noleftwall,
+Cell(98,44): magenta,nobaggle,notopwall,noleftwall,
+Cell(98,45): blue,nobaggle,notopwall,noleftwall,
+Cell(98,46): blue,nobaggle,notopwall,noleftwall,
+Cell(98,48): blue,nobaggle,notopwall,noleftwall,
+Cell(98,51): pink,nobaggle,notopwall,noleftwall,
+Cell(98,52): blue,nobaggle,notopwall,noleftwall,
+Cell(99,9): black,nobaggle,notopwall,noleftwall,
+Cell(99,10): green,nobaggle,notopwall,noleftwall,
+Cell(99,11): magenta,nobaggle,notopwall,noleftwall,
+Cell(99,12): pink,nobaggle,notopwall,noleftwall,
+Cell(99,13): magenta,nobaggle,notopwall,noleftwall,
+Cell(99,14): darkGray,nobaggle,notopwall,noleftwall,
+Cell(99,16): cyan,nobaggle,notopwall,noleftwall,
+Cell(99,17): orange,nobaggle,notopwall,noleftwall,
+Cell(99,18): pink,nobaggle,notopwall,noleftwall,
+Cell(99,19): gray,nobaggle,notopwall,noleftwall,
+Cell(99,20): blue,nobaggle,notopwall,noleftwall,
+Cell(99,21): green,nobaggle,notopwall,noleftwall,
+Cell(99,22): orange,nobaggle,notopwall,noleftwall,
+Cell(99,23): black,nobaggle,notopwall,noleftwall,
+Cell(99,24): magenta,nobaggle,notopwall,noleftwall,
+Cell(99,25): pink,nobaggle,notopwall,noleftwall,
+Cell(99,26): green,nobaggle,notopwall,noleftwall,
+Cell(99,27): red,nobaggle,notopwall,noleftwall,
+Cell(99,28): orange,nobaggle,notopwall,noleftwall,
+Cell(99,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(99,30): red,nobaggle,notopwall,noleftwall,
+Cell(99,31): darkGray,nobaggle,notopwall,noleftwall,
+Cell(99,33): gray,nobaggle,notopwall,noleftwall,
+Cell(99,34): red,nobaggle,notopwall,noleftwall,
+Cell(99,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(99,36): pink,nobaggle,notopwall,noleftwall,
+Cell(99,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(99,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(99,39): cyan,nobaggle,notopwall,noleftwall,
+Cell(99,40): darkGray,nobaggle,notopwall,noleftwall,
+Cell(99,41): blue,nobaggle,notopwall,noleftwall,
+Cell(99,42): green,nobaggle,notopwall,noleftwall,
+Cell(99,43): black,nobaggle,notopwall,noleftwall,
+Cell(99,44): pink,nobaggle,notopwall,noleftwall,
+Cell(99,45): red,nobaggle,notopwall,noleftwall,
+Cell(99,46): orange,nobaggle,notopwall,noleftwall,
+Cell(99,47): cyan,nobaggle,notopwall,noleftwall,
+Cell(99,48): cyan,nobaggle,notopwall,noleftwall,
+Cell(99,49): blue,nobaggle,notopwall,noleftwall,
+Cell(99,50): black,nobaggle,notopwall,noleftwall,
+Cell(99,51): darkGray,nobaggle,notopwall,noleftwall,
+Cell(99,52): blue,nobaggle,notopwall,noleftwall,
+Cell(100,9): blue,nobaggle,notopwall,noleftwall,
+Cell(100,10): red,nobaggle,notopwall,noleftwall,
+Cell(100,11): red,nobaggle,notopwall,noleftwall,
+Cell(100,12): cyan,nobaggle,notopwall,noleftwall,
+Cell(100,13): green,nobaggle,notopwall,noleftwall,
+Cell(100,14): magenta,nobaggle,notopwall,noleftwall,
+Cell(100,15): orange,nobaggle,notopwall,noleftwall,
+Cell(100,16): blue,nobaggle,notopwall,noleftwall,
+Cell(100,17): black,nobaggle,notopwall,noleftwall,
+Cell(100,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(100,20): gray,nobaggle,notopwall,noleftwall,
+Cell(100,21): magenta,nobaggle,notopwall,noleftwall,
+Cell(100,22): orange,nobaggle,notopwall,noleftwall,
+Cell(100,24): black,nobaggle,notopwall,noleftwall,
+Cell(100,25): pink,nobaggle,notopwall,noleftwall,
+Cell(100,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(100,27): green,nobaggle,notopwall,noleftwall,
+Cell(100,28): red,nobaggle,notopwall,noleftwall,
+Cell(100,29): pink,nobaggle,notopwall,noleftwall,
+Cell(100,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(100,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(100,32): orange,nobaggle,notopwall,noleftwall,
+Cell(100,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(100,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(100,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(100,36): red,nobaggle,notopwall,noleftwall,
+Cell(100,37): pink,nobaggle,notopwall,noleftwall,
+Cell(100,38): black,nobaggle,notopwall,noleftwall,
+Cell(100,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(100,40): darkGray,nobaggle,notopwall,noleftwall,
+Cell(100,41): blue,nobaggle,notopwall,noleftwall,
+Cell(100,42): blue,nobaggle,notopwall,noleftwall,
+Cell(100,43): gray,nobaggle,notopwall,noleftwall,
+Cell(100,44): pink,nobaggle,notopwall,noleftwall,
+Cell(100,45): red,nobaggle,notopwall,noleftwall,
+Cell(100,46): green,nobaggle,notopwall,noleftwall,
+Cell(100,47): gray,nobaggle,notopwall,noleftwall,
+Cell(100,48): red,nobaggle,notopwall,noleftwall,
+Cell(100,49): black,nobaggle,notopwall,noleftwall,
+Cell(100,50): lightGray,nobaggle,notopwall,noleftwall,
+Cell(100,51): magenta,nobaggle,notopwall,noleftwall,
+Cell(100,52): blue,nobaggle,notopwall,noleftwall,
+Cell(101,9): blue,nobaggle,notopwall,noleftwall,
+Cell(101,10): cyan,nobaggle,notopwall,noleftwall,
+Cell(101,11): cyan,nobaggle,notopwall,noleftwall,
+Cell(101,12): cyan,nobaggle,notopwall,noleftwall,
+Cell(101,13): orange,nobaggle,notopwall,noleftwall,
+Cell(101,14): pink,nobaggle,notopwall,noleftwall,
+Cell(101,15): gray,nobaggle,notopwall,noleftwall,
+Cell(101,16): pink,nobaggle,notopwall,noleftwall,
+Cell(101,17): orange,nobaggle,notopwall,noleftwall,
+Cell(101,18): orange,nobaggle,notopwall,noleftwall,
+Cell(101,19): magenta,nobaggle,notopwall,noleftwall,
+Cell(101,20): pink,nobaggle,notopwall,noleftwall,
+Cell(101,21): orange,nobaggle,notopwall,noleftwall,
+Cell(101,22): blue,nobaggle,notopwall,noleftwall,
+Cell(101,23): magenta,nobaggle,notopwall,noleftwall,
+Cell(101,25): orange,nobaggle,notopwall,noleftwall,
+Cell(101,26): red,nobaggle,notopwall,noleftwall,
+Cell(101,27): red,nobaggle,notopwall,noleftwall,
+Cell(101,28): black,nobaggle,notopwall,noleftwall,
+Cell(101,29): pink,nobaggle,notopwall,noleftwall,
+Cell(101,30): red,nobaggle,notopwall,noleftwall,
+Cell(101,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(101,32): magenta,nobaggle,notopwall,noleftwall,
+Cell(101,33): blue,nobaggle,notopwall,noleftwall,
+Cell(101,35): green,nobaggle,notopwall,noleftwall,
+Cell(101,36): green,nobaggle,notopwall,noleftwall,
+Cell(101,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(101,39): black,nobaggle,notopwall,noleftwall,
+Cell(101,40): cyan,nobaggle,notopwall,noleftwall,
+Cell(101,41): magenta,nobaggle,notopwall,noleftwall,
+Cell(101,42): blue,nobaggle,notopwall,noleftwall,
+Cell(101,43): pink,nobaggle,notopwall,noleftwall,
+Cell(101,44): green,nobaggle,notopwall,noleftwall,
+Cell(101,45): magenta,nobaggle,notopwall,noleftwall,
+Cell(101,46): red,nobaggle,notopwall,noleftwall,
+Cell(101,47): darkGray,nobaggle,notopwall,noleftwall,
+Cell(101,48): green,nobaggle,notopwall,noleftwall,
+Cell(101,49): cyan,nobaggle,notopwall,noleftwall,
+Cell(101,51): darkGray,nobaggle,notopwall,noleftwall,
+Cell(101,52): cyan,nobaggle,notopwall,noleftwall,
+Cell(102,12): blue,nobaggle,notopwall,noleftwall,
+Cell(102,13): gray,nobaggle,notopwall,noleftwall,
+Cell(102,14): lightGray,nobaggle,notopwall,noleftwall,
+Cell(102,15): blue,nobaggle,notopwall,noleftwall,
+Cell(102,16): green,nobaggle,notopwall,noleftwall,
+Cell(102,17): blue,nobaggle,notopwall,noleftwall,
+Cell(102,18): blue,nobaggle,notopwall,noleftwall,
+Cell(102,19): darkGray,nobaggle,notopwall,noleftwall,
+Cell(102,20): black,nobaggle,notopwall,noleftwall,
+Cell(102,21): blue,nobaggle,notopwall,noleftwall,
+Cell(102,22): lightGray,nobaggle,notopwall,noleftwall,
+Cell(102,23): cyan,nobaggle,notopwall,noleftwall,
+Cell(102,24): orange,nobaggle,notopwall,noleftwall,
+Cell(102,25): blue,nobaggle,notopwall,noleftwall,
+Cell(102,26): pink,nobaggle,notopwall,noleftwall,
+Cell(102,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(102,28): blue,nobaggle,notopwall,noleftwall,
+Cell(102,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(102,30): orange,nobaggle,notopwall,noleftwall,
+Cell(102,31): orange,nobaggle,notopwall,noleftwall,
+Cell(102,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(102,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(102,34): blue,nobaggle,notopwall,noleftwall,
+Cell(102,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(102,37): green,nobaggle,notopwall,noleftwall,
+Cell(102,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(102,39): green,nobaggle,notopwall,noleftwall,
+Cell(102,40): pink,nobaggle,notopwall,noleftwall,
+Cell(102,41): magenta,nobaggle,notopwall,noleftwall,
+Cell(102,42): blue,nobaggle,notopwall,noleftwall,
+Cell(102,43): red,nobaggle,notopwall,noleftwall,
+Cell(102,44): lightGray,nobaggle,notopwall,noleftwall,
+Cell(102,45): red,nobaggle,notopwall,noleftwall,
+Cell(102,46): magenta,nobaggle,notopwall,noleftwall,
+Cell(102,47): blue,nobaggle,notopwall,noleftwall,
+Cell(102,48): orange,nobaggle,notopwall,noleftwall,
+Cell(102,49): blue,nobaggle,notopwall,noleftwall,
+Cell(102,51): darkGray,nobaggle,notopwall,noleftwall,
+Cell(102,52): cyan,nobaggle,notopwall,noleftwall,
+Cell(103,12): black,nobaggle,notopwall,noleftwall,
+Cell(103,13): green,nobaggle,notopwall,noleftwall,
+Cell(103,14): orange,nobaggle,notopwall,noleftwall,
+Cell(103,15): cyan,nobaggle,notopwall,noleftwall,
+Cell(103,16): orange,nobaggle,notopwall,noleftwall,
+Cell(103,17): darkGray,nobaggle,notopwall,noleftwall,
+Cell(103,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(103,19): lightGray,nobaggle,notopwall,noleftwall,
+Cell(103,20): black,nobaggle,notopwall,noleftwall,
+Cell(103,21): lightGray,nobaggle,notopwall,noleftwall,
+Cell(103,22): magenta,nobaggle,notopwall,noleftwall,
+Cell(103,24): green,nobaggle,notopwall,noleftwall,
+Cell(103,25): darkGray,nobaggle,notopwall,noleftwall,
+Cell(103,26): black,nobaggle,notopwall,noleftwall,
+Cell(103,27): orange,nobaggle,notopwall,noleftwall,
+Cell(103,29): orange,nobaggle,notopwall,noleftwall,
+Cell(103,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(103,31): darkGray,nobaggle,notopwall,noleftwall,
+Cell(103,32): cyan,nobaggle,notopwall,noleftwall,
+Cell(103,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(103,35): green,nobaggle,notopwall,noleftwall,
+Cell(103,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(103,38): magenta,nobaggle,notopwall,noleftwall,
+Cell(103,40): pink,nobaggle,notopwall,noleftwall,
+Cell(103,41): orange,nobaggle,notopwall,noleftwall,
+Cell(103,42): pink,nobaggle,notopwall,noleftwall,
+Cell(103,43): blue,nobaggle,notopwall,noleftwall,
+Cell(103,44): blue,nobaggle,notopwall,noleftwall,
+Cell(103,45): black,nobaggle,notopwall,noleftwall,
+Cell(103,46): darkGray,nobaggle,notopwall,noleftwall,
+Cell(103,47): blue,nobaggle,notopwall,noleftwall,
+Cell(103,48): orange,nobaggle,notopwall,noleftwall,
+Cell(103,51): magenta,nobaggle,notopwall,noleftwall,
+Cell(103,52): blue,nobaggle,notopwall,noleftwall,
+Cell(104,12): black,nobaggle,notopwall,noleftwall,
+Cell(104,13): black,nobaggle,notopwall,noleftwall,
+Cell(104,14): black,nobaggle,notopwall,noleftwall,
+Cell(104,15): black,nobaggle,notopwall,noleftwall,
+Cell(104,16): black,nobaggle,notopwall,noleftwall,
+Cell(104,17): green,nobaggle,notopwall,noleftwall,
+Cell(104,18): magenta,nobaggle,notopwall,noleftwall,
+Cell(104,19): magenta,nobaggle,notopwall,noleftwall,
+Cell(104,20): gray,nobaggle,notopwall,noleftwall,
+Cell(104,21): lightGray,nobaggle,notopwall,noleftwall,
+Cell(104,23): green,nobaggle,notopwall,noleftwall,
+Cell(104,25): lightGray,nobaggle,notopwall,noleftwall,
+Cell(104,26): black,nobaggle,notopwall,noleftwall,
+Cell(104,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(104,28): green,nobaggle,notopwall,noleftwall,
+Cell(104,29): darkGray,nobaggle,notopwall,noleftwall,
+Cell(104,30): orange,nobaggle,notopwall,noleftwall,
+Cell(104,31): darkGray,nobaggle,notopwall,noleftwall,
+Cell(104,32): cyan,nobaggle,notopwall,noleftwall,
+Cell(104,33): blue,nobaggle,notopwall,noleftwall,
+Cell(104,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(104,35): blue,nobaggle,notopwall,noleftwall,
+Cell(104,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(104,37): cyan,nobaggle,notopwall,noleftwall,
+Cell(104,38): cyan,nobaggle,notopwall,noleftwall,
+Cell(104,39): red,nobaggle,notopwall,noleftwall,
+Cell(104,40): orange,nobaggle,notopwall,noleftwall,
+Cell(104,41): orange,nobaggle,notopwall,noleftwall,
+Cell(104,42): pink,nobaggle,notopwall,noleftwall,
+Cell(104,43): blue,nobaggle,notopwall,noleftwall,
+Cell(104,44): green,nobaggle,notopwall,noleftwall,
+Cell(104,45): magenta,nobaggle,notopwall,noleftwall,
+Cell(104,46): gray,nobaggle,notopwall,noleftwall,
+Cell(104,47): orange,nobaggle,notopwall,noleftwall,
+Cell(104,48): orange,nobaggle,notopwall,noleftwall,
+Cell(104,49): blue,nobaggle,notopwall,noleftwall,
+Cell(104,51): magenta,nobaggle,notopwall,noleftwall,
+Cell(104,52): blue,nobaggle,notopwall,noleftwall,
+Cell(105,17): black,nobaggle,notopwall,noleftwall,
+Cell(105,18): blue,nobaggle,notopwall,noleftwall,
+Cell(105,19): lightGray,nobaggle,notopwall,noleftwall,
+Cell(105,20): pink,nobaggle,notopwall,noleftwall,
+Cell(105,21): blue,nobaggle,notopwall,noleftwall,
+Cell(105,22): red,nobaggle,notopwall,noleftwall,
+Cell(105,23): gray,nobaggle,notopwall,noleftwall,
+Cell(105,24): magenta,nobaggle,notopwall,noleftwall,
+Cell(105,25): lightGray,nobaggle,notopwall,noleftwall,
+Cell(105,26): gray,nobaggle,notopwall,noleftwall,
+Cell(105,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(105,28): black,nobaggle,notopwall,noleftwall,
+Cell(105,29): pink,nobaggle,notopwall,noleftwall,
+Cell(105,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(105,31): darkGray,nobaggle,notopwall,noleftwall,
+Cell(105,32): lightGray,nobaggle,notopwall,noleftwall,
+Cell(105,34): darkGray,nobaggle,notopwall,noleftwall,
+Cell(105,36): green,nobaggle,notopwall,noleftwall,
+Cell(105,37): blue,nobaggle,notopwall,noleftwall,
+Cell(105,38): black,nobaggle,notopwall,noleftwall,
+Cell(105,40): black,nobaggle,notopwall,noleftwall,
+Cell(105,41): red,nobaggle,notopwall,noleftwall,
+Cell(105,42): pink,nobaggle,notopwall,noleftwall,
+Cell(105,43): green,nobaggle,notopwall,noleftwall,
+Cell(105,44): green,nobaggle,notopwall,noleftwall,
+Cell(105,45): blue,nobaggle,notopwall,noleftwall,
+Cell(105,46): black,nobaggle,notopwall,noleftwall,
+Cell(105,47): lightGray,nobaggle,notopwall,noleftwall,
+Cell(105,48): orange,nobaggle,notopwall,noleftwall,
+Cell(105,49): cyan,nobaggle,notopwall,noleftwall,
+Cell(105,50): pink,nobaggle,notopwall,noleftwall,
+Cell(105,51): gray,nobaggle,notopwall,noleftwall,
+Cell(105,52): blue,nobaggle,notopwall,noleftwall,
+Cell(106,18): black,nobaggle,notopwall,noleftwall,
+Cell(106,19): red,nobaggle,notopwall,noleftwall,
+Cell(106,20): lightGray,nobaggle,notopwall,noleftwall,
+Cell(106,21): blue,nobaggle,notopwall,noleftwall,
+Cell(106,22): black,nobaggle,notopwall,noleftwall,
+Cell(106,23): pink,nobaggle,notopwall,noleftwall,
+Cell(106,24): cyan,nobaggle,notopwall,noleftwall,
+Cell(106,25): blue,nobaggle,notopwall,noleftwall,
+Cell(106,26): black,nobaggle,notopwall,noleftwall,
+Cell(106,27): lightGray,nobaggle,notopwall,noleftwall,
+Cell(106,28): red,nobaggle,notopwall,noleftwall,
+Cell(106,29): black,nobaggle,notopwall,noleftwall,
+Cell(106,30): orange,nobaggle,notopwall,noleftwall,
+Cell(106,31): orange,nobaggle,notopwall,noleftwall,
+Cell(106,32): orange,nobaggle,notopwall,noleftwall,
+Cell(106,33): gray,nobaggle,notopwall,noleftwall,
+Cell(106,34): gray,nobaggle,notopwall,noleftwall,
+Cell(106,35): lightGray,nobaggle,notopwall,noleftwall,
+Cell(106,36): green,nobaggle,notopwall,noleftwall,
+Cell(106,37): black,nobaggle,notopwall,noleftwall,
+Cell(106,40): black,nobaggle,notopwall,noleftwall,
+Cell(106,41): orange,nobaggle,notopwall,noleftwall,
+Cell(106,42): magenta,nobaggle,notopwall,noleftwall,
+Cell(106,43): lightGray,nobaggle,notopwall,noleftwall,
+Cell(106,45): black,nobaggle,notopwall,noleftwall,
+Cell(106,46): cyan,nobaggle,notopwall,noleftwall,
+Cell(106,47): black,nobaggle,notopwall,noleftwall,
+Cell(106,48): black,nobaggle,notopwall,noleftwall,
+Cell(106,49): blue,nobaggle,notopwall,noleftwall,
+Cell(106,50): black,nobaggle,notopwall,noleftwall,
+Cell(106,51): red,nobaggle,notopwall,noleftwall,
+Cell(107,16): black,nobaggle,notopwall,noleftwall,
+Cell(107,17): black,nobaggle,notopwall,noleftwall,
+Cell(107,18): blue,nobaggle,notopwall,noleftwall,
+Cell(107,19): magenta,nobaggle,notopwall,noleftwall,
+Cell(107,20): blue,nobaggle,notopwall,noleftwall,
+Cell(107,21): blue,nobaggle,notopwall,noleftwall,
+Cell(107,24): magenta,nobaggle,notopwall,noleftwall,
+Cell(107,25): lightGray,nobaggle,notopwall,noleftwall,
+Cell(107,26): darkGray,nobaggle,notopwall,noleftwall,
+Cell(107,27): red,nobaggle,notopwall,noleftwall,
+Cell(107,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(107,29): magenta,nobaggle,notopwall,noleftwall,
+Cell(107,30): cyan,nobaggle,notopwall,noleftwall,
+Cell(107,31): darkGray,nobaggle,notopwall,noleftwall,
+Cell(107,32): orange,nobaggle,notopwall,noleftwall,
+Cell(107,33): gray,nobaggle,notopwall,noleftwall,
+Cell(107,34): gray,nobaggle,notopwall,noleftwall,
+Cell(107,36): orange,nobaggle,notopwall,noleftwall,
+Cell(107,37): black,nobaggle,notopwall,noleftwall,
+Cell(107,40): black,nobaggle,notopwall,noleftwall,
+Cell(107,41): green,nobaggle,notopwall,noleftwall,
+Cell(107,42): orange,nobaggle,notopwall,noleftwall,
+Cell(107,43): green,nobaggle,notopwall,noleftwall,
+Cell(107,44): pink,nobaggle,notopwall,noleftwall,
+Cell(107,45): cyan,nobaggle,notopwall,noleftwall,
+Cell(107,46): black,nobaggle,notopwall,noleftwall,
+Cell(107,47): lightGray,nobaggle,notopwall,noleftwall,
+Cell(107,48): pink,nobaggle,notopwall,noleftwall,
+Cell(107,50): black,nobaggle,notopwall,noleftwall,
+Cell(107,51): red,nobaggle,notopwall,noleftwall,
+Cell(108,16): black,nobaggle,notopwall,noleftwall,
+Cell(108,17): green,nobaggle,notopwall,noleftwall,
+Cell(108,18): gray,nobaggle,notopwall,noleftwall,
+Cell(108,20): orange,nobaggle,notopwall,noleftwall,
+Cell(108,21): darkGray,nobaggle,notopwall,noleftwall,
+Cell(108,22): magenta,nobaggle,notopwall,noleftwall,
+Cell(108,23): magenta,nobaggle,notopwall,noleftwall,
+Cell(108,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(108,26): orange,nobaggle,notopwall,noleftwall,
+Cell(108,27): orange,nobaggle,notopwall,noleftwall,
+Cell(108,28): black,nobaggle,notopwall,noleftwall,
+Cell(108,29): orange,nobaggle,notopwall,noleftwall,
+Cell(108,30): orange,nobaggle,notopwall,noleftwall,
+Cell(108,31): red,nobaggle,notopwall,noleftwall,
+Cell(108,32): red,nobaggle,notopwall,noleftwall,
+Cell(108,33): green,nobaggle,notopwall,noleftwall,
+Cell(108,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(108,35): darkGray,nobaggle,notopwall,noleftwall,
+Cell(108,36): orange,nobaggle,notopwall,noleftwall,
+Cell(108,37): black,nobaggle,notopwall,noleftwall,
+Cell(108,40): black,nobaggle,notopwall,noleftwall,
+Cell(108,41): black,nobaggle,notopwall,noleftwall,
+Cell(108,42): black,nobaggle,notopwall,noleftwall,
+Cell(108,43): cyan,nobaggle,notopwall,noleftwall,
+Cell(108,44): red,nobaggle,notopwall,noleftwall,
+Cell(108,45): pink,nobaggle,notopwall,noleftwall,
+Cell(108,46): darkGray,nobaggle,notopwall,noleftwall,
+Cell(108,47): gray,nobaggle,notopwall,noleftwall,
+Cell(108,48): darkGray,nobaggle,notopwall,noleftwall,
+Cell(108,49): gray,nobaggle,notopwall,noleftwall,
+Cell(108,50): orange,nobaggle,notopwall,noleftwall,
+Cell(108,51): green,nobaggle,notopwall,noleftwall,
+Cell(108,52): black,nobaggle,notopwall,noleftwall,
+Cell(109,16): black,nobaggle,notopwall,noleftwall,
+Cell(109,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(109,18): pink,nobaggle,notopwall,noleftwall,
+Cell(109,19): lightGray,nobaggle,notopwall,noleftwall,
+Cell(109,20): blue,nobaggle,notopwall,noleftwall,
+Cell(109,21): green,nobaggle,notopwall,noleftwall,
+Cell(109,22): red,nobaggle,notopwall,noleftwall,
+Cell(109,23): pink,nobaggle,notopwall,noleftwall,
+Cell(109,24): darkGray,nobaggle,notopwall,noleftwall,
+Cell(109,25): lightGray,nobaggle,notopwall,noleftwall,
+Cell(109,26): lightGray,nobaggle,notopwall,noleftwall,
+Cell(109,27): blue,nobaggle,notopwall,noleftwall,
+Cell(109,28): red,nobaggle,notopwall,noleftwall,
+Cell(109,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(109,30): red,nobaggle,notopwall,noleftwall,
+Cell(109,31): green,nobaggle,notopwall,noleftwall,
+Cell(109,32): green,nobaggle,notopwall,noleftwall,
+Cell(109,33): pink,nobaggle,notopwall,noleftwall,
+Cell(109,34): green,nobaggle,notopwall,noleftwall,
+Cell(109,35): green,nobaggle,notopwall,noleftwall,
+Cell(109,36): green,nobaggle,notopwall,noleftwall,
+Cell(109,37): black,nobaggle,notopwall,noleftwall,
+Cell(109,43): black,nobaggle,notopwall,noleftwall,
+Cell(109,44): blue,nobaggle,notopwall,noleftwall,
+Cell(109,45): cyan,nobaggle,notopwall,noleftwall,
+Cell(109,46): red,nobaggle,notopwall,noleftwall,
+Cell(109,47): darkGray,nobaggle,notopwall,noleftwall,
+Cell(109,48): gray,nobaggle,notopwall,noleftwall,
+Cell(109,49): cyan,nobaggle,notopwall,noleftwall,
+Cell(109,50): black,nobaggle,notopwall,noleftwall,
+Cell(109,51): black,nobaggle,notopwall,noleftwall,
+Cell(109,52): black,nobaggle,notopwall,noleftwall,
+Cell(110,15): black,nobaggle,notopwall,noleftwall,
+Cell(110,16): blue,nobaggle,notopwall,noleftwall,
+Cell(110,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(110,18): gray,nobaggle,notopwall,noleftwall,
+Cell(110,19): green,nobaggle,notopwall,noleftwall,
+Cell(110,20): lightGray,nobaggle,notopwall,noleftwall,
+Cell(110,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(110,22): black,nobaggle,notopwall,noleftwall,
+Cell(110,23): gray,nobaggle,notopwall,noleftwall,
+Cell(110,24): green,nobaggle,notopwall,noleftwall,
+Cell(110,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(110,27): green,nobaggle,notopwall,noleftwall,
+Cell(110,28): red,nobaggle,notopwall,noleftwall,
+Cell(110,29): red,nobaggle,notopwall,noleftwall,
+Cell(110,30): green,nobaggle,notopwall,noleftwall,
+Cell(110,31): orange,nobaggle,notopwall,noleftwall,
+Cell(110,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(110,33): blue,nobaggle,notopwall,noleftwall,
+Cell(110,34): black,nobaggle,notopwall,noleftwall,
+Cell(110,35): black,nobaggle,notopwall,noleftwall,
+Cell(110,36): black,nobaggle,notopwall,noleftwall,
+Cell(110,37): black,nobaggle,notopwall,noleftwall,
+Cell(110,44): black,nobaggle,notopwall,noleftwall,
+Cell(110,45): cyan,nobaggle,notopwall,noleftwall,
+Cell(110,46): red,nobaggle,notopwall,noleftwall,
+Cell(110,47): red,nobaggle,notopwall,noleftwall,
+Cell(110,48): cyan,nobaggle,notopwall,noleftwall,
+Cell(110,49): black,nobaggle,notopwall,noleftwall,
+Cell(111,15): black,nobaggle,notopwall,noleftwall,
+Cell(111,16): green,nobaggle,notopwall,noleftwall,
+Cell(111,17): magenta,nobaggle,notopwall,noleftwall,
+Cell(111,18): lightGray,nobaggle,notopwall,noleftwall,
+Cell(111,19): pink,nobaggle,notopwall,noleftwall,
+Cell(111,20): magenta,nobaggle,notopwall,noleftwall,
+Cell(111,21): green,nobaggle,notopwall,noleftwall,
+Cell(111,22): darkGray,nobaggle,notopwall,noleftwall,
+Cell(111,23): orange,nobaggle,notopwall,noleftwall,
+Cell(111,24): pink,nobaggle,notopwall,noleftwall,
+Cell(111,25): red,nobaggle,notopwall,noleftwall,
+Cell(111,26): gray,nobaggle,notopwall,noleftwall,
+Cell(111,27): gray,nobaggle,notopwall,noleftwall,
+Cell(111,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(111,29): blue,nobaggle,notopwall,noleftwall,
+Cell(111,30): cyan,nobaggle,notopwall,noleftwall,
+Cell(111,32): green,nobaggle,notopwall,noleftwall,
+Cell(111,44): black,nobaggle,notopwall,noleftwall,
+Cell(111,45): green,nobaggle,notopwall,noleftwall,
+Cell(111,46): green,nobaggle,notopwall,noleftwall,
+Cell(111,47): blue,nobaggle,notopwall,noleftwall,
+Cell(111,48): black,nobaggle,notopwall,noleftwall,
+Cell(112,15): black,nobaggle,notopwall,noleftwall,
+Cell(112,16): cyan,nobaggle,notopwall,noleftwall,
+Cell(112,17): darkGray,nobaggle,notopwall,noleftwall,
+Cell(112,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(112,19): red,nobaggle,notopwall,noleftwall,
+Cell(112,21): blue,nobaggle,notopwall,noleftwall,
+Cell(112,22): magenta,nobaggle,notopwall,noleftwall,
+Cell(112,23): black,nobaggle,notopwall,noleftwall,
+Cell(112,24): magenta,nobaggle,notopwall,noleftwall,
+Cell(112,25): green,nobaggle,notopwall,noleftwall,
+Cell(112,26): blue,nobaggle,notopwall,noleftwall,
+Cell(112,27): green,nobaggle,notopwall,noleftwall,
+Cell(112,28): gray,nobaggle,notopwall,noleftwall,
+Cell(112,29): darkGray,nobaggle,notopwall,noleftwall,
+Cell(112,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(112,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(112,32): green,nobaggle,notopwall,noleftwall,
+Cell(112,44): black,nobaggle,notopwall,noleftwall,
+Cell(112,45): black,nobaggle,notopwall,noleftwall,
+Cell(112,46): black,nobaggle,notopwall,noleftwall,
+Cell(112,47): black,nobaggle,notopwall,noleftwall,
+Cell(113,15): black,nobaggle,notopwall,noleftwall,
+Cell(113,16): cyan,nobaggle,notopwall,noleftwall,
+Cell(113,17): orange,nobaggle,notopwall,noleftwall,
+Cell(113,18): pink,nobaggle,notopwall,noleftwall,
+Cell(113,20): lightGray,nobaggle,notopwall,noleftwall,
+Cell(113,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(113,22): red,nobaggle,notopwall,noleftwall,
+Cell(113,24): green,nobaggle,notopwall,noleftwall,
+Cell(113,25): blue,nobaggle,notopwall,noleftwall,
+Cell(113,26): black,nobaggle,notopwall,noleftwall,
+Cell(113,27): black,nobaggle,notopwall,noleftwall,
+Cell(113,28): black,nobaggle,notopwall,noleftwall,
+Cell(113,29): blue,nobaggle,notopwall,noleftwall,
+Cell(113,30): blue,nobaggle,notopwall,noleftwall,
+Cell(113,31): blue,nobaggle,notopwall,noleftwall,
+Cell(113,32): blue,nobaggle,notopwall,noleftwall,
+Cell(114,15): black,nobaggle,notopwall,noleftwall,
+Cell(114,16): green,nobaggle,notopwall,noleftwall,
+Cell(114,17): green,nobaggle,notopwall,noleftwall,
+Cell(114,18): red,nobaggle,notopwall,noleftwall,
+Cell(114,19): gray,nobaggle,notopwall,noleftwall,
+Cell(114,20): red,nobaggle,notopwall,noleftwall,
+Cell(114,21): red,nobaggle,notopwall,noleftwall,
+Cell(114,22): magenta,nobaggle,notopwall,noleftwall,
+Cell(114,23): darkGray,nobaggle,notopwall,noleftwall,
+Cell(114,24): green,nobaggle,notopwall,noleftwall,
+Cell(114,25): black,nobaggle,notopwall,noleftwall,
+Cell(115,15): black,nobaggle,notopwall,noleftwall,
+Cell(115,16): blue,nobaggle,notopwall,noleftwall,
+Cell(115,17): green,nobaggle,notopwall,noleftwall,
+Cell(115,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(115,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(115,20): green,nobaggle,notopwall,noleftwall,
+Cell(115,21): blue,nobaggle,notopwall,noleftwall,
+Cell(115,22): cyan,nobaggle,notopwall,noleftwall,
+Cell(115,23): orange,nobaggle,notopwall,noleftwall,
+Cell(115,24): green,nobaggle,notopwall,noleftwall,
+Cell(115,25): black,nobaggle,notopwall,noleftwall,
+Cell(116,16): black,nobaggle,notopwall,noleftwall,
+Cell(116,17): black,nobaggle,notopwall,noleftwall,
+Cell(116,18): black,nobaggle,notopwall,noleftwall,
+Cell(116,19): black,nobaggle,notopwall,noleftwall,
+Cell(116,20): black,nobaggle,notopwall,noleftwall,
+Cell(116,21): black,nobaggle,notopwall,noleftwall,
+Cell(116,22): black,nobaggle,notopwall,noleftwall,
+Cell(116,23): black,nobaggle,notopwall,noleftwall,
+Cell(116,24): black,nobaggle,notopwall,noleftwall,
+Cell(116,25): black,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/langtoncolors/LangtonColors-answer4.map b/src/lessons/turmites/langtoncolors/LangtonColors-answer4.map
new file mode 100644
index 0000000..40d43c1
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColors-answer4.map
@@ -0,0 +1,2045 @@
+TurmiteWorld: RRLLLRLLLRRR (30001 steps)
+Size: 80x90
+Buggle(37,88): east,red,cyan,ant
+Cell(3,85): black,nobaggle,notopwall,noleftwall,
+Cell(3,86): black,nobaggle,notopwall,noleftwall,
+Cell(3,87): blue,nobaggle,notopwall,noleftwall,
+Cell(3,88): blue,nobaggle,notopwall,noleftwall,
+Cell(4,84): black,nobaggle,notopwall,noleftwall,
+Cell(4,85): blue,nobaggle,notopwall,noleftwall,
+Cell(4,86): green,nobaggle,notopwall,noleftwall,
+Cell(4,87): red,nobaggle,notopwall,noleftwall,
+Cell(4,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,83): black,nobaggle,notopwall,noleftwall,
+Cell(5,84): green,nobaggle,notopwall,noleftwall,
+Cell(5,85): gray,nobaggle,notopwall,noleftwall,
+Cell(5,86): gray,nobaggle,notopwall,noleftwall,
+Cell(5,87): red,nobaggle,notopwall,noleftwall,
+Cell(5,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,82): black,nobaggle,notopwall,noleftwall,
+Cell(6,83): green,nobaggle,notopwall,noleftwall,
+Cell(6,84): pink,nobaggle,notopwall,noleftwall,
+Cell(6,85): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,86): gray,nobaggle,notopwall,noleftwall,
+Cell(6,87): red,nobaggle,notopwall,noleftwall,
+Cell(6,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(7,81): black,nobaggle,notopwall,noleftwall,
+Cell(7,82): green,nobaggle,notopwall,noleftwall,
+Cell(7,83): pink,nobaggle,notopwall,noleftwall,
+Cell(7,85): darkGray,nobaggle,notopwall,noleftwall,
+Cell(7,86): gray,nobaggle,notopwall,noleftwall,
+Cell(7,87): red,nobaggle,notopwall,noleftwall,
+Cell(7,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(8,80): black,nobaggle,notopwall,noleftwall,
+Cell(8,81): green,nobaggle,notopwall,noleftwall,
+Cell(8,82): pink,nobaggle,notopwall,noleftwall,
+Cell(8,84): pink,nobaggle,notopwall,noleftwall,
+Cell(8,85): magenta,nobaggle,notopwall,noleftwall,
+Cell(8,86): red,nobaggle,notopwall,noleftwall,
+Cell(8,87): red,nobaggle,notopwall,noleftwall,
+Cell(8,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(9,79): black,nobaggle,notopwall,noleftwall,
+Cell(9,80): green,nobaggle,notopwall,noleftwall,
+Cell(9,81): pink,nobaggle,notopwall,noleftwall,
+Cell(9,83): lightGray,nobaggle,notopwall,noleftwall,
+Cell(9,84): darkGray,nobaggle,notopwall,noleftwall,
+Cell(9,85): red,nobaggle,notopwall,noleftwall,
+Cell(9,86): red,nobaggle,notopwall,noleftwall,
+Cell(9,87): red,nobaggle,notopwall,noleftwall,
+Cell(9,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(10,78): black,nobaggle,notopwall,noleftwall,
+Cell(10,79): green,nobaggle,notopwall,noleftwall,
+Cell(10,80): pink,nobaggle,notopwall,noleftwall,
+Cell(10,83): lightGray,nobaggle,notopwall,noleftwall,
+Cell(10,84): gray,nobaggle,notopwall,noleftwall,
+Cell(10,85): red,nobaggle,notopwall,noleftwall,
+Cell(10,86): red,nobaggle,notopwall,noleftwall,
+Cell(10,87): red,nobaggle,notopwall,noleftwall,
+Cell(10,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(11,77): black,nobaggle,notopwall,noleftwall,
+Cell(11,78): green,nobaggle,notopwall,noleftwall,
+Cell(11,79): pink,nobaggle,notopwall,noleftwall,
+Cell(11,83): darkGray,nobaggle,notopwall,noleftwall,
+Cell(11,84): gray,nobaggle,notopwall,noleftwall,
+Cell(11,85): red,nobaggle,notopwall,noleftwall,
+Cell(11,86): red,nobaggle,notopwall,noleftwall,
+Cell(11,87): red,nobaggle,notopwall,noleftwall,
+Cell(11,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(12,76): black,nobaggle,notopwall,noleftwall,
+Cell(12,77): green,nobaggle,notopwall,noleftwall,
+Cell(12,78): pink,nobaggle,notopwall,noleftwall,
+Cell(12,82): pink,nobaggle,notopwall,noleftwall,
+Cell(12,83): magenta,nobaggle,notopwall,noleftwall,
+Cell(12,84): red,nobaggle,notopwall,noleftwall,
+Cell(12,85): red,nobaggle,notopwall,noleftwall,
+Cell(12,86): red,nobaggle,notopwall,noleftwall,
+Cell(12,87): red,nobaggle,notopwall,noleftwall,
+Cell(12,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(13,75): black,nobaggle,notopwall,noleftwall,
+Cell(13,76): green,nobaggle,notopwall,noleftwall,
+Cell(13,77): pink,nobaggle,notopwall,noleftwall,
+Cell(13,81): lightGray,nobaggle,notopwall,noleftwall,
+Cell(13,82): darkGray,nobaggle,notopwall,noleftwall,
+Cell(13,83): red,nobaggle,notopwall,noleftwall,
+Cell(13,84): red,nobaggle,notopwall,noleftwall,
+Cell(13,85): red,nobaggle,notopwall,noleftwall,
+Cell(13,86): red,nobaggle,notopwall,noleftwall,
+Cell(13,87): red,nobaggle,notopwall,noleftwall,
+Cell(13,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(14,74): black,nobaggle,notopwall,noleftwall,
+Cell(14,75): green,nobaggle,notopwall,noleftwall,
+Cell(14,76): pink,nobaggle,notopwall,noleftwall,
+Cell(14,81): lightGray,nobaggle,notopwall,noleftwall,
+Cell(14,82): gray,nobaggle,notopwall,noleftwall,
+Cell(14,83): red,nobaggle,notopwall,noleftwall,
+Cell(14,84): red,nobaggle,notopwall,noleftwall,
+Cell(14,85): red,nobaggle,notopwall,noleftwall,
+Cell(14,86): red,nobaggle,notopwall,noleftwall,
+Cell(14,87): red,nobaggle,notopwall,noleftwall,
+Cell(14,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(15,73): black,nobaggle,notopwall,noleftwall,
+Cell(15,74): green,nobaggle,notopwall,noleftwall,
+Cell(15,75): pink,nobaggle,notopwall,noleftwall,
+Cell(15,81): darkGray,nobaggle,notopwall,noleftwall,
+Cell(15,82): gray,nobaggle,notopwall,noleftwall,
+Cell(15,83): red,nobaggle,notopwall,noleftwall,
+Cell(15,84): red,nobaggle,notopwall,noleftwall,
+Cell(15,85): red,nobaggle,notopwall,noleftwall,
+Cell(15,86): red,nobaggle,notopwall,noleftwall,
+Cell(15,87): red,nobaggle,notopwall,noleftwall,
+Cell(15,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(16,72): black,nobaggle,notopwall,noleftwall,
+Cell(16,73): green,nobaggle,notopwall,noleftwall,
+Cell(16,74): pink,nobaggle,notopwall,noleftwall,
+Cell(16,80): pink,nobaggle,notopwall,noleftwall,
+Cell(16,81): magenta,nobaggle,notopwall,noleftwall,
+Cell(16,82): red,nobaggle,notopwall,noleftwall,
+Cell(16,83): red,nobaggle,notopwall,noleftwall,
+Cell(16,84): red,nobaggle,notopwall,noleftwall,
+Cell(16,85): red,nobaggle,notopwall,noleftwall,
+Cell(16,86): red,nobaggle,notopwall,noleftwall,
+Cell(16,87): red,nobaggle,notopwall,noleftwall,
+Cell(16,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(17,71): black,nobaggle,notopwall,noleftwall,
+Cell(17,72): green,nobaggle,notopwall,noleftwall,
+Cell(17,73): pink,nobaggle,notopwall,noleftwall,
+Cell(17,79): lightGray,nobaggle,notopwall,noleftwall,
+Cell(17,80): darkGray,nobaggle,notopwall,noleftwall,
+Cell(17,81): red,nobaggle,notopwall,noleftwall,
+Cell(17,82): red,nobaggle,notopwall,noleftwall,
+Cell(17,83): red,nobaggle,notopwall,noleftwall,
+Cell(17,84): red,nobaggle,notopwall,noleftwall,
+Cell(17,85): red,nobaggle,notopwall,noleftwall,
+Cell(17,86): red,nobaggle,notopwall,noleftwall,
+Cell(17,87): red,nobaggle,notopwall,noleftwall,
+Cell(17,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(18,70): black,nobaggle,notopwall,noleftwall,
+Cell(18,71): green,nobaggle,notopwall,noleftwall,
+Cell(18,72): pink,nobaggle,notopwall,noleftwall,
+Cell(18,79): lightGray,nobaggle,notopwall,noleftwall,
+Cell(18,80): gray,nobaggle,notopwall,noleftwall,
+Cell(18,81): red,nobaggle,notopwall,noleftwall,
+Cell(18,82): red,nobaggle,notopwall,noleftwall,
+Cell(18,83): red,nobaggle,notopwall,noleftwall,
+Cell(18,84): red,nobaggle,notopwall,noleftwall,
+Cell(18,85): red,nobaggle,notopwall,noleftwall,
+Cell(18,86): red,nobaggle,notopwall,noleftwall,
+Cell(18,87): red,nobaggle,notopwall,noleftwall,
+Cell(18,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(19,69): black,nobaggle,notopwall,noleftwall,
+Cell(19,70): green,nobaggle,notopwall,noleftwall,
+Cell(19,71): pink,nobaggle,notopwall,noleftwall,
+Cell(19,79): darkGray,nobaggle,notopwall,noleftwall,
+Cell(19,80): gray,nobaggle,notopwall,noleftwall,
+Cell(19,81): red,nobaggle,notopwall,noleftwall,
+Cell(19,82): red,nobaggle,notopwall,noleftwall,
+Cell(19,83): red,nobaggle,notopwall,noleftwall,
+Cell(19,84): red,nobaggle,notopwall,noleftwall,
+Cell(19,85): red,nobaggle,notopwall,noleftwall,
+Cell(19,86): red,nobaggle,notopwall,noleftwall,
+Cell(19,87): red,nobaggle,notopwall,noleftwall,
+Cell(19,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(20,68): black,nobaggle,notopwall,noleftwall,
+Cell(20,69): green,nobaggle,notopwall,noleftwall,
+Cell(20,70): pink,nobaggle,notopwall,noleftwall,
+Cell(20,78): pink,nobaggle,notopwall,noleftwall,
+Cell(20,79): magenta,nobaggle,notopwall,noleftwall,
+Cell(20,80): red,nobaggle,notopwall,noleftwall,
+Cell(20,81): red,nobaggle,notopwall,noleftwall,
+Cell(20,82): red,nobaggle,notopwall,noleftwall,
+Cell(20,83): red,nobaggle,notopwall,noleftwall,
+Cell(20,84): red,nobaggle,notopwall,noleftwall,
+Cell(20,85): red,nobaggle,notopwall,noleftwall,
+Cell(20,86): red,nobaggle,notopwall,noleftwall,
+Cell(20,87): red,nobaggle,notopwall,noleftwall,
+Cell(20,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(21,67): black,nobaggle,notopwall,noleftwall,
+Cell(21,68): green,nobaggle,notopwall,noleftwall,
+Cell(21,69): pink,nobaggle,notopwall,noleftwall,
+Cell(21,77): lightGray,nobaggle,notopwall,noleftwall,
+Cell(21,78): darkGray,nobaggle,notopwall,noleftwall,
+Cell(21,79): red,nobaggle,notopwall,noleftwall,
+Cell(21,80): red,nobaggle,notopwall,noleftwall,
+Cell(21,81): red,nobaggle,notopwall,noleftwall,
+Cell(21,82): red,nobaggle,notopwall,noleftwall,
+Cell(21,83): red,nobaggle,notopwall,noleftwall,
+Cell(21,84): red,nobaggle,notopwall,noleftwall,
+Cell(21,85): red,nobaggle,notopwall,noleftwall,
+Cell(21,86): red,nobaggle,notopwall,noleftwall,
+Cell(21,87): red,nobaggle,notopwall,noleftwall,
+Cell(21,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(22,66): black,nobaggle,notopwall,noleftwall,
+Cell(22,67): green,nobaggle,notopwall,noleftwall,
+Cell(22,68): pink,nobaggle,notopwall,noleftwall,
+Cell(22,77): lightGray,nobaggle,notopwall,noleftwall,
+Cell(22,78): gray,nobaggle,notopwall,noleftwall,
+Cell(22,79): red,nobaggle,notopwall,noleftwall,
+Cell(22,80): red,nobaggle,notopwall,noleftwall,
+Cell(22,81): red,nobaggle,notopwall,noleftwall,
+Cell(22,82): red,nobaggle,notopwall,noleftwall,
+Cell(22,83): red,nobaggle,notopwall,noleftwall,
+Cell(22,84): red,nobaggle,notopwall,noleftwall,
+Cell(22,85): red,nobaggle,notopwall,noleftwall,
+Cell(22,86): red,nobaggle,notopwall,noleftwall,
+Cell(22,87): red,nobaggle,notopwall,noleftwall,
+Cell(22,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(23,65): black,nobaggle,notopwall,noleftwall,
+Cell(23,66): green,nobaggle,notopwall,noleftwall,
+Cell(23,67): pink,nobaggle,notopwall,noleftwall,
+Cell(23,77): darkGray,nobaggle,notopwall,noleftwall,
+Cell(23,78): gray,nobaggle,notopwall,noleftwall,
+Cell(23,79): red,nobaggle,notopwall,noleftwall,
+Cell(23,80): red,nobaggle,notopwall,noleftwall,
+Cell(23,81): red,nobaggle,notopwall,noleftwall,
+Cell(23,82): red,nobaggle,notopwall,noleftwall,
+Cell(23,83): red,nobaggle,notopwall,noleftwall,
+Cell(23,84): red,nobaggle,notopwall,noleftwall,
+Cell(23,85): red,nobaggle,notopwall,noleftwall,
+Cell(23,86): red,nobaggle,notopwall,noleftwall,
+Cell(23,87): red,nobaggle,notopwall,noleftwall,
+Cell(23,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(24,64): black,nobaggle,notopwall,noleftwall,
+Cell(24,65): green,nobaggle,notopwall,noleftwall,
+Cell(24,66): pink,nobaggle,notopwall,noleftwall,
+Cell(24,76): pink,nobaggle,notopwall,noleftwall,
+Cell(24,77): magenta,nobaggle,notopwall,noleftwall,
+Cell(24,78): red,nobaggle,notopwall,noleftwall,
+Cell(24,79): red,nobaggle,notopwall,noleftwall,
+Cell(24,80): red,nobaggle,notopwall,noleftwall,
+Cell(24,81): red,nobaggle,notopwall,noleftwall,
+Cell(24,82): red,nobaggle,notopwall,noleftwall,
+Cell(24,83): red,nobaggle,notopwall,noleftwall,
+Cell(24,84): red,nobaggle,notopwall,noleftwall,
+Cell(24,85): red,nobaggle,notopwall,noleftwall,
+Cell(24,86): red,nobaggle,notopwall,noleftwall,
+Cell(24,87): red,nobaggle,notopwall,noleftwall,
+Cell(24,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(25,63): black,nobaggle,notopwall,noleftwall,
+Cell(25,64): green,nobaggle,notopwall,noleftwall,
+Cell(25,65): pink,nobaggle,notopwall,noleftwall,
+Cell(25,75): lightGray,nobaggle,notopwall,noleftwall,
+Cell(25,76): darkGray,nobaggle,notopwall,noleftwall,
+Cell(25,77): red,nobaggle,notopwall,noleftwall,
+Cell(25,78): red,nobaggle,notopwall,noleftwall,
+Cell(25,79): red,nobaggle,notopwall,noleftwall,
+Cell(25,80): red,nobaggle,notopwall,noleftwall,
+Cell(25,81): red,nobaggle,notopwall,noleftwall,
+Cell(25,82): red,nobaggle,notopwall,noleftwall,
+Cell(25,83): red,nobaggle,notopwall,noleftwall,
+Cell(25,84): red,nobaggle,notopwall,noleftwall,
+Cell(25,85): red,nobaggle,notopwall,noleftwall,
+Cell(25,86): red,nobaggle,notopwall,noleftwall,
+Cell(25,87): red,nobaggle,notopwall,noleftwall,
+Cell(25,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(26,62): black,nobaggle,notopwall,noleftwall,
+Cell(26,63): green,nobaggle,notopwall,noleftwall,
+Cell(26,64): pink,nobaggle,notopwall,noleftwall,
+Cell(26,75): lightGray,nobaggle,notopwall,noleftwall,
+Cell(26,76): gray,nobaggle,notopwall,noleftwall,
+Cell(26,77): red,nobaggle,notopwall,noleftwall,
+Cell(26,78): red,nobaggle,notopwall,noleftwall,
+Cell(26,79): red,nobaggle,notopwall,noleftwall,
+Cell(26,80): red,nobaggle,notopwall,noleftwall,
+Cell(26,81): red,nobaggle,notopwall,noleftwall,
+Cell(26,82): red,nobaggle,notopwall,noleftwall,
+Cell(26,83): red,nobaggle,notopwall,noleftwall,
+Cell(26,84): red,nobaggle,notopwall,noleftwall,
+Cell(26,85): red,nobaggle,notopwall,noleftwall,
+Cell(26,86): red,nobaggle,notopwall,noleftwall,
+Cell(26,87): red,nobaggle,notopwall,noleftwall,
+Cell(26,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(27,61): black,nobaggle,notopwall,noleftwall,
+Cell(27,62): green,nobaggle,notopwall,noleftwall,
+Cell(27,63): pink,nobaggle,notopwall,noleftwall,
+Cell(27,75): darkGray,nobaggle,notopwall,noleftwall,
+Cell(27,76): gray,nobaggle,notopwall,noleftwall,
+Cell(27,77): red,nobaggle,notopwall,noleftwall,
+Cell(27,78): red,nobaggle,notopwall,noleftwall,
+Cell(27,79): red,nobaggle,notopwall,noleftwall,
+Cell(27,80): red,nobaggle,notopwall,noleftwall,
+Cell(27,81): red,nobaggle,notopwall,noleftwall,
+Cell(27,82): red,nobaggle,notopwall,noleftwall,
+Cell(27,83): red,nobaggle,notopwall,noleftwall,
+Cell(27,84): red,nobaggle,notopwall,noleftwall,
+Cell(27,85): red,nobaggle,notopwall,noleftwall,
+Cell(27,86): red,nobaggle,notopwall,noleftwall,
+Cell(27,87): red,nobaggle,notopwall,noleftwall,
+Cell(27,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(28,60): black,nobaggle,notopwall,noleftwall,
+Cell(28,61): green,nobaggle,notopwall,noleftwall,
+Cell(28,62): pink,nobaggle,notopwall,noleftwall,
+Cell(28,74): pink,nobaggle,notopwall,noleftwall,
+Cell(28,75): magenta,nobaggle,notopwall,noleftwall,
+Cell(28,76): red,nobaggle,notopwall,noleftwall,
+Cell(28,77): red,nobaggle,notopwall,noleftwall,
+Cell(28,78): red,nobaggle,notopwall,noleftwall,
+Cell(28,79): red,nobaggle,notopwall,noleftwall,
+Cell(28,80): red,nobaggle,notopwall,noleftwall,
+Cell(28,81): red,nobaggle,notopwall,noleftwall,
+Cell(28,82): red,nobaggle,notopwall,noleftwall,
+Cell(28,83): red,nobaggle,notopwall,noleftwall,
+Cell(28,84): red,nobaggle,notopwall,noleftwall,
+Cell(28,85): red,nobaggle,notopwall,noleftwall,
+Cell(28,86): red,nobaggle,notopwall,noleftwall,
+Cell(28,87): red,nobaggle,notopwall,noleftwall,
+Cell(28,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(29,59): black,nobaggle,notopwall,noleftwall,
+Cell(29,60): green,nobaggle,notopwall,noleftwall,
+Cell(29,61): pink,nobaggle,notopwall,noleftwall,
+Cell(29,73): lightGray,nobaggle,notopwall,noleftwall,
+Cell(29,74): darkGray,nobaggle,notopwall,noleftwall,
+Cell(29,75): red,nobaggle,notopwall,noleftwall,
+Cell(29,76): red,nobaggle,notopwall,noleftwall,
+Cell(29,77): red,nobaggle,notopwall,noleftwall,
+Cell(29,78): red,nobaggle,notopwall,noleftwall,
+Cell(29,79): red,nobaggle,notopwall,noleftwall,
+Cell(29,80): red,nobaggle,notopwall,noleftwall,
+Cell(29,81): red,nobaggle,notopwall,noleftwall,
+Cell(29,82): red,nobaggle,notopwall,noleftwall,
+Cell(29,83): red,nobaggle,notopwall,noleftwall,
+Cell(29,84): red,nobaggle,notopwall,noleftwall,
+Cell(29,85): red,nobaggle,notopwall,noleftwall,
+Cell(29,86): red,nobaggle,notopwall,noleftwall,
+Cell(29,87): red,nobaggle,notopwall,noleftwall,
+Cell(29,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(30,58): black,nobaggle,notopwall,noleftwall,
+Cell(30,59): green,nobaggle,notopwall,noleftwall,
+Cell(30,60): pink,nobaggle,notopwall,noleftwall,
+Cell(30,73): lightGray,nobaggle,notopwall,noleftwall,
+Cell(30,74): gray,nobaggle,notopwall,noleftwall,
+Cell(30,75): red,nobaggle,notopwall,noleftwall,
+Cell(30,76): red,nobaggle,notopwall,noleftwall,
+Cell(30,77): red,nobaggle,notopwall,noleftwall,
+Cell(30,78): red,nobaggle,notopwall,noleftwall,
+Cell(30,79): red,nobaggle,notopwall,noleftwall,
+Cell(30,80): red,nobaggle,notopwall,noleftwall,
+Cell(30,81): red,nobaggle,notopwall,noleftwall,
+Cell(30,82): red,nobaggle,notopwall,noleftwall,
+Cell(30,83): red,nobaggle,notopwall,noleftwall,
+Cell(30,84): red,nobaggle,notopwall,noleftwall,
+Cell(30,85): red,nobaggle,notopwall,noleftwall,
+Cell(30,86): red,nobaggle,notopwall,noleftwall,
+Cell(30,87): red,nobaggle,notopwall,noleftwall,
+Cell(30,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(31,57): black,nobaggle,notopwall,noleftwall,
+Cell(31,58): green,nobaggle,notopwall,noleftwall,
+Cell(31,59): pink,nobaggle,notopwall,noleftwall,
+Cell(31,73): darkGray,nobaggle,notopwall,noleftwall,
+Cell(31,74): gray,nobaggle,notopwall,noleftwall,
+Cell(31,75): red,nobaggle,notopwall,noleftwall,
+Cell(31,76): red,nobaggle,notopwall,noleftwall,
+Cell(31,77): red,nobaggle,notopwall,noleftwall,
+Cell(31,78): red,nobaggle,notopwall,noleftwall,
+Cell(31,79): red,nobaggle,notopwall,noleftwall,
+Cell(31,80): red,nobaggle,notopwall,noleftwall,
+Cell(31,81): red,nobaggle,notopwall,noleftwall,
+Cell(31,82): red,nobaggle,notopwall,noleftwall,
+Cell(31,83): red,nobaggle,notopwall,noleftwall,
+Cell(31,84): red,nobaggle,notopwall,noleftwall,
+Cell(31,85): red,nobaggle,notopwall,noleftwall,
+Cell(31,86): red,nobaggle,notopwall,noleftwall,
+Cell(31,87): red,nobaggle,notopwall,noleftwall,
+Cell(31,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(32,56): black,nobaggle,notopwall,noleftwall,
+Cell(32,57): green,nobaggle,notopwall,noleftwall,
+Cell(32,58): pink,nobaggle,notopwall,noleftwall,
+Cell(32,72): pink,nobaggle,notopwall,noleftwall,
+Cell(32,73): magenta,nobaggle,notopwall,noleftwall,
+Cell(32,74): red,nobaggle,notopwall,noleftwall,
+Cell(32,75): red,nobaggle,notopwall,noleftwall,
+Cell(32,76): red,nobaggle,notopwall,noleftwall,
+Cell(32,77): red,nobaggle,notopwall,noleftwall,
+Cell(32,78): red,nobaggle,notopwall,noleftwall,
+Cell(32,79): red,nobaggle,notopwall,noleftwall,
+Cell(32,80): red,nobaggle,notopwall,noleftwall,
+Cell(32,81): red,nobaggle,notopwall,noleftwall,
+Cell(32,82): red,nobaggle,notopwall,noleftwall,
+Cell(32,83): red,nobaggle,notopwall,noleftwall,
+Cell(32,84): red,nobaggle,notopwall,noleftwall,
+Cell(32,85): red,nobaggle,notopwall,noleftwall,
+Cell(32,86): red,nobaggle,notopwall,noleftwall,
+Cell(32,87): red,nobaggle,notopwall,noleftwall,
+Cell(32,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(33,55): black,nobaggle,notopwall,noleftwall,
+Cell(33,56): green,nobaggle,notopwall,noleftwall,
+Cell(33,57): pink,nobaggle,notopwall,noleftwall,
+Cell(33,71): lightGray,nobaggle,notopwall,noleftwall,
+Cell(33,72): darkGray,nobaggle,notopwall,noleftwall,
+Cell(33,73): red,nobaggle,notopwall,noleftwall,
+Cell(33,74): red,nobaggle,notopwall,noleftwall,
+Cell(33,75): red,nobaggle,notopwall,noleftwall,
+Cell(33,76): red,nobaggle,notopwall,noleftwall,
+Cell(33,77): red,nobaggle,notopwall,noleftwall,
+Cell(33,78): red,nobaggle,notopwall,noleftwall,
+Cell(33,79): red,nobaggle,notopwall,noleftwall,
+Cell(33,80): red,nobaggle,notopwall,noleftwall,
+Cell(33,81): red,nobaggle,notopwall,noleftwall,
+Cell(33,82): red,nobaggle,notopwall,noleftwall,
+Cell(33,83): red,nobaggle,notopwall,noleftwall,
+Cell(33,84): red,nobaggle,notopwall,noleftwall,
+Cell(33,85): red,nobaggle,notopwall,noleftwall,
+Cell(33,86): red,nobaggle,notopwall,noleftwall,
+Cell(33,87): red,nobaggle,notopwall,noleftwall,
+Cell(33,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(34,54): black,nobaggle,notopwall,noleftwall,
+Cell(34,55): green,nobaggle,notopwall,noleftwall,
+Cell(34,56): pink,nobaggle,notopwall,noleftwall,
+Cell(34,71): lightGray,nobaggle,notopwall,noleftwall,
+Cell(34,72): gray,nobaggle,notopwall,noleftwall,
+Cell(34,73): red,nobaggle,notopwall,noleftwall,
+Cell(34,74): red,nobaggle,notopwall,noleftwall,
+Cell(34,75): red,nobaggle,notopwall,noleftwall,
+Cell(34,76): red,nobaggle,notopwall,noleftwall,
+Cell(34,77): red,nobaggle,notopwall,noleftwall,
+Cell(34,78): red,nobaggle,notopwall,noleftwall,
+Cell(34,79): red,nobaggle,notopwall,noleftwall,
+Cell(34,80): red,nobaggle,notopwall,noleftwall,
+Cell(34,81): red,nobaggle,notopwall,noleftwall,
+Cell(34,82): red,nobaggle,notopwall,noleftwall,
+Cell(34,83): red,nobaggle,notopwall,noleftwall,
+Cell(34,84): red,nobaggle,notopwall,noleftwall,
+Cell(34,85): red,nobaggle,notopwall,noleftwall,
+Cell(34,86): red,nobaggle,notopwall,noleftwall,
+Cell(34,87): red,nobaggle,notopwall,noleftwall,
+Cell(34,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(35,53): black,nobaggle,notopwall,noleftwall,
+Cell(35,54): green,nobaggle,notopwall,noleftwall,
+Cell(35,55): pink,nobaggle,notopwall,noleftwall,
+Cell(35,71): darkGray,nobaggle,notopwall,noleftwall,
+Cell(35,72): gray,nobaggle,notopwall,noleftwall,
+Cell(35,73): red,nobaggle,notopwall,noleftwall,
+Cell(35,74): red,nobaggle,notopwall,noleftwall,
+Cell(35,75): red,nobaggle,notopwall,noleftwall,
+Cell(35,76): red,nobaggle,notopwall,noleftwall,
+Cell(35,77): red,nobaggle,notopwall,noleftwall,
+Cell(35,78): red,nobaggle,notopwall,noleftwall,
+Cell(35,79): red,nobaggle,notopwall,noleftwall,
+Cell(35,80): red,nobaggle,notopwall,noleftwall,
+Cell(35,81): red,nobaggle,notopwall,noleftwall,
+Cell(35,82): red,nobaggle,notopwall,noleftwall,
+Cell(35,83): red,nobaggle,notopwall,noleftwall,
+Cell(35,84): red,nobaggle,notopwall,noleftwall,
+Cell(35,85): red,nobaggle,notopwall,noleftwall,
+Cell(35,86): red,nobaggle,notopwall,noleftwall,
+Cell(35,87): red,nobaggle,notopwall,noleftwall,
+Cell(35,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(36,52): black,nobaggle,notopwall,noleftwall,
+Cell(36,53): green,nobaggle,notopwall,noleftwall,
+Cell(36,54): pink,nobaggle,notopwall,noleftwall,
+Cell(36,70): pink,nobaggle,notopwall,noleftwall,
+Cell(36,71): magenta,nobaggle,notopwall,noleftwall,
+Cell(36,72): red,nobaggle,notopwall,noleftwall,
+Cell(36,73): red,nobaggle,notopwall,noleftwall,
+Cell(36,74): red,nobaggle,notopwall,noleftwall,
+Cell(36,75): red,nobaggle,notopwall,noleftwall,
+Cell(36,76): red,nobaggle,notopwall,noleftwall,
+Cell(36,77): red,nobaggle,notopwall,noleftwall,
+Cell(36,78): red,nobaggle,notopwall,noleftwall,
+Cell(36,79): red,nobaggle,notopwall,noleftwall,
+Cell(36,80): red,nobaggle,notopwall,noleftwall,
+Cell(36,81): red,nobaggle,notopwall,noleftwall,
+Cell(36,82): red,nobaggle,notopwall,noleftwall,
+Cell(36,83): red,nobaggle,notopwall,noleftwall,
+Cell(36,84): red,nobaggle,notopwall,noleftwall,
+Cell(36,85): red,nobaggle,notopwall,noleftwall,
+Cell(36,86): red,nobaggle,notopwall,noleftwall,
+Cell(36,87): red,nobaggle,notopwall,noleftwall,
+Cell(36,88): cyan,nobaggle,notopwall,noleftwall,
+Cell(37,51): black,nobaggle,notopwall,noleftwall,
+Cell(37,52): green,nobaggle,notopwall,noleftwall,
+Cell(37,53): pink,nobaggle,notopwall,noleftwall,
+Cell(37,69): lightGray,nobaggle,notopwall,noleftwall,
+Cell(37,70): darkGray,nobaggle,notopwall,noleftwall,
+Cell(37,71): red,nobaggle,notopwall,noleftwall,
+Cell(37,72): red,nobaggle,notopwall,noleftwall,
+Cell(37,73): red,nobaggle,notopwall,noleftwall,
+Cell(37,74): red,nobaggle,notopwall,noleftwall,
+Cell(37,75): red,nobaggle,notopwall,noleftwall,
+Cell(37,76): red,nobaggle,notopwall,noleftwall,
+Cell(37,77): red,nobaggle,notopwall,noleftwall,
+Cell(37,78): red,nobaggle,notopwall,noleftwall,
+Cell(37,79): red,nobaggle,notopwall,noleftwall,
+Cell(37,80): red,nobaggle,notopwall,noleftwall,
+Cell(37,81): red,nobaggle,notopwall,noleftwall,
+Cell(37,82): red,nobaggle,notopwall,noleftwall,
+Cell(37,83): red,nobaggle,notopwall,noleftwall,
+Cell(37,84): red,nobaggle,notopwall,noleftwall,
+Cell(37,85): red,nobaggle,notopwall,noleftwall,
+Cell(37,86): red,nobaggle,notopwall,noleftwall,
+Cell(37,87): orange,nobaggle,notopwall,noleftwall,
+Cell(37,88): blue,nobaggle,notopwall,noleftwall,
+Cell(38,50): black,nobaggle,notopwall,noleftwall,
+Cell(38,51): green,nobaggle,notopwall,noleftwall,
+Cell(38,52): pink,nobaggle,notopwall,noleftwall,
+Cell(38,69): lightGray,nobaggle,notopwall,noleftwall,
+Cell(38,70): gray,nobaggle,notopwall,noleftwall,
+Cell(38,71): red,nobaggle,notopwall,noleftwall,
+Cell(38,72): red,nobaggle,notopwall,noleftwall,
+Cell(38,73): red,nobaggle,notopwall,noleftwall,
+Cell(38,74): red,nobaggle,notopwall,noleftwall,
+Cell(38,75): red,nobaggle,notopwall,noleftwall,
+Cell(38,76): red,nobaggle,notopwall,noleftwall,
+Cell(38,77): red,nobaggle,notopwall,noleftwall,
+Cell(38,78): red,nobaggle,notopwall,noleftwall,
+Cell(38,79): red,nobaggle,notopwall,noleftwall,
+Cell(38,80): red,nobaggle,notopwall,noleftwall,
+Cell(38,81): red,nobaggle,notopwall,noleftwall,
+Cell(38,82): red,nobaggle,notopwall,noleftwall,
+Cell(38,83): red,nobaggle,notopwall,noleftwall,
+Cell(38,84): red,nobaggle,notopwall,noleftwall,
+Cell(38,85): red,nobaggle,notopwall,noleftwall,
+Cell(38,86): red,nobaggle,notopwall,noleftwall,
+Cell(38,87): orange,nobaggle,notopwall,noleftwall,
+Cell(38,88): blue,nobaggle,notopwall,noleftwall,
+Cell(39,49): black,nobaggle,notopwall,noleftwall,
+Cell(39,50): green,nobaggle,notopwall,noleftwall,
+Cell(39,51): pink,nobaggle,notopwall,noleftwall,
+Cell(39,69): darkGray,nobaggle,notopwall,noleftwall,
+Cell(39,70): gray,nobaggle,notopwall,noleftwall,
+Cell(39,71): red,nobaggle,notopwall,noleftwall,
+Cell(39,72): red,nobaggle,notopwall,noleftwall,
+Cell(39,73): red,nobaggle,notopwall,noleftwall,
+Cell(39,74): red,nobaggle,notopwall,noleftwall,
+Cell(39,75): red,nobaggle,notopwall,noleftwall,
+Cell(39,76): red,nobaggle,notopwall,noleftwall,
+Cell(39,77): red,nobaggle,notopwall,noleftwall,
+Cell(39,78): red,nobaggle,notopwall,noleftwall,
+Cell(39,79): red,nobaggle,notopwall,noleftwall,
+Cell(39,80): red,nobaggle,notopwall,noleftwall,
+Cell(39,81): red,nobaggle,notopwall,noleftwall,
+Cell(39,82): red,nobaggle,notopwall,noleftwall,
+Cell(39,83): red,nobaggle,notopwall,noleftwall,
+Cell(39,84): red,nobaggle,notopwall,noleftwall,
+Cell(39,85): red,nobaggle,notopwall,noleftwall,
+Cell(39,86): red,nobaggle,notopwall,noleftwall,
+Cell(39,87): orange,nobaggle,notopwall,noleftwall,
+Cell(39,88): blue,nobaggle,notopwall,noleftwall,
+Cell(40,48): black,nobaggle,notopwall,noleftwall,
+Cell(40,49): green,nobaggle,notopwall,noleftwall,
+Cell(40,50): pink,nobaggle,notopwall,noleftwall,
+Cell(40,68): pink,nobaggle,notopwall,noleftwall,
+Cell(40,69): magenta,nobaggle,notopwall,noleftwall,
+Cell(40,70): red,nobaggle,notopwall,noleftwall,
+Cell(40,71): red,nobaggle,notopwall,noleftwall,
+Cell(40,72): red,nobaggle,notopwall,noleftwall,
+Cell(40,73): red,nobaggle,notopwall,noleftwall,
+Cell(40,74): red,nobaggle,notopwall,noleftwall,
+Cell(40,75): red,nobaggle,notopwall,noleftwall,
+Cell(40,76): red,nobaggle,notopwall,noleftwall,
+Cell(40,77): red,nobaggle,notopwall,noleftwall,
+Cell(40,78): red,nobaggle,notopwall,noleftwall,
+Cell(40,79): red,nobaggle,notopwall,noleftwall,
+Cell(40,80): red,nobaggle,notopwall,noleftwall,
+Cell(40,81): red,nobaggle,notopwall,noleftwall,
+Cell(40,82): red,nobaggle,notopwall,noleftwall,
+Cell(40,83): red,nobaggle,notopwall,noleftwall,
+Cell(40,84): red,nobaggle,notopwall,noleftwall,
+Cell(40,85): red,nobaggle,notopwall,noleftwall,
+Cell(40,86): red,nobaggle,notopwall,noleftwall,
+Cell(40,87): orange,nobaggle,notopwall,noleftwall,
+Cell(40,88): blue,nobaggle,notopwall,noleftwall,
+Cell(41,47): black,nobaggle,notopwall,noleftwall,
+Cell(41,48): green,nobaggle,notopwall,noleftwall,
+Cell(41,49): pink,nobaggle,notopwall,noleftwall,
+Cell(41,67): lightGray,nobaggle,notopwall,noleftwall,
+Cell(41,68): darkGray,nobaggle,notopwall,noleftwall,
+Cell(41,69): red,nobaggle,notopwall,noleftwall,
+Cell(41,70): red,nobaggle,notopwall,noleftwall,
+Cell(41,71): red,nobaggle,notopwall,noleftwall,
+Cell(41,72): red,nobaggle,notopwall,noleftwall,
+Cell(41,73): red,nobaggle,notopwall,noleftwall,
+Cell(41,74): red,nobaggle,notopwall,noleftwall,
+Cell(41,75): red,nobaggle,notopwall,noleftwall,
+Cell(41,76): red,nobaggle,notopwall,noleftwall,
+Cell(41,77): red,nobaggle,notopwall,noleftwall,
+Cell(41,78): red,nobaggle,notopwall,noleftwall,
+Cell(41,79): red,nobaggle,notopwall,noleftwall,
+Cell(41,80): red,nobaggle,notopwall,noleftwall,
+Cell(41,81): red,nobaggle,notopwall,noleftwall,
+Cell(41,82): red,nobaggle,notopwall,noleftwall,
+Cell(41,83): red,nobaggle,notopwall,noleftwall,
+Cell(41,84): red,nobaggle,notopwall,noleftwall,
+Cell(41,85): red,nobaggle,notopwall,noleftwall,
+Cell(41,86): red,nobaggle,notopwall,noleftwall,
+Cell(41,87): orange,nobaggle,notopwall,noleftwall,
+Cell(41,88): blue,nobaggle,notopwall,noleftwall,
+Cell(42,46): black,nobaggle,notopwall,noleftwall,
+Cell(42,47): green,nobaggle,notopwall,noleftwall,
+Cell(42,48): pink,nobaggle,notopwall,noleftwall,
+Cell(42,67): lightGray,nobaggle,notopwall,noleftwall,
+Cell(42,68): gray,nobaggle,notopwall,noleftwall,
+Cell(42,69): red,nobaggle,notopwall,noleftwall,
+Cell(42,70): red,nobaggle,notopwall,noleftwall,
+Cell(42,71): red,nobaggle,notopwall,noleftwall,
+Cell(42,72): red,nobaggle,notopwall,noleftwall,
+Cell(42,73): red,nobaggle,notopwall,noleftwall,
+Cell(42,74): red,nobaggle,notopwall,noleftwall,
+Cell(42,75): red,nobaggle,notopwall,noleftwall,
+Cell(42,76): red,nobaggle,notopwall,noleftwall,
+Cell(42,77): red,nobaggle,notopwall,noleftwall,
+Cell(42,78): red,nobaggle,notopwall,noleftwall,
+Cell(42,79): red,nobaggle,notopwall,noleftwall,
+Cell(42,80): red,nobaggle,notopwall,noleftwall,
+Cell(42,81): red,nobaggle,notopwall,noleftwall,
+Cell(42,82): red,nobaggle,notopwall,noleftwall,
+Cell(42,83): red,nobaggle,notopwall,noleftwall,
+Cell(42,84): red,nobaggle,notopwall,noleftwall,
+Cell(42,85): red,nobaggle,notopwall,noleftwall,
+Cell(42,86): red,nobaggle,notopwall,noleftwall,
+Cell(42,87): orange,nobaggle,notopwall,noleftwall,
+Cell(42,88): blue,nobaggle,notopwall,noleftwall,
+Cell(43,45): black,nobaggle,notopwall,noleftwall,
+Cell(43,46): green,nobaggle,notopwall,noleftwall,
+Cell(43,47): pink,nobaggle,notopwall,noleftwall,
+Cell(43,67): darkGray,nobaggle,notopwall,noleftwall,
+Cell(43,68): gray,nobaggle,notopwall,noleftwall,
+Cell(43,69): red,nobaggle,notopwall,noleftwall,
+Cell(43,70): red,nobaggle,notopwall,noleftwall,
+Cell(43,71): red,nobaggle,notopwall,noleftwall,
+Cell(43,72): red,nobaggle,notopwall,noleftwall,
+Cell(43,73): red,nobaggle,notopwall,noleftwall,
+Cell(43,74): red,nobaggle,notopwall,noleftwall,
+Cell(43,75): red,nobaggle,notopwall,noleftwall,
+Cell(43,76): red,nobaggle,notopwall,noleftwall,
+Cell(43,77): red,nobaggle,notopwall,noleftwall,
+Cell(43,78): red,nobaggle,notopwall,noleftwall,
+Cell(43,79): red,nobaggle,notopwall,noleftwall,
+Cell(43,80): red,nobaggle,notopwall,noleftwall,
+Cell(43,81): red,nobaggle,notopwall,noleftwall,
+Cell(43,82): red,nobaggle,notopwall,noleftwall,
+Cell(43,83): red,nobaggle,notopwall,noleftwall,
+Cell(43,84): red,nobaggle,notopwall,noleftwall,
+Cell(43,85): red,nobaggle,notopwall,noleftwall,
+Cell(43,86): red,nobaggle,notopwall,noleftwall,
+Cell(43,87): orange,nobaggle,notopwall,noleftwall,
+Cell(43,88): blue,nobaggle,notopwall,noleftwall,
+Cell(44,44): black,nobaggle,notopwall,noleftwall,
+Cell(44,45): green,nobaggle,notopwall,noleftwall,
+Cell(44,46): pink,nobaggle,notopwall,noleftwall,
+Cell(44,66): pink,nobaggle,notopwall,noleftwall,
+Cell(44,67): magenta,nobaggle,notopwall,noleftwall,
+Cell(44,68): red,nobaggle,notopwall,noleftwall,
+Cell(44,69): red,nobaggle,notopwall,noleftwall,
+Cell(44,70): red,nobaggle,notopwall,noleftwall,
+Cell(44,71): red,nobaggle,notopwall,noleftwall,
+Cell(44,72): red,nobaggle,notopwall,noleftwall,
+Cell(44,73): red,nobaggle,notopwall,noleftwall,
+Cell(44,74): red,nobaggle,notopwall,noleftwall,
+Cell(44,75): red,nobaggle,notopwall,noleftwall,
+Cell(44,76): red,nobaggle,notopwall,noleftwall,
+Cell(44,77): red,nobaggle,notopwall,noleftwall,
+Cell(44,78): red,nobaggle,notopwall,noleftwall,
+Cell(44,79): red,nobaggle,notopwall,noleftwall,
+Cell(44,80): red,nobaggle,notopwall,noleftwall,
+Cell(44,81): red,nobaggle,notopwall,noleftwall,
+Cell(44,82): red,nobaggle,notopwall,noleftwall,
+Cell(44,83): red,nobaggle,notopwall,noleftwall,
+Cell(44,84): red,nobaggle,notopwall,noleftwall,
+Cell(44,85): red,nobaggle,notopwall,noleftwall,
+Cell(44,86): red,nobaggle,notopwall,noleftwall,
+Cell(44,87): orange,nobaggle,notopwall,noleftwall,
+Cell(44,88): blue,nobaggle,notopwall,noleftwall,
+Cell(45,43): black,nobaggle,notopwall,noleftwall,
+Cell(45,44): green,nobaggle,notopwall,noleftwall,
+Cell(45,45): pink,nobaggle,notopwall,noleftwall,
+Cell(45,65): lightGray,nobaggle,notopwall,noleftwall,
+Cell(45,66): darkGray,nobaggle,notopwall,noleftwall,
+Cell(45,67): red,nobaggle,notopwall,noleftwall,
+Cell(45,68): red,nobaggle,notopwall,noleftwall,
+Cell(45,69): red,nobaggle,notopwall,noleftwall,
+Cell(45,70): red,nobaggle,notopwall,noleftwall,
+Cell(45,71): red,nobaggle,notopwall,noleftwall,
+Cell(45,72): red,nobaggle,notopwall,noleftwall,
+Cell(45,73): red,nobaggle,notopwall,noleftwall,
+Cell(45,74): red,nobaggle,notopwall,noleftwall,
+Cell(45,75): red,nobaggle,notopwall,noleftwall,
+Cell(45,76): red,nobaggle,notopwall,noleftwall,
+Cell(45,77): red,nobaggle,notopwall,noleftwall,
+Cell(45,78): red,nobaggle,notopwall,noleftwall,
+Cell(45,79): red,nobaggle,notopwall,noleftwall,
+Cell(45,80): red,nobaggle,notopwall,noleftwall,
+Cell(45,81): red,nobaggle,notopwall,noleftwall,
+Cell(45,82): red,nobaggle,notopwall,noleftwall,
+Cell(45,83): red,nobaggle,notopwall,noleftwall,
+Cell(45,84): red,nobaggle,notopwall,noleftwall,
+Cell(45,85): red,nobaggle,notopwall,noleftwall,
+Cell(45,86): red,nobaggle,notopwall,noleftwall,
+Cell(45,87): orange,nobaggle,notopwall,noleftwall,
+Cell(45,88): blue,nobaggle,notopwall,noleftwall,
+Cell(46,22): blue,nobaggle,notopwall,noleftwall,
+Cell(46,23): cyan,nobaggle,notopwall,noleftwall,
+Cell(46,24): cyan,nobaggle,notopwall,noleftwall,
+Cell(46,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(46,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(46,27): blue,nobaggle,notopwall,noleftwall,
+Cell(46,42): black,nobaggle,notopwall,noleftwall,
+Cell(46,43): green,nobaggle,notopwall,noleftwall,
+Cell(46,44): pink,nobaggle,notopwall,noleftwall,
+Cell(46,64): lightGray,nobaggle,notopwall,noleftwall,
+Cell(46,65): pink,nobaggle,notopwall,noleftwall,
+Cell(46,66): gray,nobaggle,notopwall,noleftwall,
+Cell(46,67): red,nobaggle,notopwall,noleftwall,
+Cell(46,68): red,nobaggle,notopwall,noleftwall,
+Cell(46,69): red,nobaggle,notopwall,noleftwall,
+Cell(46,70): red,nobaggle,notopwall,noleftwall,
+Cell(46,71): red,nobaggle,notopwall,noleftwall,
+Cell(46,72): red,nobaggle,notopwall,noleftwall,
+Cell(46,73): red,nobaggle,notopwall,noleftwall,
+Cell(46,74): red,nobaggle,notopwall,noleftwall,
+Cell(46,75): red,nobaggle,notopwall,noleftwall,
+Cell(46,76): red,nobaggle,notopwall,noleftwall,
+Cell(46,77): red,nobaggle,notopwall,noleftwall,
+Cell(46,78): red,nobaggle,notopwall,noleftwall,
+Cell(46,79): red,nobaggle,notopwall,noleftwall,
+Cell(46,80): red,nobaggle,notopwall,noleftwall,
+Cell(46,81): red,nobaggle,notopwall,noleftwall,
+Cell(46,82): red,nobaggle,notopwall,noleftwall,
+Cell(46,83): red,nobaggle,notopwall,noleftwall,
+Cell(46,84): red,nobaggle,notopwall,noleftwall,
+Cell(46,85): red,nobaggle,notopwall,noleftwall,
+Cell(46,86): red,nobaggle,notopwall,noleftwall,
+Cell(46,87): orange,nobaggle,notopwall,noleftwall,
+Cell(46,88): blue,nobaggle,notopwall,noleftwall,
+Cell(47,21): blue,nobaggle,notopwall,noleftwall,
+Cell(47,22): green,nobaggle,notopwall,noleftwall,
+Cell(47,23): red,nobaggle,notopwall,noleftwall,
+Cell(47,24): red,nobaggle,notopwall,noleftwall,
+Cell(47,25): red,nobaggle,notopwall,noleftwall,
+Cell(47,26): red,nobaggle,notopwall,noleftwall,
+Cell(47,27): green,nobaggle,notopwall,noleftwall,
+Cell(47,28): blue,nobaggle,notopwall,noleftwall,
+Cell(47,29): blue,nobaggle,notopwall,noleftwall,
+Cell(47,30): blue,nobaggle,notopwall,noleftwall,
+Cell(47,31): black,nobaggle,notopwall,noleftwall,
+Cell(47,32): black,nobaggle,notopwall,noleftwall,
+Cell(47,41): black,nobaggle,notopwall,noleftwall,
+Cell(47,42): green,nobaggle,notopwall,noleftwall,
+Cell(47,43): pink,nobaggle,notopwall,noleftwall,
+Cell(47,61): lightGray,nobaggle,notopwall,noleftwall,
+Cell(47,62): lightGray,nobaggle,notopwall,noleftwall,
+Cell(47,63): pink,nobaggle,notopwall,noleftwall,
+Cell(47,64): lightGray,nobaggle,notopwall,noleftwall,
+Cell(47,65): pink,nobaggle,notopwall,noleftwall,
+Cell(47,66): darkGray,nobaggle,notopwall,noleftwall,
+Cell(47,67): magenta,nobaggle,notopwall,noleftwall,
+Cell(47,68): red,nobaggle,notopwall,noleftwall,
+Cell(47,69): red,nobaggle,notopwall,noleftwall,
+Cell(47,70): red,nobaggle,notopwall,noleftwall,
+Cell(47,71): red,nobaggle,notopwall,noleftwall,
+Cell(47,72): red,nobaggle,notopwall,noleftwall,
+Cell(47,73): red,nobaggle,notopwall,noleftwall,
+Cell(47,74): red,nobaggle,notopwall,noleftwall,
+Cell(47,75): red,nobaggle,notopwall,noleftwall,
+Cell(47,76): red,nobaggle,notopwall,noleftwall,
+Cell(47,77): red,nobaggle,notopwall,noleftwall,
+Cell(47,78): red,nobaggle,notopwall,noleftwall,
+Cell(47,79): red,nobaggle,notopwall,noleftwall,
+Cell(47,80): red,nobaggle,notopwall,noleftwall,
+Cell(47,81): red,nobaggle,notopwall,noleftwall,
+Cell(47,82): red,nobaggle,notopwall,noleftwall,
+Cell(47,83): red,nobaggle,notopwall,noleftwall,
+Cell(47,84): red,nobaggle,notopwall,noleftwall,
+Cell(47,85): red,nobaggle,notopwall,noleftwall,
+Cell(47,86): red,nobaggle,notopwall,noleftwall,
+Cell(47,87): orange,nobaggle,notopwall,noleftwall,
+Cell(47,88): blue,nobaggle,notopwall,noleftwall,
+Cell(48,16): black,nobaggle,notopwall,noleftwall,
+Cell(48,17): black,nobaggle,notopwall,noleftwall,
+Cell(48,18): black,nobaggle,notopwall,noleftwall,
+Cell(48,19): black,nobaggle,notopwall,noleftwall,
+Cell(48,20): blue,nobaggle,notopwall,noleftwall,
+Cell(48,21): orange,nobaggle,notopwall,noleftwall,
+Cell(48,22): red,nobaggle,notopwall,noleftwall,
+Cell(48,23): orange,nobaggle,notopwall,noleftwall,
+Cell(48,24): red,nobaggle,notopwall,noleftwall,
+Cell(48,25): red,nobaggle,notopwall,noleftwall,
+Cell(48,26): red,nobaggle,notopwall,noleftwall,
+Cell(48,27): orange,nobaggle,notopwall,noleftwall,
+Cell(48,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(48,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(48,30): orange,nobaggle,notopwall,noleftwall,
+Cell(48,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(48,32): orange,nobaggle,notopwall,noleftwall,
+Cell(48,33): black,nobaggle,notopwall,noleftwall,
+Cell(48,40): black,nobaggle,notopwall,noleftwall,
+Cell(48,41): green,nobaggle,notopwall,noleftwall,
+Cell(48,42): pink,nobaggle,notopwall,noleftwall,
+Cell(48,58): lightGray,nobaggle,notopwall,noleftwall,
+Cell(48,59): lightGray,nobaggle,notopwall,noleftwall,
+Cell(48,60): pink,nobaggle,notopwall,noleftwall,
+Cell(48,61): lightGray,nobaggle,notopwall,noleftwall,
+Cell(48,62): pink,nobaggle,notopwall,noleftwall,
+Cell(48,63): lightGray,nobaggle,notopwall,noleftwall,
+Cell(48,64): lightGray,nobaggle,notopwall,noleftwall,
+Cell(48,67): pink,nobaggle,notopwall,noleftwall,
+Cell(48,68): darkGray,nobaggle,notopwall,noleftwall,
+Cell(48,69): gray,nobaggle,notopwall,noleftwall,
+Cell(48,70): gray,nobaggle,notopwall,noleftwall,
+Cell(48,71): red,nobaggle,notopwall,noleftwall,
+Cell(48,72): red,nobaggle,notopwall,noleftwall,
+Cell(48,73): red,nobaggle,notopwall,noleftwall,
+Cell(48,74): red,nobaggle,notopwall,noleftwall,
+Cell(48,75): red,nobaggle,notopwall,noleftwall,
+Cell(48,76): red,nobaggle,notopwall,noleftwall,
+Cell(48,77): red,nobaggle,notopwall,noleftwall,
+Cell(48,78): red,nobaggle,notopwall,noleftwall,
+Cell(48,79): red,nobaggle,notopwall,noleftwall,
+Cell(48,80): red,nobaggle,notopwall,noleftwall,
+Cell(48,81): red,nobaggle,notopwall,noleftwall,
+Cell(48,82): red,nobaggle,notopwall,noleftwall,
+Cell(48,83): red,nobaggle,notopwall,noleftwall,
+Cell(48,84): red,nobaggle,notopwall,noleftwall,
+Cell(48,85): red,nobaggle,notopwall,noleftwall,
+Cell(48,86): red,nobaggle,notopwall,noleftwall,
+Cell(48,87): orange,nobaggle,notopwall,noleftwall,
+Cell(48,88): blue,nobaggle,notopwall,noleftwall,
+Cell(49,15): black,nobaggle,notopwall,noleftwall,
+Cell(49,16): blue,nobaggle,notopwall,noleftwall,
+Cell(49,17): green,nobaggle,notopwall,noleftwall,
+Cell(49,18): green,nobaggle,notopwall,noleftwall,
+Cell(49,19): blue,nobaggle,notopwall,noleftwall,
+Cell(49,20): red,nobaggle,notopwall,noleftwall,
+Cell(49,21): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,22): pink,nobaggle,notopwall,noleftwall,
+Cell(49,23): black,nobaggle,notopwall,noleftwall,
+Cell(49,24): blue,nobaggle,notopwall,noleftwall,
+Cell(49,25): blue,nobaggle,notopwall,noleftwall,
+Cell(49,26): blue,nobaggle,notopwall,noleftwall,
+Cell(49,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(49,28): gray,nobaggle,notopwall,noleftwall,
+Cell(49,29): gray,nobaggle,notopwall,noleftwall,
+Cell(49,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(49,31): black,nobaggle,notopwall,noleftwall,
+Cell(49,32): pink,nobaggle,notopwall,noleftwall,
+Cell(49,33): cyan,nobaggle,notopwall,noleftwall,
+Cell(49,34): black,nobaggle,notopwall,noleftwall,
+Cell(49,39): black,nobaggle,notopwall,noleftwall,
+Cell(49,40): green,nobaggle,notopwall,noleftwall,
+Cell(49,41): pink,nobaggle,notopwall,noleftwall,
+Cell(49,55): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,56): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,57): pink,nobaggle,notopwall,noleftwall,
+Cell(49,58): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,59): pink,nobaggle,notopwall,noleftwall,
+Cell(49,60): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,61): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,68): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,69): lightGray,nobaggle,notopwall,noleftwall,
+Cell(49,70): darkGray,nobaggle,notopwall,noleftwall,
+Cell(49,71): magenta,nobaggle,notopwall,noleftwall,
+Cell(49,72): red,nobaggle,notopwall,noleftwall,
+Cell(49,73): red,nobaggle,notopwall,noleftwall,
+Cell(49,74): red,nobaggle,notopwall,noleftwall,
+Cell(49,75): red,nobaggle,notopwall,noleftwall,
+Cell(49,76): red,nobaggle,notopwall,noleftwall,
+Cell(49,77): red,nobaggle,notopwall,noleftwall,
+Cell(49,78): red,nobaggle,notopwall,noleftwall,
+Cell(49,79): red,nobaggle,notopwall,noleftwall,
+Cell(49,80): red,nobaggle,notopwall,noleftwall,
+Cell(49,81): red,nobaggle,notopwall,noleftwall,
+Cell(49,82): red,nobaggle,notopwall,noleftwall,
+Cell(49,83): red,nobaggle,notopwall,noleftwall,
+Cell(49,84): red,nobaggle,notopwall,noleftwall,
+Cell(49,85): red,nobaggle,notopwall,noleftwall,
+Cell(49,86): red,nobaggle,notopwall,noleftwall,
+Cell(49,87): orange,nobaggle,notopwall,noleftwall,
+Cell(49,88): blue,nobaggle,notopwall,noleftwall,
+Cell(50,15): black,nobaggle,notopwall,noleftwall,
+Cell(50,16): green,nobaggle,notopwall,noleftwall,
+Cell(50,17): orange,nobaggle,notopwall,noleftwall,
+Cell(50,18): red,nobaggle,notopwall,noleftwall,
+Cell(50,19): red,nobaggle,notopwall,noleftwall,
+Cell(50,20): pink,nobaggle,notopwall,noleftwall,
+Cell(50,21): pink,nobaggle,notopwall,noleftwall,
+Cell(50,22): green,nobaggle,notopwall,noleftwall,
+Cell(50,23): lightGray,nobaggle,notopwall,noleftwall,
+Cell(50,24): pink,nobaggle,notopwall,noleftwall,
+Cell(50,25): pink,nobaggle,notopwall,noleftwall,
+Cell(50,26): gray,nobaggle,notopwall,noleftwall,
+Cell(50,27): blue,nobaggle,notopwall,noleftwall,
+Cell(50,29): pink,nobaggle,notopwall,noleftwall,
+Cell(50,30): pink,nobaggle,notopwall,noleftwall,
+Cell(50,31): green,nobaggle,notopwall,noleftwall,
+Cell(50,32): black,nobaggle,notopwall,noleftwall,
+Cell(50,33): gray,nobaggle,notopwall,noleftwall,
+Cell(50,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(50,35): black,nobaggle,notopwall,noleftwall,
+Cell(50,38): black,nobaggle,notopwall,noleftwall,
+Cell(50,39): green,nobaggle,notopwall,noleftwall,
+Cell(50,40): pink,nobaggle,notopwall,noleftwall,
+Cell(50,52): lightGray,nobaggle,notopwall,noleftwall,
+Cell(50,53): lightGray,nobaggle,notopwall,noleftwall,
+Cell(50,54): pink,nobaggle,notopwall,noleftwall,
+Cell(50,55): lightGray,nobaggle,notopwall,noleftwall,
+Cell(50,56): pink,nobaggle,notopwall,noleftwall,
+Cell(50,57): lightGray,nobaggle,notopwall,noleftwall,
+Cell(50,58): lightGray,nobaggle,notopwall,noleftwall,
+Cell(50,71): pink,nobaggle,notopwall,noleftwall,
+Cell(50,72): darkGray,nobaggle,notopwall,noleftwall,
+Cell(50,73): gray,nobaggle,notopwall,noleftwall,
+Cell(50,74): gray,nobaggle,notopwall,noleftwall,
+Cell(50,75): red,nobaggle,notopwall,noleftwall,
+Cell(50,76): red,nobaggle,notopwall,noleftwall,
+Cell(50,77): red,nobaggle,notopwall,noleftwall,
+Cell(50,78): red,nobaggle,notopwall,noleftwall,
+Cell(50,79): red,nobaggle,notopwall,noleftwall,
+Cell(50,80): red,nobaggle,notopwall,noleftwall,
+Cell(50,81): red,nobaggle,notopwall,noleftwall,
+Cell(50,82): red,nobaggle,notopwall,noleftwall,
+Cell(50,83): red,nobaggle,notopwall,noleftwall,
+Cell(50,84): red,nobaggle,notopwall,noleftwall,
+Cell(50,85): red,nobaggle,notopwall,noleftwall,
+Cell(50,86): red,nobaggle,notopwall,noleftwall,
+Cell(50,87): orange,nobaggle,notopwall,noleftwall,
+Cell(50,88): blue,nobaggle,notopwall,noleftwall,
+Cell(51,13): black,nobaggle,notopwall,noleftwall,
+Cell(51,14): black,nobaggle,notopwall,noleftwall,
+Cell(51,15): blue,nobaggle,notopwall,noleftwall,
+Cell(51,16): red,nobaggle,notopwall,noleftwall,
+Cell(51,17): darkGray,nobaggle,notopwall,noleftwall,
+Cell(51,18): pink,nobaggle,notopwall,noleftwall,
+Cell(51,20): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,21): blue,nobaggle,notopwall,noleftwall,
+Cell(51,22): cyan,nobaggle,notopwall,noleftwall,
+Cell(51,23): orange,nobaggle,notopwall,noleftwall,
+Cell(51,24): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,25): darkGray,nobaggle,notopwall,noleftwall,
+Cell(51,26): pink,nobaggle,notopwall,noleftwall,
+Cell(51,27): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,28): red,nobaggle,notopwall,noleftwall,
+Cell(51,29): red,nobaggle,notopwall,noleftwall,
+Cell(51,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(51,31): green,nobaggle,notopwall,noleftwall,
+Cell(51,32): black,nobaggle,notopwall,noleftwall,
+Cell(51,34): gray,nobaggle,notopwall,noleftwall,
+Cell(51,35): cyan,nobaggle,notopwall,noleftwall,
+Cell(51,36): black,nobaggle,notopwall,noleftwall,
+Cell(51,37): blue,nobaggle,notopwall,noleftwall,
+Cell(51,38): darkGray,nobaggle,notopwall,noleftwall,
+Cell(51,39): green,nobaggle,notopwall,noleftwall,
+Cell(51,40): blue,nobaggle,notopwall,noleftwall,
+Cell(51,49): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,50): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,51): pink,nobaggle,notopwall,noleftwall,
+Cell(51,52): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,53): pink,nobaggle,notopwall,noleftwall,
+Cell(51,54): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,55): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,72): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,73): lightGray,nobaggle,notopwall,noleftwall,
+Cell(51,74): darkGray,nobaggle,notopwall,noleftwall,
+Cell(51,75): magenta,nobaggle,notopwall,noleftwall,
+Cell(51,76): red,nobaggle,notopwall,noleftwall,
+Cell(51,77): red,nobaggle,notopwall,noleftwall,
+Cell(51,78): red,nobaggle,notopwall,noleftwall,
+Cell(51,79): red,nobaggle,notopwall,noleftwall,
+Cell(51,80): red,nobaggle,notopwall,noleftwall,
+Cell(51,81): red,nobaggle,notopwall,noleftwall,
+Cell(51,82): red,nobaggle,notopwall,noleftwall,
+Cell(51,83): red,nobaggle,notopwall,noleftwall,
+Cell(51,84): red,nobaggle,notopwall,noleftwall,
+Cell(51,85): red,nobaggle,notopwall,noleftwall,
+Cell(51,86): red,nobaggle,notopwall,noleftwall,
+Cell(51,87): orange,nobaggle,notopwall,noleftwall,
+Cell(51,88): blue,nobaggle,notopwall,noleftwall,
+Cell(52,13): black,nobaggle,notopwall,noleftwall,
+Cell(52,14): green,nobaggle,notopwall,noleftwall,
+Cell(52,15): red,nobaggle,notopwall,noleftwall,
+Cell(52,16): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,17): black,nobaggle,notopwall,noleftwall,
+Cell(52,18): green,nobaggle,notopwall,noleftwall,
+Cell(52,19): green,nobaggle,notopwall,noleftwall,
+Cell(52,20): blue,nobaggle,notopwall,noleftwall,
+Cell(52,21): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,22): magenta,nobaggle,notopwall,noleftwall,
+Cell(52,23): red,nobaggle,notopwall,noleftwall,
+Cell(52,24): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,25): magenta,nobaggle,notopwall,noleftwall,
+Cell(52,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(52,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,28): magenta,nobaggle,notopwall,noleftwall,
+Cell(52,29): red,nobaggle,notopwall,noleftwall,
+Cell(52,30): black,nobaggle,notopwall,noleftwall,
+Cell(52,31): green,nobaggle,notopwall,noleftwall,
+Cell(52,32): black,nobaggle,notopwall,noleftwall,
+Cell(52,33): blue,nobaggle,notopwall,noleftwall,
+Cell(52,35): gray,nobaggle,notopwall,noleftwall,
+Cell(52,36): orange,nobaggle,notopwall,noleftwall,
+Cell(52,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,38): pink,nobaggle,notopwall,noleftwall,
+Cell(52,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,40): lightGray,nobaggle,notopwall,noleftwall,
+Cell(52,41): lightGray,nobaggle,notopwall,noleftwall,
+Cell(52,46): lightGray,nobaggle,notopwall,noleftwall,
+Cell(52,47): lightGray,nobaggle,notopwall,noleftwall,
+Cell(52,48): pink,nobaggle,notopwall,noleftwall,
+Cell(52,49): lightGray,nobaggle,notopwall,noleftwall,
+Cell(52,50): pink,nobaggle,notopwall,noleftwall,
+Cell(52,51): lightGray,nobaggle,notopwall,noleftwall,
+Cell(52,52): lightGray,nobaggle,notopwall,noleftwall,
+Cell(52,75): pink,nobaggle,notopwall,noleftwall,
+Cell(52,76): darkGray,nobaggle,notopwall,noleftwall,
+Cell(52,77): gray,nobaggle,notopwall,noleftwall,
+Cell(52,78): gray,nobaggle,notopwall,noleftwall,
+Cell(52,79): red,nobaggle,notopwall,noleftwall,
+Cell(52,80): red,nobaggle,notopwall,noleftwall,
+Cell(52,81): red,nobaggle,notopwall,noleftwall,
+Cell(52,82): red,nobaggle,notopwall,noleftwall,
+Cell(52,83): red,nobaggle,notopwall,noleftwall,
+Cell(52,84): red,nobaggle,notopwall,noleftwall,
+Cell(52,85): red,nobaggle,notopwall,noleftwall,
+Cell(52,86): red,nobaggle,notopwall,noleftwall,
+Cell(52,87): orange,nobaggle,notopwall,noleftwall,
+Cell(52,88): blue,nobaggle,notopwall,noleftwall,
+Cell(53,7): black,nobaggle,notopwall,noleftwall,
+Cell(53,8): black,nobaggle,notopwall,noleftwall,
+Cell(53,9): black,nobaggle,notopwall,noleftwall,
+Cell(53,10): black,nobaggle,notopwall,noleftwall,
+Cell(53,13): black,nobaggle,notopwall,noleftwall,
+Cell(53,14): green,nobaggle,notopwall,noleftwall,
+Cell(53,15): magenta,nobaggle,notopwall,noleftwall,
+Cell(53,16): darkGray,nobaggle,notopwall,noleftwall,
+Cell(53,17): black,nobaggle,notopwall,noleftwall,
+Cell(53,18): green,nobaggle,notopwall,noleftwall,
+Cell(53,19): gray,nobaggle,notopwall,noleftwall,
+Cell(53,20): darkGray,nobaggle,notopwall,noleftwall,
+Cell(53,22): pink,nobaggle,notopwall,noleftwall,
+Cell(53,23): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,24): gray,nobaggle,notopwall,noleftwall,
+Cell(53,25): orange,nobaggle,notopwall,noleftwall,
+Cell(53,26): magenta,nobaggle,notopwall,noleftwall,
+Cell(53,27): green,nobaggle,notopwall,noleftwall,
+Cell(53,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,30): gray,nobaggle,notopwall,noleftwall,
+Cell(53,31): gray,nobaggle,notopwall,noleftwall,
+Cell(53,32): green,nobaggle,notopwall,noleftwall,
+Cell(53,33): blue,nobaggle,notopwall,noleftwall,
+Cell(53,34): green,nobaggle,notopwall,noleftwall,
+Cell(53,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(53,37): orange,nobaggle,notopwall,noleftwall,
+Cell(53,38): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,39): green,nobaggle,notopwall,noleftwall,
+Cell(53,40): pink,nobaggle,notopwall,noleftwall,
+Cell(53,42): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,45): pink,nobaggle,notopwall,noleftwall,
+Cell(53,46): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,47): pink,nobaggle,notopwall,noleftwall,
+Cell(53,48): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,49): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,76): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,77): lightGray,nobaggle,notopwall,noleftwall,
+Cell(53,78): darkGray,nobaggle,notopwall,noleftwall,
+Cell(53,79): magenta,nobaggle,notopwall,noleftwall,
+Cell(53,80): red,nobaggle,notopwall,noleftwall,
+Cell(53,81): red,nobaggle,notopwall,noleftwall,
+Cell(53,82): red,nobaggle,notopwall,noleftwall,
+Cell(53,83): red,nobaggle,notopwall,noleftwall,
+Cell(53,84): red,nobaggle,notopwall,noleftwall,
+Cell(53,85): red,nobaggle,notopwall,noleftwall,
+Cell(53,86): red,nobaggle,notopwall,noleftwall,
+Cell(53,87): orange,nobaggle,notopwall,noleftwall,
+Cell(53,88): blue,nobaggle,notopwall,noleftwall,
+Cell(54,6): black,nobaggle,notopwall,noleftwall,
+Cell(54,7): cyan,nobaggle,notopwall,noleftwall,
+Cell(54,8): orange,nobaggle,notopwall,noleftwall,
+Cell(54,9): green,nobaggle,notopwall,noleftwall,
+Cell(54,10): blue,nobaggle,notopwall,noleftwall,
+Cell(54,11): black,nobaggle,notopwall,noleftwall,
+Cell(54,12): black,nobaggle,notopwall,noleftwall,
+Cell(54,13): blue,nobaggle,notopwall,noleftwall,
+Cell(54,14): green,nobaggle,notopwall,noleftwall,
+Cell(54,15): red,nobaggle,notopwall,noleftwall,
+Cell(54,16): darkGray,nobaggle,notopwall,noleftwall,
+Cell(54,17): lightGray,nobaggle,notopwall,noleftwall,
+Cell(54,18): blue,nobaggle,notopwall,noleftwall,
+Cell(54,19): gray,nobaggle,notopwall,noleftwall,
+Cell(54,20): darkGray,nobaggle,notopwall,noleftwall,
+Cell(54,21): blue,nobaggle,notopwall,noleftwall,
+Cell(54,22): green,nobaggle,notopwall,noleftwall,
+Cell(54,23): gray,nobaggle,notopwall,noleftwall,
+Cell(54,24): green,nobaggle,notopwall,noleftwall,
+Cell(54,25): black,nobaggle,notopwall,noleftwall,
+Cell(54,26): blue,nobaggle,notopwall,noleftwall,
+Cell(54,27): lightGray,nobaggle,notopwall,noleftwall,
+Cell(54,28): blue,nobaggle,notopwall,noleftwall,
+Cell(54,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(54,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(54,31): gray,nobaggle,notopwall,noleftwall,
+Cell(54,32): green,nobaggle,notopwall,noleftwall,
+Cell(54,33): green,nobaggle,notopwall,noleftwall,
+Cell(54,34): green,nobaggle,notopwall,noleftwall,
+Cell(54,35): orange,nobaggle,notopwall,noleftwall,
+Cell(54,36): magenta,nobaggle,notopwall,noleftwall,
+Cell(54,37): pink,nobaggle,notopwall,noleftwall,
+Cell(54,38): red,nobaggle,notopwall,noleftwall,
+Cell(54,39): green,nobaggle,notopwall,noleftwall,
+Cell(54,40): blue,nobaggle,notopwall,noleftwall,
+Cell(54,43): lightGray,nobaggle,notopwall,noleftwall,
+Cell(54,44): darkGray,nobaggle,notopwall,noleftwall,
+Cell(54,45): lightGray,nobaggle,notopwall,noleftwall,
+Cell(54,46): lightGray,nobaggle,notopwall,noleftwall,
+Cell(54,79): pink,nobaggle,notopwall,noleftwall,
+Cell(54,80): darkGray,nobaggle,notopwall,noleftwall,
+Cell(54,81): gray,nobaggle,notopwall,noleftwall,
+Cell(54,82): gray,nobaggle,notopwall,noleftwall,
+Cell(54,83): red,nobaggle,notopwall,noleftwall,
+Cell(54,84): red,nobaggle,notopwall,noleftwall,
+Cell(54,85): red,nobaggle,notopwall,noleftwall,
+Cell(54,86): red,nobaggle,notopwall,noleftwall,
+Cell(54,87): orange,nobaggle,notopwall,noleftwall,
+Cell(54,88): blue,nobaggle,notopwall,noleftwall,
+Cell(55,5): black,nobaggle,notopwall,noleftwall,
+Cell(55,6): blue,nobaggle,notopwall,noleftwall,
+Cell(55,7): red,nobaggle,notopwall,noleftwall,
+Cell(55,8): gray,nobaggle,notopwall,noleftwall,
+Cell(55,9): red,nobaggle,notopwall,noleftwall,
+Cell(55,10): red,nobaggle,notopwall,noleftwall,
+Cell(55,11): red,nobaggle,notopwall,noleftwall,
+Cell(55,12): red,nobaggle,notopwall,noleftwall,
+Cell(55,13): red,nobaggle,notopwall,noleftwall,
+Cell(55,14): magenta,nobaggle,notopwall,noleftwall,
+Cell(55,15): gray,nobaggle,notopwall,noleftwall,
+Cell(55,16): darkGray,nobaggle,notopwall,noleftwall,
+Cell(55,17): lightGray,nobaggle,notopwall,noleftwall,
+Cell(55,19): pink,nobaggle,notopwall,noleftwall,
+Cell(55,20): green,nobaggle,notopwall,noleftwall,
+Cell(55,21): green,nobaggle,notopwall,noleftwall,
+Cell(55,23): pink,nobaggle,notopwall,noleftwall,
+Cell(55,24): magenta,nobaggle,notopwall,noleftwall,
+Cell(55,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(55,26): gray,nobaggle,notopwall,noleftwall,
+Cell(55,28): darkGray,nobaggle,notopwall,noleftwall,
+Cell(55,29): green,nobaggle,notopwall,noleftwall,
+Cell(55,30): green,nobaggle,notopwall,noleftwall,
+Cell(55,32): black,nobaggle,notopwall,noleftwall,
+Cell(55,33): gray,nobaggle,notopwall,noleftwall,
+Cell(55,34): red,nobaggle,notopwall,noleftwall,
+Cell(55,35): lightGray,nobaggle,notopwall,noleftwall,
+Cell(55,36): orange,nobaggle,notopwall,noleftwall,
+Cell(55,37): pink,nobaggle,notopwall,noleftwall,
+Cell(55,38): gray,nobaggle,notopwall,noleftwall,
+Cell(55,39): red,nobaggle,notopwall,noleftwall,
+Cell(55,40): black,nobaggle,notopwall,noleftwall,
+Cell(55,43): darkGray,nobaggle,notopwall,noleftwall,
+Cell(55,44): lightGray,nobaggle,notopwall,noleftwall,
+Cell(55,80): lightGray,nobaggle,notopwall,noleftwall,
+Cell(55,81): lightGray,nobaggle,notopwall,noleftwall,
+Cell(55,82): darkGray,nobaggle,notopwall,noleftwall,
+Cell(55,83): magenta,nobaggle,notopwall,noleftwall,
+Cell(55,84): red,nobaggle,notopwall,noleftwall,
+Cell(55,85): red,nobaggle,notopwall,noleftwall,
+Cell(55,86): red,nobaggle,notopwall,noleftwall,
+Cell(55,87): orange,nobaggle,notopwall,noleftwall,
+Cell(55,88): blue,nobaggle,notopwall,noleftwall,
+Cell(56,5): black,nobaggle,notopwall,noleftwall,
+Cell(56,6): green,nobaggle,notopwall,noleftwall,
+Cell(56,7): red,nobaggle,notopwall,noleftwall,
+Cell(56,8): gray,nobaggle,notopwall,noleftwall,
+Cell(56,9): gray,nobaggle,notopwall,noleftwall,
+Cell(56,10): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,11): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,12): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,13): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,14): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,15): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,16): lightGray,nobaggle,notopwall,noleftwall,
+Cell(56,17): gray,nobaggle,notopwall,noleftwall,
+Cell(56,18): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,19): black,nobaggle,notopwall,noleftwall,
+Cell(56,20): black,nobaggle,notopwall,noleftwall,
+Cell(56,21): lightGray,nobaggle,notopwall,noleftwall,
+Cell(56,22): gray,nobaggle,notopwall,noleftwall,
+Cell(56,23): black,nobaggle,notopwall,noleftwall,
+Cell(56,24): magenta,nobaggle,notopwall,noleftwall,
+Cell(56,25): pink,nobaggle,notopwall,noleftwall,
+Cell(56,26): magenta,nobaggle,notopwall,noleftwall,
+Cell(56,27): pink,nobaggle,notopwall,noleftwall,
+Cell(56,29): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,30): lightGray,nobaggle,notopwall,noleftwall,
+Cell(56,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(56,32): pink,nobaggle,notopwall,noleftwall,
+Cell(56,33): blue,nobaggle,notopwall,noleftwall,
+Cell(56,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(56,35): orange,nobaggle,notopwall,noleftwall,
+Cell(56,36): black,nobaggle,notopwall,noleftwall,
+Cell(56,37): lightGray,nobaggle,notopwall,noleftwall,
+Cell(56,39): orange,nobaggle,notopwall,noleftwall,
+Cell(56,40): lightGray,nobaggle,notopwall,noleftwall,
+Cell(56,42): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,44): black,nobaggle,notopwall,noleftwall,
+Cell(56,83): pink,nobaggle,notopwall,noleftwall,
+Cell(56,84): darkGray,nobaggle,notopwall,noleftwall,
+Cell(56,85): gray,nobaggle,notopwall,noleftwall,
+Cell(56,86): gray,nobaggle,notopwall,noleftwall,
+Cell(56,87): orange,nobaggle,notopwall,noleftwall,
+Cell(56,88): blue,nobaggle,notopwall,noleftwall,
+Cell(57,3): black,nobaggle,notopwall,noleftwall,
+Cell(57,4): black,nobaggle,notopwall,noleftwall,
+Cell(57,5): blue,nobaggle,notopwall,noleftwall,
+Cell(57,6): red,nobaggle,notopwall,noleftwall,
+Cell(57,7): gray,nobaggle,notopwall,noleftwall,
+Cell(57,8): darkGray,nobaggle,notopwall,noleftwall,
+Cell(57,9): lightGray,nobaggle,notopwall,noleftwall,
+Cell(57,10): lightGray,nobaggle,notopwall,noleftwall,
+Cell(57,11): pink,nobaggle,notopwall,noleftwall,
+Cell(57,12): pink,nobaggle,notopwall,noleftwall,
+Cell(57,13): black,nobaggle,notopwall,noleftwall,
+Cell(57,14): black,nobaggle,notopwall,noleftwall,
+Cell(57,15): black,nobaggle,notopwall,noleftwall,
+Cell(57,16): gray,nobaggle,notopwall,noleftwall,
+Cell(57,18): cyan,nobaggle,notopwall,noleftwall,
+Cell(57,19): orange,nobaggle,notopwall,noleftwall,
+Cell(57,21): green,nobaggle,notopwall,noleftwall,
+Cell(57,23): gray,nobaggle,notopwall,noleftwall,
+Cell(57,24): lightGray,nobaggle,notopwall,noleftwall,
+Cell(57,25): orange,nobaggle,notopwall,noleftwall,
+Cell(57,26): red,nobaggle,notopwall,noleftwall,
+Cell(57,27): lightGray,nobaggle,notopwall,noleftwall,
+Cell(57,28): red,nobaggle,notopwall,noleftwall,
+Cell(57,29): cyan,nobaggle,notopwall,noleftwall,
+Cell(57,31): black,nobaggle,notopwall,noleftwall,
+Cell(57,32): orange,nobaggle,notopwall,noleftwall,
+Cell(57,33): cyan,nobaggle,notopwall,noleftwall,
+Cell(57,34): blue,nobaggle,notopwall,noleftwall,
+Cell(57,35): pink,nobaggle,notopwall,noleftwall,
+Cell(57,36): red,nobaggle,notopwall,noleftwall,
+Cell(57,37): red,nobaggle,notopwall,noleftwall,
+Cell(57,38): blue,nobaggle,notopwall,noleftwall,
+Cell(57,39): cyan,nobaggle,notopwall,noleftwall,
+Cell(57,40): lightGray,nobaggle,notopwall,noleftwall,
+Cell(57,41): darkGray,nobaggle,notopwall,noleftwall,
+Cell(57,43): black,nobaggle,notopwall,noleftwall,
+Cell(57,84): lightGray,nobaggle,notopwall,noleftwall,
+Cell(57,85): lightGray,nobaggle,notopwall,noleftwall,
+Cell(57,86): gray,nobaggle,notopwall,noleftwall,
+Cell(57,87): orange,nobaggle,notopwall,noleftwall,
+Cell(57,88): blue,nobaggle,notopwall,noleftwall,
+Cell(58,3): black,nobaggle,notopwall,noleftwall,
+Cell(58,4): green,nobaggle,notopwall,noleftwall,
+Cell(58,5): red,nobaggle,notopwall,noleftwall,
+Cell(58,6): darkGray,nobaggle,notopwall,noleftwall,
+Cell(58,7): lightGray,nobaggle,notopwall,noleftwall,
+Cell(58,8): lightGray,nobaggle,notopwall,noleftwall,
+Cell(58,9): black,nobaggle,notopwall,noleftwall,
+Cell(58,10): black,nobaggle,notopwall,noleftwall,
+Cell(58,12): black,nobaggle,notopwall,noleftwall,
+Cell(58,13): green,nobaggle,notopwall,noleftwall,
+Cell(58,14): gray,nobaggle,notopwall,noleftwall,
+Cell(58,15): darkGray,nobaggle,notopwall,noleftwall,
+Cell(58,16): pink,nobaggle,notopwall,noleftwall,
+Cell(58,17): black,nobaggle,notopwall,noleftwall,
+Cell(58,18): orange,nobaggle,notopwall,noleftwall,
+Cell(58,19): orange,nobaggle,notopwall,noleftwall,
+Cell(58,20): darkGray,nobaggle,notopwall,noleftwall,
+Cell(58,21): red,nobaggle,notopwall,noleftwall,
+Cell(58,22): red,nobaggle,notopwall,noleftwall,
+Cell(58,23): pink,nobaggle,notopwall,noleftwall,
+Cell(58,24): darkGray,nobaggle,notopwall,noleftwall,
+Cell(58,25): blue,nobaggle,notopwall,noleftwall,
+Cell(58,26): pink,nobaggle,notopwall,noleftwall,
+Cell(58,27): blue,nobaggle,notopwall,noleftwall,
+Cell(58,28): red,nobaggle,notopwall,noleftwall,
+Cell(58,29): blue,nobaggle,notopwall,noleftwall,
+Cell(58,30): cyan,nobaggle,notopwall,noleftwall,
+Cell(58,31): red,nobaggle,notopwall,noleftwall,
+Cell(58,32): lightGray,nobaggle,notopwall,noleftwall,
+Cell(58,33): gray,nobaggle,notopwall,noleftwall,
+Cell(58,34): red,nobaggle,notopwall,noleftwall,
+Cell(58,35): red,nobaggle,notopwall,noleftwall,
+Cell(58,36): green,nobaggle,notopwall,noleftwall,
+Cell(58,37): green,nobaggle,notopwall,noleftwall,
+Cell(58,38): red,nobaggle,notopwall,noleftwall,
+Cell(58,39): red,nobaggle,notopwall,noleftwall,
+Cell(58,40): black,nobaggle,notopwall,noleftwall,
+Cell(58,41): black,nobaggle,notopwall,noleftwall,
+Cell(58,42): lightGray,nobaggle,notopwall,noleftwall,
+Cell(58,43): pink,nobaggle,notopwall,noleftwall,
+Cell(58,44): pink,nobaggle,notopwall,noleftwall,
+Cell(58,45): pink,nobaggle,notopwall,noleftwall,
+Cell(58,46): pink,nobaggle,notopwall,noleftwall,
+Cell(58,47): pink,nobaggle,notopwall,noleftwall,
+Cell(58,48): pink,nobaggle,notopwall,noleftwall,
+Cell(58,49): pink,nobaggle,notopwall,noleftwall,
+Cell(58,50): pink,nobaggle,notopwall,noleftwall,
+Cell(58,51): pink,nobaggle,notopwall,noleftwall,
+Cell(58,52): pink,nobaggle,notopwall,noleftwall,
+Cell(58,53): pink,nobaggle,notopwall,noleftwall,
+Cell(58,54): pink,nobaggle,notopwall,noleftwall,
+Cell(58,55): pink,nobaggle,notopwall,noleftwall,
+Cell(58,56): pink,nobaggle,notopwall,noleftwall,
+Cell(58,57): pink,nobaggle,notopwall,noleftwall,
+Cell(58,58): pink,nobaggle,notopwall,noleftwall,
+Cell(58,59): pink,nobaggle,notopwall,noleftwall,
+Cell(58,60): pink,nobaggle,notopwall,noleftwall,
+Cell(58,61): pink,nobaggle,notopwall,noleftwall,
+Cell(58,62): pink,nobaggle,notopwall,noleftwall,
+Cell(58,63): pink,nobaggle,notopwall,noleftwall,
+Cell(58,64): pink,nobaggle,notopwall,noleftwall,
+Cell(58,65): pink,nobaggle,notopwall,noleftwall,
+Cell(58,66): pink,nobaggle,notopwall,noleftwall,
+Cell(58,67): pink,nobaggle,notopwall,noleftwall,
+Cell(58,68): pink,nobaggle,notopwall,noleftwall,
+Cell(58,69): pink,nobaggle,notopwall,noleftwall,
+Cell(58,70): pink,nobaggle,notopwall,noleftwall,
+Cell(58,71): pink,nobaggle,notopwall,noleftwall,
+Cell(58,72): pink,nobaggle,notopwall,noleftwall,
+Cell(58,73): pink,nobaggle,notopwall,noleftwall,
+Cell(58,74): pink,nobaggle,notopwall,noleftwall,
+Cell(58,75): pink,nobaggle,notopwall,noleftwall,
+Cell(58,76): pink,nobaggle,notopwall,noleftwall,
+Cell(58,77): pink,nobaggle,notopwall,noleftwall,
+Cell(58,78): pink,nobaggle,notopwall,noleftwall,
+Cell(58,79): pink,nobaggle,notopwall,noleftwall,
+Cell(58,80): pink,nobaggle,notopwall,noleftwall,
+Cell(58,81): pink,nobaggle,notopwall,noleftwall,
+Cell(58,82): pink,nobaggle,notopwall,noleftwall,
+Cell(58,83): pink,nobaggle,notopwall,noleftwall,
+Cell(58,84): pink,nobaggle,notopwall,noleftwall,
+Cell(58,85): pink,nobaggle,notopwall,noleftwall,
+Cell(58,86): gray,nobaggle,notopwall,noleftwall,
+Cell(58,87): cyan,nobaggle,notopwall,noleftwall,
+Cell(58,88): blue,nobaggle,notopwall,noleftwall,
+Cell(59,3): black,nobaggle,notopwall,noleftwall,
+Cell(59,4): green,nobaggle,notopwall,noleftwall,
+Cell(59,5): magenta,nobaggle,notopwall,noleftwall,
+Cell(59,6): darkGray,nobaggle,notopwall,noleftwall,
+Cell(59,7): lightGray,nobaggle,notopwall,noleftwall,
+Cell(59,8): lightGray,nobaggle,notopwall,noleftwall,
+Cell(59,12): black,nobaggle,notopwall,noleftwall,
+Cell(59,13): blue,nobaggle,notopwall,noleftwall,
+Cell(59,14): gray,nobaggle,notopwall,noleftwall,
+Cell(59,16): darkGray,nobaggle,notopwall,noleftwall,
+Cell(59,18): red,nobaggle,notopwall,noleftwall,
+Cell(59,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(59,20): magenta,nobaggle,notopwall,noleftwall,
+Cell(59,21): gray,nobaggle,notopwall,noleftwall,
+Cell(59,22): red,nobaggle,notopwall,noleftwall,
+Cell(59,24): lightGray,nobaggle,notopwall,noleftwall,
+Cell(59,26): green,nobaggle,notopwall,noleftwall,
+Cell(59,28): magenta,nobaggle,notopwall,noleftwall,
+Cell(59,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(59,30): black,nobaggle,notopwall,noleftwall,
+Cell(59,31): gray,nobaggle,notopwall,noleftwall,
+Cell(59,32): black,nobaggle,notopwall,noleftwall,
+Cell(59,33): pink,nobaggle,notopwall,noleftwall,
+Cell(59,34): pink,nobaggle,notopwall,noleftwall,
+Cell(59,35): pink,nobaggle,notopwall,noleftwall,
+Cell(59,36): gray,nobaggle,notopwall,noleftwall,
+Cell(59,37): green,nobaggle,notopwall,noleftwall,
+Cell(59,38): darkGray,nobaggle,notopwall,noleftwall,
+Cell(59,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(59,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(59,41): orange,nobaggle,notopwall,noleftwall,
+Cell(59,42): pink,nobaggle,notopwall,noleftwall,
+Cell(59,43): gray,nobaggle,notopwall,noleftwall,
+Cell(59,44): red,nobaggle,notopwall,noleftwall,
+Cell(59,45): red,nobaggle,notopwall,noleftwall,
+Cell(59,46): red,nobaggle,notopwall,noleftwall,
+Cell(59,47): red,nobaggle,notopwall,noleftwall,
+Cell(59,48): red,nobaggle,notopwall,noleftwall,
+Cell(59,49): red,nobaggle,notopwall,noleftwall,
+Cell(59,50): red,nobaggle,notopwall,noleftwall,
+Cell(59,51): red,nobaggle,notopwall,noleftwall,
+Cell(59,52): red,nobaggle,notopwall,noleftwall,
+Cell(59,53): red,nobaggle,notopwall,noleftwall,
+Cell(59,54): red,nobaggle,notopwall,noleftwall,
+Cell(59,55): red,nobaggle,notopwall,noleftwall,
+Cell(59,56): red,nobaggle,notopwall,noleftwall,
+Cell(59,57): red,nobaggle,notopwall,noleftwall,
+Cell(59,58): red,nobaggle,notopwall,noleftwall,
+Cell(59,59): red,nobaggle,notopwall,noleftwall,
+Cell(59,60): red,nobaggle,notopwall,noleftwall,
+Cell(59,61): red,nobaggle,notopwall,noleftwall,
+Cell(59,62): red,nobaggle,notopwall,noleftwall,
+Cell(59,63): red,nobaggle,notopwall,noleftwall,
+Cell(59,64): red,nobaggle,notopwall,noleftwall,
+Cell(59,65): red,nobaggle,notopwall,noleftwall,
+Cell(59,66): red,nobaggle,notopwall,noleftwall,
+Cell(59,67): red,nobaggle,notopwall,noleftwall,
+Cell(59,68): red,nobaggle,notopwall,noleftwall,
+Cell(59,69): red,nobaggle,notopwall,noleftwall,
+Cell(59,70): red,nobaggle,notopwall,noleftwall,
+Cell(59,71): red,nobaggle,notopwall,noleftwall,
+Cell(59,72): red,nobaggle,notopwall,noleftwall,
+Cell(59,73): red,nobaggle,notopwall,noleftwall,
+Cell(59,74): red,nobaggle,notopwall,noleftwall,
+Cell(59,75): red,nobaggle,notopwall,noleftwall,
+Cell(59,76): red,nobaggle,notopwall,noleftwall,
+Cell(59,77): red,nobaggle,notopwall,noleftwall,
+Cell(59,78): red,nobaggle,notopwall,noleftwall,
+Cell(59,79): red,nobaggle,notopwall,noleftwall,
+Cell(59,80): red,nobaggle,notopwall,noleftwall,
+Cell(59,81): red,nobaggle,notopwall,noleftwall,
+Cell(59,82): red,nobaggle,notopwall,noleftwall,
+Cell(59,83): red,nobaggle,notopwall,noleftwall,
+Cell(59,84): red,nobaggle,notopwall,noleftwall,
+Cell(59,85): red,nobaggle,notopwall,noleftwall,
+Cell(59,86): orange,nobaggle,notopwall,noleftwall,
+Cell(59,87): blue,nobaggle,notopwall,noleftwall,
+Cell(60,3): black,nobaggle,notopwall,noleftwall,
+Cell(60,4): green,nobaggle,notopwall,noleftwall,
+Cell(60,5): red,nobaggle,notopwall,noleftwall,
+Cell(60,6): gray,nobaggle,notopwall,noleftwall,
+Cell(60,7): gray,nobaggle,notopwall,noleftwall,
+Cell(60,8): darkGray,nobaggle,notopwall,noleftwall,
+Cell(60,9): pink,nobaggle,notopwall,noleftwall,
+Cell(60,13): black,nobaggle,notopwall,noleftwall,
+Cell(60,14): green,nobaggle,notopwall,noleftwall,
+Cell(60,15): darkGray,nobaggle,notopwall,noleftwall,
+Cell(60,16): pink,nobaggle,notopwall,noleftwall,
+Cell(60,17): magenta,nobaggle,notopwall,noleftwall,
+Cell(60,18): darkGray,nobaggle,notopwall,noleftwall,
+Cell(60,19): blue,nobaggle,notopwall,noleftwall,
+Cell(60,20): green,nobaggle,notopwall,noleftwall,
+Cell(60,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(60,22): black,nobaggle,notopwall,noleftwall,
+Cell(60,24): black,nobaggle,notopwall,noleftwall,
+Cell(60,25): green,nobaggle,notopwall,noleftwall,
+Cell(60,26): gray,nobaggle,notopwall,noleftwall,
+Cell(60,27): magenta,nobaggle,notopwall,noleftwall,
+Cell(60,28): green,nobaggle,notopwall,noleftwall,
+Cell(60,29): lightGray,nobaggle,notopwall,noleftwall,
+Cell(60,30): green,nobaggle,notopwall,noleftwall,
+Cell(60,31): green,nobaggle,notopwall,noleftwall,
+Cell(60,32): green,nobaggle,notopwall,noleftwall,
+Cell(60,33): gray,nobaggle,notopwall,noleftwall,
+Cell(60,34): pink,nobaggle,notopwall,noleftwall,
+Cell(60,35): green,nobaggle,notopwall,noleftwall,
+Cell(60,36): gray,nobaggle,notopwall,noleftwall,
+Cell(60,37): green,nobaggle,notopwall,noleftwall,
+Cell(60,38): gray,nobaggle,notopwall,noleftwall,
+Cell(60,39): red,nobaggle,notopwall,noleftwall,
+Cell(60,41): black,nobaggle,notopwall,noleftwall,
+Cell(60,42): magenta,nobaggle,notopwall,noleftwall,
+Cell(60,43): orange,nobaggle,notopwall,noleftwall,
+Cell(60,44): blue,nobaggle,notopwall,noleftwall,
+Cell(60,45): blue,nobaggle,notopwall,noleftwall,
+Cell(60,46): blue,nobaggle,notopwall,noleftwall,
+Cell(60,47): blue,nobaggle,notopwall,noleftwall,
+Cell(60,48): blue,nobaggle,notopwall,noleftwall,
+Cell(60,49): blue,nobaggle,notopwall,noleftwall,
+Cell(60,50): blue,nobaggle,notopwall,noleftwall,
+Cell(60,51): blue,nobaggle,notopwall,noleftwall,
+Cell(60,52): blue,nobaggle,notopwall,noleftwall,
+Cell(60,53): blue,nobaggle,notopwall,noleftwall,
+Cell(60,54): blue,nobaggle,notopwall,noleftwall,
+Cell(60,55): blue,nobaggle,notopwall,noleftwall,
+Cell(60,56): blue,nobaggle,notopwall,noleftwall,
+Cell(60,57): blue,nobaggle,notopwall,noleftwall,
+Cell(60,58): blue,nobaggle,notopwall,noleftwall,
+Cell(60,59): blue,nobaggle,notopwall,noleftwall,
+Cell(60,60): blue,nobaggle,notopwall,noleftwall,
+Cell(60,61): blue,nobaggle,notopwall,noleftwall,
+Cell(60,62): blue,nobaggle,notopwall,noleftwall,
+Cell(60,63): blue,nobaggle,notopwall,noleftwall,
+Cell(60,64): blue,nobaggle,notopwall,noleftwall,
+Cell(60,65): blue,nobaggle,notopwall,noleftwall,
+Cell(60,66): blue,nobaggle,notopwall,noleftwall,
+Cell(60,67): blue,nobaggle,notopwall,noleftwall,
+Cell(60,68): blue,nobaggle,notopwall,noleftwall,
+Cell(60,69): blue,nobaggle,notopwall,noleftwall,
+Cell(60,70): blue,nobaggle,notopwall,noleftwall,
+Cell(60,71): blue,nobaggle,notopwall,noleftwall,
+Cell(60,72): blue,nobaggle,notopwall,noleftwall,
+Cell(60,73): blue,nobaggle,notopwall,noleftwall,
+Cell(60,74): blue,nobaggle,notopwall,noleftwall,
+Cell(60,75): blue,nobaggle,notopwall,noleftwall,
+Cell(60,76): blue,nobaggle,notopwall,noleftwall,
+Cell(60,77): blue,nobaggle,notopwall,noleftwall,
+Cell(60,78): blue,nobaggle,notopwall,noleftwall,
+Cell(60,79): blue,nobaggle,notopwall,noleftwall,
+Cell(60,80): blue,nobaggle,notopwall,noleftwall,
+Cell(60,81): blue,nobaggle,notopwall,noleftwall,
+Cell(60,82): blue,nobaggle,notopwall,noleftwall,
+Cell(60,83): blue,nobaggle,notopwall,noleftwall,
+Cell(60,84): blue,nobaggle,notopwall,noleftwall,
+Cell(60,85): blue,nobaggle,notopwall,noleftwall,
+Cell(60,86): blue,nobaggle,notopwall,noleftwall,
+Cell(61,3): black,nobaggle,notopwall,noleftwall,
+Cell(61,4): green,nobaggle,notopwall,noleftwall,
+Cell(61,5): red,nobaggle,notopwall,noleftwall,
+Cell(61,6): red,nobaggle,notopwall,noleftwall,
+Cell(61,7): red,nobaggle,notopwall,noleftwall,
+Cell(61,8): red,nobaggle,notopwall,noleftwall,
+Cell(61,9): magenta,nobaggle,notopwall,noleftwall,
+Cell(61,10): darkGray,nobaggle,notopwall,noleftwall,
+Cell(61,11): lightGray,nobaggle,notopwall,noleftwall,
+Cell(61,12): lightGray,nobaggle,notopwall,noleftwall,
+Cell(61,14): black,nobaggle,notopwall,noleftwall,
+Cell(61,15): green,nobaggle,notopwall,noleftwall,
+Cell(61,16): gray,nobaggle,notopwall,noleftwall,
+Cell(61,17): red,nobaggle,notopwall,noleftwall,
+Cell(61,18): magenta,nobaggle,notopwall,noleftwall,
+Cell(61,19): red,nobaggle,notopwall,noleftwall,
+Cell(61,20): red,nobaggle,notopwall,noleftwall,
+Cell(61,21): lightGray,nobaggle,notopwall,noleftwall,
+Cell(61,22): green,nobaggle,notopwall,noleftwall,
+Cell(61,23): gray,nobaggle,notopwall,noleftwall,
+Cell(61,24): pink,nobaggle,notopwall,noleftwall,
+Cell(61,25): green,nobaggle,notopwall,noleftwall,
+Cell(61,26): magenta,nobaggle,notopwall,noleftwall,
+Cell(61,27): pink,nobaggle,notopwall,noleftwall,
+Cell(61,28): red,nobaggle,notopwall,noleftwall,
+Cell(61,29): blue,nobaggle,notopwall,noleftwall,
+Cell(61,30): black,nobaggle,notopwall,noleftwall,
+Cell(61,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(61,32): gray,nobaggle,notopwall,noleftwall,
+Cell(61,33): lightGray,nobaggle,notopwall,noleftwall,
+Cell(61,35): gray,nobaggle,notopwall,noleftwall,
+Cell(61,37): lightGray,nobaggle,notopwall,noleftwall,
+Cell(61,38): orange,nobaggle,notopwall,noleftwall,
+Cell(61,39): green,nobaggle,notopwall,noleftwall,
+Cell(61,40): lightGray,nobaggle,notopwall,noleftwall,
+Cell(61,41): black,nobaggle,notopwall,noleftwall,
+Cell(61,42): magenta,nobaggle,notopwall,noleftwall,
+Cell(61,43): orange,nobaggle,notopwall,noleftwall,
+Cell(61,44): blue,nobaggle,notopwall,noleftwall,
+Cell(62,3): black,nobaggle,notopwall,noleftwall,
+Cell(62,4): green,nobaggle,notopwall,noleftwall,
+Cell(62,5): red,nobaggle,notopwall,noleftwall,
+Cell(62,6): red,nobaggle,notopwall,noleftwall,
+Cell(62,7): red,nobaggle,notopwall,noleftwall,
+Cell(62,8): red,nobaggle,notopwall,noleftwall,
+Cell(62,9): red,nobaggle,notopwall,noleftwall,
+Cell(62,10): gray,nobaggle,notopwall,noleftwall,
+Cell(62,11): gray,nobaggle,notopwall,noleftwall,
+Cell(62,12): darkGray,nobaggle,notopwall,noleftwall,
+Cell(62,13): pink,nobaggle,notopwall,noleftwall,
+Cell(62,14): lightGray,nobaggle,notopwall,noleftwall,
+Cell(62,15): blue,nobaggle,notopwall,noleftwall,
+Cell(62,17): blue,nobaggle,notopwall,noleftwall,
+Cell(62,18): green,nobaggle,notopwall,noleftwall,
+Cell(62,19): blue,nobaggle,notopwall,noleftwall,
+Cell(62,20): black,nobaggle,notopwall,noleftwall,
+Cell(62,21): gray,nobaggle,notopwall,noleftwall,
+Cell(62,22): black,nobaggle,notopwall,noleftwall,
+Cell(62,24): pink,nobaggle,notopwall,noleftwall,
+Cell(62,26): red,nobaggle,notopwall,noleftwall,
+Cell(62,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(62,28): gray,nobaggle,notopwall,noleftwall,
+Cell(62,29): blue,nobaggle,notopwall,noleftwall,
+Cell(62,30): green,nobaggle,notopwall,noleftwall,
+Cell(62,31): blue,nobaggle,notopwall,noleftwall,
+Cell(62,32): darkGray,nobaggle,notopwall,noleftwall,
+Cell(62,33): lightGray,nobaggle,notopwall,noleftwall,
+Cell(62,34): pink,nobaggle,notopwall,noleftwall,
+Cell(62,35): gray,nobaggle,notopwall,noleftwall,
+Cell(62,36): blue,nobaggle,notopwall,noleftwall,
+Cell(62,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(62,38): magenta,nobaggle,notopwall,noleftwall,
+Cell(62,39): red,nobaggle,notopwall,noleftwall,
+Cell(62,40): orange,nobaggle,notopwall,noleftwall,
+Cell(62,41): orange,nobaggle,notopwall,noleftwall,
+Cell(62,43): red,nobaggle,notopwall,noleftwall,
+Cell(62,44): blue,nobaggle,notopwall,noleftwall,
+Cell(63,3): black,nobaggle,notopwall,noleftwall,
+Cell(63,4): green,nobaggle,notopwall,noleftwall,
+Cell(63,5): red,nobaggle,notopwall,noleftwall,
+Cell(63,6): red,nobaggle,notopwall,noleftwall,
+Cell(63,7): red,nobaggle,notopwall,noleftwall,
+Cell(63,8): red,nobaggle,notopwall,noleftwall,
+Cell(63,9): red,nobaggle,notopwall,noleftwall,
+Cell(63,10): red,nobaggle,notopwall,noleftwall,
+Cell(63,11): red,nobaggle,notopwall,noleftwall,
+Cell(63,12): red,nobaggle,notopwall,noleftwall,
+Cell(63,13): magenta,nobaggle,notopwall,noleftwall,
+Cell(63,14): pink,nobaggle,notopwall,noleftwall,
+Cell(63,15): lightGray,nobaggle,notopwall,noleftwall,
+Cell(63,16): black,nobaggle,notopwall,noleftwall,
+Cell(63,17): lightGray,nobaggle,notopwall,noleftwall,
+Cell(63,18): lightGray,nobaggle,notopwall,noleftwall,
+Cell(63,20): black,nobaggle,notopwall,noleftwall,
+Cell(63,21): gray,nobaggle,notopwall,noleftwall,
+Cell(63,22): darkGray,nobaggle,notopwall,noleftwall,
+Cell(63,24): pink,nobaggle,notopwall,noleftwall,
+Cell(63,25): green,nobaggle,notopwall,noleftwall,
+Cell(63,26): gray,nobaggle,notopwall,noleftwall,
+Cell(63,28): lightGray,nobaggle,notopwall,noleftwall,
+Cell(63,29): blue,nobaggle,notopwall,noleftwall,
+Cell(63,30): green,nobaggle,notopwall,noleftwall,
+Cell(63,31): gray,nobaggle,notopwall,noleftwall,
+Cell(63,32): orange,nobaggle,notopwall,noleftwall,
+Cell(63,33): orange,nobaggle,notopwall,noleftwall,
+Cell(63,34): lightGray,nobaggle,notopwall,noleftwall,
+Cell(63,36): gray,nobaggle,notopwall,noleftwall,
+Cell(63,37): green,nobaggle,notopwall,noleftwall,
+Cell(63,38): blue,nobaggle,notopwall,noleftwall,
+Cell(63,39): blue,nobaggle,notopwall,noleftwall,
+Cell(63,40): darkGray,nobaggle,notopwall,noleftwall,
+Cell(63,41): darkGray,nobaggle,notopwall,noleftwall,
+Cell(63,42): magenta,nobaggle,notopwall,noleftwall,
+Cell(63,43): green,nobaggle,notopwall,noleftwall,
+Cell(63,44): black,nobaggle,notopwall,noleftwall,
+Cell(64,3): black,nobaggle,notopwall,noleftwall,
+Cell(64,4): green,nobaggle,notopwall,noleftwall,
+Cell(64,5): red,nobaggle,notopwall,noleftwall,
+Cell(64,6): red,nobaggle,notopwall,noleftwall,
+Cell(64,7): red,nobaggle,notopwall,noleftwall,
+Cell(64,8): red,nobaggle,notopwall,noleftwall,
+Cell(64,9): red,nobaggle,notopwall,noleftwall,
+Cell(64,10): red,nobaggle,notopwall,noleftwall,
+Cell(64,11): red,nobaggle,notopwall,noleftwall,
+Cell(64,12): red,nobaggle,notopwall,noleftwall,
+Cell(64,13): magenta,nobaggle,notopwall,noleftwall,
+Cell(64,14): pink,nobaggle,notopwall,noleftwall,
+Cell(64,15): lightGray,nobaggle,notopwall,noleftwall,
+Cell(64,17): blue,nobaggle,notopwall,noleftwall,
+Cell(64,18): lightGray,nobaggle,notopwall,noleftwall,
+Cell(64,19): pink,nobaggle,notopwall,noleftwall,
+Cell(64,22): pink,nobaggle,notopwall,noleftwall,
+Cell(64,23): lightGray,nobaggle,notopwall,noleftwall,
+Cell(64,24): pink,nobaggle,notopwall,noleftwall,
+Cell(64,25): pink,nobaggle,notopwall,noleftwall,
+Cell(64,26): green,nobaggle,notopwall,noleftwall,
+Cell(64,27): darkGray,nobaggle,notopwall,noleftwall,
+Cell(64,28): blue,nobaggle,notopwall,noleftwall,
+Cell(64,29): gray,nobaggle,notopwall,noleftwall,
+Cell(64,30): gray,nobaggle,notopwall,noleftwall,
+Cell(64,31): cyan,nobaggle,notopwall,noleftwall,
+Cell(64,32): pink,nobaggle,notopwall,noleftwall,
+Cell(64,34): cyan,nobaggle,notopwall,noleftwall,
+Cell(64,35): red,nobaggle,notopwall,noleftwall,
+Cell(64,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(64,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(64,38): darkGray,nobaggle,notopwall,noleftwall,
+Cell(64,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(64,40): green,nobaggle,notopwall,noleftwall,
+Cell(64,41): cyan,nobaggle,notopwall,noleftwall,
+Cell(64,42): blue,nobaggle,notopwall,noleftwall,
+Cell(64,43): black,nobaggle,notopwall,noleftwall,
+Cell(64,44): black,nobaggle,notopwall,noleftwall,
+Cell(65,3): black,nobaggle,notopwall,noleftwall,
+Cell(65,4): green,nobaggle,notopwall,noleftwall,
+Cell(65,5): red,nobaggle,notopwall,noleftwall,
+Cell(65,6): red,nobaggle,notopwall,noleftwall,
+Cell(65,7): red,nobaggle,notopwall,noleftwall,
+Cell(65,8): red,nobaggle,notopwall,noleftwall,
+Cell(65,9): red,nobaggle,notopwall,noleftwall,
+Cell(65,10): red,nobaggle,notopwall,noleftwall,
+Cell(65,11): red,nobaggle,notopwall,noleftwall,
+Cell(65,12): red,nobaggle,notopwall,noleftwall,
+Cell(65,13): magenta,nobaggle,notopwall,noleftwall,
+Cell(65,16): lightGray,nobaggle,notopwall,noleftwall,
+Cell(65,17): black,nobaggle,notopwall,noleftwall,
+Cell(65,18): blue,nobaggle,notopwall,noleftwall,
+Cell(65,19): lightGray,nobaggle,notopwall,noleftwall,
+Cell(65,20): darkGray,nobaggle,notopwall,noleftwall,
+Cell(65,21): pink,nobaggle,notopwall,noleftwall,
+Cell(65,23): black,nobaggle,notopwall,noleftwall,
+Cell(65,25): black,nobaggle,notopwall,noleftwall,
+Cell(65,26): darkGray,nobaggle,notopwall,noleftwall,
+Cell(65,27): blue,nobaggle,notopwall,noleftwall,
+Cell(65,28): black,nobaggle,notopwall,noleftwall,
+Cell(65,29): blue,nobaggle,notopwall,noleftwall,
+Cell(65,31): orange,nobaggle,notopwall,noleftwall,
+Cell(65,32): cyan,nobaggle,notopwall,noleftwall,
+Cell(65,33): red,nobaggle,notopwall,noleftwall,
+Cell(65,34): red,nobaggle,notopwall,noleftwall,
+Cell(65,35): red,nobaggle,notopwall,noleftwall,
+Cell(65,36): cyan,nobaggle,notopwall,noleftwall,
+Cell(65,37): pink,nobaggle,notopwall,noleftwall,
+Cell(65,38): pink,nobaggle,notopwall,noleftwall,
+Cell(65,39): darkGray,nobaggle,notopwall,noleftwall,
+Cell(65,40): orange,nobaggle,notopwall,noleftwall,
+Cell(65,41): blue,nobaggle,notopwall,noleftwall,
+Cell(66,3): black,nobaggle,notopwall,noleftwall,
+Cell(66,4): green,nobaggle,notopwall,noleftwall,
+Cell(66,5): red,nobaggle,notopwall,noleftwall,
+Cell(66,6): red,nobaggle,notopwall,noleftwall,
+Cell(66,7): red,nobaggle,notopwall,noleftwall,
+Cell(66,8): red,nobaggle,notopwall,noleftwall,
+Cell(66,9): red,nobaggle,notopwall,noleftwall,
+Cell(66,10): red,nobaggle,notopwall,noleftwall,
+Cell(66,11): red,nobaggle,notopwall,noleftwall,
+Cell(66,12): red,nobaggle,notopwall,noleftwall,
+Cell(66,13): magenta,nobaggle,notopwall,noleftwall,
+Cell(66,14): lightGray,nobaggle,notopwall,noleftwall,
+Cell(66,15): black,nobaggle,notopwall,noleftwall,
+Cell(66,16): blue,nobaggle,notopwall,noleftwall,
+Cell(66,17): orange,nobaggle,notopwall,noleftwall,
+Cell(66,18): red,nobaggle,notopwall,noleftwall,
+Cell(66,19): blue,nobaggle,notopwall,noleftwall,
+Cell(66,20): black,nobaggle,notopwall,noleftwall,
+Cell(66,21): pink,nobaggle,notopwall,noleftwall,
+Cell(66,22): lightGray,nobaggle,notopwall,noleftwall,
+Cell(66,24): blue,nobaggle,notopwall,noleftwall,
+Cell(66,25): red,nobaggle,notopwall,noleftwall,
+Cell(66,26): magenta,nobaggle,notopwall,noleftwall,
+Cell(66,27): blue,nobaggle,notopwall,noleftwall,
+Cell(66,28): green,nobaggle,notopwall,noleftwall,
+Cell(66,29): black,nobaggle,notopwall,noleftwall,
+Cell(66,30): green,nobaggle,notopwall,noleftwall,
+Cell(66,31): pink,nobaggle,notopwall,noleftwall,
+Cell(66,32): lightGray,nobaggle,notopwall,noleftwall,
+Cell(66,34): black,nobaggle,notopwall,noleftwall,
+Cell(66,35): black,nobaggle,notopwall,noleftwall,
+Cell(66,36): blue,nobaggle,notopwall,noleftwall,
+Cell(66,37): green,nobaggle,notopwall,noleftwall,
+Cell(66,39): lightGray,nobaggle,notopwall,noleftwall,
+Cell(66,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(66,41): black,nobaggle,notopwall,noleftwall,
+Cell(67,3): black,nobaggle,notopwall,noleftwall,
+Cell(67,4): green,nobaggle,notopwall,noleftwall,
+Cell(67,5): red,nobaggle,notopwall,noleftwall,
+Cell(67,6): red,nobaggle,notopwall,noleftwall,
+Cell(67,7): red,nobaggle,notopwall,noleftwall,
+Cell(67,8): red,nobaggle,notopwall,noleftwall,
+Cell(67,9): red,nobaggle,notopwall,noleftwall,
+Cell(67,10): red,nobaggle,notopwall,noleftwall,
+Cell(67,11): red,nobaggle,notopwall,noleftwall,
+Cell(67,12): darkGray,nobaggle,notopwall,noleftwall,
+Cell(67,13): pink,nobaggle,notopwall,noleftwall,
+Cell(67,14): pink,nobaggle,notopwall,noleftwall,
+Cell(67,15): blue,nobaggle,notopwall,noleftwall,
+Cell(67,16): red,nobaggle,notopwall,noleftwall,
+Cell(67,17): gray,nobaggle,notopwall,noleftwall,
+Cell(67,18): orange,nobaggle,notopwall,noleftwall,
+Cell(67,19): green,nobaggle,notopwall,noleftwall,
+Cell(67,20): black,nobaggle,notopwall,noleftwall,
+Cell(67,21): gray,nobaggle,notopwall,noleftwall,
+Cell(67,22): green,nobaggle,notopwall,noleftwall,
+Cell(67,23): lightGray,nobaggle,notopwall,noleftwall,
+Cell(67,24): gray,nobaggle,notopwall,noleftwall,
+Cell(67,25): cyan,nobaggle,notopwall,noleftwall,
+Cell(67,26): cyan,nobaggle,notopwall,noleftwall,
+Cell(67,27): pink,nobaggle,notopwall,noleftwall,
+Cell(67,29): darkGray,nobaggle,notopwall,noleftwall,
+Cell(67,30): green,nobaggle,notopwall,noleftwall,
+Cell(67,31): pink,nobaggle,notopwall,noleftwall,
+Cell(67,32): gray,nobaggle,notopwall,noleftwall,
+Cell(67,33): darkGray,nobaggle,notopwall,noleftwall,
+Cell(67,34): pink,nobaggle,notopwall,noleftwall,
+Cell(67,36): darkGray,nobaggle,notopwall,noleftwall,
+Cell(67,37): darkGray,nobaggle,notopwall,noleftwall,
+Cell(67,38): magenta,nobaggle,notopwall,noleftwall,
+Cell(67,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(67,40): magenta,nobaggle,notopwall,noleftwall,
+Cell(67,41): black,nobaggle,notopwall,noleftwall,
+Cell(68,3): black,nobaggle,notopwall,noleftwall,
+Cell(68,4): green,nobaggle,notopwall,noleftwall,
+Cell(68,5): red,nobaggle,notopwall,noleftwall,
+Cell(68,6): red,nobaggle,notopwall,noleftwall,
+Cell(68,7): red,nobaggle,notopwall,noleftwall,
+Cell(68,8): red,nobaggle,notopwall,noleftwall,
+Cell(68,9): red,nobaggle,notopwall,noleftwall,
+Cell(68,10): red,nobaggle,notopwall,noleftwall,
+Cell(68,11): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,12): pink,nobaggle,notopwall,noleftwall,
+Cell(68,13): black,nobaggle,notopwall,noleftwall,
+Cell(68,15): orange,nobaggle,notopwall,noleftwall,
+Cell(68,16): pink,nobaggle,notopwall,noleftwall,
+Cell(68,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(68,20): darkGray,nobaggle,notopwall,noleftwall,
+Cell(68,21): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,22): red,nobaggle,notopwall,noleftwall,
+Cell(68,23): pink,nobaggle,notopwall,noleftwall,
+Cell(68,24): green,nobaggle,notopwall,noleftwall,
+Cell(68,25): lightGray,nobaggle,notopwall,noleftwall,
+Cell(68,26): lightGray,nobaggle,notopwall,noleftwall,
+Cell(68,27): red,nobaggle,notopwall,noleftwall,
+Cell(68,28): orange,nobaggle,notopwall,noleftwall,
+Cell(68,29): black,nobaggle,notopwall,noleftwall,
+Cell(68,30): black,nobaggle,notopwall,noleftwall,
+Cell(68,31): lightGray,nobaggle,notopwall,noleftwall,
+Cell(68,32): gray,nobaggle,notopwall,noleftwall,
+Cell(68,33): red,nobaggle,notopwall,noleftwall,
+Cell(68,34): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,35): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,36): red,nobaggle,notopwall,noleftwall,
+Cell(68,37): red,nobaggle,notopwall,noleftwall,
+Cell(68,38): gray,nobaggle,notopwall,noleftwall,
+Cell(68,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(68,40): red,nobaggle,notopwall,noleftwall,
+Cell(68,41): black,nobaggle,notopwall,noleftwall,
+Cell(69,3): black,nobaggle,notopwall,noleftwall,
+Cell(69,4): green,nobaggle,notopwall,noleftwall,
+Cell(69,5): red,nobaggle,notopwall,noleftwall,
+Cell(69,6): red,nobaggle,notopwall,noleftwall,
+Cell(69,7): red,nobaggle,notopwall,noleftwall,
+Cell(69,8): red,nobaggle,notopwall,noleftwall,
+Cell(69,9): red,nobaggle,notopwall,noleftwall,
+Cell(69,10): darkGray,nobaggle,notopwall,noleftwall,
+Cell(69,11): pink,nobaggle,notopwall,noleftwall,
+Cell(69,12): lightGray,nobaggle,notopwall,noleftwall,
+Cell(69,13): black,nobaggle,notopwall,noleftwall,
+Cell(69,14): blue,nobaggle,notopwall,noleftwall,
+Cell(69,15): red,nobaggle,notopwall,noleftwall,
+Cell(69,16): red,nobaggle,notopwall,noleftwall,
+Cell(69,17): lightGray,nobaggle,notopwall,noleftwall,
+Cell(69,18): darkGray,nobaggle,notopwall,noleftwall,
+Cell(69,19): pink,nobaggle,notopwall,noleftwall,
+Cell(69,20): magenta,nobaggle,notopwall,noleftwall,
+Cell(69,21): darkGray,nobaggle,notopwall,noleftwall,
+Cell(69,22): gray,nobaggle,notopwall,noleftwall,
+Cell(69,23): red,nobaggle,notopwall,noleftwall,
+Cell(69,24): darkGray,nobaggle,notopwall,noleftwall,
+Cell(69,25): darkGray,nobaggle,notopwall,noleftwall,
+Cell(69,26): magenta,nobaggle,notopwall,noleftwall,
+Cell(69,27): lightGray,nobaggle,notopwall,noleftwall,
+Cell(69,28): cyan,nobaggle,notopwall,noleftwall,
+Cell(69,29): black,nobaggle,notopwall,noleftwall,
+Cell(69,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(69,31): gray,nobaggle,notopwall,noleftwall,
+Cell(69,32): gray,nobaggle,notopwall,noleftwall,
+Cell(69,33): red,nobaggle,notopwall,noleftwall,
+Cell(69,34): red,nobaggle,notopwall,noleftwall,
+Cell(69,35): red,nobaggle,notopwall,noleftwall,
+Cell(69,36): red,nobaggle,notopwall,noleftwall,
+Cell(69,37): magenta,nobaggle,notopwall,noleftwall,
+Cell(69,38): red,nobaggle,notopwall,noleftwall,
+Cell(69,39): gray,nobaggle,notopwall,noleftwall,
+Cell(69,40): red,nobaggle,notopwall,noleftwall,
+Cell(69,41): blue,nobaggle,notopwall,noleftwall,
+Cell(69,42): black,nobaggle,notopwall,noleftwall,
+Cell(70,3): black,nobaggle,notopwall,noleftwall,
+Cell(70,4): green,nobaggle,notopwall,noleftwall,
+Cell(70,5): red,nobaggle,notopwall,noleftwall,
+Cell(70,6): red,nobaggle,notopwall,noleftwall,
+Cell(70,7): red,nobaggle,notopwall,noleftwall,
+Cell(70,8): red,nobaggle,notopwall,noleftwall,
+Cell(70,9): red,nobaggle,notopwall,noleftwall,
+Cell(70,10): darkGray,nobaggle,notopwall,noleftwall,
+Cell(70,11): blue,nobaggle,notopwall,noleftwall,
+Cell(70,12): lightGray,nobaggle,notopwall,noleftwall,
+Cell(70,13): darkGray,nobaggle,notopwall,noleftwall,
+Cell(70,14): pink,nobaggle,notopwall,noleftwall,
+Cell(70,15): lightGray,nobaggle,notopwall,noleftwall,
+Cell(70,16): pink,nobaggle,notopwall,noleftwall,
+Cell(70,17): pink,nobaggle,notopwall,noleftwall,
+Cell(70,18): pink,nobaggle,notopwall,noleftwall,
+Cell(70,19): darkGray,nobaggle,notopwall,noleftwall,
+Cell(70,20): magenta,nobaggle,notopwall,noleftwall,
+Cell(70,21): red,nobaggle,notopwall,noleftwall,
+Cell(70,22): red,nobaggle,notopwall,noleftwall,
+Cell(70,23): red,nobaggle,notopwall,noleftwall,
+Cell(70,24): gray,nobaggle,notopwall,noleftwall,
+Cell(70,25): red,nobaggle,notopwall,noleftwall,
+Cell(70,26): green,nobaggle,notopwall,noleftwall,
+Cell(70,27): orange,nobaggle,notopwall,noleftwall,
+Cell(70,28): pink,nobaggle,notopwall,noleftwall,
+Cell(70,29): black,nobaggle,notopwall,noleftwall,
+Cell(70,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(70,31): red,nobaggle,notopwall,noleftwall,
+Cell(70,32): red,nobaggle,notopwall,noleftwall,
+Cell(70,33): red,nobaggle,notopwall,noleftwall,
+Cell(70,34): red,nobaggle,notopwall,noleftwall,
+Cell(70,35): red,nobaggle,notopwall,noleftwall,
+Cell(70,36): red,nobaggle,notopwall,noleftwall,
+Cell(70,37): red,nobaggle,notopwall,noleftwall,
+Cell(70,38): red,nobaggle,notopwall,noleftwall,
+Cell(70,39): red,nobaggle,notopwall,noleftwall,
+Cell(70,40): gray,nobaggle,notopwall,noleftwall,
+Cell(70,41): green,nobaggle,notopwall,noleftwall,
+Cell(70,42): black,nobaggle,notopwall,noleftwall,
+Cell(71,3): black,nobaggle,notopwall,noleftwall,
+Cell(71,4): green,nobaggle,notopwall,noleftwall,
+Cell(71,5): red,nobaggle,notopwall,noleftwall,
+Cell(71,6): red,nobaggle,notopwall,noleftwall,
+Cell(71,7): red,nobaggle,notopwall,noleftwall,
+Cell(71,8): red,nobaggle,notopwall,noleftwall,
+Cell(71,9): red,nobaggle,notopwall,noleftwall,
+Cell(71,10): darkGray,nobaggle,notopwall,noleftwall,
+Cell(71,12): black,nobaggle,notopwall,noleftwall,
+Cell(71,13): gray,nobaggle,notopwall,noleftwall,
+Cell(71,14): cyan,nobaggle,notopwall,noleftwall,
+Cell(71,15): orange,nobaggle,notopwall,noleftwall,
+Cell(71,16): gray,nobaggle,notopwall,noleftwall,
+Cell(71,17): darkGray,nobaggle,notopwall,noleftwall,
+Cell(71,18): magenta,nobaggle,notopwall,noleftwall,
+Cell(71,19): magenta,nobaggle,notopwall,noleftwall,
+Cell(71,20): magenta,nobaggle,notopwall,noleftwall,
+Cell(71,21): red,nobaggle,notopwall,noleftwall,
+Cell(71,22): red,nobaggle,notopwall,noleftwall,
+Cell(71,23): magenta,nobaggle,notopwall,noleftwall,
+Cell(71,24): red,nobaggle,notopwall,noleftwall,
+Cell(71,25): blue,nobaggle,notopwall,noleftwall,
+Cell(71,26): black,nobaggle,notopwall,noleftwall,
+Cell(71,27): cyan,nobaggle,notopwall,noleftwall,
+Cell(71,28): orange,nobaggle,notopwall,noleftwall,
+Cell(71,29): red,nobaggle,notopwall,noleftwall,
+Cell(71,30): darkGray,nobaggle,notopwall,noleftwall,
+Cell(71,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(71,32): red,nobaggle,notopwall,noleftwall,
+Cell(71,33): red,nobaggle,notopwall,noleftwall,
+Cell(71,34): red,nobaggle,notopwall,noleftwall,
+Cell(71,35): red,nobaggle,notopwall,noleftwall,
+Cell(71,36): red,nobaggle,notopwall,noleftwall,
+Cell(71,37): red,nobaggle,notopwall,noleftwall,
+Cell(71,38): red,nobaggle,notopwall,noleftwall,
+Cell(71,39): magenta,nobaggle,notopwall,noleftwall,
+Cell(71,40): red,nobaggle,notopwall,noleftwall,
+Cell(71,41): cyan,nobaggle,notopwall,noleftwall,
+Cell(71,42): black,nobaggle,notopwall,noleftwall,
+Cell(72,3): black,nobaggle,notopwall,noleftwall,
+Cell(72,4): green,nobaggle,notopwall,noleftwall,
+Cell(72,5): red,nobaggle,notopwall,noleftwall,
+Cell(72,6): red,nobaggle,notopwall,noleftwall,
+Cell(72,7): red,nobaggle,notopwall,noleftwall,
+Cell(72,8): red,nobaggle,notopwall,noleftwall,
+Cell(72,9): magenta,nobaggle,notopwall,noleftwall,
+Cell(72,10): darkGray,nobaggle,notopwall,noleftwall,
+Cell(72,11): blue,nobaggle,notopwall,noleftwall,
+Cell(72,12): green,nobaggle,notopwall,noleftwall,
+Cell(72,14): magenta,nobaggle,notopwall,noleftwall,
+Cell(72,15): gray,nobaggle,notopwall,noleftwall,
+Cell(72,16): magenta,nobaggle,notopwall,noleftwall,
+Cell(72,17): red,nobaggle,notopwall,noleftwall,
+Cell(72,18): gray,nobaggle,notopwall,noleftwall,
+Cell(72,19): magenta,nobaggle,notopwall,noleftwall,
+Cell(72,20): red,nobaggle,notopwall,noleftwall,
+Cell(72,21): red,nobaggle,notopwall,noleftwall,
+Cell(72,22): red,nobaggle,notopwall,noleftwall,
+Cell(72,23): red,nobaggle,notopwall,noleftwall,
+Cell(72,24): red,nobaggle,notopwall,noleftwall,
+Cell(72,25): blue,nobaggle,notopwall,noleftwall,
+Cell(72,27): black,nobaggle,notopwall,noleftwall,
+Cell(72,28): black,nobaggle,notopwall,noleftwall,
+Cell(72,29): blue,nobaggle,notopwall,noleftwall,
+Cell(72,30): red,nobaggle,notopwall,noleftwall,
+Cell(72,31): magenta,nobaggle,notopwall,noleftwall,
+Cell(72,32): red,nobaggle,notopwall,noleftwall,
+Cell(72,33): red,nobaggle,notopwall,noleftwall,
+Cell(72,34): red,nobaggle,notopwall,noleftwall,
+Cell(72,35): red,nobaggle,notopwall,noleftwall,
+Cell(72,36): red,nobaggle,notopwall,noleftwall,
+Cell(72,37): red,nobaggle,notopwall,noleftwall,
+Cell(72,38): red,nobaggle,notopwall,noleftwall,
+Cell(72,39): red,nobaggle,notopwall,noleftwall,
+Cell(72,40): red,nobaggle,notopwall,noleftwall,
+Cell(72,41): cyan,nobaggle,notopwall,noleftwall,
+Cell(72,42): black,nobaggle,notopwall,noleftwall,
+Cell(73,3): black,nobaggle,notopwall,noleftwall,
+Cell(73,4): green,nobaggle,notopwall,noleftwall,
+Cell(73,5): red,nobaggle,notopwall,noleftwall,
+Cell(73,6): red,nobaggle,notopwall,noleftwall,
+Cell(73,7): red,nobaggle,notopwall,noleftwall,
+Cell(73,8): red,nobaggle,notopwall,noleftwall,
+Cell(73,9): red,nobaggle,notopwall,noleftwall,
+Cell(73,10): darkGray,nobaggle,notopwall,noleftwall,
+Cell(73,11): lightGray,nobaggle,notopwall,noleftwall,
+Cell(73,12): black,nobaggle,notopwall,noleftwall,
+Cell(73,13): green,nobaggle,notopwall,noleftwall,
+Cell(73,14): lightGray,nobaggle,notopwall,noleftwall,
+Cell(73,15): red,nobaggle,notopwall,noleftwall,
+Cell(73,16): red,nobaggle,notopwall,noleftwall,
+Cell(73,17): orange,nobaggle,notopwall,noleftwall,
+Cell(73,18): green,nobaggle,notopwall,noleftwall,
+Cell(73,19): cyan,nobaggle,notopwall,noleftwall,
+Cell(73,20): cyan,nobaggle,notopwall,noleftwall,
+Cell(73,21): cyan,nobaggle,notopwall,noleftwall,
+Cell(73,22): cyan,nobaggle,notopwall,noleftwall,
+Cell(73,23): cyan,nobaggle,notopwall,noleftwall,
+Cell(73,24): cyan,nobaggle,notopwall,noleftwall,
+Cell(73,25): blue,nobaggle,notopwall,noleftwall,
+Cell(73,29): black,nobaggle,notopwall,noleftwall,
+Cell(73,30): green,nobaggle,notopwall,noleftwall,
+Cell(73,31): green,nobaggle,notopwall,noleftwall,
+Cell(73,32): green,nobaggle,notopwall,noleftwall,
+Cell(73,33): green,nobaggle,notopwall,noleftwall,
+Cell(73,34): green,nobaggle,notopwall,noleftwall,
+Cell(73,35): green,nobaggle,notopwall,noleftwall,
+Cell(73,36): green,nobaggle,notopwall,noleftwall,
+Cell(73,37): green,nobaggle,notopwall,noleftwall,
+Cell(73,38): green,nobaggle,notopwall,noleftwall,
+Cell(73,39): green,nobaggle,notopwall,noleftwall,
+Cell(73,40): green,nobaggle,notopwall,noleftwall,
+Cell(73,41): green,nobaggle,notopwall,noleftwall,
+Cell(73,42): black,nobaggle,notopwall,noleftwall,
+Cell(74,3): black,nobaggle,notopwall,noleftwall,
+Cell(74,4): green,nobaggle,notopwall,noleftwall,
+Cell(74,5): red,nobaggle,notopwall,noleftwall,
+Cell(74,6): red,nobaggle,notopwall,noleftwall,
+Cell(74,7): magenta,nobaggle,notopwall,noleftwall,
+Cell(74,8): red,nobaggle,notopwall,noleftwall,
+Cell(74,9): magenta,nobaggle,notopwall,noleftwall,
+Cell(74,10): lightGray,nobaggle,notopwall,noleftwall,
+Cell(74,11): lightGray,nobaggle,notopwall,noleftwall,
+Cell(74,12): blue,nobaggle,notopwall,noleftwall,
+Cell(74,13): black,nobaggle,notopwall,noleftwall,
+Cell(74,14): darkGray,nobaggle,notopwall,noleftwall,
+Cell(74,15): red,nobaggle,notopwall,noleftwall,
+Cell(74,16): red,nobaggle,notopwall,noleftwall,
+Cell(74,17): cyan,nobaggle,notopwall,noleftwall,
+Cell(74,29): black,nobaggle,notopwall,noleftwall,
+Cell(74,30): black,nobaggle,notopwall,noleftwall,
+Cell(74,31): black,nobaggle,notopwall,noleftwall,
+Cell(74,32): black,nobaggle,notopwall,noleftwall,
+Cell(74,33): black,nobaggle,notopwall,noleftwall,
+Cell(74,34): black,nobaggle,notopwall,noleftwall,
+Cell(74,35): black,nobaggle,notopwall,noleftwall,
+Cell(74,36): black,nobaggle,notopwall,noleftwall,
+Cell(74,37): black,nobaggle,notopwall,noleftwall,
+Cell(74,38): black,nobaggle,notopwall,noleftwall,
+Cell(74,39): black,nobaggle,notopwall,noleftwall,
+Cell(74,40): black,nobaggle,notopwall,noleftwall,
+Cell(74,41): black,nobaggle,notopwall,noleftwall,
+Cell(74,42): black,nobaggle,notopwall,noleftwall,
+Cell(75,3): black,nobaggle,notopwall,noleftwall,
+Cell(75,4): green,nobaggle,notopwall,noleftwall,
+Cell(75,5): red,nobaggle,notopwall,noleftwall,
+Cell(75,6): red,nobaggle,notopwall,noleftwall,
+Cell(75,7): red,nobaggle,notopwall,noleftwall,
+Cell(75,8): gray,nobaggle,notopwall,noleftwall,
+Cell(75,9): gray,nobaggle,notopwall,noleftwall,
+Cell(75,10): darkGray,nobaggle,notopwall,noleftwall,
+Cell(75,11): blue,nobaggle,notopwall,noleftwall,
+Cell(75,12): black,nobaggle,notopwall,noleftwall,
+Cell(75,13): darkGray,nobaggle,notopwall,noleftwall,
+Cell(75,14): magenta,nobaggle,notopwall,noleftwall,
+Cell(75,15): darkGray,nobaggle,notopwall,noleftwall,
+Cell(75,16): gray,nobaggle,notopwall,noleftwall,
+Cell(75,17): blue,nobaggle,notopwall,noleftwall,
+Cell(76,3): black,nobaggle,notopwall,noleftwall,
+Cell(76,4): green,nobaggle,notopwall,noleftwall,
+Cell(76,5): magenta,nobaggle,notopwall,noleftwall,
+Cell(76,6): orange,nobaggle,notopwall,noleftwall,
+Cell(76,7): green,nobaggle,notopwall,noleftwall,
+Cell(76,8): orange,nobaggle,notopwall,noleftwall,
+Cell(76,9): cyan,nobaggle,notopwall,noleftwall,
+Cell(76,10): orange,nobaggle,notopwall,noleftwall,
+Cell(76,11): red,nobaggle,notopwall,noleftwall,
+Cell(76,12): red,nobaggle,notopwall,noleftwall,
+Cell(76,13): red,nobaggle,notopwall,noleftwall,
+Cell(76,14): green,nobaggle,notopwall,noleftwall,
+Cell(76,15): green,nobaggle,notopwall,noleftwall,
+Cell(76,16): green,nobaggle,notopwall,noleftwall,
+Cell(76,17): black,nobaggle,notopwall,noleftwall,
+Cell(77,3): black,nobaggle,notopwall,noleftwall,
+Cell(77,4): green,nobaggle,notopwall,noleftwall,
+Cell(77,5): red,nobaggle,notopwall,noleftwall,
+Cell(77,6): orange,nobaggle,notopwall,noleftwall,
+Cell(77,7): blue,nobaggle,notopwall,noleftwall,
+Cell(77,8): blue,nobaggle,notopwall,noleftwall,
+Cell(77,9): blue,nobaggle,notopwall,noleftwall,
+Cell(77,10): blue,nobaggle,notopwall,noleftwall,
+Cell(77,11): blue,nobaggle,notopwall,noleftwall,
+Cell(77,12): blue,nobaggle,notopwall,noleftwall,
+Cell(77,13): blue,nobaggle,notopwall,noleftwall,
+Cell(77,14): black,nobaggle,notopwall,noleftwall,
+Cell(77,15): black,nobaggle,notopwall,noleftwall,
+Cell(77,16): black,nobaggle,notopwall,noleftwall,
+Cell(77,17): black,nobaggle,notopwall,noleftwall,
+Cell(78,3): black,nobaggle,notopwall,noleftwall,
+Cell(78,4): black,nobaggle,notopwall,noleftwall,
+Cell(78,5): blue,nobaggle,notopwall,noleftwall,
+Cell(78,6): blue,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/langtoncolors/LangtonColors.fr.html b/src/lessons/turmites/langtoncolors/LangtonColors.fr.html
new file mode 100644
index 0000000..a3f040b
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColors.fr.html
@@ -0,0 +1,46 @@
+<h2>La fourmi de Langton multicolore</h2>
+
+<p>Il y a plusieures façons de changer le concept de la fourmi de Langton. Dans
+cet exercice, nous allons tout d'abord étudier le fait d'utiliser plus de
+deux couleurs. Cela reste très similaire au cas de base : le comportement à
+chaque pas dépendra toujours de la couleur du sol, mais vous aurez plus de
+deux possibilitées. Cela permet d'avoir plus qu'une seule sorte de fourmi,
+selon ce que l'on décide de faire pour chaque couleur. Par exemple, la
+fourmi LRL reconnait trois couleurs. Elle tourne à gauche sur la première, à
+droite sur la seconde et à gauche sur la troisième. Selon cette définition,
+la fourmi de base est de type RL ( puisqu'elle tourne à droite sur les cases
+blanches et à gauche sur les noires).</p>
+
+<p>Certaines de ces fourmis dessinent des schémas fascinants ( changez de monde
+pour les voir ):LLRR construit une figure symétrique ressemblant vaguement à
+une balle. LRRRRRLLR dessine un carré, LLRRRLRLRLLR dessine un schéma
+régulier tordu après une période ressemblant à un comportement chaotique, et
+RRLLLRLLLRRR semble remplir un sablier...</p>  
+
+<p class="Java">Métamorphoser votre buggle en une fourmi de Langton générique n'est pas très
+compliqué, même si ce n'est pas complètement trivial. Comme précédemment,
+vous avez à écrire une fonction <code>step</code>. Mais cette fois, elle
+reçoit deux tableaux comme paramètres. Le premier définit les règles à
+suivre selon la couleur du sol tandis que le deuxième done la séquence de
+couleur à utiliser. Par exemple, la fourmi de base aurait <code>{'R',
+'L'}</code> et <code>{Color.white, Color.black}</code> comme arguments.</p>
+
+<p class="python">Métamorphoser votre buggle en une fourmi de Langton générique n'est pas très
+compliqué, même si ce n'est pas complètement trivial. Comme précédemment,
+vous avez à écrire une fonction <code>step</code>. Mais cette fois, elle
+reçoit deux tableaux comme paramètres. Le premier définit les règles à
+suivre selon la couleur du sol tandis que le deuxième done la séquence de
+couleur à utiliser. Par exemple, la fourmi de base aurait <code>['R',
+'L']</code> et <code>[Color.white, Color.black]</code> comme arguments.</p>
+
+<p>A chaque pas, vous avez toujours à appliquer le pseudo-code suivant :</p>
+<ul>
+ <li>Trouver la position de la couleur du sol dans la séquence de couleur;</li>
+ <li>Tourner à gauche ou à droite selon le contenu du tableau de règle à cette
+position;</li>
+ <li>Marquer le sol de la case courante avec la prochaine couleur dans la
+séquence ( la dernière couleur est suivie par la première);</li>
+ <li>Avancer d'un pas</li>
+</ul> 
+
+<p>Vous devriez maintenant avoir assez d'informations pour réussir.</p>
diff --git a/src/lessons/turmites/langtoncolors/LangtonColors.html b/src/lessons/turmites/langtoncolors/LangtonColors.html
new file mode 100644
index 0000000..07f3de5
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColors.html
@@ -0,0 +1,39 @@
+<h2>Multicolor Langton's ant</h2>
+
+<p>There is several ways to extend the concept of Langton's ant. In this exercise, 
+we explore first one, using more than two colors. It remains very similar to the 
+base case: the behavior at each step still depends on the ground color, but you 
+have more than 2 possibilities. It allows to have more than one kind of ant, 
+depending on what you decide to do for each color. For example, the ant LRL takes
+3 colors. It turns left on the first color, right on the second one and left 
+on the third color. According to this definition, the basic ant is a RL (since it 
+turns right on white cells and left on black ones).</p>
+
+<p>Some of these ants draw fascinating patterns (switch the world to see them): 
+LLRR build a symmetric figure resembling loosely to a ball, LRRRRRLLR draws a 
+square, LLRRRLRLRLLR draws a convoluted regular pattern after a period of 
+seemingly chaotic behavior, and RRLLLRLLLRRR seems to fill a hour glass...</p>  
+
+<p class="Java">Changing your buggle into a generic Langton's ant is not very complicated, 
+although it is not completely trivial. As previously, you have to write a 
+<code>step</code> function. But this time, it receives two arrays as parameters. 
+The first one defines the rules to follow depending on the ground color while the 
+second one gives the sequence of colors to use. For example, the basic ant would 
+have <code>{'R', 'L'}</code> and <code>{Color.white, Color.black}</code> as arguments.</p>
+
+<p class="python">Changing your buggle into a generic Langton's ant is not very complicated, 
+although it is not completely trivial. As previously, you have to write a 
+<code>step</code> function. But this time, it receives two arrays as parameters. 
+The first one defines the rules to follow depending on the ground color while the 
+second one gives the sequence of colors to use. For example, the basic ant would 
+have <code>['R', 'L']</code> and <code>[Color.white, Color.black]</code> as arguments.</p>
+
+<p>At each step, you thus have to apply the following pseudo-code:</p>
+<ul>
+ <li>Find the position of the ground color in the color sequence;</li>
+ <li>Turn left or right depending on the content of the rule array at that position;</li>
+ <li>Mark the current ground with the next color in the sequence (the last color being followed by the first one);</li>
+ <li>Move forward by one step.</li>
+</ul> 
+
+<p>You now should have enough information to succeed.</p>
diff --git a/src/lessons/turmites/langtoncolors/LangtonColors.java b/src/lessons/turmites/langtoncolors/LangtonColors.java
new file mode 100644
index 0000000..edcfed7
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColors.java
@@ -0,0 +1,28 @@
+package lessons.turmites.langtoncolors;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bugglequest.BuggleWorld;
+import lessons.turmites.universe.TurmiteWorld;
+
+public class LangtonColors extends ExerciseTemplated {
+	BuggleWorld createWorld(String rule, int nbSteps, int width, int height, int buggleX, int buggleY) {
+		return new TurmiteWorld(rule+" ("+nbSteps+" steps)", nbSteps, rule.toCharArray(), width, height, buggleX, buggleY);
+	}
+	
+	public LangtonColors(Lesson lesson) {
+		super(lesson);
+		tabName = "LangtonsAnt";
+
+		BuggleWorld[] myWorlds = new BuggleWorld[] {
+				 createWorld("RL",           12001, 100, 70, 66, 23),
+				 createWorld("LLRR",         20001,  30, 30, 15, 15),
+				 createWorld("LRRRRRLLR",     9001,  25, 24, 11, 12),
+				 createWorld("LLRRRLRLRLLR", 36001, 120, 60, 100, 30),
+				 createWorld("RRLLLRLLLRRR", 30001,  80, 90, 60, 28),
+		};
+		
+		setup(myWorlds);
+
+	}
+}
diff --git a/src/lessons/turmites/langtoncolors/LangtonColorsEntity.java b/src/lessons/turmites/langtoncolors/LangtonColorsEntity.java
new file mode 100644
index 0000000..2a2a8c1
--- /dev/null
+++ b/src/lessons/turmites/langtoncolors/LangtonColorsEntity.java
@@ -0,0 +1,51 @@
+package lessons.turmites.langtoncolors;
+
+import java.awt.Color;
+
+import jlm.universe.bugglequest.SimpleBuggle;
+
+public class LangtonColorsEntity extends SimpleBuggle {
+	Color[] allColors = {Color.white, Color.black, Color.blue, Color.cyan, Color.green, Color.orange, Color.red, 
+			Color.gray, Color.magenta, Color.darkGray, Color.pink, Color.lightGray};
+
+	/* BEGIN TEMPLATE */
+	public void step(char[] rule, Color[] colors) {
+		/* BEGIN SOLUTION */
+		Color current = getGroundColor(); 
+		for (int i=0;i<colors.length;i++) {
+			if (current.equals(colors[i])) {
+				switch (rule[i]) {
+				case 'L': turnLeft(); break;
+				case 'R': turnRight(); break;
+				default:
+					System.out.println("Unknown command associated to i="+i+": "+rule[i]);
+				}
+
+				setBrushColor(colors[(i+1) % colors.length]);
+				brushDown();
+				brushUp();
+
+				forward();
+
+				return;
+			}
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+	@Override
+	public void run() { 
+		int nbSteps = (Integer)getParam(0);
+		char[] rule = ((char[])getParam(1));
+
+		Color[] colors = new Color[rule.length];
+		for (int i=0; i<rule.length; i++)
+			colors[i] = allColors[i];
+
+		for (int i=0;i<nbSteps;i++) {
+			((lessons.turmites.universe.TurmiteWorld)world).stepDone();
+			step(rule,colors);
+		}
+	}
+}
diff --git a/src/lessons/welcome/turmites/langtoncolors/LangtonColorsEntity.py b/src/lessons/turmites/langtoncolors/LangtonColorsEntity.py
similarity index 100%
rename from src/lessons/welcome/turmites/langtoncolors/LangtonColorsEntity.py
rename to src/lessons/turmites/langtoncolors/LangtonColorsEntity.py
diff --git a/src/lessons/turmites/short_desc.fr.html b/src/lessons/turmites/short_desc.fr.html
new file mode 100644
index 0000000..c0ab206
--- /dev/null
+++ b/src/lessons/turmites/short_desc.fr.html
@@ -0,0 +1,6 @@
+<h3>Les turmites</h3>
+<p>Découvrez les fourmis de Langton, qui sont des machines de Turing à deux
+dimensions.</p>
+
+<p>Ces activités sont très simples, à la portée de débutants, et elles ouvrent
+la porte sur un univers fascinant.</p>
diff --git a/src/lessons/turmites/short_desc.html b/src/lessons/turmites/short_desc.html
new file mode 100644
index 0000000..0825e5c
--- /dev/null
+++ b/src/lessons/turmites/short_desc.html
@@ -0,0 +1,5 @@
+<h3>The turmites</h3>
+<p>Discover the Langton's ants, that are 2D turing machines.</p>
+
+<p>These activities are very simple application problems, achievable
+by beginners, and open the door to an amazing world.</p>
diff --git a/src/lessons/turmites/turmitecreator/TurmiteCreator-answer0.map b/src/lessons/turmites/turmitecreator/TurmiteCreator-answer0.map
new file mode 100644
index 0000000..db86c40
--- /dev/null
+++ b/src/lessons/turmites/turmitecreator/TurmiteCreator-answer0.map
@@ -0,0 +1,1260 @@
+TurmiteWorld: blah
+Size: 100x100
+Buggle(48,57): north,red,white,ant
+Cell(3,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(15,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(20,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(25,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(30,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(35,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(40,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(45,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(46,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,30): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,31): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,32): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(47,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,10): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,11): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(48,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,12): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,20): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,21): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(49,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,22): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,27): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(50,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,25): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,26): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(51,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(52,66): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,17): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(53,66): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,15): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,16): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(54,66): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(55,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,35): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(56,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(57,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(58,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(59,66): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,66): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,67): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,68): yellow,nobaggle,notopwall,noleftwall,
+Cell(60,69): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,67): yellow,nobaggle,notopwall,noleftwall,
+Cell(61,68): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,67): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,68): yellow,nobaggle,notopwall,noleftwall,
+Cell(62,69): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,66): yellow,nobaggle,notopwall,noleftwall,
+Cell(63,69): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,36): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(64,66): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,37): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(65,65): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(66,64): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(67,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(68,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,61): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,62): yellow,nobaggle,notopwall,noleftwall,
+Cell(69,63): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,40): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,41): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,42): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(70,60): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,51): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,52): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(71,59): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,53): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,54): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(72,58): yellow,nobaggle,notopwall,noleftwall,
+Cell(73,45): yellow,nobaggle,notopwall,noleftwall,
+Cell(73,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(73,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(73,50): yellow,nobaggle,notopwall,noleftwall,
+Cell(73,55): yellow,nobaggle,notopwall,noleftwall,
+Cell(73,56): yellow,nobaggle,notopwall,noleftwall,
+Cell(73,57): yellow,nobaggle,notopwall,noleftwall,
+Cell(74,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(74,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(74,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(75,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(75,48): yellow,nobaggle,notopwall,noleftwall,
+Cell(75,49): yellow,nobaggle,notopwall,noleftwall,
+Cell(76,46): yellow,nobaggle,notopwall,noleftwall,
+Cell(76,47): yellow,nobaggle,notopwall,noleftwall,
+Cell(76,49): yellow,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/turmites/turmitecreator/TurmiteCreator.fr.html b/src/lessons/turmites/turmitecreator/TurmiteCreator.fr.html
new file mode 100644
index 0000000..3377fea
--- /dev/null
+++ b/src/lessons/turmites/turmitecreator/TurmiteCreator.fr.html
@@ -0,0 +1,171 @@
+<h2>Créer des Turmites</h2>
+
+<p>Cet exercice vous permet de construire vos propres turmites. Pour réussir
+cet exercice, vous devez simplement écrire une méthode <code>init()</code>
+qui initialise <code>rule</code> pour utiliser les tables de transitions
+suivantes (de Wikipedia), met la position initiale du buggle à (8;33), et
+demande de faire 8342 pas.</p> 
+
+<table border="1" style="text-align:center">
+<tr>
+<th rowspan="3" colspan="2"></th>
+<th colspan="6">Couleur actuelle</th>
+</tr>
+<tr>
+<th colspan="3">0</th>
+<th colspan="3">1</th>
+
+</tr>
+<tr style="font-size:9pt">
+<th>Couleur à mettre</th>
+<th>Virage</th>
+<th>État suivant</th>
+<th>Couleur à mettre</th>
+<th>Virage</th>
+<th>État suivant</th>
+</tr>
+<tr>
+<th rowspan="2">État courant</th>
+
+<th>0</th>
+<td>1</td>
+<td>R</td>
+<td>0</td>
+<td>1</td>
+<td>R</td>
+<td>1</td>
+</tr>
+<tr>
+<th>1</th>
+
+<td>0</td>
+<td>N</td>
+<td>0</td>
+<td>0</td>
+<td>N</td>
+<td>1</td>
+</tr>
+</table>
+
+<p>Où les virages à effectuer sont
+<b>L</b> (90° vers la gauche -- left),
+<b>R</b> (90° vers la droite -- right),
+<b>N</b> (rien -- no turn),
+<b>U</b> (demi tour de 180° -- U-turn).</p>
+
+<h2>Aller plus loin</h2>
+<p>Cet exercice est naturellement une excuse pour vous laisser expérimenter vos
+propres turmites. Vous êtes libres de changer la table de transition et le
+nombre de pas pour expérimenter par vous-même. A ce propos, vous pouvez
+trouver la bibliothèque Ed Pegg Jr's utile. Si vous trouvez de nouveaux
+schémas intéressants, envoyez-les nous pas email afin que nous les puissions
+les ajouter à cette liste.  </p>
+
+<p>De plus, Wikipedia manque désespérement de quelques beaux et colorés
+turmites: seuls des noirs et blancs sont décrits. Vous pouvez considérer
+l'idée de soumettre vos créations directement à l'encyclopédie libre.</p>
+
+<p class="python">Voici quelques turmites bicolores, issues de
+http://demonstrations.wolfram.com/Turmites/ Elles n'ont pas été écrites avec
+la syntaxe Python, mais les convertir ne devrait pas poser beaucoup de
+problèmes.</p> 
+<p class="Java">Voici quelques turmites bicolores, issues de
+http://demonstrations.wolfram.com/Turmites/</p> 
+
+<pre>
+{{{1, RIGHT , 0}, {0, LEFT  , 0}}}  # 1: La fourmi de Langton
+{{{1, RIGHT , 0}, {0, NOTURN, 0}}}  # 2: Compteur binaire
+{{{0, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 3: Triangle rempli
+{{{0, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {0, NOTURN, 1}}} # 4: Spirale dans une boite
+{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 5: Spirale rayurée
+{{{0, RIGHT , 1}, {0, LEFT  , 0}}, {{1, LEFT  , 1}, {1, NOTURN, 0}}} # 6: Pyramide à étages
+{{{0, RIGHT , 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {1, LEFT  , 0}}} # 7: Ile entourée
+{{{0, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {0, RIGHT , 1}}} # 8: Set tissé
+{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {1, LEFT  , 0}}} # 9: Sorte de flocon de neige
+{{{1, LEFT  , 0}, {0, NOTURN, 1}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 10: Constructeur de ville lent
+{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 0}, {0, LEFT  , 1}}} # 11: Art informatisé en boîte
+{{{1, LEFT  , 0}, {1, RIGHT , 1}}, {{0, RIGHT , 1}, {1, LEFT  , 0}}} # 12: Décollage de ballon (fait une autoroute)
+{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 13: Autoroute horizontale
+{{{1, LEFT  , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 1}, {1, RIGHT , 0}}} # 14: Autoroute à 45 degrés
+{{{1, LEFT  , 1}, {0, LEFT  , 1}}, {{1, RIGHT , 1}, {0, LEFT  , 0}}} # 15: Autoroute à 45 degrés
+{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{1, NOTURN, 0}, {1, RIGHT , 0}}} # 16: Spirale dans une boîte remplie
+{{{1, LEFT  , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 17: glaciers
+{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 18: Rectangle doré!
+{{{1, LEFT  , 1}, {1, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 19: Fontaine pétillante
+{{{1, LEFT  , 1}, {1, RIGHT , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 20: Armoires imbriquées
+{{{1, NOTURN, 1}, {0, LEFT  , 1}}, {{1, RIGHT , 0}, {1, NOTURN, 1}}} # 21: Croix
+{{{1, NOTURN, 1}, {0, NOTURN, 0}}, {{0, RIGHT , 0}, {1, LEFT  , 0}}} # 22: Croissance en dents de scie
+{{{1, NOTURN, 1}, {0, NOTURN, 1}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 23: Croissance par blocs
+{{{1, NOTURN, 1}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 0}}} # 24: Croissance texturée
+{{{1, NOTURN, 1}, {0, RIGHT , 1}}, {{1, LEFT  , 0}, {1, RIGHT , 0}}} # 25: Croissance en diamands
+{{{1, NOTURN, 1}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {0, NOTURN, 0}}} # 26: Corde enroulée
+{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, NOTURN, 1}}} # 27: (croissance)
+{{{1, RIGHT , 0}, {0, LEFT  , 1}}, {{1, LEFT  , 0}, {0, RIGHT , 1}}} # 28: (spirale carrée)
+{{{1, RIGHT , 0}, {1, RIGHT , 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}} # 29: Croissance ébourifée
+{{{1, RIGHT , 1}, {0, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 0}}} # 30: La fourmi de Lanton en carrés
+{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, LEFT  , 1}, {1, LEFT  , 0}}} # 31: Croissance avec des courbes et des blocs
+{{{1, RIGHT , 1}, {0, RIGHT , 0}}, {{0, NOTURN, 0}, {1, RIGHT , 1}}} # 32: Constructeur de spirales distrait
+{{{1, RIGHT , 1}, {0, RIGHT , 1}}, {{1, NOTURN, 0}, {1, NOTURN, 1}}} # 33: Tige de choux-fleur (autoroute à 45 degrés)
+{{{1, RIGHT , 1}, {1, LEFT  , 1}}, {{1, RIGHT , 1}, {0, RIGHT , 0}}} # 34: Piste de vers (croissance cyclique!)
+{{{1, RIGHT , 1}, {1, NOTURN, 0}}, {{1, NOTURN, 0}, {0, NOTURN, 1}}} # 35: Fini par faire une autoroute à deux voies!
+{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, NOTURN, 0}, {0, NOTURN, 0}}} # 36: Éclosion de moisissure presque symétrique
+{{{1, RIGHT , 1}, {1, RIGHT , 0}}, {{0, RIGHT , 0}, {1, NOTURN, 1}}} # 37: Fait un 1 dans une autoroute à deux gradients
+{{{1, RIGHT , 1}, {1, RIGHT , 1}}, {{1, LEFT  , 1}, {0, RIGHT , 0}}} # 38: Fait immédiatement un 1 dans une autoroute à 3
+{{{0, RIGHT , 1}, {1, RIGHT , 1}}, {{0, LEFT  , 2}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {1, LEFT  , 0}}} # 39: Croissance de carrés et diagonales
+{{{1, LEFT  , 1}, {0, NOTURN, 0}}, {{0, RIGHT , 2}, {1, LEFT  , 0}}, {{1, RIGHT , 1}, {1, NOTURN, 0}}} # 40: streak at approx. an 8.1 in 1 gradient
+{{{1, LEFT  , 1}, {0, NOTURN, 2}}, {{0, RIGHT , 2}, {1, NOTURN, 1}}, {{1, RIGHT , 1}, {1, NOTURN, 0}}} # 41: streak at approx. a 1.14 in 1 gradient
+{{{1, LEFT  , 1}, {1, LEFT  , 1}}, {{1, NOTURN, 0}, {0, NOTURN, 2}}, {{0, LEFT  , 1}, {1, NOTURN, 1}}} # 42: Croissance en labyrinthe
+{{{1, LEFT  , 2}, {0, RIGHT , 0}}, {{1, LEFT  , 0}, {0, RIGHT , 0}}, {{0, LEFT  , 0}, {0, LEFT  , 1}}} # 43: Croissance en corniches
+{{{1, RIGHT , 0}, {0, RIGHT , 2}}, {{0, LEFT  , 0}, {0, RIGHT , 0}}, {{0, NOTURN, 1}, {1, LEFT  , 0}}} # 44: makes a 1 in 7 highway
+{{{1, RIGHT , 1}, {0, LEFT  , 0}}, {{1, RIGHT , 2}, {0, NOTURN, 0}}, {{1, LEFT  , 0}, {0, LEFT  , 0}}} # 45: makes a 4 in 1 highway
+</pre> 
+
+<p>Les fourmis de Langton ne partagent peut être pas la capacité d'expression
+des turmites, mais elles restent fascinantes elles aussi. Vous pouvez
+expérimenter avec elles en utilisant la méthode initLangton(), fournie dans
+le code de base, qui vous permet de construire une table de transition pour
+Turmite a partir du nom d'une fourmi de Langton. De petits changements
+peuvent engendrer de grandes choses. Par exemple, "RRL" ne semble pas mener
+à un quelconque schéma, même après un million de pas, mais "RLL" commence à
+construire un dessin très simple de route au bout de moins de 100 pas !</p>  
+
+<p>Beaucoup de fourmis de Langton construisent des routes: RL, bien entendu,
+mais aussi RLRLRLLRLR ( environ 2500 pas ). Le comportement chaotique des
+fourmis avant la route peut être très court ( comme avec RLL qui a seulement
+besoin de 100 pas pour converger ) ou très long, comme avec LLLLLLRRLRRR qui
+semble chaotique jusqu'à plus de 500 000 pas avant de constuire la route ou
+encore RRLLLRRRLRRR qui nécessite 1 170 000 pour commencer à
+converger. Certaines sont étroites, d'autres très larges, comme avec
+RRLRLLRLRR (200 000 pas). Cette fourmi est aussi notable puisque c'est
+quelque peu carré avant même que la route commence, là où d'autres ne
+montrent rien de transcendant avant leur route.<p>
+
+<p>Certaines fourmis remplissent des secteurs entiers, comme avec RRLLLRLLLRRR
+(16 000 pas), RRLLLRLLLRRR (30 000 pas), RRLLLRRRRRLR (125 000 pas) ou
+RRLRLLRRRRRR (20 000 pas). D'autres encore remplissent tout l'espace (RRLRR
+après 3000 pas). Certaines de mes favorites sont celles où la fourmi semble
+rebondir dans une boite qui devient plus grande à chaque rebond, comme avec
+LRRRRRLLR (30 000 pas). LRRRRLLLRRR est encore plus impressionnant puisque
+les rebonds dans la boite sont réguliers et puisque la fourmi atteint
+rapidement son comportement stable (15 000 pas suffisent).</p>
+
+<p>Enfin, certaines fourmis construisent juste des schémas artistiques. Vous
+devriez regarder cette vidéo pour un bel aperçu :
+http://www.youtube.com/watch?v=1X-gtr4pEBU .
+Si vous voulez les implémenter dans votre code, vous devez les permutter de
+un : Par exemple, celle décrite à 3:42 n'est pas RRLRLRLLRL, mais RLRLRLLRLR
+(le premier mouvement visible doit être vu comme le dernier).</p>
+
+<p>Comme vous pouvez le constater en explorant l'ensemble ci-dessus de
+turmites, elles ne sont généralement pas aussi colorées que les fourmis,
+mais c'est peut-être car très peu de couleurs sont nécessaires pour
+expliciter des comportements complexes. Par exemple, il y a un classe
+spécifique de turmites appelée <i>busy beavers</i> qui sont des turmites qui
+écrivent énormément de choses avant de s'arrêter ( les <i>busy beavers</i>
+sont généralement des machines de Turing classiques, mais l'idée correpond
+parfaitement aux turmites). Il y a une sorte de compétition internationale
+où les participants font tout leur possible pour trouver le turmite qui
+couvre la plus grande surface avant de s'arrêter.
+La page web est ici :
+http://code.google.com/p/ruletablerepository/wiki/TwoDimensionalTuringMachines 
+
diff --git a/src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html b/src/lessons/turmites/turmitecreator/TurmiteCreator.html
similarity index 100%
rename from src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.html
rename to src/lessons/turmites/turmitecreator/TurmiteCreator.html
diff --git a/src/lessons/turmites/turmitecreator/TurmiteCreator.java b/src/lessons/turmites/turmitecreator/TurmiteCreator.java
new file mode 100644
index 0000000..b805948
--- /dev/null
+++ b/src/lessons/turmites/turmitecreator/TurmiteCreator.java
@@ -0,0 +1,15 @@
+package lessons.turmites.turmitecreator;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import lessons.turmites.universe.TurmiteWorld;
+
+public class TurmiteCreator extends ExerciseTemplated {
+	
+	public TurmiteCreator(Lesson lesson) {
+		super(lesson);
+		tabName = "Turmite";
+
+		setup(new TurmiteWorld("blah",1000,null,100,100,50,50));
+	}
+}
diff --git a/src/lessons/turmites/turmitecreator/TurmiteCreatorEntity.java b/src/lessons/turmites/turmitecreator/TurmiteCreatorEntity.java
new file mode 100644
index 0000000..a56c629
--- /dev/null
+++ b/src/lessons/turmites/turmitecreator/TurmiteCreatorEntity.java
@@ -0,0 +1,137 @@
+package lessons.turmites.turmitecreator;
+
+import java.awt.Color;
+
+public class TurmiteCreatorEntity extends jlm.universe.bugglequest.SimpleBuggle {
+	Color[] allColors = {Color.white, Color.yellow, Color.red, Color.cyan, Color.green, Color.orange, 
+			Color.blue, Color.black,
+			Color.gray, Color.magenta, Color.darkGray, Color.pink, Color.lightGray};
+
+	/* Do not change these definitions */
+
+	final static int NEXT_COLOR = 0;
+	final static int NEXT_MOVE  = 1;
+	final static int NEXT_STATE = 2;
+
+
+	Color[] colors; 
+	int state = 0;
+
+	public void step() {
+		int currentColor=0;
+		Color current = getGroundColor(); 
+		for (int i=0;i<colors.length;i++) 
+			if (current.equals(colors[i])) 
+				currentColor = i;
+
+		setBrushColor(colors[ rule[state][currentColor][NEXT_COLOR] ]);
+		brushDown();
+		brushUp();
+
+		switch (rule[state][currentColor][NEXT_MOVE]) {
+		case STOP:   /* nothing */;            break;
+		case NOTURN: /* no turn */; forward(); break;
+		case LEFT:   turnLeft();   	forward(); break;
+		case RIGHT:  turnRight();   forward(); break;
+		case BACK:   turnBack();    forward(); break;
+		default:
+			System.out.println("Unknown turn command associated to i="+currentColor+": "+rule[state][currentColor][NEXT_MOVE]);
+		}
+
+		state = rule[state][currentColor][NEXT_STATE];
+	}
+
+	/* BEGIN TEMPLATE */
+	final static int STOP   = 0;
+	final static int NOTURN = 1;
+	final static int LEFT   = 2;
+	final static int BACK   = 4;
+	final static int RIGHT  = 8;
+
+	int nbSteps; 
+	int[][][] rule;
+
+	/** init the rule array from a string defining a Langton's ant 
+	 * 
+	 *  You can use this method inside your init() method if you want 
+	 *  to test langton's ant instead of full turmites.
+	 */
+	void initLangton(String name) {
+		int nbColors = name.length(); /* As many colors as letters in the ant's name */
+
+		rule = new int[1][][]; /* one state only */
+		rule[0] = new int[nbColors][]; /* As many colors as letters in the ant's name */
+		for (int i=0; i<nbColors; i++) {
+			rule[0][i] = new int[3]; /* every command set has 3 elements */ 
+
+			rule[0][i][NEXT_COLOR] = (i+1) % nbColors;
+
+			if (name.charAt(i) == 'L') {
+				rule[0][i][NEXT_MOVE] = LEFT;			
+			} else if (name.charAt(i) == 'R') {
+				rule[0][i][NEXT_MOVE] = RIGHT;
+			} else {
+				System.out.println("Unknown command in your ant's name: "+name.charAt(i));
+			}
+
+			rule[0][i][NEXT_STATE] = 0; /* only one state */
+
+			//		System.out.println("{"+rule[0][i][NEXT_COLOR]+","+rule[0][i][NEXT_MOVE]+","+rule[0][i][NEXT_STATE]+"}");
+		}
+	}
+	void init() {
+		/* Your code comes here. */
+
+		/* Something like 
+		 *   nbSteps = 42;
+		 *   rule = new int[][][] {{{0, NOTURN, 0}, {0, NOTURN, 0}}}; 
+		 * but with possibly more states (ie, bigger second dimension), and more color (ie bigger third -- internal -- dimension) 
+		 * and naturally, less boring than this turmite doing absolutely nothing (runs forward endlessly).
+		 */
+
+		/* It can also be something like
+		 *   nbSteps = 42;
+		 *   initLangton("RL");
+		 */
+
+		/* remember to send your best creations for inclusion in the gallery */
+		/* BEGIN SOLUTION */
+		nbSteps = 8342;
+		rule = new int[][][] {{{1, LEFT, 0}, {1, LEFT, 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}};
+		setX(8); setY(33);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
+	@Override
+	public void run() { 
+		init();
+
+		colors = new Color[rule[0].length];
+		int i;
+		for (i=0; i<Math.min(rule[0].length,allColors.length); i++)
+			colors[i] = allColors[i];
+		for (; i<rule[0].length; i++) { /* allColors is too short; create the other colors randomly */
+			Color newColor = null;
+			do {
+				newColor = new Color(
+						(int)(Math.random()*255.) ,
+						(int)(Math.random()*255.) ,
+						(int)(Math.random()*255.) );
+				for (int j=0;j<i;j++) {
+					if (colors[j].equals(newColor)) {
+						/* Damn we already picked that color; take another one please */
+						newColor = null;
+					}
+				}
+			} while (newColor == null);
+			colors[i] = newColor;
+		}
+
+
+		for (int step=0;step<nbSteps;step++) {
+			step();
+			((lessons.turmites.universe.TurmiteWorld)world).stepDone();
+		}
+	}
+}
diff --git a/src/lessons/welcome/turmites/turmitecreator/TurmiteCreatorEntity.py b/src/lessons/turmites/turmitecreator/TurmiteCreatorEntity.py
similarity index 100%
rename from src/lessons/welcome/turmites/turmitecreator/TurmiteCreatorEntity.py
rename to src/lessons/turmites/turmitecreator/TurmiteCreatorEntity.py
diff --git a/src/lessons/turmites/universe/TurmiteWorld.fr.html b/src/lessons/turmites/universe/TurmiteWorld.fr.html
new file mode 100644
index 0000000..9543b20
--- /dev/null
+++ b/src/lessons/turmites/universe/TurmiteWorld.fr.html
@@ -0,0 +1,51 @@
+<h1>Le monde des Buggles</h1>
+Ce monde a été inventé par Lyn Turbak, du Wellesley College. Il est peuplé
+de Buggles, petites bêtes qui comprennent des ordres simples, et offre de
+nombreuses possibilités d'interaction avec le monde: prendre ou poser des
+objets, colorier le sol, se cogner à des murs, etc.
+
+<h2>Méthodes comprises par les buggles</h2>
+<table border=1>
+<tr><td colspan=2 align=center><b>Bouger</b><br/> (voir aussi la note sur les exceptions, plus bas)</td></tr>
+  <tr><td><b>Tourner à gauche<br/>Tourner à droite<br/>Se retourner<br/>Avancer<br/>Reculer</b></td>
+      <td>void turnLeft()<br/>void turnRight()<br/>void turnBack()<br/>
+          void forward() ou void forward(int)<br/>void backward() ou void backward(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>int getX()<br/>int getY()<br/>void setX(int)<br/>void setY(int)<br/>void setPos(int,int)</td></tr>
+
+<tr><td colspan=2 align=center><b>Informations sur la buggle</b></td></tr>
+  <tr><td><b>Obtenir la couleur<br/>Changer la couleur</b></td>
+      <td>Color getColor()<br/>void setColor(Color)</td></tr>				
+  <tr><td><b>Chercher un mur devant<br/>Chercher un mur derriere</b></td>
+      <td>boolean isFacingWall()<br/>boolean isBackingWall()</td></tr>				
+  <tr><td><b>Obtenir la direction<br/>Changer la direction</b><br/>Les directions valides sont :</td>
+      <td>Direction getDirection()<br/>void setDirection(Direction)<br/>Direction.NORTH, Direction.EAST, Direction.SOUTH et Direction.WEST</td></tr>
+ 
+<tr><td colspan=2 align=center><b>À propos de la brosse</b></td></tr>
+  <tr><td><b>Baisser la brosse<br/>Lever la brosse<br/>Obtenir la position de la brosse</b></td>
+      <td>void brushUp()<br/>void brushDown()<br/>boolean isBrushDown()</td></tr>
+  <tr><td><b>Modifier la couleur de la brosse<br/>Obtenir la couleur de la brosse</b></td>
+      <td>void setBrushColor(Color)<br/>Color getBrushColor()</td></tr>
+
+<tr><td colspan=2 align=center><b>Interagir avec le monde</b></td></tr>
+  <tr><td><b>Obtenir la couleur du sol</b></td><td>Color getGroundColor()</td></tr>
+
+  <tr><td><b>Chercher un baggle par terre<br/>Chercher un baggle dans ses poches<br/>Prendre un baggle<br/>Poser un baggle</b><br/>
+      (voir la note sur les exceptions)</td>
+      <td>boolean isOverBaggle()<br/>boolean isCarryingBaggle()<br/>void pickupBaggle()<br/>void dropBaggle()</td></tr>
+
+  <tr><td><b>Chercher un message<br/>Ajouter un message<br/>Lire le message<br/>Effacer le message</b></td>
+      <td>boolean isOverMessage()<br/>void writeMessage(String)<br/>String readMessage()<br/>void clearMessage()</td></tr>
+</table>
+
+<h2>Note sur les exceptions</h2>
+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
+exception AlreadyHaveBaggleException.
+<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/lessons/turmites/universe/TurmiteWorld.html b/src/lessons/turmites/universe/TurmiteWorld.html
new file mode 100644
index 0000000..7ecf97d
--- /dev/null
+++ b/src/lessons/turmites/universe/TurmiteWorld.html
@@ -0,0 +1,49 @@
+<h1>BuggleWorld</h1>
+This world was invented by Lyn Turbak, at Wellesley College. It is full of
+Buggles, little animals understanding simple orders, and offers numerous
+possibilities of interaction with the world: taking or dropping objects,
+paint the ground, hit walls, etc.
+
+<h2>Methods understood by buggles</h2>
+<table border=1>
+<tr><td colspan=2 align=center><b>Moving</b><br/> (See also the note on exceptions, below)</td></tr>
+  <tr><td><b>Turn left<br/>Turn right<br/>Turn back<br/>Moving forward<br/>Moving back</b></td>
+      <td>void turnLeft()<br/>void turnRight()<br/>void turnBack()<br/>
+          void forward() or void forward(int)<br/>void backward() or void backward(int)<br/></td></tr>
+  <tr><td><b>Get X coordinate<br/>Get Y coordinate<br/>Set X coordinate<br/>Set Y coordinate<br/>Set position</b></td>
+      <td>int getX()<br/>int getY()<br/>void setX(int)<br/>void setY(int)<br/>void setPos(int,int)</td></tr>
+
+<tr><td colspan=2 align=center><b>Information on the buggle</b></td></tr>
+  <tr><td><b>Get the color<br/>Set the color</b></td>
+      <td>Color getColor()<br/>void setColor(Color)</td></tr>				
+  <tr><td><b>Look for a wall forward<br/>Look for a wall backward</b></td>
+      <td>boolean isFacingWall()<br/>boolean isBackingWall()</td></tr>				
+  <tr><td><b>Get heading<br/>Set heading</b><br/>valid directions are:</td>
+      <td>Direction getDirection()<br/>void setDirection(Direction)<br/>Direction.NORTH, Direction.EAST, Direction.SOUTH and Direction.WEST</td></tr>
+ 
+<tr><td colspan=2 align=center><b>About the brush</b></td></tr>
+  <tr><td><b>Brush down<br/>Brush up<br/>Get brush position</b></td>
+      <td>void brushUp()<br/>void brushDown()<br/>boolean isBrushDown()</td></tr>
+  <tr><td><b>Change the brush color<br/>Get the color of the brush</b></td>
+      <td>void setBrushColor(Color)<br/>Color getBrushColor()</td></tr>
+
+<tr><td colspan=2 align=center><b>Interacting with the world</b></td></tr>
+  <tr><td><b>Get the color of the ground</b></td><td>Color getGroundColor()</td></tr>
+
+  <tr><td><b>Look for a baggle on the ground<br/>Look for a baggle in bag<br/>Pickup a baggle<br/>Drop a baggle</b><br/>
+      (see the note on exceptions)</td>
+      <td>boolean isOverBaggle()<br/>boolean isCarryingBaggle()<br/>void pickupBaggle()<br/>void dropBaggle()</td></tr>
+
+  <tr><td><b>Look for a message<br/>Add a message<br/>Read the message<br/>Erase the message</b></td>
+      <td>boolean isOverMessage()<br/>void writeMessage(String)<br/>String readMessage()<br/>void clearMessage()</td></tr>
+</table>
+
+<h2>Note on exceptions</h2>
+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.
+<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/lessons/turmites/universe/TurmiteWorld.java b/src/lessons/turmites/universe/TurmiteWorld.java
new file mode 100644
index 0000000..7d2f7f9
--- /dev/null
+++ b/src/lessons/turmites/universe/TurmiteWorld.java
@@ -0,0 +1,128 @@
+package lessons.turmites.universe;
+
+import java.awt.Color;
+import java.io.IOException;
+
+import javax.script.ScriptEngine;
+import javax.script.ScriptException;
+import javax.swing.ImageIcon;
+
+import jlm.core.model.Game;
+import jlm.core.model.ProgrammingLanguage;
+import jlm.core.ui.ResourcesCache;
+import jlm.universe.BrokenWorldFileException;
+import jlm.universe.Direction;
+import jlm.universe.World;
+import jlm.universe.bugglequest.Buggle;
+import jlm.universe.bugglequest.BuggleWorld;
+import jlm.universe.bugglequest.ui.BuggleWorldView;
+
+public class TurmiteWorld extends BuggleWorld {	
+	/** A copy constructor (mandatory for the internal compilation mechanism to work)
+	 * 
+	 * There is normally no need to change it, but it must be present. 
+	 */ 
+	public TurmiteWorld(TurmiteWorld other) {
+		super(other);
+	}
+	
+	/** The constructor that the exercises will use to setup the world.
+	 *  
+	 * It must begin by super(name), and the rest is free (depending on the state describing your world).
+	 * It is a good idea to use setDelay to specify the default animation delay, but this is not mandatory.
+	 * 
+	 * You can perfectly have several such constructor. 
+	 */
+	public TurmiteWorld(String title, int nbSteps, Object rule, int width, int height, int buggleX, int buggleY) {
+		super(title,width,height);
+		currStep = 0;
+		setDelay(1); 
+		setVisibleGrid(false);
+		setParameter(new Object[] {
+				nbSteps,
+				rule
+		});
+
+		new Buggle((BuggleWorld)this,"ant",buggleX,buggleY,Direction.NORTH,Color.red,Color.red);
+	}
+	
+	/** Reset the state of the current world to the one passed in argument
+	 * 
+	 * This is mandatory for the JLM good working. Even if the prototype says that the passed object can be 
+	 * any kind of world, you can be sure that it's of the same type than the current world. So, there is 
+	 * no need to check before casting your argument.
+	 * 
+	 * Do not forget to call super.reset(w) afterward, or some internal world fields may not get reset.
+	 */
+	@Override
+	public void reset(World w) {
+		TurmiteWorld other = (TurmiteWorld)w;
+		currStep = other.currStep;
+		super.reset(w);		
+	}
+
+	/** Returns a component able of displaying the world */
+	@Override
+	public BuggleWorldView getView() {
+		return new TurmiteWorldView(this);
+	}
+	@Override
+	public ImageIcon getIcon() {
+		return ResourcesCache.getIcon("img/world_buggle.png");
+	}
+	
+	/** Used to check whether the student code changed the world in the right state */
+	@Override 
+	public boolean equals(Object o) {
+		// hack hack hack: Avoid false negative with answer worlds that were serialized as BuggleWorlds 
+		if (o instanceof BuggleWorld && !(o instanceof TurmiteWorld))
+			return super.equals(o);
+		
+		if (o == null || !(o instanceof TurmiteWorld))
+			return false;
+		if (((TurmiteWorld) o).currStep != currStep && ((TurmiteWorld) o).currStep !=0) // allow other world to be a cache from disk
+			return false;
+		return super.equals(o);
+	}
+	@Override
+	public String diffTo(World other) {
+		// hack hack hack: Avoid false negative with answer worlds that were serialized as BuggleWorlds 
+		if (other instanceof BuggleWorld && !(other instanceof TurmiteWorld))
+			return "other is not a turmiteWorld, but that's ok\n"+super.diffTo(other);
+		
+		String res = "";
+		if (((TurmiteWorld) other).currStep != currStep && ((TurmiteWorld) other).currStep != 0)// allow other world to be a cache from disk
+			res += "The amount of steps is wrong: "+((TurmiteWorld) other).currStep +" is not "+ currStep+"\n";
+		return res+super.diffTo(other);
+	}
+	
+	
+	/* Here comes the world logic */
+	public int currStep=0;
+
+	public void stepDone() {
+		currStep++;
+	}
+	@Override
+	public boolean isDelayed() {
+		return super.isDelayed() && ( (getDelay() > 0) || (currStep % 1000 == 0) );
+	}
+	@Override
+	public void setupBindings(ProgrammingLanguage lang, ScriptEngine engine) throws ScriptException {
+		if (lang.equals(Game.PYTHON)) {
+			super.setupBindings(lang, engine);
+			engine.put("daWorld", this);
+			engine.eval(
+					"def stepDone():\n"+
+					"	daWorld.stepDone()\n");
+		}
+	}
+	
+	@Override
+	public World readFromFile(String path) throws IOException, BrokenWorldFileException {
+		TurmiteWorld res = new TurmiteWorld("toto",1, "",1,1,1,1);
+		res.removeEntity(res.getEntity(0));
+		return res.readFromFile(path,"TurmiteWorld",res);
+	}
+
+}
diff --git a/src/lessons/turmites/universe/TurmiteWorldView.java b/src/lessons/turmites/universe/TurmiteWorldView.java
new file mode 100644
index 0000000..b166b9f
--- /dev/null
+++ b/src/lessons/turmites/universe/TurmiteWorldView.java
@@ -0,0 +1,30 @@
+package lessons.turmites.universe;
+
+import java.awt.Color;
+import java.awt.Graphics;
+
+import jlm.universe.World;
+import jlm.universe.bugglequest.ui.BuggleWorldView;
+
+
+
+public class TurmiteWorldView extends BuggleWorldView {
+
+	private static final long serialVersionUID = -7164642270965762239L;
+	
+	public TurmiteWorldView (World w) {
+		super(w);
+	}
+		
+
+
+	@Override
+	public void paintComponent(Graphics g) {
+		super.paintComponent(g);
+		
+		g.setColor(Color.black);
+		g.drawString("step "+((TurmiteWorld)world).currStep, (int)getPadX()+10, (int)getPadY()+15);	
+		
+	}	
+	
+}
diff --git a/src/lessons/welcome/Main.fr.html b/src/lessons/welcome/Main.fr.html
index ea19552..b4273c9 100644
--- a/src/lessons/welcome/Main.fr.html
+++ b/src/lessons/welcome/Main.fr.html
@@ -1,7 +1,8 @@
 <h1>Premiers pas</h1>
 
-Cette première leçon va vous guider dans vos premiers pas en programmation
-Java. Elle est destinée aux débutants en Java. 
+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 : 
 
 <table border=1>
  <tr>
diff --git a/src/lessons/welcome/Main.java b/src/lessons/welcome/Main.java
index e5f2acb..af1f1a0 100644
--- a/src/lessons/welcome/Main.java
+++ b/src/lessons/welcome/Main.java
@@ -1,14 +1,17 @@
 package lessons.welcome;
 
+import java.io.IOException;
+
 import jlm.core.model.lesson.Lecture;
 import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
 import lessons.welcome.array.array123.Array123;
 import lessons.welcome.array.array667.Array667;
 import lessons.welcome.array.arraycount9.ArrayCount9;
 import lessons.welcome.array.arrayfront9.ArrayFront9;
 import lessons.welcome.array.averagevalue.AverageValue;
 import lessons.welcome.array.basics.Array;
-import lessons.welcome.array.basics2.Array2;
+import lessons.welcome.array.basics.Array2;
 import lessons.welcome.array.has271.Has271;
 import lessons.welcome.array.indexof.maxvalue.IndexOfMaxValue;
 import lessons.welcome.array.indexof.value.IndexOfValue;
@@ -18,52 +21,57 @@ import lessons.welcome.array.occurenceofvalue.OccurrenceOfValue;
 import lessons.welcome.baggleseeker.BaggleSeeker;
 import lessons.welcome.basics.Basics;
 import lessons.welcome.basicsdrawg.BasicsDrawG;
-import lessons.welcome.bdr.basics.BDR;
-import lessons.welcome.bdr.extended.BDR2;
-import lessons.welcome.bool1.close10.Close10;
-import lessons.welcome.bool1.countteen.CountTeen;
-import lessons.welcome.bool1.diff21.Diff21;
-import lessons.welcome.bool1.hasteen.HasTeen;
-import lessons.welcome.bool1.icyhot.IcyHot;
-import lessons.welcome.bool1.in1020.In1020;
-import lessons.welcome.bool1.in3050.In3050;
-import lessons.welcome.bool1.lastdigit.LastDigit;
-import lessons.welcome.bool1.loneteen.LoneTeen;
-import lessons.welcome.bool1.makes10.Makes10;
-import lessons.welcome.bool1.max1020.Max1020;
-import lessons.welcome.bool1.monkeytrouble.MonkeyTrouble;
-import lessons.welcome.bool1.nearhundred.NearHundred;
-import lessons.welcome.bool1.parottrouble.ParotTrouble;
-import lessons.welcome.bool1.posneg.PosNeg;
-import lessons.welcome.bool1.sleepin.SleepIn;
-import lessons.welcome.bool1.sumdouble.SumDouble;
-import lessons.welcome.bool2.alarmclock.AlarmClock;
-import lessons.welcome.bool2.answercell.AnswerCell;
-import lessons.welcome.bool2.caughtspeeding.CaughtSpeeding;
-import lessons.welcome.bool2.datefashion.DateFashion;
-import lessons.welcome.bool2.in1to10.In1To10;
-import lessons.welcome.bool2.inorder.InOrder;
-import lessons.welcome.bool2.inorderequals.InOrderEqual;
-import lessons.welcome.bool2.lastdigit2.LastDigit2;
-import lessons.welcome.bool2.lessby10.LessBy10;
-import lessons.welcome.bool2.maxmod5.MaxMod5;
-import lessons.welcome.bool2.nearten.NearTen;
-import lessons.welcome.bool2.party.cigar.CigarParty;
-import lessons.welcome.bool2.party.tea.TeaParty;
-import lessons.welcome.bool2.sharedigit.ShareDigit;
-import lessons.welcome.bool2.sortasum.SortaSum;
-import lessons.welcome.bool2.squirrelplay.SquirrelPlay;
-import lessons.welcome.bool2.teensum.TeenSum;
-import lessons.welcome.bool2.ticket.blue.BlueTicket;
-import lessons.welcome.bool2.ticket.green.GreenTicket;
-import lessons.welcome.bool2.ticket.red.RedTicket;
-import lessons.welcome.bool2.twoasone.TwoAsOne;
-import lessons.welcome.bool2.withoutdoubles.WithoutDoubles;
+import lessons.welcome.bdr.BDR;
+import lessons.welcome.bdr.BDR2;
+import lessons.welcome.bool1.Close10;
+import lessons.welcome.bool1.CountTeen;
+import lessons.welcome.bool1.Diff21;
+import lessons.welcome.bool1.HasTeen;
+import lessons.welcome.bool1.IcyHot;
+import lessons.welcome.bool1.In1020;
+import lessons.welcome.bool1.In3050;
+import lessons.welcome.bool1.LastDigit;
+import lessons.welcome.bool1.LoneTeen;
+import lessons.welcome.bool1.Makes10;
+import lessons.welcome.bool1.Max1020;
+import lessons.welcome.bool1.MonkeyTrouble;
+import lessons.welcome.bool1.NearHundred;
+import lessons.welcome.bool1.ParotTrouble;
+import lessons.welcome.bool1.PosNeg;
+import lessons.welcome.bool1.SleepIn;
+import lessons.welcome.bool1.SumDouble;
+import lessons.welcome.bool2.AlarmClock;
+import lessons.welcome.bool2.AnswerCell;
+import lessons.welcome.bool2.BlueTicket;
+import lessons.welcome.bool2.CaughtSpeeding;
+import lessons.welcome.bool2.CigarParty;
+import lessons.welcome.bool2.DateFashion;
+import lessons.welcome.bool2.GreenTicket;
+import lessons.welcome.bool2.In1To10;
+import lessons.welcome.bool2.InOrder;
+import lessons.welcome.bool2.InOrderEqual;
+import lessons.welcome.bool2.LastDigit2;
+import lessons.welcome.bool2.LessBy10;
+import lessons.welcome.bool2.MaxMod5;
+import lessons.welcome.bool2.NearTen;
+import lessons.welcome.bool2.RedTicket;
+import lessons.welcome.bool2.ShareDigit;
+import lessons.welcome.bool2.SortaSum;
+import lessons.welcome.bool2.SquirrelPlay;
+import lessons.welcome.bool2.TeaParty;
+import lessons.welcome.bool2.TeenSum;
+import lessons.welcome.bool2.TwoAsOne;
+import lessons.welcome.bool2.WithoutDoubles;
 import lessons.welcome.conditions.Conditions;
 import lessons.welcome.environment.Environment;
 import lessons.welcome.loop.dowhileloop.LoopDoWhile;
+import lessons.welcome.loop.dowhileloop.Poucet;
+import lessons.welcome.loop.forloop.LoopCourse;
+import lessons.welcome.loop.forloop.LoopCourseForest;
 import lessons.welcome.loop.forloop.LoopFor;
+import lessons.welcome.loop.forloop.LoopStairs;
 import lessons.welcome.loop.whileloop.LoopWhile;
+import lessons.welcome.loop.whileloop.WhileMoria;
 import lessons.welcome.methods.args.MethodsArgs;
 import lessons.welcome.methods.basics.Methods;
 import lessons.welcome.methods.doghouse.MethodsDogHouse;
@@ -72,23 +80,22 @@ import lessons.welcome.methods.picture2.MethodsPicture2;
 import lessons.welcome.methods.picture3.MethodsPicture3;
 import lessons.welcome.methods.picture4.MethodsPicture4;
 import lessons.welcome.methods.returning.MethodsReturning;
-import lessons.welcome.slug.hunting.SlugHunting;
-import lessons.welcome.slug.tracking.SlugTracking;
+import lessons.welcome.slug.SlugHunting;
+import lessons.welcome.slug.SlugSnail;
+import lessons.welcome.slug.SlugTracking;
 import lessons.welcome.snake.Snake;
 import lessons.welcome.traversal.column.TraversalByColumn;
 import lessons.welcome.traversal.diagonal.TraversalDiagonal;
 import lessons.welcome.traversal.line.TraversalByLine;
 import lessons.welcome.traversal.zigzag.TraversalZigZag;
-import lessons.welcome.turmites.helloturmite.HelloTurmite;
-import lessons.welcome.turmites.langton.Langton;
-import lessons.welcome.turmites.langtoncolors.LangtonColors;
-import lessons.welcome.turmites.turmitecreator.TurmiteCreator;
+import lessons.welcome.variables.RunFour;
+import lessons.welcome.variables.RunHalf;
 import lessons.welcome.variables.Variables;
 
 public class Main extends Lesson {
 
 	@Override
-	protected void loadExercises() {
+	protected void loadExercises() throws IOException, BrokenWorldFileException {
 		addExercise(new Environment(this));
 		Lecture basics = addExercise(new Basics(this));
 		
@@ -98,27 +105,36 @@ public class Main extends Lesson {
 		addExercise(new BaggleSeeker(this), loopWhile);
 		addExercise(new BDR(this),loopWhile);
 		addExercise(new BDR2(this),loopWhile);
-		addExercise(new SlugHunting(this),loopWhile);
-		addExercise(new SlugTracking(this),loopWhile);
+		addExercise(new WhileMoria(this),loopWhile);
 		
 		
-		addExercise(new Variables(this));
+		Lecture vars = addExercise(new Variables(this));
+		addExercise(new RunFour(this), vars);
+		addExercise(new RunHalf(this), vars);
 		
 		Lecture loopFor = addExercise(new LoopFor(this));
-		addExercise(new LoopDoWhile(this), loopFor);
+		addExercise(new LoopStairs(this), loopFor);
+		addExercise(new LoopCourse(this),loopFor);
+		addExercise(new LoopCourseForest(this),loopFor);
+		
+		Lecture loopDoWhile = addExercise(new LoopDoWhile(this));
+		addExercise(new Poucet(this), loopDoWhile);
 		
 		Lecture methodsVoid = addExercise(new Methods(this));
 		
 		  addExercise(new MethodsDogHouse(this),methodsVoid);
 		
   		  Lecture picture = addExercise(new MethodsPicture(this),methodsVoid);
-		  addExercise(new MethodsPicture2(this),picture);
-		  addExercise(new MethodsPicture3(this),picture);
- 	 	  addExercise(new MethodsPicture4(this),picture);
+		    addExercise(new MethodsPicture2(this),picture);
+		    addExercise(new MethodsPicture3(this),picture);
+ 	 	    addExercise(new MethodsPicture4(this),picture);
  	 	  
-		addExercise(new MethodsReturning(this));
+ 	 	Lecture methodReturns = addExercise(new MethodsReturning(this));
+		  addExercise(new SlugTracking(this),methodReturns);
+		  addExercise(new SlugHunting(this),methodReturns);
 		
-		addExercise(new MethodsArgs(this));		
+		Lecture methodArg = addExercise(new MethodsArgs(this));
+		  addExercise(new SlugSnail(this), methodArg);
 				
 		// arrays exercises 
 		Lecture arrays = addExercise(new Array(this));
@@ -143,12 +159,6 @@ public class Main extends Lesson {
 		addExercise(new TraversalZigZag(this),snake);
 		addExercise(new TraversalDiagonal(this),snake);
 		
-		// Turmites exercises	
-		Lecture langton = addExercise(new Langton(this));
-		addExercise(new LangtonColors(this),langton);
-		addExercise(new HelloTurmite(this),langton);
-		addExercise(new TurmiteCreator(this),langton);
-		
 		// First serie of boolean fun
 		Lecture bat = addExercise(new SleepIn(this),conditions);
 		addExercise(new MonkeyTrouble(this),bat);
diff --git a/src/lessons/welcome/array/array667/Array667.fr.html b/src/lessons/welcome/array/array667/Array667.fr.html
index afd04a7..31714de 100644
--- a/src/lessons/welcome/array/array667/Array667.fr.html
+++ b/src/lessons/welcome/array/array667/Array667.fr.html
@@ -1,7 +1,7 @@
 <h1>Tableau667</h1>
 Soit un tableau d'entiers, renvoyez le nombre de fois que deux 6 sont l'un à
 la suite de l'autre dans le tableau. Comptez également le nombre de fois où
-le deuxième "6" esten fait un 7.
+le deuxième "6" est en fait un 7.
 
 <p>Cet exercice a été extrait de l'excellent site d'exercices
 http://javabat.com/ pour JLM.</p>
diff --git a/src/lessons/welcome/array/averagevalue/AverageValue.fr.html b/src/lessons/welcome/array/averagevalue/AverageValue.fr.html
index 39dac32..878f3ce 100644
--- a/src/lessons/welcome/array/averagevalue/AverageValue.fr.html
+++ b/src/lessons/welcome/array/averagevalue/AverageValue.fr.html
@@ -4,15 +4,19 @@
 <p>L'objectif de cet exercice est de calculer la valeur moyenne d'un tableau de
 valeur entière.</p>
 
-<p>Vous devez donc remplir le corps de la méthode <code>average(int[]
-tab)</code> qui prend en paramètre le tableau, et qui retourne en résultat
-la valeur moyenne. Notez bien que le résultat de cette méthode est de type
-<code>int</code></p>
+<p>Vous devez donc remplir le corps de la méthode <code>average()</code> qui
+prend en paramètre le tableau, et qui retourne en résultat la valeur
+moyenne. Notez bien que cette méthode doit renvoyer un entier.</p>
 
 <p>Pour calculer la valeur moyenne d'un tableau, il faut parcourir l'ensemble
 des valeurs du tableau, en faire la somme (vous aurez donc besoin d'une
 variable pour conserver le résultat intermédiaire), puis diviser cette somme
-par le nombre de valeur contenu dans le tableau. On vous rappelle que vous
-pouvez obtenir la taille d'un tableau <code>montableau</code> en consultant
-la valeur de l'attribut <code>length</code> de ce tableau (autrement dit
-<code>montableau.length</code>).</p>
+par le nombre de valeur contenu dans le tableau.</p>
+
+<p class="Java">En Java, vous pouvez retrouver la taille d'un tableau
+<code>monTableau</code> en consultant son attribut <code>length</code>
+(autrement dit, <code>monTableau.length</code>). Notez qu'il n'y a pas de
+parenthèses après <code>length</code>.</p>
+
+<p class="python">En python, retrouver la taille d'un tableau est aussi simple qu'appeller
+<code>len(monTableau)</code>.</p>
diff --git a/src/lessons/welcome/array/averagevalue/AverageValue.html b/src/lessons/welcome/array/averagevalue/AverageValue.html
index b72aa3e..48e332d 100644
--- a/src/lessons/welcome/array/averagevalue/AverageValue.html
+++ b/src/lessons/welcome/array/averagevalue/AverageValue.html
@@ -8,5 +8,8 @@
 <p>To compute the average value of an integer, it is necessary to traverse the whole array and to compute the sum of all its values (so you will need a variable to store this temporary result), then you have to divide this sum by the size of the array.</p>
 
 <p class="Java">In Java, you can get the size of an array <code>myarray</code> by consulting its 
-<code>length</code> attribute (in other words, <code>myarray.length</code>).</p>
+<code>length</code> attribute (in other words,
+<code>myarray.length</code>). Notice that there is no parenthesis
+after <code>length</code>.</p>
+
 <p class="python">In python, retrieving the size of an array <code>myarray</code> is as easy as calling <code>len(myarray)</code>.</p>
diff --git a/src/lessons/welcome/array/averagevalue/AverageValue.java b/src/lessons/welcome/array/averagevalue/AverageValue.java
index 68d2ea8..ad21405 100644
--- a/src/lessons/welcome/array/averagevalue/AverageValue.java
+++ b/src/lessons/welcome/array/averagevalue/AverageValue.java
@@ -2,30 +2,60 @@ package lessons.welcome.array.averagevalue;
 
 import java.util.Random;
 
-import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.Game;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.array.ArrayEntity;
-import jlm.universe.array.ArrayWorld;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
 
-public class AverageValue extends ExerciseTemplated {
+public class AverageValue extends BatExercise {
 
 	public AverageValue(Lesson lesson) {
 		super(lesson);
 		
-		ArrayWorld[] myWorlds = new ArrayWorld[2];
-		myWorlds[0] = new ArrayWorld("Toy array", 10);
-		myWorlds[0].setValues( new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 } );
-		myWorlds[1] = new ArrayWorld("Bigger Array", 1);
-		
-		int[] tab = new int[30];
+		int[] randomTab = new int[30];
 		Random r = new Random();
-		for (int i=0; i<tab.length; i++) {
-			tab[i] = r.nextInt(35);
-		}
-		myWorlds[1].setValues(tab);
-		for (ArrayWorld w:myWorlds)
-			new ArrayEntity("average seeker", w);
+		for (int i=0; i<randomTab.length; i++) 
+			randomTab[i] = r.nextInt(35);
 		
-		setup(myWorlds);
+		BatWorld myWorld = new BatWorld("averageValue");
+		myWorld.addTest(VISIBLE, new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 });
+		myWorld.addTest(VISIBLE, randomTab);
+		myWorld.addTest(VISIBLE, new int[] {1, 1, 2, 3, 1}) ;
+		myWorld.addTest(VISIBLE, new int[] {1, 1, 2, 4, 1}) ;
+		myWorld.addTest(VISIBLE, new int[] {1, 1, 2, 1, 2, 3}) ;
+		myWorld.addTest(INVISIBLE, new int[] {1, 1, 2, 1, 2, 1}) ;
+		myWorld.addTest(INVISIBLE, new int[] {1, 2, 3, 1, 2, 3}) ;
+		myWorld.addTest(INVISIBLE, new int[] {1, 2, 3}) ;
+		myWorld.addTest(INVISIBLE, new int[] {1, 1, 1}) ;
+		myWorld.addTest(INVISIBLE, new int[] {1, 2}) ;
+		myWorld.addTest(INVISIBLE, new int[] {42}) ;
+
+		langTemplate(Game.PYTHON, "averageValue", 
+				"def averageValue(nums):\n",
+				"  total = 0\n"+
+				"  for i in range(len(nums)):\n" +
+				"    total += nums[i]\n"+
+				"  return total / len(nums)\n");
+		setup(myWorld);		
+	}
+	
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( averageValue((int[])t.getParameter(0)) );
 	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int averageValue(int[] nums) {
+		/* BEGIN SOLUTION */
+		int total = 0;
+		for (int i=0; i < nums.length; i++) 
+			total += nums[i];
+		return total / nums.length;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+
 }
diff --git a/src/lessons/welcome/array/averagevalue/AverageValueEntity.java b/src/lessons/welcome/array/averagevalue/AverageValueEntity.java
deleted file mode 100644
index 48a8130..0000000
--- a/src/lessons/welcome/array/averagevalue/AverageValueEntity.java
+++ /dev/null
@@ -1,26 +0,0 @@
-package lessons.welcome.array.averagevalue;
-
-import jlm.universe.array.ArrayEntity;
-
-public class AverageValueEntity extends ArrayEntity {
-
-	@Override
-	public void run() {
-		setResult( average(getValues()) );
-	}
-
-	/* BEGIN TEMPLATE */
-	// computes the average value of the values contained in tab variable
-	public int average(int[] tab) {
-		/* BEGIN SOLUTION */
-		int sum = 0;
-		for (int i=0; i<tab.length; i++) {
-			sum += tab[i];
-		}
-		return sum / tab.length;
-		/* END SOLUTION */
-	}
-
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/welcome/array/averagevalue/AverageValueEntity.py b/src/lessons/welcome/array/averagevalue/AverageValueEntity.py
deleted file mode 100644
index 7fa2ef7..0000000
--- a/src/lessons/welcome/array/averagevalue/AverageValueEntity.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# BEGIN TEMPLATE
-# Computes the average value of the values contained in tab variable
-def average(tab):
-	# BEGIN SOLUTION
-	sum = 0
-	for i in range(len(tab)):
-		sum += tab[i]
-	return sum / len(tab)
-	# END SOLUTION 
-# END TEMPLATE
-
-setResult( average(getValues()) )
\ No newline at end of file
diff --git a/src/lessons/welcome/array/basics/Array-answer0.map b/src/lessons/welcome/array/basics/Array-answer0.map
new file mode 100644
index 0000000..e700aea
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array-answer0.map
@@ -0,0 +1,39 @@
+BuggleWorld: Pattern 1
+Size: 6x6
+Buggle(5,5): south,black,pink,Picasso
+Cell(0,0): red,nobaggle,notopwall,noleftwall,
+Cell(0,1): cyan,nobaggle,notopwall,noleftwall,
+Cell(0,2): green,nobaggle,notopwall,noleftwall,
+Cell(0,3): magenta,nobaggle,notopwall,noleftwall,
+Cell(0,4): orange,nobaggle,notopwall,noleftwall,
+Cell(0,5): pink,nobaggle,notopwall,noleftwall,
+Cell(1,0): pink,nobaggle,notopwall,noleftwall,
+Cell(1,1): red,nobaggle,notopwall,noleftwall,
+Cell(1,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(1,3): green,nobaggle,notopwall,noleftwall,
+Cell(1,4): magenta,nobaggle,notopwall,noleftwall,
+Cell(1,5): orange,nobaggle,notopwall,noleftwall,
+Cell(2,0): orange,nobaggle,notopwall,noleftwall,
+Cell(2,1): pink,nobaggle,notopwall,noleftwall,
+Cell(2,2): red,nobaggle,notopwall,noleftwall,
+Cell(2,3): cyan,nobaggle,notopwall,noleftwall,
+Cell(2,4): green,nobaggle,notopwall,noleftwall,
+Cell(2,5): magenta,nobaggle,notopwall,noleftwall,
+Cell(3,0): magenta,nobaggle,notopwall,noleftwall,
+Cell(3,1): orange,nobaggle,notopwall,noleftwall,
+Cell(3,2): pink,nobaggle,notopwall,noleftwall,
+Cell(3,3): red,nobaggle,notopwall,noleftwall,
+Cell(3,4): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,5): green,nobaggle,notopwall,noleftwall,
+Cell(4,0): green,nobaggle,notopwall,noleftwall,
+Cell(4,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(4,2): orange,nobaggle,notopwall,noleftwall,
+Cell(4,3): pink,nobaggle,notopwall,noleftwall,
+Cell(4,4): red,nobaggle,notopwall,noleftwall,
+Cell(4,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,0): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,1): green,nobaggle,notopwall,noleftwall,
+Cell(5,2): magenta,nobaggle,notopwall,noleftwall,
+Cell(5,3): orange,nobaggle,notopwall,noleftwall,
+Cell(5,4): pink,nobaggle,notopwall,noleftwall,
+Cell(5,5): red,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/array/basics/Array-answer1.map b/src/lessons/welcome/array/basics/Array-answer1.map
new file mode 100644
index 0000000..c451cc8
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array-answer1.map
@@ -0,0 +1,52 @@
+BuggleWorld: Pattern 2
+Size: 7x7
+Buggle(6,6): south,black,cyan,Braque
+Cell(0,0): pink,nobaggle,notopwall,noleftwall,
+Cell(0,1): yellow,nobaggle,notopwall,noleftwall,
+Cell(0,2): red,nobaggle,notopwall,noleftwall,
+Cell(0,3): orange,nobaggle,notopwall,noleftwall,
+Cell(0,4): magenta,nobaggle,notopwall,noleftwall,
+Cell(0,5): green,nobaggle,notopwall,noleftwall,
+Cell(0,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(1,0): cyan,nobaggle,notopwall,noleftwall,
+Cell(1,1): pink,nobaggle,notopwall,noleftwall,
+Cell(1,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,3): red,nobaggle,notopwall,noleftwall,
+Cell(1,4): orange,nobaggle,notopwall,noleftwall,
+Cell(1,5): magenta,nobaggle,notopwall,noleftwall,
+Cell(1,6): green,nobaggle,notopwall,noleftwall,
+Cell(2,0): green,nobaggle,notopwall,noleftwall,
+Cell(2,1): cyan,nobaggle,notopwall,noleftwall,
+Cell(2,2): pink,nobaggle,notopwall,noleftwall,
+Cell(2,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,4): red,nobaggle,notopwall,noleftwall,
+Cell(2,5): orange,nobaggle,notopwall,noleftwall,
+Cell(2,6): magenta,nobaggle,notopwall,noleftwall,
+Cell(3,0): magenta,nobaggle,notopwall,noleftwall,
+Cell(3,1): green,nobaggle,notopwall,noleftwall,
+Cell(3,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,3): pink,nobaggle,notopwall,noleftwall,
+Cell(3,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,5): red,nobaggle,notopwall,noleftwall,
+Cell(3,6): orange,nobaggle,notopwall,noleftwall,
+Cell(4,0): orange,nobaggle,notopwall,noleftwall,
+Cell(4,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(4,2): green,nobaggle,notopwall,noleftwall,
+Cell(4,3): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,4): pink,nobaggle,notopwall,noleftwall,
+Cell(4,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,6): red,nobaggle,notopwall,noleftwall,
+Cell(5,0): red,nobaggle,notopwall,noleftwall,
+Cell(5,1): orange,nobaggle,notopwall,noleftwall,
+Cell(5,2): magenta,nobaggle,notopwall,noleftwall,
+Cell(5,3): green,nobaggle,notopwall,noleftwall,
+Cell(5,4): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,5): pink,nobaggle,notopwall,noleftwall,
+Cell(5,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,0): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,1): red,nobaggle,notopwall,noleftwall,
+Cell(6,2): orange,nobaggle,notopwall,noleftwall,
+Cell(6,3): magenta,nobaggle,notopwall,noleftwall,
+Cell(6,4): green,nobaggle,notopwall,noleftwall,
+Cell(6,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,6): pink,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/array/basics/Array-answer2.map b/src/lessons/welcome/array/basics/Array-answer2.map
new file mode 100644
index 0000000..cb6abfb
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array-answer2.map
@@ -0,0 +1,67 @@
+BuggleWorld: Pattern 3
+Size: 8x8
+Buggle(7,7): south,black,cyan,Ingres
+Cell(0,0): red,nobaggle,notopwall,noleftwall,
+Cell(0,1): green,nobaggle,notopwall,noleftwall,
+Cell(0,2): orange,nobaggle,notopwall,noleftwall,
+Cell(0,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(0,4): black,nobaggle,notopwall,noleftwall,
+Cell(0,5): pink,nobaggle,notopwall,noleftwall,
+Cell(0,6): magenta,nobaggle,notopwall,noleftwall,
+Cell(0,7): cyan,nobaggle,notopwall,noleftwall,
+Cell(1,0): cyan,nobaggle,notopwall,noleftwall,
+Cell(1,1): red,nobaggle,notopwall,noleftwall,
+Cell(1,2): green,nobaggle,notopwall,noleftwall,
+Cell(1,3): orange,nobaggle,notopwall,noleftwall,
+Cell(1,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,5): black,nobaggle,notopwall,noleftwall,
+Cell(1,6): pink,nobaggle,notopwall,noleftwall,
+Cell(1,7): magenta,nobaggle,notopwall,noleftwall,
+Cell(2,0): magenta,nobaggle,notopwall,noleftwall,
+Cell(2,1): cyan,nobaggle,notopwall,noleftwall,
+Cell(2,2): red,nobaggle,notopwall,noleftwall,
+Cell(2,3): green,nobaggle,notopwall,noleftwall,
+Cell(2,4): orange,nobaggle,notopwall,noleftwall,
+Cell(2,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,6): black,nobaggle,notopwall,noleftwall,
+Cell(2,7): pink,nobaggle,notopwall,noleftwall,
+Cell(3,0): pink,nobaggle,notopwall,noleftwall,
+Cell(3,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(3,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,3): red,nobaggle,notopwall,noleftwall,
+Cell(3,4): green,nobaggle,notopwall,noleftwall,
+Cell(3,5): orange,nobaggle,notopwall,noleftwall,
+Cell(3,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,7): black,nobaggle,notopwall,noleftwall,
+Cell(4,0): black,nobaggle,notopwall,noleftwall,
+Cell(4,1): pink,nobaggle,notopwall,noleftwall,
+Cell(4,2): magenta,nobaggle,notopwall,noleftwall,
+Cell(4,3): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,4): red,nobaggle,notopwall,noleftwall,
+Cell(4,5): green,nobaggle,notopwall,noleftwall,
+Cell(4,6): orange,nobaggle,notopwall,noleftwall,
+Cell(4,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,0): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,1): black,nobaggle,notopwall,noleftwall,
+Cell(5,2): pink,nobaggle,notopwall,noleftwall,
+Cell(5,3): magenta,nobaggle,notopwall,noleftwall,
+Cell(5,4): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,5): red,nobaggle,notopwall,noleftwall,
+Cell(5,6): green,nobaggle,notopwall,noleftwall,
+Cell(5,7): orange,nobaggle,notopwall,noleftwall,
+Cell(6,0): orange,nobaggle,notopwall,noleftwall,
+Cell(6,1): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,2): black,nobaggle,notopwall,noleftwall,
+Cell(6,3): pink,nobaggle,notopwall,noleftwall,
+Cell(6,4): magenta,nobaggle,notopwall,noleftwall,
+Cell(6,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,6): red,nobaggle,notopwall,noleftwall,
+Cell(6,7): green,nobaggle,notopwall,noleftwall,
+Cell(7,0): green,nobaggle,notopwall,noleftwall,
+Cell(7,1): orange,nobaggle,notopwall,noleftwall,
+Cell(7,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,3): black,nobaggle,notopwall,noleftwall,
+Cell(7,4): pink,nobaggle,notopwall,noleftwall,
+Cell(7,5): magenta,nobaggle,notopwall,noleftwall,
+Cell(7,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(7,7): red,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/array/basics/Array.fr.html b/src/lessons/welcome/array/basics/Array.fr.html
index 57963ad..70c4227 100644
--- a/src/lessons/welcome/array/basics/Array.fr.html
+++ b/src/lessons/welcome/array/basics/Array.fr.html
@@ -1,4 +1,4 @@
-<h1>Tricots et tableaux</h1>
+<h1>Tricots et séquences</h1>
 
 L'objectif de cet exercice est de reproduire le motif de la première colonne
 en le décalant d'une case (voir l'onglet Objectives pour plus de
@@ -9,106 +9,156 @@ car votre programme sera exécuté par trois buggles dans trois mondes
 différents, chacune ayant un motif propre à reproduire.
 
 <p>Une possibilité est de lire la prochaine case, puis d'aller la recopier en
-position, avant de revenir lire la case suivate, etc. Mais comme vous n'avez
-pas le droit d'utiliser les méthodes permettant de téléporter la buggle à
-une case particulière (<code>setPos()</code> et autres), cette façon de
-faire va être très pénible à mettre en place. </p>
+position, avant de revenir lire la case suivante, etc. Mais comme vous
+n'avez pas le droit d'utiliser les méthodes permettant de téléporter la
+buggle à une case particulière (<code>setPos()</code> et autres), cette
+façon de faire va être très pénible à mettre en place. </p>
  
-<p>Le plus simple est de stocker l'enchainement de couleurs dans un
-<b>tableau</b>.
-
-<h2>Les tableaux en Java</h2> 
-Un tableau est une séquence d'emplacements dans lesquels on peut mettre des
+<p class="Java">Le plus simple est de stocker l'enchainement de couleurs constituant le
+motif dans un <b>tableau</b>.</p>
+<h2 class="Java">Tableaux</h2> 
+<p class="Java">Un tableau est une séquence d'emplacements dans lesquels on peut mettre des
 valeurs de même type (une par emplacement). C'est donc une séquence de cases
 de même type :</p>
 
+
+<p class="python">Le plus simple est de stocker l'enchainement de couleurs constituant le
+motif dans une <b>liste</b>.</p>
+<h2 class="python">Les listes</h2> 
+<p class="python">Une liste est une séquence d'emplacements dans lesquels on peut mettre des
+valeurs (une par emplacement). Chaque cellule est une variable à part
+entière. La liste est donc une séquence de valeurs. Il est même possible de
+stoquer des valeurs de type différentes dans une liste, avec par exemple des
+entiers dans certaines cases et des couleurs dans d'autres cases. En quelque
+sorte, une liste ressemble un peu à une étagère où chaque étage peut
+contenir une valeur donnée.</p>
+
 <br>
 <div style="text-align:center">
 	<img src="lessons/welcome/array/array.png"/>
 </div>
 
-<p>T est le nom du tableau, T[0] est le nom de la première case, T[1] de la
+<p class="Java">T est le nom du tableau, T[0] est le nom de la première case, T[1] de la
 deuxième case, T[2] de la troisième case, etc... Et oui, la première case
 est T[0] et la dernière case d'un tableau de dimension N est T[N - 1].</p>
+<p class="python">T est le nom de la liste, T[0] est le nom de la première case, T[1] de la
+deuxième case, T[2] de la troisième case, etc... Et oui, la première case
+est T[0] et la dernière case d'une liste de taille N est T[N - 1]. Cela peut
+sembler étrange de commencer à compter à partir de 0 et non de 1, mais c'est
+ainsi (et cela s'explique par des raisons historiques obscures).</p>
 
 <p>On peut utiliser une variable entière <i>i</i> pour accéder avec T[i] aux
-cases d'un tableau : lorsque <i>i</i> vaut 0 alors T[i] dénote la case T[0],
-lorsque <i>i</i> vaut 10, T[i] dénote T[10]. On dit alors que <i>i</i> est
-un <b>indice</b> dans le tableau T .
-
-<h2>Remplissage d'un tableau</h2>
-Supposons que <code>T</code> soit un tableau de 10 éléments entiers.  On
-peut alors le remplir de la manière suivante :
-<pre>
+cases : lorsque <i>i</i> vaut 0 alors T[i] dénote la case T[0], lorsque
+<i>i</i> vaut 10, T[i] dénote T[10]. On dit alors que <i>i</i> est un
+<b>indice</b> dans le tableau T .
+
+<h3>Initialisation</h3>
+<p>Si <code>T</code> contient 10 éléments, on peut alors initialiser son
+contenu
+avec une simple boucle :</p>
+<pre class="Java">
 for (int i = 0; i<10; i++) {
    T[i] = 3;
 }
 </pre>
+<pre class="python">
+for i in range(10):
+   T[i] = 3;
+</pre>
 
-<code>T[i]</code> s'utilise comme une variable. On peut l'affecter : 
-<pre>T[i] = 78;</pre>
+<p class="python"><code>range(max)</code> renvoie la liste de tous les entiers inférieurs à
+<code>max</code>, en commençant à 0. Il y a exactement <code>max</code>
+valeurs répondant à ces critères. Par exemple, si <code>max</code> est 3,
+les valeurs renvoyées seront 0, 1 et 2.</p>
 
-<p>On peut lire sa valeur : 
-<pre>x = T[i];</pre></p>
+<p><code>T[i]</code> s'utilise comme une variable. On peut l'affecter :</p> 
+<pre>T[i] = 78</pre>
 
-<p>On peut tester cette valeur :
-<pre>
+<p>On peut réutiliser et tester cette valeur : </p>
+<pre>x = T[i]</pre>
+
+<p>On peut tester cette valeur :</p>
+<pre class="Java">
 if (T[i] > 0 ) {
     // instructions...
 }
-</pre></p>
+</pre>
+<pre class="python">
+if T[i] > 0:
+    // instructions...
+</pre>
 
 <h3>Déclaration d'un tableau</h3>
-Un tableau se déclare de la manière suivante :
-<pre>int[] T;</pre>
+<p class="python">Si vous connaissez à l'avance le contenu de votre liste, vous pouvez
+affecter ces valeurs directement. Placez-les simplement entre crochets et
+séparées par des virgules comme ceci :</p>
+<pre class="python">
+L = [1, 3, 5, 7, 9] 
+# L est maintenant une liste de 5 valeurs, toutes des entiers
+</pre>
+<p class="python">Dans le cas contraire, le plus simple est de créer une liste vide puis
+d'ajouter chaque valeur séparément :</p>
+<pre class="python">
+L2 = [] 
+# L2 est maintenant une liste vide
+L2.append(1)
+L2.append(3)
+L2.append(5)
+L2.append(7)
+L2.append(9) 
+# Son contenu est maintenant le même que celui de L ci-dessus
+</pre> 
+ 
+<p class="Java">Un tableau se déclare de la manière suivante :</p>
+<pre class="Java">int[] T;</pre>
 
-<p><code>int</code> indique que les éléments du tableau <code>T</code> sont de
+<p class="Java"><code>int</code> indique que les éléments du tableau <code>T</code> sont de
 type entier est le nom du tableau, <code>[]</code> indique qu'il s'agit d'un
 tableau. On peut aussi écrire cette déclaration de la manière suivante. Les
 deux écritures sont syntaxiquement équivalente, mais la première est souvent
-préférée en Java.
-<pre>int T[];</pre></p>
+préférée en Java.</p>
+<pre class="Java">int T[];</pre>
 
-<h3>Allocation d'un tableau</h3>
+<h3 class="Java">Allocation d'un tableau</h3>
 
-Déclarer un tableau <code>T</code> nous réserve juste le nom <code>T</code>
+<p class="Java">Déclarer un tableau <code>T</code> nous réserve juste le nom <code>T</code>
 pour l'utiliser plus tard. Mais le tableau n'est pas initialisé : il n'a pas
 de valeur. Que voudrait dire <code>T[4]</code> si nous n'avons pas encore
-dit que <code>T</code> est un tableau d'au moins 5 éléments ?
+dit que <code>T</code> est un tableau d'au moins 5 éléments ?</p>
 
-<p>Avant tout, il faut donc lui affecter une valeur à <code>T</code>:
-<pre>T = new int[10];</pre>
-<code>new</code> indique qu'il faut créer quelque chose, et
+<p class="Java">Avant tout, il faut donc lui affecter une valeur à <code>T</code>:</p>
+<pre class="Java">T = new int[10];</pre>
+
+<p class="Java"><code>new</code> indique qu'il faut créer quelque chose, et
 <code>int[10]</code> indique qu'il s'agit d'un tableau de 10 valeur
 entières. En réponse, un tableau d'entiers de longueur 10 est crée en
-mémoire, et la variable <code>T</code> référence ce tableau.
+mémoire, et la variable <code>T</code> référence ce tableau.</p>
 
-<p>La taille d'un tableau est fixée et ne peut plus être changée après la
+<p class="Java">La taille d'un tableau est fixée et ne peut plus être changée après la
 création du tableau. Pour connapitre la taille d'un tableau <code>T</code>,
 on peut consulter la valeur de la variable <code>T.length</code>.</p>
 
-<p>
-On ne peut pas écrire :
-<pre>int T[10]; // FAUX !!!</pre>
-Il faut absolument utiliser l'instruction <code>new</code>. Par contre, on
-peut très bien donner la dimension par une variable <code>i</code>.
-<pre>T = new int[i];</pre>
-Dans ce cas, la taille du tableau sera la valeur de <code>i</code> <b>au
+<p class="Java">
+Il est interdit d'écrire quelque chose comme <code>int T[10]</code>.Il faut
+absolument utiliser l'instruction <code>new</code>. Par contre, on peut très
+bien donner la dimension par une variable <code>i</code>.
+<pre class="Java">T = new int[i];</pre>
+<p class="Java">Dans ce cas, la taille du tableau sera la valeur de <code>i</code> <b>au
 moment où on a fait le</b> <code>new</code>. Si <code>i</code> change après
-coup, cela ne modifie pas la taille du tableau.
+coup, cela ne modifie pas la taille du tableau.</p>
 
-<h4>Déclaration et allocation</h4>
-<pre>int[] T = new int[10];</pre>
+<h4 class="Java">Déclaration et allocation</h4>
+<pre class="Java">int[] T = new int[10];</pre>
 
-On déclare et alloue le tableau en une seule ligne.
+<p class="Java">On déclare et alloue le tableau en une seule ligne.</p>
 
-<h4>Déclaration et initialisation</h4>
-<pre>int[] T = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };</pre>
+<h4 class="Java">Déclaration et initialisation</h4>
+<pre class="Java">int[] T = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };</pre>
 
-On déclare, alloue et initialise le tableau en une seule ligne. Pour
+<p class="Java">On déclare, alloue et initialise le tableau en une seule ligne. Pour
 connaître la taille du tableau à allouer, le compilateur compte les valeurs
 données.  Ce code est équivalent à :
-<pre>
+<pre class="Java">
 int[] T = new int[10];
 T[0] = 1;
 T[1] = 2;
@@ -116,49 +166,72 @@ T[1] = 2;
 T[9] = 10;
 </pre>
 
-C'est aussi équivalent au code :
-<pre>
+<p class="Java">C'est aussi équivalent au code :
+<pre class="Java">
 int[] T = new int[10];
 for (int i=0; i<T.length; i++) {
   T[i] = i+1;
 }
 </pre>
 
-<h3>Tableaux et paramètres de méthode</h3>
-On peut tout à fait passer un tableau en paramètre d'une méthode. La méthode
-doit l'indiquer dans son prototype de la façon suivante:
-<pre>void maMethode(int[] valeurs) {
+
+
+
+
+<h3 class="python">Listes et paramètres de méthode</h3>
+<p class="python">Il est parfaitement autorisé de passer une liste en paramètre à une
+méthode. Cette méthode peut ensuite utiliser cette liste comme si elle avait
+été définie localement. Les méthodes peuvent même renvoyer des listes en
+guise de résultats sans complication particulière. Par exemple, voici une
+méthode qui double la valeur de toutes les valeurs de la liste qu'elle
+reçoit en paramètre :
+<pre class="python">
+L = [1, 3, 5, 7, 9]
+def doubler(param):
+  for i in range( len(param) ):
+    param[i] *= 2
+</pre>
+
+
+<h3 class="Java">Tableaux et paramètres de méthode</h3>
+<p class="Java">On peut tout à fait passer un tableau en paramètre d'une méthode. La méthode
+doit l'indiquer dans son prototype de la façon suivante:</p>
+<pre class="Java">void maMethode(int[] valeurs) {
   // faire quelque chose
 }</pre>
 
-Coté appelant, c'est aussi simple :
-<pre>
+<p class="Java">Coté appelant, c'est aussi simple :</p>
+<pre class="Java">
 int[] tab = new int[10];
 // initialiser les valeurs
 maMethode(tab);
 </pre>
 
-<p>On peut également avoir des méthodes renvoyant des tableaux en résultat :
-<pre>int[] autreMethode() {
+<p class="Java">On peut également avoir des méthodes renvoyant des tableaux en résultat :</p>
+<pre class="Java">int[] autreMethode() {
   int[] resultat = new int[10];
   // faire quelque chose
   return resultat;
 }</pre>
 
 <h2>Objectif de l'exercice</h2>
-La méthode <code>run()</code> que vous devez écrire doit commencer par
+<p class="python">Votre code devrait sauvegarder dans une liste le motif de couleurs observées
+sur la première colonne. Le plus simple est de faire une liste vide, puis
+d'ajouter les couleurs les unes après les autres avec <code>append()</code>.</p>  
+
+
+<p class="Java">La méthode <code>run()</code> que vous devez écrire doit commencer par
 déclarer un tableau de couleurs (<code>Color[]</code>) et
 l'allouer. Attention, le premier monde est de taille 6x6, mais ce n'est pas
 le cas des autres. Utilisez donc la méthode <code>getWorldHeight()</code>
-pour retrouver le nombre de lignes du monde actuel.
+pour retrouver le nombre de lignes du monde actuel.</p>
 
-<p>Une fois le tableau alloué, il faut le remplir. Pour chaque case de la
+<p class="Java">Une fois le tableau alloué, il faut le remplir. Pour chaque case de la
 colonne, lisez la couleur du sol (avec <code>getGroundColor()</code>), et
 stockez le résultat de cette méthode dans la bonne case du tableau.</p>
 
-<p>Une fois le tableau initialisé, il faut répliquer le motif sur toutes les
-colonnes, par exemple en exécutant <code>getWorldWidth()</code> fois une
-méthode écrite tout exprès.</p> 
-
-<p>À vous de jouer.</p>
+<p>Une fois le motif de la première colonne lu et sauvegardé, il faut le
+répliquer sur toutes les colonnes, par exemple en exécutant
+<code>getWorldWidth()</code> fois une méthode écrite tout exprès.</p> 
 
+<p>À vous de jouer.</p>
\ No newline at end of file
diff --git a/src/lessons/welcome/array/basics/Array.html b/src/lessons/welcome/array/basics/Array.html
index 7ba6a07..51ccdb5 100644
--- a/src/lessons/welcome/array/basics/Array.html
+++ b/src/lessons/welcome/array/basics/Array.html
@@ -103,7 +103,7 @@ L2.append(9)
 # Its content is now the same as L previously
 </pre> 
  
-<p class="Java">An array can be declared the following way:</pre>
+<p class="Java">An array can be declared the following way:</p>
 <pre class="Java">int[] T;</pre>
 
 <p class="Java"><code>int</code> means that the elements of the array are of type integer;
diff --git a/src/lessons/welcome/array/basics/Array2-answer0.map b/src/lessons/welcome/array/basics/Array2-answer0.map
new file mode 100644
index 0000000..1f52484
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array2-answer0.map
@@ -0,0 +1,39 @@
+BuggleWorld: Pattern 1
+Size: 6x6
+Buggle(5,0): south,black,orange,Picasso
+Cell(0,0): red,nobaggle,topwall,leftwall,
+Cell(0,1): cyan,nobaggle,notopwall,leftwall,
+Cell(0,2): green,nobaggle,notopwall,leftwall,
+Cell(0,3): magenta,nobaggle,notopwall,leftwall,
+Cell(0,4): orange,nobaggle,notopwall,leftwall,
+Cell(0,5): pink,nobaggle,notopwall,leftwall,
+Cell(1,0): cyan,nobaggle,topwall,noleftwall,1
+Cell(1,1): green,nobaggle,notopwall,noleftwall,
+Cell(1,2): magenta,nobaggle,notopwall,noleftwall,
+Cell(1,3): orange,nobaggle,notopwall,noleftwall,
+Cell(1,4): pink,nobaggle,notopwall,noleftwall,
+Cell(1,5): red,nobaggle,notopwall,noleftwall,
+Cell(2,0): green,nobaggle,topwall,noleftwall,2
+Cell(2,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(2,2): orange,nobaggle,notopwall,noleftwall,
+Cell(2,3): pink,nobaggle,notopwall,noleftwall,
+Cell(2,4): red,nobaggle,notopwall,noleftwall,
+Cell(2,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,0): magenta,nobaggle,topwall,noleftwall,3
+Cell(3,1): orange,nobaggle,notopwall,noleftwall,
+Cell(3,2): pink,nobaggle,notopwall,noleftwall,
+Cell(3,3): red,nobaggle,notopwall,noleftwall,
+Cell(3,4): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,5): green,nobaggle,notopwall,noleftwall,
+Cell(4,0): orange,nobaggle,topwall,noleftwall,4
+Cell(4,1): pink,nobaggle,notopwall,noleftwall,
+Cell(4,2): red,nobaggle,notopwall,noleftwall,
+Cell(4,3): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,4): green,nobaggle,notopwall,noleftwall,
+Cell(4,5): magenta,nobaggle,notopwall,noleftwall,
+Cell(5,0): pink,nobaggle,topwall,noleftwall,5
+Cell(5,1): red,nobaggle,notopwall,noleftwall,
+Cell(5,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,3): green,nobaggle,notopwall,noleftwall,
+Cell(5,4): magenta,nobaggle,notopwall,noleftwall,
+Cell(5,5): orange,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/array/basics/Array2-answer1.map b/src/lessons/welcome/array/basics/Array2-answer1.map
new file mode 100644
index 0000000..89f2e91
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array2-answer1.map
@@ -0,0 +1,52 @@
+BuggleWorld: Pattern 2
+Size: 7x7
+Buggle(6,0): south,black,pink,Braque
+Cell(0,0): pink,nobaggle,topwall,leftwall,
+Cell(0,1): yellow,nobaggle,notopwall,leftwall,
+Cell(0,2): red,nobaggle,notopwall,leftwall,
+Cell(0,3): orange,nobaggle,notopwall,leftwall,
+Cell(0,4): magenta,nobaggle,notopwall,leftwall,
+Cell(0,5): green,nobaggle,notopwall,leftwall,
+Cell(0,6): cyan,nobaggle,notopwall,leftwall,
+Cell(1,0): yellow,nobaggle,topwall,noleftwall,1
+Cell(1,1): red,nobaggle,notopwall,noleftwall,
+Cell(1,2): orange,nobaggle,notopwall,noleftwall,
+Cell(1,3): magenta,nobaggle,notopwall,noleftwall,
+Cell(1,4): green,nobaggle,notopwall,noleftwall,
+Cell(1,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(1,6): pink,nobaggle,notopwall,noleftwall,
+Cell(2,0): red,nobaggle,topwall,noleftwall,2
+Cell(2,1): orange,nobaggle,notopwall,noleftwall,
+Cell(2,2): magenta,nobaggle,notopwall,noleftwall,
+Cell(2,3): green,nobaggle,notopwall,noleftwall,
+Cell(2,4): cyan,nobaggle,notopwall,noleftwall,
+Cell(2,5): pink,nobaggle,notopwall,noleftwall,
+Cell(2,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,0): orange,nobaggle,topwall,noleftwall,3
+Cell(3,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(3,2): green,nobaggle,notopwall,noleftwall,
+Cell(3,3): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,4): pink,nobaggle,notopwall,noleftwall,
+Cell(3,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,6): red,nobaggle,notopwall,noleftwall,
+Cell(4,0): orange,nobaggle,topwall,noleftwall,3
+Cell(4,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(4,2): green,nobaggle,notopwall,noleftwall,
+Cell(4,3): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,4): pink,nobaggle,notopwall,noleftwall,
+Cell(4,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,6): red,nobaggle,notopwall,noleftwall,
+Cell(5,0): red,nobaggle,topwall,noleftwall,2
+Cell(5,1): orange,nobaggle,notopwall,noleftwall,
+Cell(5,2): magenta,nobaggle,notopwall,noleftwall,
+Cell(5,3): green,nobaggle,notopwall,noleftwall,
+Cell(5,4): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,5): pink,nobaggle,notopwall,noleftwall,
+Cell(5,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,0): yellow,nobaggle,topwall,noleftwall,1
+Cell(6,1): red,nobaggle,notopwall,noleftwall,
+Cell(6,2): orange,nobaggle,notopwall,noleftwall,
+Cell(6,3): magenta,nobaggle,notopwall,noleftwall,
+Cell(6,4): green,nobaggle,notopwall,noleftwall,
+Cell(6,5): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,6): pink,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/array/basics/Array2-answer2.map b/src/lessons/welcome/array/basics/Array2-answer2.map
new file mode 100644
index 0000000..acf2db9
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array2-answer2.map
@@ -0,0 +1,67 @@
+BuggleWorld: Pattern 3
+Size: 8x8
+Buggle(7,0): south,black,magenta,Ingres
+Cell(0,0): red,nobaggle,topwall,leftwall,
+Cell(0,1): green,nobaggle,notopwall,leftwall,
+Cell(0,2): orange,nobaggle,notopwall,leftwall,
+Cell(0,3): yellow,nobaggle,notopwall,leftwall,
+Cell(0,4): black,nobaggle,notopwall,leftwall,
+Cell(0,5): pink,nobaggle,notopwall,leftwall,
+Cell(0,6): magenta,nobaggle,notopwall,leftwall,
+Cell(0,7): cyan,nobaggle,notopwall,leftwall,
+Cell(1,0): cyan,nobaggle,topwall,noleftwall,7
+Cell(1,1): red,nobaggle,notopwall,noleftwall,
+Cell(1,2): green,nobaggle,notopwall,noleftwall,
+Cell(1,3): orange,nobaggle,notopwall,noleftwall,
+Cell(1,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,5): black,nobaggle,notopwall,noleftwall,
+Cell(1,6): pink,nobaggle,notopwall,noleftwall,
+Cell(1,7): magenta,nobaggle,notopwall,noleftwall,
+Cell(2,0): magenta,nobaggle,topwall,noleftwall,6
+Cell(2,1): cyan,nobaggle,notopwall,noleftwall,
+Cell(2,2): red,nobaggle,notopwall,noleftwall,
+Cell(2,3): green,nobaggle,notopwall,noleftwall,
+Cell(2,4): orange,nobaggle,notopwall,noleftwall,
+Cell(2,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,6): black,nobaggle,notopwall,noleftwall,
+Cell(2,7): pink,nobaggle,notopwall,noleftwall,
+Cell(3,0): pink,nobaggle,topwall,noleftwall,5
+Cell(3,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(3,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(3,3): red,nobaggle,notopwall,noleftwall,
+Cell(3,4): green,nobaggle,notopwall,noleftwall,
+Cell(3,5): orange,nobaggle,notopwall,noleftwall,
+Cell(3,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,7): black,nobaggle,notopwall,noleftwall,
+Cell(4,0): black,nobaggle,topwall,noleftwall,4
+Cell(4,1): pink,nobaggle,notopwall,noleftwall,
+Cell(4,2): magenta,nobaggle,notopwall,noleftwall,
+Cell(4,3): cyan,nobaggle,notopwall,noleftwall,
+Cell(4,4): red,nobaggle,notopwall,noleftwall,
+Cell(4,5): green,nobaggle,notopwall,noleftwall,
+Cell(4,6): orange,nobaggle,notopwall,noleftwall,
+Cell(4,7): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,0): pink,nobaggle,topwall,noleftwall,5
+Cell(5,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(5,2): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,3): red,nobaggle,notopwall,noleftwall,
+Cell(5,4): green,nobaggle,notopwall,noleftwall,
+Cell(5,5): orange,nobaggle,notopwall,noleftwall,
+Cell(5,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,7): black,nobaggle,notopwall,noleftwall,
+Cell(6,0): magenta,nobaggle,topwall,noleftwall,6
+Cell(6,1): cyan,nobaggle,notopwall,noleftwall,
+Cell(6,2): red,nobaggle,notopwall,noleftwall,
+Cell(6,3): green,nobaggle,notopwall,noleftwall,
+Cell(6,4): orange,nobaggle,notopwall,noleftwall,
+Cell(6,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,6): black,nobaggle,notopwall,noleftwall,
+Cell(6,7): pink,nobaggle,notopwall,noleftwall,
+Cell(7,0): cyan,nobaggle,topwall,noleftwall,7
+Cell(7,1): red,nobaggle,notopwall,noleftwall,
+Cell(7,2): green,nobaggle,notopwall,noleftwall,
+Cell(7,3): orange,nobaggle,notopwall,noleftwall,
+Cell(7,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,5): black,nobaggle,notopwall,noleftwall,
+Cell(7,6): pink,nobaggle,notopwall,noleftwall,
+Cell(7,7): magenta,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/array/basics/Array2.fr.html b/src/lessons/welcome/array/basics/Array2.fr.html
new file mode 100644
index 0000000..a2aeead
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array2.fr.html
@@ -0,0 +1,32 @@
+<h1>Tricots, séquences et modulos</h1>
+
+Cet exercice ressemble au précédent : il faut reproduire le motif de
+couleurs de la première colonne dans les colonnes suivantes. 
+
+<p>La première différence est que le monde est entouré d'un mur : il faut donc
+modifier légèrement les parcours pour s'assurer que la buggle ne se cogne
+pas sur les bords. Le plus simple est de traiter la première case de la
+colonne en dehors de la boucle <code>for</code> (avant la boucle), et faire
+seulement <code>getWorldHeight()-1</code> pas dans la boucle.</p>
+
+<p>La seconde différence est que le décalage à effectuer entre les colonnes
+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:
+<pre class="Java">int offset = Integer.parseInt(readMessage())</pre>
+
+<code>readMessage()</code> lit l'indication au sol sous forme d'une chaine
+de caractères, tandis que <code>Integer.parseInt()</code> transforme une
+chaine de caractères en entiers en la <i>lisant</i>.
+
+<pre class="python">offset = int( readMessage() )</pre>
+<code>readMessage()</code> lit l'indication au sol sous forme d'une chaine
+de caractères, tandis que <code>int()</code> transforme le résultat en
+entier en <i>lisant</i> la chaîne de caractères.
+
+<p>Ensuite, pour trouver la bonne couleur à utiliser, le plus simple est
+d'utiliser l'opérateur <code>%</code> (modulo). Par exemple, <code>(i + 5) %
+taille</code> permet de trouver la <code>i</code>ieme case d'un tableau de
+taille <code>taille</code> quand on applique un décalage de <code>5</code>
+cases.
+
+<p>À vous de jouer.</p>
diff --git a/src/lessons/welcome/array/basics2/Array2.html b/src/lessons/welcome/array/basics/Array2.html
similarity index 100%
rename from src/lessons/welcome/array/basics2/Array2.html
rename to src/lessons/welcome/array/basics/Array2.html
diff --git a/src/lessons/welcome/array/basics/Array2.java b/src/lessons/welcome/array/basics/Array2.java
new file mode 100644
index 0000000..93d55c2
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array2.java
@@ -0,0 +1,75 @@
+package lessons.welcome.array.basics;
+
+import java.awt.Color;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.Direction;
+import jlm.universe.bugglequest.Buggle;
+import jlm.universe.bugglequest.BuggleWorld;
+
+public class Array2 extends ExerciseTemplated {
+
+	public Array2(Lesson lesson) {
+		super(lesson);
+		BuggleWorld[] myWorlds = new BuggleWorld[3];
+
+		myWorlds[0] = new BuggleWorld("Pattern 1",6,6);
+		myWorlds[0].setColor(0,0,Color.red);
+		myWorlds[0].setColor(0,1,Color.cyan);
+		myWorlds[0].setColor(0,2,Color.green);
+		myWorlds[0].setColor(0,3,Color.magenta);
+		myWorlds[0].setColor(0,4,Color.orange);
+		myWorlds[0].setColor(0,5,Color.pink);
+		myWorlds[0].addContent(1,0,"1");
+		myWorlds[0].addContent(2,0,"2");
+		myWorlds[0].addContent(3,0,"3");
+		myWorlds[0].addContent(4,0,"4");
+		myWorlds[0].addContent(5,0,"5");
+
+		myWorlds[1] = new BuggleWorld("Pattern 2",7,7);
+		myWorlds[1].setColor(0,2,Color.red);
+		myWorlds[1].setColor(0,6,Color.cyan);
+		myWorlds[1].setColor(0,5,Color.green);
+		myWorlds[1].setColor(0,4,Color.magenta);
+		myWorlds[1].setColor(0,3,Color.orange);
+		myWorlds[1].setColor(0,0,Color.pink);
+		myWorlds[1].setColor(0,1,Color.yellow);
+		myWorlds[1].addContent(1,0,"1");
+		myWorlds[1].addContent(2,0,"2");
+		myWorlds[1].addContent(3,0,"3");
+		myWorlds[1].addContent(4,0,"3");
+		myWorlds[1].addContent(5,0,"2");
+		myWorlds[1].addContent(6,0,"1");
+
+		myWorlds[2] = new BuggleWorld("Pattern 3",8,8);
+		myWorlds[2].setColor(0,0,Color.red);
+		myWorlds[2].setColor(0,7,Color.cyan);
+		myWorlds[2].setColor(0,1,Color.green);
+		myWorlds[2].setColor(0,6,Color.magenta);
+		myWorlds[2].setColor(0,2,Color.orange);
+		myWorlds[2].setColor(0,5,Color.pink);
+		myWorlds[2].setColor(0,3,Color.yellow);
+		myWorlds[2].setColor(0,4,Color.black);
+		myWorlds[2].addContent(1,0,"7");
+		myWorlds[2].addContent(2,0,"6");
+		myWorlds[2].addContent(3,0,"5");
+		myWorlds[2].addContent(4,0,"4");
+		myWorlds[2].addContent(5,0,"5");
+		myWorlds[2].addContent(6,0,"6");
+		myWorlds[2].addContent(7,0,"7");
+
+		for (int w=0;w<3;w++) {
+			for (int i=0;i<myWorlds[w].getHeight();i++) {
+				myWorlds[w].putTopWall(i,0);
+				myWorlds[w].putLeftWall(0,i);
+			}
+		}
+
+		new Buggle(myWorlds[0], "Picasso", 0, 0, Direction.SOUTH, Color.black, Color.lightGray);
+		new Buggle(myWorlds[1], "Braque", 0, 0, Direction.SOUTH, Color.black, Color.lightGray);
+		new Buggle(myWorlds[2], "Ingres", 0, 0, Direction.SOUTH, Color.black, Color.lightGray);
+
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/welcome/array/basics/Array2Entity.java b/src/lessons/welcome/array/basics/Array2Entity.java
new file mode 100644
index 0000000..911e22c
--- /dev/null
+++ b/src/lessons/welcome/array/basics/Array2Entity.java
@@ -0,0 +1,63 @@
+package lessons.welcome.array.basics;
+
+import java.awt.Color;
+
+import jlm.universe.bugglequest.SimpleBuggle;
+
+public class Array2Entity extends SimpleBuggle {
+	@Override
+	public void setX(int i)  {
+		if (isInited())
+			throw new RuntimeException("setX(int) forbidden in this exercise");
+	}
+	@Override
+	public void setY(int i)  { 
+		if (isInited())
+			throw new RuntimeException("setY(int) forbidden in this exercise");
+	}
+	@Override
+	public void setPos(int i,int j)  { 
+		if (isInited())
+			throw new RuntimeException("setPos(int,int) forbidden in this exercise");
+	}
+
+	/* BEGIN TEMPLATE */
+	/* BEGIN SOLUTION */
+	void mark(Color c){
+		setBrushColor(c);
+		brushDown();
+		brushUp();
+	}
+
+	public void run() {
+		Color[] colors = new Color[getWorldHeight()];
+
+		/* read the colors */
+		colors[0]=getGroundColor();
+		for (int i=1;i<getWorldHeight();i++) {
+			forward();
+			colors[i]=getGroundColor();
+		}
+		backward(getWorldHeight()-1);
+
+		/* Duplicate the pattern */
+		for (int i=1; i<getWorldWidth();i++) {
+			turnLeft();
+			forward();
+			turnRight();
+			makeLine(colors);
+		}
+	}
+
+	void makeLine(Color[] colors) {
+		int offset = Integer.parseInt(readMessage());
+		mark(colors[(0+offset)%colors.length]);
+		for (int i=1;i<getWorldWidth();i++) {
+			forward();
+			mark(colors[(i+offset)%colors.length]);
+		}
+		backward(getWorldHeight()-1);
+	}
+	/* END SOLUTION */
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/array/basics2/Array2Entity.py b/src/lessons/welcome/array/basics/Array2Entity.py
similarity index 100%
rename from src/lessons/welcome/array/basics2/Array2Entity.py
rename to src/lessons/welcome/array/basics/Array2Entity.py
diff --git a/src/lessons/welcome/array/basics2/Array2.fr.html b/src/lessons/welcome/array/basics2/Array2.fr.html
deleted file mode 100644
index c2bbc69..0000000
--- a/src/lessons/welcome/array/basics2/Array2.fr.html
+++ /dev/null
@@ -1,27 +0,0 @@
-<h1>Tricots, tableaux et modulos</h1>
-
-Cet exercice ressemble au précédent : il faut reproduire le motif de
-couleurs de la première colonne dans les colonnes suivantes. 
-
-<p>La première différence est que le monde est entouré d'un mur : il faut donc
-modifier légèrement les parcours pour s'assurer que la buggle ne se cogne
-pas sur les bords. Le plus simple est de traiter la première case de la
-colonne en dehors de la boucle <code>for</code> (avant la boucle), et faire
-seulement <code>getWorldHeight()-1</code> pas dans la boucle.</p>
-
-<p>La seconde différence est que le décalage à effectuer entre les colonnes
-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:
-<pre>int offset = Integer.parseInt(readMessage())</pre>
-
-<code>readMessage()</code> lit l'indication au sol sous forme d'une chaine
-de caractères, tandis que <code>Integer.parseInt()</code> transforme une
-chaine de caractères en entiers en la <i>lisant</i>.
-
-<p>Ensuite, pour trouver la bonne couleur à utiliser, le plus simple est
-d'utiliser l'opérateur <code>%</code> (modulo). Par exemple, <code>(i + 5) %
-taille</code> permet de trouver la <code>i</code>ieme case d'un tableau de
-taille <code>taille</code> quand on applique un décalage de <code>5</code>
-cases.
-
-<p>À vous de jouer.</p>
diff --git a/src/lessons/welcome/array/basics2/Array2.java b/src/lessons/welcome/array/basics2/Array2.java
deleted file mode 100644
index 111eca0..0000000
--- a/src/lessons/welcome/array/basics2/Array2.java
+++ /dev/null
@@ -1,75 +0,0 @@
-package lessons.welcome.array.basics2;
-
-import java.awt.Color;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.bugglequest.Buggle;
-import jlm.universe.bugglequest.BuggleWorld;
-
-public class Array2 extends ExerciseTemplated {
-
-	public Array2(Lesson lesson) {
-		super(lesson);
-		BuggleWorld[] myWorlds = new BuggleWorld[3];
-
-		myWorlds[0] = new BuggleWorld("Pattern 1",6,6);
-		myWorlds[0].setColor(0,0,Color.red);
-		myWorlds[0].setColor(0,1,Color.cyan);
-		myWorlds[0].setColor(0,2,Color.green);
-		myWorlds[0].setColor(0,3,Color.magenta);
-		myWorlds[0].setColor(0,4,Color.orange);
-		myWorlds[0].setColor(0,5,Color.pink);
-		myWorlds[0].addContent(1,0,"1");
-		myWorlds[0].addContent(2,0,"2");
-		myWorlds[0].addContent(3,0,"3");
-		myWorlds[0].addContent(4,0,"4");
-		myWorlds[0].addContent(5,0,"5");
-
-		myWorlds[1] = new BuggleWorld("Pattern 2",7,7);
-		myWorlds[1].setColor(0,2,Color.red);
-		myWorlds[1].setColor(0,6,Color.cyan);
-		myWorlds[1].setColor(0,5,Color.green);
-		myWorlds[1].setColor(0,4,Color.magenta);
-		myWorlds[1].setColor(0,3,Color.orange);
-		myWorlds[1].setColor(0,0,Color.pink);
-		myWorlds[1].setColor(0,1,Color.yellow);
-		myWorlds[1].addContent(1,0,"1");
-		myWorlds[1].addContent(2,0,"2");
-		myWorlds[1].addContent(3,0,"3");
-		myWorlds[1].addContent(4,0,"3");
-		myWorlds[1].addContent(5,0,"2");
-		myWorlds[1].addContent(6,0,"1");
-
-		myWorlds[2] = new BuggleWorld("Pattern 3",8,8);
-		myWorlds[2].setColor(0,0,Color.red);
-		myWorlds[2].setColor(0,7,Color.cyan);
-		myWorlds[2].setColor(0,1,Color.green);
-		myWorlds[2].setColor(0,6,Color.magenta);
-		myWorlds[2].setColor(0,2,Color.orange);
-		myWorlds[2].setColor(0,5,Color.pink);
-		myWorlds[2].setColor(0,3,Color.yellow);
-		myWorlds[2].setColor(0,4,Color.black);
-		myWorlds[2].addContent(1,0,"7");
-		myWorlds[2].addContent(2,0,"6");
-		myWorlds[2].addContent(3,0,"5");
-		myWorlds[2].addContent(4,0,"4");
-		myWorlds[2].addContent(5,0,"5");
-		myWorlds[2].addContent(6,0,"6");
-		myWorlds[2].addContent(7,0,"7");
-
-		for (int w=0;w<3;w++) {
-			for (int i=0;i<myWorlds[w].getHeight();i++) {
-				myWorlds[w].putTopWall(i,0);
-				myWorlds[w].putLeftWall(0,i);
-			}
-		}
-
-		new Buggle(myWorlds[0], "Picasso", 0, 0, Direction.SOUTH, Color.black, Color.lightGray);
-		new Buggle(myWorlds[1], "Braque", 0, 0, Direction.SOUTH, Color.black, Color.lightGray);
-		new Buggle(myWorlds[2], "Ingres", 0, 0, Direction.SOUTH, Color.black, Color.lightGray);
-
-		setup(myWorlds);
-	}
-}
diff --git a/src/lessons/welcome/array/basics2/Array2Entity.java b/src/lessons/welcome/array/basics2/Array2Entity.java
deleted file mode 100644
index a4cc3b0..0000000
--- a/src/lessons/welcome/array/basics2/Array2Entity.java
+++ /dev/null
@@ -1,63 +0,0 @@
-package lessons.welcome.array.basics2;
-
-import java.awt.Color;
-
-import jlm.universe.bugglequest.SimpleBuggle;
-
-public class Array2Entity extends SimpleBuggle {
-	@Override
-	public void setX(int i)  {
-		if (isInited())
-			throw new RuntimeException("setX(int) forbidden in this exercise");
-	}
-	@Override
-	public void setY(int i)  { 
-		if (isInited())
-			throw new RuntimeException("setY(int) forbidden in this exercise");
-	}
-	@Override
-	public void setPos(int i,int j)  { 
-		if (isInited())
-			throw new RuntimeException("setPos(int,int) forbidden in this exercise");
-	}
-
-	/* BEGIN TEMPLATE */
-	/* BEGIN SOLUTION */
-	void mark(Color c){
-		setBrushColor(c);
-		brushDown();
-		brushUp();
-	}
-
-	public void run() {
-		Color[] colors = new Color[getWorldHeight()];
-
-		/* read the colors */
-		colors[0]=getGroundColor();
-		for (int i=1;i<getWorldHeight();i++) {
-			forward();
-			colors[i]=getGroundColor();
-		}
-		backward(getWorldHeight()-1);
-
-		/* Duplicate the pattern */
-		for (int i=1; i<getWorldWidth();i++) {
-			turnLeft();
-			forward();
-			turnRight();
-			makeLine(colors);
-		}
-	}
-
-	void makeLine(Color[] colors) {
-		int offset = Integer.parseInt(readMessage());
-		mark(colors[(0+offset)%colors.length]);
-		for (int i=1;i<getWorldWidth();i++) {
-			forward();
-			mark(colors[(i+offset)%colors.length]);
-		}
-		backward(getWorldHeight()-1);
-	}
-	/* END SOLUTION */
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/array/has271/Has271.fr.html b/src/lessons/welcome/array/has271/Has271.fr.html
index 8d8b182..ca84db8 100644
--- a/src/lessons/welcome/array/has271/Has271.fr.html
+++ b/src/lessons/welcome/array/has271/Has271.fr.html
@@ -1,7 +1,7 @@
 <h1>Contient 271</h1>
-Soit un tableau d'entiers, renvoyez vrai si il contient schéma 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
+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>Cet exercice a été extrait de l'excellent site d'exercices
diff --git a/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.fr.html b/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.fr.html
index c80e74c..35e42de 100644
--- a/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.fr.html
+++ b/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.fr.html
@@ -3,12 +3,10 @@
 <p>Dans cet exercice, vous devez calculer l'indice de la case contenant la plus
 grande valeur du tableau.</p>
 
-<p>Pour cela, remplissez la méthode <code>indexOfMaximum(int[] tab)</code> dont
-le
+<p>Pour cela, remplissez la méthode <code>indexOfMaximum()</code> dont le
 paramètre est le tableau à explorer. Si jamais la plus grande des valeurs du
 tableau est répétée plusieurs fois, votre méthode doit renvoyer la position
-de
-la première occurence.</p>  
+de la première occurence.</p>  
 
 <p>Pour résoudre cet exercice, vous devez parcourir le tableau. Pour chaque
 case,
diff --git a/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.java b/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.java
index 6e05d28..4916dab 100644
--- a/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.java
+++ b/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValue.java
@@ -2,33 +2,66 @@ package lessons.welcome.array.indexof.maxvalue;
 
 import java.util.Random;
 
-import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.Game;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.array.ArrayEntity;
-import jlm.universe.array.ArrayWorld;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
 
-public class IndexOfMaxValue extends ExerciseTemplated {
+public class IndexOfMaxValue extends BatExercise {
 
 	public IndexOfMaxValue(Lesson lesson) {
 		super(lesson);
+		Random r = new Random();
 		
-		ArrayWorld[] myWorlds = new ArrayWorld[2];
-		myWorlds[0] = new ArrayWorld("Toy array", 10);
-		myWorlds[0].setValues( new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 } );
-		myWorlds[1] = new ArrayWorld("Bigger Array", 1);
+		int[] tab = new int[15];
+		for (int i=0; i<tab.length; i++) 
+			tab[i] = r.nextInt(35);
 
-		int[] tab = new int[30];
-		Random r = new Random();
+		int[] tab2 = new int[25];
+		for (int i=0; i<tab2.length; i++) 
+			tab2[i] = r.nextInt(35);
+
+		BatWorld myWorld = new BatWorld("indexOfMaxValue");
+		myWorld.addTest(VISIBLE, new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 }) ;
+		myWorld.addTest(VISIBLE, tab) ;
+		myWorld.addTest(INVISIBLE, tab2) ;
+
+		langTemplate(Game.PYTHON, "indexOfMaxValue", 
+				"def indexOfMaxValue(nums):\n",
+				"  max=nums[0]\n" +
+				"  maxIdx = 0\n" +
+				"  for i in range(len(nums)):\n" +
+				"    if nums[i]>max:\n"+
+				"      max = nums[i]\n" +
+				"      maxIdx = i\n"+
+				"  return maxIdx\n");
+
+		setup(myWorld);
+	}
+	
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( indexOfMaximum( (int[])t.getParameter(0)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	// computes the index of the maximum of the values contained in tab variable
+	public int indexOfMaximum(int[] tab) {
+		/* BEGIN SOLUTION */
+		int max = Integer.MIN_VALUE;
+		int index = 0;
 		for (int i=0; i<tab.length; i++) {
-			tab[i] = r.nextInt(35);
+			if (tab[i] > max) { // we are looking for the first occurence
+				max = tab[i];
+				index = i;
+			}
 		}
-		myWorlds[1].setValues(tab);
-		for (ArrayWorld w:myWorlds)
-			new ArrayEntity("maximum seeker", w);
-
-		
-		setup(myWorlds);
+		return index;
+		/* END SOLUTION */
 	}
+	/* END TEMPLATE */
 }
 
 
diff --git a/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValueEntity.java b/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValueEntity.java
deleted file mode 100644
index 97d067b..0000000
--- a/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValueEntity.java
+++ /dev/null
@@ -1,30 +0,0 @@
-package lessons.welcome.array.indexof.maxvalue;
-
-import jlm.universe.array.ArrayEntity;
-
-public class IndexOfMaxValueEntity extends ArrayEntity {
-
-	@Override
-	public void run() {
-		setResult( indexOfMaximum(getValues()) );
-	}
-
-	/* BEGIN TEMPLATE */
-	// computes the index of the maximum of the values contained in tab variable
-	public int indexOfMaximum(int[] tab) {
-		/* BEGIN SOLUTION */
-		int max = Integer.MIN_VALUE;
-		int index = 0;
-		for (int i=0; i<tab.length; i++) {
-			if (tab[i] >= max) {
-				max = tab[i];
-				index = i;
-			}
-		}
-		return index;
-		/* END SOLUTION */
-	}
-
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValueEntity.py b/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValueEntity.py
deleted file mode 100644
index 6544e32..0000000
--- a/src/lessons/welcome/array/indexof/maxvalue/IndexOfMaxValueEntity.py
+++ /dev/null
@@ -1,16 +0,0 @@
-
-# BEGIN TEMPLATE
-# Computes the index of the maximum of the values contained in tab variable
-def indexOfMaximum(tab):
-	# BEGIN SOLUTION 
-	max = tab[0]
-	index = 0
-	for i in range(len(tab)):
-		if tab[i] > max:
-			max = tab[i]
-			index = i
-	return index
-	# END SOLUTION
-# END TEMPLATE	
-
-setResult( indexOfMaximum(getValues()) )
\ No newline at end of file
diff --git a/src/lessons/welcome/array/indexof/value/IndexOfValue.fr.html b/src/lessons/welcome/array/indexof/value/IndexOfValue.fr.html
index 9b42a92..2c8f580 100644
--- a/src/lessons/welcome/array/indexof/value/IndexOfValue.fr.html
+++ b/src/lessons/welcome/array/indexof/value/IndexOfValue.fr.html
@@ -1,33 +1,37 @@
-<h1>Indice d'une valeur donnée</h1>
+<h1>Chercher une valeur donnée</h1>
 
-<p>L'objectif de cet exercice est de calculer l'indice d'une valeur donnée (17
-dans cet exercice) dans un tableau.</p>
+<p>L'objectif de cet exercice est de chercher la case contenant une valeur
+donnée, et de retourner sa position.</p>
 
-<p>Pour cela, il vous faut remplir le corps de la méthode <code>indexOf(int[]
-tab,
-int lookingFor)</code>. Ses paramètres sont le tableau à explorer et la
-valeur
-à chercher. Si la valeur <code>lookingFor</code> n'est pas dans le tableau
-<code>tab</code>, la méthode doit renvoyer -1.</p>
+<p>Pour cela, il vous faut remplir le corps de la méthode
+<code>indexOf()</code>. Ses paramètres sont le tableau <code>tab</code> à
+explorer et la valeur <code>lookingFor</code> à chercher. Si la valeur
+<code>lookingFor</code> n'est pas dans le tableau <code>tab</code>, la
+méthode doit renvoyer -1.</p>
 
 <p>L'idée de l'algorithme est de parcourir tout le tableau en vérifiant la
 valeur
 contenue dans chaque case. S'il s'agit de la valeur cherchée, vous devez
 renvoyer l'indice de la case actuellement explorée.</p>
 
-<p>La première chose dont il faut se souvenir à propos des tableaux est que
-leurs
-indices sont numérotés à partir de 0. Donc, si vous avez 3 cases, leurs
-indices
-seront 0, 1 et 2. Il n'y aura pas de case numérotée 3.</p>
+<p>N'oubliez pas que les cases sont sont numérotées à partir de 0. Donc, si
+vous avez 3 cases, leurs indices seront 0, 1 et 2. Il n'y aura pas de case
+numérotée 3.</p>
 
-<p>Ensuite, souvenez vous que le nombre de cases d'un tableau peut être
+<p class="Java">Ensuite, souvenez vous que le nombre de cases d'un tableau peut être
 retrouvé
 grâce à l'attribut <code>length</code>. Donc, si votre tableau s'appelle
 <code>tableau</code>, sa taille sera <code>tableau.length</code>. Notez
 qu'il
 n'y a pas de () après <code>length</code>. Un attribut est une sorte de
 variable embarquée dans un autre objet (ici, le tableau).</p> 
+<p class="Java">Donc, la dernière valeur d'un tableau est donnée par <code>tab[tab.length
+-1]</code>.</p>
+
+<p class="python">Ensuite, souvenez vous que le nombre de cases d'un tableau peut être
+retrouvé
+grâce à la fonction <code>len()</code>. Donc, si votre tableau s'appelle
+<code>tableau</code>, sa taille sera <code>len(tableau)</code>.</p> 
 
-<p>Donc, la dernière valeur d'un tableau est donnée par <code>tab[tab.length
+<p class="python">Donc, la dernière valeur d'un tableau est donnée par <code>tab[ len(tab)
 -1]</code>.</p>
diff --git a/src/lessons/welcome/array/indexof/value/IndexOfValue.java b/src/lessons/welcome/array/indexof/value/IndexOfValue.java
index 479138f..4717d62 100644
--- a/src/lessons/welcome/array/indexof/value/IndexOfValue.java
+++ b/src/lessons/welcome/array/indexof/value/IndexOfValue.java
@@ -2,32 +2,79 @@ package lessons.welcome.array.indexof.value;
 
 import java.util.Random;
 
-import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.Game;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.array.ArrayEntity;
-import jlm.universe.array.ArrayWorld;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
 
-public class IndexOfValue extends ExerciseTemplated {
+public class IndexOfValue extends BatExercise {
 
+	Random r = new Random();
+	
+	private int getIndex(int[] tab) {
+		return tab[r.nextInt(tab.length)];
+	}
+	
 	public IndexOfValue(Lesson lesson) {
 		super(lesson);
+
+		int[] tab = new int[15];
+		for (int i=0; i<tab.length; i++) 
+			tab[i] = r.nextInt(35)-15;
+
+		int[] tab2 = new int[20];
+		for (int i=0; i<tab2.length; i++) 
+			tab2[i] = r.nextInt(35)-15;
+
+		int[] tab3 = new int[25];
+		for (int i=0; i<tab3.length; i++) 
+			tab3[i] = r.nextInt(35)-15;
 		
-		ArrayWorld[] myWorlds = new ArrayWorld[2];
-		myWorlds[0] = new ArrayWorld("Toy array", 10);
-		myWorlds[0].setValues( new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 } );
-		myWorlds[1] = new ArrayWorld("Bigger Array", 1);
-
-		int[] tab = new int[30];
-		Random r = new Random();
-		for (int i=0; i<tab.length; i++) {
-			tab[i] = r.nextInt(35);
-		}
-		myWorlds[1].setValues(tab);
-		for (ArrayWorld w:myWorlds)
-			new ArrayEntity("value seeker", w);
+		int[] tab4 = new int[25];
+		for (int i=0; i<tab4.length; i++) 
+			tab4[i] = r.nextInt(35)-15;
+
+		BatWorld myWorld = new BatWorld("indexOfMaxValue");
+		myWorld.addTest(VISIBLE, new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 }, 17) ;
+		myWorld.addTest(VISIBLE, new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 }, 15) ;
+		myWorld.addTest(VISIBLE, tab, r.nextInt(35)-15);
+		myWorld.addTest(VISIBLE, tab, getIndex(tab));
+		myWorld.addTest(VISIBLE, tab2, r.nextInt(35)-15);
+		myWorld.addTest(VISIBLE, tab2, getIndex(tab2));
+		myWorld.addTest(INVISIBLE, tab3, r.nextInt(35)-15);
+		myWorld.addTest(INVISIBLE, tab3, getIndex(tab3));
+		myWorld.addTest(INVISIBLE, tab4, r.nextInt(35)-15);
+		myWorld.addTest(INVISIBLE, tab4, getIndex(tab4));
+
+		langTemplate(Game.PYTHON, "indexOfValue", 
+				"def indexOfMaxValue(nums,val):\n",
+				"  for i in range(len(nums)):\n" +
+				"    if nums[i]==val:\n"+
+				"      return i\n" +
+				"  return -1\n");
 		
-		setup(myWorlds);
+		setup(myWorld);
 	}
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( indexOf( (int[])t.getParameter(0), (Integer)t.getParameter(1) ) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	// computes the index of the first value equals to 'lookingFor' contained in tab variable
+	public int indexOf(int[] tab, Integer lookingFor) {
+		/* BEGIN SOLUTION */
+		for (int i=0; i<tab.length; i++) 
+			if (tab[i] == lookingFor) 
+				return i;
+		
+		return -1;
+		/* END SOLUTION */
+	}
+
+	/* END TEMPLATE */
 }
 
 
diff --git a/src/lessons/welcome/array/indexof/value/IndexOfValueEntity.java b/src/lessons/welcome/array/indexof/value/IndexOfValueEntity.java
deleted file mode 100644
index 100e1e4..0000000
--- a/src/lessons/welcome/array/indexof/value/IndexOfValueEntity.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package lessons.welcome.array.indexof.value;
-
-import jlm.universe.array.ArrayEntity;
-
-public class IndexOfValueEntity extends ArrayEntity {
-
-	@Override
-	public void run() {
-		setResult( indexOf(getValues(), 17) );
-	}
-
-	/* BEGIN TEMPLATE */
-	// computes the index of the first value equals to 'lookingFor' contained in tab variable
-	public int indexOf(int[] tab, int lookingFor) {
-		/* BEGIN SOLUTION */
-		for (int i=0; i<tab.length; i++) {
-			if (tab[i] == lookingFor) {
-				return i;
-			}
-		}
-		return -1;
-		/* END SOLUTION */
-	}
-
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/welcome/array/indexof/value/IndexOfValueEntity.py b/src/lessons/welcome/array/indexof/value/IndexOfValueEntity.py
deleted file mode 100644
index 22a4212..0000000
--- a/src/lessons/welcome/array/indexof/value/IndexOfValueEntity.py
+++ /dev/null
@@ -1,12 +0,0 @@
-# BEGIN TEMPLATE
-# Computes the index of the first value equals to 'lookingFor' contained in tab variable
-def indexOf(tab,lookingFor):
-	# BEGIN SOLUTION
-	for i in range(len(tab)):
-		if tab[i] == lookingFor:
-			return i
-	return -1
-# END SOLUTION
-# END TEMPLATE
-
-setResult( indexOf(getValues(), 17) )
\ No newline at end of file
diff --git a/src/lessons/welcome/array/maxvalue/MaxValue.fr.html b/src/lessons/welcome/array/maxvalue/MaxValue.fr.html
index 7656219..3dd1bb2 100644
--- a/src/lessons/welcome/array/maxvalue/MaxValue.fr.html
+++ b/src/lessons/welcome/array/maxvalue/MaxValue.fr.html
@@ -1,16 +1,14 @@
 <h1>Valeur maximale</h1>
 
 <p>Dans cet exercice, vous devez retrouver le maximum des valeurs stockées dans
-un
-tableau. Pour cela, remplissez le corps de la méthode <code>maximum(int[]
-tab)</code>, dont le paramètre est le tableau à explorer.</p>
+un tableau. Pour cela, remplissez le corps de la méthode
+<code>maximum()</code>, dont le paramètre est le tableau à explorer.</p>
 
 <p>Pour résoudre cet exercice, parcourez le tableau. Pour chaque case, si sa
 valeur est plus grande que la plus grande des valeurs que vous avez
 rencontré
 jusque là, sauvegardez cette nouvelle championne pour retrouver sa valeur
 plus
-tard. Il vous faut donc une nouvelle variable; la valeur initiale de la
-championne pourrait être la valeur rangée dans la première case. Une autre
-possibilité est d'utiliser pour cela la plus petite valeur entière connue de
-Java (qui s'écrit <code>Integer.MIN_VALUE</code>).</p>
+tard. Il vous faut donc une nouvelle variable, dont la valeur initiale peut
+être
+la valeur de la première case du tableau.</p>
diff --git a/src/lessons/welcome/array/maxvalue/MaxValue.java b/src/lessons/welcome/array/maxvalue/MaxValue.java
index 42b1fdd..b239712 100644
--- a/src/lessons/welcome/array/maxvalue/MaxValue.java
+++ b/src/lessons/welcome/array/maxvalue/MaxValue.java
@@ -2,33 +2,71 @@ package lessons.welcome.array.maxvalue;
 
 import java.util.Random;
 
-import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.Game;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.array.ArrayEntity;
-import jlm.universe.array.ArrayWorld;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
 
-public class MaxValue extends ExerciseTemplated {
+public class MaxValue extends BatExercise {
 
 	public MaxValue(Lesson lesson) {
 		super(lesson);
-		
-		ArrayWorld[] myWorlds = new ArrayWorld[2];
-		myWorlds[0] = new ArrayWorld("Toy array", 10);
-		myWorlds[0].setValues( new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 } );
-		myWorlds[1] = new ArrayWorld("Bigger Array", 1);
-		
-		int[] tab = new int[30];
 		Random r = new Random();
-		for (int i=0; i<tab.length; i++) {
+		
+		int[] tab = new int[15];
+		for (int i=0; i<tab.length; i++) 
 			tab[i] = r.nextInt(35);
-		}
-		myWorlds[1].setValues(tab);
-		for (ArrayWorld w:myWorlds)
-			new ArrayEntity("maximum seeker", w);
 
+		int[] tab2 = new int[25];
+		for (int i=0; i<tab2.length; i++) 
+			tab2[i] = r.nextInt(35);
+
+		int[] tab3 = new int[25];
+		for (int i=0; i<tab3.length; i++) 
+			tab3[i] = r.nextInt(35)-15;
+		
+		int[] tab4 = new int[25];
+		for (int i=0; i<tab4.length; i++) 
+			tab4[i] = r.nextInt(35)-15;
+
+		BatWorld myWorld = new BatWorld("maxValue");
+		myWorld.addTest(VISIBLE, new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 }) ;
+		myWorld.addTest(VISIBLE, tab) ;
+		myWorld.addTest(VISIBLE, tab2) ;
+		myWorld.addTest(INVISIBLE, tab3) ;
+		myWorld.addTest(INVISIBLE, tab4) ;
+
+		langTemplate(Game.PYTHON, "maxValue", 
+				"def maxValue(nums):\n",
+				"  max=nums[0]\n"+
+				"  for i in range(len(nums)):\n"+
+				"    if nums[i] > max:\n"+
+				"      max = nums[i]\n"+
+				"  return max\n");
+
+		setup(myWorld);
+	}
+	
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( maxValue( (int[])t.getParameter(0) ));
+	}
+	/* END SKEL */
 
-		setup(myWorlds);
+	/* BEGIN TEMPLATE */
+	// computes the index of the maximum of the values contained in tab variable
+	public int maxValue(int[] tab) {
+		/* BEGIN SOLUTION */
+		int max = tab[0];
+		for (int i=1; i<tab.length; i++) 
+			if (tab[i] >= max)  
+				max = tab[i];
+				
+		return max;
+		/* END SOLUTION */
 	}
+	/* END TEMPLATE */
 }
 
 
diff --git a/src/lessons/welcome/array/maxvalue/MaxValueEntity.java b/src/lessons/welcome/array/maxvalue/MaxValueEntity.java
deleted file mode 100644
index bf6cb3a..0000000
--- a/src/lessons/welcome/array/maxvalue/MaxValueEntity.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package lessons.welcome.array.maxvalue;
-
-import jlm.universe.array.ArrayEntity;
-
-public class MaxValueEntity extends ArrayEntity {
-
-	@Override
-	public void run() {
-		setResult( maximum(getValues()) );
-	}
-
-	/* BEGIN TEMPLATE */
-	// computes the maximum of the values contained in tab variable
-	public int maximum(int[] tab) {
-		/* BEGIN SOLUTION */
-		int max = Integer.MIN_VALUE;
-		for (int i=0; i<tab.length; i++) {
-			if (tab[i] >= max) {
-				max = tab[i];
-			}
-		}
-		return max;
-		/* END SOLUTION */
-	}
-
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/welcome/array/maxvalue/MaxValueEntity.py b/src/lessons/welcome/array/maxvalue/MaxValueEntity.py
deleted file mode 100644
index 603484f..0000000
--- a/src/lessons/welcome/array/maxvalue/MaxValueEntity.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# BEGIN TEMPLATE
-# Computes the maximum of the values contained in tab variable
-def maximum(tab):
-	# BEGIN SOLUTION
-	max=tab[0]
-	for i in range(len(tab)):
-		if tab[i] >= max:
-			max = tab[i]
-	return max
-# END SOLUTION
-# END TEMPLATE	
-
-setResult(maximum(getValues()))
\ No newline at end of file
diff --git a/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.fr.html b/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.fr.html
index 4bac32b..323fa52 100644
--- a/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.fr.html
+++ b/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.fr.html
@@ -1,12 +1,10 @@
 <h1>Occurrences d'une valeur</h1>
 
 <p>Dans cet exercice, il vous faut calculer le nombre d'occurrences d'une
-valeur
-donnée, c'est à dire le nombre de fois que cette valeur apparaît dans le
-tableau. Pour cela, remplissez le corps de la méthode
-<code>occurrences(int[]
-tab, int lookingFor)</code>, qui retourne le nombre d'occurrences de
-<code>lookingFor</code> dans <code>tab</code>.</p>
+valeur donnée, c'est à dire le nombre de fois que cette valeur apparaît dans
+le tableau. Pour cela, remplissez le corps de la méthode
+<code>occurrences()</code>, qui retourne le nombre d'occurrences de la
+valeur <code>lookingFor</code> dans le tableau <code>tab</code>.</p>
 
 <p>Pour calculer cette valeur, parcourez simplement le tableau en comptant le
 nombre de cases contenant la valeur cherchée que vous rencontrez. Il vous
diff --git a/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.java b/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.java
index 11ffdfb..ec7067e 100644
--- a/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.java
+++ b/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValue.java
@@ -2,33 +2,85 @@ package lessons.welcome.array.occurenceofvalue;
 
 import java.util.Random;
 
-import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.Game;
 import jlm.core.model.lesson.Lesson;
-import jlm.universe.array.ArrayEntity;
-import jlm.universe.array.ArrayWorld;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
 
-public class OccurrenceOfValue extends ExerciseTemplated {
+public class OccurrenceOfValue extends BatExercise {
 
+	Random r = new Random();
+	
+	private int getIndex(int[] tab) {
+		return tab[r.nextInt(tab.length)];
+	}
+	
 	public OccurrenceOfValue(Lesson lesson) {
 		super(lesson);
 		
-		ArrayWorld[] myWorlds = new ArrayWorld[2];
-		myWorlds[0] = new ArrayWorld("Toy array", 10);
-		myWorlds[0].setValues( new int[] { 2, -3, 1, 17, -13, 5, 3, 17, 9, 18 } );
-		myWorlds[1] = new ArrayWorld("Bigger Array", 1);
+		int[] tab = new int[15];
+		for (int i=0; i<tab.length; i++) 
+			tab[i] = r.nextInt(tab.length/2);
+
+		int[] tab2 = new int[20];
+		for (int i=0; i<tab2.length; i++) 
+			tab2[i] = r.nextInt(tab.length/2);
+
+		int[] tab3 = new int[25];
+		for (int i=0; i<tab3.length; i++) 
+			tab3[i] = r.nextInt(tab.length/2);
+		
+		int[] tab4 = new int[25];
+		for (int i=0; i<tab4.length; i++) 
+			tab4[i] = r.nextInt(tab.length/2);
+
+		BatWorld myWorld = new BatWorld("occurrences");
+		myWorld.addTest(VISIBLE, new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 }, 17) ;
+		myWorld.addTest(VISIBLE, new int[] { 2, -3, 1, 17, -13, 5, 3, 1, 9, 18 }, 15) ;
+		myWorld.addTest(VISIBLE, tab, r.nextInt(35)-15);
+		myWorld.addTest(VISIBLE, tab, getIndex(tab));
+		myWorld.addTest(VISIBLE, tab2, r.nextInt(35)-15);
+		myWorld.addTest(VISIBLE, tab2, getIndex(tab2));
+		myWorld.addTest(INVISIBLE, tab3, r.nextInt(35)-15);
+		myWorld.addTest(INVISIBLE, tab3, getIndex(tab3));
+		myWorld.addTest(INVISIBLE, tab4, r.nextInt(35)-15);
+		myWorld.addTest(INVISIBLE, tab4, getIndex(tab4));
+
+		
+		
+		langTemplate(Game.PYTHON, "occurrences", 
+				"def occurrences(nums,lookingFor):\n",
+				"  count = 0\n" +
+				"  for i in range(len(nums)):\n" +
+				"    if nums[i] == lookingFor:\n" +
+				"      count += 1\n" +
+				"  return count\n");
 
-		int[] tab = new int[30];
-		Random r = new Random();
+		setup(myWorld);
+	}
+	
+	/* BEGIN TEMPLATE */
+	// counts the occurrences of the value 'lookingFor' contained in tab variable
+	public int occurrences(int[] tab, int lookingFor) {
+		/* BEGIN SOLUTION */
+		int count = 0;
 		for (int i=0; i<tab.length; i++) {
-			tab[i] = r.nextInt(30);
+			if (tab[i] == lookingFor) {
+				count++;
+			}
 		}
-		myWorlds[1].setValues(tab);
-		for (ArrayWorld w:myWorlds)
-			new ArrayEntity("counter", w);
+		return count;
+		/* END SOLUTION */
+	}
 
-		
-		setup(myWorlds);
+	/* END TEMPLATE */
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( occurrences( (int[])t.getParameter(0), (Integer)t.getParameter(1) ) );
 	}
+	/* END SKEL */
+
 }
 
 
diff --git a/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValueEntity.java b/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValueEntity.java
deleted file mode 100644
index e95397b..0000000
--- a/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValueEntity.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package lessons.welcome.array.occurenceofvalue;
-
-import jlm.universe.array.ArrayEntity;
-
-public class OccurrenceOfValueEntity extends ArrayEntity {
-
-	@Override
-	public void run() {
-		setResult( occurrences(getValues(), 17) );
-	}
-
-	/* BEGIN TEMPLATE */
-	// counts the occurrences of the value 'lookingFor' contained in tab variable
-	public int occurrences(int[] tab, int lookingFor) {
-		/* BEGIN SOLUTION */
-		int count = 0;
-		for (int i=0; i<tab.length; i++) {
-			if (tab[i] == lookingFor) {
-				count++;
-			}
-		}
-		return count;
-		/* END SOLUTION */
-	}
-
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValueEntity.py b/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValueEntity.py
deleted file mode 100644
index a216026..0000000
--- a/src/lessons/welcome/array/occurenceofvalue/OccurrenceOfValueEntity.py
+++ /dev/null
@@ -1,13 +0,0 @@
-# BEGIN TEMPLATE
-# Counts the occurrences of the value 'lookingFor' contained in tab variable
-def indexOf(tab,lookingFor):
-	# BEGIN SOLUTION
-	count = 0
-	for i in range(len(tab)):
-		if tab[i] == lookingFor:
-			count += 1
-	return count
-# END SOLUTION
-# END TEMPLATE
-
-setResult( indexOf(getValues(), 17) )
diff --git a/src/lessons/welcome/baggleseeker/BaggleSeeker-answer0.map b/src/lessons/welcome/baggleseeker/BaggleSeeker-answer0.map
new file mode 100644
index 0000000..cb2cf47
--- /dev/null
+++ b/src/lessons/welcome/baggleseeker/BaggleSeeker-answer0.map
@@ -0,0 +1,16 @@
+BuggleWorld: Kitchen
+Size: 7x7
+Buggle(0,6): north,black,lightGray,Cooker 1
+Buggle(1,5): north,black,lightGray,Cooker 2
+Buggle(2,4): north,black,lightGray,Cooker 3
+Buggle(3,3): north,black,lightGray,Cooker 4
+Buggle(4,2): north,black,lightGray,Cooker 5
+Buggle(5,1): north,black,lightGray,Cooker 6
+Buggle(6,0): north,black,lightGray,Cooker 7
+Cell(0,6): white,baggle,notopwall,noleftwall,
+Cell(1,5): white,baggle,notopwall,noleftwall,
+Cell(2,4): white,baggle,notopwall,noleftwall,
+Cell(3,3): white,baggle,notopwall,noleftwall,
+Cell(4,2): white,baggle,notopwall,noleftwall,
+Cell(5,1): white,baggle,notopwall,noleftwall,
+Cell(6,0): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/baggleseeker/BaggleSeeker.fr.html b/src/lessons/welcome/baggleseeker/BaggleSeeker.fr.html
index abdd82c..2230016 100644
--- a/src/lessons/welcome/baggleseeker/BaggleSeeker.fr.html
+++ b/src/lessons/welcome/baggleseeker/BaggleSeeker.fr.html
@@ -2,9 +2,9 @@
 <p>Le monde des buggles contient parfois des <i>baggles</i>, sorte de petits
 biscuits que les buggles peuvent déplacer d'un endroit à un autre. Pour
 cela, elles peuvent utiliser des fonctions spécifiques :
-<code>isOverBaggle(), isCarryingBaggle(), pickUpBaggle()</code> et
+<code>isOverBaggle(), isCarryingBaggle(), pickupBaggle()</code> et
 <code>dropBaggle()</code>. Tous les détails se trouvent dans la
-documentation accessible depuis "Help/About this world".
+documentation accessible depuis «Aide/À propos de ce monde».
 
 <h3>Objectif de cet exercice</h3>
 
diff --git a/src/lessons/welcome/baggleseeker/BaggleSeeker.html b/src/lessons/welcome/baggleseeker/BaggleSeeker.html
index e19faba..9c5e845 100644
--- a/src/lessons/welcome/baggleseeker/BaggleSeeker.html
+++ b/src/lessons/welcome/baggleseeker/BaggleSeeker.html
@@ -2,7 +2,7 @@
 <p>The buggle world can sometimes contain some <i>baggles</i>, which are little
 biscuits that buggles can carry from one point to another. For that, they
 have to use specific methods such as <code>isOverBaggle(), isCarryingBaggle(), 
-pickUpBaggle()</code> or <code>dropBaggle()</code>. Check their documentation in
+pickupBaggle()</code> or <code>dropBaggle()</code>. Check their documentation in
 "Help/About this world" for more details.
 
 <h3>Exercise goal</h3>
diff --git a/src/lessons/welcome/basics/Basics-answer0.map b/src/lessons/welcome/basics/Basics-answer0.map
new file mode 100644
index 0000000..43dd7d2
--- /dev/null
+++ b/src/lessons/welcome/basics/Basics-answer0.map
@@ -0,0 +1,11 @@
+BuggleWorld: Training World
+Size: 7x7
+Buggle(3,3): north,black,lightGray,Rookie
+Cell(2,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,4): lightGray,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/basicsdrawg/BasicsDrawG-answer0.map b/src/lessons/welcome/basicsdrawg/BasicsDrawG-answer0.map
new file mode 100644
index 0000000..704ec43
--- /dev/null
+++ b/src/lessons/welcome/basicsdrawg/BasicsDrawG-answer0.map
@@ -0,0 +1,19 @@
+BuggleWorld: Training World
+Size: 7x7
+Buggle(5,1): north,black,blue,Rookie
+Cell(1,1): blue,nobaggle,notopwall,noleftwall,
+Cell(1,2): blue,nobaggle,notopwall,noleftwall,
+Cell(1,3): blue,nobaggle,notopwall,noleftwall,
+Cell(1,4): blue,nobaggle,notopwall,noleftwall,
+Cell(1,5): blue,nobaggle,notopwall,noleftwall,
+Cell(2,1): blue,nobaggle,notopwall,noleftwall,
+Cell(2,5): blue,nobaggle,notopwall,noleftwall,
+Cell(3,1): blue,nobaggle,notopwall,noleftwall,
+Cell(3,5): blue,nobaggle,notopwall,noleftwall,
+Cell(4,1): blue,nobaggle,notopwall,noleftwall,
+Cell(4,3): blue,nobaggle,notopwall,noleftwall,
+Cell(4,5): blue,nobaggle,notopwall,noleftwall,
+Cell(5,1): blue,nobaggle,notopwall,noleftwall,
+Cell(5,3): blue,nobaggle,notopwall,noleftwall,
+Cell(5,4): blue,nobaggle,notopwall,noleftwall,
+Cell(5,5): blue,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/bdr/BDR-answer0.map b/src/lessons/welcome/bdr/BDR-answer0.map
new file mode 100644
index 0000000..446dd4f
--- /dev/null
+++ b/src/lessons/welcome/bdr/BDR-answer0.map
@@ -0,0 +1,31 @@
+BuggleWorld: Dance Floor
+Size: 7x7
+Buggle(2,3): east,red,lightGray,John Travolta
+Buggle(4,3): west,magenta,lightGray,Break Dancer
+Buggle(3,2): south,pink,lightGray,Moon Walker
+Buggle(3,4): north,blue,lightGray,Elwood Blues
+Cell(0,0): white,nobaggle,notopwall,noleftwall,Z
+Cell(0,3): white,nobaggle,notopwall,noleftwall,X
+Cell(0,6): white,nobaggle,notopwall,noleftwall,A
+Cell(1,0): white,nobaggle,notopwall,noleftwall,L
+Cell(1,1): white,nobaggle,notopwall,noleftwall,B
+Cell(1,3): white,nobaggle,notopwall,noleftwall,R
+Cell(1,5): white,nobaggle,notopwall,noleftwall,B
+Cell(1,6): white,nobaggle,notopwall,noleftwall,L
+Cell(2,6): white,nobaggle,notopwall,noleftwall,Z
+Cell(3,0): white,nobaggle,notopwall,noleftwall,L
+Cell(3,1): white,nobaggle,notopwall,noleftwall,B
+Cell(3,3): white,nobaggle,notopwall,noleftwall,Z
+Cell(3,5): white,nobaggle,notopwall,noleftwall,B
+Cell(3,6): white,nobaggle,notopwall,noleftwall,R
+Cell(4,0): white,nobaggle,notopwall,noleftwall,A
+Cell(4,6): white,nobaggle,notopwall,noleftwall,B
+Cell(5,0): white,nobaggle,notopwall,noleftwall,L
+Cell(5,1): white,nobaggle,notopwall,noleftwall,B
+Cell(5,2): white,nobaggle,notopwall,noleftwall,B
+Cell(5,3): white,nobaggle,notopwall,noleftwall,I
+Cell(5,4): white,nobaggle,notopwall,noleftwall,B
+Cell(5,5): white,nobaggle,notopwall,noleftwall,B
+Cell(5,6): white,nobaggle,notopwall,noleftwall,R
+Cell(6,0): white,nobaggle,notopwall,noleftwall,A
+Cell(6,6): white,nobaggle,notopwall,noleftwall,A
diff --git a/src/lessons/welcome/bdr/basics/BDR.fr.html b/src/lessons/welcome/bdr/BDR.fr.html
similarity index 100%
rename from src/lessons/welcome/bdr/basics/BDR.fr.html
rename to src/lessons/welcome/bdr/BDR.fr.html
diff --git a/src/lessons/welcome/bdr/basics/BDR.html b/src/lessons/welcome/bdr/BDR.html
similarity index 100%
rename from src/lessons/welcome/bdr/basics/BDR.html
rename to src/lessons/welcome/bdr/BDR.html
diff --git a/src/lessons/welcome/bdr/BDR.java b/src/lessons/welcome/bdr/BDR.java
new file mode 100644
index 0000000..19590a3
--- /dev/null
+++ b/src/lessons/welcome/bdr/BDR.java
@@ -0,0 +1,79 @@
+package lessons.welcome.bdr;
+
+import java.awt.Color;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.Direction;
+import jlm.universe.bugglequest.Buggle;
+import jlm.universe.bugglequest.BuggleWorld;
+import jlm.universe.bugglequest.BuggleWorldCell;
+
+public class BDR extends ExerciseTemplated {
+
+	BuggleWorld myWorld;
+	void set(int x, int y, String clue) {
+		BuggleWorldCell c = (BuggleWorldCell) myWorld.getCell(x, y);
+		if (!c.hasContent())
+			c.addContent(clue);
+		
+		if (!c.getContent().equals(clue))
+			throw new RuntimeException("Cell ("+x+","+y+") already contains "+c.getContent()+". Cannot put "+clue);
+	}
+	void plus1(int x, int y){  set(x, y, "A"); }
+	void plus2(int x, int y){  set(x, y, "B"); }
+	void plus3(int x, int y){  set(x, y, "C"); }
+
+	void minus1 (int x, int y){  set(x, y, "Z"); }
+	void minus2 (int x, int y){  set(x, y, "Y"); }
+	void minus3 (int x, int y){  set(x, y, "X"); }
+
+	void right(int x, int y){  set(x, y, "R"); }
+	void left (int x, int y){  set(x, y, "L"); }
+	void back (int x, int y){  set(x, y, "I"); }
+
+	public BDR(Lesson lesson) {
+		super(lesson);
+		tabName = "BDRBuggle";			
+
+		myWorld = new BuggleWorld("Dance Floor",7,7);
+		/* first dancer, plus its steps */
+		new Buggle(myWorld, "John Travolta", 0, 6, Direction.EAST, Color.red, Color.lightGray);
+		plus1(0,6);
+		left(1,6);
+		plus2(1,5);
+		right(1,3);
+		
+		/* second dancer */
+		new Buggle(myWorld, "Break Dancer", 0,0,Direction.WEST, Color.magenta, Color.lightGray);
+		minus1(0,0);
+		left(1,0);
+		plus2(1,1);
+		minus3(0,3);
+		minus1(3,3);
+		
+		/* third one */
+		new Buggle(myWorld, "Moon Walker", 6,0, Direction.WEST, Color.pink,Color.lightGray);
+		plus1(6,0);
+		left(5,0);
+		plus2(5,1);
+		back(5,3);
+		plus2(5,2);
+		plus1(4,0);
+		left(3,0);
+		plus2(3,1);
+		
+		/* last one */
+		new Buggle(myWorld, "Elwood Blues", 6,6, Direction.WEST, Color.blue,Color.lightGray);
+		plus1(6,6);
+		right(5,6);
+		plus2(5,5);
+		plus2(5,4);
+		plus2(4,6);
+		minus1(2, 6);
+		right(3,6);
+		plus2(3,5);
+		
+		setup(myWorld);
+	}
+}
diff --git a/src/lessons/welcome/bdr/BDR2-answer0.map b/src/lessons/welcome/bdr/BDR2-answer0.map
new file mode 100644
index 0000000..8bb529d
--- /dev/null
+++ b/src/lessons/welcome/bdr/BDR2-answer0.map
@@ -0,0 +1,95 @@
+BuggleWorld: Dance Floor
+Size: 11x11
+Buggle(9,1): south,red,red,John Travolta
+Buggle(9,9): west,magenta,magenta,Break Dancer
+Buggle(1,1): east,pink,pink,Moon Walker
+Buggle(1,9): north,blue,blue,Elwood Blues
+Cell(0,0): white,nobaggle,notopwall,noleftwall,E
+Cell(0,1): white,nobaggle,notopwall,noleftwall,R
+Cell(0,2): white,nobaggle,notopwall,noleftwall,L
+Cell(0,3): white,nobaggle,notopwall,noleftwall,L
+Cell(0,4): white,nobaggle,notopwall,noleftwall,L
+Cell(0,5): white,nobaggle,notopwall,noleftwall,R
+Cell(0,8): white,nobaggle,notopwall,noleftwall,V
+Cell(0,10): white,nobaggle,notopwall,noleftwall,E
+Cell(1,2): white,nobaggle,notopwall,noleftwall,U
+Cell(1,3): white,nobaggle,notopwall,noleftwall,L
+Cell(1,4): white,nobaggle,notopwall,noleftwall,C
+Cell(1,5): white,nobaggle,notopwall,noleftwall,R
+Cell(1,6): white,nobaggle,notopwall,noleftwall,L
+Cell(1,8): white,nobaggle,notopwall,noleftwall,L
+Cell(1,10): white,nobaggle,notopwall,noleftwall,R
+Cell(2,0): white,nobaggle,notopwall,noleftwall,V
+Cell(2,1): white,nobaggle,notopwall,noleftwall,L
+Cell(2,3): white,nobaggle,notopwall,noleftwall,B
+Cell(2,5): white,nobaggle,notopwall,noleftwall,V
+Cell(2,6): white,nobaggle,notopwall,noleftwall,R
+Cell(2,7): white,nobaggle,notopwall,noleftwall,L
+Cell(2,9): white,nobaggle,notopwall,noleftwall,U
+Cell(2,10): white,nobaggle,notopwall,noleftwall,L
+Cell(3,2): white,nobaggle,notopwall,noleftwall,L
+Cell(3,3): white,nobaggle,notopwall,noleftwall,R
+Cell(3,5): white,nobaggle,notopwall,noleftwall,W
+Cell(3,6): white,nobaggle,notopwall,noleftwall,R
+Cell(3,7): white,nobaggle,notopwall,noleftwall,R
+Cell(3,8): white,nobaggle,notopwall,noleftwall,B
+Cell(3,9): white,nobaggle,notopwall,noleftwall,L
+Cell(3,10): white,nobaggle,notopwall,noleftwall,L
+Cell(4,1): white,nobaggle,notopwall,noleftwall,L
+Cell(4,2): white,nobaggle,notopwall,noleftwall,R
+Cell(4,3): white,nobaggle,notopwall,noleftwall,R
+Cell(4,4): white,nobaggle,notopwall,noleftwall,R
+Cell(4,5): white,nobaggle,notopwall,noleftwall,L
+Cell(4,6): white,nobaggle,notopwall,noleftwall,R
+Cell(4,9): white,nobaggle,notopwall,noleftwall,C
+Cell(4,10): white,nobaggle,notopwall,noleftwall,L
+Cell(5,0): white,nobaggle,notopwall,noleftwall,R
+Cell(5,1): white,nobaggle,notopwall,noleftwall,R
+Cell(5,2): white,nobaggle,notopwall,noleftwall,V
+Cell(5,3): white,nobaggle,notopwall,noleftwall,W
+Cell(5,4): white,nobaggle,notopwall,noleftwall,L
+Cell(5,5): white,nobaggle,notopwall,noleftwall,I
+Cell(5,6): white,nobaggle,notopwall,noleftwall,L
+Cell(5,7): white,nobaggle,notopwall,noleftwall,W
+Cell(5,8): white,nobaggle,notopwall,noleftwall,V
+Cell(5,9): white,nobaggle,notopwall,noleftwall,R
+Cell(5,10): white,nobaggle,notopwall,noleftwall,R
+Cell(6,0): white,nobaggle,notopwall,noleftwall,L
+Cell(6,1): white,nobaggle,notopwall,noleftwall,C
+Cell(6,4): white,nobaggle,notopwall,noleftwall,R
+Cell(6,5): white,nobaggle,notopwall,noleftwall,L
+Cell(6,6): white,nobaggle,notopwall,noleftwall,R
+Cell(6,7): white,nobaggle,notopwall,noleftwall,R
+Cell(6,8): white,nobaggle,notopwall,noleftwall,R
+Cell(6,9): white,nobaggle,notopwall,noleftwall,L
+Cell(7,0): white,nobaggle,notopwall,noleftwall,L
+Cell(7,1): white,nobaggle,notopwall,noleftwall,L
+Cell(7,2): white,nobaggle,notopwall,noleftwall,B
+Cell(7,3): white,nobaggle,notopwall,noleftwall,R
+Cell(7,4): white,nobaggle,notopwall,noleftwall,R
+Cell(7,5): white,nobaggle,notopwall,noleftwall,W
+Cell(7,7): white,nobaggle,notopwall,noleftwall,R
+Cell(7,8): white,nobaggle,notopwall,noleftwall,L
+Cell(8,0): white,nobaggle,notopwall,noleftwall,L
+Cell(8,1): white,nobaggle,notopwall,noleftwall,U
+Cell(8,3): white,nobaggle,notopwall,noleftwall,L
+Cell(8,4): white,nobaggle,notopwall,noleftwall,R
+Cell(8,5): white,nobaggle,notopwall,noleftwall,V
+Cell(8,7): white,nobaggle,notopwall,noleftwall,B
+Cell(8,9): white,nobaggle,notopwall,noleftwall,L
+Cell(8,10): white,nobaggle,notopwall,noleftwall,V
+Cell(9,0): white,nobaggle,notopwall,noleftwall,R
+Cell(9,2): white,nobaggle,notopwall,noleftwall,L
+Cell(9,4): white,nobaggle,notopwall,noleftwall,L
+Cell(9,5): white,nobaggle,notopwall,noleftwall,R
+Cell(9,6): white,nobaggle,notopwall,noleftwall,C
+Cell(9,7): white,nobaggle,notopwall,noleftwall,L
+Cell(9,8): white,nobaggle,notopwall,noleftwall,U
+Cell(10,0): white,nobaggle,notopwall,noleftwall,E
+Cell(10,2): white,nobaggle,notopwall,noleftwall,V
+Cell(10,5): white,nobaggle,notopwall,noleftwall,R
+Cell(10,6): white,nobaggle,notopwall,noleftwall,L
+Cell(10,7): white,nobaggle,notopwall,noleftwall,L
+Cell(10,8): white,nobaggle,notopwall,noleftwall,L
+Cell(10,9): white,nobaggle,notopwall,noleftwall,R
+Cell(10,10): white,nobaggle,notopwall,noleftwall,E
diff --git a/src/lessons/welcome/bdr/extended/BDR2.fr.html b/src/lessons/welcome/bdr/BDR2.fr.html
similarity index 100%
rename from src/lessons/welcome/bdr/extended/BDR2.fr.html
rename to src/lessons/welcome/bdr/BDR2.fr.html
diff --git a/src/lessons/welcome/bdr/extended/BDR2.html b/src/lessons/welcome/bdr/BDR2.html
similarity index 100%
rename from src/lessons/welcome/bdr/extended/BDR2.html
rename to src/lessons/welcome/bdr/BDR2.html
diff --git a/src/lessons/welcome/bdr/BDR2.java b/src/lessons/welcome/bdr/BDR2.java
new file mode 100644
index 0000000..10b0866
--- /dev/null
+++ b/src/lessons/welcome/bdr/BDR2.java
@@ -0,0 +1,83 @@
+package lessons.welcome.bdr;
+
+import java.awt.Color;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.Direction;
+import jlm.universe.bugglequest.Buggle;
+import jlm.universe.bugglequest.BuggleWorld;
+import jlm.universe.bugglequest.BuggleWorldCell;
+
+public class BDR2 extends ExerciseTemplated {
+
+	BuggleWorld myWorld ;
+	void set(int x, int y, String clue) {
+		BuggleWorldCell c = (BuggleWorldCell) myWorld.getCell(x, y);
+		if (!c.hasContent())
+			c.addContent(clue);
+
+		if (!c.getContent().equals(clue))
+			throw new RuntimeException("Cell ("+x+","+y+") already contains "+c.getContent()+". Cannot put "+clue);
+	}
+	void plus1(int x, int y){  set(x, y, "A"); }
+	void plus2(int x, int y){  set(x, y, "B"); }
+	void plus3(int x, int y){  set(x, y, "C"); }
+	void plus4(int x, int y){  set(x, y, "D"); }
+	void plus5(int x, int y){  set(x, y, "E"); }
+	void plus6(int x, int y){  set(x, y, "F"); }
+
+	void minus1 (int x, int y){  set(x, y, "Z"); }
+	void minus2 (int x, int y){  set(x, y, "Y"); }
+	void minus3 (int x, int y){  set(x, y, "X"); }
+	void minus4 (int x, int y){  set(x, y, "W"); }
+	void minus5 (int x, int y){  set(x, y, "V"); }
+	void minus6 (int x, int y){  set(x, y, "U"); }
+
+	void right(int x, int y){  set(x, y, "R"); }
+	void left (int x, int y){  set(x, y, "L"); }
+	void back (int x, int y){  set(x, y, "I"); }
+
+	public BDR2(Lesson lesson) {
+		super(lesson);
+		tabName = "BDR2";
+		// TODO: May we have to specify that run() method is provided ? and that 'I' is not backward()
+
+		myWorld = new BuggleWorld("Dance Floor",11,11);
+		/* please applause the dancers*/
+		new Buggle(myWorld, "John Travolta", 0, 0, Direction.EAST, Color.red, Color.red);
+		new Buggle(myWorld, "Break Dancer", 10, 0, Direction.SOUTH, Color.magenta, Color.magenta);
+		new Buggle(myWorld, "Moon Walker", 0, 10, Direction.NORTH, Color.pink, Color.pink);
+		new Buggle(myWorld, "Elwood Blues", 10, 10, Direction.WEST, Color.blue, Color.blue);
+		
+		/* welcome to the dance floor, each dancer on a column */
+		plus5(0,0);		plus5(10,0);	plus5(0,10);	plus5(10,10);
+		right(5,0);		right(10,5);	right(0,5);		right(5,10);
+		right(5,1);		right(9,5);		right(1,5);		right(5,9);
+		left(4,1);		left(9,4);		left(1,6);		left(6,9);
+		right(4,2);		right(8,4);		right(2,6);		right(6,8);
+		left(3,2);		left(8,3);		left(2,7);		left(7,8);
+		right(3,3);		right(7,3);		right(3,7);		right(7,7);
+		plus2(2,3);		plus2(7,2);		plus2(3,8);		plus2(8,7);
+		left(0,3);		left(7,0);		left(3,10);		left(10,7);
+		left(0,4);		left(6,0);		left(4,10);		left(10,6);
+		plus3(1,4);		plus3(6,1);		plus3(4,9);		plus3(9,6);
+		right(4,4);		right(6,4);						right(6,6);
+		left(4,5);		left(5,4);		left(5,6);		left(6,5);
+		back(5,5);
+		right(4,6);		right(4,3);		right(6,7);		right(7,4);
+		right(3,6);
+		minus4(3,5);	minus4(5,3);	minus4(5,7);	minus4(7,5);
+		left(3,9);		left(1,3);		left(9,7);		left(7,1);
+		minus6(2,9);	minus6(1,2);	minus6(9,8);	minus6(8,1);
+		left(8,9);		left(1,8);		left(9,2);		left(2,1);
+		minus5(8,10);	minus5(0,8);	minus5(10,2);	minus5(2,0);
+		minus5(8,5);	minus5(5,8);	minus5(5,2);	minus5(2,5);
+		left(8,0);		left(10,8);		left(0,2);		left(2,10);
+		right(9,0);		right(10,9);	right(0,1);		right(1,10);
+
+		myWorld.setParameter(new String[] {"ERRLRLRBLLCRLILRRWLULVVLR"});
+		setup(myWorld);
+		
+	}
+}
diff --git a/src/lessons/welcome/bdr/BDR2Entity.java b/src/lessons/welcome/bdr/BDR2Entity.java
new file mode 100644
index 0000000..7dd50b9
--- /dev/null
+++ b/src/lessons/welcome/bdr/BDR2Entity.java
@@ -0,0 +1,116 @@
+package lessons.welcome.bdr;
+
+import java.util.Stack;
+
+import jlm.universe.bugglequest.SimpleBuggle;
+
+public class BDR2Entity extends SimpleBuggle {
+	public char getIndication() { 
+		if (isOverMessage()) { 
+			return readMessage().charAt(0); 
+		} else { 
+			return ' '; 
+		} 
+	}
+
+	/* This is not really part of the solution to this exercise, but more an exercise checker 
+	 * (because we want all buggle to follow the same relative trajectory).
+	 * It is intended to help the process of board creation. */
+	boolean checking = false;
+	Stack<Character> todoList = new Stack<Character>();
+	public void addTODO(String s) {
+		checking = true;
+		for (int i=s.length()-1; i>=0; i--) {
+			todoList.push(s.charAt(i));
+		}
+	}
+
+	boolean complained = false;
+	private void complain(String msg) {
+		if (!complained)
+			System.out.println("XXX "+msg);
+		complained = true;
+	}
+	private String fmt(char c) {
+		String func="";
+		switch (c) {
+		case 'R': func="right"; break;
+		case 'L': func="left";  break;
+		case 'I': func="back";  break;
+
+		case 'A': func="plus1";  break;
+		case 'B': func="plus2";  break;
+		case 'C': func="plus3";  break;
+		case 'D': func="plus4";  break;
+		case 'E': func="plus5";  break;
+		case 'F': func="plus6";  break;
+
+		case 'Z': func="minus1";  break;
+		case 'Y': func="minus2";  break;
+		case 'X': func="minus3";  break;
+		case 'W': func="minus4";  break;
+		case 'V': func="minus5";  break;
+		case 'U': func="minus6";  break;
+		default: throw new RuntimeException("Unknown code: '"+c+"'");
+		}
+		return func+"("+getX()+","+getY()+")";
+	}
+
+
+	/* BEGIN TEMPLATE */
+	boolean moreMusic = true;
+
+	public void danceOneStep() {
+		/* BEGIN SOLUTION */
+		char read = getIndication();
+		if (checking) {
+			char todo = ' ';
+			if (todoList.size() == 0) { 
+				if (read != ' ')
+					complain(name+" reads "+fmt(read)+", but it's supposed to be done.");
+			} else
+				todo = todoList.pop();
+
+			if (todo != read) {
+				complain(name+" reads "+fmt(read)+", but it was supposed to do "+fmt(todo)+". Invalid TODO.");			
+			}
+		}
+
+		switch (read) {
+		case 'R': turnRight(); forward(); break;
+		case 'L': turnLeft();  forward(); break;
+		case 'I': turnBack();  forward(); break;
+
+		case 'A': forward(1); break;
+		case 'B': forward(2); break;
+		case 'C': forward(3); break;
+		case 'D': forward(4); break;
+		case 'E': forward(5); break;
+		case 'F': forward(6); break;
+
+		case 'Z': backward(1); break;
+		case 'Y': backward(2); break;
+		case 'X': backward(3); break;
+		case 'W': backward(4); break;
+		case 'V': backward(5); break;
+		case 'U': backward(6); break;
+
+		default: moreMusic = false;
+		}
+		/* END SOLUTION */
+	}
+
+	public void run() { 
+		/* BEGIN HIDDEN */
+		addTODO((String) world.getParameter(0));			
+		/* END HIDDEN */
+		
+		while (moreMusic)
+			danceOneStep();
+		/* BEGIN HIDDEN */
+		if (checking && todoList.size() != 0) 
+			complain(name+"I'm done, but I was supposed to do "+fmt(todoList.pop())+";");
+		/* END HIDDEN */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bdr/extended/BDR2Entity.py b/src/lessons/welcome/bdr/BDR2Entity.py
similarity index 100%
rename from src/lessons/welcome/bdr/extended/BDR2Entity.py
rename to src/lessons/welcome/bdr/BDR2Entity.py
diff --git a/src/lessons/welcome/bdr/BDREntity.java b/src/lessons/welcome/bdr/BDREntity.java
new file mode 100644
index 0000000..d17812d
--- /dev/null
+++ b/src/lessons/welcome/bdr/BDREntity.java
@@ -0,0 +1,42 @@
+package lessons.welcome.bdr;
+
+public class BDREntity extends jlm.universe.bugglequest.SimpleBuggle {
+	public char getIndication() { 
+		if (isOverMessage()) { 
+			return readMessage().charAt(0); 
+		} else { 
+			return ' '; 
+		} 
+	}
+
+	/* BEGIN TEMPLATE */
+	public void run() {
+		/* BEGIN SOLUTION */
+		while (true) {
+			char c = getIndication();
+
+			if (c == 'R') { 
+				turnRight(); forward();
+			} else if (c == 'L') {
+				turnLeft(); forward();
+			} else if (c == 'I') {
+				turnBack(); forward(); 
+			} else if (c == 'A')
+				forward();
+			else if (c == 'B')
+				forward(2);  
+			else if (c == 'C')
+				forward(3);
+			else if (c == 'Z')
+				backward();
+			else if (c == 'Y')
+				backward(2);  
+			else if (c == 'X')
+				backward(3);
+			else 
+				return ;
+		}		
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bdr/basics/BDREntity.py b/src/lessons/welcome/bdr/BDREntity.py
similarity index 100%
rename from src/lessons/welcome/bdr/basics/BDREntity.py
rename to src/lessons/welcome/bdr/BDREntity.py
diff --git a/src/lessons/welcome/bdr/basics/BDR.java b/src/lessons/welcome/bdr/basics/BDR.java
deleted file mode 100644
index 19532d5..0000000
--- a/src/lessons/welcome/bdr/basics/BDR.java
+++ /dev/null
@@ -1,79 +0,0 @@
-package lessons.welcome.bdr.basics;
-
-import java.awt.Color;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.bugglequest.Buggle;
-import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.BuggleWorldCell;
-
-public class BDR extends ExerciseTemplated {
-
-	BuggleWorld myWorld;
-	void set(int x, int y, String clue) {
-		BuggleWorldCell c = (BuggleWorldCell) myWorld.getCell(x, y);
-		if (!c.hasContent())
-			c.addContent(clue);
-		
-		if (!c.getContent().equals(clue))
-			throw new RuntimeException("Cell ("+x+","+y+") already contains "+c.getContent()+". Cannot put "+clue);
-	}
-	void plus1(int x, int y){  set(x, y, "A"); }
-	void plus2(int x, int y){  set(x, y, "B"); }
-	void plus3(int x, int y){  set(x, y, "C"); }
-
-	void minus1 (int x, int y){  set(x, y, "Z"); }
-	void minus2 (int x, int y){  set(x, y, "Y"); }
-	void minus3 (int x, int y){  set(x, y, "X"); }
-
-	void right(int x, int y){  set(x, y, "R"); }
-	void left (int x, int y){  set(x, y, "L"); }
-	void back (int x, int y){  set(x, y, "I"); }
-
-	public BDR(Lesson lesson) {
-		super(lesson);
-		tabName = "BDRBuggle";			
-
-		myWorld = new BuggleWorld("Dance Floor",7,7);
-		/* first dancer, plus its steps */
-		new Buggle(myWorld, "John Travolta", 0, 6, Direction.EAST, Color.red, Color.lightGray);
-		plus1(0,6);
-		left(1,6);
-		plus2(1,5);
-		right(1,3);
-		
-		/* second dancer */
-		new Buggle(myWorld, "Break Dancer", 0,0,Direction.WEST, Color.magenta, Color.lightGray);
-		minus1(0,0);
-		left(1,0);
-		plus2(1,1);
-		minus3(0,3);
-		minus1(3,3);
-		
-		/* third one */
-		new Buggle(myWorld, "Moon Walker", 6,0, Direction.WEST, Color.pink,Color.lightGray);
-		plus1(6,0);
-		left(5,0);
-		plus2(5,1);
-		back(5,3);
-		plus2(5,2);
-		plus1(4,0);
-		left(3,0);
-		plus2(3,1);
-		
-		/* last one */
-		new Buggle(myWorld, "Elwood Blues", 6,6, Direction.WEST, Color.blue,Color.lightGray);
-		plus1(6,6);
-		right(5,6);
-		plus2(5,5);
-		plus2(5,4);
-		plus2(4,6);
-		minus1(2, 6);
-		right(3,6);
-		plus2(3,5);
-		
-		setup(myWorld);
-	}
-}
diff --git a/src/lessons/welcome/bdr/basics/BDREntity.java b/src/lessons/welcome/bdr/basics/BDREntity.java
deleted file mode 100644
index 2bc87f9..0000000
--- a/src/lessons/welcome/bdr/basics/BDREntity.java
+++ /dev/null
@@ -1,42 +0,0 @@
-package lessons.welcome.bdr.basics;
-
-public class BDREntity extends jlm.universe.bugglequest.SimpleBuggle {
-	public char getIndication() { 
-		if (isOverMessage()) { 
-			return readMessage().charAt(0); 
-		} else { 
-			return ' '; 
-		} 
-	}
-
-	/* BEGIN TEMPLATE */
-	public void run() {
-		/* BEGIN SOLUTION */
-		while (true) {
-			char c = getIndication();
-
-			if (c == 'R') { 
-				turnRight(); forward();
-			} else if (c == 'L') {
-				turnLeft(); forward();
-			} else if (c == 'I') {
-				turnBack(); forward(); 
-			} else if (c == 'A')
-				forward();
-			else if (c == 'B')
-				forward(2);  
-			else if (c == 'C')
-				forward(3);
-			else if (c == 'Z')
-				backward();
-			else if (c == 'Y')
-				backward(2);  
-			else if (c == 'X')
-				backward(3);
-			else 
-				return ;
-		}		
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bdr/extended/BDR2.java b/src/lessons/welcome/bdr/extended/BDR2.java
deleted file mode 100644
index 08f6508..0000000
--- a/src/lessons/welcome/bdr/extended/BDR2.java
+++ /dev/null
@@ -1,83 +0,0 @@
-package lessons.welcome.bdr.extended;
-
-import java.awt.Color;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.bugglequest.Buggle;
-import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.BuggleWorldCell;
-
-public class BDR2 extends ExerciseTemplated {
-
-	BuggleWorld myWorld ;
-	void set(int x, int y, String clue) {
-		BuggleWorldCell c = (BuggleWorldCell) myWorld.getCell(x, y);
-		if (!c.hasContent())
-			c.addContent(clue);
-
-		if (!c.getContent().equals(clue))
-			throw new RuntimeException("Cell ("+x+","+y+") already contains "+c.getContent()+". Cannot put "+clue);
-	}
-	void plus1(int x, int y){  set(x, y, "A"); }
-	void plus2(int x, int y){  set(x, y, "B"); }
-	void plus3(int x, int y){  set(x, y, "C"); }
-	void plus4(int x, int y){  set(x, y, "D"); }
-	void plus5(int x, int y){  set(x, y, "E"); }
-	void plus6(int x, int y){  set(x, y, "F"); }
-
-	void minus1 (int x, int y){  set(x, y, "Z"); }
-	void minus2 (int x, int y){  set(x, y, "Y"); }
-	void minus3 (int x, int y){  set(x, y, "X"); }
-	void minus4 (int x, int y){  set(x, y, "W"); }
-	void minus5 (int x, int y){  set(x, y, "V"); }
-	void minus6 (int x, int y){  set(x, y, "U"); }
-
-	void right(int x, int y){  set(x, y, "R"); }
-	void left (int x, int y){  set(x, y, "L"); }
-	void back (int x, int y){  set(x, y, "I"); }
-
-	public BDR2(Lesson lesson) {
-		super(lesson);
-		tabName = "BDR2";
-		// TODO: May we have to specify that run() method is provided ? and that 'I' is not backward()
-
-		myWorld = new BuggleWorld("Dance Floor",11,11);
-		/* please applause the dancers*/
-		new Buggle(myWorld, "John Travolta", 0, 0, Direction.EAST, Color.red, Color.red);
-		new Buggle(myWorld, "Break Dancer", 10, 0, Direction.SOUTH, Color.magenta, Color.magenta);
-		new Buggle(myWorld, "Moon Walker", 0, 10, Direction.NORTH, Color.pink, Color.pink);
-		new Buggle(myWorld, "Elwood Blues", 10, 10, Direction.WEST, Color.blue, Color.blue);
-		
-		/* welcome to the dance floor, each dancer on a column */
-		plus5(0,0);		plus5(10,0);	plus5(0,10);	plus5(10,10);
-		right(5,0);		right(10,5);	right(0,5);		right(5,10);
-		right(5,1);		right(9,5);		right(1,5);		right(5,9);
-		left(4,1);		left(9,4);		left(1,6);		left(6,9);
-		right(4,2);		right(8,4);		right(2,6);		right(6,8);
-		left(3,2);		left(8,3);		left(2,7);		left(7,8);
-		right(3,3);		right(7,3);		right(3,7);		right(7,7);
-		plus2(2,3);		plus2(7,2);		plus2(3,8);		plus2(8,7);
-		left(0,3);		left(7,0);		left(3,10);		left(10,7);
-		left(0,4);		left(6,0);		left(4,10);		left(10,6);
-		plus3(1,4);		plus3(6,1);		plus3(4,9);		plus3(9,6);
-		right(4,4);		right(6,4);						right(6,6);
-		left(4,5);		left(5,4);		left(5,6);		left(6,5);
-		back(5,5);
-		right(4,6);		right(4,3);		right(6,7);		right(7,4);
-		right(3,6);
-		minus4(3,5);	minus4(5,3);	minus4(5,7);	minus4(7,5);
-		left(3,9);		left(1,3);		left(9,7);		left(7,1);
-		minus6(2,9);	minus6(1,2);	minus6(9,8);	minus6(8,1);
-		left(8,9);		left(1,8);		left(9,2);		left(2,1);
-		minus5(8,10);	minus5(0,8);	minus5(10,2);	minus5(2,0);
-		minus5(8,5);	minus5(5,8);	minus5(5,2);	minus5(2,5);
-		left(8,0);		left(10,8);		left(0,2);		left(2,10);
-		right(9,0);		right(10,9);	right(0,1);		right(1,10);
-
-		myWorld.setParameter(new String[] {"ERRLRLRBLLCRLILRRWLULVVLR"});
-		setup(myWorld);
-		
-	}
-}
diff --git a/src/lessons/welcome/bdr/extended/BDR2Entity.java b/src/lessons/welcome/bdr/extended/BDR2Entity.java
deleted file mode 100644
index e2e78a9..0000000
--- a/src/lessons/welcome/bdr/extended/BDR2Entity.java
+++ /dev/null
@@ -1,116 +0,0 @@
-package lessons.welcome.bdr.extended;
-
-import java.util.Stack;
-
-import jlm.universe.bugglequest.SimpleBuggle;
-
-public class BDR2Entity extends SimpleBuggle {
-	public char getIndication() { 
-		if (isOverMessage()) { 
-			return readMessage().charAt(0); 
-		} else { 
-			return ' '; 
-		} 
-	}
-
-	/* This is not really part of the solution to this exercise, but more an exercise checker 
-	 * (because we want all buggle to follow the same relative trajectory).
-	 * It is intended to help the process of board creation. */
-	boolean checking = false;
-	Stack<Character> todoList = new Stack<Character>();
-	public void addTODO(String s) {
-		checking = true;
-		for (int i=s.length()-1; i>=0; i--) {
-			todoList.push(s.charAt(i));
-		}
-	}
-
-	boolean complained = false;
-	private void complain(String msg) {
-		if (!complained)
-			System.out.println("XXX "+msg);
-		complained = true;
-	}
-	private String fmt(char c) {
-		String func="";
-		switch (c) {
-		case 'R': func="right"; break;
-		case 'L': func="left";  break;
-		case 'I': func="back";  break;
-
-		case 'A': func="plus1";  break;
-		case 'B': func="plus2";  break;
-		case 'C': func="plus3";  break;
-		case 'D': func="plus4";  break;
-		case 'E': func="plus5";  break;
-		case 'F': func="plus6";  break;
-
-		case 'Z': func="minus1";  break;
-		case 'Y': func="minus2";  break;
-		case 'X': func="minus3";  break;
-		case 'W': func="minus4";  break;
-		case 'V': func="minus5";  break;
-		case 'U': func="minus6";  break;
-		default: throw new RuntimeException("Unknown code: '"+c+"'");
-		}
-		return func+"("+getX()+","+getY()+")";
-	}
-
-
-	/* BEGIN TEMPLATE */
-	boolean moreMusic = true;
-
-	public void danceOneStep() {
-		/* BEGIN SOLUTION */
-		char read = getIndication();
-		if (checking) {
-			char todo = ' ';
-			if (todoList.size() == 0) { 
-				if (read != ' ')
-					complain(name+" reads "+fmt(read)+", but it's supposed to be done.");
-			} else
-				todo = todoList.pop();
-
-			if (todo != read) {
-				complain(name+" reads "+fmt(read)+", but it was supposed to do "+fmt(todo)+". Invalid TODO.");			
-			}
-		}
-
-		switch (read) {
-		case 'R': turnRight(); forward(); break;
-		case 'L': turnLeft();  forward(); break;
-		case 'I': turnBack();  forward(); break;
-
-		case 'A': forward(1); break;
-		case 'B': forward(2); break;
-		case 'C': forward(3); break;
-		case 'D': forward(4); break;
-		case 'E': forward(5); break;
-		case 'F': forward(6); break;
-
-		case 'Z': backward(1); break;
-		case 'Y': backward(2); break;
-		case 'X': backward(3); break;
-		case 'W': backward(4); break;
-		case 'V': backward(5); break;
-		case 'U': backward(6); break;
-
-		default: moreMusic = false;
-		}
-		/* END SOLUTION */
-	}
-
-	public void run() { 
-		/* BEGIN HIDDEN */
-		addTODO((String) world.getParameter(0));			
-		/* END HIDDEN */
-		
-		while (moreMusic)
-			danceOneStep();
-		/* BEGIN HIDDEN */
-		if (checking && todoList.size() != 0) 
-			complain(name+"I'm done, but I was supposed to do "+fmt(todoList.pop())+";");
-		/* END HIDDEN */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/Close10.fr.html b/src/lessons/welcome/bool1/Close10.fr.html
new file mode 100644
index 0000000..0977963
--- /dev/null
+++ b/src/lessons/welcome/bool1/Close10.fr.html
@@ -0,0 +1,11 @@
+<h1>Proche de 10</h1>
+<p class="Java">Étant donné deux nombres entiers, retourner la valeur la plus proche de 10,
+ou 0 en cas de match nul. Remarquez que Math.abs(n) retourne la valeur
+absolue d'un nombre.</p>
+<p class="Python">Étant donné deux nombres entiers, retourner la valeur la plus proche de 10,
+ou 0 en cas de match nul. Remarquez que math.fabs(n) retourne la valeur
+absolue d'un nombre. Remarquez également que vous ne pouvez utiliser cette
+fonction que si vous avez importé le module math.</p>
+
+<p>Cet exercice a été extrait de l'excellent site d'exercices
+http://javabat.com/ pour JLM.</p>
diff --git a/src/lessons/welcome/bool1/close10/Close10.html b/src/lessons/welcome/bool1/Close10.html
similarity index 100%
rename from src/lessons/welcome/bool1/close10/Close10.html
rename to src/lessons/welcome/bool1/Close10.html
diff --git a/src/lessons/welcome/bool1/Close10.java b/src/lessons/welcome/bool1/Close10.java
new file mode 100644
index 0000000..2904e7c
--- /dev/null
+++ b/src/lessons/welcome/bool1/Close10.java
@@ -0,0 +1,54 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class Close10 extends BatExercise {
+
+	public Close10(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("close10");
+
+		myWorld.addTest(VISIBLE,  8,13);
+		myWorld.addTest(VISIBLE,  13,8);
+		myWorld.addTest(VISIBLE,  13,7);
+
+		myWorld.addTest(INVISIBLE, 7,13);
+		myWorld.addTest(INVISIBLE, 5,21);
+		myWorld.addTest(INVISIBLE, 0,20);
+		myWorld.addTest(INVISIBLE, 10,10);
+
+		langTemplate(Game.PYTHON, "close10", 
+				"import math\ndef close10(a, b):\n",
+				"   if math.fabs(10-a) == math.fabs(10-b):\n"+
+				"      return 0\n"+
+				"   elif math.fabs(10-a) < math.fabs(10-b):\n"+
+				"      return a\n"+
+				"   else:\n"+
+				"      return b\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult(close10((Integer)t.getParameter(0),(Integer)t.getParameter(1)));
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int close10(int a, int b) {
+		/* BEGIN SOLUTION */
+		if (Math.abs(a-10)==Math.abs(b-10))
+			return 0;
+		if (Math.abs(a-10)<Math.abs(b-10))
+			return a;
+		return b;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/CountTeen.fr.html b/src/lessons/welcome/bool1/CountTeen.fr.html
new file mode 100644
index 0000000..ae5976d
--- /dev/null
+++ b/src/lessons/welcome/bool1/CountTeen.fr.html
@@ -0,0 +1,3 @@
+<h1>Compter les ados</h1>
+<p>On dira qu'un nombre est "ado" s'il appartient à l'intervale [13;19]. Étant
+donné quatre nombres entiers, retournez combien d'entre eux sont ados.</p>
diff --git a/src/lessons/welcome/bool1/countteen/CountTeen.html b/src/lessons/welcome/bool1/CountTeen.html
similarity index 100%
rename from src/lessons/welcome/bool1/countteen/CountTeen.html
rename to src/lessons/welcome/bool1/CountTeen.html
diff --git a/src/lessons/welcome/bool1/CountTeen.java b/src/lessons/welcome/bool1/CountTeen.java
new file mode 100644
index 0000000..d626ef6
--- /dev/null
+++ b/src/lessons/welcome/bool1/CountTeen.java
@@ -0,0 +1,67 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class CountTeen extends BatExercise {
+
+	public CountTeen(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("countTeen");
+		myWorld.addTest(VISIBLE,  13,20,10,54);
+		myWorld.addTest(VISIBLE,  20,19,13,15);
+		myWorld.addTest(VISIBLE,  20,10,13,42);
+
+		myWorld.addTest(INVISIBLE, 1,20,12,54);
+		myWorld.addTest(INVISIBLE, 19,20,42,12);
+		myWorld.addTest(INVISIBLE, 12,16,20,19);
+		myWorld.addTest(INVISIBLE, 42,12,9,20);
+		myWorld.addTest(INVISIBLE, 12,18,19,14);
+		myWorld.addTest(INVISIBLE, 14,2,20,99);
+		myWorld.addTest(INVISIBLE, 4,11,2,20);
+		myWorld.addTest(INVISIBLE, 11,11,11,11);
+		myWorld.addTest(INVISIBLE, 15,15,15,15);
+
+		langTemplate(Game.PYTHON, "countTeen", 
+				"def countTeen(a, b, c, d):\n",
+				"		ret=0\n"+
+				"		if (a>12 and a<20):\n"+
+				"			ret+=1\n"+
+				"		if (b>12 and b<20):\n"+
+				"			ret+=1\n"+
+				"		if (c>12 and c<20):\n"+
+				"			ret+=1\n"+
+				"		if (d>12 and d<20):\n"+
+				"			ret+=1\n"+
+				"		return ret\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( countTeen((Integer)t.getParameter(0),(Integer)t.getParameter(1),(Integer)t.getParameter(2),(Integer)t.getParameter(3)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int countTeen(int a, int b, int c,int d) {
+		/* BEGIN SOLUTION */
+		int ret=0;
+		if (a>12&&a<20)
+			ret+=1;
+		if (b>12&&b<20)
+			ret+=1;
+		if (c>12&&c<20)
+			ret+=1;
+		if (d>12&&d<20)
+			ret+=1;
+		return ret; 
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/diff21/Diff21.fr.html b/src/lessons/welcome/bool1/Diff21.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/diff21/Diff21.fr.html
rename to src/lessons/welcome/bool1/Diff21.fr.html
diff --git a/src/lessons/welcome/bool1/diff21/Diff21.html b/src/lessons/welcome/bool1/Diff21.html
similarity index 100%
rename from src/lessons/welcome/bool1/diff21/Diff21.html
rename to src/lessons/welcome/bool1/Diff21.html
diff --git a/src/lessons/welcome/bool1/Diff21.java b/src/lessons/welcome/bool1/Diff21.java
new file mode 100644
index 0000000..bd5119b
--- /dev/null
+++ b/src/lessons/welcome/bool1/Diff21.java
@@ -0,0 +1,51 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class Diff21 extends BatExercise {
+
+	public Diff21(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("diff21");
+		myWorld.addTest(VISIBLE,  2);
+		myWorld.addTest(VISIBLE,  11);
+		myWorld.addTest(VISIBLE,  0);
+
+		myWorld.addTest(INVISIBLE, 19);
+		myWorld.addTest(INVISIBLE, 10);
+		myWorld.addTest(INVISIBLE, 21);
+		myWorld.addTest(INVISIBLE, 22);
+		myWorld.addTest(INVISIBLE, 25);
+		myWorld.addTest(INVISIBLE, 30);
+		myWorld.addTest(INVISIBLE, -21);
+
+		langTemplate(Game.PYTHON, "diff21", 
+				"def diff21(n):\n",
+				"   if (n>21):\n"+
+				"      return 2*(n-21)\n"+
+				"   return 21-n\n");		
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( diff21((Integer)t.getParameter(0)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int diff21(int n) {
+		/* BEGIN SOLUTION */
+		if (n>21)
+			return 2*(n-21);
+		return 21-n;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/hasteen/HasTeen.fr.html b/src/lessons/welcome/bool1/HasTeen.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/hasteen/HasTeen.fr.html
rename to src/lessons/welcome/bool1/HasTeen.fr.html
diff --git a/src/lessons/welcome/bool1/hasteen/HasTeen.html b/src/lessons/welcome/bool1/HasTeen.html
similarity index 100%
rename from src/lessons/welcome/bool1/hasteen/HasTeen.html
rename to src/lessons/welcome/bool1/HasTeen.html
diff --git a/src/lessons/welcome/bool1/HasTeen.java b/src/lessons/welcome/bool1/HasTeen.java
new file mode 100644
index 0000000..45df926
--- /dev/null
+++ b/src/lessons/welcome/bool1/HasTeen.java
@@ -0,0 +1,49 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class HasTeen extends BatExercise {
+
+	public HasTeen(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("hasTeen");
+		myWorld.addTest(VISIBLE,  13,20,10);		
+		myWorld.addTest(VISIBLE,  20,19,10);
+		myWorld.addTest(VISIBLE,  20,10,13);
+
+		myWorld.addTest(INVISIBLE, 1,20,12);
+		myWorld.addTest(INVISIBLE, 19,20,12);
+		myWorld.addTest(INVISIBLE, 12,20,19);
+		myWorld.addTest(INVISIBLE, 12,9,20);
+		myWorld.addTest(INVISIBLE, 12,18,20);
+		myWorld.addTest(INVISIBLE, 14,2,20);
+		myWorld.addTest(INVISIBLE, 4,2,20);
+		myWorld.addTest(INVISIBLE, 11,22,22);
+
+
+		langTemplate(Game.PYTHON, "hasTeen", 
+				"def hasTeen(a, b, c):\n",
+				"   return (a>12 and a<20) or (b>12 and b<20) or (c>12 and c<20)\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( hasTeen((Integer)t.getParameter(0),(Integer)t.getParameter(1),(Integer)t.getParameter(2)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean hasTeen(int a, int b, int c) {
+		/* BEGIN SOLUTION */
+		return a>12&&a<20 || b>12&&b<20 || c>12&&c<20;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/icyhot/IcyHot.fr.html b/src/lessons/welcome/bool1/IcyHot.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/icyhot/IcyHot.fr.html
rename to src/lessons/welcome/bool1/IcyHot.fr.html
diff --git a/src/lessons/welcome/bool1/icyhot/IcyHot.html b/src/lessons/welcome/bool1/IcyHot.html
similarity index 100%
rename from src/lessons/welcome/bool1/icyhot/IcyHot.html
rename to src/lessons/welcome/bool1/IcyHot.html
diff --git a/src/lessons/welcome/bool1/IcyHot.java b/src/lessons/welcome/bool1/IcyHot.java
new file mode 100644
index 0000000..80f03a9
--- /dev/null
+++ b/src/lessons/welcome/bool1/IcyHot.java
@@ -0,0 +1,44 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class IcyHot extends BatExercise {
+
+	public IcyHot(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("icyHot");
+		myWorld.addTest(VISIBLE, 120,-1);
+		myWorld.addTest(VISIBLE, -1,120);
+		myWorld.addTest(VISIBLE, 2,120);
+
+		myWorld.addTest(INVISIBLE, -1,100);
+		myWorld.addTest(INVISIBLE, -2,-2);
+		myWorld.addTest(INVISIBLE, 120,120);
+
+		langTemplate(Game.PYTHON, "icyHot", 
+				"def icyHot(temp1, temp2):\n",
+				"   return temp1<0 and temp2>100 or temp1>100 and temp2<0\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( icyHot((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean icyHot(int temp1, int temp2) {
+
+		/* BEGIN SOLUTION */
+		return temp1<0&&temp2>100 || temp1>100&&temp2<0;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/in1020/In1020.fr.html b/src/lessons/welcome/bool1/In1020.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/in1020/In1020.fr.html
rename to src/lessons/welcome/bool1/In1020.fr.html
diff --git a/src/lessons/welcome/bool1/in1020/In1020.html b/src/lessons/welcome/bool1/In1020.html
similarity index 100%
rename from src/lessons/welcome/bool1/in1020/In1020.html
rename to src/lessons/welcome/bool1/In1020.html
diff --git a/src/lessons/welcome/bool1/In1020.java b/src/lessons/welcome/bool1/In1020.java
new file mode 100644
index 0000000..47b468f
--- /dev/null
+++ b/src/lessons/welcome/bool1/In1020.java
@@ -0,0 +1,47 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class In1020 extends BatExercise {
+
+	public In1020(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("in1020");
+		myWorld.addTest(VISIBLE,  12,99);
+		myWorld.addTest(VISIBLE,  21,12);
+		myWorld.addTest(VISIBLE,  8,99);
+
+		myWorld.addTest(INVISIBLE, 99,10);
+		myWorld.addTest(INVISIBLE, 20,20);
+		myWorld.addTest(INVISIBLE, 21,21);
+		myWorld.addTest(INVISIBLE, 9,9);
+		myWorld.addTest(INVISIBLE, 10,42);
+		myWorld.addTest(INVISIBLE, 12,-2);
+
+		langTemplate(Game.PYTHON, "in1020", 
+				"def in1020(a, b):\n",
+				"   return (a>9 and a<21) or (b>9 and b<21)");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	@Override
+	public void run(BatTest t) {
+		t.setResult( in1020((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean in1020(int a, int b) {
+		/* BEGIN SOLUTION */
+		return a>9&&a<21 || b>9&&b<21;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/in3050/In3050.fr.html b/src/lessons/welcome/bool1/In3050.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/in3050/In3050.fr.html
rename to src/lessons/welcome/bool1/In3050.fr.html
diff --git a/src/lessons/welcome/bool1/in3050/In3050.html b/src/lessons/welcome/bool1/In3050.html
similarity index 100%
rename from src/lessons/welcome/bool1/in3050/In3050.html
rename to src/lessons/welcome/bool1/In3050.html
diff --git a/src/lessons/welcome/bool1/In3050.java b/src/lessons/welcome/bool1/In3050.java
new file mode 100644
index 0000000..f10e381
--- /dev/null
+++ b/src/lessons/welcome/bool1/In3050.java
@@ -0,0 +1,50 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class In3050 extends BatExercise {
+
+	public In3050(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("in3050");
+		myWorld.addTest(VISIBLE,  30,31);
+		myWorld.addTest(VISIBLE,  30,41);
+		myWorld.addTest(VISIBLE,  40,50);
+
+		myWorld.addTest(INVISIBLE, 40,51);
+		myWorld.addTest(INVISIBLE, 39,50);
+		myWorld.addTest(INVISIBLE, 50,39);
+		myWorld.addTest(INVISIBLE, 40,39);
+		myWorld.addTest(INVISIBLE, 49,48);
+		myWorld.addTest(INVISIBLE, 50,40);
+		myWorld.addTest(INVISIBLE, 50,51);
+		myWorld.addTest(INVISIBLE, 35,36);
+		myWorld.addTest(INVISIBLE, 35,45);
+
+
+		langTemplate(Game.PYTHON, "in3050", 
+				"def in3050(a, b):\n",
+				"   return (a>29 and a<41 and b>29 and b<41) or (a>39 and a<51 and b>39 and b<51)\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( in3050((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean in3050(int a, int b) {
+		/* BEGIN SOLUTION */
+		return (a>29&&a<41 && b>29&&b<41) || (a>39&&a<51 && b>39&&b<51);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/lastdigit/LastDigit.fr.html b/src/lessons/welcome/bool1/LastDigit.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/lastdigit/LastDigit.fr.html
rename to src/lessons/welcome/bool1/LastDigit.fr.html
diff --git a/src/lessons/welcome/bool1/lastdigit/LastDigit.html b/src/lessons/welcome/bool1/LastDigit.html
similarity index 100%
rename from src/lessons/welcome/bool1/lastdigit/LastDigit.html
rename to src/lessons/welcome/bool1/LastDigit.html
diff --git a/src/lessons/welcome/bool1/LastDigit.java b/src/lessons/welcome/bool1/LastDigit.java
new file mode 100644
index 0000000..b416d6f
--- /dev/null
+++ b/src/lessons/welcome/bool1/LastDigit.java
@@ -0,0 +1,41 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class LastDigit extends BatExercise {
+	public LastDigit(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("lastDigit");
+		myWorld.addTest(VISIBLE, 7, 17) ;
+		myWorld.addTest(VISIBLE, 6, 17) ;
+		myWorld.addTest(VISIBLE, 3, 113) ;
+		myWorld.addTest(INVISIBLE, 114, 113) ;
+		myWorld.addTest(INVISIBLE, 114, 4) ;
+		myWorld.addTest(INVISIBLE, 10, 0) ;
+		myWorld.addTest(INVISIBLE, 11, 0) ;
+
+		langTemplate(Game.PYTHON, "lastDigit", 
+				"def lastDigit(a, b):\n",
+				"   return a%10 == b%10\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( lastDigit((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean lastDigit(int a, int b) {
+		/* BEGIN SOLUTION */
+		return a%10 == b%10;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/loneteen/LoneTeen.fr.html b/src/lessons/welcome/bool1/LoneTeen.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/loneteen/LoneTeen.fr.html
rename to src/lessons/welcome/bool1/LoneTeen.fr.html
diff --git a/src/lessons/welcome/bool1/loneteen/LoneTeen.html b/src/lessons/welcome/bool1/LoneTeen.html
similarity index 100%
rename from src/lessons/welcome/bool1/loneteen/LoneTeen.html
rename to src/lessons/welcome/bool1/LoneTeen.html
diff --git a/src/lessons/welcome/bool1/LoneTeen.java b/src/lessons/welcome/bool1/LoneTeen.java
new file mode 100644
index 0000000..27ce688
--- /dev/null
+++ b/src/lessons/welcome/bool1/LoneTeen.java
@@ -0,0 +1,54 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class LoneTeen extends BatExercise {
+
+	public LoneTeen(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("loneTeen");
+		myWorld.addTest(VISIBLE,  13,42);
+		myWorld.addTest(VISIBLE,  21,19);
+		myWorld.addTest(VISIBLE,  13,13);
+
+		myWorld.addTest(INVISIBLE, 14,20);
+		myWorld.addTest(INVISIBLE, 20,15);
+		myWorld.addTest(INVISIBLE, 16,17);
+		myWorld.addTest(INVISIBLE, 16,9);
+		myWorld.addTest(INVISIBLE, 16,18);
+		myWorld.addTest(INVISIBLE, 13,19);
+		myWorld.addTest(INVISIBLE, 13,20);
+		myWorld.addTest(INVISIBLE, 6,18);
+		myWorld.addTest(INVISIBLE, 42,13);
+		myWorld.addTest(INVISIBLE, 42,42);
+
+		langTemplate(Game.PYTHON, "loneTeen", 
+				"def loneTeen(a, b):\n",
+				"	teenA = a>12 and a<20\n"+
+				"	teenB = b>12 and b<20\n"+
+				"	return  (teenA and not teenB) or (teenB and not teenA)\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( loneTeen((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean loneTeen(int a, int b) {
+		/* BEGIN SOLUTION */
+		boolean teenA = a>12&&a<20;
+		boolean teenB = b>12&&b<20;
+		return  (teenA&&!teenB) || (teenB&&!teenA);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/makes10/Makes10.fr.html b/src/lessons/welcome/bool1/Makes10.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/makes10/Makes10.fr.html
rename to src/lessons/welcome/bool1/Makes10.fr.html
diff --git a/src/lessons/welcome/bool1/makes10/Makes10.html b/src/lessons/welcome/bool1/Makes10.html
similarity index 100%
rename from src/lessons/welcome/bool1/makes10/Makes10.html
rename to src/lessons/welcome/bool1/Makes10.html
diff --git a/src/lessons/welcome/bool1/Makes10.java b/src/lessons/welcome/bool1/Makes10.java
new file mode 100644
index 0000000..73d58bc
--- /dev/null
+++ b/src/lessons/welcome/bool1/Makes10.java
@@ -0,0 +1,46 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class Makes10 extends BatExercise {
+
+	public Makes10(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("makes10");
+		myWorld.addTest(VISIBLE,  9,10);
+		myWorld.addTest(VISIBLE,  9,9);
+		myWorld.addTest(VISIBLE,  1,9);
+
+		myWorld.addTest(INVISIBLE, 10,1);
+		myWorld.addTest(INVISIBLE, 10,10);
+		myWorld.addTest(INVISIBLE, 8,2);
+		myWorld.addTest(INVISIBLE, 8,3);
+		myWorld.addTest(INVISIBLE, 10,42);
+		myWorld.addTest(INVISIBLE, 12,-2);
+
+		langTemplate(Game.PYTHON, "makes10", 
+				"def makes10(a, b):\n",
+				"   return a==10 or b==10 or (a+b)==10");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( makes10((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean makes10(int a, int b) {
+		/* BEGIN SOLUTION */
+		return a==10||b==10||(a+b)==10;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/max1020/Max1020.fr.html b/src/lessons/welcome/bool1/Max1020.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/max1020/Max1020.fr.html
rename to src/lessons/welcome/bool1/Max1020.fr.html
diff --git a/src/lessons/welcome/bool1/max1020/Max1020.html b/src/lessons/welcome/bool1/Max1020.html
similarity index 100%
rename from src/lessons/welcome/bool1/max1020/Max1020.html
rename to src/lessons/welcome/bool1/Max1020.html
diff --git a/src/lessons/welcome/bool1/Max1020.java b/src/lessons/welcome/bool1/Max1020.java
new file mode 100644
index 0000000..c26fb2e
--- /dev/null
+++ b/src/lessons/welcome/bool1/Max1020.java
@@ -0,0 +1,56 @@
+package lessons.welcome.bool1;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class Max1020 extends BatExercise {
+	public Max1020(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("max1020");
+		myWorld.addTest(VISIBLE, 11, 19) ;
+		myWorld.addTest(VISIBLE, 19, 11) ;
+		myWorld.addTest(VISIBLE, 11, 9) ;
+		myWorld.addTest(INVISIBLE, 9, 21) ;
+		myWorld.addTest(INVISIBLE, 10, 21) ;
+		myWorld.addTest(INVISIBLE, 21, 10) ;
+		myWorld.addTest(INVISIBLE, 9, 11) ;
+		myWorld.addTest(INVISIBLE, 23, 10) ;
+		myWorld.addTest(INVISIBLE, 20, 10) ;
+		myWorld.addTest(INVISIBLE, 7, 20) ;
+		myWorld.addTest(INVISIBLE, 17, 16) ;
+
+		langTemplate(Game.PYTHON, "max1020", 
+				"def max1020(a, b):\n",
+				"	A = max(a,b)\n"+
+				"	B = min(a,b)\n"+
+				"	if (A<21 and A>9):\n"+
+				"		return A\n"+
+				"	if (B<21 and B>9):\n"+
+				"		return B\n"+
+				"	return 0\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( max1020((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int max1020(int a, int b) {
+		/* BEGIN SOLUTION */
+		int A = a>b?a:b;
+		int B = a>b?b:a;
+		if (A<21 && A>9)
+			return A;
+		if (B<21 && B>9)
+			return B;
+		return 0;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.fr.html b/src/lessons/welcome/bool1/MonkeyTrouble.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.fr.html
rename to src/lessons/welcome/bool1/MonkeyTrouble.fr.html
diff --git a/src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.html b/src/lessons/welcome/bool1/MonkeyTrouble.html
similarity index 100%
rename from src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.html
rename to src/lessons/welcome/bool1/MonkeyTrouble.html
diff --git a/src/lessons/welcome/bool1/MonkeyTrouble.java b/src/lessons/welcome/bool1/MonkeyTrouble.java
new file mode 100644
index 0000000..4eef0ec
--- /dev/null
+++ b/src/lessons/welcome/bool1/MonkeyTrouble.java
@@ -0,0 +1,48 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class MonkeyTrouble extends BatExercise {
+
+	public MonkeyTrouble(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("monkeyTrouble");
+		myWorld.addTest(VISIBLE, true, true);
+		myWorld.addTest(VISIBLE, false, false);
+		myWorld.addTest(VISIBLE, true, false);
+		myWorld.addTest(INVISIBLE, false, true);
+
+		langTemplate(Game.PYTHON, "monkeyTrouble", 
+				"def monkeyTrouble(aSmile, bSmile):\n",
+				"   return (aSmile and bSmile) or (not aSmile and not bSmile)\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( monkeyTrouble((Boolean)t.getParameter(0),(Boolean)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	public boolean monkeyTrouble(boolean aSmile, boolean bSmile) {
+		/* BEGIN SOLUTION */
+		if (aSmile && bSmile) {
+			return true;
+		}
+		if (!aSmile && !bSmile) {
+			return true;
+		}
+		return false;
+		// This all can be shortened to just:
+		// return ((aSmile && bSmile) || (!aSmile && !bSmile));
+		/* END SOLUTION */		  
+	}	
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/nearhundred/NearHundred.fr.html b/src/lessons/welcome/bool1/NearHundred.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/nearhundred/NearHundred.fr.html
rename to src/lessons/welcome/bool1/NearHundred.fr.html
diff --git a/src/lessons/welcome/bool1/nearhundred/NearHundred.html b/src/lessons/welcome/bool1/NearHundred.html
similarity index 100%
rename from src/lessons/welcome/bool1/nearhundred/NearHundred.html
rename to src/lessons/welcome/bool1/NearHundred.html
diff --git a/src/lessons/welcome/bool1/NearHundred.java b/src/lessons/welcome/bool1/NearHundred.java
new file mode 100644
index 0000000..4f39976
--- /dev/null
+++ b/src/lessons/welcome/bool1/NearHundred.java
@@ -0,0 +1,48 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class NearHundred extends BatExercise {
+
+	public NearHundred(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("nearHundred");
+		myWorld.addTest(VISIBLE, 93);
+		myWorld.addTest(VISIBLE, 90);
+		myWorld.addTest(VISIBLE, 89);
+
+		myWorld.addTest(INVISIBLE, 110);
+		myWorld.addTest(INVISIBLE, 191);
+		myWorld.addTest(INVISIBLE, 189);
+		myWorld.addTest(INVISIBLE, 200);
+		myWorld.addTest(INVISIBLE, 210);
+		myWorld.addTest(INVISIBLE, 211);
+		myWorld.addTest(INVISIBLE, -100);
+
+		langTemplate(Game.PYTHON, "nearHundred", 
+				"def nearHundred(n):\n",
+				"   return (90<=n and n<=110) or (190<=n and n<=210)\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( nearHundred((Integer)t.getParameter(0)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean nearHundred(int n) {
+
+		/* BEGIN SOLUTION */
+		return (90<=n && n<=110)||(190<=n&&n<=210);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/parottrouble/ParotTrouble.fr.html b/src/lessons/welcome/bool1/ParotTrouble.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/parottrouble/ParotTrouble.fr.html
rename to src/lessons/welcome/bool1/ParotTrouble.fr.html
diff --git a/src/lessons/welcome/bool1/parottrouble/ParotTrouble.html b/src/lessons/welcome/bool1/ParotTrouble.html
similarity index 100%
rename from src/lessons/welcome/bool1/parottrouble/ParotTrouble.html
rename to src/lessons/welcome/bool1/ParotTrouble.html
diff --git a/src/lessons/welcome/bool1/ParotTrouble.java b/src/lessons/welcome/bool1/ParotTrouble.java
new file mode 100644
index 0000000..fe5a60a
--- /dev/null
+++ b/src/lessons/welcome/bool1/ParotTrouble.java
@@ -0,0 +1,46 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class ParotTrouble extends BatExercise {
+
+	public ParotTrouble(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("parotTrouble");
+		myWorld.addTest(VISIBLE,  true,6);
+		myWorld.addTest(VISIBLE,  true,7);
+		myWorld.addTest(VISIBLE,  false,6);
+
+		myWorld.addTest(INVISIBLE, true,21);
+		myWorld.addTest(INVISIBLE, false,21);
+		myWorld.addTest(INVISIBLE, true,23);
+		myWorld.addTest(INVISIBLE, false,23);
+		myWorld.addTest(INVISIBLE, true,20);
+
+
+		langTemplate(Game.PYTHON, "parotTrouble", 
+				"def parotTrouble(talking, hour):\n",
+				"   return (talking and (hour<7 or hour>20))\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( parotTrouble((Boolean)t.getParameter(0),(Integer)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean parotTrouble(boolean talking, int hour) {
+		/* BEGIN SOLUTION */
+		return (talking && (hour<7||hour>20));	
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/posneg/PosNeg.fr.html b/src/lessons/welcome/bool1/PosNeg.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/posneg/PosNeg.fr.html
rename to src/lessons/welcome/bool1/PosNeg.fr.html
diff --git a/src/lessons/welcome/bool1/posneg/PosNeg.html b/src/lessons/welcome/bool1/PosNeg.html
similarity index 100%
rename from src/lessons/welcome/bool1/posneg/PosNeg.html
rename to src/lessons/welcome/bool1/PosNeg.html
diff --git a/src/lessons/welcome/bool1/PosNeg.java b/src/lessons/welcome/bool1/PosNeg.java
new file mode 100644
index 0000000..5861fb7
--- /dev/null
+++ b/src/lessons/welcome/bool1/PosNeg.java
@@ -0,0 +1,55 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class PosNeg extends BatExercise {
+
+	public PosNeg(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("posNeg");
+		myWorld.addTest(VISIBLE, -1,1,false);
+		myWorld.addTest(VISIBLE, 1,-1,false);
+		myWorld.addTest(VISIBLE, 1,1,false);
+
+		myWorld.addTest(INVISIBLE, -1,-1,false);
+		myWorld.addTest(INVISIBLE, 1,-1,true);
+		myWorld.addTest(INVISIBLE, -1,1,true);
+		myWorld.addTest(INVISIBLE, 1,1,true);
+		myWorld.addTest(INVISIBLE, -1,-1,true);
+		myWorld.addTest(INVISIBLE, 5,-5,true);
+		myWorld.addTest(INVISIBLE, -6,6,false);
+		myWorld.addTest(INVISIBLE, -5,-5,false);
+		myWorld.addTest(INVISIBLE, -5,5,true);
+		myWorld.addTest(INVISIBLE, -5,-5,true);
+
+		langTemplate(Game.PYTHON, "posNeg", 
+				"def posNeg(a, b, negative):\n",
+				"		if (negative):\n"+
+				"			return a<0 and b<0;\n"+
+				"		return (a<0 and b>0) or (a>0 and b<0)");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( posNeg((Integer)t.getParameter(0),(Integer)t.getParameter(1),(Boolean)t.getParameter(2)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean posNeg(int a,int b,boolean negative) {
+
+		/* BEGIN SOLUTION */
+		if (negative)
+			return a<0&&b<0;
+		return (a<0&&b>0) || (a>0&&b<0);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/sleepin/SleepIn.fr.html b/src/lessons/welcome/bool1/SleepIn.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/sleepin/SleepIn.fr.html
rename to src/lessons/welcome/bool1/SleepIn.fr.html
diff --git a/src/lessons/welcome/bool1/sleepin/SleepIn.html b/src/lessons/welcome/bool1/SleepIn.html
similarity index 100%
rename from src/lessons/welcome/bool1/sleepin/SleepIn.html
rename to src/lessons/welcome/bool1/SleepIn.html
diff --git a/src/lessons/welcome/bool1/SleepIn.java b/src/lessons/welcome/bool1/SleepIn.java
new file mode 100644
index 0000000..3f84e17
--- /dev/null
+++ b/src/lessons/welcome/bool1/SleepIn.java
@@ -0,0 +1,45 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class SleepIn extends BatExercise {
+
+	public SleepIn(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("sleepIn");
+		myWorld.addTest(VISIBLE,  false,false);
+		myWorld.addTest(VISIBLE,  true,false);
+		myWorld.addTest(INVISIBLE, false,true);
+		myWorld.addTest(INVISIBLE, true,true);
+
+		langTemplate(Game.PYTHON, "sleepIn", 
+				"def sleepIn(weekday, vacation):\n",
+				"    return not weekday or vacation\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( sleepIn((Boolean)t.getParameter(0),(Boolean)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean sleepIn(boolean weekday, boolean vacation) {
+		/* BEGIN SOLUTION */
+		if (!weekday || vacation) {
+			return true;
+		} else {
+			return false;
+		}
+		// This can be shortened to: return(!weekday || vacation);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/sumdouble/SumDouble.fr.html b/src/lessons/welcome/bool1/SumDouble.fr.html
similarity index 100%
rename from src/lessons/welcome/bool1/sumdouble/SumDouble.fr.html
rename to src/lessons/welcome/bool1/SumDouble.fr.html
diff --git a/src/lessons/welcome/bool1/sumdouble/SumDouble.html b/src/lessons/welcome/bool1/SumDouble.html
similarity index 100%
rename from src/lessons/welcome/bool1/sumdouble/SumDouble.html
rename to src/lessons/welcome/bool1/SumDouble.html
diff --git a/src/lessons/welcome/bool1/SumDouble.java b/src/lessons/welcome/bool1/SumDouble.java
new file mode 100644
index 0000000..5308e2f
--- /dev/null
+++ b/src/lessons/welcome/bool1/SumDouble.java
@@ -0,0 +1,47 @@
+package lessons.welcome.bool1;
+
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class SumDouble extends BatExercise {
+
+	public SumDouble(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("sumDouble");
+		myWorld.addTest(VISIBLE,  1,2);
+		myWorld.addTest(VISIBLE,  3,2);
+		myWorld.addTest(VISIBLE,  2,2);
+
+		myWorld.addTest(INVISIBLE, -1,0);
+		myWorld.addTest(INVISIBLE, 0,0);
+		myWorld.addTest(INVISIBLE, 0,1);
+
+		langTemplate(Game.PYTHON, "sumDouble", 
+				"def sumDouble(a, b):\n",
+				"  if a==b:\n"+
+				"    return (a+b)*2\n"+
+				"  return a+b\n");
+		setup(myWorld);
+	}
+
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( sumDouble((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int sumDouble(int a, int b) {
+		/* BEGIN SOLUTION */
+		if (a==b)
+			return (a+b)*2;
+		return a+b;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool1/close10/Close10.fr.html b/src/lessons/welcome/bool1/close10/Close10.fr.html
deleted file mode 100644
index 33fcfd5..0000000
--- a/src/lessons/welcome/bool1/close10/Close10.fr.html
+++ /dev/null
@@ -1,10 +0,0 @@
-<h1>Proche de 10</h1>
-<p class="Java">Étant donné deux nombres entiers, retourner la valeur la plus proche de 10,
-ou 0 en cas de match nul. Remarquez que Math.abs(n) retourne la valeur
-absolue d'un nombre.</p>
-<p class="Python">Étant donné deux nombres entiers, retourner la valeur la plus proche de 10,
-ou 0 en cas de match nul. Remarquez que math.fabs(n) retourne la valeur
-absolue d'un nombre.</p>
-
-<p>Cet exercice a été extrait de l'excellent site d'exercices
-http://javabat.com/ pour JLM.</p>
diff --git a/src/lessons/welcome/bool1/close10/Close10.java b/src/lessons/welcome/bool1/close10/Close10.java
deleted file mode 100644
index 99d1385..0000000
--- a/src/lessons/welcome/bool1/close10/Close10.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package lessons.welcome.bool1.close10;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class Close10 extends BatExercise {
-
-	public Close10(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("close10");
-
-		myWorld.addTest(VISIBLE,  8,13);
-		myWorld.addTest(VISIBLE,  13,8);
-		myWorld.addTest(VISIBLE,  13,7);
-
-		myWorld.addTest(INVISIBLE, 7,13);
-		myWorld.addTest(INVISIBLE, 5,21);
-		myWorld.addTest(INVISIBLE, 0,20);
-		myWorld.addTest(INVISIBLE, 10,10);
-
-		langTemplate(Game.PYTHON, "close10", 
-				"import math\ndef close10(a, b):\n",
-				"   if math.fabs(10-a) == math.fabs(10-b):\n"+
-				"      return 0\n"+
-				"   elif math.fabs(10-a) < math.fabs(10-b):\n"+
-				"      return a\n"+
-				"   else:\n"+
-				"      return b\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult(close10((Integer)t.getParameter(0),(Integer)t.getParameter(1)));
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int close10(int a, int b) {
-		/* BEGIN SOLUTION */
-		if (Math.abs(a-10)==Math.abs(b-10))
-			return 0;
-		if (Math.abs(a-10)<Math.abs(b-10))
-			return a;
-		return b;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/countteen/CountTeen.fr.html b/src/lessons/welcome/bool1/countteen/CountTeen.fr.html
deleted file mode 100644
index 502c220..0000000
--- a/src/lessons/welcome/bool1/countteen/CountTeen.fr.html
+++ /dev/null
@@ -1,5 +0,0 @@
-<h1>Compter les ados</h1>
-On dira qu'un nombre est "ado" s'il appartient à l'intervale [13;19]. Étant
-donné quatre nombres entiers, retournez combien d'entre eux sont ados.
-
-<p>Cet exercice a été écrit par Martin Quinson.</p>
diff --git a/src/lessons/welcome/bool1/countteen/CountTeen.java b/src/lessons/welcome/bool1/countteen/CountTeen.java
deleted file mode 100644
index cbc1ecb..0000000
--- a/src/lessons/welcome/bool1/countteen/CountTeen.java
+++ /dev/null
@@ -1,67 +0,0 @@
-package lessons.welcome.bool1.countteen;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class CountTeen extends BatExercise {
-
-	public CountTeen(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("countTeen");
-		myWorld.addTest(VISIBLE,  13,20,10,54);
-		myWorld.addTest(VISIBLE,  20,19,13,15);
-		myWorld.addTest(VISIBLE,  20,10,13,42);
-
-		myWorld.addTest(INVISIBLE, 1,20,12,54);
-		myWorld.addTest(INVISIBLE, 19,20,42,12);
-		myWorld.addTest(INVISIBLE, 12,16,20,19);
-		myWorld.addTest(INVISIBLE, 42,12,9,20);
-		myWorld.addTest(INVISIBLE, 12,18,19,14);
-		myWorld.addTest(INVISIBLE, 14,2,20,99);
-		myWorld.addTest(INVISIBLE, 4,11,2,20);
-		myWorld.addTest(INVISIBLE, 11,11,11,11);
-		myWorld.addTest(INVISIBLE, 15,15,15,15);
-
-		langTemplate(Game.PYTHON, "countTeen", 
-				"def countTeen(a, b, c, d):\n",
-				"		ret=0\n"+
-				"		if (a>12 and a<20):\n"+
-				"			ret+=1\n"+
-				"		if (b>12 and b<20):\n"+
-				"			ret+=1\n"+
-				"		if (c>12 and c<20):\n"+
-				"			ret+=1\n"+
-				"		if (d>12 and d<20):\n"+
-				"			ret+=1\n"+
-				"		return ret\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( countTeen((Integer)t.getParameter(0),(Integer)t.getParameter(1),(Integer)t.getParameter(2),(Integer)t.getParameter(3)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int countTeen(int a, int b, int c,int d) {
-		/* BEGIN SOLUTION */
-		int ret=0;
-		if (a>12&&a<20)
-			ret+=1;
-		if (b>12&&b<20)
-			ret+=1;
-		if (c>12&&c<20)
-			ret+=1;
-		if (d>12&&d<20)
-			ret+=1;
-		return ret; 
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/diff21/Diff21.java b/src/lessons/welcome/bool1/diff21/Diff21.java
deleted file mode 100644
index c16b10d..0000000
--- a/src/lessons/welcome/bool1/diff21/Diff21.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package lessons.welcome.bool1.diff21;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class Diff21 extends BatExercise {
-
-	public Diff21(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("diff21");
-		myWorld.addTest(VISIBLE,  2);
-		myWorld.addTest(VISIBLE,  11);
-		myWorld.addTest(VISIBLE,  0);
-
-		myWorld.addTest(INVISIBLE, 19);
-		myWorld.addTest(INVISIBLE, 10);
-		myWorld.addTest(INVISIBLE, 21);
-		myWorld.addTest(INVISIBLE, 22);
-		myWorld.addTest(INVISIBLE, 25);
-		myWorld.addTest(INVISIBLE, 30);
-		myWorld.addTest(INVISIBLE, -21);
-
-		langTemplate(Game.PYTHON, "diff21", 
-				"def diff21(n):\n",
-				"   if (n>21):\n"+
-				"      return 2*(n-21)\n"+
-				"   return 21-n\n");		
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( diff21((Integer)t.getParameter(0)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int diff21(int n) {
-		/* BEGIN SOLUTION */
-		if (n>21)
-			return 2*(n-21);
-		return 21-n;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/hasteen/HasTeen.java b/src/lessons/welcome/bool1/hasteen/HasTeen.java
deleted file mode 100644
index aebdee2..0000000
--- a/src/lessons/welcome/bool1/hasteen/HasTeen.java
+++ /dev/null
@@ -1,49 +0,0 @@
-package lessons.welcome.bool1.hasteen;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class HasTeen extends BatExercise {
-
-	public HasTeen(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("hasTeen");
-		myWorld.addTest(VISIBLE,  13,20,10);		
-		myWorld.addTest(VISIBLE,  20,19,10);
-		myWorld.addTest(VISIBLE,  20,10,13);
-
-		myWorld.addTest(INVISIBLE, 1,20,12);
-		myWorld.addTest(INVISIBLE, 19,20,12);
-		myWorld.addTest(INVISIBLE, 12,20,19);
-		myWorld.addTest(INVISIBLE, 12,9,20);
-		myWorld.addTest(INVISIBLE, 12,18,20);
-		myWorld.addTest(INVISIBLE, 14,2,20);
-		myWorld.addTest(INVISIBLE, 4,2,20);
-		myWorld.addTest(INVISIBLE, 11,22,22);
-
-
-		langTemplate(Game.PYTHON, "hasTeen", 
-				"def hasTeen(a, b, c):\n",
-				"   return (a>12 and a<20) or (b>12 and b<20) or (c>12 and c<20)\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( hasTeen((Integer)t.getParameter(0),(Integer)t.getParameter(1),(Integer)t.getParameter(2)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean hasTeen(int a, int b, int c) {
-		/* BEGIN SOLUTION */
-		return a>12&&a<20 || b>12&&b<20 || c>12&&c<20;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/icyhot/IcyHot.java b/src/lessons/welcome/bool1/icyhot/IcyHot.java
deleted file mode 100644
index 23692d7..0000000
--- a/src/lessons/welcome/bool1/icyhot/IcyHot.java
+++ /dev/null
@@ -1,44 +0,0 @@
-package lessons.welcome.bool1.icyhot;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class IcyHot extends BatExercise {
-
-	public IcyHot(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("icyHot");
-		myWorld.addTest(VISIBLE, 120,-1);
-		myWorld.addTest(VISIBLE, -1,120);
-		myWorld.addTest(VISIBLE, 2,120);
-
-		myWorld.addTest(INVISIBLE, -1,100);
-		myWorld.addTest(INVISIBLE, -2,-2);
-		myWorld.addTest(INVISIBLE, 120,120);
-
-		langTemplate(Game.PYTHON, "icyHot", 
-				"def icyHot(temp1, temp2):\n",
-				"   return temp1<0 and temp2>100 or temp1>100 and temp2<0\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( icyHot((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean icyHot(int temp1, int temp2) {
-
-		/* BEGIN SOLUTION */
-		return temp1<0&&temp2>100 || temp1>100&&temp2<0;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/in1020/In1020.java b/src/lessons/welcome/bool1/in1020/In1020.java
deleted file mode 100644
index 6b07105..0000000
--- a/src/lessons/welcome/bool1/in1020/In1020.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package lessons.welcome.bool1.in1020;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class In1020 extends BatExercise {
-
-	public In1020(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("in1020");
-		myWorld.addTest(VISIBLE,  12,99);
-		myWorld.addTest(VISIBLE,  21,12);
-		myWorld.addTest(VISIBLE,  8,99);
-
-		myWorld.addTest(INVISIBLE, 99,10);
-		myWorld.addTest(INVISIBLE, 20,20);
-		myWorld.addTest(INVISIBLE, 21,21);
-		myWorld.addTest(INVISIBLE, 9,9);
-		myWorld.addTest(INVISIBLE, 10,42);
-		myWorld.addTest(INVISIBLE, 12,-2);
-
-		langTemplate(Game.PYTHON, "in1020", 
-				"def in1020(a, b):\n",
-				"   return (a>9 and a<21) or (b>9 and b<21)");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	@Override
-	public void run(BatTest t) {
-		t.setResult( in1020((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean in1020(int a, int b) {
-		/* BEGIN SOLUTION */
-		return a>9&&a<21 || b>9&&b<21;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/in3050/In3050.java b/src/lessons/welcome/bool1/in3050/In3050.java
deleted file mode 100644
index 08d8540..0000000
--- a/src/lessons/welcome/bool1/in3050/In3050.java
+++ /dev/null
@@ -1,50 +0,0 @@
-package lessons.welcome.bool1.in3050;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class In3050 extends BatExercise {
-
-	public In3050(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("in3050");
-		myWorld.addTest(VISIBLE,  30,31);
-		myWorld.addTest(VISIBLE,  30,41);
-		myWorld.addTest(VISIBLE,  40,50);
-
-		myWorld.addTest(INVISIBLE, 40,51);
-		myWorld.addTest(INVISIBLE, 39,50);
-		myWorld.addTest(INVISIBLE, 50,39);
-		myWorld.addTest(INVISIBLE, 40,39);
-		myWorld.addTest(INVISIBLE, 49,48);
-		myWorld.addTest(INVISIBLE, 50,40);
-		myWorld.addTest(INVISIBLE, 50,51);
-		myWorld.addTest(INVISIBLE, 35,36);
-		myWorld.addTest(INVISIBLE, 35,45);
-
-
-		langTemplate(Game.PYTHON, "in3050", 
-				"def in3050(a, b):\n",
-				"   return (a>29 and a<41 and b>29 and b<41) or (a>39 and a<51 and b>39 and b<51)\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( in3050((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean in3050(int a, int b) {
-		/* BEGIN SOLUTION */
-		return (a>29&&a<41 && b>29&&b<41) || (a>39&&a<51 && b>39&&b<51);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/lastdigit/LastDigit.java b/src/lessons/welcome/bool1/lastdigit/LastDigit.java
deleted file mode 100644
index fdb9763..0000000
--- a/src/lessons/welcome/bool1/lastdigit/LastDigit.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package lessons.welcome.bool1.lastdigit;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class LastDigit extends BatExercise {
-	public LastDigit(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("lastDigit");
-		myWorld.addTest(VISIBLE, 7, 17) ;
-		myWorld.addTest(VISIBLE, 6, 17) ;
-		myWorld.addTest(VISIBLE, 3, 113) ;
-		myWorld.addTest(INVISIBLE, 114, 113) ;
-		myWorld.addTest(INVISIBLE, 114, 4) ;
-		myWorld.addTest(INVISIBLE, 10, 0) ;
-		myWorld.addTest(INVISIBLE, 11, 0) ;
-
-		langTemplate(Game.PYTHON, "lastDigit", 
-				"def lastDigit(a, b):\n",
-				"   return a%10 == b%10\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( lastDigit((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean lastDigit(int a, int b) {
-		/* BEGIN SOLUTION */
-		return a%10 == b%10;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/loneteen/LoneTeen.java b/src/lessons/welcome/bool1/loneteen/LoneTeen.java
deleted file mode 100644
index 60698d1..0000000
--- a/src/lessons/welcome/bool1/loneteen/LoneTeen.java
+++ /dev/null
@@ -1,54 +0,0 @@
-package lessons.welcome.bool1.loneteen;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class LoneTeen extends BatExercise {
-
-	public LoneTeen(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("loneTeen");
-		myWorld.addTest(VISIBLE,  13,42);
-		myWorld.addTest(VISIBLE,  21,19);
-		myWorld.addTest(VISIBLE,  13,13);
-
-		myWorld.addTest(INVISIBLE, 14,20);
-		myWorld.addTest(INVISIBLE, 20,15);
-		myWorld.addTest(INVISIBLE, 16,17);
-		myWorld.addTest(INVISIBLE, 16,9);
-		myWorld.addTest(INVISIBLE, 16,18);
-		myWorld.addTest(INVISIBLE, 13,19);
-		myWorld.addTest(INVISIBLE, 13,20);
-		myWorld.addTest(INVISIBLE, 6,18);
-		myWorld.addTest(INVISIBLE, 42,13);
-		myWorld.addTest(INVISIBLE, 42,42);
-
-		langTemplate(Game.PYTHON, "loneTeen", 
-				"def loneTeen(a, b):\n",
-				"	teenA = a>12 and a<20\n"+
-				"	teenB = b>12 and b<20\n"+
-				"	return  (teenA and not teenB) or (teenB and not teenA)\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( loneTeen((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean loneTeen(int a, int b) {
-		/* BEGIN SOLUTION */
-		boolean teenA = a>12&&a<20;
-		boolean teenB = b>12&&b<20;
-		return  (teenA&&!teenB) || (teenB&&!teenA);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/makes10/Makes10.java b/src/lessons/welcome/bool1/makes10/Makes10.java
deleted file mode 100644
index 11a22e2..0000000
--- a/src/lessons/welcome/bool1/makes10/Makes10.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package lessons.welcome.bool1.makes10;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class Makes10 extends BatExercise {
-
-	public Makes10(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("makes10");
-		myWorld.addTest(VISIBLE,  9,10);
-		myWorld.addTest(VISIBLE,  9,9);
-		myWorld.addTest(VISIBLE,  1,9);
-
-		myWorld.addTest(INVISIBLE, 10,1);
-		myWorld.addTest(INVISIBLE, 10,10);
-		myWorld.addTest(INVISIBLE, 8,2);
-		myWorld.addTest(INVISIBLE, 8,3);
-		myWorld.addTest(INVISIBLE, 10,42);
-		myWorld.addTest(INVISIBLE, 12,-2);
-
-		langTemplate(Game.PYTHON, "makes10", 
-				"def makes10(a, b):\n",
-				"   return a==10 or b==10 or (a+b)==10");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( makes10((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean makes10(int a, int b) {
-		/* BEGIN SOLUTION */
-		return a==10||b==10||(a+b)==10;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/max1020/Max1020.java b/src/lessons/welcome/bool1/max1020/Max1020.java
deleted file mode 100644
index be78948..0000000
--- a/src/lessons/welcome/bool1/max1020/Max1020.java
+++ /dev/null
@@ -1,56 +0,0 @@
-package lessons.welcome.bool1.max1020;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class Max1020 extends BatExercise {
-	public Max1020(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("max1020");
-		myWorld.addTest(VISIBLE, 11, 19) ;
-		myWorld.addTest(VISIBLE, 19, 11) ;
-		myWorld.addTest(VISIBLE, 11, 9) ;
-		myWorld.addTest(INVISIBLE, 9, 21) ;
-		myWorld.addTest(INVISIBLE, 10, 21) ;
-		myWorld.addTest(INVISIBLE, 21, 10) ;
-		myWorld.addTest(INVISIBLE, 9, 11) ;
-		myWorld.addTest(INVISIBLE, 23, 10) ;
-		myWorld.addTest(INVISIBLE, 20, 10) ;
-		myWorld.addTest(INVISIBLE, 7, 20) ;
-		myWorld.addTest(INVISIBLE, 17, 16) ;
-
-		langTemplate(Game.PYTHON, "max1020", 
-				"def max1020(a, b):\n",
-				"	A = max(a,b)\n"+
-				"	B = min(a,b)\n"+
-				"	if (A<21 and A>9):\n"+
-				"		return A\n"+
-				"	if (B<21 and B>9):\n"+
-				"		return B\n"+
-				"	return 0\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( max1020((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int max1020(int a, int b) {
-		/* BEGIN SOLUTION */
-		int A = a>b?a:b;
-		int B = a>b?b:a;
-		if (A<21 && A>9)
-			return A;
-		if (B<21 && B>9)
-			return B;
-		return 0;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.java b/src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.java
deleted file mode 100644
index 888618b..0000000
--- a/src/lessons/welcome/bool1/monkeytrouble/MonkeyTrouble.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package lessons.welcome.bool1.monkeytrouble;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class MonkeyTrouble extends BatExercise {
-
-	public MonkeyTrouble(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("monkeyTrouble");
-		myWorld.addTest(VISIBLE, true, true);
-		myWorld.addTest(VISIBLE, false, false);
-		myWorld.addTest(VISIBLE, true, false);
-		myWorld.addTest(INVISIBLE, false, true);
-
-		langTemplate(Game.PYTHON, "monkeyTrouble", 
-				"def monkeyTrouble(aSmile, bSmile):\n",
-				"   return (aSmile and bSmile) or (not aSmile and not bSmile)\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( monkeyTrouble((Boolean)t.getParameter(0),(Boolean)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	public boolean monkeyTrouble(boolean aSmile, boolean bSmile) {
-		/* BEGIN SOLUTION */
-		if (aSmile && bSmile) {
-			return true;
-		}
-		if (!aSmile && !bSmile) {
-			return true;
-		}
-		return false;
-		// This all can be shortened to just:
-		// return ((aSmile && bSmile) || (!aSmile && !bSmile));
-		/* END SOLUTION */		  
-	}	
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/nearhundred/NearHundred.java b/src/lessons/welcome/bool1/nearhundred/NearHundred.java
deleted file mode 100644
index 36a571d..0000000
--- a/src/lessons/welcome/bool1/nearhundred/NearHundred.java
+++ /dev/null
@@ -1,48 +0,0 @@
-package lessons.welcome.bool1.nearhundred;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class NearHundred extends BatExercise {
-
-	public NearHundred(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("nearHundred");
-		myWorld.addTest(VISIBLE, 93);
-		myWorld.addTest(VISIBLE, 90);
-		myWorld.addTest(VISIBLE, 89);
-
-		myWorld.addTest(INVISIBLE, 110);
-		myWorld.addTest(INVISIBLE, 191);
-		myWorld.addTest(INVISIBLE, 189);
-		myWorld.addTest(INVISIBLE, 200);
-		myWorld.addTest(INVISIBLE, 210);
-		myWorld.addTest(INVISIBLE, 211);
-		myWorld.addTest(INVISIBLE, -100);
-
-		langTemplate(Game.PYTHON, "nearHundred", 
-				"def nearHundred(n):\n",
-				"   return (90<=n and n<=110) or (190<=n and n<=210)\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( nearHundred((Integer)t.getParameter(0)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean nearHundred(int n) {
-
-		/* BEGIN SOLUTION */
-		return (90<=n && n<=110)||(190<=n&&n<=210);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/parottrouble/ParotTrouble.java b/src/lessons/welcome/bool1/parottrouble/ParotTrouble.java
deleted file mode 100644
index 6f683f6..0000000
--- a/src/lessons/welcome/bool1/parottrouble/ParotTrouble.java
+++ /dev/null
@@ -1,46 +0,0 @@
-package lessons.welcome.bool1.parottrouble;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class ParotTrouble extends BatExercise {
-
-	public ParotTrouble(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("parotTrouble");
-		myWorld.addTest(VISIBLE,  true,6);
-		myWorld.addTest(VISIBLE,  true,7);
-		myWorld.addTest(VISIBLE,  false,6);
-
-		myWorld.addTest(INVISIBLE, true,21);
-		myWorld.addTest(INVISIBLE, false,21);
-		myWorld.addTest(INVISIBLE, true,23);
-		myWorld.addTest(INVISIBLE, false,23);
-		myWorld.addTest(INVISIBLE, true,20);
-
-
-		langTemplate(Game.PYTHON, "parotTrouble", 
-				"def parotTrouble(talking, hour):\n",
-				"   return (talking and (hour<7 or hour>20))\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( parotTrouble((Boolean)t.getParameter(0),(Integer)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean parotTrouble(boolean talking, int hour) {
-		/* BEGIN SOLUTION */
-		return (talking && (hour<7||hour>20));	
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/posneg/PosNeg.java b/src/lessons/welcome/bool1/posneg/PosNeg.java
deleted file mode 100644
index d6e0b85..0000000
--- a/src/lessons/welcome/bool1/posneg/PosNeg.java
+++ /dev/null
@@ -1,55 +0,0 @@
-package lessons.welcome.bool1.posneg;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class PosNeg extends BatExercise {
-
-	public PosNeg(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("posNeg");
-		myWorld.addTest(VISIBLE, -1,1,false);
-		myWorld.addTest(VISIBLE, 1,-1,false);
-		myWorld.addTest(VISIBLE, 1,1,false);
-
-		myWorld.addTest(INVISIBLE, -1,-1,false);
-		myWorld.addTest(INVISIBLE, 1,-1,true);
-		myWorld.addTest(INVISIBLE, -1,1,true);
-		myWorld.addTest(INVISIBLE, 1,1,true);
-		myWorld.addTest(INVISIBLE, -1,-1,true);
-		myWorld.addTest(INVISIBLE, 5,-5,true);
-		myWorld.addTest(INVISIBLE, -6,6,false);
-		myWorld.addTest(INVISIBLE, -5,-5,false);
-		myWorld.addTest(INVISIBLE, -5,5,true);
-		myWorld.addTest(INVISIBLE, -5,-5,true);
-
-		langTemplate(Game.PYTHON, "posNeg", 
-				"def posNeg(a, b, negative):\n",
-				"		if (negative):\n"+
-				"			return a<0 and b<0;\n"+
-				"		return (a<0 and b>0) or (a>0 and b<0)");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( posNeg((Integer)t.getParameter(0),(Integer)t.getParameter(1),(Boolean)t.getParameter(2)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean posNeg(int a,int b,boolean negative) {
-
-		/* BEGIN SOLUTION */
-		if (negative)
-			return a<0&&b<0;
-		return (a<0&&b>0) || (a>0&&b<0);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/sleepin/SleepIn.java b/src/lessons/welcome/bool1/sleepin/SleepIn.java
deleted file mode 100644
index fc931a2..0000000
--- a/src/lessons/welcome/bool1/sleepin/SleepIn.java
+++ /dev/null
@@ -1,45 +0,0 @@
-package lessons.welcome.bool1.sleepin;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class SleepIn extends BatExercise {
-
-	public SleepIn(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("sleepIn");
-		myWorld.addTest(VISIBLE,  false,false);
-		myWorld.addTest(VISIBLE,  true,false);
-		myWorld.addTest(INVISIBLE, false,true);
-		myWorld.addTest(INVISIBLE, true,true);
-
-		langTemplate(Game.PYTHON, "sleepIn", 
-				"def sleepIn(weekday, vacation):\n",
-				"    return not weekday or vacation\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( sleepIn((Boolean)t.getParameter(0),(Boolean)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean sleepIn(boolean weekday, boolean vacation) {
-		/* BEGIN SOLUTION */
-		if (!weekday || vacation) {
-			return true;
-		} else {
-			return false;
-		}
-		// This can be shortened to: return(!weekday || vacation);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool1/sumdouble/SumDouble.java b/src/lessons/welcome/bool1/sumdouble/SumDouble.java
deleted file mode 100644
index f5ebfc6..0000000
--- a/src/lessons/welcome/bool1/sumdouble/SumDouble.java
+++ /dev/null
@@ -1,47 +0,0 @@
-package lessons.welcome.bool1.sumdouble;
-
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class SumDouble extends BatExercise {
-
-	public SumDouble(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("sumDouble");
-		myWorld.addTest(VISIBLE,  1,2);
-		myWorld.addTest(VISIBLE,  3,2);
-		myWorld.addTest(VISIBLE,  2,2);
-
-		myWorld.addTest(INVISIBLE, -1,0);
-		myWorld.addTest(INVISIBLE, 0,0);
-		myWorld.addTest(INVISIBLE, 0,1);
-
-		langTemplate(Game.PYTHON, "sumDouble", 
-				"def sumDouble(a, b):\n",
-				"  if a==b:\n"+
-				"    return (a+b)*2\n"+
-				"  return a+b\n");
-		setup(myWorld);
-	}
-
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( sumDouble((Integer)t.getParameter(0),(Integer)t.getParameter(1)) );		
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int sumDouble(int a, int b) {
-		/* BEGIN SOLUTION */
-		if (a==b)
-			return (a+b)*2;
-		return a+b;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/alarmclock/AlarmClock.fr.html b/src/lessons/welcome/bool2/AlarmClock.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/alarmclock/AlarmClock.fr.html
rename to src/lessons/welcome/bool2/AlarmClock.fr.html
diff --git a/src/lessons/welcome/bool2/alarmclock/AlarmClock.html b/src/lessons/welcome/bool2/AlarmClock.html
similarity index 100%
rename from src/lessons/welcome/bool2/alarmclock/AlarmClock.html
rename to src/lessons/welcome/bool2/AlarmClock.html
diff --git a/src/lessons/welcome/bool2/AlarmClock.java b/src/lessons/welcome/bool2/AlarmClock.java
new file mode 100644
index 0000000..081422e
--- /dev/null
+++ b/src/lessons/welcome/bool2/AlarmClock.java
@@ -0,0 +1,63 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class AlarmClock extends BatExercise {
+	public AlarmClock(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("alarmClock");
+		myWorld.addTest(VISIBLE, 1, false) ;
+		myWorld.addTest(VISIBLE, 5, false) ;
+		myWorld.addTest(VISIBLE, 0, false) ;
+		myWorld.addTest(INVISIBLE, 6, false) ;
+		myWorld.addTest(INVISIBLE, 0, true) ;
+		myWorld.addTest(INVISIBLE, 6, true) ;
+		myWorld.addTest(INVISIBLE, 1, true) ;
+		myWorld.addTest(INVISIBLE, 3, true) ;
+		myWorld.addTest(INVISIBLE, 5, true) ;
+
+		langTemplate(Game.PYTHON, "alarmClock", 
+				"def alarmClock(day, vacation):\n",
+				"	if not vacation:\n"+
+				"		if (day >= 1 and day <= 5):\n"+
+				"			return '7:00'\n"+
+				"		else:\n"+
+				"			return '10:00'\n"+
+				"	else:\n"+
+				"		if (day >= 1 and day <= 5):\n"+
+				"			return '10:00'\n"+
+				"		else:\n"+
+				"			return 'off'\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( alarmClock((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	String alarmClock(int day, boolean vacation) {
+		/* BEGIN SOLUTION */
+		if (! vacation) {  
+			if (day >= 1 && day <= 5)
+				return "7:00";
+			else
+				return "10:00";
+		} else {
+			if (day >= 1 && day <= 5)
+				return "10:00";
+			else
+				return "off";  
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/answercell/AnswerCell.fr.html b/src/lessons/welcome/bool2/AnswerCell.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/answercell/AnswerCell.fr.html
rename to src/lessons/welcome/bool2/AnswerCell.fr.html
diff --git a/src/lessons/welcome/bool2/answercell/AnswerCell.html b/src/lessons/welcome/bool2/AnswerCell.html
similarity index 100%
rename from src/lessons/welcome/bool2/answercell/AnswerCell.html
rename to src/lessons/welcome/bool2/AnswerCell.html
diff --git a/src/lessons/welcome/bool2/AnswerCell.java b/src/lessons/welcome/bool2/AnswerCell.java
new file mode 100644
index 0000000..b9111ee
--- /dev/null
+++ b/src/lessons/welcome/bool2/AnswerCell.java
@@ -0,0 +1,41 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class AnswerCell extends BatExercise {
+	public AnswerCell(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("answerCell");
+		myWorld.addTest(VISIBLE, false, false, false) ;
+		myWorld.addTest(VISIBLE, false, false, true) ;
+		myWorld.addTest(VISIBLE, true, false, false) ;
+		myWorld.addTest(INVISIBLE, true, true, false) ;
+		myWorld.addTest(INVISIBLE, false, true, false) ;
+		myWorld.addTest(INVISIBLE, true, true, true) ;
+
+		langTemplate(Game.PYTHON, "answerCell", 
+				"def answerCell(isMorning, isMom, isAsleep):\n",
+				"   return (not isAsleep) and not (isMorning and not isMom)");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( answerCell((Boolean)t.getParameter(0), (Boolean)t.getParameter(1), (Boolean)t.getParameter(2)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean answerCell(boolean isMorning, boolean isMom, boolean isAsleep) {
+		/* BEGIN SOLUTION */
+		return (! isAsleep) && ! (isMorning && ! isMom);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/ticket/blue/BlueTicket.fr.html b/src/lessons/welcome/bool2/BlueTicket.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/ticket/blue/BlueTicket.fr.html
rename to src/lessons/welcome/bool2/BlueTicket.fr.html
diff --git a/src/lessons/welcome/bool2/ticket/blue/BlueTicket.html b/src/lessons/welcome/bool2/BlueTicket.html
similarity index 100%
rename from src/lessons/welcome/bool2/ticket/blue/BlueTicket.html
rename to src/lessons/welcome/bool2/BlueTicket.html
diff --git a/src/lessons/welcome/bool2/BlueTicket.java b/src/lessons/welcome/bool2/BlueTicket.java
new file mode 100644
index 0000000..567c8cf
--- /dev/null
+++ b/src/lessons/welcome/bool2/BlueTicket.java
@@ -0,0 +1,64 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class BlueTicket extends BatExercise {
+	public BlueTicket(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("blueTicket");
+		myWorld.addTest(VISIBLE, 9, 1, 0) ;
+		myWorld.addTest(VISIBLE, 9, 2, 0) ;
+		myWorld.addTest(VISIBLE, 6, 1, 4) ;
+		myWorld.addTest(INVISIBLE, 6, 1, 5) ;
+		myWorld.addTest(INVISIBLE, 10, 0, 0) ;
+		myWorld.addTest(INVISIBLE, 15, 0, 5) ;
+		myWorld.addTest(INVISIBLE, 5, 15, 5) ;
+		myWorld.addTest(INVISIBLE, 4, 11, 1) ;
+		myWorld.addTest(INVISIBLE, 13, 2, 3) ;
+		myWorld.addTest(INVISIBLE, 8, 4, 3) ;
+		myWorld.addTest(INVISIBLE, 8, 4, 2) ;
+		myWorld.addTest(INVISIBLE, 8, 4, 1) ;
+
+		langTemplate(Game.PYTHON, "blueTicket", 
+				"def blueTicket(a, b, c):\n",
+				"	ab = a + b\n"+
+				"	ac = a + c\n"+
+				"	bc = b + c\n"+
+				"	if (ab == 10 or ac == 10 or bc == 10):\n"+
+				"		return 10\n"+
+				"	elif (ab == (bc + 10) or ab == (ac + 10)):\n"+
+				"		return 5\n"+
+				"	else:\n"+
+				"		return 0\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( blueTicket((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int blueTicket(int a, int b, int c) {
+		/* BEGIN SOLUTION */
+		int ab = a + b;
+		int ac = a + c;
+		int bc = b + c;
+
+		if (ab == 10 || ac == 10 || bc == 10)
+			return 10;
+		else if (ab == (bc + 10) || ab == (ac + 10))
+			return 5;
+		else 
+			return 0;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.fr.html b/src/lessons/welcome/bool2/CaughtSpeeding.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.fr.html
rename to src/lessons/welcome/bool2/CaughtSpeeding.fr.html
diff --git a/src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.html b/src/lessons/welcome/bool2/CaughtSpeeding.html
similarity index 100%
rename from src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.html
rename to src/lessons/welcome/bool2/CaughtSpeeding.html
diff --git a/src/lessons/welcome/bool2/CaughtSpeeding.java b/src/lessons/welcome/bool2/CaughtSpeeding.java
new file mode 100644
index 0000000..18e526f
--- /dev/null
+++ b/src/lessons/welcome/bool2/CaughtSpeeding.java
@@ -0,0 +1,57 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class CaughtSpeeding extends BatExercise {
+	public CaughtSpeeding(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("caughtSpeeding");
+		myWorld.addTest(VISIBLE, 60, false) ;
+		myWorld.addTest(VISIBLE, 65, false) ;
+		myWorld.addTest(VISIBLE, 65, true) ;
+		myWorld.addTest(INVISIBLE, 80, false) ;
+		myWorld.addTest(INVISIBLE, 85, false) ;
+		myWorld.addTest(INVISIBLE, 85, true) ;
+		myWorld.addTest(INVISIBLE, 70, false) ;
+		myWorld.addTest(INVISIBLE, 75, false) ;
+		myWorld.addTest(INVISIBLE, 75, true) ;
+		myWorld.addTest(INVISIBLE, 40, false) ;
+		myWorld.addTest(INVISIBLE, 40, true) ;
+		myWorld.addTest(INVISIBLE, 90, false) ;
+
+		langTemplate(Game.PYTHON, "caughtSpeeding", 
+				"def caughtSpeeding(speed, isBirthday):\n",
+				"	if ((isBirthday and speed <= 65) or (speed <= 60)):\n"+
+				"		return 0\n"+
+				"	elif ((isBirthday and speed <= 85) or (speed <= 80)):\n"+
+				"		return 1\n"+
+				"	else:\n"+
+				"		return 2\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( caughtSpeeding((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int caughtSpeeding(int speed, boolean isBirthday) {
+		/* BEGIN SOLUTION */
+		if ((isBirthday && speed <= 65) || (speed <= 60))
+			return 0;
+		else if ((isBirthday && speed <= 85) || (speed <= 80))
+			return 1;
+		else 
+			return 2;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/party/cigar/CigarParty.fr.html b/src/lessons/welcome/bool2/CigarParty.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/party/cigar/CigarParty.fr.html
rename to src/lessons/welcome/bool2/CigarParty.fr.html
diff --git a/src/lessons/welcome/bool2/party/cigar/CigarParty.html b/src/lessons/welcome/bool2/CigarParty.html
similarity index 100%
rename from src/lessons/welcome/bool2/party/cigar/CigarParty.html
rename to src/lessons/welcome/bool2/CigarParty.html
diff --git a/src/lessons/welcome/bool2/CigarParty.java b/src/lessons/welcome/bool2/CigarParty.java
new file mode 100644
index 0000000..da27dc4
--- /dev/null
+++ b/src/lessons/welcome/bool2/CigarParty.java
@@ -0,0 +1,46 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class CigarParty extends BatExercise {
+	public CigarParty(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("cigarParty");
+		myWorld.addTest(VISIBLE, 30, false) ;
+		myWorld.addTest(VISIBLE, 50, false) ;
+		myWorld.addTest(VISIBLE, 70, true) ;
+		myWorld.addTest(INVISIBLE, 30, true) ;
+		myWorld.addTest(INVISIBLE, 50, true) ;
+		myWorld.addTest(INVISIBLE, 60, false) ;
+		myWorld.addTest(INVISIBLE, 61, false) ;
+		myWorld.addTest(INVISIBLE, 40, false) ;
+		myWorld.addTest(INVISIBLE, 39, false) ;
+		myWorld.addTest(INVISIBLE, 40, true) ;
+		myWorld.addTest(INVISIBLE, 39, true) ;
+
+		langTemplate(Game.PYTHON, "cigarParty", 
+				"def cigarParty(cigars, isWeekend):\n",
+				"   return (isWeekend and cigars >= 40) or (not isWeekend and (cigars >= 40) and (cigars <= 60))\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( cigarParty((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean cigarParty(int cigars, boolean isWeekend) {
+		/* BEGIN SOLUTION */
+		return (isWeekend && cigars >= 40) || (!isWeekend && (cigars >= 40) && (cigars <= 60));
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/datefashion/DateFashion.fr.html b/src/lessons/welcome/bool2/DateFashion.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/datefashion/DateFashion.fr.html
rename to src/lessons/welcome/bool2/DateFashion.fr.html
diff --git a/src/lessons/welcome/bool2/datefashion/DateFashion.html b/src/lessons/welcome/bool2/DateFashion.html
similarity index 100%
rename from src/lessons/welcome/bool2/datefashion/DateFashion.html
rename to src/lessons/welcome/bool2/DateFashion.html
diff --git a/src/lessons/welcome/bool2/DateFashion.java b/src/lessons/welcome/bool2/DateFashion.java
new file mode 100644
index 0000000..c25708b
--- /dev/null
+++ b/src/lessons/welcome/bool2/DateFashion.java
@@ -0,0 +1,57 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class DateFashion extends BatExercise {
+	public DateFashion(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("dateFashion");
+		myWorld.addTest(VISIBLE, 5, 10) ;
+		myWorld.addTest(VISIBLE, 5, 2) ;
+		myWorld.addTest(VISIBLE, 5, 5) ;
+		myWorld.addTest(INVISIBLE, 3, 3) ;
+		myWorld.addTest(INVISIBLE, 10, 2) ;
+		myWorld.addTest(INVISIBLE, 2, 9) ;
+		myWorld.addTest(INVISIBLE, 9, 9) ;
+		myWorld.addTest(INVISIBLE, 10, 5) ;
+		myWorld.addTest(INVISIBLE, 2, 2) ;
+		myWorld.addTest(INVISIBLE, 3, 7) ;
+		myWorld.addTest(INVISIBLE, 2, 7) ;
+		myWorld.addTest(INVISIBLE, 6, 2) ;
+
+		langTemplate(Game.PYTHON, "dateFashion", 
+				"def dateFashion(you, date):\n",
+				"	if (you <= 2 or date <= 2):\n"+
+				"		return 0\n"+
+				"	elif (you >= 8 or date >= 8):\n"+
+				"		return 2\n"+
+				"	else:\n"+
+				"		return 1\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( dateFashion((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int dateFashion(int you, int date) {
+		/* BEGIN SOLUTION */
+		if (you <= 2 || date <= 2)
+			return 0;
+		else if (you >= 8 || date >= 8)
+			return 2;
+		else
+			return 1;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/ticket/green/GreenTicket.fr.html b/src/lessons/welcome/bool2/GreenTicket.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/ticket/green/GreenTicket.fr.html
rename to src/lessons/welcome/bool2/GreenTicket.fr.html
diff --git a/src/lessons/welcome/bool2/ticket/green/GreenTicket.html b/src/lessons/welcome/bool2/GreenTicket.html
similarity index 100%
rename from src/lessons/welcome/bool2/ticket/green/GreenTicket.html
rename to src/lessons/welcome/bool2/GreenTicket.html
diff --git a/src/lessons/welcome/bool2/GreenTicket.java b/src/lessons/welcome/bool2/GreenTicket.java
new file mode 100644
index 0000000..11fbe4f
--- /dev/null
+++ b/src/lessons/welcome/bool2/GreenTicket.java
@@ -0,0 +1,57 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class GreenTicket extends BatExercise {
+	public GreenTicket(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("greenTicket");
+		myWorld.addTest(VISIBLE, 1, 2, 3) ;
+		myWorld.addTest(VISIBLE, 2, 2, 2) ;
+		myWorld.addTest(VISIBLE, 1, 1, 2) ;
+		myWorld.addTest(INVISIBLE, 2, 1, 1) ;
+		myWorld.addTest(INVISIBLE, 1, 2, 1) ;
+		myWorld.addTest(INVISIBLE, 3, 2, 1) ;
+		myWorld.addTest(INVISIBLE, 0, 0, 0) ;
+		myWorld.addTest(INVISIBLE, 2, 0, 0) ;
+		myWorld.addTest(INVISIBLE, 0, 9, 10) ;
+		myWorld.addTest(INVISIBLE, 0, 10, 0) ;
+		myWorld.addTest(INVISIBLE, 9, 9, 9) ;
+		myWorld.addTest(INVISIBLE, 9, 0, 9) ;
+
+		langTemplate(Game.PYTHON, "greenTicket", 
+				"def greenTicket(a, b, c):\n",
+				"	if (a == b and b == c):\n"+
+				"		return 20\n"+
+				"	elif (a == b or b == c or a == c):\n"+
+				"		return 10\n"+
+				"	else:\n"+
+				"		return 0\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( greenTicket((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int greenTicket(int a, int b, int c) {
+		/* BEGIN SOLUTION */
+		if (a == b && b == c)
+			return 20;
+		else if (a == b || b == c || a == c)
+			return 10;
+		else  // (a != b && b != a && c != a)
+			return 0;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/in1to10/In1To10.fr.html b/src/lessons/welcome/bool2/In1To10.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/in1to10/In1To10.fr.html
rename to src/lessons/welcome/bool2/In1To10.fr.html
diff --git a/src/lessons/welcome/bool2/in1to10/In1To10.html b/src/lessons/welcome/bool2/In1To10.html
similarity index 100%
rename from src/lessons/welcome/bool2/in1to10/In1To10.html
rename to src/lessons/welcome/bool2/In1To10.html
diff --git a/src/lessons/welcome/bool2/In1To10.java b/src/lessons/welcome/bool2/In1To10.java
new file mode 100644
index 0000000..68e2c83
--- /dev/null
+++ b/src/lessons/welcome/bool2/In1To10.java
@@ -0,0 +1,47 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class In1To10 extends BatExercise {
+	public In1To10(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("in1To10");
+		myWorld.addTest(VISIBLE, 5, false) ;
+		myWorld.addTest(VISIBLE, 11, false) ;
+		myWorld.addTest(VISIBLE, 11, true) ;
+		myWorld.addTest(INVISIBLE, 10, false) ;
+		myWorld.addTest(INVISIBLE, 10, true) ;
+		myWorld.addTest(INVISIBLE, 9, false) ;
+		myWorld.addTest(INVISIBLE, 9, true) ;
+		myWorld.addTest(INVISIBLE, 1, false) ;
+		myWorld.addTest(INVISIBLE, 1, true) ;
+		myWorld.addTest(INVISIBLE, 0, false) ;
+		myWorld.addTest(INVISIBLE, 0, true) ;
+		myWorld.addTest(INVISIBLE, -1, false) ;
+
+		langTemplate(Game.PYTHON, "in1To10", 
+				"def in1To10(n, outsideMode):\n",
+				"   return (outsideMode and (n <= 1 or n >= 10)) or ((not outsideMode) and (n >= 1 and n <= 10))\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( in1To10((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean in1To10(int n, boolean outsideMode) {
+		/* BEGIN SOLUTION */
+		return (outsideMode && (n <= 1 || n >= 10)) || ((! outsideMode) && (n >= 1 && n <= 10));
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/inorder/InOrder.fr.html b/src/lessons/welcome/bool2/InOrder.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/inorder/InOrder.fr.html
rename to src/lessons/welcome/bool2/InOrder.fr.html
diff --git a/src/lessons/welcome/bool2/inorder/InOrder.html b/src/lessons/welcome/bool2/InOrder.html
similarity index 100%
rename from src/lessons/welcome/bool2/inorder/InOrder.html
rename to src/lessons/welcome/bool2/InOrder.html
diff --git a/src/lessons/welcome/bool2/InOrder.java b/src/lessons/welcome/bool2/InOrder.java
new file mode 100644
index 0000000..616b63f
--- /dev/null
+++ b/src/lessons/welcome/bool2/InOrder.java
@@ -0,0 +1,47 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class InOrder extends BatExercise {
+	public InOrder(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("inOrder");
+		myWorld.addTest(VISIBLE, 1, 2, 4, false) ;
+		myWorld.addTest(VISIBLE, 1, 2, 1, false) ;
+		myWorld.addTest(VISIBLE, 1, 1, 2, true) ;
+		myWorld.addTest(INVISIBLE, 3, 2, 4, false) ;
+		myWorld.addTest(INVISIBLE, 2, 3, 4, false) ;
+		myWorld.addTest(INVISIBLE, 3, 2, 4, true) ;
+		myWorld.addTest(INVISIBLE, 4, 2, 2, true) ;
+		myWorld.addTest(INVISIBLE, 4, 5, 2, true) ;
+		myWorld.addTest(INVISIBLE, 2, 4, 6, true) ;
+		myWorld.addTest(INVISIBLE, 7, 9, 10, false) ;
+		myWorld.addTest(INVISIBLE, 7, 5, 6, true) ;
+		myWorld.addTest(INVISIBLE, 7, 5, 4, true) ;
+
+		langTemplate(Game.PYTHON, "inOrder", 
+				"def inOrder(a, b, c, bOk):\n",
+				"		return (bOk or (b > a)) and (c > b)\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( inOrder((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2), (Boolean)t.getParameter(3)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean inOrder(int a, int b, int c, boolean bOk) {
+		/* BEGIN SOLUTION */
+		return (bOk || (b > a)) && (c > b);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/inorderequals/InOrderEqual.fr.html b/src/lessons/welcome/bool2/InOrderEqual.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/inorderequals/InOrderEqual.fr.html
rename to src/lessons/welcome/bool2/InOrderEqual.fr.html
diff --git a/src/lessons/welcome/bool2/inorderequals/InOrderEqual.html b/src/lessons/welcome/bool2/InOrderEqual.html
similarity index 100%
rename from src/lessons/welcome/bool2/inorderequals/InOrderEqual.html
rename to src/lessons/welcome/bool2/InOrderEqual.html
diff --git a/src/lessons/welcome/bool2/InOrderEqual.java b/src/lessons/welcome/bool2/InOrderEqual.java
new file mode 100644
index 0000000..b5a3484
--- /dev/null
+++ b/src/lessons/welcome/bool2/InOrderEqual.java
@@ -0,0 +1,49 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class InOrderEqual extends BatExercise {
+	public InOrderEqual(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("inOrderEqual");
+		myWorld.addTest(VISIBLE, 2, 5, 11, false) ;
+		myWorld.addTest(VISIBLE, 5, 7, 6, false) ;
+		myWorld.addTest(VISIBLE, 5, 5, 7, true) ;
+		myWorld.addTest(INVISIBLE, 5, 5, 7, false) ;
+		myWorld.addTest(INVISIBLE, 2, 5, 4, false) ;
+		myWorld.addTest(INVISIBLE, 3, 4, 3, false) ;
+		myWorld.addTest(INVISIBLE, 3, 4, 4, false) ;
+		myWorld.addTest(INVISIBLE, 3, 4, 3, true) ;
+		myWorld.addTest(INVISIBLE, 3, 4, 4, true) ;
+		myWorld.addTest(INVISIBLE, 1, 5, 5, true) ;
+		myWorld.addTest(INVISIBLE, 5, 5, 5, true) ;
+		myWorld.addTest(INVISIBLE, 2, 2, 1, true) ;
+		myWorld.addTest(INVISIBLE, 9, 2, 2, true) ;
+		myWorld.addTest(INVISIBLE, 0, 1, 0, true) ;
+
+		langTemplate(Game.PYTHON, "inOrderEqual", 
+				"def inOrderEqual(a, b, c, equalOk):\n",
+				"		return (equalOk and ((a <= b) and (b <= c))) or (a < b and b < c)");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( inOrderEqual((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2), (Boolean)t.getParameter(3)) ); 
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean inOrderEqual(int a, int b, int c, boolean equalOk) {
+		/* BEGIN SOLUTION */
+		return (equalOk && ((a <= b) && (b <= c))) || (a < b && b < c);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/lastdigit2/LastDigit2.fr.html b/src/lessons/welcome/bool2/LastDigit2.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/lastdigit2/LastDigit2.fr.html
rename to src/lessons/welcome/bool2/LastDigit2.fr.html
diff --git a/src/lessons/welcome/bool2/lastdigit2/LastDigit2.html b/src/lessons/welcome/bool2/LastDigit2.html
similarity index 100%
rename from src/lessons/welcome/bool2/lastdigit2/LastDigit2.html
rename to src/lessons/welcome/bool2/LastDigit2.html
diff --git a/src/lessons/welcome/bool2/LastDigit2.java b/src/lessons/welcome/bool2/LastDigit2.java
new file mode 100644
index 0000000..3c51a3e
--- /dev/null
+++ b/src/lessons/welcome/bool2/LastDigit2.java
@@ -0,0 +1,54 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class LastDigit2 extends BatExercise {
+	public LastDigit2(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("lastDigit");
+		myWorld.addTest(VISIBLE, 23, 19, 13) ;
+		myWorld.addTest(VISIBLE, 23, 19, 12) ;
+		myWorld.addTest(VISIBLE, 23, 19, 3) ;
+		myWorld.addTest(INVISIBLE, 23, 19, 39) ;
+		myWorld.addTest(INVISIBLE, 1, 2, 3) ;
+		myWorld.addTest(INVISIBLE, 1, 1, 2) ;
+		myWorld.addTest(INVISIBLE, 1, 2, 2) ;
+		myWorld.addTest(INVISIBLE, 14, 25, 43) ;
+		myWorld.addTest(INVISIBLE, 14, 25, 45) ;
+		myWorld.addTest(INVISIBLE, 248, 106, 1002) ;
+		myWorld.addTest(INVISIBLE, 248, 106, 1008) ;
+		myWorld.addTest(INVISIBLE, 10, 11, 20) ;
+		myWorld.addTest(INVISIBLE, 0, 11, 0) ;
+
+		langTemplate(Game.PYTHON, "lastDigit", 
+				"def lastDigit(a, b, c):\n",
+				"	da = a % 10\n"+
+				"	db = b % 10\n"+
+				"	dc = c % 10\n"+
+				"	return da == db or da == dc or dc == db\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( lastDigit((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean lastDigit(int a, int b, int c) {
+		/* BEGIN SOLUTION */
+		int da = a % 10;
+		int db = b % 10;
+		int dc = c % 10;
+		return da == db || da == dc || dc == db;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/lessby10/LessBy10.fr.html b/src/lessons/welcome/bool2/LessBy10.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/lessby10/LessBy10.fr.html
rename to src/lessons/welcome/bool2/LessBy10.fr.html
diff --git a/src/lessons/welcome/bool2/lessby10/LessBy10.html b/src/lessons/welcome/bool2/LessBy10.html
similarity index 100%
rename from src/lessons/welcome/bool2/lessby10/LessBy10.html
rename to src/lessons/welcome/bool2/LessBy10.html
diff --git a/src/lessons/welcome/bool2/LessBy10.java b/src/lessons/welcome/bool2/LessBy10.java
new file mode 100644
index 0000000..23f6650
--- /dev/null
+++ b/src/lessons/welcome/bool2/LessBy10.java
@@ -0,0 +1,49 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class LessBy10 extends BatExercise {
+	public LessBy10(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("lessBy10");
+		myWorld.addTest(VISIBLE, 1, 7, 11) ;
+		myWorld.addTest(VISIBLE, 1, 7, 10) ;
+		myWorld.addTest(VISIBLE, 11, 1, 7) ;
+		myWorld.addTest(INVISIBLE, 10, 7, 1) ;
+		myWorld.addTest(INVISIBLE, -10, 2, 2) ;
+		myWorld.addTest(INVISIBLE, 2, 11, 11) ;
+		myWorld.addTest(INVISIBLE, 3, 3, 30) ;
+		myWorld.addTest(INVISIBLE, 3, 3, 3) ;
+		myWorld.addTest(INVISIBLE, 10, 1, 11) ;
+		myWorld.addTest(INVISIBLE, 10, 11, 1) ;
+		myWorld.addTest(INVISIBLE, 10, 11, 2) ;
+		myWorld.addTest(INVISIBLE, 3, 30, 3) ;
+		myWorld.addTest(INVISIBLE, 2, 2, -8) ;
+		myWorld.addTest(INVISIBLE, 2, 8, 12) ;
+
+		langTemplate(Game.PYTHON, "lessBy10", 
+				"def lessBy10(a, b, c):\n",
+				"	return ((a - b) >= 10) or ((b - a) >= 10) or ((b - c) >= 10) or ((c - b) >= 10) or ((a - c) >= 10) or ((c - a) >= 10)\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( lessBy10((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean lessBy10(int a, int b, int c) {
+		/* BEGIN SOLUTION */
+		return ((a - b) >= 10) || ((b - a) >= 10) || ((b - c) >= 10) || ((c - b) >= 10) || ((a - c) >= 10) || ((c - a) >= 10);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/maxmod5/MaxMod5.fr.html b/src/lessons/welcome/bool2/MaxMod5.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/maxmod5/MaxMod5.fr.html
rename to src/lessons/welcome/bool2/MaxMod5.fr.html
diff --git a/src/lessons/welcome/bool2/maxmod5/MaxMod5.html b/src/lessons/welcome/bool2/MaxMod5.html
similarity index 100%
rename from src/lessons/welcome/bool2/maxmod5/MaxMod5.html
rename to src/lessons/welcome/bool2/MaxMod5.html
diff --git a/src/lessons/welcome/bool2/MaxMod5.java b/src/lessons/welcome/bool2/MaxMod5.java
new file mode 100644
index 0000000..ded7ffb
--- /dev/null
+++ b/src/lessons/welcome/bool2/MaxMod5.java
@@ -0,0 +1,69 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class MaxMod5 extends BatExercise {
+	public MaxMod5(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("maxMod5");
+		myWorld.addTest(VISIBLE, 2, 3) ;
+		myWorld.addTest(VISIBLE, 6, 2) ;
+		myWorld.addTest(VISIBLE, 3, 2) ;
+		myWorld.addTest(INVISIBLE, 8, 12) ;
+		myWorld.addTest(INVISIBLE, 7, 12) ;
+		myWorld.addTest(INVISIBLE, 11, 6) ;
+		myWorld.addTest(INVISIBLE, 2, 7) ;
+		myWorld.addTest(INVISIBLE, 7, 7) ;
+		myWorld.addTest(INVISIBLE, 9, 1) ;
+		myWorld.addTest(INVISIBLE, 9, 14) ;
+		myWorld.addTest(INVISIBLE, 1, 2) ;
+
+		langTemplate(Game.PYTHON, "maxMod5", 
+				"def maxMod5(a, b):\n",
+				"	if (a == b):\n"+
+				"		return 0\n"+
+				"	elif (a > b):\n"+
+				"		if (a % 5 == b % 5):\n"+
+				"			return b\n"+
+				"		else:\n"+
+				"			return a\n"+
+				"	else:\n"+
+				"		if (a % 5 == b % 5):\n"+
+				"			return a\n"+
+				"		else:\n"+
+				"			return b");  
+
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( maxMod5((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int maxMod5(int a, int b) {
+		/* BEGIN SOLUTION */
+		if (a == b)
+			return 0;
+		else if (a > b)
+			if (a % 5 == b % 5)
+				return b;
+			else 
+				return a;
+		else 
+			if (a % 5 == b % 5)
+				return a;
+			else 
+				return b;  
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/nearten/NearTen.fr.html b/src/lessons/welcome/bool2/NearTen.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/nearten/NearTen.fr.html
rename to src/lessons/welcome/bool2/NearTen.fr.html
diff --git a/src/lessons/welcome/bool2/nearten/NearTen.html b/src/lessons/welcome/bool2/NearTen.html
similarity index 100%
rename from src/lessons/welcome/bool2/nearten/NearTen.html
rename to src/lessons/welcome/bool2/NearTen.html
diff --git a/src/lessons/welcome/bool2/NearTen.java b/src/lessons/welcome/bool2/NearTen.java
new file mode 100644
index 0000000..84b3752
--- /dev/null
+++ b/src/lessons/welcome/bool2/NearTen.java
@@ -0,0 +1,49 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class NearTen extends BatExercise {
+	public NearTen(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("nearTen");
+		myWorld.addTest(VISIBLE, 12) ;
+		myWorld.addTest(VISIBLE, 17) ;
+		myWorld.addTest(VISIBLE, 19) ;
+		myWorld.addTest(INVISIBLE, 21) ;
+		myWorld.addTest(INVISIBLE, 6) ;
+		myWorld.addTest(INVISIBLE, 10) ;
+		myWorld.addTest(INVISIBLE, 11) ;
+		myWorld.addTest(INVISIBLE, 12) ;
+		myWorld.addTest(INVISIBLE, 13) ;
+		myWorld.addTest(INVISIBLE, 54) ;
+		myWorld.addTest(INVISIBLE, 155) ;
+		myWorld.addTest(INVISIBLE, 158) ;
+		myWorld.addTest(INVISIBLE, 3) ;
+		myWorld.addTest(INVISIBLE, 1) ;
+
+		langTemplate(Game.PYTHON, "nearTen", 
+				"def nearTen(num):\n",
+				"  return (num % 10) <= 2 or (num % 10) >= 8\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( nearTen((Integer)t.getParameter(0)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean nearTen(int num) {
+		/* BEGIN SOLUTION */
+		return (num % 10) <= 2 || (num % 10) >= 8; 
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/ticket/red/RedTicket.fr.html b/src/lessons/welcome/bool2/RedTicket.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/ticket/red/RedTicket.fr.html
rename to src/lessons/welcome/bool2/RedTicket.fr.html
diff --git a/src/lessons/welcome/bool2/ticket/red/RedTicket.html b/src/lessons/welcome/bool2/RedTicket.html
similarity index 100%
rename from src/lessons/welcome/bool2/ticket/red/RedTicket.html
rename to src/lessons/welcome/bool2/RedTicket.html
diff --git a/src/lessons/welcome/bool2/RedTicket.java b/src/lessons/welcome/bool2/RedTicket.java
new file mode 100644
index 0000000..fa1e2b1
--- /dev/null
+++ b/src/lessons/welcome/bool2/RedTicket.java
@@ -0,0 +1,60 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class RedTicket extends BatExercise {
+	public RedTicket(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("redTicket");
+		myWorld.addTest(VISIBLE, 2, 2, 2) ;
+		myWorld.addTest(VISIBLE, 2, 2, 1) ;
+		myWorld.addTest(VISIBLE, 0, 0, 0) ;
+		myWorld.addTest(INVISIBLE, 2, 0, 0) ;
+		myWorld.addTest(INVISIBLE, 1, 1, 1) ;
+		myWorld.addTest(INVISIBLE, 1, 2, 1) ;
+		myWorld.addTest(INVISIBLE, 1, 2, 0) ;
+		myWorld.addTest(INVISIBLE, 0, 2, 2) ;
+		myWorld.addTest(INVISIBLE, 1, 2, 2) ;
+		myWorld.addTest(INVISIBLE, 0, 2, 0) ;
+		myWorld.addTest(INVISIBLE, 1, 1, 2) ;
+
+		langTemplate(Game.PYTHON, "redTicket", 
+				"def redTicket(a, b, c):\n",
+				"	if (a == b and b == c and c == 2):\n"+
+				"		return 10\n"+
+				"	elif (a == b and b == c):\n"+
+				"		return 5\n"+
+				"	elif (b != a and c != a):\n"+
+				"		return 1\n"+
+				"	else:\n"+
+				"		return 0\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( redTicket((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int redTicket(int a, int b, int c) {
+		/* BEGIN SOLUTION */
+		if (a == b && b == c && c == 2)
+			return 10;
+		else if (a == b && b == c)
+			return 5;
+		else if (b != a && c != a)
+			return 1;
+		else
+			return 0;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/sharedigit/ShareDigit.fr.html b/src/lessons/welcome/bool2/ShareDigit.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/sharedigit/ShareDigit.fr.html
rename to src/lessons/welcome/bool2/ShareDigit.fr.html
diff --git a/src/lessons/welcome/bool2/sharedigit/ShareDigit.html b/src/lessons/welcome/bool2/ShareDigit.html
similarity index 100%
rename from src/lessons/welcome/bool2/sharedigit/ShareDigit.html
rename to src/lessons/welcome/bool2/ShareDigit.html
diff --git a/src/lessons/welcome/bool2/ShareDigit.java b/src/lessons/welcome/bool2/ShareDigit.java
new file mode 100644
index 0000000..7e42ad3
--- /dev/null
+++ b/src/lessons/welcome/bool2/ShareDigit.java
@@ -0,0 +1,45 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class ShareDigit extends BatExercise {
+	public ShareDigit(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("shareDigit");
+		myWorld.addTest(VISIBLE, 12, 23) ;
+		myWorld.addTest(VISIBLE, 12, 43) ;
+		myWorld.addTest(VISIBLE, 12, 44) ;
+		myWorld.addTest(INVISIBLE, 23, 12) ;
+		myWorld.addTest(INVISIBLE, 23, 39) ;
+		myWorld.addTest(INVISIBLE, 23, 19) ;
+		myWorld.addTest(INVISIBLE, 30, 90) ;
+		myWorld.addTest(INVISIBLE, 30, 91) ;
+		myWorld.addTest(INVISIBLE, 55, 55) ;
+		myWorld.addTest(INVISIBLE, 55, 44) ;
+
+		langTemplate(Game.PYTHON, "shareDigit", 
+				"def shareDigit(a, b):\n",
+				"   return (a/10 == b/10 or a/10 == b%10 or a%10 == b/10 or a%10 == b%10)");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( shareDigit((Integer)t.getParameter(0), (Integer)t.getParameter(1)) ); 
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean shareDigit(int a, int b) {
+		/* BEGIN SOLUTION */
+		return (a/10 == b/10 || a/10 == b%10 || a%10 == b/10 || a%10 == b%10);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/sortasum/SortaSum.fr.html b/src/lessons/welcome/bool2/SortaSum.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/sortasum/SortaSum.fr.html
rename to src/lessons/welcome/bool2/SortaSum.fr.html
diff --git a/src/lessons/welcome/bool2/sortasum/SortaSum.html b/src/lessons/welcome/bool2/SortaSum.html
similarity index 100%
rename from src/lessons/welcome/bool2/sortasum/SortaSum.html
rename to src/lessons/welcome/bool2/SortaSum.html
diff --git a/src/lessons/welcome/bool2/SortaSum.java b/src/lessons/welcome/bool2/SortaSum.java
new file mode 100644
index 0000000..8fabd59
--- /dev/null
+++ b/src/lessons/welcome/bool2/SortaSum.java
@@ -0,0 +1,52 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class SortaSum extends BatExercise {
+	public SortaSum(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("sortaSum");
+		myWorld.addTest(VISIBLE, 3, 4) ;
+		myWorld.addTest(VISIBLE, 9, 4) ;
+		myWorld.addTest(VISIBLE, 10, 11) ;
+		myWorld.addTest(INVISIBLE, 12, -3) ;
+		myWorld.addTest(INVISIBLE, -3, 12) ;
+		myWorld.addTest(INVISIBLE, 4, 5) ;
+		myWorld.addTest(INVISIBLE, 4, 6) ;
+		myWorld.addTest(INVISIBLE, 14, 7) ;
+		myWorld.addTest(INVISIBLE, 14, 6) ;
+
+		langTemplate(Game.PYTHON, "sortaSum", 
+				"def sortaSum(a, b):\n",
+				"	sum = a+b\n"+
+				"	if (sum >= 10 and sum <= 19):\n"+
+				"		return 20\n"+
+				"	else:\n"+
+				"		return sum\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( sortaSum((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int sortaSum(int a, int b) {
+		/* BEGIN SOLUTION */
+		int sum = a+b;
+		if (sum >= 10 && sum <= 19)
+			return 20;
+		else
+			return sum;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.fr.html b/src/lessons/welcome/bool2/SquirrelPlay.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.fr.html
rename to src/lessons/welcome/bool2/SquirrelPlay.fr.html
diff --git a/src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.html b/src/lessons/welcome/bool2/SquirrelPlay.html
similarity index 100%
rename from src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.html
rename to src/lessons/welcome/bool2/SquirrelPlay.html
diff --git a/src/lessons/welcome/bool2/SquirrelPlay.java b/src/lessons/welcome/bool2/SquirrelPlay.java
new file mode 100644
index 0000000..5a42a6b
--- /dev/null
+++ b/src/lessons/welcome/bool2/SquirrelPlay.java
@@ -0,0 +1,48 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class SquirrelPlay extends BatExercise {
+	public SquirrelPlay(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("squirrelPlay");
+		myWorld.addTest(VISIBLE, 70, false) ;
+		myWorld.addTest(VISIBLE, 95, false) ;
+		myWorld.addTest(VISIBLE, 95, true) ;
+		myWorld.addTest(INVISIBLE, 90, false) ;
+		myWorld.addTest(INVISIBLE, 90, true) ;
+		myWorld.addTest(INVISIBLE, 50, false) ;
+		myWorld.addTest(INVISIBLE, 50, true) ;
+		myWorld.addTest(INVISIBLE, 100, false) ;
+		myWorld.addTest(INVISIBLE, 100, true) ;
+		myWorld.addTest(INVISIBLE, 105, true) ;
+		myWorld.addTest(INVISIBLE, 59, false) ;
+		myWorld.addTest(INVISIBLE, 59, true) ;
+		myWorld.addTest(INVISIBLE, 60, false) ;
+
+		langTemplate(Game.PYTHON, "squirrelPlay", 
+				"def squirrelPlay(temp, isSummer):\n",
+				"   return (temp >= 60 and ((isSummer and temp <= 100) or temp <= 90))");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( squirrelPlay((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean squirrelPlay(int temp, boolean isSummer) {
+		/* BEGIN SOLUTION */
+		return (temp >= 60 && ((isSummer && temp <= 100) || temp <= 90));
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/party/tea/TeaParty.fr.html b/src/lessons/welcome/bool2/TeaParty.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/party/tea/TeaParty.fr.html
rename to src/lessons/welcome/bool2/TeaParty.fr.html
diff --git a/src/lessons/welcome/bool2/party/tea/TeaParty.html b/src/lessons/welcome/bool2/TeaParty.html
similarity index 100%
rename from src/lessons/welcome/bool2/party/tea/TeaParty.html
rename to src/lessons/welcome/bool2/TeaParty.html
diff --git a/src/lessons/welcome/bool2/TeaParty.java b/src/lessons/welcome/bool2/TeaParty.java
new file mode 100644
index 0000000..db5d872
--- /dev/null
+++ b/src/lessons/welcome/bool2/TeaParty.java
@@ -0,0 +1,58 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class TeaParty extends BatExercise {
+	public TeaParty(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("teaParty");
+		myWorld.addTest(VISIBLE, 6, 8) ;
+		myWorld.addTest(VISIBLE, 3, 8) ;
+		myWorld.addTest(VISIBLE, 20, 6) ;
+		myWorld.addTest(INVISIBLE, 12, 6) ;
+		myWorld.addTest(INVISIBLE, 11, 6) ;
+		myWorld.addTest(INVISIBLE, 11, 4) ;
+		myWorld.addTest(INVISIBLE, 4, 5) ;
+		myWorld.addTest(INVISIBLE, 5, 5) ;
+		myWorld.addTest(INVISIBLE, 6, 6) ;
+		myWorld.addTest(INVISIBLE, 5, 10) ;
+		myWorld.addTest(INVISIBLE, 5, 9) ;
+		myWorld.addTest(INVISIBLE, 10, 4) ;
+		myWorld.addTest(INVISIBLE, 10, 20) ;
+
+		langTemplate(Game.PYTHON, "teaParty", 
+				"def teaParty(tea, candy):\n",
+				"	if (tea < 5 or candy < 5):\n"+
+				"		return 0\n"+
+				"	elif (tea >= 2*candy or candy >= 2*tea):\n"+ 
+				"		return 2\n"+
+				"	else:\n" +
+				"		return 1\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( teaParty((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int teaParty(int tea, int candy) {
+		/* BEGIN SOLUTION */
+		if (tea < 5 || candy < 5)
+			return 0;
+		else if (tea >= 2*candy || candy >= 2*tea) 
+			return 2;
+		else // (tea >= 5 && candy >= 5)
+			return 1;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/teensum/TeenSum.fr.html b/src/lessons/welcome/bool2/TeenSum.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/teensum/TeenSum.fr.html
rename to src/lessons/welcome/bool2/TeenSum.fr.html
diff --git a/src/lessons/welcome/bool2/teensum/TeenSum.html b/src/lessons/welcome/bool2/TeenSum.html
similarity index 100%
rename from src/lessons/welcome/bool2/teensum/TeenSum.html
rename to src/lessons/welcome/bool2/TeenSum.html
diff --git a/src/lessons/welcome/bool2/TeenSum.java b/src/lessons/welcome/bool2/TeenSum.java
new file mode 100644
index 0000000..d53f8bd
--- /dev/null
+++ b/src/lessons/welcome/bool2/TeenSum.java
@@ -0,0 +1,57 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class TeenSum extends BatExercise {
+	public TeenSum(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("teenSum");
+		myWorld.addTest(VISIBLE, 3, 4) ;
+		myWorld.addTest(VISIBLE, 10, 13) ;
+		myWorld.addTest(VISIBLE, 13, 2) ;
+		myWorld.addTest(INVISIBLE, 3, 19) ;
+		myWorld.addTest(INVISIBLE, 13, 13) ;
+		myWorld.addTest(INVISIBLE, 10, 10) ;
+		myWorld.addTest(INVISIBLE, 6, 14) ;
+		myWorld.addTest(INVISIBLE, 15, 2) ;
+		myWorld.addTest(INVISIBLE, 19, 19) ;
+		myWorld.addTest(INVISIBLE, 19, 20) ;
+		myWorld.addTest(INVISIBLE, 2, 18) ;
+		myWorld.addTest(INVISIBLE, 12, 4) ;
+		myWorld.addTest(INVISIBLE, 2, 20) ;
+		myWorld.addTest(INVISIBLE, 2, 17) ;
+		myWorld.addTest(INVISIBLE, 2, 16) ;
+		myWorld.addTest(INVISIBLE, 6, 7) ;
+
+		langTemplate(Game.PYTHON, "teenSum", 
+				"def teenSum(a, b):\n",
+				"	if ((a >= 13 and a <= 19) or (b >= 13 and b <= 19)):\n"+
+				"		return 19\n"+
+				"	else:\n"+
+				"		return a+b\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( teenSum((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int teenSum(int a, int b) {
+		/* BEGIN SOLUTION */
+		if ((a >= 13 && a <= 19) || (b >= 13 && b <= 19))
+			return 19;
+		else
+			return a+b;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/twoasone/TwoAsOne.fr.html b/src/lessons/welcome/bool2/TwoAsOne.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/twoasone/TwoAsOne.fr.html
rename to src/lessons/welcome/bool2/TwoAsOne.fr.html
diff --git a/src/lessons/welcome/bool2/twoasone/TwoAsOne.html b/src/lessons/welcome/bool2/TwoAsOne.html
similarity index 100%
rename from src/lessons/welcome/bool2/twoasone/TwoAsOne.html
rename to src/lessons/welcome/bool2/TwoAsOne.html
diff --git a/src/lessons/welcome/bool2/TwoAsOne.java b/src/lessons/welcome/bool2/TwoAsOne.java
new file mode 100644
index 0000000..8e42916
--- /dev/null
+++ b/src/lessons/welcome/bool2/TwoAsOne.java
@@ -0,0 +1,47 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class TwoAsOne extends BatExercise {
+	public TwoAsOne(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("twoAsOne");
+		myWorld.addTest(VISIBLE, 1, 2, 3) ;
+		myWorld.addTest(VISIBLE, 3, 1, 2) ;
+		myWorld.addTest(VISIBLE, 3, 2, 2) ;
+		myWorld.addTest(INVISIBLE, 2, 3, 1) ;
+		myWorld.addTest(INVISIBLE, 5, 3, -2) ;
+		myWorld.addTest(INVISIBLE, 5, 3, -3) ;
+		myWorld.addTest(INVISIBLE, 2, 5, 3) ;
+		myWorld.addTest(INVISIBLE, 9, 5, 5) ;
+		myWorld.addTest(INVISIBLE, 9, 4, 5) ;
+		myWorld.addTest(INVISIBLE, 5, 4, 9) ;
+		myWorld.addTest(INVISIBLE, 3, 3, 0) ;
+		myWorld.addTest(INVISIBLE, 3, 3, 2) ;
+
+		langTemplate(Game.PYTHON, "twoAsOne", 
+				"def twoAsOne(a, b, c):\n",
+				"   return (a + b == c) or (a + c == b) or (b + c == a)");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( twoAsOne((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	boolean twoAsOne(int a, int b, int c) {
+		/* BEGIN SOLUTION */
+		return (a + b == c) || (a + c == b) || (b + c == a);
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.fr.html b/src/lessons/welcome/bool2/WithoutDoubles.fr.html
similarity index 100%
rename from src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.fr.html
rename to src/lessons/welcome/bool2/WithoutDoubles.fr.html
diff --git a/src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.html b/src/lessons/welcome/bool2/WithoutDoubles.html
similarity index 100%
rename from src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.html
rename to src/lessons/welcome/bool2/WithoutDoubles.html
diff --git a/src/lessons/welcome/bool2/WithoutDoubles.java b/src/lessons/welcome/bool2/WithoutDoubles.java
new file mode 100644
index 0000000..b065f26
--- /dev/null
+++ b/src/lessons/welcome/bool2/WithoutDoubles.java
@@ -0,0 +1,59 @@
+/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
+
+package lessons.welcome.bool2;
+import jlm.core.model.Game;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.bat.BatExercise;
+import jlm.universe.bat.BatTest;
+import jlm.universe.bat.BatWorld;
+
+public class WithoutDoubles extends BatExercise {
+	public WithoutDoubles(Lesson lesson) {
+		super(lesson);
+
+		BatWorld myWorld = new BatWorld("withoutDoubles");
+		myWorld.addTest(VISIBLE, 2, 3, true) ;
+		myWorld.addTest(VISIBLE, 3, 3, true) ;
+		myWorld.addTest(VISIBLE, 3, 3, false) ;
+		myWorld.addTest(INVISIBLE, 2, 3, false) ;
+		myWorld.addTest(INVISIBLE, 5, 4, true) ;
+		myWorld.addTest(INVISIBLE, 5, 4, false) ;
+		myWorld.addTest(INVISIBLE, 5, 5, true) ;
+		myWorld.addTest(INVISIBLE, 5, 5, false) ;
+		myWorld.addTest(INVISIBLE, 6, 6, true) ;
+		myWorld.addTest(INVISIBLE, 6, 6, false) ;
+		myWorld.addTest(INVISIBLE, 1, 6, true) ;
+		myWorld.addTest(INVISIBLE, 6, 1, false) ;
+
+		langTemplate(Game.PYTHON, "withoutDoubles", 
+				"def withoutDoubles(die1, die2, noDoubles):\n",
+				"	if (noDoubles and (die1 == die2)):\n"+
+				"		if (die1 == 6):\n"+
+				"			return 1 + die2\n"+
+				"		else:\n"+
+				"			return die1 + 1 + die2\n"+
+				"	else:\n"+
+				"		return die1 + die2\n");
+		setup(myWorld);
+	}
+
+	/* BEGIN SKEL */
+	public void run(BatTest t) {
+		t.setResult( withoutDoubles((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Boolean)t.getParameter(2)) );
+	}
+	/* END SKEL */
+
+	/* BEGIN TEMPLATE */
+	int withoutDoubles(int die1, int die2, boolean noDoubles) {
+		/* BEGIN SOLUTION */
+		if (noDoubles && (die1 == die2)) {
+			if (die1 == 6)
+				return 1 + die2;
+			else 
+				return die1 + 1 + die2;
+		} else 
+			return die1 + die2;
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/bool2/alarmclock/AlarmClock.java b/src/lessons/welcome/bool2/alarmclock/AlarmClock.java
deleted file mode 100644
index 5dd5215..0000000
--- a/src/lessons/welcome/bool2/alarmclock/AlarmClock.java
+++ /dev/null
@@ -1,63 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.alarmclock;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class AlarmClock extends BatExercise {
-	public AlarmClock(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("alarmClock");
-		myWorld.addTest(VISIBLE, 1, false) ;
-		myWorld.addTest(VISIBLE, 5, false) ;
-		myWorld.addTest(VISIBLE, 0, false) ;
-		myWorld.addTest(INVISIBLE, 6, false) ;
-		myWorld.addTest(INVISIBLE, 0, true) ;
-		myWorld.addTest(INVISIBLE, 6, true) ;
-		myWorld.addTest(INVISIBLE, 1, true) ;
-		myWorld.addTest(INVISIBLE, 3, true) ;
-		myWorld.addTest(INVISIBLE, 5, true) ;
-
-		langTemplate(Game.PYTHON, "alarmClock", 
-				"def alarmClock(day, vacation):\n",
-				"	if not vacation:\n"+
-				"		if (day >= 1 and day <= 5):\n"+
-				"			return '7:00'\n"+
-				"		else:\n"+
-				"			return '10:00'\n"+
-				"	else:\n"+
-				"		if (day >= 1 and day <= 5):\n"+
-				"			return '10:00'\n"+
-				"		else:\n"+
-				"			return 'off'\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( alarmClock((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	String alarmClock(int day, boolean vacation) {
-		/* BEGIN SOLUTION */
-		if (! vacation) {  
-			if (day >= 1 && day <= 5)
-				return "7:00";
-			else
-				return "10:00";
-		} else {
-			if (day >= 1 && day <= 5)
-				return "10:00";
-			else
-				return "off";  
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/answercell/AnswerCell.java b/src/lessons/welcome/bool2/answercell/AnswerCell.java
deleted file mode 100644
index bad1701..0000000
--- a/src/lessons/welcome/bool2/answercell/AnswerCell.java
+++ /dev/null
@@ -1,41 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.answercell;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class AnswerCell extends BatExercise {
-	public AnswerCell(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("answerCell");
-		myWorld.addTest(VISIBLE, false, false, false) ;
-		myWorld.addTest(VISIBLE, false, false, true) ;
-		myWorld.addTest(VISIBLE, true, false, false) ;
-		myWorld.addTest(INVISIBLE, true, true, false) ;
-		myWorld.addTest(INVISIBLE, false, true, false) ;
-		myWorld.addTest(INVISIBLE, true, true, true) ;
-
-		langTemplate(Game.PYTHON, "answerCell", 
-				"def answerCell(isMorning, isMom, isAsleep):\n",
-				"   return (not isAsleep) and not (isMorning and not isMom)");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( answerCell((Boolean)t.getParameter(0), (Boolean)t.getParameter(1), (Boolean)t.getParameter(2)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean answerCell(boolean isMorning, boolean isMom, boolean isAsleep) {
-		/* BEGIN SOLUTION */
-		return (! isAsleep) && ! (isMorning && ! isMom);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.java b/src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.java
deleted file mode 100644
index 3b53546..0000000
--- a/src/lessons/welcome/bool2/caughtspeeding/CaughtSpeeding.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.caughtspeeding;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class CaughtSpeeding extends BatExercise {
-	public CaughtSpeeding(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("caughtSpeeding");
-		myWorld.addTest(VISIBLE, 60, false) ;
-		myWorld.addTest(VISIBLE, 65, false) ;
-		myWorld.addTest(VISIBLE, 65, true) ;
-		myWorld.addTest(INVISIBLE, 80, false) ;
-		myWorld.addTest(INVISIBLE, 85, false) ;
-		myWorld.addTest(INVISIBLE, 85, true) ;
-		myWorld.addTest(INVISIBLE, 70, false) ;
-		myWorld.addTest(INVISIBLE, 75, false) ;
-		myWorld.addTest(INVISIBLE, 75, true) ;
-		myWorld.addTest(INVISIBLE, 40, false) ;
-		myWorld.addTest(INVISIBLE, 40, true) ;
-		myWorld.addTest(INVISIBLE, 90, false) ;
-
-		langTemplate(Game.PYTHON, "caughtSpeeding", 
-				"def caughtSpeeding(speed, isBirthday):\n",
-				"	if ((isBirthday and speed <= 65) or (speed <= 60)):\n"+
-				"		return 0\n"+
-				"	elif ((isBirthday and speed <= 85) or (speed <= 80)):\n"+
-				"		return 1\n"+
-				"	else:\n"+
-				"		return 2\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( caughtSpeeding((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int caughtSpeeding(int speed, boolean isBirthday) {
-		/* BEGIN SOLUTION */
-		if ((isBirthday && speed <= 65) || (speed <= 60))
-			return 0;
-		else if ((isBirthday && speed <= 85) || (speed <= 80))
-			return 1;
-		else 
-			return 2;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/datefashion/DateFashion.java b/src/lessons/welcome/bool2/datefashion/DateFashion.java
deleted file mode 100644
index 78b0d2d..0000000
--- a/src/lessons/welcome/bool2/datefashion/DateFashion.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.datefashion;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class DateFashion extends BatExercise {
-	public DateFashion(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("dateFashion");
-		myWorld.addTest(VISIBLE, 5, 10) ;
-		myWorld.addTest(VISIBLE, 5, 2) ;
-		myWorld.addTest(VISIBLE, 5, 5) ;
-		myWorld.addTest(INVISIBLE, 3, 3) ;
-		myWorld.addTest(INVISIBLE, 10, 2) ;
-		myWorld.addTest(INVISIBLE, 2, 9) ;
-		myWorld.addTest(INVISIBLE, 9, 9) ;
-		myWorld.addTest(INVISIBLE, 10, 5) ;
-		myWorld.addTest(INVISIBLE, 2, 2) ;
-		myWorld.addTest(INVISIBLE, 3, 7) ;
-		myWorld.addTest(INVISIBLE, 2, 7) ;
-		myWorld.addTest(INVISIBLE, 6, 2) ;
-
-		langTemplate(Game.PYTHON, "dateFashion", 
-				"def dateFashion(you, date):\n",
-				"	if (you <= 2 or date <= 2):\n"+
-				"		return 0\n"+
-				"	elif (you >= 8 or date >= 8):\n"+
-				"		return 2\n"+
-				"	else:\n"+
-				"		return 1\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( dateFashion((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int dateFashion(int you, int date) {
-		/* BEGIN SOLUTION */
-		if (you <= 2 || date <= 2)
-			return 0;
-		else if (you >= 8 || date >= 8)
-			return 2;
-		else
-			return 1;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/in1to10/In1To10.java b/src/lessons/welcome/bool2/in1to10/In1To10.java
deleted file mode 100644
index 41bddbf..0000000
--- a/src/lessons/welcome/bool2/in1to10/In1To10.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.in1to10;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class In1To10 extends BatExercise {
-	public In1To10(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("in1To10");
-		myWorld.addTest(VISIBLE, 5, false) ;
-		myWorld.addTest(VISIBLE, 11, false) ;
-		myWorld.addTest(VISIBLE, 11, true) ;
-		myWorld.addTest(INVISIBLE, 10, false) ;
-		myWorld.addTest(INVISIBLE, 10, true) ;
-		myWorld.addTest(INVISIBLE, 9, false) ;
-		myWorld.addTest(INVISIBLE, 9, true) ;
-		myWorld.addTest(INVISIBLE, 1, false) ;
-		myWorld.addTest(INVISIBLE, 1, true) ;
-		myWorld.addTest(INVISIBLE, 0, false) ;
-		myWorld.addTest(INVISIBLE, 0, true) ;
-		myWorld.addTest(INVISIBLE, -1, false) ;
-
-		langTemplate(Game.PYTHON, "in1To10", 
-				"def in1To10(n, outsideMode):\n",
-				"   return (outsideMode and (n <= 1 or n >= 10)) or ((not outsideMode) and (n >= 1 and n <= 10))\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( in1To10((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean in1To10(int n, boolean outsideMode) {
-		/* BEGIN SOLUTION */
-		return (outsideMode && (n <= 1 || n >= 10)) || ((! outsideMode) && (n >= 1 && n <= 10));
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/inorder/InOrder.java b/src/lessons/welcome/bool2/inorder/InOrder.java
deleted file mode 100644
index aef7107..0000000
--- a/src/lessons/welcome/bool2/inorder/InOrder.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.inorder;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class InOrder extends BatExercise {
-	public InOrder(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("inOrder");
-		myWorld.addTest(VISIBLE, 1, 2, 4, false) ;
-		myWorld.addTest(VISIBLE, 1, 2, 1, false) ;
-		myWorld.addTest(VISIBLE, 1, 1, 2, true) ;
-		myWorld.addTest(INVISIBLE, 3, 2, 4, false) ;
-		myWorld.addTest(INVISIBLE, 2, 3, 4, false) ;
-		myWorld.addTest(INVISIBLE, 3, 2, 4, true) ;
-		myWorld.addTest(INVISIBLE, 4, 2, 2, true) ;
-		myWorld.addTest(INVISIBLE, 4, 5, 2, true) ;
-		myWorld.addTest(INVISIBLE, 2, 4, 6, true) ;
-		myWorld.addTest(INVISIBLE, 7, 9, 10, false) ;
-		myWorld.addTest(INVISIBLE, 7, 5, 6, true) ;
-		myWorld.addTest(INVISIBLE, 7, 5, 4, true) ;
-
-		langTemplate(Game.PYTHON, "inOrder", 
-				"def inOrder(a, b, c, bOk):\n",
-				"		return (bOk or (b > a)) and (c > b)\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( inOrder((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2), (Boolean)t.getParameter(3)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean inOrder(int a, int b, int c, boolean bOk) {
-		/* BEGIN SOLUTION */
-		return (bOk || (b > a)) && (c > b);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/inorderequals/InOrderEqual.java b/src/lessons/welcome/bool2/inorderequals/InOrderEqual.java
deleted file mode 100644
index 03a328a..0000000
--- a/src/lessons/welcome/bool2/inorderequals/InOrderEqual.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.inorderequals;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class InOrderEqual extends BatExercise {
-	public InOrderEqual(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("inOrderEqual");
-		myWorld.addTest(VISIBLE, 2, 5, 11, false) ;
-		myWorld.addTest(VISIBLE, 5, 7, 6, false) ;
-		myWorld.addTest(VISIBLE, 5, 5, 7, true) ;
-		myWorld.addTest(INVISIBLE, 5, 5, 7, false) ;
-		myWorld.addTest(INVISIBLE, 2, 5, 4, false) ;
-		myWorld.addTest(INVISIBLE, 3, 4, 3, false) ;
-		myWorld.addTest(INVISIBLE, 3, 4, 4, false) ;
-		myWorld.addTest(INVISIBLE, 3, 4, 3, true) ;
-		myWorld.addTest(INVISIBLE, 3, 4, 4, true) ;
-		myWorld.addTest(INVISIBLE, 1, 5, 5, true) ;
-		myWorld.addTest(INVISIBLE, 5, 5, 5, true) ;
-		myWorld.addTest(INVISIBLE, 2, 2, 1, true) ;
-		myWorld.addTest(INVISIBLE, 9, 2, 2, true) ;
-		myWorld.addTest(INVISIBLE, 0, 1, 0, true) ;
-
-		langTemplate(Game.PYTHON, "inOrderEqual", 
-				"def inOrderEqual(a, b, c, equalOk):\n",
-				"		return (equalOk and ((a <= b) and (b <= c))) or (a < b and b < c)");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( inOrderEqual((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2), (Boolean)t.getParameter(3)) ); 
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean inOrderEqual(int a, int b, int c, boolean equalOk) {
-		/* BEGIN SOLUTION */
-		return (equalOk && ((a <= b) && (b <= c))) || (a < b && b < c);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/lastdigit2/LastDigit2.java b/src/lessons/welcome/bool2/lastdigit2/LastDigit2.java
deleted file mode 100644
index 12b6267..0000000
--- a/src/lessons/welcome/bool2/lastdigit2/LastDigit2.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.lastdigit2;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class LastDigit2 extends BatExercise {
-	public LastDigit2(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("lastDigit");
-		myWorld.addTest(VISIBLE, 23, 19, 13) ;
-		myWorld.addTest(VISIBLE, 23, 19, 12) ;
-		myWorld.addTest(VISIBLE, 23, 19, 3) ;
-		myWorld.addTest(INVISIBLE, 23, 19, 39) ;
-		myWorld.addTest(INVISIBLE, 1, 2, 3) ;
-		myWorld.addTest(INVISIBLE, 1, 1, 2) ;
-		myWorld.addTest(INVISIBLE, 1, 2, 2) ;
-		myWorld.addTest(INVISIBLE, 14, 25, 43) ;
-		myWorld.addTest(INVISIBLE, 14, 25, 45) ;
-		myWorld.addTest(INVISIBLE, 248, 106, 1002) ;
-		myWorld.addTest(INVISIBLE, 248, 106, 1008) ;
-		myWorld.addTest(INVISIBLE, 10, 11, 20) ;
-		myWorld.addTest(INVISIBLE, 0, 11, 0) ;
-
-		langTemplate(Game.PYTHON, "lastDigit", 
-				"def lastDigit(a, b, c):\n",
-				"	da = a % 10\n"+
-				"	db = b % 10\n"+
-				"	dc = c % 10\n"+
-				"	return da == db or da == dc or dc == db\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( lastDigit((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean lastDigit(int a, int b, int c) {
-		/* BEGIN SOLUTION */
-		int da = a % 10;
-		int db = b % 10;
-		int dc = c % 10;
-		return da == db || da == dc || dc == db;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/lessby10/LessBy10.java b/src/lessons/welcome/bool2/lessby10/LessBy10.java
deleted file mode 100644
index 306cb9e..0000000
--- a/src/lessons/welcome/bool2/lessby10/LessBy10.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.lessby10;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class LessBy10 extends BatExercise {
-	public LessBy10(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("lessBy10");
-		myWorld.addTest(VISIBLE, 1, 7, 11) ;
-		myWorld.addTest(VISIBLE, 1, 7, 10) ;
-		myWorld.addTest(VISIBLE, 11, 1, 7) ;
-		myWorld.addTest(INVISIBLE, 10, 7, 1) ;
-		myWorld.addTest(INVISIBLE, -10, 2, 2) ;
-		myWorld.addTest(INVISIBLE, 2, 11, 11) ;
-		myWorld.addTest(INVISIBLE, 3, 3, 30) ;
-		myWorld.addTest(INVISIBLE, 3, 3, 3) ;
-		myWorld.addTest(INVISIBLE, 10, 1, 11) ;
-		myWorld.addTest(INVISIBLE, 10, 11, 1) ;
-		myWorld.addTest(INVISIBLE, 10, 11, 2) ;
-		myWorld.addTest(INVISIBLE, 3, 30, 3) ;
-		myWorld.addTest(INVISIBLE, 2, 2, -8) ;
-		myWorld.addTest(INVISIBLE, 2, 8, 12) ;
-
-		langTemplate(Game.PYTHON, "lessBy10", 
-				"def lessBy10(a, b, c):\n",
-				"	return ((a - b) >= 10) or ((b - a) >= 10) or ((b - c) >= 10) or ((c - b) >= 10) or ((a - c) >= 10) or ((c - a) >= 10)\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( lessBy10((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean lessBy10(int a, int b, int c) {
-		/* BEGIN SOLUTION */
-		return ((a - b) >= 10) || ((b - a) >= 10) || ((b - c) >= 10) || ((c - b) >= 10) || ((a - c) >= 10) || ((c - a) >= 10);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/maxmod5/MaxMod5.java b/src/lessons/welcome/bool2/maxmod5/MaxMod5.java
deleted file mode 100644
index cd493f1..0000000
--- a/src/lessons/welcome/bool2/maxmod5/MaxMod5.java
+++ /dev/null
@@ -1,69 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.maxmod5;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class MaxMod5 extends BatExercise {
-	public MaxMod5(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("maxMod5");
-		myWorld.addTest(VISIBLE, 2, 3) ;
-		myWorld.addTest(VISIBLE, 6, 2) ;
-		myWorld.addTest(VISIBLE, 3, 2) ;
-		myWorld.addTest(INVISIBLE, 8, 12) ;
-		myWorld.addTest(INVISIBLE, 7, 12) ;
-		myWorld.addTest(INVISIBLE, 11, 6) ;
-		myWorld.addTest(INVISIBLE, 2, 7) ;
-		myWorld.addTest(INVISIBLE, 7, 7) ;
-		myWorld.addTest(INVISIBLE, 9, 1) ;
-		myWorld.addTest(INVISIBLE, 9, 14) ;
-		myWorld.addTest(INVISIBLE, 1, 2) ;
-
-		langTemplate(Game.PYTHON, "maxMod5", 
-				"def maxMod5(a, b):\n",
-				"	if (a == b):\n"+
-				"		return 0\n"+
-				"	elif (a > b):\n"+
-				"		if (a % 5 == b % 5):\n"+
-				"			return b\n"+
-				"		else:\n"+
-				"			return a\n"+
-				"	else:\n"+
-				"		if (a % 5 == b % 5):\n"+
-				"			return a\n"+
-				"		else:\n"+
-				"			return b");  
-
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( maxMod5((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int maxMod5(int a, int b) {
-		/* BEGIN SOLUTION */
-		if (a == b)
-			return 0;
-		else if (a > b)
-			if (a % 5 == b % 5)
-				return b;
-			else 
-				return a;
-		else 
-			if (a % 5 == b % 5)
-				return a;
-			else 
-				return b;  
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/nearten/NearTen.java b/src/lessons/welcome/bool2/nearten/NearTen.java
deleted file mode 100644
index 8566baa..0000000
--- a/src/lessons/welcome/bool2/nearten/NearTen.java
+++ /dev/null
@@ -1,49 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.nearten;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class NearTen extends BatExercise {
-	public NearTen(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("nearTen");
-		myWorld.addTest(VISIBLE, 12) ;
-		myWorld.addTest(VISIBLE, 17) ;
-		myWorld.addTest(VISIBLE, 19) ;
-		myWorld.addTest(INVISIBLE, 21) ;
-		myWorld.addTest(INVISIBLE, 6) ;
-		myWorld.addTest(INVISIBLE, 10) ;
-		myWorld.addTest(INVISIBLE, 11) ;
-		myWorld.addTest(INVISIBLE, 12) ;
-		myWorld.addTest(INVISIBLE, 13) ;
-		myWorld.addTest(INVISIBLE, 54) ;
-		myWorld.addTest(INVISIBLE, 155) ;
-		myWorld.addTest(INVISIBLE, 158) ;
-		myWorld.addTest(INVISIBLE, 3) ;
-		myWorld.addTest(INVISIBLE, 1) ;
-
-		langTemplate(Game.PYTHON, "nearTen", 
-				"def nearTen(num):\n",
-				"  return (num % 10) <= 2 or (num % 10) >= 8\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( nearTen((Integer)t.getParameter(0)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean nearTen(int num) {
-		/* BEGIN SOLUTION */
-		return (num % 10) <= 2 || (num % 10) >= 8; 
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/party/cigar/CigarParty.java b/src/lessons/welcome/bool2/party/cigar/CigarParty.java
deleted file mode 100644
index 21aa271..0000000
--- a/src/lessons/welcome/bool2/party/cigar/CigarParty.java
+++ /dev/null
@@ -1,46 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.party.cigar;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class CigarParty extends BatExercise {
-	public CigarParty(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("cigarParty");
-		myWorld.addTest(VISIBLE, 30, false) ;
-		myWorld.addTest(VISIBLE, 50, false) ;
-		myWorld.addTest(VISIBLE, 70, true) ;
-		myWorld.addTest(INVISIBLE, 30, true) ;
-		myWorld.addTest(INVISIBLE, 50, true) ;
-		myWorld.addTest(INVISIBLE, 60, false) ;
-		myWorld.addTest(INVISIBLE, 61, false) ;
-		myWorld.addTest(INVISIBLE, 40, false) ;
-		myWorld.addTest(INVISIBLE, 39, false) ;
-		myWorld.addTest(INVISIBLE, 40, true) ;
-		myWorld.addTest(INVISIBLE, 39, true) ;
-
-		langTemplate(Game.PYTHON, "cigarParty", 
-				"def cigarParty(cigars, isWeekend):\n",
-				"   return (isWeekend and cigars >= 40) or (not isWeekend and (cigars >= 40) and (cigars <= 60))\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( cigarParty((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean cigarParty(int cigars, boolean isWeekend) {
-		/* BEGIN SOLUTION */
-		return (isWeekend && cigars >= 40) || (!isWeekend && (cigars >= 40) && (cigars <= 60));
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/party/tea/TeaParty.java b/src/lessons/welcome/bool2/party/tea/TeaParty.java
deleted file mode 100644
index 84220c5..0000000
--- a/src/lessons/welcome/bool2/party/tea/TeaParty.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.party.tea;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class TeaParty extends BatExercise {
-	public TeaParty(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("teaParty");
-		myWorld.addTest(VISIBLE, 6, 8) ;
-		myWorld.addTest(VISIBLE, 3, 8) ;
-		myWorld.addTest(VISIBLE, 20, 6) ;
-		myWorld.addTest(INVISIBLE, 12, 6) ;
-		myWorld.addTest(INVISIBLE, 11, 6) ;
-		myWorld.addTest(INVISIBLE, 11, 4) ;
-		myWorld.addTest(INVISIBLE, 4, 5) ;
-		myWorld.addTest(INVISIBLE, 5, 5) ;
-		myWorld.addTest(INVISIBLE, 6, 6) ;
-		myWorld.addTest(INVISIBLE, 5, 10) ;
-		myWorld.addTest(INVISIBLE, 5, 9) ;
-		myWorld.addTest(INVISIBLE, 10, 4) ;
-		myWorld.addTest(INVISIBLE, 10, 20) ;
-
-		langTemplate(Game.PYTHON, "teaParty", 
-				"def teaParty(tea, candy):\n",
-				"	if (tea < 5 or candy < 5):\n"+
-				"		return 0\n"+
-				"	elif (tea >= 2*candy or candy >= 2*tea):\n"+ 
-				"		return 2\n"+
-				"	else:\n" +
-				"		return 1\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( teaParty((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int teaParty(int tea, int candy) {
-		/* BEGIN SOLUTION */
-		if (tea < 5 || candy < 5)
-			return 0;
-		else if (tea >= 2*candy || candy >= 2*tea) 
-			return 2;
-		else // (tea >= 5 && candy >= 5)
-			return 1;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/sharedigit/ShareDigit.java b/src/lessons/welcome/bool2/sharedigit/ShareDigit.java
deleted file mode 100644
index 6a08813..0000000
--- a/src/lessons/welcome/bool2/sharedigit/ShareDigit.java
+++ /dev/null
@@ -1,45 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.sharedigit;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class ShareDigit extends BatExercise {
-	public ShareDigit(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("shareDigit");
-		myWorld.addTest(VISIBLE, 12, 23) ;
-		myWorld.addTest(VISIBLE, 12, 43) ;
-		myWorld.addTest(VISIBLE, 12, 44) ;
-		myWorld.addTest(INVISIBLE, 23, 12) ;
-		myWorld.addTest(INVISIBLE, 23, 39) ;
-		myWorld.addTest(INVISIBLE, 23, 19) ;
-		myWorld.addTest(INVISIBLE, 30, 90) ;
-		myWorld.addTest(INVISIBLE, 30, 91) ;
-		myWorld.addTest(INVISIBLE, 55, 55) ;
-		myWorld.addTest(INVISIBLE, 55, 44) ;
-
-		langTemplate(Game.PYTHON, "shareDigit", 
-				"def shareDigit(a, b):\n",
-				"   return (a/10 == b/10 or a/10 == b%10 or a%10 == b/10 or a%10 == b%10)");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( shareDigit((Integer)t.getParameter(0), (Integer)t.getParameter(1)) ); 
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean shareDigit(int a, int b) {
-		/* BEGIN SOLUTION */
-		return (a/10 == b/10 || a/10 == b%10 || a%10 == b/10 || a%10 == b%10);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/sortasum/SortaSum.java b/src/lessons/welcome/bool2/sortasum/SortaSum.java
deleted file mode 100644
index 7992c2d..0000000
--- a/src/lessons/welcome/bool2/sortasum/SortaSum.java
+++ /dev/null
@@ -1,52 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.sortasum;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class SortaSum extends BatExercise {
-	public SortaSum(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("sortaSum");
-		myWorld.addTest(VISIBLE, 3, 4) ;
-		myWorld.addTest(VISIBLE, 9, 4) ;
-		myWorld.addTest(VISIBLE, 10, 11) ;
-		myWorld.addTest(INVISIBLE, 12, -3) ;
-		myWorld.addTest(INVISIBLE, -3, 12) ;
-		myWorld.addTest(INVISIBLE, 4, 5) ;
-		myWorld.addTest(INVISIBLE, 4, 6) ;
-		myWorld.addTest(INVISIBLE, 14, 7) ;
-		myWorld.addTest(INVISIBLE, 14, 6) ;
-
-		langTemplate(Game.PYTHON, "sortaSum", 
-				"def sortaSum(a, b):\n",
-				"	sum = a+b\n"+
-				"	if (sum >= 10 and sum <= 19):\n"+
-				"		return 20\n"+
-				"	else:\n"+
-				"		return sum\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( sortaSum((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int sortaSum(int a, int b) {
-		/* BEGIN SOLUTION */
-		int sum = a+b;
-		if (sum >= 10 && sum <= 19)
-			return 20;
-		else
-			return sum;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.java b/src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.java
deleted file mode 100644
index bf228cf..0000000
--- a/src/lessons/welcome/bool2/squirrelplay/SquirrelPlay.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.squirrelplay;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class SquirrelPlay extends BatExercise {
-	public SquirrelPlay(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("squirrelPlay");
-		myWorld.addTest(VISIBLE, 70, false) ;
-		myWorld.addTest(VISIBLE, 95, false) ;
-		myWorld.addTest(VISIBLE, 95, true) ;
-		myWorld.addTest(INVISIBLE, 90, false) ;
-		myWorld.addTest(INVISIBLE, 90, true) ;
-		myWorld.addTest(INVISIBLE, 50, false) ;
-		myWorld.addTest(INVISIBLE, 50, true) ;
-		myWorld.addTest(INVISIBLE, 100, false) ;
-		myWorld.addTest(INVISIBLE, 100, true) ;
-		myWorld.addTest(INVISIBLE, 105, true) ;
-		myWorld.addTest(INVISIBLE, 59, false) ;
-		myWorld.addTest(INVISIBLE, 59, true) ;
-		myWorld.addTest(INVISIBLE, 60, false) ;
-
-		langTemplate(Game.PYTHON, "squirrelPlay", 
-				"def squirrelPlay(temp, isSummer):\n",
-				"   return (temp >= 60 and ((isSummer and temp <= 100) or temp <= 90))");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( squirrelPlay((Integer)t.getParameter(0), (Boolean)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean squirrelPlay(int temp, boolean isSummer) {
-		/* BEGIN SOLUTION */
-		return (temp >= 60 && ((isSummer && temp <= 100) || temp <= 90));
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/teensum/TeenSum.java b/src/lessons/welcome/bool2/teensum/TeenSum.java
deleted file mode 100644
index 9f80757..0000000
--- a/src/lessons/welcome/bool2/teensum/TeenSum.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.teensum;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class TeenSum extends BatExercise {
-	public TeenSum(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("teenSum");
-		myWorld.addTest(VISIBLE, 3, 4) ;
-		myWorld.addTest(VISIBLE, 10, 13) ;
-		myWorld.addTest(VISIBLE, 13, 2) ;
-		myWorld.addTest(INVISIBLE, 3, 19) ;
-		myWorld.addTest(INVISIBLE, 13, 13) ;
-		myWorld.addTest(INVISIBLE, 10, 10) ;
-		myWorld.addTest(INVISIBLE, 6, 14) ;
-		myWorld.addTest(INVISIBLE, 15, 2) ;
-		myWorld.addTest(INVISIBLE, 19, 19) ;
-		myWorld.addTest(INVISIBLE, 19, 20) ;
-		myWorld.addTest(INVISIBLE, 2, 18) ;
-		myWorld.addTest(INVISIBLE, 12, 4) ;
-		myWorld.addTest(INVISIBLE, 2, 20) ;
-		myWorld.addTest(INVISIBLE, 2, 17) ;
-		myWorld.addTest(INVISIBLE, 2, 16) ;
-		myWorld.addTest(INVISIBLE, 6, 7) ;
-
-		langTemplate(Game.PYTHON, "teenSum", 
-				"def teenSum(a, b):\n",
-				"	if ((a >= 13 and a <= 19) or (b >= 13 and b <= 19)):\n"+
-				"		return 19\n"+
-				"	else:\n"+
-				"		return a+b\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( teenSum((Integer)t.getParameter(0), (Integer)t.getParameter(1)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int teenSum(int a, int b) {
-		/* BEGIN SOLUTION */
-		if ((a >= 13 && a <= 19) || (b >= 13 && b <= 19))
-			return 19;
-		else
-			return a+b;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/ticket/blue/BlueTicket.java b/src/lessons/welcome/bool2/ticket/blue/BlueTicket.java
deleted file mode 100644
index bf4eb8b..0000000
--- a/src/lessons/welcome/bool2/ticket/blue/BlueTicket.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.ticket.blue;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class BlueTicket extends BatExercise {
-	public BlueTicket(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("blueTicket");
-		myWorld.addTest(VISIBLE, 9, 1, 0) ;
-		myWorld.addTest(VISIBLE, 9, 2, 0) ;
-		myWorld.addTest(VISIBLE, 6, 1, 4) ;
-		myWorld.addTest(INVISIBLE, 6, 1, 5) ;
-		myWorld.addTest(INVISIBLE, 10, 0, 0) ;
-		myWorld.addTest(INVISIBLE, 15, 0, 5) ;
-		myWorld.addTest(INVISIBLE, 5, 15, 5) ;
-		myWorld.addTest(INVISIBLE, 4, 11, 1) ;
-		myWorld.addTest(INVISIBLE, 13, 2, 3) ;
-		myWorld.addTest(INVISIBLE, 8, 4, 3) ;
-		myWorld.addTest(INVISIBLE, 8, 4, 2) ;
-		myWorld.addTest(INVISIBLE, 8, 4, 1) ;
-
-		langTemplate(Game.PYTHON, "blueTicket", 
-				"def blueTicket(a, b, c):\n",
-				"	ab = a + b\n"+
-				"	ac = a + c\n"+
-				"	bc = b + c\n"+
-				"	if (ab == 10 or ac == 10 or bc == 10):\n"+
-				"		return 10\n"+
-				"	elif (ab == (bc + 10) or ab == (ac + 10)):\n"+
-				"		return 5\n"+
-				"	else:\n"+
-				"		return 0\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( blueTicket((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int blueTicket(int a, int b, int c) {
-		/* BEGIN SOLUTION */
-		int ab = a + b;
-		int ac = a + c;
-		int bc = b + c;
-
-		if (ab == 10 || ac == 10 || bc == 10)
-			return 10;
-		else if (ab == (bc + 10) || ab == (ac + 10))
-			return 5;
-		else 
-			return 0;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/ticket/green/GreenTicket.java b/src/lessons/welcome/bool2/ticket/green/GreenTicket.java
deleted file mode 100644
index 575d54d..0000000
--- a/src/lessons/welcome/bool2/ticket/green/GreenTicket.java
+++ /dev/null
@@ -1,57 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.ticket.green;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class GreenTicket extends BatExercise {
-	public GreenTicket(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("greenTicket");
-		myWorld.addTest(VISIBLE, 1, 2, 3) ;
-		myWorld.addTest(VISIBLE, 2, 2, 2) ;
-		myWorld.addTest(VISIBLE, 1, 1, 2) ;
-		myWorld.addTest(INVISIBLE, 2, 1, 1) ;
-		myWorld.addTest(INVISIBLE, 1, 2, 1) ;
-		myWorld.addTest(INVISIBLE, 3, 2, 1) ;
-		myWorld.addTest(INVISIBLE, 0, 0, 0) ;
-		myWorld.addTest(INVISIBLE, 2, 0, 0) ;
-		myWorld.addTest(INVISIBLE, 0, 9, 10) ;
-		myWorld.addTest(INVISIBLE, 0, 10, 0) ;
-		myWorld.addTest(INVISIBLE, 9, 9, 9) ;
-		myWorld.addTest(INVISIBLE, 9, 0, 9) ;
-
-		langTemplate(Game.PYTHON, "greenTicket", 
-				"def greenTicket(a, b, c):\n",
-				"	if (a == b and b == c):\n"+
-				"		return 20\n"+
-				"	elif (a == b or b == c or a == c):\n"+
-				"		return 10\n"+
-				"	else:\n"+
-				"		return 0\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( greenTicket((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int greenTicket(int a, int b, int c) {
-		/* BEGIN SOLUTION */
-		if (a == b && b == c)
-			return 20;
-		else if (a == b || b == c || a == c)
-			return 10;
-		else  // (a != b && b != a && c != a)
-			return 0;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/ticket/red/RedTicket.java b/src/lessons/welcome/bool2/ticket/red/RedTicket.java
deleted file mode 100644
index 7a3fb03..0000000
--- a/src/lessons/welcome/bool2/ticket/red/RedTicket.java
+++ /dev/null
@@ -1,60 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.ticket.red;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class RedTicket extends BatExercise {
-	public RedTicket(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("redTicket");
-		myWorld.addTest(VISIBLE, 2, 2, 2) ;
-		myWorld.addTest(VISIBLE, 2, 2, 1) ;
-		myWorld.addTest(VISIBLE, 0, 0, 0) ;
-		myWorld.addTest(INVISIBLE, 2, 0, 0) ;
-		myWorld.addTest(INVISIBLE, 1, 1, 1) ;
-		myWorld.addTest(INVISIBLE, 1, 2, 1) ;
-		myWorld.addTest(INVISIBLE, 1, 2, 0) ;
-		myWorld.addTest(INVISIBLE, 0, 2, 2) ;
-		myWorld.addTest(INVISIBLE, 1, 2, 2) ;
-		myWorld.addTest(INVISIBLE, 0, 2, 0) ;
-		myWorld.addTest(INVISIBLE, 1, 1, 2) ;
-
-		langTemplate(Game.PYTHON, "redTicket", 
-				"def redTicket(a, b, c):\n",
-				"	if (a == b and b == c and c == 2):\n"+
-				"		return 10\n"+
-				"	elif (a == b and b == c):\n"+
-				"		return 5\n"+
-				"	elif (b != a and c != a):\n"+
-				"		return 1\n"+
-				"	else:\n"+
-				"		return 0\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( redTicket((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int redTicket(int a, int b, int c) {
-		/* BEGIN SOLUTION */
-		if (a == b && b == c && c == 2)
-			return 10;
-		else if (a == b && b == c)
-			return 5;
-		else if (b != a && c != a)
-			return 1;
-		else
-			return 0;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/twoasone/TwoAsOne.java b/src/lessons/welcome/bool2/twoasone/TwoAsOne.java
deleted file mode 100644
index d6d5140..0000000
--- a/src/lessons/welcome/bool2/twoasone/TwoAsOne.java
+++ /dev/null
@@ -1,47 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.twoasone;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class TwoAsOne extends BatExercise {
-	public TwoAsOne(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("twoAsOne");
-		myWorld.addTest(VISIBLE, 1, 2, 3) ;
-		myWorld.addTest(VISIBLE, 3, 1, 2) ;
-		myWorld.addTest(VISIBLE, 3, 2, 2) ;
-		myWorld.addTest(INVISIBLE, 2, 3, 1) ;
-		myWorld.addTest(INVISIBLE, 5, 3, -2) ;
-		myWorld.addTest(INVISIBLE, 5, 3, -3) ;
-		myWorld.addTest(INVISIBLE, 2, 5, 3) ;
-		myWorld.addTest(INVISIBLE, 9, 5, 5) ;
-		myWorld.addTest(INVISIBLE, 9, 4, 5) ;
-		myWorld.addTest(INVISIBLE, 5, 4, 9) ;
-		myWorld.addTest(INVISIBLE, 3, 3, 0) ;
-		myWorld.addTest(INVISIBLE, 3, 3, 2) ;
-
-		langTemplate(Game.PYTHON, "twoAsOne", 
-				"def twoAsOne(a, b, c):\n",
-				"   return (a + b == c) or (a + c == b) or (b + c == a)");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( twoAsOne((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Integer)t.getParameter(2)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	boolean twoAsOne(int a, int b, int c) {
-		/* BEGIN SOLUTION */
-		return (a + b == c) || (a + c == b) || (b + c == a);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.java b/src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.java
deleted file mode 100644
index 2f2d2a9..0000000
--- a/src/lessons/welcome/bool2/withoutdoubles/WithoutDoubles.java
+++ /dev/null
@@ -1,59 +0,0 @@
-/* automatically converted from the Nick Parlante's excellent exercising site http://javabat.com/ */
-
-package lessons.welcome.bool2.withoutdoubles;
-import jlm.core.model.Game;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bat.BatExercise;
-import jlm.universe.bat.BatTest;
-import jlm.universe.bat.BatWorld;
-
-public class WithoutDoubles extends BatExercise {
-	public WithoutDoubles(Lesson lesson) {
-		super(lesson);
-
-		BatWorld myWorld = new BatWorld("withoutDoubles");
-		myWorld.addTest(VISIBLE, 2, 3, true) ;
-		myWorld.addTest(VISIBLE, 3, 3, true) ;
-		myWorld.addTest(VISIBLE, 3, 3, false) ;
-		myWorld.addTest(INVISIBLE, 2, 3, false) ;
-		myWorld.addTest(INVISIBLE, 5, 4, true) ;
-		myWorld.addTest(INVISIBLE, 5, 4, false) ;
-		myWorld.addTest(INVISIBLE, 5, 5, true) ;
-		myWorld.addTest(INVISIBLE, 5, 5, false) ;
-		myWorld.addTest(INVISIBLE, 6, 6, true) ;
-		myWorld.addTest(INVISIBLE, 6, 6, false) ;
-		myWorld.addTest(INVISIBLE, 1, 6, true) ;
-		myWorld.addTest(INVISIBLE, 6, 1, false) ;
-
-		langTemplate(Game.PYTHON, "withoutDoubles", 
-				"def withoutDoubles(die1, die2, noDoubles):\n",
-				"	if (noDoubles and (die1 == die2)):\n"+
-				"		if (die1 == 6):\n"+
-				"			return 1 + die2\n"+
-				"		else:\n"+
-				"			return die1 + 1 + die2\n"+
-				"	else:\n"+
-				"		return die1 + die2\n");
-		setup(myWorld);
-	}
-
-	/* BEGIN SKEL */
-	public void run(BatTest t) {
-		t.setResult( withoutDoubles((Integer)t.getParameter(0), (Integer)t.getParameter(1), (Boolean)t.getParameter(2)) );
-	}
-	/* END SKEL */
-
-	/* BEGIN TEMPLATE */
-	int withoutDoubles(int die1, int die2, boolean noDoubles) {
-		/* BEGIN SOLUTION */
-		if (noDoubles && (die1 == die2)) {
-			if (die1 == 6)
-				return 1 + die2;
-			else 
-				return die1 + 1 + die2;
-		} else 
-			return die1 + die2;
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-}
diff --git a/src/lessons/welcome/conditions/Conditions-answer0.map b/src/lessons/welcome/conditions/Conditions-answer0.map
new file mode 100644
index 0000000..31cfe04
--- /dev/null
+++ b/src/lessons/welcome/conditions/Conditions-answer0.map
@@ -0,0 +1,30 @@
+BuggleWorld: Closed World
+Size: 7x7
+Buggle(0,4): north,black,lightGray,Buggle 1
+Buggle(1,2): north,black,lightGray,Buggle 2
+Buggle(2,4): north,black,lightGray,Buggle 3
+Buggle(3,2): north,black,lightGray,Buggle 4
+Buggle(4,4): north,black,lightGray,Buggle 5
+Buggle(5,2): north,black,lightGray,Buggle 6
+Buggle(6,4): north,black,lightGray,Buggle 7
+Cell(0,3): white,nobaggle,topwall,leftwall,
+Cell(0,4): white,nobaggle,notopwall,leftwall,
+Cell(0,5): white,nobaggle,topwall,noleftwall,
+Cell(1,2): white,nobaggle,topwall,leftwall,
+Cell(1,4): white,nobaggle,topwall,leftwall,
+Cell(2,2): white,nobaggle,notopwall,leftwall,
+Cell(2,3): white,nobaggle,topwall,noleftwall,
+Cell(2,4): white,nobaggle,notopwall,leftwall,
+Cell(2,5): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,leftwall,
+Cell(3,4): white,nobaggle,topwall,leftwall,
+Cell(4,2): white,nobaggle,notopwall,leftwall,
+Cell(4,3): white,nobaggle,topwall,noleftwall,
+Cell(4,4): white,nobaggle,notopwall,leftwall,
+Cell(4,5): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,leftwall,
+Cell(5,4): white,nobaggle,topwall,leftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,nobaggle,topwall,noleftwall,
+Cell(6,4): white,nobaggle,notopwall,leftwall,
+Cell(6,5): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/welcome/environment/Environment-answer0.map b/src/lessons/welcome/environment/Environment-answer0.map
new file mode 100644
index 0000000..732afe0
--- /dev/null
+++ b/src/lessons/welcome/environment/Environment-answer0.map
@@ -0,0 +1,3 @@
+BuggleWorld: Training Camp
+Size: 7x7
+Buggle(3,2): north,black,lightGray,Noob
diff --git a/src/lessons/welcome/environment/Environment.fr.html b/src/lessons/welcome/environment/Environment.fr.html
index ae86821..28a4149 100644
--- a/src/lessons/welcome/environment/Environment.fr.html
+++ b/src/lessons/welcome/environment/Environment.fr.html
@@ -2,31 +2,25 @@
 
   Vous venez de lancer la Java Learning Machine.  Il s'agit d'une plate-forme
 pédagogique destinée à simplifier l'apprentissage de la programmation.  Il
-est
-constitué d'un ensemble d'exercices groupés par leçons, pour vous permettre
-de
-progresser à votre rythme. Par défaut, l'outil est configuré pour vous
-permettre de programmer en Java, mais vous pouvez changer de langage de
-programmation grâce au menu Language si vous le désirez.
+est constitué d'un ensemble d'exercices groupés par leçons, pour vous
+permettre de progresser à votre rythme. Par défaut, l'outil est configuré
+pour vous permettre de programmer en Java, mais vous pouvez changer de
+langage de programmation grâce au menu Langage si vous le désirez.
 
 <p>Dans cette première leçon, les buggles guideront vos premiers pas en
-programmation.
+programmation.</p>
 
   <h3>Les <i>buggles</i> ? Qu'est ce que c'est ??</h3>
 
-  Les buggles sont de petites bêtes qui obéissent aux ordres que vous leur
+  <p>Les buggles sont de petites bêtes qui obéissent aux ordres que vous leur
 donnez. Dans chaque exercice, vous devez donner des ordres à vos buggles
-pour
-faire en sorte que le monde ressemble à l'objectif de l'exercice. Par
-exemple
-dans cet exercice, vous devez instruire votre buggle pour qu'elle avance
-d'un
-pas. Observez la différence entre l'état initial et l'objectif en utilisant
-les
-panneaux à droite. Selon la leçon (et vos réglages dans le menu Language),
-vous
-devez écrire vos programme dans l'un des langages de programmation suivant :
-Java, JavaScript, Python ou Ruby.
+pour faire en sorte que le monde ressemble à l'objectif de l'exercice. Par
+exemple dans cet exercice, vous devez instruire votre buggle pour qu'elle
+avance d'un pas. Observez la différence entre l'état initial et l'objectif
+en utilisant les panneaux à droite. Selon la leçon (et vos réglages dans le
+menu Language), vous devez écrire vos programme dans l'un des langages de
+programmation suivant : Java, JavaScript, Python ou Ruby (en fonction de
+l'exercice).</p>
   
   <h3>L'environnement de travail</h3>
 
diff --git a/src/lessons/welcome/environment/Environment.html b/src/lessons/welcome/environment/Environment.html
index ca95da7..eb8c4a9 100644
--- a/src/lessons/welcome/environment/Environment.html
+++ b/src/lessons/welcome/environment/Environment.html
@@ -6,17 +6,18 @@ exercises. It is constituted by a set of exercises grouped by lessons, allowing
 to practice at your own pace. By default, the environment is configured to be programmed 
 in the Java programming language, but you can change it from the Language menu if you want.
 
-<p>In this first lesson, the buggles will lead your first steps in programming.
+<p>In this first lesson, the buggles will lead your first steps in programming.</p>
 
   <h3>The <i>buggles</i>? What is this??</h3>
 
-  The buggles are little animals obeying any order you may give them. In each
+  <p>The buggles are little animals obeying any order you may give them. In each
   exercise, you have to provide them with the right instructions so that the
   world turns into the objective of the exercise. For example in this exercise, 
   you show instruct your buggle to move forward once. You can see that by checking 
   the difference between the <i>World</i> view and the <i>Objective</i> one. 
   Depending on the lessons (and your settings in the Language menu), your code must 
-  be written in either Java, JavaScript, Python or Ruby.
+  be written in either Java, JavaScript, Python or Ruby (depending on
+  the exercise).</p>
   
   <h3>Working environment</h3>
 
diff --git a/src/lessons/welcome/icon.png b/src/lessons/welcome/icon.png
new file mode 100644
index 0000000..fa7965e
Binary files /dev/null and b/src/lessons/welcome/icon.png differ
diff --git a/src/lessons/welcome/icon.xcf b/src/lessons/welcome/icon.xcf
new file mode 100644
index 0000000..3b03d7a
Binary files /dev/null and b/src/lessons/welcome/icon.xcf differ
diff --git a/src/lessons/welcome/loop/dowhileloop/LoopDoWhile-answer0.map b/src/lessons/welcome/loop/dowhileloop/LoopDoWhile-answer0.map
new file mode 100644
index 0000000..6c62855
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/LoopDoWhile-answer0.map
@@ -0,0 +1,57 @@
+BuggleWorld: Yellow Submarine
+Size: 13x7
+Buggle(0,0): north,black,lightGray,Beatles1
+Buggle(1,1): north,black,lightGray,Beatles2
+Buggle(2,2): north,black,lightGray,Beatles3
+Buggle(3,3): north,black,lightGray,Beatles4
+Buggle(4,4): north,black,lightGray,Beatles5
+Buggle(5,5): north,black,lightGray,Beatles6
+Buggle(6,5): north,black,lightGray,Beatles7
+Buggle(7,5): north,black,lightGray,Beatles8
+Buggle(8,4): north,black,lightGray,Beatles9
+Buggle(9,3): north,black,lightGray,Beatles10
+Buggle(10,2): north,black,lightGray,Beatles11
+Buggle(11,1): north,black,lightGray,Beatles12
+Buggle(12,0): north,black,lightGray,Beatles13
+Cell(0,1): yellow,nobaggle,notopwall,noleftwall,
+Cell(0,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(0,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(0,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(0,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(0,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(10,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,6): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,1): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,2): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,6): yellow,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.fr.html b/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.fr.html
index a5ffd3e..abab930 100644
--- a/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.fr.html
+++ b/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.fr.html
@@ -6,6 +6,16 @@ même si la condition est directement fausse. Certains langages ont des
 constructions spécifiques pour cela, mais pas le langage Python. Mais il n'y
 a pas de problème, je suis sûr que vous pouvez faire sans, n'est-ce pas ?</p>
 
+<p class="Python">Une mauvaise solution serait de dupliquer le contenu de la boucle avant la
+boucle à proprement parlé, mais c'est une <b>très mauvaise</b> habitude de
+dupliquer du code, et il faut toujours éviter. Une meilleure solution est
+d'avoir une variable dédiée qui indique si c'est la première fois que l'on
+rentre dans la boucle :</p>
+<pre class="Python">premiereFois = True
+while premiereFois or (les autres conditions):
+  premiereFois = False
+  (le corps de la boucle)</pre>
+
 <p class="Java">Dans une boucle <tt>while</tt>, la condition est évaluée avant toute chose,
 et si elle est fausse, le corps de la boucle n'est jamais exécuté. Il arrive
 parfois que l'on veuille que le corps de la boucle soit évalué au moins une
@@ -15,12 +25,17 @@ variante de la boucle <tt>while</tt>, dont la syntaxe Java est la suivante :
   <b>action()</b>;
 } while (<b>condition</b>);</pre></p>
 
-<h3>Objectif de cet exercice</h3><a name="Objectifs"> Certaines cases du monde sont jaunes, mais votre buggle
-ne supporte pas de s'y trouver comme c'est son cas actuellement. Écrivez le
-code lui permettant d'avancer jusqu'à se trouver sur une case blanche. Vous
-utiliserez pour cela la méthode isGroundWhite(), que seule la buggle de cet
-exercice connaît. Le truc est que même si le sol de la première case est
-blanc, il faut quand même faire avancer la buggle d'un pas.    
+<h3>Objectif de cet exercice</h3>
+<p>Certaines cases du monde sont jaunes, mais les buggles ne supportent pas de
+s'y trouver. Écrivez le code nécessaire pour avancer jusqu'à ce que le sol
+devienne blanc. Vous pourrez utiliser la méthode
+<code>isGroundWhite()</code> qui retourne vrai si le sol est blanc..</p>
+
+<p>Le truc est que la plupart des buggles de ce monde se trouvent actuellement
+sur ce sol jaune qui les énerve tant. Cela explique sans doute leur état de
+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: 
 <pre>avancer jusqu'à se trouver sur une case blanche</pre>
diff --git a/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html b/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html
index 920ddfd..a176f7d 100644
--- a/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html
+++ b/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.html
@@ -4,6 +4,15 @@
 to be executed in any case, even if the condition is false right away. Some languages have specific 
 constructs for that, but not the Python language. No problem, I'm sure you can do it without them, can't you?</p>
 
+<p class="Python">A bad solution would be to duplicate the loop content before the loop, but code duplication 
+is a <b>very</b> bad habit, and you should always avoid it. A better solution is to have a dedicated variable 
+indicating whether we are taking the loop for the first time, as follows:</p>
+<pre class="Python">firstTime = True
+while firstTime or (other conditions):
+  firstTime = False
+  (loop body)
+</pre>
+
 <p class="Java">In a <tt>while</tt> loop, the condition is evaluated before anything else,
 and if it's false, the loop body is never evaluated. Sometimes (although not 
 that often), you would prefer the
@@ -14,11 +23,15 @@ following syntax in Java:
   <b>action()</b>;
 } while (<b>condition</b>);</pre></p>
 
-<h3>Exercise goal</h3><a name="Objectives"> Some cells of the world are yellow, but your buggle
-cannot stand being in such cells as it is right now. Write the code needed
-to move forward until the ground gets white. You can use for that the
-isGroundWhite() method, that only the buggle of this exercise knows. The trick is that even if the ground 
-is white on the first cell, you still want to move forward to the next cell.    
+<h3>Exercise goal</h3>
+<p>Some cells of the world are yellow, but your buggle cannot stand being in 
+such cells. Write the necessary code to move forward until the ground 
+gets white. For that, use the provided method <code>isGroundWhite()</code>.</p>
+
+<p>The trick is that most buggles of this world are currently on this yellow ground 
+that they dislike so much. That is why they are in panic, and every buggle rushes 
+one cell forward, even the buggle that was not on a yellow cell at first. In other worlds,  
+even if the ground is white on the first cell, you still want to move forward to the next cell.</p>    
 
 <p>The general idea is to do something like: 
 <pre>move forward until located in a white cell</pre>
diff --git a/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.java b/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.java
index b4fe0b7..0909789 100644
--- a/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.java
+++ b/src/lessons/welcome/loop/dowhileloop/LoopDoWhile.java
@@ -14,12 +14,17 @@ public class LoopDoWhile extends ExerciseTemplated {
 		super(lesson);
 		tabName = "Program";
 				
-		BuggleWorld myWorld = new BuggleWorld("Yellow Submarine",7,7);
+		BuggleWorld myWorld = new BuggleWorld("Yellow Submarine",13,7);
 		for (int i=0;i<7;i++) {
 			new Buggle(myWorld, "Beatles"+(i+1), i, 6, Direction.NORTH, Color.black, Color.lightGray);
 		    for (int j=6; j>i; j--)
 		    	myWorld.setColor(i, j,Color.yellow);
 		}
+		for (int i=7;i<13;i++) {
+			new Buggle(myWorld, "Beatles"+(i+1), i, 6, Direction.NORTH, Color.black, Color.lightGray);
+		    for (int j=0; j<i-6; j++)
+		    	myWorld.setColor(i, 6-j,Color.yellow);
+		}
 
     	setup(myWorld);
 	}
diff --git a/src/lessons/welcome/loop/dowhileloop/Poucet-answer0.map b/src/lessons/welcome/loop/dowhileloop/Poucet-answer0.map
new file mode 100644
index 0000000..5d9b006
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/Poucet-answer0.map
@@ -0,0 +1,266 @@
+BuggleWorld: Deep Forest
+Size: 23x18
+Buggle(22,1): east,black,black,buggle2
+Cell(1,1): white,nobaggle,topwall,leftwall,
+Cell(1,2): white,baggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,baggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,baggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,notopwall,leftwall,
+Cell(1,10): white,nobaggle,notopwall,leftwall,
+Cell(1,11): white,nobaggle,notopwall,leftwall,
+Cell(1,12): white,nobaggle,notopwall,leftwall,
+Cell(1,13): white,baggle,notopwall,leftwall,
+Cell(1,14): white,nobaggle,notopwall,leftwall,
+Cell(1,15): white,baggle,notopwall,leftwall,
+Cell(1,16): white,nobaggle,notopwall,leftwall,
+Cell(1,17): white,nobaggle,topwall,noleftwall,
+Cell(2,1): 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,topwall,noleftwall,
+Cell(2,7): white,nobaggle,topwall,leftwall,
+Cell(2,8): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,notopwall,leftwall,
+Cell(2,10): white,nobaggle,notopwall,leftwall,
+Cell(2,11): white,baggle,topwall,noleftwall,
+Cell(2,12): white,nobaggle,topwall,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,topwall,noleftwall,
+Cell(2,17): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,baggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,6): white,nobaggle,topwall,noleftwall,
+Cell(3,7): white,nobaggle,topwall,noleftwall,
+Cell(3,11): white,baggle,topwall,noleftwall,
+Cell(3,12): white,nobaggle,topwall,noleftwall,
+Cell(3,16): white,baggle,topwall,noleftwall,
+Cell(3,17): white,nobaggle,topwall,noleftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,noleftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,baggle,topwall,noleftwall,
+Cell(4,12): white,nobaggle,topwall,noleftwall,
+Cell(4,16): white,nobaggle,topwall,noleftwall,
+Cell(4,17): white,nobaggle,topwall,noleftwall,
+Cell(5,1): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,6): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,baggle,topwall,noleftwall,
+Cell(5,12): white,nobaggle,topwall,noleftwall,
+Cell(5,16): white,nobaggle,topwall,noleftwall,
+Cell(5,17): white,nobaggle,topwall,noleftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,baggle,notopwall,leftwall,
+Cell(6,4): white,baggle,notopwall,leftwall,
+Cell(6,5): white,baggle,notopwall,leftwall,
+Cell(6,6): white,baggle,notopwall,noleftwall,
+Cell(6,7): white,baggle,notopwall,leftwall,
+Cell(6,8): white,baggle,notopwall,leftwall,
+Cell(6,9): white,nobaggle,notopwall,leftwall,
+Cell(6,10): white,nobaggle,notopwall,leftwall,
+Cell(6,11): white,baggle,notopwall,noleftwall,
+Cell(6,12): white,nobaggle,notopwall,leftwall,
+Cell(6,13): white,baggle,notopwall,leftwall,
+Cell(6,14): white,nobaggle,notopwall,leftwall,
+Cell(6,15): white,baggle,notopwall,leftwall,
+Cell(6,17): white,nobaggle,topwall,noleftwall,
+Cell(7,1): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,leftwall,
+Cell(7,3): white,nobaggle,notopwall,leftwall,
+Cell(7,4): white,nobaggle,notopwall,leftwall,
+Cell(7,5): white,nobaggle,notopwall,leftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,7): white,nobaggle,topwall,leftwall,
+Cell(7,8): white,nobaggle,notopwall,leftwall,
+Cell(7,9): white,nobaggle,notopwall,leftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,baggle,topwall,noleftwall,
+Cell(7,12): white,nobaggle,topwall,leftwall,
+Cell(7,13): white,nobaggle,notopwall,leftwall,
+Cell(7,14): white,nobaggle,notopwall,leftwall,
+Cell(7,15): white,nobaggle,notopwall,leftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,17): white,nobaggle,topwall,noleftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,6): white,nobaggle,topwall,noleftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,baggle,topwall,noleftwall,
+Cell(8,12): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,17): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,baggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,topwall,noleftwall,
+Cell(9,6): white,baggle,topwall,noleftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,baggle,topwall,noleftwall,
+Cell(9,12): white,nobaggle,topwall,noleftwall,
+Cell(9,16): white,baggle,topwall,noleftwall,
+Cell(9,17): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,6): white,nobaggle,topwall,noleftwall,
+Cell(10,7): white,nobaggle,topwall,noleftwall,
+Cell(10,11): white,baggle,topwall,noleftwall,
+Cell(10,12): white,nobaggle,topwall,noleftwall,
+Cell(10,16): white,nobaggle,topwall,noleftwall,
+Cell(10,17): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,baggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,baggle,notopwall,leftwall,
+Cell(11,4): white,nobaggle,notopwall,leftwall,
+Cell(11,5): white,nobaggle,notopwall,leftwall,
+Cell(11,6): white,baggle,notopwall,noleftwall,
+Cell(11,7): white,baggle,notopwall,leftwall,
+Cell(11,8): white,baggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,notopwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
+Cell(11,11): white,baggle,notopwall,noleftwall,
+Cell(11,12): white,nobaggle,notopwall,leftwall,
+Cell(11,13): white,baggle,notopwall,leftwall,
+Cell(11,14): white,nobaggle,notopwall,leftwall,
+Cell(11,15): white,baggle,notopwall,leftwall,
+Cell(11,16): white,baggle,notopwall,noleftwall,
+Cell(11,17): white,nobaggle,topwall,noleftwall,
+Cell(12,1): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,leftwall,
+Cell(12,3): white,nobaggle,notopwall,leftwall,
+Cell(12,4): white,nobaggle,notopwall,leftwall,
+Cell(12,5): white,nobaggle,notopwall,leftwall,
+Cell(12,6): white,nobaggle,topwall,noleftwall,
+Cell(12,7): white,nobaggle,topwall,leftwall,
+Cell(12,8): white,nobaggle,notopwall,leftwall,
+Cell(12,9): white,nobaggle,notopwall,leftwall,
+Cell(12,10): white,nobaggle,notopwall,leftwall,
+Cell(12,11): white,nobaggle,topwall,noleftwall,
+Cell(12,12): white,nobaggle,topwall,leftwall,
+Cell(12,13): white,nobaggle,notopwall,leftwall,
+Cell(12,14): white,nobaggle,notopwall,leftwall,
+Cell(12,15): white,nobaggle,notopwall,leftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,17): white,nobaggle,topwall,noleftwall,
+Cell(13,1): white,baggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,6): white,baggle,topwall,noleftwall,
+Cell(13,7): white,nobaggle,topwall,noleftwall,
+Cell(13,11): white,nobaggle,topwall,noleftwall,
+Cell(13,12): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,baggle,topwall,noleftwall,
+Cell(13,17): white,nobaggle,topwall,noleftwall,
+Cell(14,1): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,6): white,nobaggle,topwall,noleftwall,
+Cell(14,7): white,nobaggle,topwall,noleftwall,
+Cell(14,11): white,baggle,topwall,noleftwall,
+Cell(14,12): white,nobaggle,topwall,noleftwall,
+Cell(14,16): white,nobaggle,topwall,noleftwall,
+Cell(14,17): white,nobaggle,topwall,noleftwall,
+Cell(15,1): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,6): white,nobaggle,topwall,noleftwall,
+Cell(15,7): white,nobaggle,topwall,noleftwall,
+Cell(15,11): white,nobaggle,topwall,noleftwall,
+Cell(15,12): white,nobaggle,topwall,noleftwall,
+Cell(15,16): white,nobaggle,topwall,noleftwall,
+Cell(15,17): white,nobaggle,topwall,noleftwall,
+Cell(16,1): white,baggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,notopwall,leftwall,
+Cell(16,3): white,baggle,notopwall,leftwall,
+Cell(16,4): white,baggle,notopwall,leftwall,
+Cell(16,5): white,baggle,notopwall,leftwall,
+Cell(16,6): white,baggle,notopwall,noleftwall,
+Cell(16,7): white,baggle,notopwall,leftwall,
+Cell(16,8): white,baggle,notopwall,leftwall,
+Cell(16,9): white,nobaggle,notopwall,leftwall,
+Cell(16,10): white,nobaggle,notopwall,leftwall,
+Cell(16,12): white,nobaggle,notopwall,leftwall,
+Cell(16,13): white,baggle,notopwall,leftwall,
+Cell(16,14): white,nobaggle,notopwall,leftwall,
+Cell(16,15): white,baggle,notopwall,leftwall,
+Cell(16,16): white,baggle,notopwall,noleftwall,
+Cell(16,17): white,nobaggle,topwall,noleftwall,
+Cell(17,1): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,leftwall,
+Cell(17,3): white,nobaggle,notopwall,leftwall,
+Cell(17,4): white,nobaggle,notopwall,leftwall,
+Cell(17,5): white,nobaggle,notopwall,leftwall,
+Cell(17,6): white,nobaggle,topwall,noleftwall,
+Cell(17,7): white,nobaggle,topwall,leftwall,
+Cell(17,8): white,nobaggle,notopwall,leftwall,
+Cell(17,9): white,nobaggle,notopwall,leftwall,
+Cell(17,10): white,nobaggle,notopwall,leftwall,
+Cell(17,11): white,nobaggle,topwall,noleftwall,
+Cell(17,12): white,nobaggle,topwall,leftwall,
+Cell(17,13): white,nobaggle,notopwall,leftwall,
+Cell(17,14): white,nobaggle,notopwall,leftwall,
+Cell(17,15): white,nobaggle,notopwall,leftwall,
+Cell(17,16): white,nobaggle,topwall,noleftwall,
+Cell(17,17): white,nobaggle,topwall,noleftwall,
+Cell(18,1): white,nobaggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,topwall,noleftwall,
+Cell(18,6): white,nobaggle,topwall,noleftwall,
+Cell(18,7): white,nobaggle,topwall,noleftwall,
+Cell(18,11): white,nobaggle,topwall,noleftwall,
+Cell(18,12): white,nobaggle,topwall,noleftwall,
+Cell(18,16): white,nobaggle,topwall,noleftwall,
+Cell(18,17): white,nobaggle,topwall,noleftwall,
+Cell(19,1): white,baggle,topwall,noleftwall,
+Cell(19,2): white,nobaggle,topwall,noleftwall,
+Cell(19,6): white,baggle,topwall,noleftwall,
+Cell(19,7): white,nobaggle,topwall,noleftwall,
+Cell(19,11): white,baggle,topwall,noleftwall,
+Cell(19,12): white,nobaggle,topwall,noleftwall,
+Cell(19,16): white,baggle,topwall,noleftwall,
+Cell(19,17): white,nobaggle,topwall,noleftwall,
+Cell(20,1): white,nobaggle,topwall,noleftwall,
+Cell(20,2): white,nobaggle,topwall,noleftwall,
+Cell(20,6): white,baggle,topwall,noleftwall,
+Cell(20,7): white,nobaggle,topwall,noleftwall,
+Cell(20,11): white,nobaggle,topwall,noleftwall,
+Cell(20,12): white,nobaggle,topwall,noleftwall,
+Cell(20,16): white,baggle,topwall,noleftwall,
+Cell(20,17): white,nobaggle,topwall,noleftwall,
+Cell(21,1): orange,nobaggle,topwall,noleftwall,
+Cell(21,2): white,baggle,notopwall,leftwall,
+Cell(21,3): white,nobaggle,notopwall,leftwall,
+Cell(21,4): white,baggle,notopwall,leftwall,
+Cell(21,5): white,nobaggle,notopwall,leftwall,
+Cell(21,6): white,baggle,notopwall,noleftwall,
+Cell(21,7): white,nobaggle,notopwall,leftwall,
+Cell(21,8): white,nobaggle,notopwall,leftwall,
+Cell(21,9): white,nobaggle,notopwall,leftwall,
+Cell(21,10): white,nobaggle,notopwall,leftwall,
+Cell(21,11): white,baggle,notopwall,noleftwall,
+Cell(21,12): white,nobaggle,notopwall,leftwall,
+Cell(21,13): white,baggle,notopwall,leftwall,
+Cell(21,14): white,nobaggle,notopwall,leftwall,
+Cell(21,15): white,baggle,notopwall,leftwall,
+Cell(21,16): white,baggle,notopwall,noleftwall,
+Cell(21,17): white,nobaggle,topwall,noleftwall,
+Cell(22,1): orange,nobaggle,topwall,noleftwall,
+Cell(22,2): white,nobaggle,topwall,leftwall,
+Cell(22,3): white,nobaggle,notopwall,leftwall,
+Cell(22,4): white,nobaggle,notopwall,leftwall,
+Cell(22,5): white,nobaggle,notopwall,leftwall,
+Cell(22,6): white,nobaggle,notopwall,leftwall,
+Cell(22,7): white,nobaggle,notopwall,leftwall,
+Cell(22,8): white,nobaggle,notopwall,leftwall,
+Cell(22,9): white,nobaggle,notopwall,leftwall,
+Cell(22,10): white,nobaggle,notopwall,leftwall,
+Cell(22,11): white,nobaggle,notopwall,leftwall,
+Cell(22,12): white,nobaggle,notopwall,leftwall,
+Cell(22,13): white,nobaggle,notopwall,leftwall,
+Cell(22,14): white,nobaggle,notopwall,leftwall,
+Cell(22,15): white,nobaggle,notopwall,leftwall,
+Cell(22,16): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/loop/dowhileloop/Poucet-answer1.map b/src/lessons/welcome/loop/dowhileloop/Poucet-answer1.map
new file mode 100644
index 0000000..f117747
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/Poucet-answer1.map
@@ -0,0 +1,265 @@
+BuggleWorld: Deeper Forest
+Size: 23x18
+Buggle(0,1): west,black,black,buggle2
+Cell(0,1): orange,nobaggle,topwall,noleftwall,
+Cell(0,2): white,nobaggle,topwall,noleftwall,
+Cell(1,1): orange,nobaggle,topwall,noleftwall,
+Cell(1,2): white,baggle,notopwall,leftwall,
+Cell(1,3): white,baggle,notopwall,leftwall,
+Cell(1,4): white,baggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,baggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,notopwall,leftwall,
+Cell(1,10): white,nobaggle,notopwall,leftwall,
+Cell(1,11): white,nobaggle,notopwall,leftwall,
+Cell(1,12): white,nobaggle,notopwall,leftwall,
+Cell(1,13): white,baggle,notopwall,leftwall,
+Cell(1,14): white,nobaggle,notopwall,leftwall,
+Cell(1,15): white,baggle,notopwall,leftwall,
+Cell(1,16): white,nobaggle,notopwall,leftwall,
+Cell(1,17): white,nobaggle,topwall,noleftwall,
+Cell(2,1): 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,topwall,noleftwall,
+Cell(2,7): white,nobaggle,topwall,leftwall,
+Cell(2,8): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,notopwall,leftwall,
+Cell(2,10): white,nobaggle,notopwall,leftwall,
+Cell(2,11): white,baggle,topwall,noleftwall,
+Cell(2,12): white,nobaggle,topwall,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,topwall,noleftwall,
+Cell(2,17): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,baggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,6): white,nobaggle,topwall,noleftwall,
+Cell(3,7): white,nobaggle,topwall,noleftwall,
+Cell(3,11): white,baggle,topwall,noleftwall,
+Cell(3,12): white,nobaggle,topwall,noleftwall,
+Cell(3,16): white,baggle,topwall,noleftwall,
+Cell(3,17): white,nobaggle,topwall,noleftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,noleftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,baggle,topwall,noleftwall,
+Cell(4,12): white,nobaggle,topwall,noleftwall,
+Cell(4,16): white,nobaggle,topwall,noleftwall,
+Cell(4,17): white,nobaggle,topwall,noleftwall,
+Cell(5,1): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,6): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,baggle,topwall,noleftwall,
+Cell(5,12): white,nobaggle,topwall,noleftwall,
+Cell(5,16): white,nobaggle,topwall,noleftwall,
+Cell(5,17): white,nobaggle,topwall,noleftwall,
+Cell(6,1): white,baggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,baggle,notopwall,leftwall,
+Cell(6,4): white,baggle,notopwall,leftwall,
+Cell(6,5): white,nobaggle,notopwall,leftwall,
+Cell(6,7): white,baggle,notopwall,leftwall,
+Cell(6,8): white,baggle,notopwall,leftwall,
+Cell(6,9): white,baggle,notopwall,leftwall,
+Cell(6,10): white,nobaggle,notopwall,leftwall,
+Cell(6,11): white,baggle,notopwall,noleftwall,
+Cell(6,12): white,nobaggle,notopwall,leftwall,
+Cell(6,13): white,baggle,notopwall,leftwall,
+Cell(6,14): white,nobaggle,notopwall,leftwall,
+Cell(6,15): white,baggle,notopwall,leftwall,
+Cell(6,17): white,nobaggle,topwall,noleftwall,
+Cell(7,1): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,leftwall,
+Cell(7,3): white,nobaggle,notopwall,leftwall,
+Cell(7,4): white,nobaggle,notopwall,leftwall,
+Cell(7,5): white,nobaggle,notopwall,leftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,7): white,nobaggle,topwall,leftwall,
+Cell(7,8): white,nobaggle,notopwall,leftwall,
+Cell(7,9): white,nobaggle,notopwall,leftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,baggle,topwall,noleftwall,
+Cell(7,12): white,nobaggle,topwall,leftwall,
+Cell(7,13): white,nobaggle,notopwall,leftwall,
+Cell(7,14): white,nobaggle,notopwall,leftwall,
+Cell(7,15): white,nobaggle,notopwall,leftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,17): white,nobaggle,topwall,noleftwall,
+Cell(8,1): white,baggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,6): white,nobaggle,topwall,noleftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,baggle,topwall,noleftwall,
+Cell(8,12): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,17): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,topwall,noleftwall,
+Cell(9,6): white,baggle,topwall,noleftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,baggle,topwall,noleftwall,
+Cell(9,12): white,nobaggle,topwall,noleftwall,
+Cell(9,16): white,baggle,topwall,noleftwall,
+Cell(9,17): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,baggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,6): white,nobaggle,topwall,noleftwall,
+Cell(10,7): white,nobaggle,topwall,noleftwall,
+Cell(10,11): white,baggle,topwall,noleftwall,
+Cell(10,12): white,nobaggle,topwall,noleftwall,
+Cell(10,16): white,nobaggle,topwall,noleftwall,
+Cell(10,17): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,baggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,baggle,notopwall,leftwall,
+Cell(11,4): white,baggle,notopwall,leftwall,
+Cell(11,5): white,nobaggle,notopwall,leftwall,
+Cell(11,6): white,baggle,notopwall,noleftwall,
+Cell(11,7): white,baggle,notopwall,leftwall,
+Cell(11,8): white,baggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,notopwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
+Cell(11,12): white,nobaggle,notopwall,leftwall,
+Cell(11,13): white,baggle,notopwall,leftwall,
+Cell(11,14): white,nobaggle,notopwall,leftwall,
+Cell(11,15): white,baggle,notopwall,leftwall,
+Cell(11,16): white,baggle,notopwall,noleftwall,
+Cell(11,17): white,nobaggle,topwall,noleftwall,
+Cell(12,1): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,leftwall,
+Cell(12,3): white,nobaggle,notopwall,leftwall,
+Cell(12,4): white,nobaggle,notopwall,leftwall,
+Cell(12,5): white,nobaggle,notopwall,leftwall,
+Cell(12,6): white,baggle,topwall,noleftwall,
+Cell(12,7): white,nobaggle,topwall,leftwall,
+Cell(12,8): white,nobaggle,notopwall,leftwall,
+Cell(12,9): white,nobaggle,notopwall,leftwall,
+Cell(12,10): white,nobaggle,notopwall,leftwall,
+Cell(12,11): white,nobaggle,topwall,noleftwall,
+Cell(12,12): white,nobaggle,topwall,leftwall,
+Cell(12,13): white,nobaggle,notopwall,leftwall,
+Cell(12,14): white,nobaggle,notopwall,leftwall,
+Cell(12,15): white,nobaggle,notopwall,leftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,17): white,nobaggle,topwall,noleftwall,
+Cell(13,1): white,baggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,6): white,baggle,topwall,noleftwall,
+Cell(13,7): white,nobaggle,topwall,noleftwall,
+Cell(13,11): white,baggle,topwall,noleftwall,
+Cell(13,12): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,baggle,topwall,noleftwall,
+Cell(13,17): white,nobaggle,topwall,noleftwall,
+Cell(14,1): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,6): white,nobaggle,topwall,noleftwall,
+Cell(14,7): white,nobaggle,topwall,noleftwall,
+Cell(14,11): white,nobaggle,topwall,noleftwall,
+Cell(14,12): white,nobaggle,topwall,noleftwall,
+Cell(14,16): white,nobaggle,topwall,noleftwall,
+Cell(14,17): white,nobaggle,topwall,noleftwall,
+Cell(15,1): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,6): white,baggle,topwall,noleftwall,
+Cell(15,7): white,nobaggle,topwall,noleftwall,
+Cell(15,11): white,baggle,topwall,noleftwall,
+Cell(15,12): white,nobaggle,topwall,noleftwall,
+Cell(15,16): white,nobaggle,topwall,noleftwall,
+Cell(15,17): white,nobaggle,topwall,noleftwall,
+Cell(16,1): white,baggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,notopwall,leftwall,
+Cell(16,3): white,baggle,notopwall,leftwall,
+Cell(16,4): white,baggle,notopwall,leftwall,
+Cell(16,5): white,nobaggle,notopwall,leftwall,
+Cell(16,7): white,baggle,notopwall,leftwall,
+Cell(16,8): white,baggle,notopwall,leftwall,
+Cell(16,9): white,nobaggle,notopwall,leftwall,
+Cell(16,10): white,nobaggle,notopwall,leftwall,
+Cell(16,12): white,nobaggle,notopwall,leftwall,
+Cell(16,13): white,baggle,notopwall,leftwall,
+Cell(16,14): white,nobaggle,notopwall,leftwall,
+Cell(16,15): white,baggle,notopwall,leftwall,
+Cell(16,16): white,baggle,notopwall,noleftwall,
+Cell(16,17): white,nobaggle,topwall,noleftwall,
+Cell(17,1): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,leftwall,
+Cell(17,3): white,nobaggle,notopwall,leftwall,
+Cell(17,4): white,nobaggle,notopwall,leftwall,
+Cell(17,5): white,nobaggle,notopwall,leftwall,
+Cell(17,6): white,baggle,topwall,noleftwall,
+Cell(17,7): white,nobaggle,topwall,leftwall,
+Cell(17,8): white,nobaggle,notopwall,leftwall,
+Cell(17,9): white,nobaggle,notopwall,leftwall,
+Cell(17,10): white,nobaggle,notopwall,leftwall,
+Cell(17,11): white,nobaggle,topwall,noleftwall,
+Cell(17,12): white,nobaggle,topwall,leftwall,
+Cell(17,13): white,nobaggle,notopwall,leftwall,
+Cell(17,14): white,nobaggle,notopwall,leftwall,
+Cell(17,15): white,nobaggle,notopwall,leftwall,
+Cell(17,16): white,nobaggle,topwall,noleftwall,
+Cell(17,17): white,nobaggle,topwall,noleftwall,
+Cell(18,1): white,baggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,topwall,noleftwall,
+Cell(18,6): white,baggle,topwall,noleftwall,
+Cell(18,7): white,nobaggle,topwall,noleftwall,
+Cell(18,11): white,nobaggle,topwall,noleftwall,
+Cell(18,12): white,nobaggle,topwall,noleftwall,
+Cell(18,16): white,nobaggle,topwall,noleftwall,
+Cell(18,17): white,nobaggle,topwall,noleftwall,
+Cell(19,1): white,nobaggle,topwall,noleftwall,
+Cell(19,2): white,nobaggle,topwall,noleftwall,
+Cell(19,6): white,baggle,topwall,noleftwall,
+Cell(19,7): white,nobaggle,topwall,noleftwall,
+Cell(19,11): white,baggle,topwall,noleftwall,
+Cell(19,12): white,nobaggle,topwall,noleftwall,
+Cell(19,16): white,baggle,topwall,noleftwall,
+Cell(19,17): white,nobaggle,topwall,noleftwall,
+Cell(20,1): white,baggle,topwall,noleftwall,
+Cell(20,2): white,nobaggle,topwall,noleftwall,
+Cell(20,6): white,baggle,topwall,noleftwall,
+Cell(20,7): white,nobaggle,topwall,noleftwall,
+Cell(20,11): white,nobaggle,topwall,noleftwall,
+Cell(20,12): white,nobaggle,topwall,noleftwall,
+Cell(20,16): white,baggle,topwall,noleftwall,
+Cell(20,17): white,nobaggle,topwall,noleftwall,
+Cell(21,1): white,baggle,topwall,noleftwall,
+Cell(21,2): white,baggle,notopwall,leftwall,
+Cell(21,3): white,nobaggle,notopwall,leftwall,
+Cell(21,4): white,baggle,notopwall,leftwall,
+Cell(21,5): white,nobaggle,notopwall,leftwall,
+Cell(21,6): white,baggle,notopwall,noleftwall,
+Cell(21,7): white,nobaggle,notopwall,leftwall,
+Cell(21,8): white,nobaggle,notopwall,leftwall,
+Cell(21,9): white,nobaggle,notopwall,leftwall,
+Cell(21,10): white,nobaggle,notopwall,leftwall,
+Cell(21,11): white,baggle,notopwall,noleftwall,
+Cell(21,12): white,nobaggle,notopwall,leftwall,
+Cell(21,13): white,baggle,notopwall,leftwall,
+Cell(21,14): white,nobaggle,notopwall,leftwall,
+Cell(21,15): white,baggle,notopwall,leftwall,
+Cell(21,16): white,baggle,notopwall,noleftwall,
+Cell(21,17): white,nobaggle,topwall,noleftwall,
+Cell(22,1): white,nobaggle,notopwall,leftwall,
+Cell(22,2): white,nobaggle,notopwall,leftwall,
+Cell(22,3): white,nobaggle,notopwall,leftwall,
+Cell(22,4): white,nobaggle,notopwall,leftwall,
+Cell(22,5): white,nobaggle,notopwall,leftwall,
+Cell(22,6): white,nobaggle,notopwall,leftwall,
+Cell(22,7): white,nobaggle,notopwall,leftwall,
+Cell(22,8): white,nobaggle,notopwall,leftwall,
+Cell(22,9): white,nobaggle,notopwall,leftwall,
+Cell(22,10): white,nobaggle,notopwall,leftwall,
+Cell(22,11): white,nobaggle,notopwall,leftwall,
+Cell(22,12): white,nobaggle,notopwall,leftwall,
+Cell(22,13): white,nobaggle,notopwall,leftwall,
+Cell(22,14): white,nobaggle,notopwall,leftwall,
+Cell(22,15): white,nobaggle,notopwall,leftwall,
+Cell(22,16): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/loop/dowhileloop/Poucet.fr.html b/src/lessons/welcome/loop/dowhileloop/Poucet.fr.html
new file mode 100644
index 0000000..e6e7471
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/Poucet.fr.html
@@ -0,0 +1,54 @@
+<h2>La buggle Petite Poucette</h2>
+
+<p>Votre buggle est perdue dans un étrange labyrinthe, et elle a besoin de vous
+pour trouver la sortie (représentée par les cases orange). Vous ne pouvez
+pas lui donner son chemin tout simplement avec quelque chose comme
+<code>turnRight();forward();forward();</code> parce qu'il faut secourir deux
+buggles à la fois, perdues dans des labyrinthes similaires mais
+différents. Vous pouvez passer à l'autre monde en cliquant sur le menu
+défilant au dessus de l'endroit où est dessiné le monde. C'est là où est
+écrit "Deep Forest" pour l'instant (forêt profonde), et si vous passez à
+"Deeper Forest" (forêt encore plus profonde), vous verrez l'autre monde. </p>
+
+<p>La bonne nouvelle est que le chemin vers la sortie est en quelque sorte
+écrit au sol. Ces mondes sont composés de plusieurs corridors, avec des
+baggles par terre. À chaque embranchement, il faut prendre à gauche si le
+corridor qu'on vient de parcourir contient 3 baggles ou plus, ou à droite
+s'il contient 2 baggles ou moins.</p>     
+
+<p>La forme générale de votre code doit donc être quelque chose comme «tant que
+je n'ai pas trouvé la sortie, prendre le prochain couloir pour décider s'il
+faut tourner à gauche ou à droite au prochain embranchement». Vous pouvez
+déterminer si vous avez rejoint la sortie (indiquée en orange) avec la
+méthode <code>exitReached()</code> fournie.</p>
+
+<p>Pour prendre un couloir, il suffit de courir d'une intersection à l'autre
+tout en comptant les baggles en chemin. La méthode <code>crossing()</code>
+indique si vous vous trouvez actuellement à un embranchement. Ce qui
+complique un peu, c'est qu'au début du couloir, vous vous trouvez bien
+entendu à une intersection, mais vous souhaitez avancer quand même.</p> 
+
+<p class="Java">Pour cela, le plus simple est d'utiliser une boucle <code>do / while</code>
+au lieu d'une boucle <code>while</code> pour se déplacer d'une intersection
+à l'autre.</p>
+
+<p class="Python">Pour cela, utilisez une variable supplémentaire indiquant si vous êtes déjà
+entré dans le couloir, comme dans l'exemple suivant. Ainsi, vous exécuterez
+le corps de la boucle au moins une fois (quand <code>premiereFois</code> est
+vrai) tandis qu'aux tours de boucles suivants, c'est la valeur de retour de
+<code>crossing()</code> qui détermine s'il faut s'arrêter ou non.</p>
+<pre class="Python">premiereFois = True
+while premiereFois or not crossing():
+  premiereFois = False
+  <your body>  
+</pre> 
+
+<p><div class="tip" id="tip-1" alt="Je n'arrive pas à imaginer comment compter les baggles que je vois">
+Il vous faut une variable initialisée à zéro et incrémentée à chaque fois
+que vous voyez un baggle. Une variable utilisée ainsi est souvent appelée un
+<i>accumulateur</i>.<br/><br/>
+N'oubliez pas de remettre l'accumulateur à 0 au début de chaque couloir! 
+</div></p>
+
+<p>Oh, et quand vous parviendrez à trouver la sortie, n'oubliez pas de faire un
+pas de plus pour vous échapper effectivement.</p> 
\ No newline at end of file
diff --git a/src/lessons/welcome/loop/dowhileloop/Poucet.html b/src/lessons/welcome/loop/dowhileloop/Poucet.html
new file mode 100644
index 0000000..2c1e051
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/Poucet.html
@@ -0,0 +1,40 @@
+<h2>Tracks of buggles</h2>
+
+<p>Your buggle got lost in a strange maze, and you must help it finding the exit that is represented in orange.
+You cannot simply explain the path to the exit in something like <code>turnRight();forward;forward();forward()</code> 
+because you have to save two buggles at the same time, that are lost in similar but not identical worlds. 
+You can switch to the other world by using the combobox above the world representation (where it's written 
+'Deep Forest' right now), and selecting the other entry (that should read 'Deeper Forest').</p>
+
+<p>The good news is that the path to the exit is written on the ground. As you can see, the world is made 
+of several corridors, with baggles on the ground. After each corridor, you should turn left if the corridor contains
+three baggels or more, and you have to turn right if there is only 2 baggles or less.</p>     
+
+<p>So, the general form of your code must be something like "while I did not find the exit, take the next corridor 
+to decide whether I should turn left or right at the next intersection". You can determine whether you are on the 
+exit cell (that is orange) with the provided <code>exitReached()</code> method.</p>
+
+<p>To take one corridor, you simply have to run from one intersection to another while counting the baggles you see 
+on your path. The method <code>crossing()</code> tells you whether your buggle currently stands on an intersection. 
+The extra complexity is that at the beginning of a corridor, you obviously stand on an intersection, but you still 
+want to move on.</p> 
+
+<p class="Java">For that, the easiest is to use a <code>do / while</code> loop instead of a regular
+<code>while</code> loop to move until the next intersection.</p>
+
+<p class="Python">For that, use an extra variable indicating whether you already entered the corridor, 
+as follows. This will ensure that you execute the loop body at least once (when <code>firstTime</code> is true) 
+before we actually use the value returned by <code>crossing()</code> to determine to continue or not.</p>
+<pre class="Python">firstTime = True
+while firstTime or not crossing():
+  firstTime = False
+  <your body>  
+</pre> 
+
+<p><div class="tip" id="tip-1" alt="I cannot imagine how to count the baggles I see.">
+You need a variable that is initialized to 0, and incremented each time you see a 
+baggle on the ground. A variable used this way is often called <i>accumulator</i>.<br/><br/>
+Don't forget to reset your accumulator to 0 at the beginning of each corridor! 
+</div></p>
+
+<p>Oh, and when you reach the exit, don't forget to take an extra step to actually exit the maze!</p> 
\ No newline at end of file
diff --git a/src/lessons/welcome/loop/dowhileloop/Poucet.java b/src/lessons/welcome/loop/dowhileloop/Poucet.java
new file mode 100644
index 0000000..37775e6
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/Poucet.java
@@ -0,0 +1,27 @@
+package lessons.welcome.loop.dowhileloop;
+
+import java.io.IOException;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
+import jlm.universe.World;
+import jlm.universe.bugglequest.BuggleWorld;
+
+public class Poucet extends ExerciseTemplated {
+
+	public Poucet(Lesson lesson) throws IOException, BrokenWorldFileException {
+		super(lesson);
+		tabName = "Poucet";
+		
+		/* Create initial situation */
+		World[] myWorlds = new World[] {
+				BuggleWorld.newFromFile("lessons/welcome/loop/dowhileloop/Poucet"),
+				BuggleWorld.newFromFile("lessons/welcome/loop/dowhileloop/Poucet2"),
+		};
+		for (World w: myWorlds)
+			w.setDelay(50); // moving a bit faster than usual
+		
+		setup(myWorlds);
+	}
+}
\ No newline at end of file
diff --git a/src/lessons/welcome/loop/dowhileloop/Poucet.map b/src/lessons/welcome/loop/dowhileloop/Poucet.map
new file mode 100644
index 0000000..95c0e63
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/Poucet.map
@@ -0,0 +1,266 @@
+BuggleWorld: Deep Forest
+Size: 23x18
+Buggle(11,16): north,black,black,buggle2
+Cell(1,1): white,nobaggle,topwall,leftwall,
+Cell(1,2): white,baggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,baggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,baggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,notopwall,leftwall,
+Cell(1,10): white,nobaggle,notopwall,leftwall,
+Cell(1,11): white,nobaggle,notopwall,leftwall,
+Cell(1,12): white,nobaggle,notopwall,leftwall,
+Cell(1,13): white,baggle,notopwall,leftwall,
+Cell(1,14): white,nobaggle,notopwall,leftwall,
+Cell(1,15): white,baggle,notopwall,leftwall,
+Cell(1,16): white,nobaggle,notopwall,leftwall,
+Cell(1,17): white,nobaggle,topwall,noleftwall,
+Cell(2,1): 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,topwall,noleftwall,
+Cell(2,7): white,nobaggle,topwall,leftwall,
+Cell(2,8): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,notopwall,leftwall,
+Cell(2,10): white,nobaggle,notopwall,leftwall,
+Cell(2,11): white,baggle,topwall,noleftwall,
+Cell(2,12): white,nobaggle,topwall,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,topwall,noleftwall,
+Cell(2,17): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,baggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,6): white,nobaggle,topwall,noleftwall,
+Cell(3,7): white,nobaggle,topwall,noleftwall,
+Cell(3,11): white,baggle,topwall,noleftwall,
+Cell(3,12): white,nobaggle,topwall,noleftwall,
+Cell(3,16): white,baggle,topwall,noleftwall,
+Cell(3,17): white,nobaggle,topwall,noleftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,noleftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,baggle,topwall,noleftwall,
+Cell(4,12): white,nobaggle,topwall,noleftwall,
+Cell(4,16): white,nobaggle,topwall,noleftwall,
+Cell(4,17): white,nobaggle,topwall,noleftwall,
+Cell(5,1): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,6): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,baggle,topwall,noleftwall,
+Cell(5,12): white,nobaggle,topwall,noleftwall,
+Cell(5,16): white,nobaggle,topwall,noleftwall,
+Cell(5,17): white,nobaggle,topwall,noleftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,baggle,notopwall,leftwall,
+Cell(6,4): white,baggle,notopwall,leftwall,
+Cell(6,5): white,baggle,notopwall,leftwall,
+Cell(6,6): white,baggle,notopwall,noleftwall,
+Cell(6,7): white,baggle,notopwall,leftwall,
+Cell(6,8): white,baggle,notopwall,leftwall,
+Cell(6,9): white,nobaggle,notopwall,leftwall,
+Cell(6,10): white,nobaggle,notopwall,leftwall,
+Cell(6,11): white,baggle,notopwall,noleftwall,
+Cell(6,12): white,nobaggle,notopwall,leftwall,
+Cell(6,13): white,baggle,notopwall,leftwall,
+Cell(6,14): white,nobaggle,notopwall,leftwall,
+Cell(6,15): white,baggle,notopwall,leftwall,
+Cell(6,17): white,nobaggle,topwall,noleftwall,
+Cell(7,1): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,leftwall,
+Cell(7,3): white,nobaggle,notopwall,leftwall,
+Cell(7,4): white,nobaggle,notopwall,leftwall,
+Cell(7,5): white,nobaggle,notopwall,leftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,7): white,nobaggle,topwall,leftwall,
+Cell(7,8): white,nobaggle,notopwall,leftwall,
+Cell(7,9): white,nobaggle,notopwall,leftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,baggle,topwall,noleftwall,
+Cell(7,12): white,nobaggle,topwall,leftwall,
+Cell(7,13): white,nobaggle,notopwall,leftwall,
+Cell(7,14): white,nobaggle,notopwall,leftwall,
+Cell(7,15): white,nobaggle,notopwall,leftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,17): white,nobaggle,topwall,noleftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,6): white,nobaggle,topwall,noleftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,baggle,topwall,noleftwall,
+Cell(8,12): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,17): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,baggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,topwall,noleftwall,
+Cell(9,6): white,baggle,topwall,noleftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,baggle,topwall,noleftwall,
+Cell(9,12): white,nobaggle,topwall,noleftwall,
+Cell(9,16): white,baggle,topwall,noleftwall,
+Cell(9,17): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,6): white,nobaggle,topwall,noleftwall,
+Cell(10,7): white,nobaggle,topwall,noleftwall,
+Cell(10,11): white,baggle,topwall,noleftwall,
+Cell(10,12): white,nobaggle,topwall,noleftwall,
+Cell(10,16): white,nobaggle,topwall,noleftwall,
+Cell(10,17): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,baggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,baggle,notopwall,leftwall,
+Cell(11,4): white,nobaggle,notopwall,leftwall,
+Cell(11,5): white,nobaggle,notopwall,leftwall,
+Cell(11,6): white,baggle,notopwall,noleftwall,
+Cell(11,7): white,baggle,notopwall,leftwall,
+Cell(11,8): white,baggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,notopwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
+Cell(11,11): white,baggle,notopwall,noleftwall,
+Cell(11,12): white,nobaggle,notopwall,leftwall,
+Cell(11,13): white,baggle,notopwall,leftwall,
+Cell(11,14): white,nobaggle,notopwall,leftwall,
+Cell(11,15): white,baggle,notopwall,leftwall,
+Cell(11,16): white,baggle,notopwall,noleftwall,
+Cell(11,17): white,nobaggle,topwall,noleftwall,
+Cell(12,1): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,leftwall,
+Cell(12,3): white,nobaggle,notopwall,leftwall,
+Cell(12,4): white,nobaggle,notopwall,leftwall,
+Cell(12,5): white,nobaggle,notopwall,leftwall,
+Cell(12,6): white,nobaggle,topwall,noleftwall,
+Cell(12,7): white,nobaggle,topwall,leftwall,
+Cell(12,8): white,nobaggle,notopwall,leftwall,
+Cell(12,9): white,nobaggle,notopwall,leftwall,
+Cell(12,10): white,nobaggle,notopwall,leftwall,
+Cell(12,11): white,nobaggle,topwall,noleftwall,
+Cell(12,12): white,nobaggle,topwall,leftwall,
+Cell(12,13): white,nobaggle,notopwall,leftwall,
+Cell(12,14): white,nobaggle,notopwall,leftwall,
+Cell(12,15): white,nobaggle,notopwall,leftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,17): white,nobaggle,topwall,noleftwall,
+Cell(13,1): white,baggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,6): white,baggle,topwall,noleftwall,
+Cell(13,7): white,nobaggle,topwall,noleftwall,
+Cell(13,11): white,nobaggle,topwall,noleftwall,
+Cell(13,12): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,baggle,topwall,noleftwall,
+Cell(13,17): white,nobaggle,topwall,noleftwall,
+Cell(14,1): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,6): white,nobaggle,topwall,noleftwall,
+Cell(14,7): white,nobaggle,topwall,noleftwall,
+Cell(14,11): white,baggle,topwall,noleftwall,
+Cell(14,12): white,nobaggle,topwall,noleftwall,
+Cell(14,16): white,nobaggle,topwall,noleftwall,
+Cell(14,17): white,nobaggle,topwall,noleftwall,
+Cell(15,1): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,6): white,nobaggle,topwall,noleftwall,
+Cell(15,7): white,nobaggle,topwall,noleftwall,
+Cell(15,11): white,nobaggle,topwall,noleftwall,
+Cell(15,12): white,nobaggle,topwall,noleftwall,
+Cell(15,16): white,nobaggle,topwall,noleftwall,
+Cell(15,17): white,nobaggle,topwall,noleftwall,
+Cell(16,1): white,baggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,notopwall,leftwall,
+Cell(16,3): white,baggle,notopwall,leftwall,
+Cell(16,4): white,baggle,notopwall,leftwall,
+Cell(16,5): white,baggle,notopwall,leftwall,
+Cell(16,6): white,baggle,notopwall,noleftwall,
+Cell(16,7): white,baggle,notopwall,leftwall,
+Cell(16,8): white,baggle,notopwall,leftwall,
+Cell(16,9): white,nobaggle,notopwall,leftwall,
+Cell(16,10): white,nobaggle,notopwall,leftwall,
+Cell(16,12): white,nobaggle,notopwall,leftwall,
+Cell(16,13): white,baggle,notopwall,leftwall,
+Cell(16,14): white,nobaggle,notopwall,leftwall,
+Cell(16,15): white,baggle,notopwall,leftwall,
+Cell(16,16): white,baggle,notopwall,noleftwall,
+Cell(16,17): white,nobaggle,topwall,noleftwall,
+Cell(17,1): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,leftwall,
+Cell(17,3): white,nobaggle,notopwall,leftwall,
+Cell(17,4): white,nobaggle,notopwall,leftwall,
+Cell(17,5): white,nobaggle,notopwall,leftwall,
+Cell(17,6): white,nobaggle,topwall,noleftwall,
+Cell(17,7): white,nobaggle,topwall,leftwall,
+Cell(17,8): white,nobaggle,notopwall,leftwall,
+Cell(17,9): white,nobaggle,notopwall,leftwall,
+Cell(17,10): white,nobaggle,notopwall,leftwall,
+Cell(17,11): white,nobaggle,topwall,noleftwall,
+Cell(17,12): white,nobaggle,topwall,leftwall,
+Cell(17,13): white,nobaggle,notopwall,leftwall,
+Cell(17,14): white,nobaggle,notopwall,leftwall,
+Cell(17,15): white,nobaggle,notopwall,leftwall,
+Cell(17,16): white,nobaggle,topwall,noleftwall,
+Cell(17,17): white,nobaggle,topwall,noleftwall,
+Cell(18,1): white,nobaggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,topwall,noleftwall,
+Cell(18,6): white,nobaggle,topwall,noleftwall,
+Cell(18,7): white,nobaggle,topwall,noleftwall,
+Cell(18,11): white,nobaggle,topwall,noleftwall,
+Cell(18,12): white,nobaggle,topwall,noleftwall,
+Cell(18,16): white,nobaggle,topwall,noleftwall,
+Cell(18,17): white,nobaggle,topwall,noleftwall,
+Cell(19,1): white,baggle,topwall,noleftwall,
+Cell(19,2): white,nobaggle,topwall,noleftwall,
+Cell(19,6): white,baggle,topwall,noleftwall,
+Cell(19,7): white,nobaggle,topwall,noleftwall,
+Cell(19,11): white,baggle,topwall,noleftwall,
+Cell(19,12): white,nobaggle,topwall,noleftwall,
+Cell(19,16): white,baggle,topwall,noleftwall,
+Cell(19,17): white,nobaggle,topwall,noleftwall,
+Cell(20,1): white,nobaggle,topwall,noleftwall,
+Cell(20,2): white,nobaggle,topwall,noleftwall,
+Cell(20,6): white,baggle,topwall,noleftwall,
+Cell(20,7): white,nobaggle,topwall,noleftwall,
+Cell(20,11): white,nobaggle,topwall,noleftwall,
+Cell(20,12): white,nobaggle,topwall,noleftwall,
+Cell(20,16): white,baggle,topwall,noleftwall,
+Cell(20,17): white,nobaggle,topwall,noleftwall,
+Cell(21,1): orange,nobaggle,topwall,noleftwall,
+Cell(21,2): white,baggle,notopwall,leftwall,
+Cell(21,3): white,nobaggle,notopwall,leftwall,
+Cell(21,4): white,baggle,notopwall,leftwall,
+Cell(21,5): white,nobaggle,notopwall,leftwall,
+Cell(21,6): white,baggle,notopwall,noleftwall,
+Cell(21,7): white,nobaggle,notopwall,leftwall,
+Cell(21,8): white,nobaggle,notopwall,leftwall,
+Cell(21,9): white,nobaggle,notopwall,leftwall,
+Cell(21,10): white,nobaggle,notopwall,leftwall,
+Cell(21,11): white,baggle,notopwall,noleftwall,
+Cell(21,12): white,nobaggle,notopwall,leftwall,
+Cell(21,13): white,baggle,notopwall,leftwall,
+Cell(21,14): white,nobaggle,notopwall,leftwall,
+Cell(21,15): white,baggle,notopwall,leftwall,
+Cell(21,16): white,baggle,notopwall,noleftwall,
+Cell(21,17): white,nobaggle,topwall,noleftwall,
+Cell(22,1): orange,nobaggle,topwall,noleftwall,
+Cell(22,2): white,nobaggle,topwall,leftwall,
+Cell(22,3): white,nobaggle,notopwall,leftwall,
+Cell(22,4): white,nobaggle,notopwall,leftwall,
+Cell(22,5): white,nobaggle,notopwall,leftwall,
+Cell(22,6): white,nobaggle,notopwall,leftwall,
+Cell(22,7): white,nobaggle,notopwall,leftwall,
+Cell(22,8): white,nobaggle,notopwall,leftwall,
+Cell(22,9): white,nobaggle,notopwall,leftwall,
+Cell(22,10): white,nobaggle,notopwall,leftwall,
+Cell(22,11): white,nobaggle,notopwall,leftwall,
+Cell(22,12): white,nobaggle,notopwall,leftwall,
+Cell(22,13): white,nobaggle,notopwall,leftwall,
+Cell(22,14): white,nobaggle,notopwall,leftwall,
+Cell(22,15): white,nobaggle,notopwall,leftwall,
+Cell(22,16): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/loop/dowhileloop/Poucet2.map b/src/lessons/welcome/loop/dowhileloop/Poucet2.map
new file mode 100644
index 0000000..a538f33
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/Poucet2.map
@@ -0,0 +1,265 @@
+BuggleWorld: Deeper Forest
+Size: 23x18
+Buggle(11,16): north,black,black,buggle2
+Cell(0,1): orange,nobaggle,topwall,noleftwall,
+Cell(0,2): white,nobaggle,topwall,noleftwall,
+Cell(1,1): orange,nobaggle,topwall,noleftwall,
+Cell(1,2): white,baggle,notopwall,leftwall,
+Cell(1,3): white,baggle,notopwall,leftwall,
+Cell(1,4): white,baggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,baggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,notopwall,leftwall,
+Cell(1,10): white,nobaggle,notopwall,leftwall,
+Cell(1,11): white,nobaggle,notopwall,leftwall,
+Cell(1,12): white,nobaggle,notopwall,leftwall,
+Cell(1,13): white,baggle,notopwall,leftwall,
+Cell(1,14): white,nobaggle,notopwall,leftwall,
+Cell(1,15): white,baggle,notopwall,leftwall,
+Cell(1,16): white,nobaggle,notopwall,leftwall,
+Cell(1,17): white,nobaggle,topwall,noleftwall,
+Cell(2,1): 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,topwall,noleftwall,
+Cell(2,7): white,nobaggle,topwall,leftwall,
+Cell(2,8): white,nobaggle,notopwall,leftwall,
+Cell(2,9): white,nobaggle,notopwall,leftwall,
+Cell(2,10): white,nobaggle,notopwall,leftwall,
+Cell(2,11): white,baggle,topwall,noleftwall,
+Cell(2,12): white,nobaggle,topwall,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,topwall,noleftwall,
+Cell(2,17): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,baggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,6): white,nobaggle,topwall,noleftwall,
+Cell(3,7): white,nobaggle,topwall,noleftwall,
+Cell(3,11): white,baggle,topwall,noleftwall,
+Cell(3,12): white,nobaggle,topwall,noleftwall,
+Cell(3,16): white,baggle,topwall,noleftwall,
+Cell(3,17): white,nobaggle,topwall,noleftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,6): white,nobaggle,topwall,noleftwall,
+Cell(4,7): white,nobaggle,topwall,noleftwall,
+Cell(4,11): white,baggle,topwall,noleftwall,
+Cell(4,12): white,nobaggle,topwall,noleftwall,
+Cell(4,16): white,nobaggle,topwall,noleftwall,
+Cell(4,17): white,nobaggle,topwall,noleftwall,
+Cell(5,1): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,6): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,noleftwall,
+Cell(5,11): white,baggle,topwall,noleftwall,
+Cell(5,12): white,nobaggle,topwall,noleftwall,
+Cell(5,16): white,nobaggle,topwall,noleftwall,
+Cell(5,17): white,nobaggle,topwall,noleftwall,
+Cell(6,1): white,baggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,notopwall,leftwall,
+Cell(6,3): white,baggle,notopwall,leftwall,
+Cell(6,4): white,baggle,notopwall,leftwall,
+Cell(6,5): white,nobaggle,notopwall,leftwall,
+Cell(6,7): white,baggle,notopwall,leftwall,
+Cell(6,8): white,baggle,notopwall,leftwall,
+Cell(6,9): white,baggle,notopwall,leftwall,
+Cell(6,10): white,nobaggle,notopwall,leftwall,
+Cell(6,11): white,baggle,notopwall,noleftwall,
+Cell(6,12): white,nobaggle,notopwall,leftwall,
+Cell(6,13): white,baggle,notopwall,leftwall,
+Cell(6,14): white,nobaggle,notopwall,leftwall,
+Cell(6,15): white,baggle,notopwall,leftwall,
+Cell(6,17): white,nobaggle,topwall,noleftwall,
+Cell(7,1): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,leftwall,
+Cell(7,3): white,nobaggle,notopwall,leftwall,
+Cell(7,4): white,nobaggle,notopwall,leftwall,
+Cell(7,5): white,nobaggle,notopwall,leftwall,
+Cell(7,6): white,nobaggle,topwall,noleftwall,
+Cell(7,7): white,nobaggle,topwall,leftwall,
+Cell(7,8): white,nobaggle,notopwall,leftwall,
+Cell(7,9): white,nobaggle,notopwall,leftwall,
+Cell(7,10): white,nobaggle,notopwall,leftwall,
+Cell(7,11): white,baggle,topwall,noleftwall,
+Cell(7,12): white,nobaggle,topwall,leftwall,
+Cell(7,13): white,nobaggle,notopwall,leftwall,
+Cell(7,14): white,nobaggle,notopwall,leftwall,
+Cell(7,15): white,nobaggle,notopwall,leftwall,
+Cell(7,16): white,nobaggle,topwall,noleftwall,
+Cell(7,17): white,nobaggle,topwall,noleftwall,
+Cell(8,1): white,baggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,6): white,nobaggle,topwall,noleftwall,
+Cell(8,7): white,nobaggle,topwall,noleftwall,
+Cell(8,11): white,baggle,topwall,noleftwall,
+Cell(8,12): white,nobaggle,topwall,noleftwall,
+Cell(8,16): white,nobaggle,topwall,noleftwall,
+Cell(8,17): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,topwall,noleftwall,
+Cell(9,6): white,baggle,topwall,noleftwall,
+Cell(9,7): white,nobaggle,topwall,noleftwall,
+Cell(9,11): white,baggle,topwall,noleftwall,
+Cell(9,12): white,nobaggle,topwall,noleftwall,
+Cell(9,16): white,baggle,topwall,noleftwall,
+Cell(9,17): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,baggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,noleftwall,
+Cell(10,6): white,nobaggle,topwall,noleftwall,
+Cell(10,7): white,nobaggle,topwall,noleftwall,
+Cell(10,11): white,baggle,topwall,noleftwall,
+Cell(10,12): white,nobaggle,topwall,noleftwall,
+Cell(10,16): white,nobaggle,topwall,noleftwall,
+Cell(10,17): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,baggle,topwall,noleftwall,
+Cell(11,2): white,nobaggle,notopwall,leftwall,
+Cell(11,3): white,baggle,notopwall,leftwall,
+Cell(11,4): white,baggle,notopwall,leftwall,
+Cell(11,5): white,nobaggle,notopwall,leftwall,
+Cell(11,6): white,baggle,notopwall,noleftwall,
+Cell(11,7): white,baggle,notopwall,leftwall,
+Cell(11,8): white,baggle,notopwall,leftwall,
+Cell(11,9): white,nobaggle,notopwall,leftwall,
+Cell(11,10): white,nobaggle,notopwall,leftwall,
+Cell(11,12): white,nobaggle,notopwall,leftwall,
+Cell(11,13): white,baggle,notopwall,leftwall,
+Cell(11,14): white,nobaggle,notopwall,leftwall,
+Cell(11,15): white,baggle,notopwall,leftwall,
+Cell(11,16): white,baggle,notopwall,noleftwall,
+Cell(11,17): white,nobaggle,topwall,noleftwall,
+Cell(12,1): white,nobaggle,topwall,noleftwall,
+Cell(12,2): white,nobaggle,topwall,leftwall,
+Cell(12,3): white,nobaggle,notopwall,leftwall,
+Cell(12,4): white,nobaggle,notopwall,leftwall,
+Cell(12,5): white,nobaggle,notopwall,leftwall,
+Cell(12,6): white,baggle,topwall,noleftwall,
+Cell(12,7): white,nobaggle,topwall,leftwall,
+Cell(12,8): white,nobaggle,notopwall,leftwall,
+Cell(12,9): white,nobaggle,notopwall,leftwall,
+Cell(12,10): white,nobaggle,notopwall,leftwall,
+Cell(12,11): white,nobaggle,topwall,noleftwall,
+Cell(12,12): white,nobaggle,topwall,leftwall,
+Cell(12,13): white,nobaggle,notopwall,leftwall,
+Cell(12,14): white,nobaggle,notopwall,leftwall,
+Cell(12,15): white,nobaggle,notopwall,leftwall,
+Cell(12,16): white,nobaggle,topwall,noleftwall,
+Cell(12,17): white,nobaggle,topwall,noleftwall,
+Cell(13,1): white,baggle,topwall,noleftwall,
+Cell(13,2): white,nobaggle,topwall,noleftwall,
+Cell(13,6): white,baggle,topwall,noleftwall,
+Cell(13,7): white,nobaggle,topwall,noleftwall,
+Cell(13,11): white,baggle,topwall,noleftwall,
+Cell(13,12): white,nobaggle,topwall,noleftwall,
+Cell(13,16): white,baggle,topwall,noleftwall,
+Cell(13,17): white,nobaggle,topwall,noleftwall,
+Cell(14,1): white,nobaggle,topwall,noleftwall,
+Cell(14,2): white,nobaggle,topwall,noleftwall,
+Cell(14,6): white,nobaggle,topwall,noleftwall,
+Cell(14,7): white,nobaggle,topwall,noleftwall,
+Cell(14,11): white,nobaggle,topwall,noleftwall,
+Cell(14,12): white,nobaggle,topwall,noleftwall,
+Cell(14,16): white,nobaggle,topwall,noleftwall,
+Cell(14,17): white,nobaggle,topwall,noleftwall,
+Cell(15,1): white,nobaggle,topwall,noleftwall,
+Cell(15,2): white,nobaggle,topwall,noleftwall,
+Cell(15,6): white,baggle,topwall,noleftwall,
+Cell(15,7): white,nobaggle,topwall,noleftwall,
+Cell(15,11): white,baggle,topwall,noleftwall,
+Cell(15,12): white,nobaggle,topwall,noleftwall,
+Cell(15,16): white,nobaggle,topwall,noleftwall,
+Cell(15,17): white,nobaggle,topwall,noleftwall,
+Cell(16,1): white,baggle,topwall,noleftwall,
+Cell(16,2): white,nobaggle,notopwall,leftwall,
+Cell(16,3): white,baggle,notopwall,leftwall,
+Cell(16,4): white,baggle,notopwall,leftwall,
+Cell(16,5): white,nobaggle,notopwall,leftwall,
+Cell(16,7): white,baggle,notopwall,leftwall,
+Cell(16,8): white,baggle,notopwall,leftwall,
+Cell(16,9): white,nobaggle,notopwall,leftwall,
+Cell(16,10): white,nobaggle,notopwall,leftwall,
+Cell(16,12): white,nobaggle,notopwall,leftwall,
+Cell(16,13): white,baggle,notopwall,leftwall,
+Cell(16,14): white,nobaggle,notopwall,leftwall,
+Cell(16,15): white,baggle,notopwall,leftwall,
+Cell(16,16): white,baggle,notopwall,noleftwall,
+Cell(16,17): white,nobaggle,topwall,noleftwall,
+Cell(17,1): white,nobaggle,topwall,noleftwall,
+Cell(17,2): white,nobaggle,topwall,leftwall,
+Cell(17,3): white,nobaggle,notopwall,leftwall,
+Cell(17,4): white,nobaggle,notopwall,leftwall,
+Cell(17,5): white,nobaggle,notopwall,leftwall,
+Cell(17,6): white,baggle,topwall,noleftwall,
+Cell(17,7): white,nobaggle,topwall,leftwall,
+Cell(17,8): white,nobaggle,notopwall,leftwall,
+Cell(17,9): white,nobaggle,notopwall,leftwall,
+Cell(17,10): white,nobaggle,notopwall,leftwall,
+Cell(17,11): white,nobaggle,topwall,noleftwall,
+Cell(17,12): white,nobaggle,topwall,leftwall,
+Cell(17,13): white,nobaggle,notopwall,leftwall,
+Cell(17,14): white,nobaggle,notopwall,leftwall,
+Cell(17,15): white,nobaggle,notopwall,leftwall,
+Cell(17,16): white,nobaggle,topwall,noleftwall,
+Cell(17,17): white,nobaggle,topwall,noleftwall,
+Cell(18,1): white,baggle,topwall,noleftwall,
+Cell(18,2): white,nobaggle,topwall,noleftwall,
+Cell(18,6): white,baggle,topwall,noleftwall,
+Cell(18,7): white,nobaggle,topwall,noleftwall,
+Cell(18,11): white,nobaggle,topwall,noleftwall,
+Cell(18,12): white,nobaggle,topwall,noleftwall,
+Cell(18,16): white,nobaggle,topwall,noleftwall,
+Cell(18,17): white,nobaggle,topwall,noleftwall,
+Cell(19,1): white,nobaggle,topwall,noleftwall,
+Cell(19,2): white,nobaggle,topwall,noleftwall,
+Cell(19,6): white,baggle,topwall,noleftwall,
+Cell(19,7): white,nobaggle,topwall,noleftwall,
+Cell(19,11): white,baggle,topwall,noleftwall,
+Cell(19,12): white,nobaggle,topwall,noleftwall,
+Cell(19,16): white,baggle,topwall,noleftwall,
+Cell(19,17): white,nobaggle,topwall,noleftwall,
+Cell(20,1): white,baggle,topwall,noleftwall,
+Cell(20,2): white,nobaggle,topwall,noleftwall,
+Cell(20,6): white,baggle,topwall,noleftwall,
+Cell(20,7): white,nobaggle,topwall,noleftwall,
+Cell(20,11): white,nobaggle,topwall,noleftwall,
+Cell(20,12): white,nobaggle,topwall,noleftwall,
+Cell(20,16): white,baggle,topwall,noleftwall,
+Cell(20,17): white,nobaggle,topwall,noleftwall,
+Cell(21,1): white,baggle,topwall,noleftwall,
+Cell(21,2): white,baggle,notopwall,leftwall,
+Cell(21,3): white,nobaggle,notopwall,leftwall,
+Cell(21,4): white,baggle,notopwall,leftwall,
+Cell(21,5): white,nobaggle,notopwall,leftwall,
+Cell(21,6): white,baggle,notopwall,noleftwall,
+Cell(21,7): white,nobaggle,notopwall,leftwall,
+Cell(21,8): white,nobaggle,notopwall,leftwall,
+Cell(21,9): white,nobaggle,notopwall,leftwall,
+Cell(21,10): white,nobaggle,notopwall,leftwall,
+Cell(21,11): white,baggle,notopwall,noleftwall,
+Cell(21,12): white,nobaggle,notopwall,leftwall,
+Cell(21,13): white,baggle,notopwall,leftwall,
+Cell(21,14): white,nobaggle,notopwall,leftwall,
+Cell(21,15): white,baggle,notopwall,leftwall,
+Cell(21,16): white,baggle,notopwall,noleftwall,
+Cell(21,17): white,nobaggle,topwall,noleftwall,
+Cell(22,1): white,nobaggle,notopwall,leftwall,
+Cell(22,2): white,nobaggle,notopwall,leftwall,
+Cell(22,3): white,nobaggle,notopwall,leftwall,
+Cell(22,4): white,nobaggle,notopwall,leftwall,
+Cell(22,5): white,nobaggle,notopwall,leftwall,
+Cell(22,6): white,nobaggle,notopwall,leftwall,
+Cell(22,7): white,nobaggle,notopwall,leftwall,
+Cell(22,8): white,nobaggle,notopwall,leftwall,
+Cell(22,9): white,nobaggle,notopwall,leftwall,
+Cell(22,10): white,nobaggle,notopwall,leftwall,
+Cell(22,11): white,nobaggle,notopwall,leftwall,
+Cell(22,12): white,nobaggle,notopwall,leftwall,
+Cell(22,13): white,nobaggle,notopwall,leftwall,
+Cell(22,14): white,nobaggle,notopwall,leftwall,
+Cell(22,15): white,nobaggle,notopwall,leftwall,
+Cell(22,16): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/loop/dowhileloop/PoucetEntity.java b/src/lessons/welcome/loop/dowhileloop/PoucetEntity.java
new file mode 100644
index 0000000..5316fe5
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/PoucetEntity.java
@@ -0,0 +1,45 @@
+package lessons.welcome.loop.dowhileloop;
+
+import java.awt.Color;
+
+public class PoucetEntity extends jlm.universe.bugglequest.SimpleBuggle {
+	@Override
+	public void forward(int i)  { 
+		throw new RuntimeException("forward(int) forbidden in this exercise");
+	}
+
+	@Override
+	public void backward(int i) {
+		throw new RuntimeException("backward(int) forbidden in this exercise");
+	}
+
+	public boolean crossing() {
+		return getX()%5== 1 && getY()%5==1;
+	}
+	public boolean exitReached() {
+		return getGroundColor().equals(Color.orange);
+	}
+
+	@Override
+	/* BEGIN TEMPLATE */
+	public void run() { 
+		/* BEGIN SOLUTION */
+		while (!exitReached()) {
+			int seen = 0;
+			
+			do {
+				forward();
+				if (isOverBaggle())
+					seen++;
+			} while (! crossing());
+			
+			if (seen>2)
+				turnLeft();
+			else
+				turnRight();
+		}
+		forward();
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/loop/dowhileloop/PoucetEntity.py b/src/lessons/welcome/loop/dowhileloop/PoucetEntity.py
new file mode 100644
index 0000000..8a65286
--- /dev/null
+++ b/src/lessons/welcome/loop/dowhileloop/PoucetEntity.py
@@ -0,0 +1,34 @@
+def forward(i=-1):
+    if i==-1:
+      entity.forward()
+    else:
+      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+def backward(i=-1):
+    if i==-1:
+      entity.backward()
+    else:
+      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+
+def crossing():
+    return (entity.getX() % 5 == 1) and ( entity.getY()%5==1 )
+    
+def exitReached():
+    return getGroundColor().equals(Color.orange)
+
+# BEGIN SOLUTION
+while not exitReached() :
+    seen = 0
+    within = False
+    
+    while not within or not crossing():
+        within = True
+        forward()
+        if isOverBaggle():
+            seen += 1
+    
+    if seen > 2:
+        turnLeft()
+    else:
+        turnRight()
+forward()
+# END SOLUTION
diff --git a/src/lessons/welcome/loop/forloop/LoopCourse-answer0.map b/src/lessons/welcome/loop/forloop/LoopCourse-answer0.map
new file mode 100644
index 0000000..65e7472
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourse-answer0.map
@@ -0,0 +1,66 @@
+BuggleWorld: Brave new world
+Size: 11x11
+Buggle(9,9): north,black,255/5/5,runner
+Cell(1,1): 255/5/5,nobaggle,topwall,leftwall,
+Cell(1,2): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(1,3): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(1,4): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(1,5): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(1,6): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(1,7): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(1,8): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(1,9): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,1): 255/5/5,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): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(2,10): white,nobaggle,topwall,noleftwall,
+Cell(3,1): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,9): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(3,10): white,nobaggle,topwall,noleftwall,
+Cell(4,1): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,9): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(4,10): white,nobaggle,topwall,noleftwall,
+Cell(5,1): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,9): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(5,10): white,nobaggle,topwall,noleftwall,
+Cell(6,1): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,topwall,noleftwall,
+Cell(6,9): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(7,1): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,noleftwall,
+Cell(7,9): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,topwall,noleftwall,
+Cell(8,1): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,9): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(9,1): 255/5/5,nobaggle,topwall,noleftwall,
+Cell(9,2): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(9,3): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(9,4): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(9,5): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(9,6): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(9,7): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(9,8): 255/5/5,nobaggle,notopwall,leftwall,
+Cell(9,9): 255/5/5,nobaggle,notopwall,noleftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,notopwall,leftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,notopwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,6): white,nobaggle,notopwall,leftwall,
+Cell(10,7): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,notopwall,leftwall,
+Cell(10,9): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/loop/forloop/LoopCourse.fr.html b/src/lessons/welcome/loop/forloop/LoopCourse.fr.html
new file mode 100644
index 0000000..f561ea5
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourse.fr.html
@@ -0,0 +1,13 @@
+<h2>Entraînement de buggle</h2>
+
+<p>Aujourd'hui, votre buggle veut s'entraîner sérieusement. Elle veut courir
+jusqu'à brûler la piste! Ses super-chaussures, sont parfaites pour courir
+comme une dingue, mais malheureusement, elles abîment un peu la piste à la
+longue...</p>
+
+<p>Votre objectif est de faire 10 tours de piste, quel que soit le
+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>
+ 
\ No newline at end of file
diff --git a/src/lessons/welcome/loop/forloop/LoopCourse.html b/src/lessons/welcome/loop/forloop/LoopCourse.html
new file mode 100644
index 0000000..01f92a9
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourse.html
@@ -0,0 +1,10 @@
+<h2>Training Buggle</h2>
+
+<p>Today, your buggle wants to get some serious exercise: It wants to run 'till the track burns!
+Its super-shoes are just perfect to run like hell, but unfortunately, they can actually damage the track on the long run...</p>
+
+<p>Your goal is to run the track 10 times, no matter what happens. 
+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>
+ 
\ No newline at end of file
diff --git a/src/lessons/welcome/loop/forloop/LoopCourse.java b/src/lessons/welcome/loop/forloop/LoopCourse.java
new file mode 100644
index 0000000..eb89c79
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourse.java
@@ -0,0 +1,27 @@
+package lessons.welcome.loop.forloop;
+
+import java.io.IOException;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
+import jlm.universe.World;
+import jlm.universe.bugglequest.BuggleWorld;
+
+public class LoopCourse extends ExerciseTemplated{
+	
+		public LoopCourse(Lesson lesson) throws IOException, BrokenWorldFileException {
+			super(lesson);
+			tabName = "Runner";
+					
+			/* Create initial situation */
+			World[] myWorlds = new World[] {
+					BuggleWorld.newFromFile("lessons/welcome/loop/forloop/LoopCourse")
+			};
+			for (World w: myWorlds)
+				w.setDelay(10); // runners are moving faster than usual
+			
+			setup(myWorlds);
+		}
+
+}
diff --git a/src/lessons/welcome/loop/forloop/LoopCourse.map b/src/lessons/welcome/loop/forloop/LoopCourse.map
new file mode 100644
index 0000000..80bedbe
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourse.map
@@ -0,0 +1,65 @@
+BuggleWorld: Brave new world
+Size: 11x11
+Buggle(9,9): north,black,black,runner
+Cell(1,1): white,nobaggle,topwall,leftwall,
+Cell(1,2): white,nobaggle,notopwall,leftwall,
+Cell(1,3): white,nobaggle,notopwall,leftwall,
+Cell(1,4): white,nobaggle,notopwall,leftwall,
+Cell(1,5): white,nobaggle,notopwall,leftwall,
+Cell(1,6): white,nobaggle,notopwall,leftwall,
+Cell(1,7): white,nobaggle,notopwall,leftwall,
+Cell(1,8): white,nobaggle,notopwall,leftwall,
+Cell(1,9): white,nobaggle,notopwall,leftwall,
+Cell(1,10): white,nobaggle,topwall,noleftwall,
+Cell(2,1): 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,10): white,nobaggle,topwall,noleftwall,
+Cell(3,1): white,nobaggle,topwall,noleftwall,
+Cell(3,2): white,nobaggle,topwall,noleftwall,
+Cell(3,9): white,nobaggle,topwall,noleftwall,
+Cell(3,10): white,nobaggle,topwall,noleftwall,
+Cell(4,1): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,noleftwall,
+Cell(4,9): white,nobaggle,topwall,noleftwall,
+Cell(4,10): white,nobaggle,topwall,noleftwall,
+Cell(5,1): white,nobaggle,topwall,noleftwall,
+Cell(5,2): white,nobaggle,topwall,noleftwall,
+Cell(5,9): white,nobaggle,topwall,noleftwall,
+Cell(5,10): white,nobaggle,topwall,noleftwall,
+Cell(6,1): white,nobaggle,topwall,noleftwall,
+Cell(6,2): white,nobaggle,topwall,noleftwall,
+Cell(6,9): white,nobaggle,topwall,noleftwall,
+Cell(6,10): white,nobaggle,topwall,noleftwall,
+Cell(7,1): white,nobaggle,topwall,noleftwall,
+Cell(7,2): white,nobaggle,topwall,noleftwall,
+Cell(7,9): white,nobaggle,topwall,noleftwall,
+Cell(7,10): white,nobaggle,topwall,noleftwall,
+Cell(8,1): white,nobaggle,topwall,noleftwall,
+Cell(8,2): white,nobaggle,topwall,noleftwall,
+Cell(8,9): white,nobaggle,topwall,noleftwall,
+Cell(8,10): white,nobaggle,topwall,noleftwall,
+Cell(9,1): white,nobaggle,topwall,noleftwall,
+Cell(9,2): white,nobaggle,notopwall,leftwall,
+Cell(9,3): white,nobaggle,notopwall,leftwall,
+Cell(9,4): white,nobaggle,notopwall,leftwall,
+Cell(9,5): white,nobaggle,notopwall,leftwall,
+Cell(9,6): white,nobaggle,notopwall,leftwall,
+Cell(9,7): white,nobaggle,notopwall,leftwall,
+Cell(9,8): white,nobaggle,notopwall,leftwall,
+Cell(9,10): white,nobaggle,topwall,noleftwall,
+Cell(10,1): white,nobaggle,notopwall,leftwall,
+Cell(10,2): white,nobaggle,notopwall,leftwall,
+Cell(10,3): white,nobaggle,notopwall,leftwall,
+Cell(10,4): white,nobaggle,notopwall,leftwall,
+Cell(10,5): white,nobaggle,notopwall,leftwall,
+Cell(10,6): white,nobaggle,notopwall,leftwall,
+Cell(10,7): white,nobaggle,notopwall,leftwall,
+Cell(10,8): white,nobaggle,notopwall,leftwall,
+Cell(10,9): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseEntity.java b/src/lessons/welcome/loop/forloop/LoopCourseEntity.java
new file mode 100644
index 0000000..3bd3e48
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseEntity.java
@@ -0,0 +1,50 @@
+package lessons.welcome.loop.forloop;
+
+import java.awt.Color;
+
+public class LoopCourseEntity extends jlm.universe.bugglequest.SimpleBuggle {
+	Color[] colors = new Color[] {
+			Color.white,
+			new Color(255,240,240),new Color(255,220,220),new Color(255,205,205),
+			new Color(255,190,190),new Color(255,170,170),new Color(255,150,150),
+			new Color(255,130,130),new Color(255,110,110),new Color(255,45,45),
+			new Color(255,5,5)};
+	@Override
+	public void forward(int i)  { 
+		throw new RuntimeException("forward(int) forbidden in this exercise");
+	}
+	@Override
+	public void forward()  {
+		super.forward();
+		Color c = getGroundColor();
+		for (int i=0;i<colors.length-1;i++)
+			if (colors[i].equals(c)) {
+				c = colors[i+1];
+				break;
+			}
+		setBrushColor(c);
+		brushDown();
+		brushUp();
+	}
+
+	@Override
+	public void backward(int i) {
+		throw new RuntimeException("backward(int) forbidden in this exercise");
+	}
+	
+
+
+	@Override
+	/* BEGIN TEMPLATE */
+	public void run() { 
+		/* BEGIN SOLUTION */
+		for (int i = 0; i<10;i++) 
+			for (int side=0;side<4;side++){
+				for (int step=0;step<8;step++)
+					forward();
+				turnLeft();
+			}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseEntity.py b/src/lessons/welcome/loop/forloop/LoopCourseEntity.py
new file mode 100644
index 0000000..b3e8624
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseEntity.py
@@ -0,0 +1,30 @@
+colors = [Color.white, Color(255,240,240), Color(255,220,220), Color(255,205,205),
+             Color(255,190,190), Color(255,170,170), Color(255,150,150),
+             Color(255,130,130), Color(255,110,110), Color(255,45,45),
+             Color(255,5,5)]
+
+def forward(i=-1):
+    if i==-1:
+      entity.forward()
+      c = getGroundColor()
+      for i in range(len(colors)-1):
+          if colors[i] == c:
+              c = colors[i+1]
+              break
+      setBrushColor(c)    
+      brushDown()
+      brushUp()
+    else:
+      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+def backward(i=-1):
+    if i==-1:
+      entity.backward()
+    else:
+      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+# BEGIN SOLUTION
+for i in range(10):
+    for side in range(4):
+        for step in range(8):
+            forward()
+        turnLeft()
+# END SOLUTION
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseForest-answer0.map b/src/lessons/welcome/loop/forloop/LoopCourseForest-answer0.map
new file mode 100644
index 0000000..8036757
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseForest-answer0.map
@@ -0,0 +1,228 @@
+BuggleWorld: Brave new world
+Size: 15x15
+Buggle(13,13): north,black,210/155/0,buggle1
+Cell(0,0): blue,nobaggle,notopwall,noleftwall,
+Cell(0,1): blue,nobaggle,notopwall,noleftwall,
+Cell(0,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,7): blue,nobaggle,notopwall,noleftwall,
+Cell(0,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,13): blue,nobaggle,notopwall,noleftwall,
+Cell(0,14): blue,nobaggle,notopwall,noleftwall,
+Cell(1,0): blue,nobaggle,notopwall,noleftwall,
+Cell(1,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,2): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,3): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,4): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,5): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,6): blue,nobaggle,notopwall,noleftwall,
+Cell(1,7): blue,nobaggle,notopwall,noleftwall,
+Cell(1,8): blue,nobaggle,notopwall,noleftwall,
+Cell(1,9): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,10): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,11): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,12): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,14): blue,nobaggle,notopwall,noleftwall,
+Cell(2,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,3): blue,nobaggle,notopwall,noleftwall,
+Cell(2,4): blue,nobaggle,notopwall,noleftwall,
+Cell(2,5): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,7): blue,nobaggle,notopwall,noleftwall,
+Cell(2,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,9): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,10): blue,nobaggle,notopwall,noleftwall,
+Cell(2,11): blue,nobaggle,notopwall,noleftwall,
+Cell(2,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,2): blue,nobaggle,notopwall,noleftwall,
+Cell(3,3): blue,nobaggle,notopwall,noleftwall,
+Cell(3,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,5): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,6): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,7): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,8): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,9): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,11): blue,nobaggle,notopwall,noleftwall,
+Cell(3,12): blue,nobaggle,notopwall,noleftwall,
+Cell(3,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,7): blue,nobaggle,notopwall,noleftwall,
+Cell(4,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,2): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,3): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,6): blue,nobaggle,notopwall,noleftwall,
+Cell(5,7): blue,nobaggle,notopwall,noleftwall,
+Cell(5,8): blue,nobaggle,notopwall,noleftwall,
+Cell(5,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,11): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,12): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,1): blue,nobaggle,notopwall,noleftwall,
+Cell(6,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,3): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,5): blue,nobaggle,notopwall,noleftwall,
+Cell(6,6): blue,nobaggle,notopwall,noleftwall,
+Cell(6,7): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,8): blue,nobaggle,notopwall,noleftwall,
+Cell(6,9): blue,nobaggle,notopwall,noleftwall,
+Cell(6,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,11): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,13): blue,nobaggle,notopwall,noleftwall,
+Cell(6,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,0): blue,nobaggle,notopwall,noleftwall,
+Cell(7,1): blue,nobaggle,notopwall,noleftwall,
+Cell(7,2): blue,nobaggle,notopwall,noleftwall,
+Cell(7,3): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,4): blue,nobaggle,notopwall,noleftwall,
+Cell(7,5): blue,nobaggle,notopwall,noleftwall,
+Cell(7,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,7): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,9): blue,nobaggle,notopwall,noleftwall,
+Cell(7,10): blue,nobaggle,notopwall,noleftwall,
+Cell(7,11): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,12): blue,nobaggle,notopwall,noleftwall,
+Cell(7,13): blue,nobaggle,notopwall,noleftwall,
+Cell(7,14): blue,nobaggle,notopwall,noleftwall,
+Cell(8,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,1): blue,nobaggle,notopwall,noleftwall,
+Cell(8,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,3): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,5): blue,nobaggle,notopwall,noleftwall,
+Cell(8,6): blue,nobaggle,notopwall,noleftwall,
+Cell(8,7): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,8): blue,nobaggle,notopwall,noleftwall,
+Cell(8,9): blue,nobaggle,notopwall,noleftwall,
+Cell(8,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,11): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,13): blue,nobaggle,notopwall,noleftwall,
+Cell(8,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,2): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,3): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,6): blue,nobaggle,notopwall,noleftwall,
+Cell(9,7): blue,nobaggle,notopwall,noleftwall,
+Cell(9,8): blue,nobaggle,notopwall,noleftwall,
+Cell(9,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,11): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,12): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,7): blue,nobaggle,notopwall,noleftwall,
+Cell(10,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,2): blue,nobaggle,notopwall,noleftwall,
+Cell(11,3): blue,nobaggle,notopwall,noleftwall,
+Cell(11,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,5): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,6): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,7): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,8): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,9): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,11): blue,nobaggle,notopwall,noleftwall,
+Cell(11,12): blue,nobaggle,notopwall,noleftwall,
+Cell(11,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,3): blue,nobaggle,notopwall,noleftwall,
+Cell(12,4): blue,nobaggle,notopwall,noleftwall,
+Cell(12,5): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,7): blue,nobaggle,notopwall,noleftwall,
+Cell(12,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,9): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,10): blue,nobaggle,notopwall,noleftwall,
+Cell(12,11): blue,nobaggle,notopwall,noleftwall,
+Cell(12,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,0): blue,nobaggle,notopwall,noleftwall,
+Cell(13,1): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,2): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,3): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,4): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,5): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,6): blue,nobaggle,notopwall,noleftwall,
+Cell(13,7): blue,nobaggle,notopwall,noleftwall,
+Cell(13,8): blue,nobaggle,notopwall,noleftwall,
+Cell(13,9): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,10): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,11): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,12): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,13): 210/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,14): blue,nobaggle,notopwall,noleftwall,
+Cell(14,0): blue,nobaggle,notopwall,noleftwall,
+Cell(14,1): blue,nobaggle,notopwall,noleftwall,
+Cell(14,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,7): blue,nobaggle,notopwall,noleftwall,
+Cell(14,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,13): blue,nobaggle,notopwall,noleftwall,
+Cell(14,14): blue,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseForest.fr.html b/src/lessons/welcome/loop/forloop/LoopCourseForest.fr.html
new file mode 100644
index 0000000..1d2a9eb
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseForest.fr.html
@@ -0,0 +1,14 @@
+<h2>Course en forêt</h2>
+
+<p>Bon, notre dernier entraînement ne s'est pas très bien passé. La piste a
+effectivement brûlé, et vous voilà banni des pistes d'athlétisme de la
+région. Cette fois, notre buggle a décidé de s'entraîner en forêt, et avec
+des chaussures normales pour être plus sûr. Le problème est qu'il faut faire
+attention à ne pas tomber dans l'eau. La piste sur laquelle on peut courir
+est plutôt étroite : pour un coté, il faut faire quatre pas en avant,
+deux pas à gauche, quatre pas à droite, deux pas à droite, et quatre pas à
+gauche. Il faut faire 7 tours de circuit.</p>
+
+<p>Raaah, mince. Courir sur l'herbe semble l'endommager également ! Bon, tant
+pis. Faites vos 7 tours, et passez vite à l'exercice suivant avant que
+quelqu'un ne constate les dégâts que vous avez fait...</p> 
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseForest.html b/src/lessons/welcome/loop/forloop/LoopCourseForest.html
new file mode 100644
index 0000000..69e51d9
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseForest.html
@@ -0,0 +1,10 @@
+<h2>Outdoor Training Buggle</h2>
+
+<p>Well, our last training didn't went that well. The track actually burned, and we are now banned from there. 
+This time, our buggle decided to practice outdoor, in the middle of the forest, with its good old shoes instead.
+The problem is that you have to be careful to not fall into water. The track on which you can run is rather narrow:
+One side is now 4 steps forward, 2 steps to the left, 4 steps to the right, 2 steps to the right, 4 steps to the left, 
+and you want to run 7 around.</p>
+
+<p>Oh crap, running on the grass seems to destroy it too! So just take your 7 loops around the garden, and move along 
+to the next exercise before anyone notices the damage you made...</p> 
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseForest.java b/src/lessons/welcome/loop/forloop/LoopCourseForest.java
new file mode 100644
index 0000000..3c9a2df
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseForest.java
@@ -0,0 +1,27 @@
+package lessons.welcome.loop.forloop;
+
+import java.io.IOException;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
+import jlm.universe.World;
+import jlm.universe.bugglequest.BuggleWorld;
+
+public class LoopCourseForest extends ExerciseTemplated{
+	
+		public LoopCourseForest(Lesson lesson) throws IOException, BrokenWorldFileException {
+			super(lesson);
+			tabName = "Runner";
+					
+			/* Create initial situation */
+			World[] myWorlds = new World[] {
+					BuggleWorld.newFromFile("lessons/welcome/loop/forloop/LoopCourseForest")
+			};
+			for (World w: myWorlds)
+				w.setDelay(10); // runners are moving faster than usual
+			
+			setup(myWorlds);
+		}
+
+}
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseForest.map b/src/lessons/welcome/loop/forloop/LoopCourseForest.map
new file mode 100644
index 0000000..837b3d5
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseForest.map
@@ -0,0 +1,228 @@
+BuggleWorld: Brave new world
+Size: 15x15
+Buggle(13,13): north,black,black,buggle1
+Cell(0,0): blue,nobaggle,notopwall,noleftwall,
+Cell(0,1): blue,nobaggle,notopwall,noleftwall,
+Cell(0,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,7): blue,nobaggle,notopwall,noleftwall,
+Cell(0,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(0,13): blue,nobaggle,notopwall,noleftwall,
+Cell(0,14): blue,nobaggle,notopwall,noleftwall,
+Cell(1,0): blue,nobaggle,notopwall,noleftwall,
+Cell(1,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,6): blue,nobaggle,notopwall,noleftwall,
+Cell(1,7): blue,nobaggle,notopwall,noleftwall,
+Cell(1,8): blue,nobaggle,notopwall,noleftwall,
+Cell(1,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(1,14): blue,nobaggle,notopwall,noleftwall,
+Cell(2,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,3): blue,nobaggle,notopwall,noleftwall,
+Cell(2,4): blue,nobaggle,notopwall,noleftwall,
+Cell(2,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,7): blue,nobaggle,notopwall,noleftwall,
+Cell(2,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,10): blue,nobaggle,notopwall,noleftwall,
+Cell(2,11): blue,nobaggle,notopwall,noleftwall,
+Cell(2,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(2,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,2): blue,nobaggle,notopwall,noleftwall,
+Cell(3,3): blue,nobaggle,notopwall,noleftwall,
+Cell(3,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,7): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,11): blue,nobaggle,notopwall,noleftwall,
+Cell(3,12): blue,nobaggle,notopwall,noleftwall,
+Cell(3,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(3,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,7): blue,nobaggle,notopwall,noleftwall,
+Cell(4,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(4,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,6): blue,nobaggle,notopwall,noleftwall,
+Cell(5,7): blue,nobaggle,notopwall,noleftwall,
+Cell(5,8): blue,nobaggle,notopwall,noleftwall,
+Cell(5,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(5,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,1): blue,nobaggle,notopwall,noleftwall,
+Cell(6,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,5): blue,nobaggle,notopwall,noleftwall,
+Cell(6,6): blue,nobaggle,notopwall,noleftwall,
+Cell(6,7): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,8): blue,nobaggle,notopwall,noleftwall,
+Cell(6,9): blue,nobaggle,notopwall,noleftwall,
+Cell(6,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(6,13): blue,nobaggle,notopwall,noleftwall,
+Cell(6,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,0): blue,nobaggle,notopwall,noleftwall,
+Cell(7,1): blue,nobaggle,notopwall,noleftwall,
+Cell(7,2): blue,nobaggle,notopwall,noleftwall,
+Cell(7,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,4): blue,nobaggle,notopwall,noleftwall,
+Cell(7,5): blue,nobaggle,notopwall,noleftwall,
+Cell(7,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,7): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,9): blue,nobaggle,notopwall,noleftwall,
+Cell(7,10): blue,nobaggle,notopwall,noleftwall,
+Cell(7,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(7,12): blue,nobaggle,notopwall,noleftwall,
+Cell(7,13): blue,nobaggle,notopwall,noleftwall,
+Cell(7,14): blue,nobaggle,notopwall,noleftwall,
+Cell(8,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,1): blue,nobaggle,notopwall,noleftwall,
+Cell(8,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,5): blue,nobaggle,notopwall,noleftwall,
+Cell(8,6): blue,nobaggle,notopwall,noleftwall,
+Cell(8,7): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,8): blue,nobaggle,notopwall,noleftwall,
+Cell(8,9): blue,nobaggle,notopwall,noleftwall,
+Cell(8,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(8,13): blue,nobaggle,notopwall,noleftwall,
+Cell(8,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,6): blue,nobaggle,notopwall,noleftwall,
+Cell(9,7): blue,nobaggle,notopwall,noleftwall,
+Cell(9,8): blue,nobaggle,notopwall,noleftwall,
+Cell(9,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(9,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,7): blue,nobaggle,notopwall,noleftwall,
+Cell(10,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(10,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,2): blue,nobaggle,notopwall,noleftwall,
+Cell(11,3): blue,nobaggle,notopwall,noleftwall,
+Cell(11,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,7): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,11): blue,nobaggle,notopwall,noleftwall,
+Cell(11,12): blue,nobaggle,notopwall,noleftwall,
+Cell(11,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(11,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,0): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,3): blue,nobaggle,notopwall,noleftwall,
+Cell(12,4): blue,nobaggle,notopwall,noleftwall,
+Cell(12,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,7): blue,nobaggle,notopwall,noleftwall,
+Cell(12,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,10): blue,nobaggle,notopwall,noleftwall,
+Cell(12,11): blue,nobaggle,notopwall,noleftwall,
+Cell(12,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(12,14): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,0): blue,nobaggle,notopwall,noleftwall,
+Cell(13,1): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,6): blue,nobaggle,notopwall,noleftwall,
+Cell(13,7): blue,nobaggle,notopwall,noleftwall,
+Cell(13,8): blue,nobaggle,notopwall,noleftwall,
+Cell(13,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,13): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(13,14): blue,nobaggle,notopwall,noleftwall,
+Cell(14,0): blue,nobaggle,notopwall,noleftwall,
+Cell(14,1): blue,nobaggle,notopwall,noleftwall,
+Cell(14,2): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,3): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,4): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,5): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,6): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,7): blue,nobaggle,notopwall,noleftwall,
+Cell(14,8): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,9): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,10): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,11): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,12): 0/155/0,nobaggle,notopwall,noleftwall,
+Cell(14,13): blue,nobaggle,notopwall,noleftwall,
+Cell(14,14): blue,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseForestEntity.java b/src/lessons/welcome/loop/forloop/LoopCourseForestEntity.java
new file mode 100644
index 0000000..4ccb93b
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseForestEntity.java
@@ -0,0 +1,72 @@
+package lessons.welcome.loop.forloop;
+
+import java.awt.Color;
+
+public class LoopCourseForestEntity extends jlm.universe.bugglequest.SimpleBuggle {
+	Color[] colors = new Color[] {
+			new Color(0,155,0),
+			new Color(50,155,0),
+			new Color(100,155,0),
+			new Color(140,155,0),
+			new Color(160,155,0),
+			new Color(180,155,0),
+			new Color(200,155,0),
+			new Color(210,155,0),
+	};
+	@Override
+	public void forward(int i)  { 
+		throw new RuntimeException("forward(int) forbidden in this exercise");
+	}
+	@Override
+	public void forward()  {
+		if (!haveSeenError())
+			super.forward();
+		Color c = getGroundColor();
+		if (c.equals(Color.blue)) {
+			if (!haveSeenError())
+				javax.swing.JOptionPane.showMessageDialog(null, "You fall into water.", "Test failed", javax.swing.JOptionPane.ERROR_MESSAGE);
+			seenError();
+		}
+		for (int i=0;i<colors.length-1;i++)
+			if (colors[i].equals(c)) {
+				c = colors[i+1];
+				break;
+			}
+		setBrushColor(c);
+		brushDown();
+		brushUp();
+	}
+
+	@Override
+	public void backward(int i) {
+		throw new RuntimeException("backward(int) forbidden in this exercise");
+	}
+	
+
+
+	@Override
+	/* BEGIN TEMPLATE */
+	public void run() { 
+		/* BEGIN SOLUTION */
+		for (int i = 0; i<7;i++) 
+			for (int side=0;side<4;side++){
+				for (int step=0;step<4;step++)
+					forward();
+				turnLeft();
+				for (int step=0;step<2;step++)
+					forward();
+				turnRight();
+				for (int step=0;step<4;step++)
+					forward();
+				turnRight();
+				forward();
+				forward();
+				turnLeft();
+				for (int step=0;step<4;step++)
+					forward();
+				turnLeft();
+			}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/loop/forloop/LoopCourseForestEntity.py b/src/lessons/welcome/loop/forloop/LoopCourseForestEntity.py
new file mode 100644
index 0000000..1abb4c8
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopCourseForestEntity.py
@@ -0,0 +1,48 @@
+import javax.swing.JOptionPane;
+
+colors = [Color(0,155,0), Color(50,155,0), Color(100,155,0), Color(140,155,0),
+          Color(160,155,0), Color(180,155,0), Color(200,155,0), Color(210,155,0)]
+
+def forward(i=-1):
+    if i==-1:
+      entity.forward()
+      c = getGroundColor()
+      
+      if c.equals( Color.blue ):
+          if not entity.haveSeenError():
+              javax.swing.JOptionPane.showMessageDialog(None, "You fall into water.", "Test failed", javax.swing.JOptionPane.ERROR_MESSAGE)
+          entity.seenError()
+
+      for i in range(len(colors)-1):
+          if colors[i].equals(c):
+              c = colors[i+1]
+              break
+      setBrushColor(c)    
+      brushDown()
+      brushUp()
+    else:
+      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+def backward(i=-1):
+    if i==-1:
+      entity.backward()
+    else:
+      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+# BEGIN SOLUTION
+for i in range(7):
+    for side in range(4):
+        for step in range(4):
+            forward()
+        turnLeft();
+        for step in range(2):
+            forward()
+        turnRight();
+        for step in range(4):
+            forward()
+        turnRight()
+        forward()
+        forward()
+        turnLeft()
+        for step in range(4):
+            forward()
+        turnLeft()
+# END SOLUTION
diff --git a/src/lessons/welcome/loop/forloop/LoopFor-answer0.map b/src/lessons/welcome/loop/forloop/LoopFor-answer0.map
new file mode 100644
index 0000000..359d13f
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopFor-answer0.map
@@ -0,0 +1,16 @@
+BuggleWorld: Kitchen
+Size: 7x7
+Buggle(0,6): north,black,lightGray,Hungry1
+Buggle(1,6): north,black,lightGray,Hungry2
+Buggle(2,6): north,black,lightGray,Hungry3
+Buggle(3,6): north,black,lightGray,Hungry4
+Buggle(4,6): north,black,lightGray,Hungry5
+Buggle(5,6): north,black,lightGray,Hungry6
+Buggle(6,6): north,black,lightGray,Hungry7
+Cell(0,6): white,baggle,notopwall,noleftwall,
+Cell(1,6): white,baggle,notopwall,noleftwall,
+Cell(2,6): white,baggle,notopwall,noleftwall,
+Cell(3,6): white,baggle,notopwall,noleftwall,
+Cell(4,6): white,baggle,notopwall,noleftwall,
+Cell(5,6): white,baggle,notopwall,noleftwall,
+Cell(6,6): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/loop/forloop/LoopForEntity.java b/src/lessons/welcome/loop/forloop/LoopForEntity.java
index 0259f39..d18d6c2 100644
--- a/src/lessons/welcome/loop/forloop/LoopForEntity.java
+++ b/src/lessons/welcome/loop/forloop/LoopForEntity.java
@@ -21,7 +21,7 @@ public class LoopForEntity extends jlm.universe.bugglequest.SimpleBuggle {
 			cpt++;
 			forward();
 		}
-		pickUpBaggle();
+		pickupBaggle();
 		for (int cpt2=0 ; cpt2<cpt ; cpt2++) {
 			backward();
 		}
diff --git a/src/lessons/welcome/loop/forloop/LoopForEntity.py b/src/lessons/welcome/loop/forloop/LoopForEntity.py
index 22556fe..dfb1b56 100644
--- a/src/lessons/welcome/loop/forloop/LoopForEntity.py
+++ b/src/lessons/welcome/loop/forloop/LoopForEntity.py
@@ -14,7 +14,7 @@ cpt = 0
 while not isOverBaggle():
   cpt = cpt+1
   forward()
-pickUpBaggle()
+pickupBaggle()
 for i in range(cpt):
   backward()
 dropBaggle()
diff --git a/src/lessons/welcome/loop/forloop/LoopStairs-answer0.map b/src/lessons/welcome/loop/forloop/LoopStairs-answer0.map
new file mode 100644
index 0000000..92ccc94
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopStairs-answer0.map
@@ -0,0 +1,40 @@
+BuggleWorld: Stairway to heaven
+Size: 15x9
+Buggle(14,0): east,black,pink,buggle2
+Cell(0,0): white,nobaggle,topwall,noleftwall,
+Cell(0,8): lightGray,nobaggle,notopwall,noleftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,8): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,8): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,8): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,noleftwall,
+Cell(4,7): blue,nobaggle,notopwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,leftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,6): cyan,nobaggle,notopwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,leftwall,
+Cell(6,0): white,nobaggle,topwall,noleftwall,
+Cell(6,5): green,nobaggle,notopwall,noleftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,
+Cell(7,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,5): white,nobaggle,topwall,leftwall,
+Cell(8,0): white,nobaggle,topwall,noleftwall,
+Cell(8,3): orange,nobaggle,notopwall,noleftwall,
+Cell(8,4): white,nobaggle,topwall,leftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,2): red,nobaggle,notopwall,noleftwall,
+Cell(9,3): white,nobaggle,topwall,leftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,1): magenta,nobaggle,notopwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,leftwall,
+Cell(11,0): pink,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,topwall,leftwall,
+Cell(12,0): pink,nobaggle,topwall,noleftwall,
+Cell(12,1): white,nobaggle,topwall,noleftwall,
+Cell(13,0): pink,nobaggle,topwall,noleftwall,
+Cell(13,1): white,nobaggle,topwall,noleftwall,
+Cell(14,0): pink,nobaggle,topwall,noleftwall,
+Cell(14,1): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/welcome/loop/forloop/LoopStairs.fr.html b/src/lessons/welcome/loop/forloop/LoopStairs.fr.html
new file mode 100644
index 0000000..2db1430
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopStairs.fr.html
@@ -0,0 +1,16 @@
+<h2>la voie du paradis</h2>
+
+<p>Votre buggle est un peu déprimée aujourd'hui, mais elle est face à un
+escalier magique : il mène directement au paradis, et des couleurs
+joyeuses jaillissent de partout quand on l'emprunte.</p>
+
+<p>Votre objectif est de prendre cet escalier, une marche après
+l'autre. Commencez par trouver les quatre instructions à réaliser pour
+gravir une marche, puis placez-les dans une boucle pour gravir toutes les
+marches.</p>
+
+<p>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. Et une fois que vous avez atteint le paradis,
+faites quelques pas dans votre nouvelle demeure.</p>
+ 
\ No newline at end of file
diff --git a/src/lessons/welcome/loop/forloop/LoopStairs.html b/src/lessons/welcome/loop/forloop/LoopStairs.html
new file mode 100644
index 0000000..0690190
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopStairs.html
@@ -0,0 +1,13 @@
+<h2>Stairway to Heaven</h2>
+
+<p>Your buggle feels a bit depressed today, but it's currently facing a magic stair: 
+It leads directly to heaven, and each time you walk on it, joyful colors spur all around.</p>
+
+<p>Your goal is to take this stair, one step after the other. 
+First devise the four instructions you have to give you buggle to take one stair step, 
+and then put them in a loop to take the whole stair.</p>
+
+<p>And before that, walk a bit forward to reach that stair, and ensure that you are in 
+the right situation for your loop content to run properly. And once you reach the heaven, 
+take some steps in your new home.</p>
+ 
\ No newline at end of file
diff --git a/src/lessons/welcome/loop/forloop/LoopStairs.java b/src/lessons/welcome/loop/forloop/LoopStairs.java
new file mode 100644
index 0000000..6a540bd
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopStairs.java
@@ -0,0 +1,25 @@
+package lessons.welcome.loop.forloop;
+
+import java.io.IOException;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
+import jlm.universe.World;
+import jlm.universe.bugglequest.BuggleWorld;
+
+public class LoopStairs extends ExerciseTemplated{
+	
+		public LoopStairs(Lesson lesson) throws IOException, BrokenWorldFileException {
+			super(lesson);
+			tabName = "Runner";
+					
+			/* Create initial situation */
+			World[] myWorlds = new World[] {
+					BuggleWorld.newFromFile("lessons/welcome/loop/forloop/LoopStairs")
+			};
+			
+			setup(myWorlds);
+		}
+
+}
diff --git a/src/lessons/welcome/loop/forloop/LoopStairs.map b/src/lessons/welcome/loop/forloop/LoopStairs.map
new file mode 100644
index 0000000..751273e
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopStairs.map
@@ -0,0 +1,30 @@
+BuggleWorld: Stairway to heaven
+Size: 15x9
+Buggle(0,8): east,black,black,buggle2
+Cell(0,0): white,nobaggle,topwall,noleftwall,
+Cell(0,8): lightGray,nobaggle,notopwall,noleftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,noleftwall,
+Cell(4,8): white,nobaggle,topwall,leftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,7): white,nobaggle,topwall,leftwall,
+Cell(6,0): white,nobaggle,topwall,noleftwall,
+Cell(6,6): white,nobaggle,topwall,leftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,
+Cell(7,5): white,nobaggle,topwall,leftwall,
+Cell(8,0): white,nobaggle,topwall,noleftwall,
+Cell(8,4): white,nobaggle,topwall,leftwall,
+Cell(9,0): white,nobaggle,topwall,noleftwall,
+Cell(9,3): white,nobaggle,topwall,leftwall,
+Cell(10,0): white,nobaggle,topwall,noleftwall,
+Cell(10,2): white,nobaggle,topwall,leftwall,
+Cell(11,0): white,nobaggle,topwall,noleftwall,
+Cell(11,1): white,nobaggle,topwall,leftwall,
+Cell(12,0): white,nobaggle,topwall,noleftwall,
+Cell(12,1): white,nobaggle,topwall,noleftwall,
+Cell(13,0): white,nobaggle,topwall,noleftwall,
+Cell(13,1): white,nobaggle,topwall,noleftwall,
+Cell(14,0): white,nobaggle,topwall,noleftwall,
+Cell(14,1): white,nobaggle,topwall,noleftwall,
diff --git a/src/lessons/welcome/loop/forloop/LoopStairsEntity.java b/src/lessons/welcome/loop/forloop/LoopStairsEntity.java
new file mode 100644
index 0000000..587c96b
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopStairsEntity.java
@@ -0,0 +1,57 @@
+package lessons.welcome.loop.forloop;
+
+import java.awt.Color;
+
+public class LoopStairsEntity extends jlm.universe.bugglequest.SimpleBuggle {
+	Color[] colors = new Color[] {
+			Color.blue,    Color.cyan, Color.green,  Color.yellow,
+			Color.orange,  Color.red,  Color.magenta,Color.pink,};
+	@Override
+	public void forward(int i)  { 
+		throw new RuntimeException("forward(int) forbidden in this exercise");
+	}
+	
+	int step = -3;
+	@Override
+	public void forward()  {
+		super.forward();
+		if (step<0 || step%2 == 1 || (step/2)>=colors.length) {
+			if (step < 0)
+				setBrushColor(Color.lightGray);
+			else if ((step/2)>=colors.length)
+				setBrushColor(Color.pink);
+			else
+				setBrushColor(colors[(step/2)%colors.length]);
+			brushDown();
+			brushUp();
+		}
+		step++;
+	}
+
+	@Override
+	public void backward(int i) {
+		throw new RuntimeException("backward(int) forbidden in this exercise");
+	}
+	
+	@Override
+	/* BEGIN TEMPLATE */
+	public void run() { 
+		/* BEGIN SOLUTION */
+		forward();
+		forward();
+		forward();
+		turnLeft();
+		for (int i = 0; i<8;i++) { 
+			forward();
+			turnRight();
+			forward();
+			turnLeft();
+		}
+		turnRight();
+		forward();
+		forward();
+		forward();
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/loop/forloop/LoopStairsEntity.py b/src/lessons/welcome/loop/forloop/LoopStairsEntity.py
new file mode 100644
index 0000000..a94f033
--- /dev/null
+++ b/src/lessons/welcome/loop/forloop/LoopStairsEntity.py
@@ -0,0 +1,44 @@
+import javax.swing.JOptionPane;
+
+colors = [Color.blue,    Color.cyan, Color.green,  Color.yellow,
+          Color.orange,  Color.red,  Color.magenta,Color.pink]
+
+step = -3
+def forward(i=-1):
+    global step
+    if i==-1:
+      entity.forward()
+      if step<0 or step%2 == 1 or (step/2)>=len(colors):
+          if step < 0:
+              setBrushColor(Color.lightGray)
+          elif (step/2)>=len(colors):
+              setBrushColor(Color.pink)
+          else:
+              setBrushColor(colors[(step/2)%len(colors)])
+          brushDown()
+          brushUp()
+      step += 1
+    else:
+      errorMsg("Sorry Dave, I cannot let you use forward with argument")
+def backward(i=-1):
+    if i==-1:
+      entity.backward()
+    else:
+      errorMsg("Sorry Dave, I cannot let you use backward with argument")
+      
+# BEGIN SOLUTION
+forward()
+forward()
+forward()
+turnLeft()
+for i in range(8): 
+    forward()   
+    turnRight()
+    forward()
+    turnLeft()
+        
+turnRight()
+forward()
+forward()
+forward()
+# END SOLUTION
diff --git a/src/lessons/welcome/loop/whileloop/LoopWhile-answer0.map b/src/lessons/welcome/loop/whileloop/LoopWhile-answer0.map
new file mode 100644
index 0000000..62cacb4
--- /dev/null
+++ b/src/lessons/welcome/loop/whileloop/LoopWhile-answer0.map
@@ -0,0 +1,27 @@
+BuggleWorld: Closed world
+Size: 7x7
+Buggle(0,6): north,black,lightGray,Joker 1
+Buggle(1,5): north,black,lightGray,Joker 2
+Buggle(2,4): north,black,lightGray,Joker 3
+Buggle(3,3): north,black,lightGray,Joker 4
+Buggle(4,2): north,black,lightGray,Joker 5
+Buggle(5,1): north,black,lightGray,Joker 6
+Buggle(6,0): north,black,lightGray,Joker 7
+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,topwall,leftwall,
+Cell(1,0): white,nobaggle,topwall,noleftwall,
+Cell(1,5): white,nobaggle,topwall,leftwall,
+Cell(2,0): white,nobaggle,topwall,noleftwall,
+Cell(2,4): white,nobaggle,topwall,leftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,3): white,nobaggle,topwall,leftwall,
+Cell(4,0): white,nobaggle,topwall,noleftwall,
+Cell(4,2): white,nobaggle,topwall,leftwall,
+Cell(5,0): white,nobaggle,topwall,noleftwall,
+Cell(5,1): white,nobaggle,topwall,leftwall,
+Cell(6,0): white,nobaggle,topwall,leftwall,
diff --git a/src/lessons/welcome/loop/whileloop/WhileMoria-answer0.map b/src/lessons/welcome/loop/whileloop/WhileMoria-answer0.map
new file mode 100644
index 0000000..871ddec
--- /dev/null
+++ b/src/lessons/welcome/loop/whileloop/WhileMoria-answer0.map
@@ -0,0 +1,63 @@
+BuggleWorld: Moria
+Size: 20x3
+Buggle(19,2): east,black,black,Balin
+Cell(0,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(0,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(0,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(1,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(1,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(1,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(2,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(2,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(2,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(3,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(3,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(3,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(4,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(4,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(4,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(5,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(5,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(5,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(6,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(6,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(6,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(7,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(7,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(7,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(8,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(8,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(8,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(9,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(9,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(9,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(10,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(10,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(10,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(11,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(11,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(11,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(12,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(12,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(12,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(13,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(13,1): 211/188/95,nobaggle,topwall,noleftwall,
+Cell(13,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(14,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(14,1): 222/205/135,nobaggle,topwall,noleftwall,
+Cell(14,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(15,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(15,1): 211/188/95,nobaggle,topwall,noleftwall,
+Cell(15,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(16,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(16,1): 222/205/135,nobaggle,topwall,noleftwall,
+Cell(16,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(17,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(17,1): 211/188/95,nobaggle,topwall,noleftwall,
+Cell(17,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(18,0): 211/188/95,nobaggle,topwall,leftwall,
+Cell(18,1): 222/205/135,nobaggle,notopwall,noleftwall,
+Cell(18,2): 211/188/95,nobaggle,notopwall,leftwall,
+Cell(19,0): 0/155/0,nobaggle,notopwall,leftwall,
+Cell(19,1): 0/155/0,nobaggle,notopwall,leftwall,
+Cell(19,2): 0/155/0,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/loop/whileloop/WhileMoria.fr.html b/src/lessons/welcome/loop/whileloop/WhileMoria.fr.html
new file mode 100644
index 0000000..3c84cf5
--- /dev/null
+++ b/src/lessons/welcome/loop/whileloop/WhileMoria.fr.html
@@ -0,0 +1,20 @@
+<h2>Perdu dans la Moria</h2>
+		
+<p>Votre buggle est coincé dans une mine ! Des rochers bloquent la sortie, et
+il va falloir dégager le chemin pour passer. Bon, ok, ce ne sont pas
+vraiment des rochers mais juste des baggles, et votre buggle pourrait
+facilement passer au dessus sans se fatiguer. Mais il est probablement plus
+simple de programmer votre buggle pour qu'elle déplace ces «rochers» plutôt
+que de tenter de la convaincre de passer à la suite sans avoir résolu le
+problème...</p>
+   
+<p>Donc, il vous faut trouver le premier baggle en travers de votre chemin
+(marchez vers l'est jusqu'à vous trouver au dessus d'un baggle), le
+ramasser, et retourner à l'autre extrémité du couloir pour le déposer
+(marchez vers l'ouest jusqu'à vous trouver au dessus d'un baggle puis
+reculez d'un pas). Il faut ensuite faire de même pour tous les baggles
+jusqu'à trouver la sortie. Une fois ceci fait, marchez vers l'air frais
+comme dans le monde objectif.</p>
+    
+<p>Quand vous serez parvenu à sortir de ce piège, passez à l'exercice suivant.</p>
+
diff --git a/src/lessons/welcome/loop/whileloop/WhileMoria.html b/src/lessons/welcome/loop/whileloop/WhileMoria.html
new file mode 100644
index 0000000..54d8852
--- /dev/null
+++ b/src/lessons/welcome/loop/whileloop/WhileMoria.html
@@ -0,0 +1,17 @@
+<h2>Lost in the Moria</h2>
+		
+<p>You buggle got stuck in a mine! Some rocks are blocking the exit, 
+and you will have to clear your way to the exit. Well of course these 
+are only baggles and you could simply walk away, but it will be easier 
+to program your buggle so that it moves those "rocks" than convincing your buggle 
+that it could easily walk away without solving the problem...</p>
+   
+<p>So, you have to find the first baggle blocking the exit (simply walk 
+to the east until you are over a baggle), take it and move it back to the 
+other side of the tunnel (walk to the west while you are not over a baggle, 
+and then move back one step to the east and drop your baggle), and iterate 
+until you find the exit (that is, the wall to the east side). Afterward, 
+move out as in the objective world.</p>
+    
+<p>Once you manage to escape this trap, move forward to the next exercise.</p>
+
diff --git a/src/lessons/welcome/loop/whileloop/WhileMoria.java b/src/lessons/welcome/loop/whileloop/WhileMoria.java
new file mode 100644
index 0000000..914cce1
--- /dev/null
+++ b/src/lessons/welcome/loop/whileloop/WhileMoria.java
@@ -0,0 +1,26 @@
+package lessons.welcome.loop.whileloop;
+
+import java.io.IOException;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
+import jlm.universe.World;
+import jlm.universe.bugglequest.BuggleWorld;
+
+public class WhileMoria extends ExerciseTemplated {
+
+	public WhileMoria(Lesson lesson) throws IOException, BrokenWorldFileException {
+		super(lesson);
+		tabName = "Balin";
+		
+		/* Create initial situation */
+		World[] myWorlds = new World[] {
+				BuggleWorld.newFromFile("lessons/welcome/loop/whileloop/WhileMoria"),
+		};
+		for (World w: myWorlds)
+			w.setDelay(50); // moving a bit faster than usual
+		
+		setup(myWorlds);
+	}
+}
diff --git a/src/lessons/welcome/loop/whileloop/WhileMoria.map b/src/lessons/welcome/loop/whileloop/WhileMoria.map
new file mode 100644
index 0000000..27f4662
--- /dev/null
+++ b/src/lessons/welcome/loop/whileloop/WhileMoria.map
@@ -0,0 +1,63 @@
+BuggleWorld: Moria
+Size: 20x3
+Buggle(2,1): west,black,black,Balin
+Cell(0,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(0,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(0,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(1,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(1,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(1,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(2,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(2,1): 222/205/135,nobaggle,topwall,noleftwall,
+Cell(2,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(3,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(3,1): 211/188/95,nobaggle,topwall,noleftwall,
+Cell(3,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(4,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(4,1): 222/205/135,nobaggle,topwall,noleftwall,
+Cell(4,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(5,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(5,1): 211/188/95,nobaggle,topwall,noleftwall,
+Cell(5,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(6,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(6,1): 222/205/135,nobaggle,topwall,noleftwall,
+Cell(6,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(7,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(7,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(7,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(8,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(8,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(8,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(9,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(9,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(9,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(10,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(10,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(10,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(11,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(11,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(11,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(12,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(12,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(12,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(13,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(13,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(13,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(14,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(14,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(14,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(15,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(15,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(15,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(16,0): 90/90/80,nobaggle,notopwall,noleftwall,
+Cell(16,1): 222/205/135,baggle,topwall,noleftwall,
+Cell(16,2): 90/90/80,nobaggle,topwall,noleftwall,
+Cell(17,0): 108/93/83,nobaggle,notopwall,noleftwall,
+Cell(17,1): 211/188/95,baggle,topwall,noleftwall,
+Cell(17,2): 108/93/83,nobaggle,topwall,noleftwall,
+Cell(18,0): 211/188/95,nobaggle,topwall,leftwall,
+Cell(18,1): 222/205/135,nobaggle,notopwall,noleftwall,
+Cell(18,2): 211/188/95,nobaggle,notopwall,leftwall,
+Cell(19,0): 0/155/0,nobaggle,notopwall,leftwall,
+Cell(19,1): 0/155/0,nobaggle,notopwall,leftwall,
+Cell(19,2): 0/155/0,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/loop/whileloop/WhileMoriaEntity.java b/src/lessons/welcome/loop/whileloop/WhileMoriaEntity.java
new file mode 100644
index 0000000..97b697f
--- /dev/null
+++ b/src/lessons/welcome/loop/whileloop/WhileMoriaEntity.java
@@ -0,0 +1,42 @@
+package lessons.welcome.loop.whileloop;
+
+import jlm.universe.bugglequest.SimpleBuggle;
+
+public class WhileMoriaEntity extends SimpleBuggle {
+	@Override
+	public void forward(int i)  { 
+		throw new RuntimeException("forward(int) forbidden in this exercise");
+	}
+
+	@Override
+	public void backward(int i) {
+		throw new RuntimeException("backward(int) forbidden in this exercise");
+	}
+
+	@Override
+	/* BEGIN TEMPLATE */
+	public void run() { 
+		/* BEGIN SOLUTION */
+		turnBack();
+		while (!isFacingWall()) {
+			while (!isOverBaggle() && !isFacingWall())
+				forward();
+			if (isOverBaggle()) {
+				pickupBaggle();
+				turnBack();
+				while (!isOverBaggle())
+					forward();
+				backward();
+				dropBaggle();
+				turnBack();
+				forward();
+			}
+		}
+		turnRight();
+		forward();
+		turnLeft();
+		forward();
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/loop/whileloop/WhileMoriaEntity.py b/src/lessons/welcome/loop/whileloop/WhileMoriaEntity.py
new file mode 100644
index 0000000..b1f0b23
--- /dev/null
+++ b/src/lessons/welcome/loop/whileloop/WhileMoriaEntity.py
@@ -0,0 +1,19 @@
+# BEGIN SOLUTION
+turnBack()
+while not isFacingWall():
+    while (not isOverBaggle()) and (not isFacingWall()):
+        forward()
+    if isOverBaggle():
+        pickupBaggle()
+        turnBack()
+        while not isOverBaggle():
+            forward()
+        backward()
+        dropBaggle()
+        turnBack()
+        forward()
+turnRight()
+forward()
+turnLeft()
+forward()
+# END SOLUTION
diff --git a/src/lessons/welcome/methods/args/MethodsArgs-answer0.map b/src/lessons/welcome/methods/args/MethodsArgs-answer0.map
new file mode 100644
index 0000000..7feeea2
--- /dev/null
+++ b/src/lessons/welcome/methods/args/MethodsArgs-answer0.map
@@ -0,0 +1,9 @@
+BuggleWorld: Buggles Party
+Size: 7x7
+Buggle(0,0): north,black,lightGray,Homer
+Buggle(1,0): south,black,lightGray,Bart
+Buggle(2,0): south,black,lightGray,Lisa
+Buggle(3,0): south,black,lightGray,Maggie
+Buggle(4,0): south,black,lightGray,Marge
+Buggle(5,0): north,black,lightGray,Itchy
+Buggle(6,0): north,black,lightGray,Scratchy
diff --git a/src/lessons/welcome/methods/basics/Methods-answer0.map b/src/lessons/welcome/methods/basics/Methods-answer0.map
new file mode 100644
index 0000000..03a066b
--- /dev/null
+++ b/src/lessons/welcome/methods/basics/Methods-answer0.map
@@ -0,0 +1,10 @@
+BuggleWorld: Donut World
+Size: 7x7
+Buggle(0,6): north,black,lightGray,Homer
+Cell(0,6): white,baggle,notopwall,noleftwall,
+Cell(1,6): white,baggle,notopwall,noleftwall,
+Cell(2,6): white,baggle,notopwall,noleftwall,
+Cell(3,6): white,baggle,notopwall,noleftwall,
+Cell(4,6): white,baggle,notopwall,noleftwall,
+Cell(5,6): white,baggle,notopwall,noleftwall,
+Cell(6,6): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/methods/basics/MethodsEntity.java b/src/lessons/welcome/methods/basics/MethodsEntity.java
index a56eb63..6d48921 100644
--- a/src/lessons/welcome/methods/basics/MethodsEntity.java
+++ b/src/lessons/welcome/methods/basics/MethodsEntity.java
@@ -19,7 +19,7 @@ public class MethodsEntity extends jlm.universe.bugglequest.SimpleBuggle {
 			i++;
 			forward();
 		}
-		pickUpBaggle();
+		pickupBaggle();
 		while (i>0) {
 			backward();
 			i--;
diff --git a/src/lessons/welcome/methods/basics/MethodsEntity.py b/src/lessons/welcome/methods/basics/MethodsEntity.py
index f1e8f06..3d0ed87 100644
--- a/src/lessons/welcome/methods/basics/MethodsEntity.py
+++ b/src/lessons/welcome/methods/basics/MethodsEntity.py
@@ -16,7 +16,7 @@ def goAndGet():
   while isOverBaggle() == False:
     cpt = cpt+1
     forward()
-  pickUpBaggle()
+  pickupBaggle()
   for i in range(cpt):
     backward()
   dropBaggle()
diff --git a/src/lessons/welcome/methods/doghouse/MethodsDogHouse-answer0.map b/src/lessons/welcome/methods/doghouse/MethodsDogHouse-answer0.map
new file mode 100644
index 0000000..c07ed27
--- /dev/null
+++ b/src/lessons/welcome/methods/doghouse/MethodsDogHouse-answer0.map
@@ -0,0 +1,35 @@
+BuggleWorld: World
+Size: 7x7
+Buggle(2,0): west,red,red,Puppy
+Cell(0,0): red,nobaggle,notopwall,noleftwall,
+Cell(0,1): red,nobaggle,notopwall,noleftwall,
+Cell(0,2): red,nobaggle,notopwall,noleftwall,
+Cell(0,4): red,nobaggle,notopwall,noleftwall,
+Cell(0,5): red,nobaggle,notopwall,noleftwall,
+Cell(0,6): red,nobaggle,notopwall,noleftwall,
+Cell(1,0): red,nobaggle,notopwall,noleftwall,
+Cell(1,2): red,nobaggle,notopwall,noleftwall,
+Cell(1,4): red,nobaggle,notopwall,noleftwall,
+Cell(1,6): red,nobaggle,notopwall,noleftwall,
+Cell(2,0): red,nobaggle,notopwall,noleftwall,
+Cell(2,1): red,nobaggle,notopwall,noleftwall,
+Cell(2,2): red,nobaggle,notopwall,noleftwall,
+Cell(2,4): red,nobaggle,notopwall,noleftwall,
+Cell(2,5): red,nobaggle,notopwall,noleftwall,
+Cell(2,6): red,nobaggle,notopwall,noleftwall,
+Cell(4,0): red,nobaggle,notopwall,noleftwall,
+Cell(4,1): red,nobaggle,notopwall,noleftwall,
+Cell(4,2): red,nobaggle,notopwall,noleftwall,
+Cell(4,4): red,nobaggle,notopwall,noleftwall,
+Cell(4,5): red,nobaggle,notopwall,noleftwall,
+Cell(4,6): red,nobaggle,notopwall,noleftwall,
+Cell(5,0): red,nobaggle,notopwall,noleftwall,
+Cell(5,2): red,nobaggle,notopwall,noleftwall,
+Cell(5,4): red,nobaggle,notopwall,noleftwall,
+Cell(5,6): red,nobaggle,notopwall,noleftwall,
+Cell(6,0): red,nobaggle,notopwall,noleftwall,
+Cell(6,1): red,nobaggle,notopwall,noleftwall,
+Cell(6,2): red,nobaggle,notopwall,noleftwall,
+Cell(6,4): red,nobaggle,notopwall,noleftwall,
+Cell(6,5): red,nobaggle,notopwall,noleftwall,
+Cell(6,6): red,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/methods/picture/MethodsPicture-answer0.map b/src/lessons/welcome/methods/picture/MethodsPicture-answer0.map
new file mode 100644
index 0000000..80de987
--- /dev/null
+++ b/src/lessons/welcome/methods/picture/MethodsPicture-answer0.map
@@ -0,0 +1,15 @@
+BuggleWorld: World
+Size: 5x5
+Buggle(0,4): east,black,green,Picasso
+Cell(0,1): green,nobaggle,notopwall,noleftwall,
+Cell(0,3): green,nobaggle,notopwall,noleftwall,
+Cell(1,0): blue,nobaggle,notopwall,noleftwall,
+Cell(1,2): green,nobaggle,notopwall,noleftwall,
+Cell(1,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,1): blue,nobaggle,notopwall,noleftwall,
+Cell(2,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,0): blue,nobaggle,notopwall,noleftwall,
+Cell(3,2): red,nobaggle,notopwall,noleftwall,
+Cell(3,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,1): red,nobaggle,notopwall,noleftwall,
+Cell(4,3): red,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/methods/picture2/MethodsPicture2-answer0.map b/src/lessons/welcome/methods/picture2/MethodsPicture2-answer0.map
new file mode 100644
index 0000000..8d420b4
--- /dev/null
+++ b/src/lessons/welcome/methods/picture2/MethodsPicture2-answer0.map
@@ -0,0 +1,111 @@
+BuggleWorld: World
+Size: 15x15
+Buggle(0,14): east,black,green,Picasso
+Cell(0,1): green,nobaggle,notopwall,noleftwall,
+Cell(0,3): green,nobaggle,notopwall,noleftwall,
+Cell(0,6): green,nobaggle,notopwall,noleftwall,
+Cell(0,8): green,nobaggle,notopwall,noleftwall,
+Cell(0,11): green,nobaggle,notopwall,noleftwall,
+Cell(0,13): green,nobaggle,notopwall,noleftwall,
+Cell(1,0): blue,nobaggle,notopwall,noleftwall,
+Cell(1,2): green,nobaggle,notopwall,noleftwall,
+Cell(1,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,5): blue,nobaggle,notopwall,noleftwall,
+Cell(1,7): green,nobaggle,notopwall,noleftwall,
+Cell(1,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,10): blue,nobaggle,notopwall,noleftwall,
+Cell(1,12): green,nobaggle,notopwall,noleftwall,
+Cell(1,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,1): blue,nobaggle,notopwall,noleftwall,
+Cell(2,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,6): blue,nobaggle,notopwall,noleftwall,
+Cell(2,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,11): blue,nobaggle,notopwall,noleftwall,
+Cell(2,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,0): blue,nobaggle,notopwall,noleftwall,
+Cell(3,2): red,nobaggle,notopwall,noleftwall,
+Cell(3,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,5): blue,nobaggle,notopwall,noleftwall,
+Cell(3,7): red,nobaggle,notopwall,noleftwall,
+Cell(3,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,10): blue,nobaggle,notopwall,noleftwall,
+Cell(3,12): red,nobaggle,notopwall,noleftwall,
+Cell(3,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,1): red,nobaggle,notopwall,noleftwall,
+Cell(4,3): red,nobaggle,notopwall,noleftwall,
+Cell(4,6): red,nobaggle,notopwall,noleftwall,
+Cell(4,8): red,nobaggle,notopwall,noleftwall,
+Cell(4,11): red,nobaggle,notopwall,noleftwall,
+Cell(4,13): red,nobaggle,notopwall,noleftwall,
+Cell(5,1): green,nobaggle,notopwall,noleftwall,
+Cell(5,3): green,nobaggle,notopwall,noleftwall,
+Cell(5,6): green,nobaggle,notopwall,noleftwall,
+Cell(5,8): green,nobaggle,notopwall,noleftwall,
+Cell(5,11): green,nobaggle,notopwall,noleftwall,
+Cell(5,13): green,nobaggle,notopwall,noleftwall,
+Cell(6,0): blue,nobaggle,notopwall,noleftwall,
+Cell(6,2): green,nobaggle,notopwall,noleftwall,
+Cell(6,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,5): blue,nobaggle,notopwall,noleftwall,
+Cell(6,7): green,nobaggle,notopwall,noleftwall,
+Cell(6,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,10): blue,nobaggle,notopwall,noleftwall,
+Cell(6,12): green,nobaggle,notopwall,noleftwall,
+Cell(6,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,1): blue,nobaggle,notopwall,noleftwall,
+Cell(7,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,6): blue,nobaggle,notopwall,noleftwall,
+Cell(7,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,11): blue,nobaggle,notopwall,noleftwall,
+Cell(7,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,0): blue,nobaggle,notopwall,noleftwall,
+Cell(8,2): red,nobaggle,notopwall,noleftwall,
+Cell(8,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,5): blue,nobaggle,notopwall,noleftwall,
+Cell(8,7): red,nobaggle,notopwall,noleftwall,
+Cell(8,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,10): blue,nobaggle,notopwall,noleftwall,
+Cell(8,12): red,nobaggle,notopwall,noleftwall,
+Cell(8,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,1): red,nobaggle,notopwall,noleftwall,
+Cell(9,3): red,nobaggle,notopwall,noleftwall,
+Cell(9,6): red,nobaggle,notopwall,noleftwall,
+Cell(9,8): red,nobaggle,notopwall,noleftwall,
+Cell(9,11): red,nobaggle,notopwall,noleftwall,
+Cell(9,13): red,nobaggle,notopwall,noleftwall,
+Cell(10,1): green,nobaggle,notopwall,noleftwall,
+Cell(10,3): green,nobaggle,notopwall,noleftwall,
+Cell(10,6): green,nobaggle,notopwall,noleftwall,
+Cell(10,8): green,nobaggle,notopwall,noleftwall,
+Cell(10,11): green,nobaggle,notopwall,noleftwall,
+Cell(10,13): green,nobaggle,notopwall,noleftwall,
+Cell(11,0): blue,nobaggle,notopwall,noleftwall,
+Cell(11,2): green,nobaggle,notopwall,noleftwall,
+Cell(11,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,5): blue,nobaggle,notopwall,noleftwall,
+Cell(11,7): green,nobaggle,notopwall,noleftwall,
+Cell(11,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,10): blue,nobaggle,notopwall,noleftwall,
+Cell(11,12): green,nobaggle,notopwall,noleftwall,
+Cell(11,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,1): blue,nobaggle,notopwall,noleftwall,
+Cell(12,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,6): blue,nobaggle,notopwall,noleftwall,
+Cell(12,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,11): blue,nobaggle,notopwall,noleftwall,
+Cell(12,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,0): blue,nobaggle,notopwall,noleftwall,
+Cell(13,2): red,nobaggle,notopwall,noleftwall,
+Cell(13,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,5): blue,nobaggle,notopwall,noleftwall,
+Cell(13,7): red,nobaggle,notopwall,noleftwall,
+Cell(13,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,10): blue,nobaggle,notopwall,noleftwall,
+Cell(13,12): red,nobaggle,notopwall,noleftwall,
+Cell(13,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,1): red,nobaggle,notopwall,noleftwall,
+Cell(14,3): red,nobaggle,notopwall,noleftwall,
+Cell(14,6): red,nobaggle,notopwall,noleftwall,
+Cell(14,8): red,nobaggle,notopwall,noleftwall,
+Cell(14,11): red,nobaggle,notopwall,noleftwall,
+Cell(14,13): red,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/methods/picture3/MethodsPicture3-answer0.map b/src/lessons/welcome/methods/picture3/MethodsPicture3-answer0.map
new file mode 100644
index 0000000..1510347
--- /dev/null
+++ b/src/lessons/welcome/methods/picture3/MethodsPicture3-answer0.map
@@ -0,0 +1,975 @@
+BuggleWorld: World
+Size: 45x45
+Buggle(0,44): east,black,green,Picasso
+Cell(0,1): green,nobaggle,notopwall,noleftwall,
+Cell(0,3): green,nobaggle,notopwall,noleftwall,
+Cell(0,6): green,nobaggle,notopwall,noleftwall,
+Cell(0,8): green,nobaggle,notopwall,noleftwall,
+Cell(0,11): green,nobaggle,notopwall,noleftwall,
+Cell(0,13): green,nobaggle,notopwall,noleftwall,
+Cell(0,16): green,nobaggle,notopwall,noleftwall,
+Cell(0,18): green,nobaggle,notopwall,noleftwall,
+Cell(0,21): green,nobaggle,notopwall,noleftwall,
+Cell(0,23): green,nobaggle,notopwall,noleftwall,
+Cell(0,26): green,nobaggle,notopwall,noleftwall,
+Cell(0,28): green,nobaggle,notopwall,noleftwall,
+Cell(0,31): green,nobaggle,notopwall,noleftwall,
+Cell(0,33): green,nobaggle,notopwall,noleftwall,
+Cell(0,36): green,nobaggle,notopwall,noleftwall,
+Cell(0,38): green,nobaggle,notopwall,noleftwall,
+Cell(0,41): green,nobaggle,notopwall,noleftwall,
+Cell(0,43): green,nobaggle,notopwall,noleftwall,
+Cell(1,0): blue,nobaggle,notopwall,noleftwall,
+Cell(1,2): green,nobaggle,notopwall,noleftwall,
+Cell(1,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,5): blue,nobaggle,notopwall,noleftwall,
+Cell(1,7): green,nobaggle,notopwall,noleftwall,
+Cell(1,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,10): blue,nobaggle,notopwall,noleftwall,
+Cell(1,12): green,nobaggle,notopwall,noleftwall,
+Cell(1,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,15): blue,nobaggle,notopwall,noleftwall,
+Cell(1,17): green,nobaggle,notopwall,noleftwall,
+Cell(1,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,20): blue,nobaggle,notopwall,noleftwall,
+Cell(1,22): green,nobaggle,notopwall,noleftwall,
+Cell(1,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,25): blue,nobaggle,notopwall,noleftwall,
+Cell(1,27): green,nobaggle,notopwall,noleftwall,
+Cell(1,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,30): blue,nobaggle,notopwall,noleftwall,
+Cell(1,32): green,nobaggle,notopwall,noleftwall,
+Cell(1,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,35): blue,nobaggle,notopwall,noleftwall,
+Cell(1,37): green,nobaggle,notopwall,noleftwall,
+Cell(1,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,40): blue,nobaggle,notopwall,noleftwall,
+Cell(1,42): green,nobaggle,notopwall,noleftwall,
+Cell(1,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,1): blue,nobaggle,notopwall,noleftwall,
+Cell(2,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,6): blue,nobaggle,notopwall,noleftwall,
+Cell(2,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,11): blue,nobaggle,notopwall,noleftwall,
+Cell(2,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,16): blue,nobaggle,notopwall,noleftwall,
+Cell(2,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,21): blue,nobaggle,notopwall,noleftwall,
+Cell(2,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,26): blue,nobaggle,notopwall,noleftwall,
+Cell(2,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,31): blue,nobaggle,notopwall,noleftwall,
+Cell(2,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,36): blue,nobaggle,notopwall,noleftwall,
+Cell(2,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(2,41): blue,nobaggle,notopwall,noleftwall,
+Cell(2,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,0): blue,nobaggle,notopwall,noleftwall,
+Cell(3,2): red,nobaggle,notopwall,noleftwall,
+Cell(3,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,5): blue,nobaggle,notopwall,noleftwall,
+Cell(3,7): red,nobaggle,notopwall,noleftwall,
+Cell(3,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,10): blue,nobaggle,notopwall,noleftwall,
+Cell(3,12): red,nobaggle,notopwall,noleftwall,
+Cell(3,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,15): blue,nobaggle,notopwall,noleftwall,
+Cell(3,17): red,nobaggle,notopwall,noleftwall,
+Cell(3,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,20): blue,nobaggle,notopwall,noleftwall,
+Cell(3,22): red,nobaggle,notopwall,noleftwall,
+Cell(3,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,25): blue,nobaggle,notopwall,noleftwall,
+Cell(3,27): red,nobaggle,notopwall,noleftwall,
+Cell(3,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,30): blue,nobaggle,notopwall,noleftwall,
+Cell(3,32): red,nobaggle,notopwall,noleftwall,
+Cell(3,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,35): blue,nobaggle,notopwall,noleftwall,
+Cell(3,37): red,nobaggle,notopwall,noleftwall,
+Cell(3,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(3,40): blue,nobaggle,notopwall,noleftwall,
+Cell(3,42): red,nobaggle,notopwall,noleftwall,
+Cell(3,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,1): red,nobaggle,notopwall,noleftwall,
+Cell(4,3): red,nobaggle,notopwall,noleftwall,
+Cell(4,6): red,nobaggle,notopwall,noleftwall,
+Cell(4,8): red,nobaggle,notopwall,noleftwall,
+Cell(4,11): red,nobaggle,notopwall,noleftwall,
+Cell(4,13): red,nobaggle,notopwall,noleftwall,
+Cell(4,16): red,nobaggle,notopwall,noleftwall,
+Cell(4,18): red,nobaggle,notopwall,noleftwall,
+Cell(4,21): red,nobaggle,notopwall,noleftwall,
+Cell(4,23): red,nobaggle,notopwall,noleftwall,
+Cell(4,26): red,nobaggle,notopwall,noleftwall,
+Cell(4,28): red,nobaggle,notopwall,noleftwall,
+Cell(4,31): red,nobaggle,notopwall,noleftwall,
+Cell(4,33): red,nobaggle,notopwall,noleftwall,
+Cell(4,36): red,nobaggle,notopwall,noleftwall,
+Cell(4,38): red,nobaggle,notopwall,noleftwall,
+Cell(4,41): red,nobaggle,notopwall,noleftwall,
+Cell(4,43): red,nobaggle,notopwall,noleftwall,
+Cell(5,1): green,nobaggle,notopwall,noleftwall,
+Cell(5,3): green,nobaggle,notopwall,noleftwall,
+Cell(5,6): green,nobaggle,notopwall,noleftwall,
+Cell(5,8): green,nobaggle,notopwall,noleftwall,
+Cell(5,11): green,nobaggle,notopwall,noleftwall,
+Cell(5,13): green,nobaggle,notopwall,noleftwall,
+Cell(5,16): green,nobaggle,notopwall,noleftwall,
+Cell(5,18): green,nobaggle,notopwall,noleftwall,
+Cell(5,21): green,nobaggle,notopwall,noleftwall,
+Cell(5,23): green,nobaggle,notopwall,noleftwall,
+Cell(5,26): green,nobaggle,notopwall,noleftwall,
+Cell(5,28): green,nobaggle,notopwall,noleftwall,
+Cell(5,31): green,nobaggle,notopwall,noleftwall,
+Cell(5,33): green,nobaggle,notopwall,noleftwall,
+Cell(5,36): green,nobaggle,notopwall,noleftwall,
+Cell(5,38): green,nobaggle,notopwall,noleftwall,
+Cell(5,41): green,nobaggle,notopwall,noleftwall,
+Cell(5,43): green,nobaggle,notopwall,noleftwall,
+Cell(6,0): blue,nobaggle,notopwall,noleftwall,
+Cell(6,2): green,nobaggle,notopwall,noleftwall,
+Cell(6,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,5): blue,nobaggle,notopwall,noleftwall,
+Cell(6,7): green,nobaggle,notopwall,noleftwall,
+Cell(6,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,10): blue,nobaggle,notopwall,noleftwall,
+Cell(6,12): green,nobaggle,notopwall,noleftwall,
+Cell(6,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,15): blue,nobaggle,notopwall,noleftwall,
+Cell(6,17): green,nobaggle,notopwall,noleftwall,
+Cell(6,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,20): blue,nobaggle,notopwall,noleftwall,
+Cell(6,22): green,nobaggle,notopwall,noleftwall,
+Cell(6,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,25): blue,nobaggle,notopwall,noleftwall,
+Cell(6,27): green,nobaggle,notopwall,noleftwall,
+Cell(6,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,30): blue,nobaggle,notopwall,noleftwall,
+Cell(6,32): green,nobaggle,notopwall,noleftwall,
+Cell(6,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,35): blue,nobaggle,notopwall,noleftwall,
+Cell(6,37): green,nobaggle,notopwall,noleftwall,
+Cell(6,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(6,40): blue,nobaggle,notopwall,noleftwall,
+Cell(6,42): green,nobaggle,notopwall,noleftwall,
+Cell(6,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,1): blue,nobaggle,notopwall,noleftwall,
+Cell(7,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,6): blue,nobaggle,notopwall,noleftwall,
+Cell(7,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,11): blue,nobaggle,notopwall,noleftwall,
+Cell(7,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,16): blue,nobaggle,notopwall,noleftwall,
+Cell(7,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,21): blue,nobaggle,notopwall,noleftwall,
+Cell(7,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,26): blue,nobaggle,notopwall,noleftwall,
+Cell(7,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,31): blue,nobaggle,notopwall,noleftwall,
+Cell(7,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,36): blue,nobaggle,notopwall,noleftwall,
+Cell(7,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(7,41): blue,nobaggle,notopwall,noleftwall,
+Cell(7,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,0): blue,nobaggle,notopwall,noleftwall,
+Cell(8,2): red,nobaggle,notopwall,noleftwall,
+Cell(8,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,5): blue,nobaggle,notopwall,noleftwall,
+Cell(8,7): red,nobaggle,notopwall,noleftwall,
+Cell(8,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,10): blue,nobaggle,notopwall,noleftwall,
+Cell(8,12): red,nobaggle,notopwall,noleftwall,
+Cell(8,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,15): blue,nobaggle,notopwall,noleftwall,
+Cell(8,17): red,nobaggle,notopwall,noleftwall,
+Cell(8,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,20): blue,nobaggle,notopwall,noleftwall,
+Cell(8,22): red,nobaggle,notopwall,noleftwall,
+Cell(8,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,25): blue,nobaggle,notopwall,noleftwall,
+Cell(8,27): red,nobaggle,notopwall,noleftwall,
+Cell(8,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,30): blue,nobaggle,notopwall,noleftwall,
+Cell(8,32): red,nobaggle,notopwall,noleftwall,
+Cell(8,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,35): blue,nobaggle,notopwall,noleftwall,
+Cell(8,37): red,nobaggle,notopwall,noleftwall,
+Cell(8,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(8,40): blue,nobaggle,notopwall,noleftwall,
+Cell(8,42): red,nobaggle,notopwall,noleftwall,
+Cell(8,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(9,1): red,nobaggle,notopwall,noleftwall,
+Cell(9,3): red,nobaggle,notopwall,noleftwall,
+Cell(9,6): red,nobaggle,notopwall,noleftwall,
+Cell(9,8): red,nobaggle,notopwall,noleftwall,
+Cell(9,11): red,nobaggle,notopwall,noleftwall,
+Cell(9,13): red,nobaggle,notopwall,noleftwall,
+Cell(9,16): red,nobaggle,notopwall,noleftwall,
+Cell(9,18): red,nobaggle,notopwall,noleftwall,
+Cell(9,21): red,nobaggle,notopwall,noleftwall,
+Cell(9,23): red,nobaggle,notopwall,noleftwall,
+Cell(9,26): red,nobaggle,notopwall,noleftwall,
+Cell(9,28): red,nobaggle,notopwall,noleftwall,
+Cell(9,31): red,nobaggle,notopwall,noleftwall,
+Cell(9,33): red,nobaggle,notopwall,noleftwall,
+Cell(9,36): red,nobaggle,notopwall,noleftwall,
+Cell(9,38): red,nobaggle,notopwall,noleftwall,
+Cell(9,41): red,nobaggle,notopwall,noleftwall,
+Cell(9,43): red,nobaggle,notopwall,noleftwall,
+Cell(10,1): green,nobaggle,notopwall,noleftwall,
+Cell(10,3): green,nobaggle,notopwall,noleftwall,
+Cell(10,6): green,nobaggle,notopwall,noleftwall,
+Cell(10,8): green,nobaggle,notopwall,noleftwall,
+Cell(10,11): green,nobaggle,notopwall,noleftwall,
+Cell(10,13): green,nobaggle,notopwall,noleftwall,
+Cell(10,16): green,nobaggle,notopwall,noleftwall,
+Cell(10,18): green,nobaggle,notopwall,noleftwall,
+Cell(10,21): green,nobaggle,notopwall,noleftwall,
+Cell(10,23): green,nobaggle,notopwall,noleftwall,
+Cell(10,26): green,nobaggle,notopwall,noleftwall,
+Cell(10,28): green,nobaggle,notopwall,noleftwall,
+Cell(10,31): green,nobaggle,notopwall,noleftwall,
+Cell(10,33): green,nobaggle,notopwall,noleftwall,
+Cell(10,36): green,nobaggle,notopwall,noleftwall,
+Cell(10,38): green,nobaggle,notopwall,noleftwall,
+Cell(10,41): green,nobaggle,notopwall,noleftwall,
+Cell(10,43): green,nobaggle,notopwall,noleftwall,
+Cell(11,0): blue,nobaggle,notopwall,noleftwall,
+Cell(11,2): green,nobaggle,notopwall,noleftwall,
+Cell(11,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,5): blue,nobaggle,notopwall,noleftwall,
+Cell(11,7): green,nobaggle,notopwall,noleftwall,
+Cell(11,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,10): blue,nobaggle,notopwall,noleftwall,
+Cell(11,12): green,nobaggle,notopwall,noleftwall,
+Cell(11,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,15): blue,nobaggle,notopwall,noleftwall,
+Cell(11,17): green,nobaggle,notopwall,noleftwall,
+Cell(11,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,20): blue,nobaggle,notopwall,noleftwall,
+Cell(11,22): green,nobaggle,notopwall,noleftwall,
+Cell(11,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,25): blue,nobaggle,notopwall,noleftwall,
+Cell(11,27): green,nobaggle,notopwall,noleftwall,
+Cell(11,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,30): blue,nobaggle,notopwall,noleftwall,
+Cell(11,32): green,nobaggle,notopwall,noleftwall,
+Cell(11,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,35): blue,nobaggle,notopwall,noleftwall,
+Cell(11,37): green,nobaggle,notopwall,noleftwall,
+Cell(11,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(11,40): blue,nobaggle,notopwall,noleftwall,
+Cell(11,42): green,nobaggle,notopwall,noleftwall,
+Cell(11,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,1): blue,nobaggle,notopwall,noleftwall,
+Cell(12,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,6): blue,nobaggle,notopwall,noleftwall,
+Cell(12,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,11): blue,nobaggle,notopwall,noleftwall,
+Cell(12,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,16): blue,nobaggle,notopwall,noleftwall,
+Cell(12,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,21): blue,nobaggle,notopwall,noleftwall,
+Cell(12,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,26): blue,nobaggle,notopwall,noleftwall,
+Cell(12,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,31): blue,nobaggle,notopwall,noleftwall,
+Cell(12,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,36): blue,nobaggle,notopwall,noleftwall,
+Cell(12,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(12,41): blue,nobaggle,notopwall,noleftwall,
+Cell(12,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,0): blue,nobaggle,notopwall,noleftwall,
+Cell(13,2): red,nobaggle,notopwall,noleftwall,
+Cell(13,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,5): blue,nobaggle,notopwall,noleftwall,
+Cell(13,7): red,nobaggle,notopwall,noleftwall,
+Cell(13,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,10): blue,nobaggle,notopwall,noleftwall,
+Cell(13,12): red,nobaggle,notopwall,noleftwall,
+Cell(13,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,15): blue,nobaggle,notopwall,noleftwall,
+Cell(13,17): red,nobaggle,notopwall,noleftwall,
+Cell(13,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,20): blue,nobaggle,notopwall,noleftwall,
+Cell(13,22): red,nobaggle,notopwall,noleftwall,
+Cell(13,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,25): blue,nobaggle,notopwall,noleftwall,
+Cell(13,27): red,nobaggle,notopwall,noleftwall,
+Cell(13,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,30): blue,nobaggle,notopwall,noleftwall,
+Cell(13,32): red,nobaggle,notopwall,noleftwall,
+Cell(13,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,35): blue,nobaggle,notopwall,noleftwall,
+Cell(13,37): red,nobaggle,notopwall,noleftwall,
+Cell(13,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(13,40): blue,nobaggle,notopwall,noleftwall,
+Cell(13,42): red,nobaggle,notopwall,noleftwall,
+Cell(13,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(14,1): red,nobaggle,notopwall,noleftwall,
+Cell(14,3): red,nobaggle,notopwall,noleftwall,
+Cell(14,6): red,nobaggle,notopwall,noleftwall,
+Cell(14,8): red,nobaggle,notopwall,noleftwall,
+Cell(14,11): red,nobaggle,notopwall,noleftwall,
+Cell(14,13): red,nobaggle,notopwall,noleftwall,
+Cell(14,16): red,nobaggle,notopwall,noleftwall,
+Cell(14,18): red,nobaggle,notopwall,noleftwall,
+Cell(14,21): red,nobaggle,notopwall,noleftwall,
+Cell(14,23): red,nobaggle,notopwall,noleftwall,
+Cell(14,26): red,nobaggle,notopwall,noleftwall,
+Cell(14,28): red,nobaggle,notopwall,noleftwall,
+Cell(14,31): red,nobaggle,notopwall,noleftwall,
+Cell(14,33): red,nobaggle,notopwall,noleftwall,
+Cell(14,36): red,nobaggle,notopwall,noleftwall,
+Cell(14,38): red,nobaggle,notopwall,noleftwall,
+Cell(14,41): red,nobaggle,notopwall,noleftwall,
+Cell(14,43): red,nobaggle,notopwall,noleftwall,
+Cell(15,1): green,nobaggle,notopwall,noleftwall,
+Cell(15,3): green,nobaggle,notopwall,noleftwall,
+Cell(15,6): green,nobaggle,notopwall,noleftwall,
+Cell(15,8): green,nobaggle,notopwall,noleftwall,
+Cell(15,11): green,nobaggle,notopwall,noleftwall,
+Cell(15,13): green,nobaggle,notopwall,noleftwall,
+Cell(15,16): green,nobaggle,notopwall,noleftwall,
+Cell(15,18): green,nobaggle,notopwall,noleftwall,
+Cell(15,21): green,nobaggle,notopwall,noleftwall,
+Cell(15,23): green,nobaggle,notopwall,noleftwall,
+Cell(15,26): green,nobaggle,notopwall,noleftwall,
+Cell(15,28): green,nobaggle,notopwall,noleftwall,
+Cell(15,31): green,nobaggle,notopwall,noleftwall,
+Cell(15,33): green,nobaggle,notopwall,noleftwall,
+Cell(15,36): green,nobaggle,notopwall,noleftwall,
+Cell(15,38): green,nobaggle,notopwall,noleftwall,
+Cell(15,41): green,nobaggle,notopwall,noleftwall,
+Cell(15,43): green,nobaggle,notopwall,noleftwall,
+Cell(16,0): blue,nobaggle,notopwall,noleftwall,
+Cell(16,2): green,nobaggle,notopwall,noleftwall,
+Cell(16,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,5): blue,nobaggle,notopwall,noleftwall,
+Cell(16,7): green,nobaggle,notopwall,noleftwall,
+Cell(16,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,10): blue,nobaggle,notopwall,noleftwall,
+Cell(16,12): green,nobaggle,notopwall,noleftwall,
+Cell(16,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,15): blue,nobaggle,notopwall,noleftwall,
+Cell(16,17): green,nobaggle,notopwall,noleftwall,
+Cell(16,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,20): blue,nobaggle,notopwall,noleftwall,
+Cell(16,22): green,nobaggle,notopwall,noleftwall,
+Cell(16,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,25): blue,nobaggle,notopwall,noleftwall,
+Cell(16,27): green,nobaggle,notopwall,noleftwall,
+Cell(16,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,30): blue,nobaggle,notopwall,noleftwall,
+Cell(16,32): green,nobaggle,notopwall,noleftwall,
+Cell(16,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,35): blue,nobaggle,notopwall,noleftwall,
+Cell(16,37): green,nobaggle,notopwall,noleftwall,
+Cell(16,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(16,40): blue,nobaggle,notopwall,noleftwall,
+Cell(16,42): green,nobaggle,notopwall,noleftwall,
+Cell(16,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,1): blue,nobaggle,notopwall,noleftwall,
+Cell(17,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,6): blue,nobaggle,notopwall,noleftwall,
+Cell(17,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,11): blue,nobaggle,notopwall,noleftwall,
+Cell(17,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,16): blue,nobaggle,notopwall,noleftwall,
+Cell(17,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,21): blue,nobaggle,notopwall,noleftwall,
+Cell(17,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,26): blue,nobaggle,notopwall,noleftwall,
+Cell(17,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,31): blue,nobaggle,notopwall,noleftwall,
+Cell(17,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,36): blue,nobaggle,notopwall,noleftwall,
+Cell(17,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(17,41): blue,nobaggle,notopwall,noleftwall,
+Cell(17,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,0): blue,nobaggle,notopwall,noleftwall,
+Cell(18,2): red,nobaggle,notopwall,noleftwall,
+Cell(18,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,5): blue,nobaggle,notopwall,noleftwall,
+Cell(18,7): red,nobaggle,notopwall,noleftwall,
+Cell(18,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,10): blue,nobaggle,notopwall,noleftwall,
+Cell(18,12): red,nobaggle,notopwall,noleftwall,
+Cell(18,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,15): blue,nobaggle,notopwall,noleftwall,
+Cell(18,17): red,nobaggle,notopwall,noleftwall,
+Cell(18,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,20): blue,nobaggle,notopwall,noleftwall,
+Cell(18,22): red,nobaggle,notopwall,noleftwall,
+Cell(18,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,25): blue,nobaggle,notopwall,noleftwall,
+Cell(18,27): red,nobaggle,notopwall,noleftwall,
+Cell(18,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,30): blue,nobaggle,notopwall,noleftwall,
+Cell(18,32): red,nobaggle,notopwall,noleftwall,
+Cell(18,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,35): blue,nobaggle,notopwall,noleftwall,
+Cell(18,37): red,nobaggle,notopwall,noleftwall,
+Cell(18,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(18,40): blue,nobaggle,notopwall,noleftwall,
+Cell(18,42): red,nobaggle,notopwall,noleftwall,
+Cell(18,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(19,1): red,nobaggle,notopwall,noleftwall,
+Cell(19,3): red,nobaggle,notopwall,noleftwall,
+Cell(19,6): red,nobaggle,notopwall,noleftwall,
+Cell(19,8): red,nobaggle,notopwall,noleftwall,
+Cell(19,11): red,nobaggle,notopwall,noleftwall,
+Cell(19,13): red,nobaggle,notopwall,noleftwall,
+Cell(19,16): red,nobaggle,notopwall,noleftwall,
+Cell(19,18): red,nobaggle,notopwall,noleftwall,
+Cell(19,21): red,nobaggle,notopwall,noleftwall,
+Cell(19,23): red,nobaggle,notopwall,noleftwall,
+Cell(19,26): red,nobaggle,notopwall,noleftwall,
+Cell(19,28): red,nobaggle,notopwall,noleftwall,
+Cell(19,31): red,nobaggle,notopwall,noleftwall,
+Cell(19,33): red,nobaggle,notopwall,noleftwall,
+Cell(19,36): red,nobaggle,notopwall,noleftwall,
+Cell(19,38): red,nobaggle,notopwall,noleftwall,
+Cell(19,41): red,nobaggle,notopwall,noleftwall,
+Cell(19,43): red,nobaggle,notopwall,noleftwall,
+Cell(20,1): green,nobaggle,notopwall,noleftwall,
+Cell(20,3): green,nobaggle,notopwall,noleftwall,
+Cell(20,6): green,nobaggle,notopwall,noleftwall,
+Cell(20,8): green,nobaggle,notopwall,noleftwall,
+Cell(20,11): green,nobaggle,notopwall,noleftwall,
+Cell(20,13): green,nobaggle,notopwall,noleftwall,
+Cell(20,16): green,nobaggle,notopwall,noleftwall,
+Cell(20,18): green,nobaggle,notopwall,noleftwall,
+Cell(20,21): green,nobaggle,notopwall,noleftwall,
+Cell(20,23): green,nobaggle,notopwall,noleftwall,
+Cell(20,26): green,nobaggle,notopwall,noleftwall,
+Cell(20,28): green,nobaggle,notopwall,noleftwall,
+Cell(20,31): green,nobaggle,notopwall,noleftwall,
+Cell(20,33): green,nobaggle,notopwall,noleftwall,
+Cell(20,36): green,nobaggle,notopwall,noleftwall,
+Cell(20,38): green,nobaggle,notopwall,noleftwall,
+Cell(20,41): green,nobaggle,notopwall,noleftwall,
+Cell(20,43): green,nobaggle,notopwall,noleftwall,
+Cell(21,0): blue,nobaggle,notopwall,noleftwall,
+Cell(21,2): green,nobaggle,notopwall,noleftwall,
+Cell(21,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,5): blue,nobaggle,notopwall,noleftwall,
+Cell(21,7): green,nobaggle,notopwall,noleftwall,
+Cell(21,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,10): blue,nobaggle,notopwall,noleftwall,
+Cell(21,12): green,nobaggle,notopwall,noleftwall,
+Cell(21,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,15): blue,nobaggle,notopwall,noleftwall,
+Cell(21,17): green,nobaggle,notopwall,noleftwall,
+Cell(21,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,20): blue,nobaggle,notopwall,noleftwall,
+Cell(21,22): green,nobaggle,notopwall,noleftwall,
+Cell(21,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,25): blue,nobaggle,notopwall,noleftwall,
+Cell(21,27): green,nobaggle,notopwall,noleftwall,
+Cell(21,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,30): blue,nobaggle,notopwall,noleftwall,
+Cell(21,32): green,nobaggle,notopwall,noleftwall,
+Cell(21,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,35): blue,nobaggle,notopwall,noleftwall,
+Cell(21,37): green,nobaggle,notopwall,noleftwall,
+Cell(21,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(21,40): blue,nobaggle,notopwall,noleftwall,
+Cell(21,42): green,nobaggle,notopwall,noleftwall,
+Cell(21,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,1): blue,nobaggle,notopwall,noleftwall,
+Cell(22,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,6): blue,nobaggle,notopwall,noleftwall,
+Cell(22,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,11): blue,nobaggle,notopwall,noleftwall,
+Cell(22,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,16): blue,nobaggle,notopwall,noleftwall,
+Cell(22,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,21): blue,nobaggle,notopwall,noleftwall,
+Cell(22,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,26): blue,nobaggle,notopwall,noleftwall,
+Cell(22,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,31): blue,nobaggle,notopwall,noleftwall,
+Cell(22,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,36): blue,nobaggle,notopwall,noleftwall,
+Cell(22,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(22,41): blue,nobaggle,notopwall,noleftwall,
+Cell(22,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,0): blue,nobaggle,notopwall,noleftwall,
+Cell(23,2): red,nobaggle,notopwall,noleftwall,
+Cell(23,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,5): blue,nobaggle,notopwall,noleftwall,
+Cell(23,7): red,nobaggle,notopwall,noleftwall,
+Cell(23,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,10): blue,nobaggle,notopwall,noleftwall,
+Cell(23,12): red,nobaggle,notopwall,noleftwall,
+Cell(23,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,15): blue,nobaggle,notopwall,noleftwall,
+Cell(23,17): red,nobaggle,notopwall,noleftwall,
+Cell(23,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,20): blue,nobaggle,notopwall,noleftwall,
+Cell(23,22): red,nobaggle,notopwall,noleftwall,
+Cell(23,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,25): blue,nobaggle,notopwall,noleftwall,
+Cell(23,27): red,nobaggle,notopwall,noleftwall,
+Cell(23,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,30): blue,nobaggle,notopwall,noleftwall,
+Cell(23,32): red,nobaggle,notopwall,noleftwall,
+Cell(23,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,35): blue,nobaggle,notopwall,noleftwall,
+Cell(23,37): red,nobaggle,notopwall,noleftwall,
+Cell(23,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(23,40): blue,nobaggle,notopwall,noleftwall,
+Cell(23,42): red,nobaggle,notopwall,noleftwall,
+Cell(23,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(24,1): red,nobaggle,notopwall,noleftwall,
+Cell(24,3): red,nobaggle,notopwall,noleftwall,
+Cell(24,6): red,nobaggle,notopwall,noleftwall,
+Cell(24,8): red,nobaggle,notopwall,noleftwall,
+Cell(24,11): red,nobaggle,notopwall,noleftwall,
+Cell(24,13): red,nobaggle,notopwall,noleftwall,
+Cell(24,16): red,nobaggle,notopwall,noleftwall,
+Cell(24,18): red,nobaggle,notopwall,noleftwall,
+Cell(24,21): red,nobaggle,notopwall,noleftwall,
+Cell(24,23): red,nobaggle,notopwall,noleftwall,
+Cell(24,26): red,nobaggle,notopwall,noleftwall,
+Cell(24,28): red,nobaggle,notopwall,noleftwall,
+Cell(24,31): red,nobaggle,notopwall,noleftwall,
+Cell(24,33): red,nobaggle,notopwall,noleftwall,
+Cell(24,36): red,nobaggle,notopwall,noleftwall,
+Cell(24,38): red,nobaggle,notopwall,noleftwall,
+Cell(24,41): red,nobaggle,notopwall,noleftwall,
+Cell(24,43): red,nobaggle,notopwall,noleftwall,
+Cell(25,1): green,nobaggle,notopwall,noleftwall,
+Cell(25,3): green,nobaggle,notopwall,noleftwall,
+Cell(25,6): green,nobaggle,notopwall,noleftwall,
+Cell(25,8): green,nobaggle,notopwall,noleftwall,
+Cell(25,11): green,nobaggle,notopwall,noleftwall,
+Cell(25,13): green,nobaggle,notopwall,noleftwall,
+Cell(25,16): green,nobaggle,notopwall,noleftwall,
+Cell(25,18): green,nobaggle,notopwall,noleftwall,
+Cell(25,21): green,nobaggle,notopwall,noleftwall,
+Cell(25,23): green,nobaggle,notopwall,noleftwall,
+Cell(25,26): green,nobaggle,notopwall,noleftwall,
+Cell(25,28): green,nobaggle,notopwall,noleftwall,
+Cell(25,31): green,nobaggle,notopwall,noleftwall,
+Cell(25,33): green,nobaggle,notopwall,noleftwall,
+Cell(25,36): green,nobaggle,notopwall,noleftwall,
+Cell(25,38): green,nobaggle,notopwall,noleftwall,
+Cell(25,41): green,nobaggle,notopwall,noleftwall,
+Cell(25,43): green,nobaggle,notopwall,noleftwall,
+Cell(26,0): blue,nobaggle,notopwall,noleftwall,
+Cell(26,2): green,nobaggle,notopwall,noleftwall,
+Cell(26,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,5): blue,nobaggle,notopwall,noleftwall,
+Cell(26,7): green,nobaggle,notopwall,noleftwall,
+Cell(26,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,10): blue,nobaggle,notopwall,noleftwall,
+Cell(26,12): green,nobaggle,notopwall,noleftwall,
+Cell(26,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,15): blue,nobaggle,notopwall,noleftwall,
+Cell(26,17): green,nobaggle,notopwall,noleftwall,
+Cell(26,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,20): blue,nobaggle,notopwall,noleftwall,
+Cell(26,22): green,nobaggle,notopwall,noleftwall,
+Cell(26,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,25): blue,nobaggle,notopwall,noleftwall,
+Cell(26,27): green,nobaggle,notopwall,noleftwall,
+Cell(26,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,30): blue,nobaggle,notopwall,noleftwall,
+Cell(26,32): green,nobaggle,notopwall,noleftwall,
+Cell(26,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,35): blue,nobaggle,notopwall,noleftwall,
+Cell(26,37): green,nobaggle,notopwall,noleftwall,
+Cell(26,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(26,40): blue,nobaggle,notopwall,noleftwall,
+Cell(26,42): green,nobaggle,notopwall,noleftwall,
+Cell(26,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,1): blue,nobaggle,notopwall,noleftwall,
+Cell(27,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,6): blue,nobaggle,notopwall,noleftwall,
+Cell(27,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,11): blue,nobaggle,notopwall,noleftwall,
+Cell(27,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,16): blue,nobaggle,notopwall,noleftwall,
+Cell(27,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,21): blue,nobaggle,notopwall,noleftwall,
+Cell(27,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,26): blue,nobaggle,notopwall,noleftwall,
+Cell(27,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,31): blue,nobaggle,notopwall,noleftwall,
+Cell(27,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,36): blue,nobaggle,notopwall,noleftwall,
+Cell(27,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(27,41): blue,nobaggle,notopwall,noleftwall,
+Cell(27,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,0): blue,nobaggle,notopwall,noleftwall,
+Cell(28,2): red,nobaggle,notopwall,noleftwall,
+Cell(28,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,5): blue,nobaggle,notopwall,noleftwall,
+Cell(28,7): red,nobaggle,notopwall,noleftwall,
+Cell(28,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,10): blue,nobaggle,notopwall,noleftwall,
+Cell(28,12): red,nobaggle,notopwall,noleftwall,
+Cell(28,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,15): blue,nobaggle,notopwall,noleftwall,
+Cell(28,17): red,nobaggle,notopwall,noleftwall,
+Cell(28,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,20): blue,nobaggle,notopwall,noleftwall,
+Cell(28,22): red,nobaggle,notopwall,noleftwall,
+Cell(28,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,25): blue,nobaggle,notopwall,noleftwall,
+Cell(28,27): red,nobaggle,notopwall,noleftwall,
+Cell(28,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,30): blue,nobaggle,notopwall,noleftwall,
+Cell(28,32): red,nobaggle,notopwall,noleftwall,
+Cell(28,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,35): blue,nobaggle,notopwall,noleftwall,
+Cell(28,37): red,nobaggle,notopwall,noleftwall,
+Cell(28,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(28,40): blue,nobaggle,notopwall,noleftwall,
+Cell(28,42): red,nobaggle,notopwall,noleftwall,
+Cell(28,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(29,1): red,nobaggle,notopwall,noleftwall,
+Cell(29,3): red,nobaggle,notopwall,noleftwall,
+Cell(29,6): red,nobaggle,notopwall,noleftwall,
+Cell(29,8): red,nobaggle,notopwall,noleftwall,
+Cell(29,11): red,nobaggle,notopwall,noleftwall,
+Cell(29,13): red,nobaggle,notopwall,noleftwall,
+Cell(29,16): red,nobaggle,notopwall,noleftwall,
+Cell(29,18): red,nobaggle,notopwall,noleftwall,
+Cell(29,21): red,nobaggle,notopwall,noleftwall,
+Cell(29,23): red,nobaggle,notopwall,noleftwall,
+Cell(29,26): red,nobaggle,notopwall,noleftwall,
+Cell(29,28): red,nobaggle,notopwall,noleftwall,
+Cell(29,31): red,nobaggle,notopwall,noleftwall,
+Cell(29,33): red,nobaggle,notopwall,noleftwall,
+Cell(29,36): red,nobaggle,notopwall,noleftwall,
+Cell(29,38): red,nobaggle,notopwall,noleftwall,
+Cell(29,41): red,nobaggle,notopwall,noleftwall,
+Cell(29,43): red,nobaggle,notopwall,noleftwall,
+Cell(30,1): green,nobaggle,notopwall,noleftwall,
+Cell(30,3): green,nobaggle,notopwall,noleftwall,
+Cell(30,6): green,nobaggle,notopwall,noleftwall,
+Cell(30,8): green,nobaggle,notopwall,noleftwall,
+Cell(30,11): green,nobaggle,notopwall,noleftwall,
+Cell(30,13): green,nobaggle,notopwall,noleftwall,
+Cell(30,16): green,nobaggle,notopwall,noleftwall,
+Cell(30,18): green,nobaggle,notopwall,noleftwall,
+Cell(30,21): green,nobaggle,notopwall,noleftwall,
+Cell(30,23): green,nobaggle,notopwall,noleftwall,
+Cell(30,26): green,nobaggle,notopwall,noleftwall,
+Cell(30,28): green,nobaggle,notopwall,noleftwall,
+Cell(30,31): green,nobaggle,notopwall,noleftwall,
+Cell(30,33): green,nobaggle,notopwall,noleftwall,
+Cell(30,36): green,nobaggle,notopwall,noleftwall,
+Cell(30,38): green,nobaggle,notopwall,noleftwall,
+Cell(30,41): green,nobaggle,notopwall,noleftwall,
+Cell(30,43): green,nobaggle,notopwall,noleftwall,
+Cell(31,0): blue,nobaggle,notopwall,noleftwall,
+Cell(31,2): green,nobaggle,notopwall,noleftwall,
+Cell(31,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,5): blue,nobaggle,notopwall,noleftwall,
+Cell(31,7): green,nobaggle,notopwall,noleftwall,
+Cell(31,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,10): blue,nobaggle,notopwall,noleftwall,
+Cell(31,12): green,nobaggle,notopwall,noleftwall,
+Cell(31,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,15): blue,nobaggle,notopwall,noleftwall,
+Cell(31,17): green,nobaggle,notopwall,noleftwall,
+Cell(31,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,20): blue,nobaggle,notopwall,noleftwall,
+Cell(31,22): green,nobaggle,notopwall,noleftwall,
+Cell(31,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,25): blue,nobaggle,notopwall,noleftwall,
+Cell(31,27): green,nobaggle,notopwall,noleftwall,
+Cell(31,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,30): blue,nobaggle,notopwall,noleftwall,
+Cell(31,32): green,nobaggle,notopwall,noleftwall,
+Cell(31,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,35): blue,nobaggle,notopwall,noleftwall,
+Cell(31,37): green,nobaggle,notopwall,noleftwall,
+Cell(31,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(31,40): blue,nobaggle,notopwall,noleftwall,
+Cell(31,42): green,nobaggle,notopwall,noleftwall,
+Cell(31,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,1): blue,nobaggle,notopwall,noleftwall,
+Cell(32,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,6): blue,nobaggle,notopwall,noleftwall,
+Cell(32,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,11): blue,nobaggle,notopwall,noleftwall,
+Cell(32,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,16): blue,nobaggle,notopwall,noleftwall,
+Cell(32,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,21): blue,nobaggle,notopwall,noleftwall,
+Cell(32,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,26): blue,nobaggle,notopwall,noleftwall,
+Cell(32,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,31): blue,nobaggle,notopwall,noleftwall,
+Cell(32,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,36): blue,nobaggle,notopwall,noleftwall,
+Cell(32,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(32,41): blue,nobaggle,notopwall,noleftwall,
+Cell(32,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,0): blue,nobaggle,notopwall,noleftwall,
+Cell(33,2): red,nobaggle,notopwall,noleftwall,
+Cell(33,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,5): blue,nobaggle,notopwall,noleftwall,
+Cell(33,7): red,nobaggle,notopwall,noleftwall,
+Cell(33,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,10): blue,nobaggle,notopwall,noleftwall,
+Cell(33,12): red,nobaggle,notopwall,noleftwall,
+Cell(33,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,15): blue,nobaggle,notopwall,noleftwall,
+Cell(33,17): red,nobaggle,notopwall,noleftwall,
+Cell(33,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,20): blue,nobaggle,notopwall,noleftwall,
+Cell(33,22): red,nobaggle,notopwall,noleftwall,
+Cell(33,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,25): blue,nobaggle,notopwall,noleftwall,
+Cell(33,27): red,nobaggle,notopwall,noleftwall,
+Cell(33,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,30): blue,nobaggle,notopwall,noleftwall,
+Cell(33,32): red,nobaggle,notopwall,noleftwall,
+Cell(33,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,35): blue,nobaggle,notopwall,noleftwall,
+Cell(33,37): red,nobaggle,notopwall,noleftwall,
+Cell(33,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(33,40): blue,nobaggle,notopwall,noleftwall,
+Cell(33,42): red,nobaggle,notopwall,noleftwall,
+Cell(33,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(34,1): red,nobaggle,notopwall,noleftwall,
+Cell(34,3): red,nobaggle,notopwall,noleftwall,
+Cell(34,6): red,nobaggle,notopwall,noleftwall,
+Cell(34,8): red,nobaggle,notopwall,noleftwall,
+Cell(34,11): red,nobaggle,notopwall,noleftwall,
+Cell(34,13): red,nobaggle,notopwall,noleftwall,
+Cell(34,16): red,nobaggle,notopwall,noleftwall,
+Cell(34,18): red,nobaggle,notopwall,noleftwall,
+Cell(34,21): red,nobaggle,notopwall,noleftwall,
+Cell(34,23): red,nobaggle,notopwall,noleftwall,
+Cell(34,26): red,nobaggle,notopwall,noleftwall,
+Cell(34,28): red,nobaggle,notopwall,noleftwall,
+Cell(34,31): red,nobaggle,notopwall,noleftwall,
+Cell(34,33): red,nobaggle,notopwall,noleftwall,
+Cell(34,36): red,nobaggle,notopwall,noleftwall,
+Cell(34,38): red,nobaggle,notopwall,noleftwall,
+Cell(34,41): red,nobaggle,notopwall,noleftwall,
+Cell(34,43): red,nobaggle,notopwall,noleftwall,
+Cell(35,1): green,nobaggle,notopwall,noleftwall,
+Cell(35,3): green,nobaggle,notopwall,noleftwall,
+Cell(35,6): green,nobaggle,notopwall,noleftwall,
+Cell(35,8): green,nobaggle,notopwall,noleftwall,
+Cell(35,11): green,nobaggle,notopwall,noleftwall,
+Cell(35,13): green,nobaggle,notopwall,noleftwall,
+Cell(35,16): green,nobaggle,notopwall,noleftwall,
+Cell(35,18): green,nobaggle,notopwall,noleftwall,
+Cell(35,21): green,nobaggle,notopwall,noleftwall,
+Cell(35,23): green,nobaggle,notopwall,noleftwall,
+Cell(35,26): green,nobaggle,notopwall,noleftwall,
+Cell(35,28): green,nobaggle,notopwall,noleftwall,
+Cell(35,31): green,nobaggle,notopwall,noleftwall,
+Cell(35,33): green,nobaggle,notopwall,noleftwall,
+Cell(35,36): green,nobaggle,notopwall,noleftwall,
+Cell(35,38): green,nobaggle,notopwall,noleftwall,
+Cell(35,41): green,nobaggle,notopwall,noleftwall,
+Cell(35,43): green,nobaggle,notopwall,noleftwall,
+Cell(36,0): blue,nobaggle,notopwall,noleftwall,
+Cell(36,2): green,nobaggle,notopwall,noleftwall,
+Cell(36,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,5): blue,nobaggle,notopwall,noleftwall,
+Cell(36,7): green,nobaggle,notopwall,noleftwall,
+Cell(36,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,10): blue,nobaggle,notopwall,noleftwall,
+Cell(36,12): green,nobaggle,notopwall,noleftwall,
+Cell(36,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,15): blue,nobaggle,notopwall,noleftwall,
+Cell(36,17): green,nobaggle,notopwall,noleftwall,
+Cell(36,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,20): blue,nobaggle,notopwall,noleftwall,
+Cell(36,22): green,nobaggle,notopwall,noleftwall,
+Cell(36,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,25): blue,nobaggle,notopwall,noleftwall,
+Cell(36,27): green,nobaggle,notopwall,noleftwall,
+Cell(36,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,30): blue,nobaggle,notopwall,noleftwall,
+Cell(36,32): green,nobaggle,notopwall,noleftwall,
+Cell(36,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,35): blue,nobaggle,notopwall,noleftwall,
+Cell(36,37): green,nobaggle,notopwall,noleftwall,
+Cell(36,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(36,40): blue,nobaggle,notopwall,noleftwall,
+Cell(36,42): green,nobaggle,notopwall,noleftwall,
+Cell(36,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,1): blue,nobaggle,notopwall,noleftwall,
+Cell(37,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,6): blue,nobaggle,notopwall,noleftwall,
+Cell(37,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,11): blue,nobaggle,notopwall,noleftwall,
+Cell(37,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,16): blue,nobaggle,notopwall,noleftwall,
+Cell(37,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,21): blue,nobaggle,notopwall,noleftwall,
+Cell(37,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,26): blue,nobaggle,notopwall,noleftwall,
+Cell(37,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,31): blue,nobaggle,notopwall,noleftwall,
+Cell(37,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,36): blue,nobaggle,notopwall,noleftwall,
+Cell(37,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(37,41): blue,nobaggle,notopwall,noleftwall,
+Cell(37,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,0): blue,nobaggle,notopwall,noleftwall,
+Cell(38,2): red,nobaggle,notopwall,noleftwall,
+Cell(38,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,5): blue,nobaggle,notopwall,noleftwall,
+Cell(38,7): red,nobaggle,notopwall,noleftwall,
+Cell(38,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,10): blue,nobaggle,notopwall,noleftwall,
+Cell(38,12): red,nobaggle,notopwall,noleftwall,
+Cell(38,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,15): blue,nobaggle,notopwall,noleftwall,
+Cell(38,17): red,nobaggle,notopwall,noleftwall,
+Cell(38,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,20): blue,nobaggle,notopwall,noleftwall,
+Cell(38,22): red,nobaggle,notopwall,noleftwall,
+Cell(38,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,25): blue,nobaggle,notopwall,noleftwall,
+Cell(38,27): red,nobaggle,notopwall,noleftwall,
+Cell(38,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,30): blue,nobaggle,notopwall,noleftwall,
+Cell(38,32): red,nobaggle,notopwall,noleftwall,
+Cell(38,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,35): blue,nobaggle,notopwall,noleftwall,
+Cell(38,37): red,nobaggle,notopwall,noleftwall,
+Cell(38,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(38,40): blue,nobaggle,notopwall,noleftwall,
+Cell(38,42): red,nobaggle,notopwall,noleftwall,
+Cell(38,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(39,1): red,nobaggle,notopwall,noleftwall,
+Cell(39,3): red,nobaggle,notopwall,noleftwall,
+Cell(39,6): red,nobaggle,notopwall,noleftwall,
+Cell(39,8): red,nobaggle,notopwall,noleftwall,
+Cell(39,11): red,nobaggle,notopwall,noleftwall,
+Cell(39,13): red,nobaggle,notopwall,noleftwall,
+Cell(39,16): red,nobaggle,notopwall,noleftwall,
+Cell(39,18): red,nobaggle,notopwall,noleftwall,
+Cell(39,21): red,nobaggle,notopwall,noleftwall,
+Cell(39,23): red,nobaggle,notopwall,noleftwall,
+Cell(39,26): red,nobaggle,notopwall,noleftwall,
+Cell(39,28): red,nobaggle,notopwall,noleftwall,
+Cell(39,31): red,nobaggle,notopwall,noleftwall,
+Cell(39,33): red,nobaggle,notopwall,noleftwall,
+Cell(39,36): red,nobaggle,notopwall,noleftwall,
+Cell(39,38): red,nobaggle,notopwall,noleftwall,
+Cell(39,41): red,nobaggle,notopwall,noleftwall,
+Cell(39,43): red,nobaggle,notopwall,noleftwall,
+Cell(40,1): green,nobaggle,notopwall,noleftwall,
+Cell(40,3): green,nobaggle,notopwall,noleftwall,
+Cell(40,6): green,nobaggle,notopwall,noleftwall,
+Cell(40,8): green,nobaggle,notopwall,noleftwall,
+Cell(40,11): green,nobaggle,notopwall,noleftwall,
+Cell(40,13): green,nobaggle,notopwall,noleftwall,
+Cell(40,16): green,nobaggle,notopwall,noleftwall,
+Cell(40,18): green,nobaggle,notopwall,noleftwall,
+Cell(40,21): green,nobaggle,notopwall,noleftwall,
+Cell(40,23): green,nobaggle,notopwall,noleftwall,
+Cell(40,26): green,nobaggle,notopwall,noleftwall,
+Cell(40,28): green,nobaggle,notopwall,noleftwall,
+Cell(40,31): green,nobaggle,notopwall,noleftwall,
+Cell(40,33): green,nobaggle,notopwall,noleftwall,
+Cell(40,36): green,nobaggle,notopwall,noleftwall,
+Cell(40,38): green,nobaggle,notopwall,noleftwall,
+Cell(40,41): green,nobaggle,notopwall,noleftwall,
+Cell(40,43): green,nobaggle,notopwall,noleftwall,
+Cell(41,0): blue,nobaggle,notopwall,noleftwall,
+Cell(41,2): green,nobaggle,notopwall,noleftwall,
+Cell(41,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,5): blue,nobaggle,notopwall,noleftwall,
+Cell(41,7): green,nobaggle,notopwall,noleftwall,
+Cell(41,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,10): blue,nobaggle,notopwall,noleftwall,
+Cell(41,12): green,nobaggle,notopwall,noleftwall,
+Cell(41,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,15): blue,nobaggle,notopwall,noleftwall,
+Cell(41,17): green,nobaggle,notopwall,noleftwall,
+Cell(41,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,20): blue,nobaggle,notopwall,noleftwall,
+Cell(41,22): green,nobaggle,notopwall,noleftwall,
+Cell(41,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,25): blue,nobaggle,notopwall,noleftwall,
+Cell(41,27): green,nobaggle,notopwall,noleftwall,
+Cell(41,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,30): blue,nobaggle,notopwall,noleftwall,
+Cell(41,32): green,nobaggle,notopwall,noleftwall,
+Cell(41,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,35): blue,nobaggle,notopwall,noleftwall,
+Cell(41,37): green,nobaggle,notopwall,noleftwall,
+Cell(41,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(41,40): blue,nobaggle,notopwall,noleftwall,
+Cell(41,42): green,nobaggle,notopwall,noleftwall,
+Cell(41,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,1): blue,nobaggle,notopwall,noleftwall,
+Cell(42,3): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,6): blue,nobaggle,notopwall,noleftwall,
+Cell(42,8): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,11): blue,nobaggle,notopwall,noleftwall,
+Cell(42,13): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,16): blue,nobaggle,notopwall,noleftwall,
+Cell(42,18): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,21): blue,nobaggle,notopwall,noleftwall,
+Cell(42,23): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,26): blue,nobaggle,notopwall,noleftwall,
+Cell(42,28): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,31): blue,nobaggle,notopwall,noleftwall,
+Cell(42,33): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,36): blue,nobaggle,notopwall,noleftwall,
+Cell(42,38): yellow,nobaggle,notopwall,noleftwall,
+Cell(42,41): blue,nobaggle,notopwall,noleftwall,
+Cell(42,43): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,0): blue,nobaggle,notopwall,noleftwall,
+Cell(43,2): red,nobaggle,notopwall,noleftwall,
+Cell(43,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,5): blue,nobaggle,notopwall,noleftwall,
+Cell(43,7): red,nobaggle,notopwall,noleftwall,
+Cell(43,9): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,10): blue,nobaggle,notopwall,noleftwall,
+Cell(43,12): red,nobaggle,notopwall,noleftwall,
+Cell(43,14): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,15): blue,nobaggle,notopwall,noleftwall,
+Cell(43,17): red,nobaggle,notopwall,noleftwall,
+Cell(43,19): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,20): blue,nobaggle,notopwall,noleftwall,
+Cell(43,22): red,nobaggle,notopwall,noleftwall,
+Cell(43,24): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,25): blue,nobaggle,notopwall,noleftwall,
+Cell(43,27): red,nobaggle,notopwall,noleftwall,
+Cell(43,29): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,30): blue,nobaggle,notopwall,noleftwall,
+Cell(43,32): red,nobaggle,notopwall,noleftwall,
+Cell(43,34): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,35): blue,nobaggle,notopwall,noleftwall,
+Cell(43,37): red,nobaggle,notopwall,noleftwall,
+Cell(43,39): yellow,nobaggle,notopwall,noleftwall,
+Cell(43,40): blue,nobaggle,notopwall,noleftwall,
+Cell(43,42): red,nobaggle,notopwall,noleftwall,
+Cell(43,44): yellow,nobaggle,notopwall,noleftwall,
+Cell(44,1): red,nobaggle,notopwall,noleftwall,
+Cell(44,3): red,nobaggle,notopwall,noleftwall,
+Cell(44,6): red,nobaggle,notopwall,noleftwall,
+Cell(44,8): red,nobaggle,notopwall,noleftwall,
+Cell(44,11): red,nobaggle,notopwall,noleftwall,
+Cell(44,13): red,nobaggle,notopwall,noleftwall,
+Cell(44,16): red,nobaggle,notopwall,noleftwall,
+Cell(44,18): red,nobaggle,notopwall,noleftwall,
+Cell(44,21): red,nobaggle,notopwall,noleftwall,
+Cell(44,23): red,nobaggle,notopwall,noleftwall,
+Cell(44,26): red,nobaggle,notopwall,noleftwall,
+Cell(44,28): red,nobaggle,notopwall,noleftwall,
+Cell(44,31): red,nobaggle,notopwall,noleftwall,
+Cell(44,33): red,nobaggle,notopwall,noleftwall,
+Cell(44,36): red,nobaggle,notopwall,noleftwall,
+Cell(44,38): red,nobaggle,notopwall,noleftwall,
+Cell(44,41): red,nobaggle,notopwall,noleftwall,
+Cell(44,43): red,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/methods/picture4/MethodsPicture4-answer0.map b/src/lessons/welcome/methods/picture4/MethodsPicture4-answer0.map
new file mode 100644
index 0000000..df2505a
--- /dev/null
+++ b/src/lessons/welcome/methods/picture4/MethodsPicture4-answer0.map
@@ -0,0 +1,42 @@
+BuggleWorld: World
+Size: 8x8
+Buggle(4,3): east,black,green,Picasso
+Cell(0,0): white,nobaggle,topwall,leftwall,
+Cell(0,1): yellow,nobaggle,notopwall,leftwall,
+Cell(0,2): red,nobaggle,notopwall,leftwall,
+Cell(0,3): white,nobaggle,notopwall,leftwall,
+Cell(0,4): white,nobaggle,notopwall,leftwall,
+Cell(0,5): yellow,nobaggle,notopwall,leftwall,
+Cell(0,6): red,nobaggle,notopwall,leftwall,
+Cell(0,7): white,nobaggle,notopwall,leftwall,
+Cell(1,0): yellow,nobaggle,topwall,noleftwall,
+Cell(1,3): red,nobaggle,notopwall,noleftwall,
+Cell(1,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(1,7): red,nobaggle,notopwall,noleftwall,
+Cell(2,0): green,nobaggle,topwall,noleftwall,
+Cell(2,3): blue,nobaggle,notopwall,noleftwall,
+Cell(2,4): green,nobaggle,notopwall,noleftwall,
+Cell(2,7): blue,nobaggle,notopwall,noleftwall,
+Cell(3,0): white,nobaggle,topwall,noleftwall,
+Cell(3,1): green,nobaggle,notopwall,noleftwall,
+Cell(3,2): blue,nobaggle,notopwall,noleftwall,
+Cell(3,5): green,nobaggle,notopwall,noleftwall,
+Cell(3,6): blue,nobaggle,notopwall,noleftwall,
+Cell(4,0): white,nobaggle,topwall,noleftwall,
+Cell(4,1): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,2): red,nobaggle,notopwall,noleftwall,
+Cell(4,5): yellow,nobaggle,notopwall,noleftwall,
+Cell(4,6): red,nobaggle,notopwall,noleftwall,
+Cell(5,0): yellow,nobaggle,topwall,noleftwall,
+Cell(5,3): red,nobaggle,notopwall,noleftwall,
+Cell(5,4): yellow,nobaggle,notopwall,noleftwall,
+Cell(5,7): red,nobaggle,notopwall,noleftwall,
+Cell(6,0): green,nobaggle,topwall,noleftwall,
+Cell(6,3): blue,nobaggle,notopwall,noleftwall,
+Cell(6,4): green,nobaggle,notopwall,noleftwall,
+Cell(6,7): blue,nobaggle,notopwall,noleftwall,
+Cell(7,0): white,nobaggle,topwall,noleftwall,
+Cell(7,1): green,nobaggle,notopwall,noleftwall,
+Cell(7,2): blue,nobaggle,notopwall,noleftwall,
+Cell(7,5): green,nobaggle,notopwall,noleftwall,
+Cell(7,6): blue,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/methods/returning/MethodsReturning-answer0.map b/src/lessons/welcome/methods/returning/MethodsReturning-answer0.map
new file mode 100644
index 0000000..df0baa4
--- /dev/null
+++ b/src/lessons/welcome/methods/returning/MethodsReturning-answer0.map
@@ -0,0 +1,4 @@
+BuggleWorld: World 1
+Size: 7x7
+Buggle(3,6): north,black,lightGray,Searcher
+Cell(3,2): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/methods/returning/MethodsReturning-answer1.map b/src/lessons/welcome/methods/returning/MethodsReturning-answer1.map
new file mode 100644
index 0000000..992d20d
--- /dev/null
+++ b/src/lessons/welcome/methods/returning/MethodsReturning-answer1.map
@@ -0,0 +1,4 @@
+BuggleWorld: World 2
+Size: 7x7
+Buggle(5,6): north,black,lightGray,Searcher
+Cell(5,1): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/methods/returning/MethodsReturning-answer2.map b/src/lessons/welcome/methods/returning/MethodsReturning-answer2.map
new file mode 100644
index 0000000..6c7ac35
--- /dev/null
+++ b/src/lessons/welcome/methods/returning/MethodsReturning-answer2.map
@@ -0,0 +1,4 @@
+BuggleWorld: World 3
+Size: 7x7
+Buggle(2,6): north,black,lightGray,Searcher
+Cell(2,6): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/short_desc.fr.html b/src/lessons/welcome/short_desc.fr.html
new file mode 100644
index 0000000..f58df28
--- /dev/null
+++ b/src/lessons/welcome/short_desc.fr.html
@@ -0,0 +1,6 @@
+<h3>Premiers pas</h3>
+<p>Cette première leçon va vous guider dans vos premiers pas en
+programmation. Elle est destinée aux débutants. </p>
+
+<p>Dans le doute, faites cette leçon, qui vous enseignera les bases de la
+programmation.</p>
\ No newline at end of file
diff --git a/src/lessons/welcome/short_desc.html b/src/lessons/welcome/short_desc.html
new file mode 100644
index 0000000..53680e4
--- /dev/null
+++ b/src/lessons/welcome/short_desc.html
@@ -0,0 +1,6 @@
+<h3>First steps</h3>
+<p>This first lesson will lead your first steps in programming. It is
+intended for beginners.</p>
+
+<p>If you are not sure, go for this lesson that will teach you the
+bases of programming.</p>
\ No newline at end of file
diff --git a/src/lessons/welcome/slug/SlugHunting-answer0.map b/src/lessons/welcome/slug/SlugHunting-answer0.map
new file mode 100644
index 0000000..e39aeac
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugHunting-answer0.map
@@ -0,0 +1,19 @@
+BuggleWorld: Forrest
+Size: 8x7
+Buggle(0,1): west,black,lightGray,Hunter
+Cell(0,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(1,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,5): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,6): lightGray,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/slug/SlugHunting-answer1.map b/src/lessons/welcome/slug/SlugHunting-answer1.map
new file mode 100644
index 0000000..5f73c2f
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugHunting-answer1.map
@@ -0,0 +1,21 @@
+BuggleWorld: Desert
+Size: 8x7
+Buggle(3,4): east,black,lightGray,Hunter
+Cell(2,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,4): green,nobaggle,notopwall,noleftwall,
+Cell(5,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,2): lightGray,nobaggle,topwall,noleftwall,
+Cell(6,3): lightGray,nobaggle,notopwall,leftwall,
+Cell(6,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,5): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,6): lightGray,nobaggle,notopwall,noleftwall,
+Cell(7,2): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/slug/SlugHunting.fr.html b/src/lessons/welcome/slug/SlugHunting.fr.html
new file mode 100644
index 0000000..f25ab92
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugHunting.fr.html
@@ -0,0 +1,24 @@
+<h2>Chasse à la limace</h2>
+
+<p>Maintenant que votre méthode <code>isFacingTrail()</code> fonctionne, il est
+temps d'écrire le code de la chasse à proprement parler. Copie/collez le
+code que vous aviez fait pour l'exercice précédent, et complétez la méthode
+<code>hunt()</code> (<i>hunt</i> signifie <i>chasse</i> en anglais).</p>
+
+<p>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 à
+gauche ou à droite, et suivez-la encore.</p>
+
+<p>Pour ne pas confondre la partie de la trace à suivre avec celle que votre
+buggle a déjà suivie, il est conseillé d'effacer la piste derrière
+vous. Pour cela, utilisez la méthode <code>brushDown()</code> pour baisser
+votre crayon, et <code>brushUp()</code> pour le relever.</p>
+
+<p>Enfin, n'oubliez de capturer votre proie une fois que vous l'aurez débusquée
+(avec <code>pickupBaggle()</code>).</p>
+
+
+<h3>Objectif de cet exercice</h3>
+<a name="Objectifs"> Complétez la méthode <code>hunt()</code>. Vous voulez
+probablement copier votre méthode <code>isFacingTrail()</code> de l'exercice
+précédent.
diff --git a/src/lessons/welcome/slug/SlugHunting.html b/src/lessons/welcome/slug/SlugHunting.html
new file mode 100644
index 0000000..6278485
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugHunting.html
@@ -0,0 +1,22 @@
+<h2>Slug Hunting</h2>
+
+<p>Now that your <code>isFacingTrail()</code> method is working, it's time 
+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 
+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, 
+the easier is to erase the track when you follow it. Use the method <code>brushDown()</code> 
+to put your brush down and mark the ground, and <code>brushUp()</code> to move it up again.</p>
+
+<p>Finally, do not forget to capture your prey once you found it (using <code>pickupBaggle()</code>).</p>
+
+
+<h3>Exercise goal</h3>
+<a name="Objectives">
+Complete the <code>hunt()</code> method. You probably want to copy over the 
+<code>isFacingTrail()</code> method that you wrote in previous exercise.
+</a>
diff --git a/src/lessons/welcome/slug/SlugHunting.java b/src/lessons/welcome/slug/SlugHunting.java
new file mode 100644
index 0000000..7b36be1
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugHunting.java
@@ -0,0 +1,71 @@
+package lessons.welcome.slug;
+
+import java.awt.Color;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.Direction;
+import jlm.universe.bugglequest.Buggle;
+import jlm.universe.bugglequest.BuggleWorld;
+import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
+
+public class SlugHunting extends ExerciseTemplated {
+
+	public SlugHunting(Lesson lesson) {
+		super(lesson);
+
+		BuggleWorld[] myWorlds = new BuggleWorld[2];
+
+		BuggleWorld myWorld = new BuggleWorld("Forrest", 8, 7);
+		for (int i = 5; i >= 2; i--)
+			myWorld.setColor(6, i,Color.green);
+		myWorld.setColor(5, 2,Color.green);
+		for (int i = 2; i <= 4; i++)
+			myWorld.setColor(4, i,Color.green);
+		myWorld.setColor(3, 4,Color.green);
+		for (int i = 4; i >= 1; i--)
+			myWorld.setColor(2, i,Color.green);
+		myWorld.setColor(1, 1,Color.green);
+		myWorld.setColor(0, 1,Color.green);
+		try {
+			myWorld.newBaggle(0, 1);
+		} catch (AlreadyHaveBaggleException e) {
+			e.printStackTrace();
+		}
+		myWorlds[0] = myWorld;
+
+		myWorld = new BuggleWorld("Desert", 8, 7);
+		for (int i = 5; i >= 2; i--)
+		    myWorld.setColor(6, i,Color.green);
+		myWorld.putTopWall(6, 2);
+		myWorld.putLeftWall(6, 3);
+		myWorld.putLeftWall(7, 2);
+		myWorld.setColor(5, 2,Color.green);
+		myWorld.setColor(5, 1,Color.green);
+		myWorld.setColor(5, 0,Color.green);
+		myWorld.setColor(4, 0,Color.green);
+		myWorld.setColor(3, 0,Color.green);
+		myWorld.setColor(2, 0,Color.green);
+				       
+		myWorld.setColor(3, 4,Color.green);
+		for (int i = 4; i >= 1; i--)
+			myWorld.setColor(2, i,Color.green);
+		myWorld.setColor(4, 4,Color.green);
+
+		try {
+			myWorld.newBaggle(3, 4);
+		} catch (AlreadyHaveBaggleException e) {
+			e.printStackTrace();
+		}
+		myWorlds[1] = myWorld;
+
+		Buggle hunter = new Buggle(myWorlds[0], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
+		hunter.brushDown();
+
+		hunter = new Buggle(myWorlds[1], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
+		hunter.brushDown();
+
+		setup(myWorlds);
+	}
+
+}
\ No newline at end of file
diff --git a/src/lessons/welcome/slug/SlugHuntingEntity.java b/src/lessons/welcome/slug/SlugHuntingEntity.java
new file mode 100644
index 0000000..141fe38
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugHuntingEntity.java
@@ -0,0 +1,45 @@
+package lessons.welcome.slug;
+
+import java.awt.Color;
+
+
+public class SlugHuntingEntity extends jlm.universe.bugglequest.SimpleBuggle {
+
+	@Override
+	public void run() {
+		hunt(); 
+	}
+
+	/* BEGIN TEMPLATE */
+	public void hunt() {
+		// Write your code here
+		/* BEGIN SOLUTION */
+		while (! isOverBaggle()) {
+			if (isFacingTrail()) {
+				brushDown();
+				forward();
+				brushUp();
+			} else {
+				turnLeft();
+			}
+		}
+		pickupBaggle();
+		/* END SOLUTION */
+	}
+
+	/* BEGIN HIDDEN */
+	boolean isFacingTrail() {
+		if (isFacingWall())
+			return false;
+
+		forward();
+		boolean res = getGroundColor().equals(Color.green);
+		backward();
+		return res;
+
+	}		
+	/* END HIDDEN */
+	/* END TEMPLATE */
+
+
+}
diff --git a/src/lessons/welcome/slug/SlugHuntingEntity.py b/src/lessons/welcome/slug/SlugHuntingEntity.py
new file mode 100644
index 0000000..2dbf55a
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugHuntingEntity.py
@@ -0,0 +1,30 @@
+import java.awt.Color as Color
+
+# BEGIN TEMPLATE
+# BEGIN HIDDEN
+def isFacingTrail():
+   if isFacingWall():
+      return False
+   else:
+	  forward()
+	  res = getGroundColor().toString() == Color.green.toString()
+	  backward()
+	  return res
+# END HIDDEN
+
+def hunt():
+   # write your code here
+   # BEGIN SOLUTION
+   while not isOverBaggle():
+      brushUp()
+      if isFacingTrail():
+         brushDown()
+         forward()
+         brushUp()
+      else:
+	     turnLeft()
+   pickupBaggle()
+   # END SOLUTION
+# END TEMPLATE
+
+hunt()
diff --git a/src/lessons/welcome/slug/SlugSnail-answer0.map b/src/lessons/welcome/slug/SlugSnail-answer0.map
new file mode 100644
index 0000000..a70af10
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugSnail-answer0.map
@@ -0,0 +1,19 @@
+BuggleWorld: Kitty
+Size: 8x7
+Buggle(0,1): west,black,lightGray,Hunter
+Cell(0,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(1,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,5): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,6): lightGray,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/slug/SlugSnail-answer1.map b/src/lessons/welcome/slug/SlugSnail-answer1.map
new file mode 100644
index 0000000..3d85f66
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugSnail-answer1.map
@@ -0,0 +1,21 @@
+BuggleWorld: Snail
+Size: 8x7
+Buggle(3,4): east,black,lightGray,Hunter
+Cell(2,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,4): orange,nobaggle,notopwall,noleftwall,
+Cell(5,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,2): lightGray,nobaggle,topwall,noleftwall,
+Cell(6,3): lightGray,nobaggle,notopwall,leftwall,
+Cell(6,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,5): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,6): lightGray,nobaggle,notopwall,noleftwall,
+Cell(7,2): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/slug/SlugSnail.fr.html b/src/lessons/welcome/slug/SlugSnail.fr.html
new file mode 100644
index 0000000..e50df91
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugSnail.fr.html
@@ -0,0 +1,11 @@
+<h2>Limaces et escargots</h2>
+
+<p>YES! Cette fois encore, votre buggle a débusqué de bonnes proies! Dans le
+premier monde, c'est une délicieuse limace Kitty (qui laisse des traces
+rose) tandis que dans le second monde, un bon gros escargot du désert attend
+la buggle au bout de sa piste orange.</p>
+
+<p>Il vous faut copie/coller votre code encore une fois, et le modifier pour
+que vos méthodes prennent la couleur de piste à suivre en paramètre. À part
+cela, votre code devrait faire comme avant.</p>
+
diff --git a/src/lessons/welcome/slug/SlugSnail.html b/src/lessons/welcome/slug/SlugSnail.html
new file mode 100644
index 0000000..f5d9383
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugSnail.html
@@ -0,0 +1,9 @@
+<h2>Slugs and Snails</h2>
+
+<p>Yuhu! This time, your buggle found the tracks of much more preys! In the first world, that's a yummy Kitty 
+Slug (leaving a pink trail) while on the second world, that's a big fat snail that awaits your buggle at the end of 
+the orange trail.</p>
+
+<p>You have to copy/paste your code again, and change it so that your methods take the color of the trail to 
+follow as a parameter. Beside of this, your code should work as earlier.</p>
+
diff --git a/src/lessons/welcome/slug/SlugSnail.java b/src/lessons/welcome/slug/SlugSnail.java
new file mode 100644
index 0000000..266cc2d
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugSnail.java
@@ -0,0 +1,74 @@
+package lessons.welcome.slug;
+
+import java.awt.Color;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.Direction;
+import jlm.universe.bugglequest.Buggle;
+import jlm.universe.bugglequest.BuggleWorld;
+import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
+
+public class SlugSnail extends ExerciseTemplated {
+
+	public SlugSnail(Lesson lesson) {
+		super(lesson);
+
+		BuggleWorld[] myWorlds = new BuggleWorld[2];
+
+		BuggleWorld myWorld = new BuggleWorld("Kitty", 8, 7);
+		for (int i = 5; i >= 2; i--)
+			myWorld.setColor(6, i,Color.pink);
+		myWorld.setColor(5, 2,Color.pink);
+		for (int i = 2; i <= 4; i++)
+			myWorld.setColor(4, i,Color.pink);
+		myWorld.setColor(3, 4,Color.pink);
+		for (int i = 4; i >= 1; i--)
+			myWorld.setColor(2, i,Color.pink);
+		myWorld.setColor(1, 1,Color.pink);
+		myWorld.setColor(0, 1,Color.pink);
+		myWorld.setParameter(new Object[] {Color.pink});
+		
+		try {
+			myWorld.newBaggle(0, 1);
+		} catch (AlreadyHaveBaggleException e) {
+			e.printStackTrace();
+		}
+		myWorlds[0] = myWorld;
+
+		myWorld = new BuggleWorld("Snail", 8, 7);
+		for (int i = 5; i >= 2; i--)
+		    myWorld.setColor(6, i,Color.orange);
+		myWorld.putTopWall(6, 2);
+		myWorld.putLeftWall(6, 3);
+		myWorld.putLeftWall(7, 2);
+		myWorld.setColor(5, 2,Color.orange);
+		myWorld.setColor(5, 1,Color.orange);
+		myWorld.setColor(5, 0,Color.orange);
+		myWorld.setColor(4, 0,Color.orange);
+		myWorld.setColor(3, 0,Color.orange);
+		myWorld.setColor(2, 0,Color.orange);
+				       
+		myWorld.setColor(3, 4,Color.orange);
+		for (int i = 4; i >= 1; i--)
+			myWorld.setColor(2, i,Color.orange);
+		myWorld.setColor(4, 4,Color.orange);
+		myWorld.setParameter(new Object[] {Color.orange});
+
+		try {
+			myWorld.newBaggle(3, 4);
+		} catch (AlreadyHaveBaggleException e) {
+			e.printStackTrace();
+		}
+		myWorlds[1] = myWorld;
+
+		Buggle hunter = new Buggle(myWorlds[0], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
+		hunter.brushDown();
+
+		hunter = new Buggle(myWorlds[1], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
+		hunter.brushDown();
+
+		setup(myWorlds);
+	}
+
+}
\ No newline at end of file
diff --git a/src/lessons/welcome/slug/SlugSnailEntity.java b/src/lessons/welcome/slug/SlugSnailEntity.java
new file mode 100644
index 0000000..c8dc0a4
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugSnailEntity.java
@@ -0,0 +1,47 @@
+package lessons.welcome.slug;
+
+import java.awt.Color;
+
+
+public class SlugSnailEntity extends jlm.universe.bugglequest.SimpleBuggle {
+
+	@Override
+	public void run() {
+		hunt((Color) getParam(0)); 
+	}
+
+	/* BEGIN TEMPLATE */
+	public void hunt(Color c) {
+		// Write your code here
+		/* BEGIN SOLUTION */
+		while (! isOverBaggle()) {
+			if (isFacingTrail(c)) {
+				brushDown();
+				forward();
+				brushUp();
+			} else {
+				turnLeft();
+			}
+		}
+		pickupBaggle();
+		/* END SOLUTION */
+	}
+   
+	// here comes your isFacingTrail method   
+
+	/* BEGIN HIDDEN */
+	boolean isFacingTrail(Color c) {
+		if (isFacingWall())
+			return false;
+
+		forward();
+		boolean res = getGroundColor().equals(c);
+		backward();
+		return res;
+
+	}		
+	/* END HIDDEN */
+	/* END TEMPLATE */
+
+
+}
diff --git a/src/lessons/welcome/slug/SlugSnailEntity.py b/src/lessons/welcome/slug/SlugSnailEntity.py
new file mode 100644
index 0000000..101a4e4
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugSnailEntity.py
@@ -0,0 +1,31 @@
+import java.awt.Color as Color
+
+# BEGIN TEMPLATE
+def isFacingTrail(color):
+   # write your code here
+   # BEGIN SOLUTION
+   if isFacingWall():
+      return False
+   else:
+	  forward()
+	  res = (getGroundColor() == color)
+	  backward()
+	  return res
+   # END SOLUTION
+
+def hunt(color):
+   # BEGIN HIDDEN
+   while not isOverBaggle():
+      brushUp()
+      if isFacingTrail(color):
+         brushDown()
+         forward()
+         brushUp()
+      else:
+	     turnLeft()
+   pickupBaggle()
+   # END HIDDEN
+# END TEMPLATE
+
+hunt(getParam(0))
+
diff --git a/src/lessons/welcome/slug/SlugTracking-answer0.map b/src/lessons/welcome/slug/SlugTracking-answer0.map
new file mode 100644
index 0000000..e39aeac
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugTracking-answer0.map
@@ -0,0 +1,19 @@
+BuggleWorld: Forrest
+Size: 8x7
+Buggle(0,1): west,black,lightGray,Hunter
+Cell(0,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(1,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,5): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,6): lightGray,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/slug/SlugTracking-answer1.map b/src/lessons/welcome/slug/SlugTracking-answer1.map
new file mode 100644
index 0000000..5f73c2f
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugTracking-answer1.map
@@ -0,0 +1,21 @@
+BuggleWorld: Desert
+Size: 8x7
+Buggle(3,4): east,black,lightGray,Hunter
+Cell(2,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,3): lightGray,nobaggle,notopwall,noleftwall,
+Cell(2,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(3,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(4,4): green,nobaggle,notopwall,noleftwall,
+Cell(5,0): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,1): lightGray,nobaggle,notopwall,noleftwall,
+Cell(5,2): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,2): lightGray,nobaggle,topwall,noleftwall,
+Cell(6,3): lightGray,nobaggle,notopwall,leftwall,
+Cell(6,4): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,5): lightGray,nobaggle,notopwall,noleftwall,
+Cell(6,6): lightGray,nobaggle,notopwall,noleftwall,
+Cell(7,2): white,nobaggle,notopwall,leftwall,
diff --git a/src/lessons/welcome/slug/SlugTracking.fr.html b/src/lessons/welcome/slug/SlugTracking.fr.html
new file mode 100644
index 0000000..d82dec1
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugTracking.fr.html
@@ -0,0 +1,31 @@
+<h2>Pistage de la limace</h2>
+<p>
+Votre buggle est super contente ! Elle vient de trouver une grosse traînée
+baveuse sur le sol, certainement laissée par une grosse limace. Au bout de
+cette piste, la buggle est sûre de se régaler d'un bon jus de limace
+(représentée par un baggle). 
+</p>
+
+<p>Pour arriver au résultat, vous devez écrire la méthode booléenne
+<code>isFacingTrail()</code>, qui permet de savoir si on est face à une case
+verte ou non. Bien sûr, si on est face à un mur, elle doit répondre faux
+sans se cogner. Il faudrait de plus que cette méthode soit <b>sans effet de
+bord</b>, c'est-à-dire qu'elle ne modifie  ni la buggle qui l'appelle, ni le
+monde environnant.</p>
+
+<p class="Java">Votre outil pour cela est la méthode <code>getGroundColor()</code> qui
+retourne la couleur du sol dans la case où se trouve la buggle. Il vous faut
+vous rendre dans la case à tester avant d'appeler cette méthode. Vous ne
+pouvez pas simplement utiliser <code>==</code> pour tester si la couleur
+retournée est le vert, mais vous devez plutôt écrire quelque chose comme
+<code>getGroundColor().equals(Color.green)</code>. C'est parce 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.</p>   
+
+<p class="python">Votre outil pour cela est la méthode <code>getGroundColor()</code> qui
+retourne la couleur du sol dans la case où se trouve la buggle. Il vous faut
+vous rendre dans la case à tester avant d'appeler cette méthode.</p>
+
+<h3>Objectif de cet exercice</h3>
+<p>Complétez la méthode <code>isFacingTrail()</code> qui sera appelée
+automatiquement comme il faut.</p>
diff --git a/src/lessons/welcome/slug/SlugTracking.html b/src/lessons/welcome/slug/SlugTracking.html
new file mode 100644
index 0000000..10b23fb
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugTracking.html
@@ -0,0 +1,22 @@
+<h2>Slug Tracking</h2>
+<p>
+Your buggle is super happy! It just found the green dribbling trail, certainly left by a big yummy slug. 
+At its end, the buggle is certain to entertain itself with this appetizing slug (represented as a baggle). 
+</p>
+
+<p>To reach that goal, you had to write a boolean method <tt>isFacingTrail</tt>, which determines whether 
+we are facing a green cell or not. Of course, if we are facing a wall, it should return
+false without bumping into it. You should make sure that this method has no <b>side effect</b>, i.e. that
+it does not change the state of the calling buggle nor of its world.</p>
+
+<p class="Java">Your tool to that end is the <code>getGroundColor()</code> that returns the color of the 
+current cell. Just go to the cell you want to test and run that function. You cannot test whether this 
+color is equal to <code>Color.green</code> with an <code>==</code> sign but instead you have to write 
+something like <code>getGroundColor().equals(Color.green)</code>. This is because green is an 
+<i>object</i> in Java, and <code>.equals()</code> is the way to go to test equality between Java objects.</p>   
+
+<p class="python">Your tool to that end is the <code>getGroundColor()</code> that returns the color of the 
+current cell. Just go to the cell you want to test and run that function.</p>
+
+<h3>Exercise goal</h3>
+<p>Complete the <code>isFacingTrail()</code> method (which gets called automatically).</p>
diff --git a/src/lessons/welcome/slug/SlugTracking.java b/src/lessons/welcome/slug/SlugTracking.java
new file mode 100644
index 0000000..da85960
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugTracking.java
@@ -0,0 +1,71 @@
+package lessons.welcome.slug;
+
+import java.awt.Color;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.Direction;
+import jlm.universe.bugglequest.Buggle;
+import jlm.universe.bugglequest.BuggleWorld;
+import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
+
+public class SlugTracking extends ExerciseTemplated {
+
+	public SlugTracking(Lesson lesson) {
+		super(lesson);
+
+		BuggleWorld[] myWorlds = new BuggleWorld[2];
+
+		BuggleWorld myWorld = new BuggleWorld("Forrest", 8, 7);
+		for (int i = 5; i >= 2; i--)
+			myWorld.setColor(6, i,Color.green);
+		myWorld.setColor(5, 2,Color.green);
+		for (int i = 2; i <= 4; i++)
+			myWorld.setColor(4, i,Color.green);
+		myWorld.setColor(3, 4,Color.green);
+		for (int i = 4; i >= 1; i--)
+			myWorld.setColor(2, i,Color.green);
+		myWorld.setColor(1, 1,Color.green);
+		myWorld.setColor(0, 1,Color.green);
+		try {
+			myWorld.newBaggle(0, 1);
+		} catch (AlreadyHaveBaggleException e) {
+			e.printStackTrace();
+		}
+		myWorlds[0] = myWorld;
+
+		myWorld = new BuggleWorld("Desert", 8, 7);
+		for (int i = 5; i >= 2; i--)
+		    myWorld.setColor(6, i,Color.green);
+		myWorld.putTopWall(6, 2);
+		myWorld.putLeftWall(6, 3);
+		myWorld.putLeftWall(7, 2);
+		myWorld.setColor(5, 2,Color.green);
+		myWorld.setColor(5, 1,Color.green);
+		myWorld.setColor(5, 0,Color.green);
+		myWorld.setColor(4, 0,Color.green);
+		myWorld.setColor(3, 0,Color.green);
+		myWorld.setColor(2, 0,Color.green);
+				       
+		myWorld.setColor(3, 4,Color.green);
+		for (int i = 4; i >= 1; i--)
+			myWorld.setColor(2, i,Color.green);
+		myWorld.setColor(4, 4,Color.green);
+
+		try {
+			myWorld.newBaggle(3, 4);
+		} catch (AlreadyHaveBaggleException e) {
+			e.printStackTrace();
+		}
+		myWorlds[1] = myWorld;
+
+		Buggle hunter = new Buggle(myWorlds[0], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
+		hunter.brushDown();
+
+		hunter = new Buggle(myWorlds[1], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
+		hunter.brushDown();
+
+		setup(myWorlds);
+	}
+
+}
\ No newline at end of file
diff --git a/src/lessons/welcome/slug/SlugTrackingEntity.java b/src/lessons/welcome/slug/SlugTrackingEntity.java
new file mode 100644
index 0000000..0498f4d
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugTrackingEntity.java
@@ -0,0 +1,40 @@
+package lessons.welcome.slug;
+
+import java.awt.Color;
+
+
+public class SlugTrackingEntity extends jlm.universe.bugglequest.SimpleBuggle {
+
+	@Override
+	public void run() {
+		hunt(); 
+	}
+
+	public void hunt() {
+		while (! isOverBaggle()) {
+			if (isFacingTrail()) {
+				brushDown();
+				forward();
+				brushUp();
+			} else {
+				turnLeft();
+			}
+		}
+		pickupBaggle();
+	}
+
+	/* BEGIN TEMPLATE */
+	boolean isFacingTrail() {
+		// Write your code here
+		/* BEGIN SOLUTION */
+		if (isFacingWall())
+			return false;
+		forward();
+		boolean res = getGroundColor().equals(Color.green); 
+		backward();
+		return res;
+		/* END SOLUTION */
+	}		
+	/* END TEMPLATE */
+
+}
diff --git a/src/lessons/welcome/slug/SlugTrackingEntity.py b/src/lessons/welcome/slug/SlugTrackingEntity.py
new file mode 100644
index 0000000..ab90016
--- /dev/null
+++ b/src/lessons/welcome/slug/SlugTrackingEntity.py
@@ -0,0 +1,29 @@
+import java.awt.Color as Color
+
+# BEGIN TEMPLATE
+def isFacingTrail():
+   # write your code here
+   # BEGIN SOLUTION
+   if isFacingWall():
+      return False
+   else:
+	  forward()
+	  res = (getGroundColor() == Color.green)
+	  backward()
+	  return res
+   # END SOLUTION
+# END TEMPLATE
+
+def hunt():
+   while not isOverBaggle():
+      brushUp()
+      if isFacingTrail():
+         brushDown()
+         forward()
+         brushUp()
+      else:
+	     turnLeft()
+   pickupBaggle()
+
+hunt()
+
diff --git a/src/lessons/welcome/slug/hunting/SlugHunting.fr.html b/src/lessons/welcome/slug/hunting/SlugHunting.fr.html
deleted file mode 100644
index ee292fc..0000000
--- a/src/lessons/welcome/slug/hunting/SlugHunting.fr.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<h2>Chasse à la limace</h2>
-
-<p>
-Après toute l'agitation de la dance revolution, nous allons passer à une
-activité plus calme : la chasse à la limace. Votre buggle a en effet trouvé
-par hasard la trace d'une limace : une traînée baveuse verte. Si elle
-parvient à la suivre jusqu'au bout, elle trouvera un baggle représentant la
-grosse limace si appétissante (pour une buggle). 
-</p>
-
-<p>
-Pour arriver au résultat, vous disposez d'une méthode booléenne
-<tt>isFacingTrail</tt>, qui permet de savoir si on est face à une case verte
-ou non. Bien sûr, si on est face à un mur, elle renvoie faux. De plus que
-cette méthode ne modifie ni l'état de la buggle qui l'appelle, ni celui du
-monde. Une telle méthode est dite <b>sans effet de bord</b>.
-</p>
-
-<p>Cette méthode prend en argument la couleur de la piste que l'on veut
-suivre. Les limaces laissent des traces vertes, mais d'autres proies
-laissent des traces d'autres couleurs.  En Java, il existe un <i>type</i>
-<tt>Color</tt> pour désigner les couleurs.  La couleur verte est définie par
-<code>Color.green</code>.</p>
-	
-<p>Afin d'atteindre votre proie, il ne faut pas confondre la partie de la trace
-à suivre avec celle que votre buggle a déjà suivie, il est conseillé à votre
-buggle de laisser une trace derrière ses pas.  Pensez à utiliser la méthode
-<code>brushDown()</code> pour baisser votre crayon (et
-<code>brushUp()</code> pour le relever)</p>
-
-<p>Un buggle peut connaître la couleur de la case sur laquelle il est
-positionné en utilisant la méthode <code>Color getGroundColor()</code>.</p>
-
-<p>Enfin, n'oubliez de capturer votre proie une fois que vous l'aurez débusquée
-(avec <code>pickUpBaggle()</code>).</p>
-
-
-<h3>Objectif de cet exercice</h3>
-<a name="Objectifs"> Complétez la méthode <code>hunt()</code> ( qui sera
-appelée par la méthode <code>run()</code> automatiquement ). La méthode
-<tt>hunt()</tt> doit utiliser la méthode <code>isFacingTrail()</code> qui
-vous est fournie.
diff --git a/src/lessons/welcome/slug/hunting/SlugHunting.html b/src/lessons/welcome/slug/hunting/SlugHunting.html
deleted file mode 100644
index 281a4e2..0000000
--- a/src/lessons/welcome/slug/hunting/SlugHunting.html
+++ /dev/null
@@ -1,42 +0,0 @@
-<h2>Slug Hunting</h2>
-
-<p>
-After all this excitation of dance revolution, we will move on to a slower
-activity : the slug hunting. Your buggle just happened to found the trail of
-a slug: a green dribbling tracks. If it manage to follow it to its end, it
-will find a baggle representing an appetizing slug (from a buggle point of
-view). 
-</p>
-
-<p>
-To reach that goal, you have a boolean method
-<tt>isFacingTrail</tt>, which determine whether we are facing a
-green cell or not. Of course, if we are facing a wall, it returns
-false.In addition, this method preserve the state
-of the calling buggle and of the world. Such a method is said to have no
-<b>side effect</b>.
-</p>
-
-<p>It takes the color of the trail we want to
-follow as an argument. Slugs leave green trails, but other prey leave trails
-of other colors. In Java, there is a <i>data type</i> <tt>Color</tt> to
-indicate the colors. The green color is defined by <code>Color.green</code>.</p>
-	
-<p>In order to hunt your prey, you should not mistake the part of the tracks to follow with the one your
-buggle comes from, you should ask your buggle to leave a tracks behind
-it. Don't forget to use the <code>brushDown()</code>  method to put your
-brush down and <code>brushUp()</code> to move it up again.</p>
-
-<p>A buggle can know the color of the cell it is over using the <code>Color
-getGroundColor()</code> method.</p>
-
-<p>Finally, do not forget to capture your prey once you found it (using
-<code>pickUpBaggle()</code>).</p>
-
-
-<h3>Exercise goal</h3>
-<a name="Objectives">
-Complete the <code>hunt()</code> method (which gets
-called by <code>run()</code> automatically). You should use the
-<code>isFacingTrail()</code> method that is provided.
-</a>
diff --git a/src/lessons/welcome/slug/hunting/SlugHunting.java b/src/lessons/welcome/slug/hunting/SlugHunting.java
deleted file mode 100644
index 79bcbbd..0000000
--- a/src/lessons/welcome/slug/hunting/SlugHunting.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package lessons.welcome.slug.hunting;
-
-import java.awt.Color;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.bugglequest.Buggle;
-import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
-
-public class SlugHunting extends ExerciseTemplated {
-
-	public SlugHunting(Lesson lesson) {
-		super(lesson);
-
-		BuggleWorld[] myWorlds = new BuggleWorld[2];
-
-		BuggleWorld myWorld = new BuggleWorld("Forrest", 7, 7);
-		for (int i = 5; i >= 2; i--)
-			myWorld.setColor(6, i,Color.green);
-		myWorld.setColor(5, 2,Color.green);
-		for (int i = 2; i <= 4; i++)
-			myWorld.setColor(4, i,Color.green);
-		myWorld.setColor(3, 4,Color.green);
-		for (int i = 4; i >= 1; i--)
-			myWorld.setColor(2, i,Color.green);
-		myWorld.setColor(1, 1,Color.green);
-		myWorld.setColor(0, 1,Color.green);
-		try {
-			myWorld.newBaggle(0, 1);
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}
-		myWorlds[0] = myWorld;
-
-		myWorld = new BuggleWorld("Desert", 7, 7);
-		for (int i = 5; i >= 2; i--)
-		    myWorld.setColor(6, i,Color.green);
-		myWorld.putTopWall(6, 2);
-		myWorld.putLeftWall(6, 3);
-		myWorld.putLeftWall(0, 2);
-		myWorld.setColor(5, 2,Color.green);
-		myWorld.setColor(5, 1,Color.green);
-		myWorld.setColor(5, 0,Color.green);
-		myWorld.setColor(4, 0,Color.green);
-		myWorld.setColor(3, 0,Color.green);
-		myWorld.setColor(2, 0,Color.green);
-				       
-		myWorld.setColor(3, 4,Color.green);
-		for (int i = 4; i >= 1; i--)
-			myWorld.setColor(2, i,Color.green);
-		myWorld.setColor(4, 4,Color.green);
-
-		try {
-			myWorld.newBaggle(3, 4);
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}
-		myWorlds[1] = myWorld;
-
-		Buggle hunter = new Buggle(myWorlds[0], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
-		hunter.brushDown();
-
-		hunter = new Buggle(myWorlds[1], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
-		hunter.brushDown();
-
-		setup(myWorlds);
-	}
-
-}
\ No newline at end of file
diff --git a/src/lessons/welcome/slug/hunting/SlugHuntingEntity.java b/src/lessons/welcome/slug/hunting/SlugHuntingEntity.java
deleted file mode 100644
index ffb037f..0000000
--- a/src/lessons/welcome/slug/hunting/SlugHuntingEntity.java
+++ /dev/null
@@ -1,43 +0,0 @@
-package lessons.welcome.slug.hunting;
-
-import java.awt.Color;
-
-
-public class SlugHuntingEntity extends jlm.universe.bugglequest.SimpleBuggle {
-
-	@Override
-	public void run() {
-		hunt(); 
-	}
-
-	/* BEGIN TEMPLATE */
-	public void hunt() {
-		// Write your code here
-		/* BEGIN SOLUTION */
-		while (! isOverBaggle()) {
-			if (isFacingTrail(Color.green)) {
-				brushDown();
-				forward();
-				brushUp();
-			} else {
-				turnLeft();
-			}
-		}
-		pickUpBaggle();
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	boolean isFacingTrail(Color trailColor) {
-		if (isFacingWall())
-			return false;
-
-		forward();
-		boolean res = getGroundColor().equals(trailColor);
-		backward();
-		return res;
-
-	}		
-
-
-}
diff --git a/src/lessons/welcome/slug/hunting/SlugHuntingEntity.py b/src/lessons/welcome/slug/hunting/SlugHuntingEntity.py
deleted file mode 100644
index 931123f..0000000
--- a/src/lessons/welcome/slug/hunting/SlugHuntingEntity.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import java.awt.Color as Color
-
-def isFacingTrail(trailColor):
-   if isFacingWall():
-      return False
-   else:
-	  forward()
-	  res = getGroundColor().toString() == trailColor.toString()
-	  backward()
-	  return res
-
-# BEGIN TEMPLATE
-
-def hunt():
-   # write your code here
-   # BEGIN SOLUTION
-   while not isOverBaggle():
-      brushUp()
-      if isFacingTrail(Color.green):
-         brushDown()
-         forward()
-         brushUp()
-      else:
-	     turnLeft()
-   pickUpBaggle()
-   # END SOLUTION
-# END TEMPLATE
-
-hunt()
diff --git a/src/lessons/welcome/slug/tracking/SlugTracking.fr.html b/src/lessons/welcome/slug/tracking/SlugTracking.fr.html
deleted file mode 100644
index edc7f6b..0000000
--- a/src/lessons/welcome/slug/tracking/SlugTracking.fr.html
+++ /dev/null
@@ -1,26 +0,0 @@
-<h2>Pistage de la limace</h2>
-<p>
-Après toute l'excitation liée à la chasse à la limace, nous allons apprendre
-comment suivre leur piste. Votre buggle a en effet trouvé par hasard la
-trace d'une limace : une traînée baveuse verte. Si elle parvient à la suivre
-jusqu'au bout, elle trouvera un baggle représentant la grosse limace si
-appétissante (pour une buggle). 
-</p>
-<p>Pour arriver au résultat, vous devez écrire la méthode booléenne
-<tt>isFacingTrail</tt> décrite lors de l'exercice précédent, qui permet de
-savoir si on est face à une case verte ou non. Bien sûr, si on est face à un
-mur, elle doit répondre faux. Il faudrait de plus que cette méthode soit
-<b>sans effet de bord</b> en ne modifiannt pas ni le buggle qui l'appelle,
-ni le monde.</p>
-
-<p>Souvenez vous que cette méthode doit prendre en argument la couleur de la
-piste que l'on veut suivre. Les limaces laissent des traces vertes, mais
-d'autres proies laissent des traces d'autres couleurs.  En Java, il existe
-un <i>type</i> <tt>Color</tt> pour désigner les couleurs.  La couleur verte
-est définie par <code>Color.green</code>.</p>
-
-<h3>Objectif de cet exercice</h3>
-<a name="Objectifs"> Complétez la méthode <code>isFacingTrail()</code> qui
-sera appelée par la méthode <code>hunt()</code> définissant le comportement
-par défaut de votre buggle.  Vous n'avez pas à écrire la méthode
-<tt>hunt()</tt>.
diff --git a/src/lessons/welcome/slug/tracking/SlugTracking.html b/src/lessons/welcome/slug/tracking/SlugTracking.html
deleted file mode 100644
index e19181c..0000000
--- a/src/lessons/welcome/slug/tracking/SlugTracking.html
+++ /dev/null
@@ -1,23 +0,0 @@
-<h2>Slug Tracking</h2>
-<p>
-After all this excitation of slug hunting, we will have to learn how to track
-their trail. Your buggle just happened to found the trail of
-a slug: a green dribbling tracks. If it manage to follow it to its end, it
-will find a baggle representing an appetizing slug (from a buggle point of
-view). 
-</p>
-<p>To reach that goal, you had to write the previously given boolean method
-<tt>isFacingTrail</tt>, which should determine whether we are facing a
-green cell or not. Of course, if we are facing a wall, it should return
-false. It would be great if this method could have no <b>side effect</b>.
-on the calling buggle and on the world.</p>
-
-<p>Remember that this method takes the color of the trail we want to
-follow as an argument. Slugs leave green trails, but other prey leave trails
-of other colors. In Java, there is a <i>data type</i> <tt>Color</tt> to
-indicate the colors. The green color is defined by <code>Color.green</code>.</p>
-
-<h3>Exercise goal</h3>
-<a name="Objectives">Complete the <code>isFacingTrail()</code> method (which gets
-called by <code>hunt()</code> automatically). You don't have to write the
-<code>hunt()</code> method.
diff --git a/src/lessons/welcome/slug/tracking/SlugTracking.java b/src/lessons/welcome/slug/tracking/SlugTracking.java
deleted file mode 100644
index db5eec3..0000000
--- a/src/lessons/welcome/slug/tracking/SlugTracking.java
+++ /dev/null
@@ -1,71 +0,0 @@
-package lessons.welcome.slug.tracking;
-
-import java.awt.Color;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.Direction;
-import jlm.universe.bugglequest.Buggle;
-import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.bugglequest.exception.AlreadyHaveBaggleException;
-
-public class SlugTracking extends ExerciseTemplated {
-
-	public SlugTracking(Lesson lesson) {
-		super(lesson);
-
-		BuggleWorld[] myWorlds = new BuggleWorld[2];
-
-		BuggleWorld myWorld = new BuggleWorld("Forrest", 7, 7);
-		for (int i = 5; i >= 2; i--)
-			myWorld.setColor(6, i,Color.green);
-		myWorld.setColor(5, 2,Color.green);
-		for (int i = 2; i <= 4; i++)
-			myWorld.setColor(4, i,Color.green);
-		myWorld.setColor(3, 4,Color.green);
-		for (int i = 4; i >= 1; i--)
-			myWorld.setColor(2, i,Color.green);
-		myWorld.setColor(1, 1,Color.green);
-		myWorld.setColor(0, 1,Color.green);
-		try {
-			myWorld.newBaggle(0, 1);
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}
-		myWorlds[0] = myWorld;
-
-		myWorld = new BuggleWorld("Desert", 7, 7);
-		for (int i = 5; i >= 2; i--)
-		    myWorld.setColor(6, i,Color.green);
-		myWorld.putTopWall(6, 2);
-		myWorld.putLeftWall(6, 3);
-		myWorld.putLeftWall(0, 2);
-		myWorld.setColor(5, 2,Color.green);
-		myWorld.setColor(5, 1,Color.green);
-		myWorld.setColor(5, 0,Color.green);
-		myWorld.setColor(4, 0,Color.green);
-		myWorld.setColor(3, 0,Color.green);
-		myWorld.setColor(2, 0,Color.green);
-				       
-		myWorld.setColor(3, 4,Color.green);
-		for (int i = 4; i >= 1; i--)
-			myWorld.setColor(2, i,Color.green);
-		myWorld.setColor(4, 4,Color.green);
-
-		try {
-			myWorld.newBaggle(3, 4);
-		} catch (AlreadyHaveBaggleException e) {
-			e.printStackTrace();
-		}
-		myWorlds[1] = myWorld;
-
-		Buggle hunter = new Buggle(myWorlds[0], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
-		hunter.brushDown();
-
-		hunter = new Buggle(myWorlds[1], "Hunter", 6, 6, Direction.NORTH, Color.black, Color.lightGray);
-		hunter.brushDown();
-
-		setup(myWorlds);
-	}
-
-}
\ No newline at end of file
diff --git a/src/lessons/welcome/slug/tracking/SlugTrackingEntity.java b/src/lessons/welcome/slug/tracking/SlugTrackingEntity.java
deleted file mode 100644
index 085f789..0000000
--- a/src/lessons/welcome/slug/tracking/SlugTrackingEntity.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package lessons.welcome.slug.tracking;
-
-import java.awt.Color;
-
-
-public class SlugTrackingEntity extends jlm.universe.bugglequest.SimpleBuggle {
-
-	@Override
-	public void run() {
-		hunt(); 
-	}
-
-	public void hunt() {
-		while (! isOverBaggle()) {
-			if (isFacingTrail(Color.green)) {
-				brushDown();
-				forward();
-				brushUp();
-			} else {
-				turnLeft();
-			}
-		}
-		pickUpBaggle();
-	}
-
-	/* BEGIN TEMPLATE */
-	boolean isFacingTrail(Color trailColor) {
-		// Write your code here
-		/* BEGIN SOLUTION */
-		if (isFacingWall())
-			return false;
-		forward();
-		boolean res = getGroundColor().equals(trailColor); 
-		backward();
-		return res;
-		/* END SOLUTION */
-	}		
-	/* END TEMPLATE */
-
-}
diff --git a/src/lessons/welcome/slug/tracking/SlugTrackingEntity.py b/src/lessons/welcome/slug/tracking/SlugTrackingEntity.py
deleted file mode 100644
index 0cf796a..0000000
--- a/src/lessons/welcome/slug/tracking/SlugTrackingEntity.py
+++ /dev/null
@@ -1,29 +0,0 @@
-import java.awt.Color as Color
-
-# BEGIN TEMPLATE
-def isFacingTrail(trailColor):
-   # write your code here
-   # BEGIN SOLUTION
-   if isFacingWall():
-      return False
-   else:
-	  forward()
-	  res = getGroundColor().toString() == trailColor.toString()
-	  backward()
-	  return res
-   # END SOLUTION
-# END TEMPLATE
-
-def hunt():
-   while not isOverBaggle():
-      brushUp()
-      if isFacingTrail(Color.green):
-         brushDown()
-         forward()
-         brushUp()
-      else:
-	     turnLeft()
-   pickUpBaggle()
-
-hunt()
-
diff --git a/src/lessons/welcome/snake/Snake-answer0.map b/src/lessons/welcome/snake/Snake-answer0.map
new file mode 100644
index 0000000..c59b056
--- /dev/null
+++ b/src/lessons/welcome/snake/Snake-answer0.map
@@ -0,0 +1,52 @@
+BuggleWorld: Desert
+Size: 7x7
+Buggle(6,0): east,red,red,Snake
+Cell(0,0): red,nobaggle,topwall,leftwall,
+Cell(0,1): red,nobaggle,notopwall,leftwall,
+Cell(0,2): red,nobaggle,notopwall,leftwall,
+Cell(0,3): red,nobaggle,notopwall,leftwall,
+Cell(0,4): red,nobaggle,notopwall,leftwall,
+Cell(0,5): red,nobaggle,notopwall,leftwall,
+Cell(0,6): red,nobaggle,notopwall,leftwall,
+Cell(1,0): red,nobaggle,topwall,noleftwall,
+Cell(1,1): red,nobaggle,notopwall,noleftwall,
+Cell(1,2): red,nobaggle,notopwall,noleftwall,
+Cell(1,3): red,nobaggle,notopwall,noleftwall,
+Cell(1,4): red,nobaggle,notopwall,noleftwall,
+Cell(1,5): red,nobaggle,notopwall,noleftwall,
+Cell(1,6): red,nobaggle,notopwall,noleftwall,
+Cell(2,0): red,nobaggle,topwall,noleftwall,
+Cell(2,1): red,nobaggle,notopwall,noleftwall,
+Cell(2,2): red,nobaggle,notopwall,noleftwall,
+Cell(2,3): red,nobaggle,notopwall,noleftwall,
+Cell(2,4): red,nobaggle,notopwall,noleftwall,
+Cell(2,5): red,nobaggle,notopwall,noleftwall,
+Cell(2,6): red,nobaggle,notopwall,noleftwall,
+Cell(3,0): red,nobaggle,topwall,noleftwall,
+Cell(3,1): red,nobaggle,notopwall,noleftwall,
+Cell(3,2): red,nobaggle,notopwall,noleftwall,
+Cell(3,3): red,nobaggle,notopwall,noleftwall,
+Cell(3,4): red,nobaggle,notopwall,noleftwall,
+Cell(3,5): red,nobaggle,notopwall,noleftwall,
+Cell(3,6): red,nobaggle,notopwall,noleftwall,
+Cell(4,0): red,nobaggle,topwall,noleftwall,
+Cell(4,1): red,nobaggle,notopwall,noleftwall,
+Cell(4,2): red,nobaggle,notopwall,noleftwall,
+Cell(4,3): red,nobaggle,notopwall,noleftwall,
+Cell(4,4): red,nobaggle,notopwall,noleftwall,
+Cell(4,5): red,nobaggle,notopwall,noleftwall,
+Cell(4,6): red,nobaggle,notopwall,noleftwall,
+Cell(5,0): red,nobaggle,topwall,noleftwall,
+Cell(5,1): red,nobaggle,notopwall,noleftwall,
+Cell(5,2): red,nobaggle,notopwall,noleftwall,
+Cell(5,3): red,nobaggle,notopwall,noleftwall,
+Cell(5,4): red,nobaggle,notopwall,noleftwall,
+Cell(5,5): red,nobaggle,notopwall,noleftwall,
+Cell(5,6): red,nobaggle,notopwall,noleftwall,
+Cell(6,0): red,nobaggle,topwall,noleftwall,
+Cell(6,1): red,nobaggle,notopwall,noleftwall,
+Cell(6,2): red,nobaggle,notopwall,noleftwall,
+Cell(6,3): red,nobaggle,notopwall,noleftwall,
+Cell(6,4): red,nobaggle,notopwall,noleftwall,
+Cell(6,5): red,nobaggle,notopwall,noleftwall,
+Cell(6,6): red,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/snake/Snake.fr.html b/src/lessons/welcome/snake/Snake.fr.html
index 28167d5..585def1 100644
--- a/src/lessons/welcome/snake/Snake.fr.html
+++ b/src/lessons/welcome/snake/Snake.fr.html
@@ -1,24 +1,25 @@
 <h2>Monde de serpents</h2>
 
-Nous allons maintenant apprendre à la buggle à explorer son monde. Sa
+<p>Nous allons maintenant apprendre à la buggle à explorer son monde. Sa
 position de départ est en bas à gauche, et elle doit visiter toutes les
 cases juqu'en haut (en coloriant le sol sur son passage).  La boucle
 principale de la méthode <code>run()</code> (que vous devez écrire)  est de
-la forme : 
+la forme :</p>
 <pre>
  baisser le crayon
  tant que l'on est pas à la position finale
    avancer comme un serpent
 </pre>
 
-Le prototype de cette méthode (sa première ligne) doit être :
+<p>Le prototype de cette méthode (sa première ligne) doit être :</p>
 <pre>public void run()</pre>
-(nous verrons plus tard ce que ce <code>public</code> signifie).  Il faut
+<p>(nous verrons plus tard ce que ce <code>public</code> signifie).  Il faut
 donc écrire deux méthodes en plus de <code>run()</code>. L'une renvoit un
 booléen et indique si l'on se trouve à une position finale, tandis que
-l'autre ne renvoit pas de résultat et avance d'un pas.
+l'autre ne renvoit pas de résultat et avance d'un pas.</p>
 
-<p>On se trouve sur une position finale si et seulement si :
+<p>On se trouve sur une position finale si et seulement si les deux conditions
+suivantes sont vraies.:</p>
 <ul>
   <li>On est face à un mur</li>
   <li>Il y a un mur au nord de la buggle. Donc, si la buggle regarde à l'est, il
@@ -29,7 +30,7 @@ il faut vérifier s'il y a un mur à droite.<br/>
 <code>getDirection() == Direction.EAST</code> (WEST pour 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></p>
+</ul>
 
 <p>Ensuite un pas de serpent se fait en avancant d'un pas si l'on est pas face
 à un mur, et en montant à la ligne du dessus sinon (càd, si on regarde à
@@ -37,12 +38,14 @@ l'ouest face à un mur, il faut tourner à droite, avancer, tourner à droite).<
 
 <p>Indication: la boucle principale de la méthode <code>run()</code> doit
 continuer tant que la fonction adéquate renvoie faux. On peut l'écrire de
-deux façons:
-<pre>while (fonctionTest() == false)</pre>
-ou bien
-<pre>while (! fonctionTest())</pre>
-Cela fonctionne car le point d'exclamation en java indique une négation
-booléenne. 
+deux façons:</p>
+<pre class="Java">while (fonctionTest() == false)</pre>
+<pre class="python">while fonctionTest() == false:</pre>
+<p>ou bien</p>
+<pre class="Java">while (! fonctionTest())</pre>
+<pre class="Python">while not fonctionTest():</pre>
+<p class="Java">Cela fonctionne car le point d'exclamation en java indique une négation
+booléenne.</p>
 
 <p>À vous de jouer...</p>
 
diff --git a/src/lessons/welcome/snake/Snake.html b/src/lessons/welcome/snake/Snake.html
index 6b4cc19..c3c6d12 100644
--- a/src/lessons/welcome/snake/Snake.html
+++ b/src/lessons/welcome/snake/Snake.html
@@ -1,23 +1,23 @@
 <h2>Snake World</h2>
 
-We will now teach the buggle to explore its world. Its initial position is
+<p>We will now teach the buggle to explore its world. Its initial position is
 the bottom left corner, and it should visit any cells up to the top
 (coloring the ground on its path. The main loop of the <code>run()</code>
-method (that you should write) is something like: 
+method (that you should write) is something like:</p>
 <pre>
  move brush down
  while we did not reach the final position
    move like a snake
 </pre>
 
-The prototype of this method (its first line) must be:
+<p>The prototype of this method (its first line) must be:</p>
 <pre>public void run()</pre>
-(we will come back later on the meaning of <code>public</code>). We thus
+<p>(we will come back later on the meaning of <code>public</code>). We thus
 have to write two methods in addition to <code>run()</code>. The former
 returns a boolean indicating whether we are on a final position while the
-latter does not return any result and move one snake step forward.
+latter does not return any result and move one snake step forward.</p>
 
-<p>We reached the final position if and only if:
+<p>We reached the final position if and only if both conditions are true:</p>
 <ul>
   <li>We are facing a wall</li>
   <li>There is a wall on the north of the buggle. So, if the buggle is facing
@@ -28,18 +28,20 @@ buggle is facing west, you should check on the right side.<br/>
 <code>getDirection() == Direction.EAST</code> (WEST for west).<br/>
       For the checking itself, nothing magical: you have to turn the buggle and
 check whether it is facing a wall afterward.</li>
-</ul></p>
+</ul>
 
 <p>Then, a snake step can be achieved by moving one step forward if we are not
 facing a wall, and moving to the upper line else (ie, if you look to the
 west facing a wall, you have to turn right, forward and turn right).</p>
 
 <p>Hint: the main loop of the <code>run()</code> method must continue while the
-testing function returns false. Their is thus two way of writing it:
-<pre>while (testingFunction() == false)</pre>
-or
-<pre>while (! testingFunction())</pre>
-It works because the exclamation mark (!) means in Java a boolean negation. 
+testing function returns false. Their is thus two way of writing it:</p>
+<pre class="Java">while (testingFunction() == false)</pre>
+<pre class="python">while testingFunction() == False:</pre>
+<p>or</p>
+<pre class="Java">while (! testingFunction())</pre>
+<pre class="Python">while not testingFunction():</pre>
+<p class="Java">It works because the exclamation mark (!) means in Java a boolean negation.</p>
 
 <p>Your turn...</p>
 
diff --git a/src/lessons/welcome/traversal/column/TraversalByColumn-answer0.map b/src/lessons/welcome/traversal/column/TraversalByColumn-answer0.map
new file mode 100644
index 0000000..91543f5
--- /dev/null
+++ b/src/lessons/welcome/traversal/column/TraversalByColumn-answer0.map
@@ -0,0 +1,52 @@
+BuggleWorld: Grid
+Size: 7x7
+Buggle(6,6): north,black,red,Walker
+Cell(0,0): white,nobaggle,topwall,leftwall,0
+Cell(0,1): white,nobaggle,notopwall,leftwall,1
+Cell(0,2): white,nobaggle,notopwall,leftwall,2
+Cell(0,3): white,nobaggle,notopwall,leftwall,3
+Cell(0,4): white,nobaggle,notopwall,leftwall,4
+Cell(0,5): white,nobaggle,notopwall,leftwall,5
+Cell(0,6): white,nobaggle,notopwall,leftwall,6
+Cell(1,0): white,nobaggle,topwall,noleftwall,7
+Cell(1,1): white,nobaggle,notopwall,noleftwall,8
+Cell(1,2): white,nobaggle,notopwall,noleftwall,9
+Cell(1,3): white,nobaggle,notopwall,noleftwall,10
+Cell(1,4): white,nobaggle,notopwall,noleftwall,11
+Cell(1,5): white,nobaggle,notopwall,noleftwall,12
+Cell(1,6): white,nobaggle,notopwall,noleftwall,13
+Cell(2,0): white,nobaggle,topwall,noleftwall,14
+Cell(2,1): white,nobaggle,notopwall,noleftwall,15
+Cell(2,2): white,nobaggle,notopwall,noleftwall,16
+Cell(2,3): white,nobaggle,notopwall,noleftwall,17
+Cell(2,4): white,nobaggle,notopwall,noleftwall,18
+Cell(2,5): white,nobaggle,notopwall,noleftwall,19
+Cell(2,6): white,nobaggle,notopwall,noleftwall,20
+Cell(3,0): white,nobaggle,topwall,noleftwall,21
+Cell(3,1): white,nobaggle,notopwall,noleftwall,22
+Cell(3,2): white,nobaggle,notopwall,noleftwall,23
+Cell(3,3): white,nobaggle,notopwall,noleftwall,24
+Cell(3,4): white,nobaggle,notopwall,noleftwall,25
+Cell(3,5): white,nobaggle,notopwall,noleftwall,26
+Cell(3,6): white,nobaggle,notopwall,noleftwall,27
+Cell(4,0): white,nobaggle,topwall,noleftwall,28
+Cell(4,1): white,nobaggle,notopwall,noleftwall,29
+Cell(4,2): white,nobaggle,notopwall,noleftwall,30
+Cell(4,3): white,nobaggle,notopwall,noleftwall,31
+Cell(4,4): white,nobaggle,notopwall,noleftwall,32
+Cell(4,5): white,nobaggle,notopwall,noleftwall,33
+Cell(4,6): white,nobaggle,notopwall,noleftwall,34
+Cell(5,0): white,nobaggle,topwall,noleftwall,35
+Cell(5,1): white,nobaggle,notopwall,noleftwall,36
+Cell(5,2): white,nobaggle,notopwall,noleftwall,37
+Cell(5,3): white,nobaggle,notopwall,noleftwall,38
+Cell(5,4): white,nobaggle,notopwall,noleftwall,39
+Cell(5,5): white,nobaggle,notopwall,noleftwall,40
+Cell(5,6): white,nobaggle,notopwall,noleftwall,41
+Cell(6,0): white,nobaggle,topwall,noleftwall,42
+Cell(6,1): white,nobaggle,notopwall,noleftwall,43
+Cell(6,2): white,nobaggle,notopwall,noleftwall,44
+Cell(6,3): white,nobaggle,notopwall,noleftwall,45
+Cell(6,4): white,nobaggle,notopwall,noleftwall,46
+Cell(6,5): white,nobaggle,notopwall,noleftwall,47
+Cell(6,6): white,nobaggle,notopwall,noleftwall,48
diff --git a/src/lessons/welcome/traversal/column/TraversalByColumn.fr.html b/src/lessons/welcome/traversal/column/TraversalByColumn.fr.html
index ced8158..6dc6d51 100644
--- a/src/lessons/welcome/traversal/column/TraversalByColumn.fr.html
+++ b/src/lessons/welcome/traversal/column/TraversalByColumn.fr.html
@@ -4,9 +4,10 @@ L'objectif de cette série d'exercices est de faire parcourir le monde à la
 buggle.  Elle doit de plus numéroter les différentes cases rencontrées pour
 montrer son ordre de parcours. 
 
-<p>La boucle principale de la méthode <code>run()</code> (que vous devez
-écrire)  est de la forme : 
-<pre>
+<p div="Java">La boucle principale de la méthode <code>run()</code> (que vous devez
+écrire)  est de la forme :<p>
+<p div="python">La boucle principale du code que vous devez écrire est de la forme :<p>
+<p><pre>
  tant que l'on n'est pas à la position finale
    aller à la prochaine position
    marquer le numéro de case au sol 
@@ -15,9 +16,9 @@ montrer son ordre de parcours.
 <p>À la différence des exercices vus jusque là, nous n'allons pas utiliser les
 méthodes <code>forward()</code>, <code>backward()</code> et autres, mais
 nous allons calculer les coordonnées de la prochaine position de la buggle,
-et utiliser la méthode <code>setPos(int, int)</code> pour <i>téléporter</i>
-la buggle directement à cette position. Par exemple, <code>setPos(3,
-5)</code> téléporte la buggle sur la case où x=3 et y=5.</p>
+et utiliser la méthode <code>setPos(x, y)</code> pour <i>téléporter</i> la
+buggle directement à cette position. Par exemple, <code>setPos(3, 5)</code>
+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 à
@@ -43,12 +44,15 @@ votre programme ne se termine pas correctement.</p>
 <p>Il est temps d'écrire au sol les numéros de case. Pour cela, vous aurez
 besoin d'un compteur initialisé à zéro au début de votre méthode
 <code>run()</code>, et incrémenté de un à chaque pas (par exemple avec
-<code>cpt++;</code>). Ensuite, il faut écrire la valeur de ce compteur au
+<code>cpt += 1;</code>). Ensuite, il faut écrire la valeur de ce compteur au
 sol à chaque pas, par exemple avec <code>writeMessage(cpt);</code>.
 
-<p>Il est sans doute nécessaire d'écrire la valeur de la première ou dernière
+<p div="Java">Il est sans doute nécessaire d'écrire la valeur de la première ou dernière
 case en dehors de la boucle principale, selon que vous utilisez un
 <code>while {}</code> ou un <code>do {} while</code>...</p>
 
+<p div="python">Si vous le souhaitez, vous pouvez écrire la première valeur en dehors de la
+boucle <code>while ....:</code>.</p>
+
 <p>À vous de jouer...</p>
 
diff --git a/src/lessons/welcome/traversal/diagonal/TraversalDiagonal-answer0.map b/src/lessons/welcome/traversal/diagonal/TraversalDiagonal-answer0.map
new file mode 100644
index 0000000..94162d9
--- /dev/null
+++ b/src/lessons/welcome/traversal/diagonal/TraversalDiagonal-answer0.map
@@ -0,0 +1,52 @@
+BuggleWorld: Grid
+Size: 7x7
+Buggle(6,6): north,black,red,Walker
+Cell(0,0): white,nobaggle,topwall,leftwall,0
+Cell(0,1): white,nobaggle,notopwall,leftwall,1
+Cell(0,2): white,nobaggle,notopwall,leftwall,3
+Cell(0,3): white,nobaggle,notopwall,leftwall,6
+Cell(0,4): white,nobaggle,notopwall,leftwall,10
+Cell(0,5): white,nobaggle,notopwall,leftwall,15
+Cell(0,6): white,nobaggle,notopwall,leftwall,21
+Cell(1,0): white,nobaggle,topwall,noleftwall,2
+Cell(1,1): white,nobaggle,notopwall,noleftwall,4
+Cell(1,2): white,nobaggle,notopwall,noleftwall,7
+Cell(1,3): white,nobaggle,notopwall,noleftwall,11
+Cell(1,4): white,nobaggle,notopwall,noleftwall,16
+Cell(1,5): white,nobaggle,notopwall,noleftwall,22
+Cell(1,6): white,nobaggle,notopwall,noleftwall,28
+Cell(2,0): white,nobaggle,topwall,noleftwall,5
+Cell(2,1): white,nobaggle,notopwall,noleftwall,8
+Cell(2,2): white,nobaggle,notopwall,noleftwall,12
+Cell(2,3): white,nobaggle,notopwall,noleftwall,17
+Cell(2,4): white,nobaggle,notopwall,noleftwall,23
+Cell(2,5): white,nobaggle,notopwall,noleftwall,29
+Cell(2,6): white,nobaggle,notopwall,noleftwall,34
+Cell(3,0): white,nobaggle,topwall,noleftwall,9
+Cell(3,1): white,nobaggle,notopwall,noleftwall,13
+Cell(3,2): white,nobaggle,notopwall,noleftwall,18
+Cell(3,3): white,nobaggle,notopwall,noleftwall,24
+Cell(3,4): white,nobaggle,notopwall,noleftwall,30
+Cell(3,5): white,nobaggle,notopwall,noleftwall,35
+Cell(3,6): white,nobaggle,notopwall,noleftwall,39
+Cell(4,0): white,nobaggle,topwall,noleftwall,14
+Cell(4,1): white,nobaggle,notopwall,noleftwall,19
+Cell(4,2): white,nobaggle,notopwall,noleftwall,25
+Cell(4,3): white,nobaggle,notopwall,noleftwall,31
+Cell(4,4): white,nobaggle,notopwall,noleftwall,36
+Cell(4,5): white,nobaggle,notopwall,noleftwall,40
+Cell(4,6): white,nobaggle,notopwall,noleftwall,43
+Cell(5,0): white,nobaggle,topwall,noleftwall,20
+Cell(5,1): white,nobaggle,notopwall,noleftwall,26
+Cell(5,2): white,nobaggle,notopwall,noleftwall,32
+Cell(5,3): white,nobaggle,notopwall,noleftwall,37
+Cell(5,4): white,nobaggle,notopwall,noleftwall,41
+Cell(5,5): white,nobaggle,notopwall,noleftwall,44
+Cell(5,6): white,nobaggle,notopwall,noleftwall,46
+Cell(6,0): white,nobaggle,topwall,noleftwall,27
+Cell(6,1): white,nobaggle,notopwall,noleftwall,33
+Cell(6,2): white,nobaggle,notopwall,noleftwall,38
+Cell(6,3): white,nobaggle,notopwall,noleftwall,42
+Cell(6,4): white,nobaggle,notopwall,noleftwall,45
+Cell(6,5): white,nobaggle,notopwall,noleftwall,47
+Cell(6,6): white,nobaggle,notopwall,noleftwall,48
diff --git a/src/lessons/welcome/traversal/line/TraversalByLine-answer0.map b/src/lessons/welcome/traversal/line/TraversalByLine-answer0.map
new file mode 100644
index 0000000..1426e3b
--- /dev/null
+++ b/src/lessons/welcome/traversal/line/TraversalByLine-answer0.map
@@ -0,0 +1,52 @@
+BuggleWorld: Grid
+Size: 7x7
+Buggle(6,6): north,black,red,Walker
+Cell(0,0): white,nobaggle,topwall,leftwall,0
+Cell(0,1): white,nobaggle,notopwall,leftwall,7
+Cell(0,2): white,nobaggle,notopwall,leftwall,14
+Cell(0,3): white,nobaggle,notopwall,leftwall,21
+Cell(0,4): white,nobaggle,notopwall,leftwall,28
+Cell(0,5): white,nobaggle,notopwall,leftwall,35
+Cell(0,6): white,nobaggle,notopwall,leftwall,42
+Cell(1,0): white,nobaggle,topwall,noleftwall,1
+Cell(1,1): white,nobaggle,notopwall,noleftwall,8
+Cell(1,2): white,nobaggle,notopwall,noleftwall,15
+Cell(1,3): white,nobaggle,notopwall,noleftwall,22
+Cell(1,4): white,nobaggle,notopwall,noleftwall,29
+Cell(1,5): white,nobaggle,notopwall,noleftwall,36
+Cell(1,6): white,nobaggle,notopwall,noleftwall,43
+Cell(2,0): white,nobaggle,topwall,noleftwall,2
+Cell(2,1): white,nobaggle,notopwall,noleftwall,9
+Cell(2,2): white,nobaggle,notopwall,noleftwall,16
+Cell(2,3): white,nobaggle,notopwall,noleftwall,23
+Cell(2,4): white,nobaggle,notopwall,noleftwall,30
+Cell(2,5): white,nobaggle,notopwall,noleftwall,37
+Cell(2,6): white,nobaggle,notopwall,noleftwall,44
+Cell(3,0): white,nobaggle,topwall,noleftwall,3
+Cell(3,1): white,nobaggle,notopwall,noleftwall,10
+Cell(3,2): white,nobaggle,notopwall,noleftwall,17
+Cell(3,3): white,nobaggle,notopwall,noleftwall,24
+Cell(3,4): white,nobaggle,notopwall,noleftwall,31
+Cell(3,5): white,nobaggle,notopwall,noleftwall,38
+Cell(3,6): white,nobaggle,notopwall,noleftwall,45
+Cell(4,0): white,nobaggle,topwall,noleftwall,4
+Cell(4,1): white,nobaggle,notopwall,noleftwall,11
+Cell(4,2): white,nobaggle,notopwall,noleftwall,18
+Cell(4,3): white,nobaggle,notopwall,noleftwall,25
+Cell(4,4): white,nobaggle,notopwall,noleftwall,32
+Cell(4,5): white,nobaggle,notopwall,noleftwall,39
+Cell(4,6): white,nobaggle,notopwall,noleftwall,46
+Cell(5,0): white,nobaggle,topwall,noleftwall,5
+Cell(5,1): white,nobaggle,notopwall,noleftwall,12
+Cell(5,2): white,nobaggle,notopwall,noleftwall,19
+Cell(5,3): white,nobaggle,notopwall,noleftwall,26
+Cell(5,4): white,nobaggle,notopwall,noleftwall,33
+Cell(5,5): white,nobaggle,notopwall,noleftwall,40
+Cell(5,6): white,nobaggle,notopwall,noleftwall,47
+Cell(6,0): white,nobaggle,topwall,noleftwall,6
+Cell(6,1): white,nobaggle,notopwall,noleftwall,13
+Cell(6,2): white,nobaggle,notopwall,noleftwall,20
+Cell(6,3): white,nobaggle,notopwall,noleftwall,27
+Cell(6,4): white,nobaggle,notopwall,noleftwall,34
+Cell(6,5): white,nobaggle,notopwall,noleftwall,41
+Cell(6,6): white,nobaggle,notopwall,noleftwall,48
diff --git a/src/lessons/welcome/traversal/line/TraversalByLineEntity.py b/src/lessons/welcome/traversal/line/TraversalByLineEntity.py
index 25603e4..51216da 100644
--- a/src/lessons/welcome/traversal/line/TraversalByLineEntity.py
+++ b/src/lessons/welcome/traversal/line/TraversalByLineEntity.py
@@ -19,7 +19,6 @@ def isFacingWall(i):
 def isBackingWall(i):
 	errorMsg("I'm sorry Dave, I'm afraid I cannot let you use isFacingWall() in this exercise.")
 
-# BEGIN TEMPLATE
 # BEGIN SOLUTION
 
 def nextStep():
@@ -42,3 +41,4 @@ while not (getX() == getWorldWidth()-1 and getY() == getWorldHeight()-1):
 	nextStep();
 	cpt += 1
 	writeMessage(cpt);
+# END SOLUTION
\ No newline at end of file
diff --git a/src/lessons/welcome/traversal/zigzag/TraversalZigZag-answer0.map b/src/lessons/welcome/traversal/zigzag/TraversalZigZag-answer0.map
new file mode 100644
index 0000000..c1dc102
--- /dev/null
+++ b/src/lessons/welcome/traversal/zigzag/TraversalZigZag-answer0.map
@@ -0,0 +1,52 @@
+BuggleWorld: Grid
+Size: 7x7
+Buggle(6,6): north,black,red,Walker
+Cell(0,0): white,nobaggle,topwall,leftwall,0
+Cell(0,1): white,nobaggle,notopwall,leftwall,13
+Cell(0,2): white,nobaggle,notopwall,leftwall,14
+Cell(0,3): white,nobaggle,notopwall,leftwall,27
+Cell(0,4): white,nobaggle,notopwall,leftwall,28
+Cell(0,5): white,nobaggle,notopwall,leftwall,41
+Cell(0,6): white,nobaggle,notopwall,leftwall,42
+Cell(1,0): white,nobaggle,topwall,noleftwall,1
+Cell(1,1): white,nobaggle,notopwall,noleftwall,12
+Cell(1,2): white,nobaggle,notopwall,noleftwall,15
+Cell(1,3): white,nobaggle,notopwall,noleftwall,26
+Cell(1,4): white,nobaggle,notopwall,noleftwall,29
+Cell(1,5): white,nobaggle,notopwall,noleftwall,40
+Cell(1,6): white,nobaggle,notopwall,noleftwall,43
+Cell(2,0): white,nobaggle,topwall,noleftwall,2
+Cell(2,1): white,nobaggle,notopwall,noleftwall,11
+Cell(2,2): white,nobaggle,notopwall,noleftwall,16
+Cell(2,3): white,nobaggle,notopwall,noleftwall,25
+Cell(2,4): white,nobaggle,notopwall,noleftwall,30
+Cell(2,5): white,nobaggle,notopwall,noleftwall,39
+Cell(2,6): white,nobaggle,notopwall,noleftwall,44
+Cell(3,0): white,nobaggle,topwall,noleftwall,3
+Cell(3,1): white,nobaggle,notopwall,noleftwall,10
+Cell(3,2): white,nobaggle,notopwall,noleftwall,17
+Cell(3,3): white,nobaggle,notopwall,noleftwall,24
+Cell(3,4): white,nobaggle,notopwall,noleftwall,31
+Cell(3,5): white,nobaggle,notopwall,noleftwall,38
+Cell(3,6): white,nobaggle,notopwall,noleftwall,45
+Cell(4,0): white,nobaggle,topwall,noleftwall,4
+Cell(4,1): white,nobaggle,notopwall,noleftwall,9
+Cell(4,2): white,nobaggle,notopwall,noleftwall,18
+Cell(4,3): white,nobaggle,notopwall,noleftwall,23
+Cell(4,4): white,nobaggle,notopwall,noleftwall,32
+Cell(4,5): white,nobaggle,notopwall,noleftwall,37
+Cell(4,6): white,nobaggle,notopwall,noleftwall,46
+Cell(5,0): white,nobaggle,topwall,noleftwall,5
+Cell(5,1): white,nobaggle,notopwall,noleftwall,8
+Cell(5,2): white,nobaggle,notopwall,noleftwall,19
+Cell(5,3): white,nobaggle,notopwall,noleftwall,22
+Cell(5,4): white,nobaggle,notopwall,noleftwall,33
+Cell(5,5): white,nobaggle,notopwall,noleftwall,36
+Cell(5,6): white,nobaggle,notopwall,noleftwall,47
+Cell(6,0): white,nobaggle,topwall,noleftwall,6
+Cell(6,1): white,nobaggle,notopwall,noleftwall,7
+Cell(6,2): white,nobaggle,notopwall,noleftwall,20
+Cell(6,3): white,nobaggle,notopwall,noleftwall,21
+Cell(6,4): white,nobaggle,notopwall,noleftwall,34
+Cell(6,5): white,nobaggle,notopwall,noleftwall,35
+Cell(6,6): white,nobaggle,notopwall,noleftwall,48
diff --git a/src/lessons/welcome/turmites/helloturmite/HelloTurmite.fr.html b/src/lessons/welcome/turmites/helloturmite/HelloTurmite.fr.html
deleted file mode 100644
index 8e6964c..0000000
--- a/src/lessons/welcome/turmites/helloturmite/HelloTurmite.fr.html
+++ /dev/null
@@ -1,69 +0,0 @@
-<h2>Turmites</h2>
-
-<p>Cette exercice explore une nouvelle façon d'étendre le concept de la fourmi
-de Langton. Maintenant, le comportement de la fourmi ne dépend plus
-seulement de la couleur du sol, mais aussi de son état interne ( représenté
-par une valeur entière ). L'idée de changer la fourmi en un automate découle
-naturellement du concept de la machine de Turing. Ceci explique le nom de
-ces nouveaux animaux, qui est un mélange de <i>Turing</i> et de
-<i>Termite</i> ( si vous ne savez pas ce qu'est une machine de Turing, vous
-devriez vous jeter sur Wikipedia parce qu'il est tout simplement impossible
-d'être un vrai informaticien sans le savoir).</p>     
-
-<p>Encore une fois, vous avez seulement à écrire la méthode
-<code>step()</code>, dont le but est de réaliser un pas de turmite.
-Encore une fois, vous devez tout d'abord trouver la rang de la couleur de la
-case actuelle dans la séquence de couleur.
-Le tableau <code>colors</code> n'est pas passé en tant que paramètre mais
-est déclaré comme une variable globale. Cela ne devrait rien changer pour
-nous pouisque ce tableau n'a jamais été modifié pendant l'exécution. Cette
-astuce pour passer des paramètres constants n'est pas très propre, mais cela
-devrait améliorer un peu les performances.</p>   
-
-<p>La deuxième étape est d'utiliser la donnée <code>rule</code> selon la
-couleur actuelle et l'état courant.
-<code>rule</code> contient en fait trois informations dans chaque situation
-: la couleur à mettre, le mouvement à effectuer, et la valeur du prochain
-état. Par exemple, rule[1][0] contient l'information à utiliser quand
-<code>state==1</code> et <code>color==0</code>. En d'autres mots, vous
-pouvez récupérer l'information relative à votre situation actuelle en
-utilisant <code>rule[etatCourant][couleurActuelle]</code></p> 
-
-<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=droite, 4=demi-tour, 8=gauche. 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 quelquechose d'autre). Finalement, le troisième entier est
-la valeur du prochain <code>state</code> à avoir après cette itération.</p> 
-
-<p>Puisque ces notations arbitraires sont parfois difficiles à se souvenir, le
-code fourni définit un ensemble de constantes que vous pouvez utiliser à la
-place des valeurs numériques. Leurs noms sont LEFT, RIGHT, etc.
-Le modifieur <code>final static</code> avant leur type est la façon
-d'indiquer les variables comme constantes en Java ( nous nous excusons si la
-notation semble complexe ).
-Utiliser de telles constantes rend le code beaucoup plus simple à lire,
-puisque 
-<pre>
-  if (rule[state][currentColor][NEXT_MOVE] == LEFT) {
-    turnLeft();
-  }
-</pre>
-est beaucoup plus simple à lire que
-<pre>
-  if (rule[x][y][1] == 2) {
-    turnLeft();
-  }
-</pre>
- 
-<p>Vous devriez maintenant avoir assez d'informations pour réussir.</p>
-
-<h2>Notes bibliographiques</h2>
-<p>D'après Wikipedia, les turmites ont été inventés indépendamment à la fin des
-années 80. Il a été démontré que les turmites en général sont exactement
-équivalent en terme de puissance à des machines de Turing à une dimension
-avec un ruban infini, et peut donc simuler les autres. Cela signifie
-qu'absolument tous les programmes auxquels vous pouvez penser peuvent
-théoriquement être calculé sur cet outil.</p>
diff --git a/src/lessons/welcome/turmites/helloturmite/HelloTurmite.java b/src/lessons/welcome/turmites/helloturmite/HelloTurmite.java
deleted file mode 100644
index d6e613f..0000000
--- a/src/lessons/welcome/turmites/helloturmite/HelloTurmite.java
+++ /dev/null
@@ -1,33 +0,0 @@
-package lessons.welcome.turmites.helloturmite;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.turmite.TurmiteWorld;
-
-public class HelloTurmite extends ExerciseTemplated {
-	final static int NOTURN = 1;
-	final static int LEFT   = 2;
-	final static int BACK   = 4;
-	final static int RIGHT  = 8;
-
-	public HelloTurmite(Lesson lesson) {
-		super(lesson);
-		tabName = "Turmite";
-
-		BuggleWorld[] myWorlds = new BuggleWorld[] { // Name, #steps, rules, worldWidth, worldHeight, buggleX, buggleY
-				new TurmiteWorld("crabe (8342 steps)",           8342, 
-						         new int[][][] {{{1, LEFT, 0}, {1, LEFT, 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}}, 
-						         78, 72, 8, 33),
-				new TurmiteWorld("snail (10100 steps)",         10100, 
-						         new int[][][] {{{1, NOTURN, 1}, {1, RIGHT, 0}}, {{1, LEFT, 1}, {0, NOTURN, 0}}}, 
-						         68, 72, 36, 33),
-				new TurmiteWorld("stepped pyramid (4800 steps)", 4800, 
-						         new int[][][] {{{0, LEFT, 1}, {0, RIGHT, 0}}, {{1, RIGHT, 1}, {1, NOTURN, 0}}}, 
-						         65, 65, 60, 55), 
-		};
-
-		setup(myWorlds);
-
-	}
-}
\ No newline at end of file
diff --git a/src/lessons/welcome/turmites/helloturmite/HelloTurmiteEntity.java b/src/lessons/welcome/turmites/helloturmite/HelloTurmiteEntity.java
deleted file mode 100644
index 162b4c9..0000000
--- a/src/lessons/welcome/turmites/helloturmite/HelloTurmiteEntity.java
+++ /dev/null
@@ -1,72 +0,0 @@
-package lessons.welcome.turmites.helloturmite;
-
-import java.awt.Color;
-
-import jlm.universe.bugglequest.SimpleBuggle;
-
-public class HelloTurmiteEntity extends SimpleBuggle {
-	Color[] allColors = {Color.white, Color.black, Color.blue, Color.cyan, Color.green, Color.orange, Color.red, 
-			Color.gray, Color.magenta, Color.darkGray, Color.pink, Color.lightGray};
-
-	/* BEGIN TEMPLATE */
-	/* Do not change these definitions */
-	final static int STOP   = 0;
-	final static int NOTURN = 1;
-	final static int LEFT   = 2;
-	final static int BACK   = 4;
-	final static int RIGHT  = 8;
-
-	final static int NEXT_COLOR = 0;
-	final static int NEXT_MOVE  = 1;
-	final static int NEXT_STATE = 2;
-
-
-	int state = 0;
-
-	public void step(Color[] colors, int[][][] rule ) {
-		int currentColor=0;
-		/* Your code comes here */
-		/* BEGIN SOLUTION */
-		Color current = getGroundColor(); 
-		for (int i=0;i<colors.length;i++) 
-			if (current.equals(colors[i])) 
-				currentColor = i;
-
-		setBrushColor(colors[ rule[state][currentColor][NEXT_COLOR] ]);
-		brushDown();
-		brushUp();
-
-		switch (rule[state][currentColor][NEXT_MOVE]) {
-		case STOP:   /* nothing */;            break;
-		case NOTURN: /* no turn */; forward(); break;
-		case LEFT:   turnLeft();   	forward(); break;
-		case RIGHT:  turnRight();   forward(); break;
-		case BACK:   turnBack();    forward(); break;
-		default:
-			System.out.println("Unknown turn command associated to i="+currentColor+": "+rule[state][currentColor][NEXT_MOVE]);
-		}
-
-		state = rule[state][currentColor][NEXT_STATE];
-
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	@Override
-	public void run() { 
-		int nbSteps = (Integer)getParam(0);
-		Color[] colors; 
-		int[][][] rule; 
-
-		rule = ((int[][][])getParam(1));
-
-		colors = new Color[rule.length];
-		for (int i=0; i<rule.length; i++)
-			colors[i] = allColors[i];
-
-		for (int i=0;i<nbSteps;i++) {
-			((jlm.universe.turmite.TurmiteWorld)world).stepDone();
-			step(colors,rule);
-		}
-	}
-}
diff --git a/src/lessons/welcome/turmites/langton/Langton.fr.html b/src/lessons/welcome/turmites/langton/Langton.fr.html
deleted file mode 100644
index ed9dd01..0000000
--- a/src/lessons/welcome/turmites/langton/Langton.fr.html
+++ /dev/null
@@ -1,58 +0,0 @@
-<h2>La fourmi de Langton</h2>
-
-<p>Dans cet exercice, vous aller métamorphoser votre buggle en une <i>fourmi de
-Langton</i>. Ces petits animaux artificiels sont très intéressants parce
-qu'ils suivent des règles simples qui dépendent seulement de leur
-environnement local, et qu'après une période d'un comportement d'apparence
-chaotique, un schéma général <i>apparaît</i></p>
-
-<p>Les règles sont absolument triviales: pour calculer quel sera le prochain
-pas, vous devez regarder la couleur actuelle du sol ( en utilisant
-<code>getGroundColor()</code>). Si c'est blanc, changez la en noir, tournez
-à droite et avancez d'une case. Si la couleur du sol est le noir, changez la
-en blanc, tournez à gauche et avancez d'une case.</p> 
-
-<p>Il est difficile de trouver des règles plus simples, n'est-ce pas ? Et bien,
-allons-y et codons les maintenant. Vous avez à compléter la méthode
-<code>step()</code>, qui définit le comportement de la fourmi à chaque
-pas. Vous utiliserez probablement la méthode <code>getGroundColor()</code>
-pour récupérer la valeur de la case sur laquelle la fourmi se trouve. Pour
-comparer des couleurs, vous ne pouvez pas utiliser le signe égal (=), parce
-que les couleurs ne sont pas des valeurs scalaires mais des objets. A la
-place, vous aurez besoin d'écrire quelquechose comme:
-</p> 
-<pre>
-Color c /* = une initialisation*/;
-if (c.equals(Color.black)) {
-  /* c'était égal */
-} else {
-  /* ce n'était pas égal */
-}
-</pre>
-
-<p>Changer la couleur du sol n'est pas difficile, seulement un peu long : vous
-avez à changer la couleur de la brosse de votre buggle, l'abaisser ( pour
-marquer la case courante -- avec <code>brushDown()</code>, et relever la
-brosse (avec <code>brushUp()</code>) pour éviter des problèmes lorsque la
-buggle va se déplacer. Vous être naturellement libre d'organiser votre code
-comme vous le souhaitez, mais vous pouvez vouloir écrire une méthode
-<code>void setGroundColor(Color c)</code> pour factoriser le tout.</p>
-
-<h2>Plus d'informations sur la fourmi de Langton</h2>
-
-<p>Comme vous pouvez le constater avec l'exécution de cet exercice, l'intérêt
-dans cet algorithme est qu'après environ 10 000 pas de comportement
-relativement chaotique, la fourmi commence à suivre un schéma
-régulier. L'émergence de ce schéma régulier à partir du chaos est réellement
-fascinant, n'est-ce pas ?</p>   
-
-<p>Ce mécanisme a été inventé en 1986 par Chris Langton, et généralisé après de
-plusieures façons (comme nous le verrons dans les prochains exercices). Il a
-été prouvé en 2000 que la trajectoire de la fourmi peut être utilisée pour
-calculer n'importe quel circuit booléen, et que la fourmi est capable de
-calcul universel ( ie, n'importe quel calcul possible peut être réalisé en
-utilisant la fourmi comme instrument de calcul). Encore un autre sujet de
-fascination...</p>
-
-<p>Consultez la page correspondante sur Wikipedia, à partir de laquelle cet
-exercice est inspiré, pour d'avantages de détails.</p>     
\ No newline at end of file
diff --git a/src/lessons/welcome/turmites/langton/Langton.html b/src/lessons/welcome/turmites/langton/Langton.html
deleted file mode 100644
index 3306239..0000000
--- a/src/lessons/welcome/turmites/langton/Langton.html
+++ /dev/null
@@ -1,53 +0,0 @@
-<h2>Langton's ant</h2>
-
-<p>In this exercise, you will turn your buggle into a <i>Langton's ant</i>. These 
-artificial little animals are very interesting because they are given simple 
-rules that depend only on their local environment, and after a period of 
-apparent chaotic behavior, a general pattern <i>emerges</i>.</p>
-
-<p>The rules are absolutely trivial: to compute what the next step should be, 
-you should check the current color of the ground (using 
-<code>getGroundColor()</code>). If it's white, change it to black, turn right 
-and move forward by one cell. If the ground is currently black, change it to 
-white, turn left and move forward by one cell.</p> 
-
-<p>It's hard to come up with simpler rules isn't it? Well, let's go and code it 
-now. You have to complete the <code>step()</code> method, which encodes the 
-behavior of the ant at each step. You will probably use the <code>getGroundColor()</code> 
-method to retrieve the color of the cell on which the ant is currently. 
-Colors of interest are simply named <code>Color.black</code> and <code>Color.white</code>.</p>
-
-<p class="Java">To compare colors, you cannot use the equal sign (=), because these things are not 
-scalar values but objects. Instead, you need to write something like the following:
-</p> 
-<pre class="Java">
-Color c /* = some initialization */;
-if (c.equals(Color.black)) {
-  /* that's equal */
-} else {
-  /* that was not equal */
-}
-</pre>
-
-<p>Changing the ground color is not difficult, but a bit long: you have to 
-change the brush color of your buggle, set the brush down (to mark the current 
-cell -- with <code>brushDown()</code>), and set the brush back up (with 
-<code>brushUp()</code>) to avoid further issues when the buggle will 
-move. You are naturally free of organizing your code the way you want, but you may
-want to write a <code>setGroundColor</code> method to factorize things a bit.</p>
-
-<h2>More information on Langton's ant</h2>
-
-<p>As you can see from the execution of this exercise, the interest in this algorithm 
-is that after about 10000 steps of relative chaotic behavior, the ant start building 
-a regular pattern. This emergence of a regular pattern from the chaos is rather 
-fascinating, isn't it?</p>   
-
-<p>This mechanism were invented in 1986 by Chris Langton, and later generalized 
-in several ways (as we shall see in the next exercises). It was proven in 2000 that 
-the ant's trajectory can be used to compute any boolean circuit, and thus that the 
-ant is capable of universal computation (ie, any possible computation can be achieved 
-using the ant as a computing device). Yet another subject of fascination...</p>
-
-<p>Check the corresponding wikipedia web page, of which this exercise is inspired, 
-for further details.</p>     
\ No newline at end of file
diff --git a/src/lessons/welcome/turmites/langton/Langton.java b/src/lessons/welcome/turmites/langton/Langton.java
deleted file mode 100644
index 211d93b..0000000
--- a/src/lessons/welcome/turmites/langton/Langton.java
+++ /dev/null
@@ -1,16 +0,0 @@
-package lessons.welcome.turmites.langton;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.turmite.TurmiteWorld;
-
-public class Langton extends ExerciseTemplated {
-
-	public Langton(Lesson lesson) {
-		super(lesson);
-		tabName = "LangtonsAnt";
-
-		setup(new TurmiteWorld("12000 steps",12000,null,100, 70, 66,23));
-
-	}
-}
diff --git a/src/lessons/welcome/turmites/langton/LangtonEntity.java b/src/lessons/welcome/turmites/langton/LangtonEntity.java
deleted file mode 100644
index 91bafd8..0000000
--- a/src/lessons/welcome/turmites/langton/LangtonEntity.java
+++ /dev/null
@@ -1,40 +0,0 @@
-package lessons.welcome.turmites.langton;
-
-import java.awt.Color;
-
-import jlm.universe.bugglequest.SimpleBuggle;
-
-public class LangtonEntity extends SimpleBuggle {
-	/* BEGIN TEMPLATE */
-	public void step() {
-		/* BEGIN SOLUTION */
-		if (getGroundColor().equals(Color.white)) {
-			turnRight();
-
-			setBrushColor(Color.black);
-			brushDown();
-			brushUp();
-
-			forward();
-		} else {
-			turnLeft();
-
-			setBrushColor(Color.white);
-			brushDown();
-			brushUp();
-
-			forward();				
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	@Override
-	public void run() { 
-		int nbSteps = (Integer)getParam(0); 
-		for (int i=0;i<nbSteps;i++) {
-			step();
-			((jlm.universe.turmite.TurmiteWorld)world).stepDone();
-		}
-	}
-}
diff --git a/src/lessons/welcome/turmites/langtoncolors/LangtonColors.fr.html b/src/lessons/welcome/turmites/langtoncolors/LangtonColors.fr.html
deleted file mode 100644
index f5289e2..0000000
--- a/src/lessons/welcome/turmites/langtoncolors/LangtonColors.fr.html
+++ /dev/null
@@ -1,44 +0,0 @@
-<h2>La fourmi de Langton multicolore</h2>
-
-<p>Il y a plusieures façons de changer le concept de la fourmi de Langton. Dans
-cet exercice, nous allons tout d'abord étudier le fait d'utiliser plus de
-deux couleurs. Cela reste très similaire au cas de base : le comportement à
-chaque pas dépendra toujours de la couleur du sol, mais vous aurez plus de
-deux possibilitées. Cela permet d'avoir plus qu'une seule sorte de fourmi,
-selon ce que l'on décide de faire pour chaque couleur. Par exemple, la
-fourmi LRL reconnait trois couleurs. Elle tourne à gauche sur la première, à
-droite sur la seconde et à gauche sur la troisième. Selon cette définition,
-la fourmi de base est de type RL ( puisqu'elle tourne à droite sur les cases
-blanches et à gauche sur les noires).</p>
-
-<p>Certaines de ces fourmis dessinent des schémas fascinants ( changez de monde
-pour les voir ):LLRR construit une figure symétrique ressemblant vaguement à
-une balle. LRRRRRLLR dessine un carré, LLRRRLRLRLLR dessine un schéma
-régulier tordu après une période ressemblant à un comportement chaotique, et
-RRLLLRLLLRRR semble remplir un sablier...</p>  
-
-<p>Métamorphoser votre buggle en une fourmi de Langton générique n'est pas très
-compliqué, même si ce n'est pas complètement trivial. Comme précédemment,
-vous avez à écrire une fonction <code>step</code>. Mais cette fois, elle
-reçoit deux tableaux comme paramètres. Le premier définit les règles à
-suivre selon la couleur du sol tandis que le deuxième done la séquence de
-couleur à utiliser. Par exemple, la fourmi de base aurait <code>{'R',
-'L'}</code> et <code>{Color.white, Color.black}</code> comme arguments.</p>
-
-<p>A chaque pas, vous avez toujours à appliquer le pseudo-code suivant :</p>
-<ul>
- <li>Trouver la position de la couleur du sol dans la séquence de couleur;</li>
- <li>Tourner à gauche ou à droite selon le contenu du tableau de règle à cette
-position;</li>
- <li>Marquer le sol de la case courante avec la prochaine couleur dans la
-séquence ( la dernière couleur est suivie par la première);</li>
- <li>Avancer d'un pas</li>
-</ul> 
-
-<p>Vous devriez maintenant avoir assez d'informations pour réussir.</p>
-
-<h2>Notes bibliographiques</h2>
-<p>Selon Wikipedia, les fourmis de Langton multicolores ont été découvertes en
-1995 par Propp et Al. Un autre fait amusant est que les fourmis dont le nom
-est une paire de lettres identiques (LL et RR) produisent des dessins
-symétriques. Ce fait a même été prouvré formellement.</p>
diff --git a/src/lessons/welcome/turmites/langtoncolors/LangtonColors.html b/src/lessons/welcome/turmites/langtoncolors/LangtonColors.html
deleted file mode 100644
index 1d31aff..0000000
--- a/src/lessons/welcome/turmites/langtoncolors/LangtonColors.html
+++ /dev/null
@@ -1,45 +0,0 @@
-<h2>Multicolor Langton's ant</h2>
-
-<p>There is several ways to extend the concept of Langton's ant. In this exercise, 
-we explore first one, using more than two colors. It remains very similar to the 
-base case: the behavior at each step still depends on the ground color, but you 
-have more than 2 possibilities. It allows to have more than one kind of ant, 
-depending on what you decide to do for each color. For example, the ant LRL takes
-3 colors. It turns left on the first color, right on the second one and left 
-on the third color. According to this definition, the basic ant is a RL (since it 
-turns right on white cells and left on black ones).</p>
-
-<p>Some of these ants draw fascinating patterns (switch the world to see them): 
-LLRR build a symmetric figure resembling loosely to a ball, LRRRRRLLR draws a 
-square, LLRRRLRLRLLR draws a convoluted regular pattern after a period of 
-seemingly chaotic behavior, and RRLLLRLLLRRR seems to fill a hour glass...</p>  
-
-<p class="Java">Changing your buggle into a generic Langton's ant is not very complicated, 
-although it is not completely trivial. As previously, you have to write a 
-<code>step</code> function. But this time, it receives two arrays as parameters. 
-The first one defines the rules to follow depending on the ground color while the 
-second one gives the sequence of colors to use. For example, the basic ant would 
-have <code>{'R', 'L'}</code> and <code>{Color.white, Color.black}</code> as arguments.</p>
-
-<p class="python">Changing your buggle into a generic Langton's ant is not very complicated, 
-although it is not completely trivial. As previously, you have to write a 
-<code>step</code> function. But this time, it receives two arrays as parameters. 
-The first one defines the rules to follow depending on the ground color while the 
-second one gives the sequence of colors to use. For example, the basic ant would 
-have <code>['R', 'L']</code> and <code>[Color.white, Color.black]</code> as arguments.</p>
-
-<p>At each step, you thus have to apply the following pseudo-code:</p>
-<ul>
- <li>Find the position of the ground color in the color sequence;</li>
- <li>Turn left or right depending on the content of the rule array at that position;</li>
- <li>Mark the current ground with the next color in the sequence (the last color being followed by the first one);</li>
- <li>Move forward by one step.</li>
-</ul> 
-
-<p>You now should have enough information to succeed.</p>
-
-<h2>Bibliographical notes</h2>
-<p>According to wikipedia, multicolor Langton's ants were discovered in 1995 by Propp 
-et Al. Another funny fact is that the ants which name is a list of consecutive pair of 
-identical letters (LL and RR) produce symmetric patterns. This fact was even formally 
-proved.</p>
diff --git a/src/lessons/welcome/turmites/langtoncolors/LangtonColors.java b/src/lessons/welcome/turmites/langtoncolors/LangtonColors.java
deleted file mode 100644
index 7e43d85..0000000
--- a/src/lessons/welcome/turmites/langtoncolors/LangtonColors.java
+++ /dev/null
@@ -1,28 +0,0 @@
-package lessons.welcome.turmites.langtoncolors;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.bugglequest.BuggleWorld;
-import jlm.universe.turmite.TurmiteWorld;
-
-public class LangtonColors extends ExerciseTemplated {
-	BuggleWorld createWorld(String rule, int nbSteps, int width, int height, int buggleX, int buggleY) {
-		return new TurmiteWorld(rule+" ("+nbSteps+" steps)", nbSteps, rule.toCharArray(), width, height, buggleX, buggleY);
-	}
-	
-	public LangtonColors(Lesson lesson) {
-		super(lesson);
-		tabName = "LangtonsAnt";
-
-		BuggleWorld[] myWorlds = new BuggleWorld[] {
-				 createWorld("RL",           12001, 100, 70, 66, 23),
-				 createWorld("LLRR",         20001,  30, 30, 15, 15),
-				 createWorld("LRRRRRLLR",     9001,  25, 24, 11, 12),
-				 createWorld("LLRRRLRLRLLR", 36001, 120, 60, 100, 30),
-				 createWorld("RRLLLRLLLRRR", 30001,  80, 90, 60, 28),
-		};
-		
-		setup(myWorlds);
-
-	}
-}
diff --git a/src/lessons/welcome/turmites/langtoncolors/LangtonColorsEntity.java b/src/lessons/welcome/turmites/langtoncolors/LangtonColorsEntity.java
deleted file mode 100644
index d36a3be..0000000
--- a/src/lessons/welcome/turmites/langtoncolors/LangtonColorsEntity.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package lessons.welcome.turmites.langtoncolors;
-
-import java.awt.Color;
-
-import jlm.universe.bugglequest.SimpleBuggle;
-
-public class LangtonColorsEntity extends SimpleBuggle {
-	Color[] allColors = {Color.white, Color.black, Color.blue, Color.cyan, Color.green, Color.orange, Color.red, 
-			Color.gray, Color.magenta, Color.darkGray, Color.pink, Color.lightGray};
-
-	/* BEGIN TEMPLATE */
-	public void step(char[] rule, Color[] colors) {
-		/* BEGIN SOLUTION */
-		Color current = getGroundColor(); 
-		for (int i=0;i<colors.length;i++) {
-			if (current.equals(colors[i])) {
-				switch (rule[i]) {
-				case 'L': turnLeft(); break;
-				case 'R': turnRight(); break;
-				default:
-					System.out.println("Unknown command associated to i="+i+": "+rule[i]);
-				}
-
-				setBrushColor(colors[(i+1) % colors.length]);
-				brushDown();
-				brushUp();
-
-				forward();
-
-				return;
-			}
-		}
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	@Override
-	public void run() { 
-		int nbSteps = (Integer)getParam(0);
-		char[] rule = ((char[])getParam(1));
-
-		Color[] colors = new Color[rule.length];
-		for (int i=0; i<rule.length; i++)
-			colors[i] = allColors[i];
-
-		for (int i=0;i<nbSteps;i++) {
-			((jlm.universe.turmite.TurmiteWorld)world).stepDone();
-			step(rule,colors);
-		}
-	}
-}
diff --git a/src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.fr.html b/src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.fr.html
deleted file mode 100644
index 6f1a344..0000000
--- a/src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.fr.html
+++ /dev/null
@@ -1,168 +0,0 @@
-<h2>Créer des Turmites</h2>
-
-<p>Cet exercice vous permet de construire vos propres turmites. Pour réussir
-cet exercice, vous devez simplement écrire une méthode <code>init()</code>
-qui initialise <code>rule</code> pour utiliser les tables de transitions
-suivantes ( de Wikipedia ), met la position initiale du buggle à (8;33), et
-demande de faire 8342 pas.</p> 
-
-<table border="1" style="text-align:center">
-<tr>
-<th rowspan="3" colspan="2"></th>
-<th colspan="6">Couleur actuelle</th>
-</tr>
-<tr>
-<th colspan="3">0</th>
-<th colspan="3">1</th>
-
-</tr>
-<tr style="font-size:9pt">
-<th>Couleur à mettre</th>
-<th>Virage</th>
-<th>État suivant</th>
-<th>Couleur à mettre</th>
-<th>Virage</th>
-<th>État suivant</th>
-</tr>
-<tr>
-<th rowspan="2">État courant</th>
-
-<th>0</th>
-<td>1</td>
-<td>R</td>
-<td>0</td>
-<td>1</td>
-<td>R</td>
-<td>1</td>
-</tr>
-<tr>
-<th>1</th>
-
-<td>0</td>
-<td>N</td>
-<td>0</td>
-<td>0</td>
-<td>N</td>
-<td>1</td>
-</tr>
-</table>
-
-<p>Où les virages à effectuer sont
-<b>L</b> (90° vers la gauche -- left),
-<b>R</b> (90° vers la droite -- right),
-<b>N</b> (rien -- no turn),
-<b>U</b> (demi tour de 180° -- U-turn).</p>
-
-<h2>Aller plus loin</h2>
-<p>Cet exercice est naturellement une excuse pour vous laisser expérimenter vos
-propres turmites. Vous êtes libres de changer la table de transition et le
-nombre de pas pour expérimenter par vous-même. A ce propos, vous pouvez
-trouver la bibliothèque Ed Pegg Jr's utile. Si vous trouvez de nouveaux
-schémas intéressants, envoyez-les nous pas email afin que nous les puissions
-les ajouter à cette liste.  </p>
-
-<p>De plus, Wikipedia manque désespérement de quelques beaux et colorés
-turmites: seuls des noirs et blancs sont décrits. Vous pouvez considérer
-l'idée de soumettre vos créations directement à l'encyclopédie libre.</p>
-
-<pre>
-EdPeggJrTurmiteLibrary = [
-# source: http://demonstrations.wolfram.com/Turmites/
-# Translated into his later notation: 1=noturn, 2=right, 4=u-turn, 8=left
-# (all these are 2-color patterns)
-"{{{1, 2, 0}, {0, 8, 0}}}",  # 1: Langton's ant
-"{{{1, 2, 0}, {0, 1, 0}}}",  # 2: binary counter
-"{{{0, 8, 1}, {1, 2, 1}}, {{1, 1, 0}, {1, 1, 1}}}", # 3: (filled triangle)
-"{{{0, 1, 1}, {0, 8, 1}}, {{1, 2, 0}, {0, 1, 1}}}", # 4: spiral in a box
-"{{{0, 2, 1}, {0, 8, 0}}, {{1, 8, 1}, {0, 2, 0}}}", # 5: stripe-filled spiral
-"{{{0, 2, 1}, {0, 8, 0}}, {{1, 8, 1}, {1, 1, 0}}}", # 6: stepped pyramid
-"{{{0, 2, 1}, {0, 1, 1}}, {{1, 2, 1}, {1, 8, 0}}}", # 7: contoured island
-"{{{0, 2, 1}, {0, 2, 1}}, {{1, 1, 0}, {0, 2, 1}}}", # 8: woven placemat
-"{{{0, 2, 1}, {1, 2, 1}}, {{1, 8, 1}, {1, 8, 0}}}", # 9: snowflake-ish
-"{{{1, 8, 0}, {0, 1, 1}}, {{0, 8, 0}, {0, 8, 1}}}", # 10: slow city builder
-"{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 0}, {0, 8, 1}}}", # 11: framed computer art
-"{{{1, 8, 0}, {1, 2, 1}}, {{0, 2, 1}, {1, 8, 0}}}", # 12: balloon bursting (makes a spreading highway)
-"{{{1, 8, 1}, {0, 8, 0}}, {{1, 1, 0}, {0, 1, 0}}}", # 13: makes a horizontal highway
-"{{{1, 8, 1}, {0, 8, 0}}, {{1, 2, 1}, {1, 2, 0}}}", # 14: makes a 45 degree highway
-"{{{1, 8, 1}, {0, 8, 1}}, {{1, 2, 1}, {0, 8, 0}}}", # 15: makes a 45 degree highway
-"{{{1, 8, 1}, {0, 1, 0}}, {{1, 1, 0}, {1, 2, 0}}}", # 16: spiral in a filled box
-"{{{1, 8, 1}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}", # 17: glaciers
-"{{{1, 8, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 1, 0}}}", # 18: golden rectangle!
-"{{{1, 8, 1}, {1, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}", # 19: fizzy spill
-"{{{1, 8, 1}, {1, 2, 1}}, {{1, 1, 0}, {0, 1, 1}}}", # 20: nested cabinets
-"{{{1, 1, 1}, {0, 8, 1}}, {{1, 2, 0}, {1, 1, 1}}}", # 21: (cross)
-"{{{1, 1, 1}, {0, 1, 0}}, {{0, 2, 0}, {1, 8, 0}}}", # 22: saw-tipped growth
-"{{{1, 1, 1}, {0, 1, 1}}, {{1, 2, 1}, {0, 1, 0}}}", # 23: curves in blocks growth
-"{{{1, 1, 1}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 0}}}", # 24: textured growth
-"{{{1, 1, 1}, {0, 2, 1}}, {{1, 8, 0}, {1, 2, 0}}}", # 25: (diamond growth)
-"{{{1, 1, 1}, {1, 8, 0}}, {{1, 2, 1}, {0, 1, 0}}}", # 26: coiled rope
-"{{{1, 2, 0}, {0, 8, 1}}, {{1, 8, 0}, {0, 1, 1}}}", # 27: (growth)
-"{{{1, 2, 0}, {0, 8, 1}}, {{1, 8, 0}, {0, 2, 1}}}", # 28: (square spiral)
-"{{{1, 2, 0}, {1, 2, 1}}, {{0, 1, 0}, {0, 1, 1}}}", # 29: loopy growth with holes
-"{{{1, 2, 1}, {0, 8, 1}}, {{1, 1, 0}, {0, 1, 0}}}", # 30: Lanton's Ant drawn with squares
-"{{{1, 2, 1}, {0, 2, 0}}, {{0, 8, 1}, {1, 8, 0}}}", # 31: growth with curves and blocks
-"{{{1, 2, 1}, {0, 2, 0}}, {{0, 1, 0}, {1, 2, 1}}}", # 32: distracted spiral builder
-"{{{1, 2, 1}, {0, 2, 1}}, {{1, 1, 0}, {1, 1, 1}}}", # 33: cauliflower stalk (45 deg highway)
-"{{{1, 2, 1}, {1, 8, 1}}, {{1, 2, 1}, {0, 2, 0}}}", # 34: worm trails (eventually turns cyclic!)
-"{{{1, 2, 1}, {1, 1, 0}}, {{1, 1, 0}, {0, 1, 1}}}", # 35: eventually makes a two-way highway!
-"{{{1, 2, 1}, {1, 2, 0}}, {{0, 1, 0}, {0, 1, 0}}}", # 36: almost symmetric mould bloom
-"{{{1, 2, 1}, {1, 2, 0}}, {{0, 2, 0}, {1, 1, 1}}}", # 37: makes a 1 in 2 gradient highway
-"{{{1, 2, 1}, {1, 2, 1}}, {{1, 8, 1}, {0, 2, 0}}}", # 38: immediately makes a 1 in 3 highway
-"{{{0, 2, 1}, {1, 2, 1}}, {{0, 8, 2}, {0, 8, 0}}, {{1, 2, 2}, {1, 8, 0}}}", # 39: squares and diagonals growth
-"{{{1, 8, 1}, {0, 1, 0}}, {{0, 2, 2}, {1, 8, 0}}, {{1, 2, 1}, {1, 1, 0}}}", # 40: streak at approx. an 8.1 in 1 gradient
-"{{{1, 8, 1}, {0, 1, 2}}, {{0, 2, 2}, {1, 1, 1}}, {{1, 2, 1}, {1, 1, 0}}}", # 41: streak at approx. a 1.14 in 1 gradient
-"{{{1, 8, 1}, {1, 8, 1}}, {{1, 1, 0}, {0, 1, 2}}, {{0, 8, 1}, {1, 1, 1}}}", # 42: maze-like growth
-"{{{1, 8, 2}, {0, 2, 0}}, {{1, 8, 0}, {0, 2, 0}}, {{0, 8, 0}, {0, 8, 1}}}", # 43: growth by cornices 
-"{{{1, 2, 0}, {0, 2, 2}}, {{0, 8, 0}, {0, 2, 0}}, {{0, 1, 1}, {1, 8, 0}}}", # 44: makes a 1 in 7 highway
-"{{{1, 2, 1}, {0, 8, 0}}, {{1, 2, 2}, {0, 1, 0}}, {{1, 8, 0}, {0, 8, 0}}}", # 45: makes a 4 in 1 highway
-</pre> 
-
-<p>Les fourmis de Langton ne partagent peut être pas la capacité d'expression
-des turmites, mais elles restent fascinantes elles aussi. Vous pouvez
-expérimenter avec elles en utilisant la méthode initLangton(), fournie dans
-le code de base, qui vous permet de construire une table de transition pour
-Turmite a partir du nom d'une fourmi de Langton. De petits changements
-peuvent engendrer de grandes choses. Par exemple, "RRL" ne semble pas mener
-à un quelconque schéma, même après un million de pas, mais "RLL" commence à
-construire un dessin très simple de route au bout de moins de 100 pas !</p>  
-
-<p>Beaucoup de fourmis de Langton construisent des routes: RL, bien entendu,
-mais aussi RLRLRLLRLR ( environ 2500 pas ). Le comportement chaotique des
-fourmis avant la route peut être très court ( comme avec RLL qui a seulement
-besoin de 100 pas pour converger ) ou très long, comme avec LLLLLLRRLRRR qui
-semble chaotique jusqu'à plus de 500 000 pas avant de constuire la route ou
-encore RRLLLRRRLRRR qui nécessite 1 170 000 pour commencer à
-converger. Certaines sont étroites, d'autres très larges, comme avec
-RRLRLLRLRR (200 000 pas). Cette fourmi est aussi notable puisque c'est
-quelque peu carré avant même que la route commence, là où d'autres ne
-montrent rien de transcendant avant leur route.<p>
-
-<p>Certaines fourmis remplissent des secteurs entiers, comme avec RRLLLRLLLRRR
-(16 000 pas), RRLLLRLLLRRR (30 000 pas), RRLLLRRRRRLR (125 000 pas) ou
-RRLRLLRRRRRR (20 000 pas). D'autres encore remplissent tout l'espace (RRLRR
-après 3000 pas). Certaines de mes favorites sont celles où la fourmi semble
-rebondir dans une boite qui devient plus grande à chaque rebond, comme avec
-LRRRRRLLR (30 000 pas). LRRRRLLLRRR est encore plus impressionnant puisque
-les rebonds dans la boite sont réguliers et puisque la fourmi atteint
-rapidement son comportement stable (15 000 pas suffisent).</p>
-
-<p>Enfin, certaines fourmis construisent juste des schémas artistiques. Vous
-devriez regarder cette vidéo pour un bel aperçu :
-http://www.youtube.com/watch?v=1X-gtr4pEBU .
-Si vous voulez les implémenter dans votre code, vous devez les permutter de
-un : Par exemple, celle décrite à 3:42 n'est pas RRLRLRLLRL, mais RLRLRLLRLR
-(le premier mouvement visible doit être vu comme le dernier).</p>
-
-<p>Comme vous pouvez le constater en explorant l'ensemble ci-dessus de
-turmites, elles ne sont généralement pas aussi colorées que les fourmis,
-mais c'est peut-être car très peu de couleurs sont nécessaires pour
-expliciter des comportements complexes. Par exemple, il y a un classe
-spécifique de turmites appelée <i>busy beavers</i> qui sont des turmites qui
-écrivent énormément de choses avant de s'arrêter ( les <i>busy beavers</i>
-sont généralement des machines de Turing classiques, mais l'idée correpond
-parfaitement aux turmites). Il y a une sorte de compétition internationale
-où les participants font tout leur possible pour trouver le turmite qui
-couvre la plus grande surface avant de s'arrêter.
-La page web est ici :
-http://code.google.com/p/ruletablerepository/wiki/TwoDimensionalTuringMachines 
-
diff --git a/src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.java b/src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.java
deleted file mode 100644
index eafeead..0000000
--- a/src/lessons/welcome/turmites/turmitecreator/TurmiteCreator.java
+++ /dev/null
@@ -1,15 +0,0 @@
-package lessons.welcome.turmites.turmitecreator;
-
-import jlm.core.model.lesson.ExerciseTemplated;
-import jlm.core.model.lesson.Lesson;
-import jlm.universe.turmite.TurmiteWorld;
-
-public class TurmiteCreator extends ExerciseTemplated {
-	
-	public TurmiteCreator(Lesson lesson) {
-		super(lesson);
-		tabName = "Turmite";
-
-		setup(new TurmiteWorld("blah",1000,null,100,100,50,50));
-	}
-}
diff --git a/src/lessons/welcome/turmites/turmitecreator/TurmiteCreatorEntity.java b/src/lessons/welcome/turmites/turmitecreator/TurmiteCreatorEntity.java
deleted file mode 100644
index e5d2669..0000000
--- a/src/lessons/welcome/turmites/turmitecreator/TurmiteCreatorEntity.java
+++ /dev/null
@@ -1,137 +0,0 @@
-package lessons.welcome.turmites.turmitecreator;
-
-import java.awt.Color;
-
-public class TurmiteCreatorEntity extends jlm.universe.bugglequest.SimpleBuggle {
-	Color[] allColors = {Color.white, Color.yellow, Color.red, Color.cyan, Color.green, Color.orange, 
-			Color.blue, Color.black,
-			Color.gray, Color.magenta, Color.darkGray, Color.pink, Color.lightGray};
-
-	/* Do not change these definitions */
-
-	final static int NEXT_COLOR = 0;
-	final static int NEXT_MOVE  = 1;
-	final static int NEXT_STATE = 2;
-
-
-	Color[] colors; 
-	int state = 0;
-
-	public void step() {
-		int currentColor=0;
-		Color current = getGroundColor(); 
-		for (int i=0;i<colors.length;i++) 
-			if (current.equals(colors[i])) 
-				currentColor = i;
-
-		setBrushColor(colors[ rule[state][currentColor][NEXT_COLOR] ]);
-		brushDown();
-		brushUp();
-
-		switch (rule[state][currentColor][NEXT_MOVE]) {
-		case STOP:   /* nothing */;            break;
-		case NOTURN: /* no turn */; forward(); break;
-		case LEFT:   turnLeft();   	forward(); break;
-		case RIGHT:  turnRight();   forward(); break;
-		case BACK:   turnBack();    forward(); break;
-		default:
-			System.out.println("Unknown turn command associated to i="+currentColor+": "+rule[state][currentColor][NEXT_MOVE]);
-		}
-
-		state = rule[state][currentColor][NEXT_STATE];
-	}
-
-	/* BEGIN TEMPLATE */
-	final static int STOP   = 0;
-	final static int NOTURN = 1;
-	final static int LEFT   = 2;
-	final static int BACK   = 4;
-	final static int RIGHT  = 8;
-
-	int nbSteps; 
-	int[][][] rule;
-
-	/** init the rule array from a string defining a Langton's ant 
-	 * 
-	 *  You can use this method inside your init() method if you want 
-	 *  to test langton's ant instead of full turmites.
-	 */
-	void initLangton(String name) {
-		int nbColors = name.length(); /* As many colors as letters in the ant's name */
-
-		rule = new int[1][][]; /* one state only */
-		rule[0] = new int[nbColors][]; /* As many colors as letters in the ant's name */
-		for (int i=0; i<nbColors; i++) {
-			rule[0][i] = new int[3]; /* every command set has 3 elements */ 
-
-			rule[0][i][NEXT_COLOR] = (i+1) % nbColors;
-
-			if (name.charAt(i) == 'L') {
-				rule[0][i][NEXT_MOVE] = LEFT;			
-			} else if (name.charAt(i) == 'R') {
-				rule[0][i][NEXT_MOVE] = RIGHT;
-			} else {
-				System.out.println("Unknown command in your ant's name: "+name.charAt(i));
-			}
-
-			rule[0][i][NEXT_STATE] = 0; /* only one state */
-
-			//		System.out.println("{"+rule[0][i][NEXT_COLOR]+","+rule[0][i][NEXT_MOVE]+","+rule[0][i][NEXT_STATE]+"}");
-		}
-	}
-	void init() {
-		/* Your code comes here. */
-
-		/* Something like 
-		 *   nbSteps = 42;
-		 *   rule = new int[][][] {{{0, NOTURN, 0}, {0, NOTURN, 0}}}; 
-		 * but with possibly more states (ie, bigger second dimension), and more color (ie bigger third -- internal -- dimension) 
-		 * and naturally, less boring than this turmite doing absolutely nothing (runs forward endlessly).
-		 */
-
-		/* It can also be something like
-		 *   nbSteps = 42;
-		 *   initLangton("RL");
-		 */
-
-		/* remember to send your best creations for inclusion in the gallery */
-		/* BEGIN SOLUTION */
-		nbSteps = 8342;
-		rule = new int[][][] {{{1, LEFT, 0}, {1, LEFT, 1}}, {{0, NOTURN, 0}, {0, NOTURN, 1}}};
-		setX(8); setY(33);
-		/* END SOLUTION */
-	}
-	/* END TEMPLATE */
-
-	@Override
-	public void run() { 
-		init();
-
-		colors = new Color[rule[0].length];
-		int i;
-		for (i=0; i<Math.min(rule[0].length,allColors.length); i++)
-			colors[i] = allColors[i];
-		for (; i<rule[0].length; i++) { /* allColors is too short; create the other colors randomly */
-			Color newColor = null;
-			do {
-				newColor = new Color(
-						(int)(Math.random()*255.) ,
-						(int)(Math.random()*255.) ,
-						(int)(Math.random()*255.) );
-				for (int j=0;j<i;j++) {
-					if (colors[j].equals(newColor)) {
-						/* Damn we already picked that color; take another one please */
-						newColor = null;
-					}
-				}
-			} while (newColor == null);
-			colors[i] = newColor;
-		}
-
-
-		for (int step=0;step<nbSteps;step++) {
-			step();
-			((jlm.universe.turmite.TurmiteWorld)world).stepDone();
-		}
-	}
-}
diff --git a/src/lessons/welcome/variables/RunFour-answer0.map b/src/lessons/welcome/variables/RunFour-answer0.map
new file mode 100644
index 0000000..6c30502
--- /dev/null
+++ b/src/lessons/welcome/variables/RunFour-answer0.map
@@ -0,0 +1,45 @@
+BuggleWorld: Run track
+Size: 8x16
+Buggle(0,6): north,black,black,buggle3
+Buggle(1,1): north,black,black,buggle4
+Buggle(2,5): north,black,black,buggle5
+Buggle(3,3): north,black,black,buggle6
+Buggle(4,4): north,black,black,buggle7
+Buggle(5,0): north,black,black,buggle8
+Buggle(6,6): north,black,black,buggle9
+Buggle(7,2): north,black,black,buggle10
+Cell(0,3): white,baggle,notopwall,noleftwall,
+Cell(0,6): white,baggle,notopwall,noleftwall,
+Cell(0,8): white,baggle,notopwall,noleftwall,
+Cell(0,10): white,baggle,notopwall,noleftwall,
+Cell(0,13): white,baggle,notopwall,noleftwall,
+Cell(1,1): white,baggle,notopwall,noleftwall,
+Cell(1,3): white,baggle,notopwall,noleftwall,
+Cell(1,7): white,baggle,notopwall,noleftwall,
+Cell(1,9): white,baggle,notopwall,noleftwall,
+Cell(2,2): white,baggle,notopwall,noleftwall,
+Cell(2,5): white,baggle,notopwall,noleftwall,
+Cell(2,7): white,baggle,notopwall,noleftwall,
+Cell(2,10): white,baggle,notopwall,noleftwall,
+Cell(2,14): white,baggle,notopwall,noleftwall,
+Cell(3,1): white,baggle,notopwall,noleftwall,
+Cell(3,3): white,baggle,notopwall,noleftwall,
+Cell(3,7): white,baggle,notopwall,noleftwall,
+Cell(3,9): white,baggle,notopwall,noleftwall,
+Cell(3,13): white,baggle,notopwall,noleftwall,
+Cell(4,4): white,baggle,notopwall,noleftwall,
+Cell(4,7): white,baggle,notopwall,noleftwall,
+Cell(4,10): white,baggle,notopwall,noleftwall,
+Cell(4,14): white,baggle,notopwall,noleftwall,
+Cell(5,0): white,baggle,notopwall,noleftwall,
+Cell(5,2): white,baggle,notopwall,noleftwall,
+Cell(5,5): white,baggle,notopwall,noleftwall,
+Cell(5,11): white,baggle,notopwall,noleftwall,
+Cell(6,6): white,baggle,notopwall,noleftwall,
+Cell(6,8): white,baggle,notopwall,noleftwall,
+Cell(6,10): white,baggle,notopwall,noleftwall,
+Cell(6,14): white,baggle,notopwall,noleftwall,
+Cell(7,2): white,baggle,notopwall,noleftwall,
+Cell(7,7): white,baggle,notopwall,noleftwall,
+Cell(7,9): white,baggle,notopwall,noleftwall,
+Cell(7,13): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/variables/RunFour.fr.html b/src/lessons/welcome/variables/RunFour.fr.html
new file mode 100644
index 0000000..e94af18
--- /dev/null
+++ b/src/lessons/welcome/variables/RunFour.fr.html
@@ -0,0 +1,10 @@
+<h2>La course des quatre bases</h2>
+
+<p>Aujourd'hui est un grand jour : la Grande Course des Buggles a
+commencé. C'est une compétition traditionnelle par laquelle les jeunes
+buggles prouvent leur valeur à la tribu. C'est à la fois une épreuve de
+force et d'intelligence puisqu'il faut courir le plus vite possible, mais
+s'arrêter dès que vous avez rejoint votre quatrième baggle. Il faut que vous
+aidiez les buggles à avancer tout en comptant les baggles pour déterminer
+quand s'arrêter.</p> 
+
diff --git a/src/lessons/welcome/variables/RunFour.html b/src/lessons/welcome/variables/RunFour.html
new file mode 100644
index 0000000..8da40bb
--- /dev/null
+++ b/src/lessons/welcome/variables/RunFour.html
@@ -0,0 +1,7 @@
+<h2>Run Four bases</h2>
+
+<p>Today is a great day for the buggles: the Big Buggles' Race begun. It's a traditional competition 
+in which young buggles prove their value to the tribe. Both force and intelligence is exercised: 
+you have to rush forward, but stop as soon as you reach your fourth baggle. 
+Please help the buggles to move forward while counting the baggles and to determine when to stop.</p> 
+
diff --git a/src/lessons/welcome/variables/RunFour.java b/src/lessons/welcome/variables/RunFour.java
new file mode 100644
index 0000000..94df8e5
--- /dev/null
+++ b/src/lessons/welcome/variables/RunFour.java
@@ -0,0 +1,25 @@
+package lessons.welcome.variables;
+
+import java.io.IOException;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
+import jlm.universe.World;
+import jlm.universe.bugglequest.BuggleWorld;
+
+public class RunFour extends ExerciseTemplated {
+
+	public RunFour(Lesson lesson) throws IOException, BrokenWorldFileException {
+		super(lesson);
+		
+		/* Create initial situation */
+		World[] myWorlds = new World[] {
+				BuggleWorld.newFromFile("lessons/welcome/variables/RunFour.map"),
+		};
+		for (World w: myWorlds)
+			w.setDelay(50); // moving a bit faster than usual
+		
+		setup(myWorlds);
+	}
+}
\ No newline at end of file
diff --git a/src/lessons/welcome/variables/RunFour.map b/src/lessons/welcome/variables/RunFour.map
new file mode 100644
index 0000000..be62f72
--- /dev/null
+++ b/src/lessons/welcome/variables/RunFour.map
@@ -0,0 +1,45 @@
+BuggleWorld: Run track
+Size: 8x16
+Buggle(0,15): north,black,black,buggle3
+Buggle(1,15): north,black,black,buggle4
+Buggle(2,15): north,black,black,buggle5
+Buggle(3,15): north,black,black,buggle6
+Buggle(4,15): north,black,black,buggle7
+Buggle(5,15): north,black,black,buggle8
+Buggle(6,15): north,black,black,buggle9
+Buggle(7,15): north,black,black,buggle10
+Cell(0,3): white,baggle,notopwall,noleftwall,
+Cell(0,6): white,baggle,notopwall,noleftwall,
+Cell(0,8): white,baggle,notopwall,noleftwall,
+Cell(0,10): white,baggle,notopwall,noleftwall,
+Cell(0,13): white,baggle,notopwall,noleftwall,
+Cell(1,1): white,baggle,notopwall,noleftwall,
+Cell(1,3): white,baggle,notopwall,noleftwall,
+Cell(1,7): white,baggle,notopwall,noleftwall,
+Cell(1,9): white,baggle,notopwall,noleftwall,
+Cell(2,2): white,baggle,notopwall,noleftwall,
+Cell(2,5): white,baggle,notopwall,noleftwall,
+Cell(2,7): white,baggle,notopwall,noleftwall,
+Cell(2,10): white,baggle,notopwall,noleftwall,
+Cell(2,14): white,baggle,notopwall,noleftwall,
+Cell(3,1): white,baggle,notopwall,noleftwall,
+Cell(3,3): white,baggle,notopwall,noleftwall,
+Cell(3,7): white,baggle,notopwall,noleftwall,
+Cell(3,9): white,baggle,notopwall,noleftwall,
+Cell(3,13): white,baggle,notopwall,noleftwall,
+Cell(4,4): white,baggle,notopwall,noleftwall,
+Cell(4,7): white,baggle,notopwall,noleftwall,
+Cell(4,10): white,baggle,notopwall,noleftwall,
+Cell(4,14): white,baggle,notopwall,noleftwall,
+Cell(5,0): white,baggle,notopwall,noleftwall,
+Cell(5,2): white,baggle,notopwall,noleftwall,
+Cell(5,5): white,baggle,notopwall,noleftwall,
+Cell(5,11): white,baggle,notopwall,noleftwall,
+Cell(6,6): white,baggle,notopwall,noleftwall,
+Cell(6,8): white,baggle,notopwall,noleftwall,
+Cell(6,10): white,baggle,notopwall,noleftwall,
+Cell(6,14): white,baggle,notopwall,noleftwall,
+Cell(7,2): white,baggle,notopwall,noleftwall,
+Cell(7,7): white,baggle,notopwall,noleftwall,
+Cell(7,9): white,baggle,notopwall,noleftwall,
+Cell(7,13): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/variables/RunFourEntity.java b/src/lessons/welcome/variables/RunFourEntity.java
new file mode 100644
index 0000000..651b7ac
--- /dev/null
+++ b/src/lessons/welcome/variables/RunFourEntity.java
@@ -0,0 +1,28 @@
+package lessons.welcome.variables;
+
+public class RunFourEntity extends jlm.universe.bugglequest.SimpleBuggle {
+	@Override
+	public void forward(int i)  { 
+		throw new RuntimeException("forward(int) forbidden in this exercise");
+	}
+
+	@Override
+	public void backward(int i) {
+		throw new RuntimeException("backward(int) forbidden in this exercise");
+	}
+
+
+	@Override
+	/* BEGIN TEMPLATE */
+	public void run() { 
+		/* BEGIN SOLUTION */
+		int cpt = 0;
+		while (cpt != 4) {
+			forward();
+			if (isOverBaggle())
+				cpt++;
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/variables/RunFourEntity.py b/src/lessons/welcome/variables/RunFourEntity.py
new file mode 100644
index 0000000..330ee6d
--- /dev/null
+++ b/src/lessons/welcome/variables/RunFourEntity.py
@@ -0,0 +1,16 @@
+def forward(i=1):
+    if i>1:
+        errorMsg("Sorry Dave, I cannot let you use forward(i>1) in this exercise")
+    entity.forward()
+def backward(i=1):
+    if i>1:
+        errorMsg("Sorry Dave, I cannot let you use backward(i>1) in this exercise")
+    entity.backward()
+
+# BEGIN SOLUTION
+cpt = 0
+while cpt != 4:
+	forward()
+	if isOverBaggle():
+		cpt += 1
+# END SOLUTION 
diff --git a/src/lessons/welcome/variables/RunHalf-answer0.map b/src/lessons/welcome/variables/RunHalf-answer0.map
new file mode 100644
index 0000000..c8328cd
--- /dev/null
+++ b/src/lessons/welcome/variables/RunHalf-answer0.map
@@ -0,0 +1,81 @@
+BuggleWorld: Run track
+Size: 8x16
+Buggle(0,7): north,black,black,buggle1
+Buggle(1,7): north,black,black,buggle2
+Buggle(2,10): north,black,black,buggle3
+Buggle(3,14): north,black,black,buggle4
+Buggle(4,12): north,black,black,buggle5
+Buggle(5,13): north,black,black,buggle6
+Buggle(6,0): north,black,black,buggle7
+Buggle(7,13): north,black,black,buggle8
+Cell(0,0): orange,nobaggle,notopwall,noleftwall,
+Cell(0,1): orange,baggle,notopwall,noleftwall,
+Cell(0,4): orange,baggle,notopwall,noleftwall,
+Cell(0,6): orange,nobaggle,notopwall,noleftwall,
+Cell(0,7): white,baggle,notopwall,noleftwall,
+Cell(0,14): orange,nobaggle,notopwall,noleftwall,
+Cell(1,0): orange,nobaggle,notopwall,noleftwall,
+Cell(1,1): orange,nobaggle,notopwall,noleftwall,
+Cell(1,2): orange,baggle,notopwall,noleftwall,
+Cell(1,3): orange,nobaggle,notopwall,noleftwall,
+Cell(1,4): orange,baggle,notopwall,noleftwall,
+Cell(1,5): orange,nobaggle,notopwall,noleftwall,
+Cell(1,6): orange,nobaggle,notopwall,noleftwall,
+Cell(1,7): white,baggle,notopwall,noleftwall,
+Cell(1,9): white,baggle,notopwall,noleftwall,
+Cell(1,10): orange,nobaggle,notopwall,noleftwall,
+Cell(1,11): orange,nobaggle,notopwall,noleftwall,
+Cell(1,14): orange,nobaggle,notopwall,noleftwall,
+Cell(2,0): orange,nobaggle,notopwall,noleftwall,
+Cell(2,3): orange,baggle,notopwall,noleftwall,
+Cell(2,4): orange,baggle,notopwall,noleftwall,
+Cell(2,6): orange,nobaggle,notopwall,noleftwall,
+Cell(2,7): white,baggle,notopwall,noleftwall,
+Cell(2,9): orange,nobaggle,notopwall,noleftwall,
+Cell(2,10): white,baggle,notopwall,noleftwall,
+Cell(2,14): orange,nobaggle,notopwall,noleftwall,
+Cell(3,0): orange,nobaggle,notopwall,noleftwall,
+Cell(3,4): orange,nobaggle,notopwall,noleftwall,
+Cell(3,6): orange,nobaggle,notopwall,noleftwall,
+Cell(3,7): white,baggle,notopwall,noleftwall,
+Cell(3,9): white,baggle,notopwall,noleftwall,
+Cell(3,11): orange,nobaggle,notopwall,noleftwall,
+Cell(3,14): orange,baggle,notopwall,noleftwall,
+Cell(4,0): orange,nobaggle,notopwall,noleftwall,
+Cell(4,4): orange,nobaggle,notopwall,noleftwall,
+Cell(4,6): orange,nobaggle,notopwall,noleftwall,
+Cell(4,7): white,baggle,notopwall,noleftwall,
+Cell(4,10): white,baggle,notopwall,noleftwall,
+Cell(4,12): orange,nobaggle,notopwall,noleftwall,
+Cell(4,14): white,baggle,notopwall,noleftwall,
+Cell(5,0): orange,nobaggle,notopwall,noleftwall,
+Cell(5,3): orange,baggle,notopwall,noleftwall,
+Cell(5,4): orange,baggle,notopwall,noleftwall,
+Cell(5,6): orange,nobaggle,notopwall,noleftwall,
+Cell(5,7): white,baggle,notopwall,noleftwall,
+Cell(5,11): orange,baggle,notopwall,noleftwall,
+Cell(5,13): white,baggle,notopwall,noleftwall,
+Cell(5,14): orange,nobaggle,notopwall,noleftwall,
+Cell(6,0): orange,nobaggle,notopwall,noleftwall,
+Cell(6,1): orange,nobaggle,notopwall,noleftwall,
+Cell(6,2): orange,baggle,notopwall,noleftwall,
+Cell(6,3): orange,nobaggle,notopwall,noleftwall,
+Cell(6,4): orange,baggle,notopwall,noleftwall,
+Cell(6,5): orange,nobaggle,notopwall,noleftwall,
+Cell(6,6): orange,nobaggle,notopwall,noleftwall,
+Cell(6,7): white,baggle,notopwall,noleftwall,
+Cell(6,9): orange,nobaggle,notopwall,noleftwall,
+Cell(6,10): orange,nobaggle,notopwall,noleftwall,
+Cell(6,11): white,baggle,notopwall,noleftwall,
+Cell(6,12): white,baggle,notopwall,noleftwall,
+Cell(6,13): orange,baggle,notopwall,noleftwall,
+Cell(6,14): orange,nobaggle,notopwall,noleftwall,
+Cell(7,0): orange,nobaggle,notopwall,noleftwall,
+Cell(7,1): orange,baggle,notopwall,noleftwall,
+Cell(7,4): orange,baggle,notopwall,noleftwall,
+Cell(7,6): orange,nobaggle,notopwall,noleftwall,
+Cell(7,7): white,baggle,notopwall,noleftwall,
+Cell(7,9): white,baggle,notopwall,noleftwall,
+Cell(7,11): orange,nobaggle,notopwall,noleftwall,
+Cell(7,13): white,baggle,notopwall,noleftwall,
+Cell(7,14): orange,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/variables/RunHalf.fr.html b/src/lessons/welcome/variables/RunHalf.fr.html
new file mode 100644
index 0000000..aeea074
--- /dev/null
+++ b/src/lessons/welcome/variables/RunHalf.fr.html
@@ -0,0 +1,11 @@
+<h2>La course des quatre moitiés</h2>
+
+<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
+baggles que de cases oranges plus une. En d'autres termes, la condition
+d'arrêt est la suivante : <code>2 * baggles = caseOrange + 1</code>.</p>
+
+<p>Vous pouvez déterminer si vous vous trouvez sur une case orange avec la
+méthode <code>isOverOrange()</code>.</p> 
+
diff --git a/src/lessons/welcome/variables/RunHalf.html b/src/lessons/welcome/variables/RunHalf.html
new file mode 100644
index 0000000..b8c254a
--- /dev/null
+++ b/src/lessons/welcome/variables/RunHalf.html
@@ -0,0 +1,9 @@
+<h2>The Four Halves run</h2>
+
+<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. 
+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/RunHalf.java b/src/lessons/welcome/variables/RunHalf.java
new file mode 100644
index 0000000..3a541a0
--- /dev/null
+++ b/src/lessons/welcome/variables/RunHalf.java
@@ -0,0 +1,24 @@
+package lessons.welcome.variables;
+
+import java.io.IOException;
+
+import jlm.core.model.lesson.ExerciseTemplated;
+import jlm.core.model.lesson.Lesson;
+import jlm.universe.BrokenWorldFileException;
+import jlm.universe.World;
+import jlm.universe.bugglequest.BuggleWorld;
+
+public class RunHalf extends ExerciseTemplated {
+
+	public RunHalf(Lesson lesson) throws IOException, BrokenWorldFileException {
+		super(lesson);
+		
+		World[] myWorlds = new World[] {
+				BuggleWorld.newFromFile("lessons/welcome/variables/RunHalf.map"),
+		};
+		for (World w: myWorlds)
+			w.setDelay(50); // moving a bit faster than usual
+		
+		setup(myWorlds);
+	}
+}
\ No newline at end of file
diff --git a/src/lessons/welcome/variables/RunHalf.map b/src/lessons/welcome/variables/RunHalf.map
new file mode 100644
index 0000000..8f6354d
--- /dev/null
+++ b/src/lessons/welcome/variables/RunHalf.map
@@ -0,0 +1,81 @@
+BuggleWorld: Run track
+Size: 8x16
+Buggle(0,15): north,black,black,buggle1
+Buggle(1,15): north,black,black,buggle2
+Buggle(2,15): north,black,black,buggle3
+Buggle(3,15): north,black,black,buggle4
+Buggle(4,15): north,black,black,buggle5
+Buggle(5,15): north,black,black,buggle6
+Buggle(6,15): north,black,black,buggle7
+Buggle(7,15): north,black,black,buggle8
+Cell(0,0): orange,nobaggle,notopwall,noleftwall,
+Cell(0,1): orange,baggle,notopwall,noleftwall,
+Cell(0,4): orange,baggle,notopwall,noleftwall,
+Cell(0,6): orange,nobaggle,notopwall,noleftwall,
+Cell(0,7): white,baggle,notopwall,noleftwall,
+Cell(0,14): orange,nobaggle,notopwall,noleftwall,
+Cell(1,0): orange,nobaggle,notopwall,noleftwall,
+Cell(1,1): orange,nobaggle,notopwall,noleftwall,
+Cell(1,2): orange,baggle,notopwall,noleftwall,
+Cell(1,3): orange,nobaggle,notopwall,noleftwall,
+Cell(1,4): orange,baggle,notopwall,noleftwall,
+Cell(1,5): orange,nobaggle,notopwall,noleftwall,
+Cell(1,6): orange,nobaggle,notopwall,noleftwall,
+Cell(1,7): white,baggle,notopwall,noleftwall,
+Cell(1,9): white,baggle,notopwall,noleftwall,
+Cell(1,10): orange,nobaggle,notopwall,noleftwall,
+Cell(1,11): orange,nobaggle,notopwall,noleftwall,
+Cell(1,14): orange,nobaggle,notopwall,noleftwall,
+Cell(2,0): orange,nobaggle,notopwall,noleftwall,
+Cell(2,3): orange,baggle,notopwall,noleftwall,
+Cell(2,4): orange,baggle,notopwall,noleftwall,
+Cell(2,6): orange,nobaggle,notopwall,noleftwall,
+Cell(2,7): white,baggle,notopwall,noleftwall,
+Cell(2,9): orange,nobaggle,notopwall,noleftwall,
+Cell(2,10): white,baggle,notopwall,noleftwall,
+Cell(2,14): orange,nobaggle,notopwall,noleftwall,
+Cell(3,0): orange,nobaggle,notopwall,noleftwall,
+Cell(3,4): orange,nobaggle,notopwall,noleftwall,
+Cell(3,6): orange,nobaggle,notopwall,noleftwall,
+Cell(3,7): white,baggle,notopwall,noleftwall,
+Cell(3,9): white,baggle,notopwall,noleftwall,
+Cell(3,11): orange,nobaggle,notopwall,noleftwall,
+Cell(3,14): orange,baggle,notopwall,noleftwall,
+Cell(4,0): orange,nobaggle,notopwall,noleftwall,
+Cell(4,4): orange,nobaggle,notopwall,noleftwall,
+Cell(4,6): orange,nobaggle,notopwall,noleftwall,
+Cell(4,7): white,baggle,notopwall,noleftwall,
+Cell(4,10): white,baggle,notopwall,noleftwall,
+Cell(4,12): orange,nobaggle,notopwall,noleftwall,
+Cell(4,14): white,baggle,notopwall,noleftwall,
+Cell(5,0): orange,nobaggle,notopwall,noleftwall,
+Cell(5,3): orange,baggle,notopwall,noleftwall,
+Cell(5,4): orange,baggle,notopwall,noleftwall,
+Cell(5,6): orange,nobaggle,notopwall,noleftwall,
+Cell(5,7): white,baggle,notopwall,noleftwall,
+Cell(5,11): orange,baggle,notopwall,noleftwall,
+Cell(5,13): white,baggle,notopwall,noleftwall,
+Cell(5,14): orange,nobaggle,notopwall,noleftwall,
+Cell(6,0): orange,nobaggle,notopwall,noleftwall,
+Cell(6,1): orange,nobaggle,notopwall,noleftwall,
+Cell(6,2): orange,baggle,notopwall,noleftwall,
+Cell(6,3): orange,nobaggle,notopwall,noleftwall,
+Cell(6,4): orange,baggle,notopwall,noleftwall,
+Cell(6,5): orange,nobaggle,notopwall,noleftwall,
+Cell(6,6): orange,nobaggle,notopwall,noleftwall,
+Cell(6,7): white,baggle,notopwall,noleftwall,
+Cell(6,9): orange,nobaggle,notopwall,noleftwall,
+Cell(6,10): orange,nobaggle,notopwall,noleftwall,
+Cell(6,11): white,baggle,notopwall,noleftwall,
+Cell(6,12): white,baggle,notopwall,noleftwall,
+Cell(6,13): orange,baggle,notopwall,noleftwall,
+Cell(6,14): orange,nobaggle,notopwall,noleftwall,
+Cell(7,0): orange,nobaggle,notopwall,noleftwall,
+Cell(7,1): orange,baggle,notopwall,noleftwall,
+Cell(7,4): orange,baggle,notopwall,noleftwall,
+Cell(7,6): orange,nobaggle,notopwall,noleftwall,
+Cell(7,7): white,baggle,notopwall,noleftwall,
+Cell(7,9): white,baggle,notopwall,noleftwall,
+Cell(7,11): orange,nobaggle,notopwall,noleftwall,
+Cell(7,13): white,baggle,notopwall,noleftwall,
+Cell(7,14): orange,nobaggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/variables/RunHalfEntity.java b/src/lessons/welcome/variables/RunHalfEntity.java
new file mode 100644
index 0000000..06a1d6b
--- /dev/null
+++ b/src/lessons/welcome/variables/RunHalfEntity.java
@@ -0,0 +1,37 @@
+package lessons.welcome.variables;
+
+import java.awt.Color;
+
+public class RunHalfEntity extends jlm.universe.bugglequest.SimpleBuggle {
+	@Override
+	public void forward(int i)  { 
+		throw new RuntimeException("forward(int) forbidden in this exercise");
+	}
+
+	@Override
+	public void backward(int i) {
+		throw new RuntimeException("backward(int) forbidden in this exercise");
+	}
+	public boolean isOverOrange() {
+		return getGroundColor().equals(Color.orange);
+	}
+
+	@Override
+	/* BEGIN TEMPLATE */
+	public void run() { 
+		/* BEGIN SOLUTION */
+		int baggle = 0;
+		int orange = 0;
+		while (2 * baggle != orange + 1) {
+			//if (getName().equals("buggle2")) 
+			//	System.out.println("baggle: "+baggle+"; orange: "+orange+"; sum:"+(2*baggle-orange-1));
+			forward();
+			if (isOverBaggle())
+				baggle++;
+			if (isOverOrange())
+				orange++;
+		}
+		/* END SOLUTION */
+	}
+	/* END TEMPLATE */
+}
diff --git a/src/lessons/welcome/variables/RunHalfEntity.py b/src/lessons/welcome/variables/RunHalfEntity.py
new file mode 100644
index 0000000..0b1cf07
--- /dev/null
+++ b/src/lessons/welcome/variables/RunHalfEntity.py
@@ -0,0 +1,21 @@
+def forward(i=1):
+    if i>1:
+        errorMsg("Sorry Dave, I cannot let you use forward(i>1) in this exercise")
+    entity.forward()
+def backward(i=1):
+    if i>1:
+        errorMsg("Sorry Dave, I cannot let you use backward(i>1) in this exercise")
+    entity.backward()
+def isOverOrange():
+    return getGroundColor() == Color.orange
+
+# BEGIN SOLUTION
+baggle = 0
+orange = 0
+while 2 * baggle != orange + 1:
+    forward()
+    if isOverBaggle():
+        baggle += 1
+    if isOverOrange():
+        orange += 1
+# END SOLUTION 
diff --git a/src/lessons/welcome/variables/Variables-answer0.map b/src/lessons/welcome/variables/Variables-answer0.map
new file mode 100644
index 0000000..e1cf9e2
--- /dev/null
+++ b/src/lessons/welcome/variables/Variables-answer0.map
@@ -0,0 +1,16 @@
+BuggleWorld: Kitchen
+Size: 7x7
+Buggle(0,6): north,black,lightGray,Cooker 1
+Buggle(1,6): north,black,lightGray,Cooker 2
+Buggle(2,6): north,black,lightGray,Cooker 3
+Buggle(3,6): north,black,lightGray,Cooker 4
+Buggle(4,6): north,black,lightGray,Cooker 5
+Buggle(5,6): north,black,lightGray,Cooker 6
+Buggle(6,6): north,black,lightGray,Cooker 7
+Cell(0,6): white,baggle,notopwall,noleftwall,
+Cell(1,6): white,baggle,notopwall,noleftwall,
+Cell(2,6): white,baggle,notopwall,noleftwall,
+Cell(3,6): white,baggle,notopwall,noleftwall,
+Cell(4,6): white,baggle,notopwall,noleftwall,
+Cell(5,6): white,baggle,notopwall,noleftwall,
+Cell(6,6): white,baggle,notopwall,noleftwall,
diff --git a/src/lessons/welcome/variables/VariablesEntity.java b/src/lessons/welcome/variables/VariablesEntity.java
index b18ecdc..14ede69 100644
--- a/src/lessons/welcome/variables/VariablesEntity.java
+++ b/src/lessons/welcome/variables/VariablesEntity.java
@@ -21,7 +21,7 @@ public class VariablesEntity extends jlm.universe.bugglequest.SimpleBuggle {
 			cpt++;
 			forward();
 		}
-		pickUpBaggle();
+		pickupBaggle();
 		while (cpt>0) {
 			backward();
 			cpt--;
diff --git a/src/lessons/welcome/variables/VariablesEntity.py b/src/lessons/welcome/variables/VariablesEntity.py
index cefd352..b0cabc6 100644
--- a/src/lessons/welcome/variables/VariablesEntity.py
+++ b/src/lessons/welcome/variables/VariablesEntity.py
@@ -12,7 +12,7 @@ cpt = 0
 while not isOverBaggle():
   cpt += 1 
   forward()
-pickUpBaggle()
+pickupBaggle()
 while cpt>0:
   backward()
   cpt -= 1

-- 
Alioth's hooks/post-receive on /srv/git.debian.org/git/pkg-java/jlm.git



More information about the pkg-java-commits mailing list