diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java
index a6cd34fb731bfcbf90e4ceb0f04a928f31d56d1d..9cf57cf509fc3d7f4aad60f2750594701635e15f 100644
--- a/AMOEBAonAMAK/src/agents/context/Context.java
+++ b/AMOEBAonAMAK/src/agents/context/Context.java
@@ -593,7 +593,24 @@ public class Context extends AmoebaAgent {
 			
 			HashMap<Percept, Double> request = boundsToRequest(bounds);
 			if(request != null) {
-				return new EndogenousRequest(request, bounds, 7, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.OVERLAP);
+				
+				double currentDistanceToOraclePrediction = this.getLocalModel().distance(this.getCurrentExperiment());
+				double otherContextDistanceToOraclePrediction = ctxt.getLocalModel().distance(ctxt.getCurrentExperiment());
+				
+				Double averageDistanceToOraclePrediction = getAmas().getHeadAgent().getAverageRegressionPerformanceIndicator();
+				Double distanceDifference = Math.abs(currentDistanceToOraclePrediction-otherContextDistanceToOraclePrediction);
+					
+				getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>( Arrays.asList(this.getName(),"currentDistanceToOraclePrediction",""+ currentDistanceToOraclePrediction,"otherContextDistanceToOraclePrediction",""+ otherContextDistanceToOraclePrediction, "distanceDifference", ""+distanceDifference)));
+				
+				if(distanceDifference<averageDistanceToOraclePrediction) {
+					return new EndogenousRequest(request, bounds, 6, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.CONCURRENCE);
+				}
+				else {
+					return new EndogenousRequest(request, bounds, 7, new ArrayList<Context>(Arrays.asList(this,ctxt)), REQUEST.CONFLICT);
+				}
+				
+				
+				
 			}		
 		}
 		else if(overlapCounts == getAmas().getPercepts().size()-1 && voidDistances.size() == 1 && getAmas().getCycle() > 750) {
@@ -700,10 +717,13 @@ public class Context extends AmoebaAgent {
 				
 				//double minDistanceToOraclePrediction = Math.min(getAmas().getHeadAgent().getDistanceToRegressionAllowed(), getAmas().getHeadAgent().getDistanceToRegressionAllowed());
 				Double averageDistanceToOraclePrediction = getAmas().getHeadAgent().getAverageRegressionPerformanceIndicator();
-						
-				if((currentDistanceToOraclePrediction<averageDistanceToOraclePrediction) && (otherContextDistanceToOraclePrediction<averageDistanceToOraclePrediction)) {
+				Double distanceDifference = Math.abs(currentDistanceToOraclePrediction-otherContextDistanceToOraclePrediction);
+					
+				getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>( Arrays.asList(this.getName(),"currentDistanceToOraclePrediction",""+ currentDistanceToOraclePrediction,"otherContextDistanceToOraclePrediction",""+ otherContextDistanceToOraclePrediction, "distanceDifference", ""+distanceDifference)));
+				
+				if(distanceDifference<averageDistanceToOraclePrediction) {
 					
-					getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>( Arrays.asList(this.getName(),"currentDistanceToOraclePrediction",""+ currentDistanceToOraclePrediction,"otherContextDistanceToOraclePrediction",""+ otherContextDistanceToOraclePrediction))); 
+					 
 					
 					
 					for(Percept pct : ranges.keySet()) {
diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java
index f754ed46322ad1fa2392af7602a0accde78e8304..261df1a11146fb554e063c0d72abb80bddd11757 100644
--- a/AMOEBAonAMAK/src/agents/head/Head.java
+++ b/AMOEBAonAMAK/src/agents/head/Head.java
@@ -89,6 +89,7 @@ public class Head extends AmoebaAgent {
 		setContextFromPropositionWasSelected(false);
 		getAmas().data.oldOracleValue = getAmas().data.oracleValue;
 		getAmas().data.oracleValue = getAmas().getPerceptions("oracle");
+		setAverageRegressionPerformanceIndicator();
 
 		/* The head memorize last used context agent */
 		lastUsedContext = bestContext;
@@ -174,11 +175,18 @@ public class Head extends AmoebaAgent {
 		getAmas().data.executionTimes[6]=System.currentTimeMillis()- getAmas().data.executionTimes[6];
 
 
-		getAmas().data.executionTimes[7]=System.currentTimeMillis();
 		
+		getAmas().data.executionTimes[11]=System.currentTimeMillis();
 		NCSDetection_ChildContext();
+		getAmas().data.executionTimes[11]=System.currentTimeMillis()- getAmas().data.executionTimes[11];
 		
+		getAmas().data.executionTimes[12]=System.currentTimeMillis();
 		NCSDetection_PotentialRequest();
+		getAmas().data.executionTimes[12]=System.currentTimeMillis()- getAmas().data.executionTimes[12];
+		
+		
+		
+		getAmas().data.executionTimes[7]=System.currentTimeMillis();
 		
 		criticalities.addCriticality("spatialCriticality",
 				(getMinMaxVolume() - getVolumeOfAllContexts()) / getMinMaxVolume());
@@ -235,12 +243,13 @@ public class Head extends AmoebaAgent {
 
 		
 		getAmas().data.executionTimes[7]=System.currentTimeMillis()- getAmas().data.executionTimes[7];
-
 		
 		for(int i = 0 ; i<20;i++) {
 			getAmas().data.executionTimesSums[i] += getAmas().data.executionTimes[i];
 		}			
 
+		
+		
 	}
 
 	public double getMinMaxVolume() {
@@ -893,26 +902,28 @@ public class Head extends AmoebaAgent {
 		double minDistanceToOraclePrediction = Double.POSITIVE_INFINITY;
 
 		for (Context activatedContext : activatedContexts) {
-			currentDistanceToOraclePrediction = activatedContext.getLocalModel()
-					.distance(activatedContext.getCurrentExperiment());
-			getAmas().data.distanceToRegression = currentDistanceToOraclePrediction;
+			currentDistanceToOraclePrediction = activatedContext.getLocalModel().distance(activatedContext.getCurrentExperiment());
+			
 
 			getAmas().data.contextNotFinished = false;
 			getEnvironment().trace(TRACE_LEVEL.DEBUG, new ArrayList<String>(Arrays.asList("MODEL DISTANCE", activatedContext.getName(),
 					"" + activatedContext.getLocalModel().distance(activatedContext.getCurrentExperiment()))));
 			if (!activatedContext.getLocalModel().finishedFirstExperiments()) {
+				
 				activatedContext.getLocalModel().updateModel(activatedContext.getCurrentExperiment(), getAmas().data.learningSpeed);
 				getAmas().data.contextNotFinished = true;
+				
 			}
-
 			else if (currentDistanceToOraclePrediction < getAverageRegressionPerformanceIndicator()) {
 			//else if (currentDistanceToOraclePrediction < regressionPerformance.getPerformanceIndicator()) {
+				
 				activatedContext.getLocalModel().updateModel(activatedContext.getCurrentExperiment(), getAmas().data.learningSpeed);
 
 			}
 
 			if (currentDistanceToOraclePrediction < minDistanceToOraclePrediction) {
 				minDistanceToOraclePrediction = currentDistanceToOraclePrediction;
+				getAmas().data.distanceToRegression = minDistanceToOraclePrediction;
 			}
 
 			if (!getAmas().data.contextNotFinished) {
@@ -932,6 +943,7 @@ public class Head extends AmoebaAgent {
 			activatedContexts.get(i).criticalities.updateMeans();
 			
 			if (activatedContexts.get(i).criticalities.getCriticalityMean("distanceToRegression") != null) {
+				
 				activatedContexts.get(i).regressionPerformance.update(activatedContexts.get(i).criticalities.getCriticalityMean("distanceToRegression"));
 				getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("UPDATE REGRESSION PERFORMANCE", activatedContexts.get(i).getName(), ""+activatedContexts.get(i).regressionPerformance.getPerformanceIndicator())));
 			}
@@ -1835,7 +1847,7 @@ public class Head extends AmoebaAgent {
 				
 				EndogenousRequest currentRequest = itr.next();
 				
-				if(currentRequest.getType() == REQUEST.OVERLAP) {
+				if(currentRequest.getType() == REQUEST.CONFLICT || currentRequest.getType() == REQUEST.CONCURRENCE) {
 						
 					existingRequestTest = existingRequestTest || currentRequest.testIfContextsAlreadyAsked(request.getAskingContexts()); 
 				}
@@ -1887,6 +1899,12 @@ public class Head extends AmoebaAgent {
 	
 	public Double getAverageRegressionPerformanceIndicator() {
 		
+		return getAmas().data.averageRegressionPerformanceIndicator;
+		
+	}
+	
+	public void setAverageRegressionPerformanceIndicator() {
+		
 		int numberOfRegressions = 0;
 		if(activatedNeighborsContexts.size()>0) {
 			double meanRegressionPerformanceIndicator = 0.0;
@@ -1895,13 +1913,14 @@ public class Head extends AmoebaAgent {
 					numberOfRegressions+=1;
 			}
 			assert numberOfRegressions != 0;
-			return meanRegressionPerformanceIndicator/numberOfRegressions;
+			getAmas().data.averageRegressionPerformanceIndicator =  (meanRegressionPerformanceIndicator/numberOfRegressions > getAmas().data.initRegressionPerformance) ? meanRegressionPerformanceIndicator/numberOfRegressions :  getAmas().data.initRegressionPerformance;
 		}
 		else{
-			return getAmas().data.initRegressionPerformance;
+			getAmas().data.averageRegressionPerformanceIndicator = getAmas().data.initRegressionPerformance;
 		}
 		
 	}
+	
 
 	public void proposition(Context c) {
 		activatedContexts.add(c);
diff --git a/AMOEBAonAMAK/src/agents/head/REQUEST.java b/AMOEBAonAMAK/src/agents/head/REQUEST.java
index 2cb7d78652523f7ce9f3d3fe3b9ed10f03cf4efe..64ec5f2d25528b862f3fb52151d431d68066335c 100644
--- a/AMOEBAonAMAK/src/agents/head/REQUEST.java
+++ b/AMOEBAonAMAK/src/agents/head/REQUEST.java
@@ -5,6 +5,8 @@ import java.io.Serializable;
 public enum REQUEST implements Serializable {
 	
 	OVERLAP,
+	CONFLICT,
+	CONCURRENCE,
 	VOID,
 	SELF
 	
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
index 300f91f974a5129d9488e6b97388d84df20173ea..ffd17fe59ad4e7b8d2bcd7b5023e7057099d6127 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
@@ -31,7 +31,7 @@ public class F_N_Launcher implements Serializable {
 	public static final double spaceSize = 50.0	;
 	public static final int nbOfModels = 3	;
 	public static final int normType = 2	;
-	public static final boolean randomExploration = false;
+	public static final boolean randomExploration = true;
 	public static final boolean limitedToSpaceZone = true;
 	//public static final double mappingErrorAllowed = 0.07; // BIG SQUARE
 	public static double mappingErrorAllowed = 0.03; // MULTI
diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java
index 2ad515d0aaeea48a41fd1ccc4c222f8d6bff8145..dd2b1e7a6e324d66aac411429f0a847ac00ce42b 100644
--- a/AMOEBAonAMAK/src/kernel/AMOEBA.java
+++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java
@@ -165,6 +165,8 @@ public class AMOEBA extends Amas<World> implements IAMOEBA {
 			timeExecution.addData("BestContextInNeighbors", cycle, data.executionTimesSums[8], notify);
 			timeExecution.addData("CreateContext", cycle, data.executionTimesSums[9], notify);
 			timeExecution.addData("UpdateStatitics", cycle, data.executionTimesSums[10], notify);
+			timeExecution.addData("ChildContext", cycle, data.executionTimesSums[11], notify);
+			timeExecution.addData("PotentialRequest", cycle, data.executionTimesSums[12], notify);
 			
 			criticalities.addData("Prediction", cycle, data.evolutionCriticalityPrediction, notify);
 			criticalities.addData("Mapping", cycle, data.evolutionCriticalityMapping, notify);
diff --git a/AMOEBAonAMAK/src/kernel/AmoebaData.java b/AMOEBAonAMAK/src/kernel/AmoebaData.java
index d843af0d4cec13c5e5f121d0c9e9de0570364df9..5f2e57a82c17eef5f047bdf4a699585dd9f6b8a0 100644
--- a/AMOEBAonAMAK/src/kernel/AmoebaData.java
+++ b/AMOEBAonAMAK/src/kernel/AmoebaData.java
@@ -78,4 +78,6 @@ public class AmoebaData implements Serializable {
 	public double[] executionTimesSums = new double[20];
 	
 	public double initRegressionPerformance = 1.0;
+	
+	public double averageRegressionPerformanceIndicator;
 }
\ No newline at end of file
diff --git a/AMOEBAonAMAK/src/kernel/World.java b/AMOEBAonAMAK/src/kernel/World.java
index 5fe709fea42dfd30530f773a93033cd64684e139..e248a189449055d43fff29bc5ac33ff3d1e90fdf 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.ERROR;
 	
 	private AMOEBA amoeba;