diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java
index 66e86ac3836260b524b912ec2e61fb6c4c60e658..a6cd34fb731bfcbf90e4ceb0f04a928f31d56d1d 100644
--- a/AMOEBAonAMAK/src/agents/context/Context.java
+++ b/AMOEBAonAMAK/src/agents/context/Context.java
@@ -108,7 +108,8 @@ public class Context extends AmoebaAgent {
 		for (Percept p : var) {
 			Range r;
 
-			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(p);
+			//Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(p);
+			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(p);
 
 			r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p);
 
@@ -122,7 +123,7 @@ public class Context extends AmoebaAgent {
 			p.addContextProjection(this);
 		}
 
-		expand();
+		//expand();
 
 		localModel = getAmas().buildLocalModel(this);
 		firstPoint.setOracleProposition(getAmas().getHeadAgent().getOracleValue());
@@ -181,7 +182,9 @@ public class Context extends AmoebaAgent {
 		ArrayList<Percept> var = getAmas().getPercepts();
 		for (Percept v : var) {
 			Range r;
-			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(v);
+			//Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(v);
+			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(v);
+			
 
 			r = new Range(this, v.getValue() - radiuses.getA(), v.getValue() + radiuses.getB(), 0, true, true, v);
 
@@ -193,7 +196,7 @@ public class Context extends AmoebaAgent {
 			v.addContextProjection(this);;
 		}
 
-		expand();
+		//expand();
 
 		this.confidence = bestNearestContext.confidence;
 		if (bestNearestContext.getLocalModel().getType() == TypeLocalModel.MILLER_REGRESSION) {
@@ -562,7 +565,7 @@ public class Context extends AmoebaAgent {
 		for (Percept pct : getAmas().getPercepts()) {
 			currentDistance = this.distance(ctxt, pct);
 			
-			if(currentDistance<-pct.getMappingErrorAllowedMin() && getAmas().getCycle()>1000) {
+			if(currentDistance<-pct.getMappingErrorAllowedMin() && getAmas().getCycle()>500) {
 				getEnvironment().trace(TRACE_LEVEL.DEBUG,new ArrayList<String>(Arrays.asList("OVERLAP",pct.getName(), ""+this,""+ctxt)) );
 				overlapCounts+=1;
 				overlapDistances.put(pct, Math.abs(currentDistance));
@@ -572,7 +575,7 @@ public class Context extends AmoebaAgent {
 			}
 			
 
-			if (currentDistance > pct.getMappingErrorAllowedMin() && getAmas().getCycle()>2000) {
+			if (currentDistance > pct.getMappingErrorAllowedMin() && getAmas().getCycle()>1000) {
 				getEnvironment().trace(TRACE_LEVEL.DEBUG,new ArrayList<String>(Arrays.asList("VOID",pct.getName(), ""+this,""+ctxt, "distance", ""+currentDistance)) );
 				voidDistances.put(pct, currentDistance);
 				bounds.put(pct, this.voidBounds(ctxt, pct));
@@ -584,7 +587,7 @@ public class Context extends AmoebaAgent {
 
 		}
 
-		if (overlapCounts == getAmas().getPercepts().size()) {
+		if (overlapCounts == getAmas().getPercepts().size() && getAmas().getCycle() > 500) {
 			
 			getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList(getAmas().getPercepts().size() + "OVERLAPS", ""+this,""+ctxt)) );
 			
@@ -593,14 +596,14 @@ public class Context extends AmoebaAgent {
 				return new EndogenousRequest(request, bounds, 7, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.OVERLAP);
 			}		
 		}
-		else if(overlapCounts == getAmas().getPercepts().size()-1 && voidDistances.size() == 1) {
+		else if(overlapCounts == getAmas().getPercepts().size()-1 && voidDistances.size() == 1 && getAmas().getCycle() > 750) {
 			
 			getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("VOID", ""+this,""+ctxt)) );
 			
 			HashMap<Percept, Double> request = boundsToRequest(bounds);
 			if(request != null) {
 				
-				if(getAmas().getHeadAgent().isVoid(request)) {
+				if(getAmas().getHeadAgent().isRealVoid(request)) {
 					return new EndogenousRequest(request, bounds, 5, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.VOID);
 				}		
 			}
diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java
index d07ae056426db010088f33f0bf74e9bb331f4b79..f754ed46322ad1fa2392af7602a0accde78e8304 100644
--- a/AMOEBAonAMAK/src/agents/head/Head.java
+++ b/AMOEBAonAMAK/src/agents/head/Head.java
@@ -107,9 +107,9 @@ public class Head extends AmoebaAgent {
 	}
 
 	private void playWithOracle() {
-
+		getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("\n\n")));
 		getAmas().data.executionTimes[0]=System.currentTimeMillis();
-		getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("\n------------------------------------------------------------------------------------"
+		getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------"
 				+ "---------------------------------------- PLAY WITH ORACLE")));
 		
 		if (activatedContexts.size() > 0) {
@@ -1693,6 +1693,14 @@ public class Head extends AmoebaAgent {
 
 	}
 
+	
+	public Pair<Double, Double> getRadiusesForContextCreation(Percept pct) {
+		return new Pair<Double, Double>(
+				pct.getRadiusContextForCreation(),
+				pct.getRadiusContextForCreation());
+	}
+	
+	
 	public Pair<Double, Double> getMaxRadiusesForContextCreation(Percept pct) {
 //		Pair<Double, Double> maxRadiuses = new Pair<Double, Double>(
 //				Math.min(pct.getRadiusContextForCreation(), Math.abs(pct.getMin() - pct.getValue())),
@@ -1853,15 +1861,21 @@ public class Head extends AmoebaAgent {
 		
 	}
 	
-	public boolean isVoid(HashMap<Percept, Double> request) {
+	public boolean isRealVoid(HashMap<Percept, Double> request) {
 		boolean test;
 		
 		for(Context ctxt : activatedNeighborsContexts) {
 			
+			
+			
 			test = true;
 			for(Percept pct : getAmas().getPercepts()) {
-				test = test && ctxt.getRanges().get(pct).contains2(request.get(pct));
+//				test = test && ctxt.getRanges().get(pct).contains2(request.get(pct));
+				test = test && ctxt.getRanges().get(pct).contains(request.get(pct), pct.getMappingErrorAllowedMin());
 			}
+			
+			getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("IS REAL VOID",ctxt.getName(), "-->", ""+!test)));
+			
 			if(test) {
 				return false;
 			}
diff --git a/AMOEBAonAMAK/src/agents/percept/Percept.java b/AMOEBAonAMAK/src/agents/percept/Percept.java
index fc6b22bb567c2e6d654a242e61674138076be6de..2820e695eecb8c41accb4e9fb7d4b2a1d2ed68ee 100644
--- a/AMOEBAonAMAK/src/agents/percept/Percept.java
+++ b/AMOEBAonAMAK/src/agents/percept/Percept.java
@@ -23,8 +23,8 @@ public class Percept extends AmoebaAgent {
 	private HashSet<Context> validContextProjection = new HashSet<Context>();
 	private HashSet<Context> neighborContextProjection = new HashSet<Context>();
 
-	private double min = Double.MAX_VALUE;
-	private double max = Double.MIN_VALUE;
+	private double min = Double.POSITIVE_INFINITY;
+	private double max = Double.NEGATIVE_INFINITY;
 
 
 	private double value;
diff --git a/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java b/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java
index 3198f183a3be69539d05feb8f83773625927ce37..099acfb8fc051ddd4d8bdc9e921b199dc79844f7 100644
--- a/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java
+++ b/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java
@@ -77,7 +77,7 @@ public class Main implements Runnable {
 		Configuration.plotMilliSecondsUpdate = 20000;
 		
 		AMOEBA amoeba = new AMOEBA();
-		StudiedSystem studiedSystem = new F_N_Manager(spaceSize, dimension, nbOfModels, normType, randomExploration, explorationIncrement,explorationWidht,limitedToSpaceZone);
+		StudiedSystem studiedSystem = new F_N_Manager(spaceSize, dimension, nbOfModels, normType, randomExploration, explorationIncrement,explorationWidht,limitedToSpaceZone, oracleNoiseRange);
 		amoeba.setStudiedSystem(studiedSystem);
 		IBackupSystem backupSystem = new BackupSystem(amoeba);
 		File file = new File("resources/threeDimensionsLauncherUnity.xml");
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
index 317b044f583928d8c3109629c6e47ad6ba2c71e5..300f91f974a5129d9488e6b97388d84df20173ea 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
@@ -8,6 +8,9 @@ import java.util.ArrayList;
 import experiments.FILE;
 import fr.irit.smac.amak.Configuration;
 import gui.AmoebaWindow;
+import javafx.beans.value.ChangeListener;
+import javafx.beans.value.ObservableValue;
+import javafx.scene.control.Slider;
 import kernel.AMOEBA;
 import kernel.StudiedSystem;
 import kernel.backup.BackupSystem;
@@ -21,16 +24,17 @@ import kernel.backup.SaveHelperImpl;
 public class F_N_Launcher implements Serializable {
 
 
-	public static final double oracleNoiseRange = 0.0;
+	public static final double oracleNoiseRange = 0.5;
 	public static final double learningSpeed = 0.01;
 	public static final int regressionPoints = 100;
 	public static final int dimension = 2;
 	public static final double spaceSize = 50.0	;
 	public static final int nbOfModels = 3	;
 	public static final int normType = 2	;
-	public static final boolean randomExploration = true;
+	public static final boolean randomExploration = false;
 	public static final boolean limitedToSpaceZone = true;
-	public static final double mappingErrorAllowed = 0.03;
+	//public static final double mappingErrorAllowed = 0.07; // BIG SQUARE
+	public static double mappingErrorAllowed = 0.03; // MULTI
 	public static final double explorationIncrement = 1.0	;
 	public static final double explorationWidht = 0.5	;
 	
@@ -60,7 +64,7 @@ public class F_N_Launcher implements Serializable {
 		Configuration.plotMilliSecondsUpdate = 20000;
 		
 		AMOEBA amoeba = new AMOEBA();
-		StudiedSystem studiedSystem = new F_N_Manager(spaceSize, dimension, nbOfModels, normType, randomExploration, explorationIncrement,explorationWidht,limitedToSpaceZone);
+		StudiedSystem studiedSystem = new F_N_Manager(spaceSize, dimension, nbOfModels, normType, randomExploration, explorationIncrement,explorationWidht,limitedToSpaceZone, oracleNoiseRange);
 		amoeba.setStudiedSystem(studiedSystem);
 		IBackupSystem backupSystem = new BackupSystem(amoeba);
 		File file = new File("resources/twoDimensionsLauncher.xml");
@@ -73,6 +77,21 @@ public class F_N_Launcher implements Serializable {
 		amoeba.data.numberOfPointsForRegression = regressionPoints;
 		amoeba.getEnvironment().setMappingErrorAllowed(mappingErrorAllowed);
 		
+		// Exemple for adding a tool in the toolbar
+		Slider slider = new Slider(0.01, 0.1, mappingErrorAllowed);
+		slider.setShowTickLabels(true);
+		slider.setShowTickMarks(true);
+		
+		slider.valueProperty().addListener(new ChangeListener<Number>() {
+			@Override
+			public void changed(ObservableValue<? extends Number> observable, Number oldValue, Number newValue) {
+				System.out.println("new Value "+newValue);
+				mappingErrorAllowed = (double)newValue;
+				amoeba.getEnvironment().setMappingErrorAllowed(mappingErrorAllowed);
+			}
+		});
+		AmoebaWindow.addToolbar(slider);
+		
 		studiedSystem.playOneStep();
 		amoeba.learn(studiedSystem.getOutput());
 		
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
index 331ba5275c774ff131f1d65609f152de6dccfef8..a5c51923a19dec1f5678edd58df31573c7561f4f 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
@@ -41,6 +41,8 @@ public class F_N_Manager implements StudiedSystem{
 	HashMap<String,Double> selfRequest;
 	boolean activeLearning = false;
 	
+	double noiseRange;
+	
 	/** The world. */
 	Random generator;
 	
@@ -53,13 +55,14 @@ public class F_N_Manager implements StudiedSystem{
 	private static final double gaussianVariance = 10;
 	
 	
-	public F_N_Manager(double size, int dim, int nbOfModels, int nrmType, boolean rndExploration, double explIncrement, double explnVariation, boolean limiteToSpace) {
+	public F_N_Manager(double size, int dim, int nbOfModels, int nrmType, boolean rndExploration, double explIncrement, double explnVariation, boolean limiteToSpace, double noise) {
 		this.spaceSize= size;
 		dimension = dim;
 		numberOfModels = nbOfModels;
 		normType = nrmType;
 		x = new Double[dimension];
 		
+		noiseRange = noise;
 		spaceLimited = limiteToSpace;
 		
 		//gaussianCoef = Math.random()*2000;
@@ -270,12 +273,13 @@ public class F_N_Manager implements StudiedSystem{
 		center[0]=0.0;
 		center[1]=0.0;
 		//return gaussianModel(xRequest, center,gaussianCoef, gaussianVariance);
+		//return squareSimpleModel(xRequest);
 		
 		int subzone = subzone2D(xRequest);
 		
 		if(subzone == 1) {
 			/* Disques */
-			return modelN(xRequest);
+			return modelN(xRequest) ;
 		}else if (subzone == 2) {
 			/* Gaussian model */
 			return gaussianModel(xRequest, subZoneCenter3D(2), gaussianCoef, gaussianVariance);
@@ -408,6 +412,13 @@ private double[] subZoneCenter3D(int nb) {
 				xRequest[1] < (center[1]+spaceSize/2)) ? model1(xRequest[0],xRequest[1]) : model2(xRequest[0],xRequest[1]) ;
 	}
 	
+	private double squareSimpleModel(Double[] xRequest) {
+		return ((-spaceSize)  < xRequest[0]  && 
+				xRequest[0] < (spaceSize) &&
+				(-spaceSize)  < xRequest[1]  && 
+				xRequest[1] < (+spaceSize)) ? model1(xRequest[0],xRequest[1]) : model2(xRequest[0],xRequest[1]) ;
+	}
+	
 	private double gaussianModel() {
 		double result = 1.0;
 		for(int i=0;i<dimension;i++) {
diff --git a/AMOEBAonAMAK/src/kernel/SITUATION.java b/AMOEBAonAMAK/src/kernel/SITUATION.java
new file mode 100644
index 0000000000000000000000000000000000000000..46f38af74deb95e6667969036072e08859a55b78
--- /dev/null
+++ b/AMOEBAonAMAK/src/kernel/SITUATION.java
@@ -0,0 +1,12 @@
+package kernel;
+
+import java.io.Serializable;
+
+public enum SITUATION implements Serializable {
+	
+	LEARN,
+	REQUEST,
+	CONCURENCE,
+	INCOMPETENCE
+	
+}
diff --git a/AMOEBAonAMAK/src/kernel/World.java b/AMOEBAonAMAK/src/kernel/World.java
index e248a189449055d43fff29bc5ac33ff3d1e90fdf..5fe709fea42dfd30530f773a93033cd64684e139 100644
--- a/AMOEBAonAMAK/src/kernel/World.java
+++ b/AMOEBAonAMAK/src/kernel/World.java
@@ -34,7 +34,7 @@ public class World extends Environment {
 	
 	
 	
-	public static TRACE_LEVEL minLevel = TRACE_LEVEL.ERROR;
+	public static TRACE_LEVEL minLevel = TRACE_LEVEL.DEBUG;
 	
 	private AMOEBA amoeba;