diff --git a/.classpath b/.classpath
index 9aa3736ab285bbaeb493abcb3491869283d4e428..64c55e8a3ee706520c825a3ce1c4de33cd868c6e 100644
--- a/.classpath
+++ b/.classpath
@@ -1,6 +1,26 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="lib" path="C:/Users/guillaume.garbay/workspace/Lib/SimAquaLife/simaqualife-2.0.jar"/>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry exported="true" kind="con" path="org.eclipse.m2e.MAVEN2_CLASSPATH_CONTAINER">
+		<attributes>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/classes" path="src/main/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="src" output="target/test-classes" path="src/test/java">
+		<attributes>
+			<attribute name="optional" value="true"/>
+			<attribute name="maven.pomderived" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/.project b/.project
index 9dd8a958373526383d3debf4d1b4b0fbf2573d60..6eaedf9a5018bbb7a31943b71fe40f1a9ea3c737 100644
--- a/.project
+++ b/.project
@@ -10,8 +10,15 @@
 			<arguments>
 			</arguments>
 		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.m2e.core.maven2Builder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
 	</buildSpec>
 	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.m2e.core.maven2Nature</nature>
 		<nature>org.eclipse.jdt.core.javanature</nature>
 	</natures>
 </projectDescription>
diff --git a/.settings/org.eclipse.core.resources.prefs b/.settings/org.eclipse.core.resources.prefs
index e532d9854f267cc2d68d89135fd93258c7025e3b..e5e3279d2661b305656ed6d87f22ec7b575185fb 100644
--- a/.settings/org.eclipse.core.resources.prefs
+++ b/.settings/org.eclipse.core.resources.prefs
@@ -1,2 +1,5 @@
 eclipse.preferences.version=1
-encoding//data/input=ISO-8859-1
+encoding//data/input=ISO-8859-15
+encoding//src/main/java=ISO-8859-15
+encoding//src/test/java=ISO-8859-15
+encoding/<project>=ISO-8859-15
diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs
index bb35fa0a87b032ee9d0b128004c1edbd464f07bf..6472c7cc0af3a3faf6399010e8e2ec85a63d8979 100644
--- a/.settings/org.eclipse.jdt.core.prefs
+++ b/.settings/org.eclipse.jdt.core.prefs
@@ -1,11 +1,13 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=1.6
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.forbiddenReference=warning
+org.eclipse.jdt.core.compiler.source=1.6
diff --git a/.settings/org.eclipse.m2e.core.prefs b/.settings/org.eclipse.m2e.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..14b697b7bbb0d85e8d8ee19141a2a92d9ce211be
--- /dev/null
+++ b/.settings/org.eclipse.m2e.core.prefs
@@ -0,0 +1,4 @@
+activeProfiles=
+eclipse.preferences.version=1
+resolveWorkspaceProjects=true
+version=1
diff --git a/.settings/org.eclipse.pde.core.prefs b/.settings/org.eclipse.pde.core.prefs
new file mode 100644
index 0000000000000000000000000000000000000000..394603ceee708bd43e5a91a5fe79641786f1fcc9
--- /dev/null
+++ b/.settings/org.eclipse.pde.core.prefs
@@ -0,0 +1,2 @@
+BUNDLE_ROOT_PATH=target/classes
+eclipse.preferences.version=1
diff --git a/data/input/fish.xml b/data/input/fish.xml
index 1e2061e861c63657268facf7c3fa13de120319c1..8f9b0b7e31b7d0c606852b00383d7f89407c97a0 100644
--- a/data/input/fish.xml
+++ b/data/input/fish.xml
@@ -1,3 +1,5 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!DOCTYPE xml>
 <list>
   <pikelake.pikes.PikesGroup>
     <weightAtAgeThreshold>5.0</weightAtAgeThreshold>
diff --git a/data/input/fishLight.xml b/data/input/fishLight.xml
index 01584f97eb39f46023570fbda1e79ca7cae9ae08..c3fc52a4a87c7f73797cb670107e7e26badb9501 100644
--- a/data/input/fishLight.xml
+++ b/data/input/fishLight.xml
@@ -1,28 +1,31 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!DOCTYPE xml>
 <list>
-  <pikelake.pikes.PikesGroup>
-    <weightAtAgeThreshold>5.0</weightAtAgeThreshold>
-    <monthOfBirth>6</monthOfBirth>
-    <processes>
-      <processesAtBegin>
-        <pikelake.pikes.PikesPopulateProcess>
-          <initialNumberOfPikes>1</initialNumberOfPikes>
-        </pikelake.pikes.PikesPopulateProcess>
-      </processesAtBegin>
-      <processesEachStep>
-        <pikelake.pikes.PikeMovement>
-            <distance>10.0</distance>
-        </pikelake.pikes.PikeMovement>
-        <pikelake.pikes.PikeHuntProcess>
-          <satiety>0.5</satiety>
-        </pikelake.pikes.PikeHuntProcess>
-        <pikelake.pikes.PikeGrowthProcess>
-          <convertionFactor>0.25</convertionFactor>
-          <slimRate>0.9</slimRate>
-        </pikelake.pikes.PikeGrowthProcess>
-        <pikelake.pikes.PikeObservationProcess/>
-        <fr.cemagref.simaqualife.kernel.processes.FireAquaNismsChangesToObservers/>
-       </processesEachStep>
-    </processes>
-    <useCemetery>false</useCemetery>
-  </pikelake.pikes.PikesGroup>
+	<pikelake.pikes.PikesGroup>
+		<weightAtAgeThreshold>5.0</weightAtAgeThreshold>
+		<monthOfBirth>6</monthOfBirth>
+		<processes>
+			<processesAtBegin>
+				<pikelake.pikes.PikesPopulateProcess>
+					<initialNumberOfPikes>10</initialNumberOfPikes>
+				</pikelake.pikes.PikesPopulateProcess>
+			</processesAtBegin>
+			<processesEachStep>
+				<pikelake.pikes.PikeMovement>
+					<distance>10</distance>
+				</pikelake.pikes.PikeMovement>
+				<pikelake.pikes.PikeHuntProcess>
+					<satiety>0.5</satiety>
+				</pikelake.pikes.PikeHuntProcess>
+				<pikelake.pikes.PikeGrowthProcess>
+					<convertionFactor>0.25</convertionFactor>
+					<slimRate>0.9</slimRate>
+				</pikelake.pikes.PikeGrowthProcess>
+				<pikelake.pikes.PikeObservationProcess/>
+				<pikelake.pikes.PikeMovement/>
+				<fr.cemagref.simaqualife.kernel.processes.FireAquaNismsChangesToObservers />
+			</processesEachStep>
+		</processes>
+		<useCemetery>false</useCemetery>
+	</pikelake.pikes.PikesGroup>
 </list>
\ No newline at end of file
diff --git a/data/input/grid.xml b/data/input/grid.xml
index 58cdec728052d1a6af3c4a319aa173690084eb64..07a5b2b3db65cd541df00d4e5989e23c0a370438 100644
--- a/data/input/grid.xml
+++ b/data/input/grid.xml
@@ -1,8 +1,12 @@
-<?xml version="1.0" encoding="ISO-8859-1"?>
+<?xml version="1.0" encoding="ISO-8859-15"?>
 <!DOCTYPE xml>
 <pikelake.Grid>
+	<!--inputFileName>river2DShape.txt</inputFileName-->
+	<!--depthCoef >2.3</depthCoef-->
+	<!--ncFileName>data/SiAM3168.nc</ncFileName-->
+  	<!--sectorFileName>data/shapefile.EstuarySector.txt</sectorFileName-->
 	<torusType>BOTH</torusType>
 	<neighborsType>NEIGHBORHOOD_VON_NEUMANN</neighborsType>
-	<gridWidth>10</gridWidth>
-	<gridHeight>10</gridHeight>
+	<gridWidth>214</gridWidth>
+	<gridHeight>243</gridHeight>
 </pikelake.Grid>
\ No newline at end of file
diff --git a/data/input/observersBatch.xml b/data/input/observersBatch.xml
index 54ed95bbc90303ef2bb8bfae08bc284e4c9006f9..7ed857d57b41b5a53aed1422771053937640bd06 100644
--- a/data/input/observersBatch.xml
+++ b/data/input/observersBatch.xml
@@ -1,3 +1,5 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!DOCTYPE xml>
 <hashtable>
   <entry>
     <java-class>pikeprey.pikes.PikesGroup</java-class>
diff --git a/data/input/observersCharts.xml b/data/input/observersCharts.xml
index d8381767312783b51d74bf15d6f84054e15df677..3323d888acd01635384b96defc56a62d477a8d80 100644
--- a/data/input/observersCharts.xml
+++ b/data/input/observersCharts.xml
@@ -1,28 +1,92 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!DOCTYPE xml>
 <hashtable>
-  <entry>
-    <java-class>pikelake.pikes.PikesGroup</java-class>
-    <fr.cemagref.observation.kernel.ObservablesHandler>
-      <observers>
-      	<fr.cemagref.observation.observers.jfreechart.TemporalSerieChart>
-      		<graphType>LINE</graphType>
-      		<title>Observation of pikes biomass</title>
-      		<xAxisLabel>Time (month)</xAxisLabel>
-      		<yAxisLabel>pikes biomass</yAxisLabel>
-    	</fr.cemagref.observation.observers.jfreechart.TemporalSerieChart>
-      </observers>
-    </fr.cemagref.observation.kernel.ObservablesHandler>
-  </entry>
-  <entry>
-    <java-class>pikelake.pikes.Pike</java-class>
-    <fr.cemagref.observation.kernel.ObservablesHandler>
-      <observers>
-      	<fr.cemagref.observation.observers.jfreechart.TemporalSerieChart>
-      		<graphType>LINE</graphType>
-      		<title>Observation of pikes</title>
-      		<xAxisLabel>Time (month)</xAxisLabel>
-      		<yAxisLabel></yAxisLabel>
-    	</fr.cemagref.observation.observers.jfreechart.TemporalSerieChart>
-      </observers>
-    </fr.cemagref.observation.kernel.ObservablesHandler>
-  </entry>
+
+	<entry>
+		<java-class>pikelake.GridObserver</java-class>
+		<fr.cemagref.observation.kernel.ObservablesHandler>
+			<observers>
+				<fr.cemagref.simaqualife.extensions.spatial2D.Movement2DObserver>
+					<title>Bariousses</title>
+					<bgColor>
+						<red>168</red>
+						<green>0</green>
+						<blue>0</blue>
+						<alpha>255</alpha>
+					</bgColor>
+					<pikeColor>
+						<red>0</red>
+						<green>0</green>
+						<blue>255</blue>
+						<alpha>255</alpha>
+					</pikeColor>
+					<envColor>
+						<red>0</red>
+						<green>0</green>
+						<blue>255</blue>
+						<alpha>255</alpha>
+					</envColor>
+				</fr.cemagref.simaqualife.extensions.spatial2D.Movement2DObserver>
+			</observers>
+		</fr.cemagref.observation.kernel.ObservablesHandler>
+	</entry>
+
+
+	<!--entry>
+		<java-class>fr.cemagref.simaqualife.kernel.AquaticWorld</java-class>
+		<fr.cemagref.observation.kernel.ObservablesHandler>
+			<observers>
+				<pikelake.environment.Movement2DWithinShapeObserver>
+					<title>Bariousses</title>
+					<bgColor>
+						<red>168</red>
+						<green>0</green>
+						<blue>0</blue>
+						<alpha>255</alpha>
+					</bgColor>
+					<shapeColor>
+						<red>0</red>
+						<green>0</green>
+						<blue>255</blue>
+						<alpha>255</alpha>
+					</shapeColor>
+					<margin>1</margin>
+					<sizeOfDisplayedIndividuals>2</sizeOfDisplayedIndividuals>
+				</pikelake.environment.Movement2DWithinShapeObserver>
+			</observers>
+		</fr.cemagref.observation.kernel.ObservablesHandler>
+	</entry-->
+
+
+	<!--entry>
+		<java-class>pikelake.Grid</java-class>
+		<fr.cemagref.observation.kernel.ObservablesHandler>
+			<observers>
+				<fr.cemagref.simaqualife.extensions.spatial2D.Movement2DObserver>
+					<Pilot></Pilot>
+					<title>Bariousses</title>
+					<groupsColors>
+						<red>255</red>
+						<green>0</green>
+						<blue>0</blue>
+						<alpha>255</alpha>
+					</groupsColors>
+					<bgColor>
+						<red>0</red>
+						<green>0</green>
+						<blue>0</blue>
+						<alpha>255</alpha>
+					</bgColor>
+					<envColor>
+						<red>0</red>
+						<green>0</green>
+						<blue>255</blue>
+						<alpha>255</alpha>
+					</envColor>
+					<cellSizeMin>1</cellSizeMin>
+				</fr.cemagref.simaqualife.extensions.spatial2D.Movement2DObserver>
+			</observers>
+		</fr.cemagref.observation.kernel.ObservablesHandler>
+	</entry-->
+	
 </hashtable>
diff --git a/src/main/java/pikelake/Cell.java b/src/main/java/pikelake/Cell.java
index 95fbff0a7a00930f859862c5be227302f38ec255..848467dd40db00dd4f108fe055c5cb3915f3da10 100644
--- a/src/main/java/pikelake/Cell.java
+++ b/src/main/java/pikelake/Cell.java
@@ -1,64 +1,39 @@
 package pikelake;
 
-import fr.cemagref.simaqualife.extensions.spatial2D.Grid2D;
+
+//import fr.cemagref.simaqualife.extensions.spatial2D.Grid2D;
 import fr.cemagref.simaqualife.extensions.spatial2D.IndexedCell;
-import fr.cemagref.simaqualife.pilot.Pilot;
+//import fr.cemagref.simaqualife.pilot.Pilot;
 
 import java.util.ArrayList;
 import java.util.List;
 
 import pikelake.pikes.Pike;
-// import predatorprey.preys.Prey;	/////////////////////////////////////////////////////////////////
 
 public class Cell extends IndexedCell {
 
-    /**
-     * <code>preyCarryingCapacity</code> number of preys that this place can
-     * support
-     */
-//    private int preyCarryingCapacity;	/////////////////////////////////////////////////////////////////
-
     /**
      * <code>habitatQuality</code> The quality of this place (pike point of
      * view). A high value means that preys are vulnerable for the pikes
      */
     private double habitatQuality;
 
-    /**
-     * <code>preys</code> The list of preys in this place
-     */
-//    private transient List<Prey> preys;	/////////////////////////////////////////////////////////////////
-
     /**
      * <code>pikes</code> The list of pikes in this place
      */
     private transient List<Pike> pikes;
 
-    public Cell(int index, double habitatQuality) { //	, int preyCarryingCapacity) {	//////////////////////
+    public Cell(int index, double habitatQuality) {
         super(index);
         this.habitatQuality = habitatQuality;
-//        this.preyCarryingCapacity = preyCarryingCapacity;	/////////////////////////////////////////////////////////////////
 
-//        preys = new ArrayList<Prey>();	/////////////////////////////////////////////////////////////////
         pikes = new ArrayList<Pike>();
     }
 
-//    public List<Prey> getPreys() {	/////////////////////////////////////////////////////////////////
-//        return preys;	/////////////////////////////////////////////////////////////////
-//    }	/////////////////////////////////////////////////////////////////
-
     public List<Pike> getPikes() {
         return pikes;
     }
 
-//    public boolean addPrey(Prey prey) {	/////////////////////////////////////////////////////////////////
-//        return preys.add(prey);	/////////////////////////////////////////////////////////////////
-//    }	/////////////////////////////////////////////////////////////////
-
-//    public boolean removePrey(Prey prey) {	/////////////////////////////////////////////////////////////////
-//        return preys.remove(prey);	/////////////////////////////////////////////////////////////////
-//    }	/////////////////////////////////////////////////////////////////
-
     public boolean addPike(Pike pike) {
         return pikes.add(pike);
     }
@@ -71,8 +46,4 @@ public class Cell extends IndexedCell {
         return habitatQuality;
     }
 
-//    public int getPreyCarryingCapacity() {	/////////////////////////////////////////////////////////////////
-//        return preyCarryingCapacity;	/////////////////////////////////////////////////////////////////
-//    }	/////////////////////////////////////////////////////////////////
-
 }
diff --git a/src/main/java/pikelake/Grid.java b/src/main/java/pikelake/Grid.java
index 288f4a81a3e4cb5d4f0a0418c0dd375c5be5e58f..c610ed27c1d871584ce7bee0b43987ec0fcce303 100644
--- a/src/main/java/pikelake/Grid.java
+++ b/src/main/java/pikelake/Grid.java
@@ -1,12 +1,14 @@
 package pikelake;
 
 import fr.cemagref.simaqualife.extensions.spatial2D.Grid2D;
-import fr.cemagref.simaqualife.extensions.spatial2D.Grid2D.NeighborsType;
+//import fr.cemagref.simaqualife.extensions.spatial2D.Grid2D.NeighborsType;
 import fr.cemagref.simaqualife.kernel.AquaNismsGroup;
 import fr.cemagref.simaqualife.kernel.util.TransientParameters.InitTransientParameters;
 import fr.cemagref.simaqualife.pilot.Pilot;
+
 import java.util.ArrayList;
 import java.util.List;
+
 import pikelake.pikes.Pike;
 
 public class Grid extends Grid2D<Cell, Individual> {
@@ -18,25 +20,30 @@ public class Grid extends Grid2D<Cell, Individual> {
 
     @InitTransientParameters
     public void initTransientParameters(Pilot pilot) {
-        // TODO
+        // TODO intialisation de chaque maille avec le hsi
+    	
         // TODO empty grid
         this.grid = new Cell[]{new Cell(0, 0.0), new Cell(1, 0.0)};
+        
     }
 
-    @Override
+    @SuppressWarnings("rawtypes")
+	@Override
     public void addAquaNism(Individual ind, AquaNismsGroup group) {
         super.addAquaNism(ind, group);
         ind.getPosition().addPike((Pike) ind);
     }
 
-    @Override
+    @SuppressWarnings("rawtypes")
+	@Override
     public void moveAquaNism(Individual ind, AquaNismsGroup group, Cell dest) {
         super.moveAquaNism(ind, group, dest);
         this.removeAquaNism(ind, group);
         dest.addPike((Pike) ind);
     }
 
-    @Override
+    @SuppressWarnings("rawtypes")
+	@Override
     public void removeAquaNism(Individual ind, AquaNismsGroup group) {
         super.removeAquaNism(ind, group);
         ind.getPosition().removePike((Pike) ind);
diff --git a/src/main/java/pikelake/GridObserver.java b/src/main/java/pikelake/GridObserver.java
index 3df8e09008dfc71b7b376e4cf8a08094ef02295b..6306d7d5967c2827e1c7cdfe0a53f16df1c0dced 100644
--- a/src/main/java/pikelake/GridObserver.java
+++ b/src/main/java/pikelake/GridObserver.java
@@ -20,6 +20,7 @@ import com.thoughtworks.xstream.io.xml.DomDriver;
 
 import fr.cemagref.observation.gui.Configurable;
 import fr.cemagref.observation.gui.Drawable;
+//import fr.cemagref.observation.kernel.Observable;
 import fr.cemagref.observation.kernel.ObservablesHandler;
 import fr.cemagref.observation.kernel.ObserverListener;
 import fr.cemagref.ohoui.annotations.Description;
@@ -33,9 +34,11 @@ import fr.cemagref.simaqualife.pilot.Pilot;
 @SuppressWarnings("serial")
 @NoRecursive
 public class GridObserver extends ObserverListener implements Configurable, Drawable, MouseMotionListener {
-
+	
     private transient JComponent display;
+	
     private transient JLabel label;
+    
     private transient Grid grid;
     
     private String title;
@@ -58,11 +61,15 @@ public class GridObserver extends ObserverListener implements Configurable, Draw
     }
     
     public void valueChanged(ObservablesHandler clObservable, Object instance, long t) {
-        display.repaint();
+        // modif pour effectuer les déplacements
+    	
+    	
+    	display.repaint();
     }
     
     @TransientParameters.InitTransientParameters
     public void init(Pilot pilot) {
+    	
     	// init display component
         display = new JPanel(new BorderLayout());
         DisplayComponent displayComponent = new DisplayComponent();
@@ -154,7 +161,7 @@ public class GridObserver extends ObserverListener implements Configurable, Draw
             g.fillRect(0, 0, getWidth(), getHeight());
             Rectangle2D.Double cellRect = null;
             Rectangle2D.Double pikeRect = null;
-            double preyDiameterX, preyDiameterY, pikeWidth, pikeHeight;
+            double pikeWidth, pikeHeight;
             // draw each cell
             for (int i = 0; i < grid.getCells().length; i++) {
             	// the bounds of a cell
diff --git a/src/main/java/pikelake/environment/Movement2DWithinShapeObserver.java b/src/main/java/pikelake/environment/Movement2DWithinShapeObserver.java
new file mode 100644
index 0000000000000000000000000000000000000000..da2eefd60f3a81bc31dd19cdbb00c80ea0f4724f
--- /dev/null
+++ b/src/main/java/pikelake/environment/Movement2DWithinShapeObserver.java
@@ -0,0 +1,202 @@
+package pikelake.environment;
+
+import fr.cemagref.observation.gui.Configurable;
+import fr.cemagref.observation.gui.Drawable;
+//import fr.cemagref.observation.kernel.ObservablesHandler;
+import fr.cemagref.observation.kernel.ObserverListener;
+import fr.cemagref.ohoui.swing.OhOUIDialog;
+import fr.cemagref.ohoui.swing.OhOUI;
+import fr.cemagref.ohoui.annotations.Description;
+import fr.cemagref.ohoui.annotations.NoRecursive;
+import fr.cemagref.ohoui.filters.NoTransientField;
+import fr.cemagref.simaqualife.kernel.AquaNism;
+import fr.cemagref.simaqualife.kernel.AquaNismsGroup;
+import fr.cemagref.simaqualife.pilot.Pilot;
+//import fr.cemagref.simaqualife.pilot.gui.util.FileChooserField;
+
+import java.awt.Color;
+import java.awt.Dimension;
+import java.awt.Graphics;
+import java.awt.Graphics2D;
+import java.awt.Rectangle;
+import java.awt.Shape;
+import java.awt.geom.AffineTransform;
+import java.awt.geom.GeneralPath;
+import java.awt.geom.Point2D;
+import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Iterator;
+import java.util.List;
+
+import javax.swing.JComponent;
+
+@SuppressWarnings({ "serial" })
+@NoRecursive
+public abstract class Movement2DWithinShapeObserver extends ObserverListener implements Configurable, Drawable {
+
+//    private transient FileChooserField modulesChooser;
+    private transient JComponent display;
+    
+    private transient GeneralPath generalPath;
+    private transient List<AquaNismsGroup<? extends AquaNism<? extends Point2D,?>,?>> groups;
+    
+    private String title;
+    
+    // TODO supress transient when list will be supported by AutOUI
+    @Description (name="Groups colors",tooltip="Colors af aquanisms groups")
+    private transient List<Color> groupsColors;
+    @Description (name="Background color",tooltip="Background color")
+    private Color bgColor;
+    @Description (name="River color",tooltip="River color")
+    private Color shapeColor;
+    
+    private int margin;
+    private int sizeOfDisplayedIndividuals;
+    // use for determine if generalPath must be rescaled
+    private transient int displayWidthBak,displayHeightBak;
+    // used for coordinates rescaling
+    private transient double repositioningTranslateX,repositioningTranslateY;
+    private transient double shapeOriginalWidth, shapeOriginalHeight;
+    private transient double shapeAspectRatio;
+    private transient double rescaleFactorWithOriginal; 
+   
+    public Movement2DWithinShapeObserver(int margin) {
+        this(margin,Color.BLACK,Color.BLUE);
+    }
+    
+    public Movement2DWithinShapeObserver() {
+        this(Color.BLACK,Color.BLUE);
+    }
+    
+    public Movement2DWithinShapeObserver(Color bgColor,Color shapeColor) {
+        this(0,bgColor,shapeColor);
+    }
+    
+    public Movement2DWithinShapeObserver(int margin,Color bgColor,Color shapeColor) {
+        this.margin = margin;
+        this.bgColor = bgColor;
+        this.shapeColor = shapeColor;
+    }
+        
+    public String getTitle() {
+        return title;
+    }
+
+    public JComponent getDisplay() {
+        return display;
+    }
+    
+    public void valueChanged(ObserverListener clObservable, Object instance, int t) {
+        display.repaint();
+    }
+    
+    @SuppressWarnings("unchecked")
+	public void init() {
+        Pilot pilot = new Pilot();
+    	
+    	display = new DisplayComponent();
+        display.setVisible(false);
+        display.setDoubleBuffered(true);
+
+        displayWidthBak = 0;
+        displayHeightBak = 0;
+        // init shape
+        this.generalPath = new GeneralPath(((AsShapeConvertible)pilot.getAquaticWorld().getEnvironment()).getShape());
+        // original dimension storage 
+        this.shapeOriginalWidth = this.generalPath.getBounds().getWidth();
+        this.shapeOriginalHeight = this.generalPath.getBounds().getHeight();
+        this.shapeAspectRatio = shapeOriginalWidth / shapeOriginalHeight;
+        // repositionning the shape to (0,0)
+        this.repositioningTranslateX = - this.generalPath.getBounds().getX();
+        this.repositioningTranslateY = - this.generalPath.getBounds().getY();
+        this.generalPath.transform(AffineTransform.getTranslateInstance(this.margin+repositioningTranslateX,this.margin+repositioningTranslateY));
+        // vertical flip
+        this.generalPath.transform(AffineTransform.getScaleInstance(1,-1)); 
+        this.generalPath.transform(AffineTransform.getTranslateInstance(0,shapeOriginalHeight));
+        
+        groups = new ArrayList<AquaNismsGroup<? extends AquaNism<? extends Point2D,?>,?>>((Collection<? extends AquaNismsGroup<? extends AquaNism<? extends Point2D, ?>, ?>>)pilot.getAquaticWorld().getAquaNismsGroupsList());
+        if (groups!=null) {
+            display.setVisible(true);
+        }
+        groupsColors = new ArrayList<Color>();
+        groupsColors.add(Color.RED);
+        groupsColors.add(Color.GREEN);
+        groupsColors.add(Color.YELLOW);
+        groupsColors.add(Color.CYAN);
+        groupsColors.add(Color.GRAY);
+        display.repaint();
+    }
+    
+    public void disable() {
+        display.setVisible(false);
+    }
+    
+    public static interface AsShapeConvertible {
+        public Shape getShape();
+    }
+
+    public void configure() {
+        OhOUIDialog dialog = OhOUI.getDialog(null,this,new NoTransientField());
+        dialog.setSize(new Dimension(480, 200));
+        dialog.setVisible(true);
+        display.repaint();
+    }
+
+    public void addObservable(ObserverListener classObservable) {
+        // nothing to do
+    }
+
+    public void close() {
+        // nothing to do
+        
+    }
+    
+    private class DisplayComponent extends JComponent {
+        
+        @Override
+        protected synchronized void paintComponent(Graphics g) {
+            super.paintComponents(g);
+            Graphics2D g2d = (Graphics2D)g;
+            // determine if generalPath must be rescaled
+            if ( (this.getWidth() != displayWidthBak) || (this.getHeight() != displayHeightBak) ) {
+                // backup for comparaison in the next loop
+                displayWidthBak = this.getWidth();
+                displayHeightBak = this.getHeight();
+                // compute the rescale factor with keeping the aspect ratio
+                double rescaleFactor;
+                // TODO calcul faux quand margin > 0
+                if ( ((double)displayWidthBak/displayHeightBak) < shapeAspectRatio ) {
+                    rescaleFactor = displayWidthBak / (generalPath.getBounds().getWidth());
+                    rescaleFactorWithOriginal = displayWidthBak / shapeOriginalWidth;
+                } else {
+                    rescaleFactor = displayHeightBak / (generalPath.getBounds().getHeight());
+                    rescaleFactorWithOriginal = displayHeightBak / shapeOriginalHeight;
+                }
+                // rescale the generalPath
+                generalPath.transform(
+                        AffineTransform.getScaleInstance(rescaleFactor,rescaleFactor)
+                );
+               
+            }
+            // Draw Background
+            g.setColor(bgColor);
+            g.fillRect(0, 0, getWidth(), getHeight());
+            // Draw the generalPath
+            g.setColor(shapeColor);
+            g2d.fill(generalPath);
+            //g.setColor(aquanismsColor);
+            Iterator<Color> colorsIterator = groupsColors.iterator();
+            // Draw aquanisms
+            for (AquaNismsGroup<? extends AquaNism<? extends Point2D,?>,?> group : groups) {
+                if (colorsIterator.hasNext()) g.setColor(colorsIterator.next());
+                for (AquaNism<? extends Point2D,?> aquanism : group.getAquaNismsList()) {
+                    Rectangle rect=new Rectangle((int)((aquanism.getPosition().getX()+repositioningTranslateX) * rescaleFactorWithOriginal),
+                            (int)(generalPath.getBounds().getHeight()  /*flip vertically*/ - (aquanism.getPosition().getY()+repositioningTranslateY) * rescaleFactorWithOriginal),
+                            sizeOfDisplayedIndividuals,sizeOfDisplayedIndividuals);
+                    // draw the individuals after repositioning and rescaling the position
+                    g2d.fill(rect);
+                }
+            }
+        }
+    }
+}
diff --git a/src/main/java/pikelake/pikes/PikeHuntProcess.java b/src/main/java/pikelake/pikes/PikeHuntProcess.java
index b2321e2090a1df773147c7fafc593440d6f2b112..84d7c4ad7e6a7ac9fd82566f6786e6c0f921c8ef 100644
--- a/src/main/java/pikelake/pikes/PikeHuntProcess.java
+++ b/src/main/java/pikelake/pikes/PikeHuntProcess.java
@@ -1,12 +1,10 @@
 package pikelake.pikes;
 
-import java.util.Collections;
+//import java.util.Collections;
 import java.util.Comparator;
-import java.util.List;
+//import java.util.List;
 
 import pikelake.Cell;
-//	import predatorprey.preys.Prey;	////////////////////////////////////////////////////////////
-//	import predatorprey.preys.PreysGroup;	////////////////////////////////////////////////////
 import umontreal.iro.lecuyer.probdist.UniformDist;
 import umontreal.iro.lecuyer.randvar.UniformGen;
 import fr.cemagref.simaqualife.kernel.AquaNismsGroup;
diff --git a/src/main/java/pikelake/pikes/PikeMovement.java b/src/main/java/pikelake/pikes/PikeMovement.java
index 3d8cf4d33bfea50b73a3e0cf2d884e542250a894..9c7ea8e88bf929eec55aceb49ad74fae10d7481d 100644
--- a/src/main/java/pikelake/pikes/PikeMovement.java
+++ b/src/main/java/pikelake/pikes/PikeMovement.java
@@ -57,4 +57,4 @@ public class PikeMovement extends LoopAquaNismsGroupProcess<Pike, PikesGroup> {
             pike.moveTo(group.getPilot(), possibilities.get(idx), group);
         }
     }
-}
+}
\ No newline at end of file
diff --git a/src/main/java/pikelake/pikes/PikeObservationProcess.java b/src/main/java/pikelake/pikes/PikeObservationProcess.java
index 8d20846e9ca93fa4a2b7562aecfea4304ef5593a..c7c24b2d0aafc275514d95f5ec9289239391b148 100644
--- a/src/main/java/pikelake/pikes/PikeObservationProcess.java
+++ b/src/main/java/pikelake/pikes/PikeObservationProcess.java
@@ -9,5 +9,4 @@ public class PikeObservationProcess extends AquaNismsGroupProcess<Pike,PikesGrou
 		pikesGroup.calculatePikesNumber();
 		
 	}
-
 }
diff --git a/src/main/java/pikelake/pikes/PikesGroup.java b/src/main/java/pikelake/pikes/PikesGroup.java
index c63276942770d5466e2881dc7f6b9599d4d58dd8..36bdb273ae6cb68060330816cec1f0ad7bf0c9e2 100644
--- a/src/main/java/pikelake/pikes/PikesGroup.java
+++ b/src/main/java/pikelake/pikes/PikesGroup.java
@@ -28,7 +28,6 @@ public class PikesGroup extends AquaNismsGroup<Pike,Grid> {
 	private transient int pikesNumber;
 	
 	
-	
 	public PikesGroup(Pilot pilot, Grid arg0, Processes arg1) {
 		super(pilot, arg0, arg1);
 	}
@@ -42,7 +41,6 @@ public class PikesGroup extends AquaNismsGroup<Pike,Grid> {
 		}
 		System.out.println(" pred: "+pikesNumber + " " + pikesNumber2);*/
 		return pikesNumber;
-
 	}
 
 	public double calculatePikesBiomass(){
@@ -50,7 +48,6 @@ public class PikesGroup extends AquaNismsGroup<Pike,Grid> {
 			for(Pike pike : this.getAquaNismsList())
 				pikesBiomass += pike.getWeight();
 		return pikesBiomass;
-
 	}