diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java
index 88874e808b1ba630112262acb8afd818135263b2..0fcecfa9fbc57ae0ab4909d32b03adc49cf8319b 100644
--- a/AMOEBAonAMAK/src/agents/context/Context.java
+++ b/AMOEBAonAMAK/src/agents/context/Context.java
@@ -111,9 +111,19 @@ public class Context extends AmoebaAgent {
 			Range r;
 
 			//Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(p);
+			//TODO use neihbors sizes to define radiuses for creation !!!!!!!!!!!
 			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(p);
 
-			r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p);
+			if(getAmas().data.meanNeighborhoodRaduises != null) {
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("Range creation by mean", this.getName(), p.getName(), getAmas().data.meanNeighborhoodRaduises.get(p).toString())));
+				r = new Range(this, p.getValue() - getAmas().data.meanNeighborhoodRaduises.get(p), p.getValue() + getAmas().data.meanNeighborhoodRaduises.get(p), 0, true, true, p, getAmas().data.meanNeighborhoodStartIncrements.get(p), getAmas().data.meanNeighborhoodEndIncrements.get(p));
+			}else {
+				r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p);
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("Range creation by init", this.getName(), p.getName(), radiuses.getA().toString())));
+			}
+			
 
 			// r = new Range(this, v.getValue() - radius, v.getValue() + radius, 0, true,
 			// true, v, world);
@@ -179,20 +189,29 @@ public class Context extends AmoebaAgent {
 
 		Experiment firstPoint = new Experiment(this);
 		ArrayList<Percept> var = getAmas().getPercepts();
-		for (Percept v : var) {
+		for (Percept p : var) {
 			Range r;
 			//Pair<Double, Double> radiuses = getAmas().getHeadAgent().getMaxRadiusesForContextCreation(v);
-			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(v);
+			//TODO use neihbors sizes to define radiuses for creation !!!!!!!!!!!
+			Pair<Double, Double> radiuses = getAmas().getHeadAgent().getRadiusesForContextCreation(p);
 			
 
-			r = new Range(this, v.getValue() - radiuses.getA(), v.getValue() + radiuses.getB(), 0, true, true, v);
+			if(getAmas().data.meanNeighborhoodRaduises != null) {
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("Range creation by mean", this.getName(), p.getName(), getAmas().data.meanNeighborhoodRaduises.get(p).toString())));
+				r = new Range(this, p.getValue() - getAmas().data.meanNeighborhoodRaduises.get(p), p.getValue() + getAmas().data.meanNeighborhoodRaduises.get(p), 0, true, true, p, getAmas().data.meanNeighborhoodStartIncrements.get(p), getAmas().data.meanNeighborhoodEndIncrements.get(p));
+			}else {
+				r = new Range(this, p.getValue() - radiuses.getA(), p.getValue() + radiuses.getB(), 0, true, true, p);
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("Range creation by init", this.getName(), p.getName(), radiuses.getA().toString())));
+			}
 
-			ranges.put(v, r);
-			ranges.get(v).setValue(v.getValue());
+			ranges.put(p, r);
+			ranges.get(p).setValue(p.getValue());
 
-			firstPoint.addDimension(v, v.getValue());
+			firstPoint.addDimension(p, p.getValue());
 
-			v.addContextProjection(this);;
+			p.addContextProjection(this);;
 		}
 
 		//expand();
diff --git a/AMOEBAonAMAK/src/agents/context/Range.java b/AMOEBAonAMAK/src/agents/context/Range.java
index 5c50499b190b270bb394e0ec81e9e8935449329c..9a5b5d074c70c536628e211a473aa823c3c37173 100644
--- a/AMOEBAonAMAK/src/agents/context/Range.java
+++ b/AMOEBAonAMAK/src/agents/context/Range.java
@@ -129,6 +129,48 @@ public class Range implements Serializable, Comparable, Cloneable {
 		startIncrement = 0.25 * world.getMappingErrorAllowed() * percept.getMinMaxDistance();
 		endIncrement = startIncrement;
 	}
+	
+	public Range(Context context, double start, double end, double extendedrangeatcreation, boolean start_inclu,
+			boolean end_inclu, Percept p, double startIncr, double endIncr) {
+		super();
+
+		world = context.getAmas().getEnvironment();
+
+		AVT_deceleration = world.getAVT_deceleration();
+		AVT_acceleration = world.getAVT_acceleration();
+		AVT_minRatio = world.getAVT_percentAtStart();
+
+		this.percept = p;
+		if (isPerceptEnum()) {
+			this.setStart_inclu(start_inclu);
+			this.setEnd_inclu(end_inclu);
+			this.setStart(Math.round(start));
+			this.setEnd(Math.round(end));
+		} else {
+			this.setStart_inclu(start_inclu);
+			this.setEnd_inclu(end_inclu);
+			this.setStart(start - Math.abs(extendedrangeatcreation * start));
+			this.setEnd(end + Math.abs(extendedrangeatcreation * end));
+		}
+		this.context = context;
+		id = maxid;
+		maxid++;
+
+		/* Initialization of AVT : a better way to do that should be developped */
+//		this.AVT_deltaStart = (end - start) * AVT_minRatio + 0.0001;
+//		this.AVT_deltaEnd = (end - start) * AVT_minRatio + 0.0001;
+		this.AVT_deltaStart = getLenght() * 0.2 + 0.0001;
+		this.AVT_deltaEnd = getLenght() * 0.2 + 0.0001;
+		////// System.out.println(world.getScheduler().getTick() + "\t" +
+		////// context.getName() + "\t" + percept.getName()+ "\t" + "Creation" + "\t" +
+		////// "START" + "\t" + AVT_deltaStart);
+		////// System.out.println(world.getScheduler().getTick() + "\t" +
+		////// context.getName() + "\t" + percept.getName()+ "\t" + "Creation" + "\t" +
+		////// "END" + "\t" + AVT_deltaEnd);
+
+		startIncrement =startIncr;
+		endIncrement = endIncr;
+	}
 
 	/**
 	 * Extends the range to the specified target value.
@@ -389,7 +431,7 @@ public class Range implements Serializable, Comparable, Cloneable {
 			lastEndDirection = -1; // shrinking direction
 
 			if (endCriticality == 1) { // negative feedback -> increment decreases
-				endIncrement /= 2;
+				endIncrement /= 3;
 			} else if (endCriticality == 0) { // positive feedback -> increment increases
 				endIncrement = Math.min(percept.getRadiusContextForCreation(), endIncrement * 2);
 				// endIncrement *=2;
@@ -574,7 +616,7 @@ public class Range implements Serializable, Comparable, Cloneable {
 			lastStartDirection = -1;
 
 			if (startCriticality == 1) {
-				startIncrement /= 2;
+				startIncrement /= 3;
 			} else if (startCriticality == 0) {
 				startIncrement = Math.min(percept.getRadiusContextForCreation(), startIncrement * 2);
 				// startIncrement *=2;
@@ -1636,5 +1678,13 @@ public class Range implements Serializable, Comparable, Cloneable {
 		return this.contains(percept.getValue(), context.getEnvironment().getContextCreationNeighborhood(context, percept))
 				|| this.contains(percept.getValue(), context.getEnvironment().getContextCreationNeighborhood(context, percept));
 	}
+	
+	public double getStartIncrement() {
+		return startIncrement;
+	}
+	
+	public double getEndIncrement() {
+		return endIncrement;
+	}
 
 }
diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java
index 2202cdbdf03e3b618615e0a74da54c6d29290e83..d43646b7668fd0c6bd24a71f4a89eaa0a93567ba 100644
--- a/AMOEBAonAMAK/src/agents/head/Head.java
+++ b/AMOEBAonAMAK/src/agents/head/Head.java
@@ -16,6 +16,7 @@ import agents.context.CustomComparator;
 import agents.context.Experiment;
 import agents.percept.Percept;
 import kernel.AMOEBA;
+import kernel.AmoebaData;
 import ncs.NCS;
 import utils.Pair;
 import utils.PrintOnce;
@@ -77,6 +78,11 @@ public class Head extends AmoebaAgent {
 	@Override
 	public void onAct() {
 		
+		getAmas().data.meanNeighborhoodVolume = null;
+		getAmas().data.meanNeighborhoodRaduises = null; 
+		getAmas().data.meanNeighborhoodEndIncrements = null; 
+		getAmas().data.meanNeighborhoodStartIncrements = null; 
+		
 		getAmas().data.currentCriticalityPrediction = 0;
 		getAmas().data.currentCriticalityMapping = 0;
 		getAmas().data.currentCriticalityConfidence = 0;
@@ -115,6 +121,16 @@ public class Head extends AmoebaAgent {
 			
 			int nb=0;
 			Double meanNeighborsLastPredictions = null;
+			double neighborhoodVolumesSum = 0;
+			HashMap<Percept,Double> neighborhoodRangesSums = new HashMap<Percept,Double>();
+			HashMap<Percept,Double> neighborhoodStartIncrementSums = new HashMap<Percept,Double>();
+			HashMap<Percept,Double> neighborhoodEndIncrementSums = new HashMap<Percept,Double>();
+			for (Percept pct : getAmas().getPercepts()) {
+				neighborhoodRangesSums.put(pct, 0.0);
+				neighborhoodStartIncrementSums.put(pct, 0.0);
+				neighborhoodEndIncrementSums.put(pct, 0.0);
+			}
+			
 			
 			ArrayList<Context> usedNeighbors = new ArrayList<Context>();
 			
@@ -122,6 +138,13 @@ public class Head extends AmoebaAgent {
 				
 				meanNeighborsLastPredictions = 0.0;
 				for (Context ctxt : activatedNeighborsContexts) {
+					
+					neighborhoodVolumesSum += ctxt.getVolume();
+					for (Percept pct : ctxt.getRanges().keySet()) {
+						neighborhoodRangesSums.put(pct, neighborhoodRangesSums.get(pct) + ctxt.getRanges().get(pct).getRadius());
+						neighborhoodStartIncrementSums.put(pct, neighborhoodStartIncrementSums.get(pct) + ctxt.getRanges().get(pct).getStartIncrement());
+						neighborhoodEndIncrementSums.put(pct, neighborhoodEndIncrementSums.get(pct) + ctxt.getRanges().get(pct).getEndIncrement());
+					}
 
 					if(ctxt.lastPrediction != null) {
 						usedNeighbors.add(ctxt);
@@ -135,8 +158,28 @@ public class Head extends AmoebaAgent {
 				else {
 					meanNeighborsLastPredictions = null;
 				}
+				getAmas().data.meanNeighborhoodVolume = neighborhoodVolumesSum / activatedNeighborsContexts.size();
+				
+				getAmas().data.meanNeighborhoodRaduises = new HashMap<Percept, Double>();
+				for (Percept pct : getAmas().getPercepts()) {
+					getAmas().data.meanNeighborhoodRaduises.put(pct, neighborhoodRangesSums.get(pct)/activatedNeighborsContexts.size());
+					getAmas().data.meanNeighborhoodStartIncrements.put(pct, neighborhoodStartIncrementSums.get(pct)/activatedNeighborsContexts.size());
+					getAmas().data.meanNeighborhoodEndIncrements.put(pct, neighborhoodEndIncrementSums.get(pct)/activatedNeighborsContexts.size());
+				}
+				
 				
 			}
+			
+			
+			getAmas().getEnvironment()
+			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodVolume", getAmas().data.meanNeighborhoodVolume.toString())));
+			getAmas().getEnvironment()
+			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodRaduises", getAmas().data.meanNeighborhoodRaduises.toString())));
+			getAmas().getEnvironment()
+			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodStartIncrements", getAmas().data.meanNeighborhoodStartIncrements.toString())));
+			getAmas().getEnvironment()
+			.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", getAmas().data.meanNeighborhoodEndIncrements.toString())));
+			
 			if(meanNeighborsLastPredictions != null) {
 //				System.out.println("####################### NEIGHBORS #############################");
 //				System.out.println("ORACLE BEFORE" + getAmas().data.oracleValue);
@@ -159,6 +202,62 @@ public class Head extends AmoebaAgent {
 			
 			
 			
+		}else {
+			double neighborhoodVolumesSum = 0;
+			HashMap<Percept,Double> neighborhoodRangesSums = new HashMap<Percept,Double>();
+			HashMap<Percept,Double> neighborhoodStartIncrementSums = new HashMap<Percept,Double>();
+			HashMap<Percept,Double> neighborhoodEndIncrementSums = new HashMap<Percept,Double>();
+			for (Percept pct : getAmas().getPercepts()) {
+				neighborhoodRangesSums.put(pct, 0.0);
+				neighborhoodStartIncrementSums.put(pct, 0.0);
+				neighborhoodEndIncrementSums.put(pct, 0.0);
+			}
+			
+			
+			
+			if(activatedNeighborsContexts.size()>0) {
+				
+		
+				for (Context ctxt : activatedNeighborsContexts) {
+					
+					neighborhoodVolumesSum += ctxt.getVolume();
+					for (Percept pct : ctxt.getRanges().keySet()) {
+						neighborhoodRangesSums.put(pct, neighborhoodRangesSums.get(pct) + ctxt.getRanges().get(pct).getRadius());
+						neighborhoodStartIncrementSums.put(pct, neighborhoodStartIncrementSums.get(pct) + ctxt.getRanges().get(pct).getStartIncrement());
+						neighborhoodEndIncrementSums.put(pct, neighborhoodEndIncrementSums.get(pct) + ctxt.getRanges().get(pct).getEndIncrement());
+					}
+
+					
+				}
+				
+				getAmas().data.meanNeighborhoodVolume = neighborhoodVolumesSum / activatedNeighborsContexts.size();
+				
+				getAmas().data.meanNeighborhoodRaduises = new HashMap<Percept, Double>();
+				getAmas().data.meanNeighborhoodStartIncrements = new HashMap<Percept, Double>();
+				getAmas().data.meanNeighborhoodEndIncrements = new HashMap<Percept, Double>();
+				for (Percept pct : getAmas().getPercepts()) {
+					getAmas().data.meanNeighborhoodRaduises.put(pct, neighborhoodRangesSums.get(pct)/activatedNeighborsContexts.size());
+					getAmas().data.meanNeighborhoodStartIncrements.put(pct, neighborhoodStartIncrementSums.get(pct)/activatedNeighborsContexts.size());
+					getAmas().data.meanNeighborhoodEndIncrements.put(pct, neighborhoodEndIncrementSums.get(pct)/activatedNeighborsContexts.size());
+				}
+				
+				
+				
+				
+				
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodVolume", getAmas().data.meanNeighborhoodVolume.toString())));
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodRaduises", getAmas().data.meanNeighborhoodRaduises.toString())));
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodStartIncrements", getAmas().data.meanNeighborhoodStartIncrements.toString())));
+				getAmas().getEnvironment()
+				.trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEIGHBORDBOOD", "meanNeighborhoodEndIncrements", getAmas().data.meanNeighborhoodEndIncrements.toString())));
+			}
+			
+			
+			
+			
 		}
 		
 		
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
index f984ebe3760c85448c5f8e3cdfbd7817b1892753..e45a609046f00935391259c8c64c99004e27b526 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
@@ -82,6 +82,7 @@ public class F_N_Launcher  extends Application 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);
diff --git a/AMOEBAonAMAK/src/gui/ContextRendererFX.java b/AMOEBAonAMAK/src/gui/ContextRendererFX.java
index d2c6643fbe37de243ba5f9092f2d79fff705daf0..a57e7828e5c88c39c31a04aa007c8e9f93801f6e 100644
--- a/AMOEBAonAMAK/src/gui/ContextRendererFX.java
+++ b/AMOEBAonAMAK/src/gui/ContextRendererFX.java
@@ -41,7 +41,8 @@ public class ContextRendererFX extends RenderStrategy {
 	}
 
 	private void updateColor() {
-		setColorWithPrediction();
+		//setColorWithPrediction();
+		setColorWithCoefs();
 	}
 	
 	private void setColorWithCoefs() {
diff --git a/AMOEBAonAMAK/src/kernel/AmoebaData.java b/AMOEBAonAMAK/src/kernel/AmoebaData.java
index 35866c4d4f1b7b16c9e8e158dc82d13defa3609c..4f885da68e0a85759113b1c53b3423b760548982 100644
--- a/AMOEBAonAMAK/src/kernel/AmoebaData.java
+++ b/AMOEBAonAMAK/src/kernel/AmoebaData.java
@@ -4,6 +4,7 @@ import java.io.Serializable;
 import java.util.HashMap;
 
 import agents.head.DynamicPerformance;
+import agents.percept.Percept;
 /**
  * A Plain Old Java Object for storing parameters for the Head. Keep it as simple as possible for ease of serialization.<br/>
  * Make sure that all member are : public, serializable, and with a default constructor (taking no parameters).
@@ -81,4 +82,9 @@ public class AmoebaData implements Serializable {
 	public double initRegressionPerformance = 1.0;
 	
 	public double averageRegressionPerformanceIndicator;
+	
+	public Double meanNeighborhoodVolume;
+	public HashMap<Percept, Double> meanNeighborhoodRaduises;
+	public HashMap<Percept, Double> meanNeighborhoodStartIncrements;
+	public HashMap<Percept, Double> meanNeighborhoodEndIncrements;
 }
\ No newline at end of file
diff --git a/AMOEBAonAMAK/src/kernel/World.java b/AMOEBAonAMAK/src/kernel/World.java
index e248a189449055d43fff29bc5ac33ff3d1e90fdf..0f17d86b8de04ed9e14e5b89b0a437d91918a9a4 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.EVENT;
 	
 	private AMOEBA amoeba;