diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java
index 7dcef4ead3be7e9d26671174392e869eae04e123..41d7af9ecdc65f0d8a1386e2126fa79c9ad424c9 100644
--- a/AMOEBAonAMAK/src/agents/context/Context.java
+++ b/AMOEBAonAMAK/src/agents/context/Context.java
@@ -66,6 +66,7 @@ public class Context extends AmoebaAgent {
 	public static final int errorsBeforeAugmentation = 5;
 	
 	public boolean fusionned = false;
+	public boolean isInNeighborhood = false;
 	
 	public Context(AMOEBA amoeba) {
 		super(amoeba);
@@ -218,7 +219,7 @@ public class Context extends AmoebaAgent {
 
 		//expand();
 
-		this.confidence = bestNearestContext.confidence;
+		//this.confidence = bestNearestContext.confidence;
 		this.localModel = getAmas().buildLocalModel(this);
 		// this.formulaLocalModel = ((LocalModelMillerRegression)
 		// bestNearestContext.localModel).getFormula(bestNearestContext);
@@ -932,6 +933,34 @@ public class Context extends AmoebaAgent {
 			}
 		}
 	}
+	
+	
+	private Percept getPerceptWithLesserImpactOnContext(ArrayList<Percept> percepts) {
+		
+		Percept perceptForAdapation = null;
+		double minDistanceToFrontier = Double.MAX_VALUE;
+		double distanceToFrontier;
+		
+		for (Percept pct : percepts) {
+			if (!ranges.get(pct).isPerceptEnum()) {
+
+				distanceToFrontier = Math.min(ranges.get(pct).startDistance(pct.getValue()),
+						ranges.get(pct).endDistance(pct.getValue()));
+				
+				for(Percept otherPct : percepts) {
+					if(otherPct != pct) {
+						distanceToFrontier*= this.getRanges().get(otherPct).getLenght();
+					}
+				}
+
+				if (distanceToFrontier < minDistanceToFrontier) {
+					minDistanceToFrontier = distanceToFrontier;
+					perceptForAdapation = pct;
+				}
+			}
+		}
+		return perceptForAdapation;
+	}
 
 	private Percept getPerceptWithBiggerImpactOnOverlap(ArrayList<Percept> percepts, Context bestContext) {
 		Percept perceptWithBiggerImpact = null;
@@ -989,7 +1018,8 @@ public class Context extends AmoebaAgent {
 	}
 
 	private Pair<Percept, Context> getPerceptForAdaptationWithOverlapingContext(ArrayList<Percept> percepts) {
-		Percept perceptForAdapation = null;
+		Percept perceptForBigerImpactOnOverlap = null;
+		Percept perceptWithLesserImpactOnContext = null;
 		Context overlapingContext = null;
 		double minDistanceToFrontier = Double.MAX_VALUE;
 		double distanceToFrontier;
@@ -1005,29 +1035,34 @@ public class Context extends AmoebaAgent {
 					} else {
 						overlappingVolume = this.getOverlappingVolume(ctxt);
 						if (overlappingVolume > maxOverlappingVolume) {
-							perceptForAdapation = getPerceptWithBiggerImpactOnOverlap(percepts, ctxt);
+							
 							overlapingContext = ctxt;
 						}
 					}
 				}
 			}
+			
+			if(overlapingContext != null) {
+				perceptForBigerImpactOnOverlap = getPerceptWithBiggerImpactOnOverlap(percepts, overlapingContext);
+				
+			}
+			
 		}
-		if (perceptForAdapation == null) {
-			for (Percept pct : percepts) {
-				if (!ranges.get(pct).isPerceptEnum()) {
-
-					distanceToFrontier = Math.min(ranges.get(pct).startDistance(pct.getValue()),
-							ranges.get(pct).endDistance(pct.getValue()));
-
-					if (distanceToFrontier < minDistanceToFrontier) {
-						minDistanceToFrontier = distanceToFrontier;
-						perceptForAdapation = pct;
-					}
-				}
+		
+		perceptWithLesserImpactOnContext = getPerceptWithLesserImpactOnContext(percepts);
+		if(perceptForBigerImpactOnOverlap != null) {
+			
+			if(perceptForBigerImpactOnOverlap == perceptWithLesserImpactOnContext) {
+				return new Pair<Percept, Context>(perceptForBigerImpactOnOverlap, overlapingContext);
 			}
+			
 		}
+		
+		return new Pair<Percept, Context>(perceptWithLesserImpactOnContext, overlapingContext);
+		
+		
 
-		return new Pair<Percept, Context>(perceptForAdapation, overlapingContext);
+		
 	}
 
 	public boolean containedBy(Context ctxt) {
@@ -1238,14 +1273,21 @@ public class Context extends AmoebaAgent {
 	public void shrinkRangesToJoinBorders(Context bestContext) {
 		Percept perceptWithBiggerImpactOnOverlap = getPerceptWithBiggerImpactOnOverlap(getAmas().getPercepts(),
 				bestContext);
+		
+		Percept perceptWithLesserImpactOnContext = getPerceptWithLesserImpactOnContext(getAmas().getPercepts());
 
 
 		if (perceptWithBiggerImpactOnOverlap == null) {
 			this.destroy();
 		} else {
 
+				if(perceptWithBiggerImpactOnOverlap == perceptWithLesserImpactOnContext) {
+					ranges.get(perceptWithBiggerImpactOnOverlap).adapt(perceptWithBiggerImpactOnOverlap.getValue(), true, bestContext);
+				}else {
+					ranges.get(perceptWithLesserImpactOnContext).adapt(perceptWithLesserImpactOnContext.getValue(), true, bestContext);
+				}
 
-			ranges.get(perceptWithBiggerImpactOnOverlap).adapt(perceptWithBiggerImpactOnOverlap.getValue(), true, bestContext);
+			
 
 		}
 	}
diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java
index 2a82381fd87df5290162571370e3a7f12f51f3e5..625e54154606cc659fe13c5b5be460b9c237c084 100644
--- a/AMOEBAonAMAK/src/agents/head/Head.java
+++ b/AMOEBAonAMAK/src/agents/head/Head.java
@@ -138,6 +138,7 @@ public class Head extends AmoebaAgent {
 			
 			for (Context ctxt : activatedNeighborsContexts) {
 				
+				ctxt.isInNeighborhood = true;
 				neighborhoodVolumesSum += ctxt.getVolume();
 				
 				for (Percept pct : ctxt.getRanges().keySet()) {
@@ -1575,6 +1576,7 @@ public class Head extends AmoebaAgent {
 		for (Context context : activatedContexts) {
 
 			currentDistanceToModelWithVolume = context.getLocalModel().distance(context.getCurrentExperiment())/context.getVolume();
+			getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("DISTANCE / VOLUME ", context.getName(), ""+currentDistanceToModelWithVolume)));
 			if (currentDistanceToModelWithVolume < distanceToModel) {
 				bc = context;
 				distanceToModel = currentDistanceToModelWithVolume;
@@ -2013,6 +2015,9 @@ public class Head extends AmoebaAgent {
 
 	public void clearAllUseableContextLists() {
 		activatedContexts.clear();
+		for (Context ctxt : activatedNeighborsContexts) {
+			ctxt.isInNeighborhood = false;
+		}
 		activatedNeighborsContexts.clear();
 	}
 
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
index e45a609046f00935391259c8c64c99004e27b526..3c0ec95825723b5a2eb231d653e20edd38585f97 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
@@ -75,7 +75,8 @@ public class F_N_Launcher  extends Application implements Serializable {
 		File file = new File("resources/twoDimensionsLauncher.xml");
 		backupSystem.load(file);
 		
-		amoeba.saver = new SaveHelperImpl(amoeba);
+		amoeba.saver = new SaveHelperImpl(amoeba, amoebaUI);
+		
 		amoeba.allowGraphicalScheduler(true);
 		amoeba.setRenderUpdate(true);		
 		amoeba.data.learningSpeed = learningSpeed;
diff --git a/AMOEBAonAMAK/src/gui/ContextRendererFX.java b/AMOEBAonAMAK/src/gui/ContextRendererFX.java
index a57e7828e5c88c39c31a04aa007c8e9f93801f6e..f43ea2895ae147bbeeaa4c4affdb49cace739491 100644
--- a/AMOEBAonAMAK/src/gui/ContextRendererFX.java
+++ b/AMOEBAonAMAK/src/gui/ContextRendererFX.java
@@ -47,7 +47,12 @@ public class ContextRendererFX extends RenderStrategy {
 	
 	private void setColorWithCoefs() {
 		Double[] c = ContextColor.colorFromCoefs(context.getFunction().getCoef());
-		drawable.setColor(new Color(c[0], c[1], c[2], 90d / 255d));
+		if(context.isInNeighborhood) {
+			drawable.setColor(new Color(c[0], c[1], c[2], 255d / 255d));
+		}else {
+			drawable.setColor(new Color(c[0], c[1], c[2], 90d / 255d));
+		}
+		
 	}
 	
 	private void setColorWithPrediction() {
diff --git a/AMOEBAonAMAK/src/kernel/World.java b/AMOEBAonAMAK/src/kernel/World.java
index 5fe709fea42dfd30530f773a93033cd64684e139..c065a4d45e09c4096d630031b43138dc24c51056 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.DEBUG;
+	public static TRACE_LEVEL minLevel = TRACE_LEVEL.INFORM;
 	
 	private AMOEBA amoeba;