diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java
index ec4984207c658bc87acb97f65c1a91481707abf6..4c88fd824ea6b782740b376fad9ee557d297fb56 100644
--- a/AMOEBAonAMAK/src/agents/head/Head.java
+++ b/AMOEBAonAMAK/src/agents/head/Head.java
@@ -243,6 +243,15 @@ public class Head extends AmoebaAgent {
 			playWithoutOracle();
 		}
 
+		
+		if(isSelfRequest()) {
+			if(getAmas().data.isSelfLearning) {
+				getAmas().data.selfLearning = true;
+			}else if(getAmas().data.isActiveLearning) {
+				getAmas().data.selfLearning = true;
+			}
+		}
+		
 		updateStatisticalInformations(); /// regarder dans le détail, possible que ce pas trop utile
 
 		newContext = null;
@@ -326,7 +335,7 @@ public class Head extends AmoebaAgent {
 		
 		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("------------------------------------------------------------------------------------"
+		getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------"
 				+ "---------------------------------------- PLAY WITH ORACLE")));
 		
 		if (activatedContexts.size() > 0) {
@@ -407,9 +416,7 @@ public class Head extends AmoebaAgent {
 		getAmas().data.executionTimes[7]=System.currentTimeMillis();
 		
 		
-		if(isSelfRequest()) {
-			getAmas().data.activeLearning = true;
-		}
+		
 		
 		criticalities.addCriticality("spatialCriticality",
 				(getMinMaxVolume() - getVolumeOfAllContexts()) / getMinMaxVolume());
@@ -531,6 +538,9 @@ public class Head extends AmoebaAgent {
 	 * Play without oracle.
 	 */
 	private void playWithoutOracle() {
+		
+		getEnvironment().trace(TRACE_LEVEL.INFORM, new ArrayList<String>(Arrays.asList("------------------------------------------------------------------------------------"
+				+ "---------------------------------------- PLAY WITHOUT ORACLE")));
 
 		logger().debug("HEAD without oracle", "Nombre de contextes activés: " + activatedContexts.size());
 
@@ -572,7 +582,7 @@ public class Head extends AmoebaAgent {
 			logger().debug("HEAD without oracle", "no Best context selected ");
 		}
 		
-		getAmas().data.criticity = Math.abs(getAmas().data.oracleValue - getAmas().data.prediction);
+		//getAmas().data.criticity = Math.abs(getAmas().data.oracleValue - getAmas().data.prediction);
 
 		if(getAmas().isReinforcement()) {
 			if (activatedNeighborsContexts.size() > 1) {
@@ -1205,7 +1215,8 @@ public class Head extends AmoebaAgent {
 						if(!this.isDying() && !ctxt.isDying()) {
 							EndogenousRequest potentialRequest = ctxt.endogenousRequest(otherCtxt);
 							if(potentialRequest != null) {
-								getAmas().data.activeLearning = true;
+								
+								
 								addEndogenousRequest(potentialRequest);
 							}
 						}
@@ -1214,10 +1225,7 @@ public class Head extends AmoebaAgent {
 				}
 			}
 			
-			getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("ENDO REQUESTS", ""+endogenousRequests.size())));
-			for(EndogenousRequest endoRequest : endogenousRequests) {
-				getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("" + endoRequest)));
-			}
+			
 		}
 		
 		
@@ -1520,47 +1528,49 @@ public class Head extends AmoebaAgent {
 	 */
 	private void updateStatisticalInformations() {
 
-		
-		if(Math.abs(getAmas().data.oracleValue)>getAmas().data.maxPrediction) {
-			getAmas().data.maxPrediction = Math.abs(getAmas().data.oracleValue);
-		}
-		
+		if(getAmas().data.oracleValue != null) {
+			if(Math.abs(getAmas().data.oracleValue)>getAmas().data.maxPrediction) {
+				getAmas().data.maxPrediction = Math.abs(getAmas().data.oracleValue);
+			}
+			
 
-		getAmas().data.normalizedCriticality = getAmas().data.criticity/getAmas().data.maxPrediction;
-		criticalities.addCriticality("predictionCriticality", getAmas().data.normalizedCriticality);
-		
-		criticalities.updateMeans();
+			getAmas().data.normalizedCriticality = getAmas().data.criticity/getAmas().data.maxPrediction;
+			criticalities.addCriticality("predictionCriticality", getAmas().data.normalizedCriticality);
+			
+			criticalities.updateMeans();
 
-		if (severalActivatedContexts()) {
+			if (severalActivatedContexts()) {
 
-			endogenousCriticalities.addCriticality("predictionCriticality", getAmas().data.criticity);
-			endogenousCriticalities.addCriticality("endogenousPredictionActivatedContextsOverlapspredictionCriticality",
-					Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlaps));
-			endogenousCriticalities.addCriticality(
-					"endogenousPredictionActivatedContextsOverlapsWorstDimInfluencepredictionCriticality",
-					Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluence));
-			endogenousCriticalities.addCriticality(
-					"endogenousPredictionActivatedContextsOverlapsInfluenceWithoutConfidencepredictionCriticality",
-					Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsInfluenceWithoutConfidence));
-			endogenousCriticalities.addCriticality(
-					"endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithoutConfidencepredictionCriticality",
-					Math.abs(getAmas().data.oracleValue
-							- getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithoutConfidence));
-			endogenousCriticalities.addCriticality(
-					"endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithVolumepredictionCriticality",
-					Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithVolume));
-			endogenousCriticalities.addCriticality(
-					"endogenousPredictionActivatedContextsSharedIncompetencepredictionCriticality",
-					Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsSharedIncompetence));
+				endogenousCriticalities.addCriticality("predictionCriticality", getAmas().data.criticity);
+				endogenousCriticalities.addCriticality("endogenousPredictionActivatedContextsOverlapspredictionCriticality",
+						Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlaps));
+				endogenousCriticalities.addCriticality(
+						"endogenousPredictionActivatedContextsOverlapsWorstDimInfluencepredictionCriticality",
+						Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluence));
+				endogenousCriticalities.addCriticality(
+						"endogenousPredictionActivatedContextsOverlapsInfluenceWithoutConfidencepredictionCriticality",
+						Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsInfluenceWithoutConfidence));
+				endogenousCriticalities.addCriticality(
+						"endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithoutConfidencepredictionCriticality",
+						Math.abs(getAmas().data.oracleValue
+								- getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithoutConfidence));
+				endogenousCriticalities.addCriticality(
+						"endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithVolumepredictionCriticality",
+						Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsOverlapsWorstDimInfluenceWithVolume));
+				endogenousCriticalities.addCriticality(
+						"endogenousPredictionActivatedContextsSharedIncompetencepredictionCriticality",
+						Math.abs(getAmas().data.oracleValue - getAmas().data.endogenousPredictionActivatedContextsSharedIncompetence));
 
-			endogenousCriticalities.updateMeans();
+				endogenousCriticalities.updateMeans();
 
-		}
+			}
 
-		getAmas().data.predictionPerformance.update(criticalities.getCriticalityMean("predictionCriticality"));
-		if (criticalities.getCriticalityMean("distanceToRegression") != null) {
-			getAmas().data.regressionPerformance.update(criticalities.getCriticalityMean("distanceToRegression"));
+			getAmas().data.predictionPerformance.update(criticalities.getCriticalityMean("predictionCriticality"));
+			if (criticalities.getCriticalityMean("distanceToRegression") != null) {
+				getAmas().data.regressionPerformance.update(criticalities.getCriticalityMean("distanceToRegression"));
+			}
 		}
+		
 
 		// getAmas().data.mappingPerformance.update(?);
 	}
@@ -2219,6 +2229,10 @@ public class Head extends AmoebaAgent {
 	}
 	
 	public boolean isSelfRequest(){
+		getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("ENDO REQUESTS", ""+endogenousRequests.size())));
+		for(EndogenousRequest endoRequest : endogenousRequests) {
+			getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("" + endoRequest)));
+		}
 		return endogenousRequests.size()>0;
 	}
 	
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
index 427434b0d473503205fd6dbf2d7bb42f8e14b0af..74ec2e4074aa7c06fae97522013879c4a6ca7393 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
@@ -42,6 +42,7 @@ public class F_N_Launcher  extends Application implements Serializable {
 	public static final double explorationIncrement = 1.0	;
 	public static final double explorationWidht = 0.5	;
 	public static final boolean setActiveLearning = true	;
+	public static final boolean setSelfLearning = true	;
 	public static final int nbCycle = 1000;
 	
 
@@ -82,6 +83,7 @@ public class F_N_Launcher  extends Application implements Serializable {
 		amoeba.data.learningSpeed = learningSpeed;
 		amoeba.data.numberOfPointsForRegression = regressionPoints;
 		amoeba.data.isActiveLearning = setActiveLearning;
+		amoeba.data.isSelfLearning = setSelfLearning;
 		amoeba.getEnvironment().setMappingErrorAllowed(mappingErrorAllowed);
 		
 		
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
index acfcc27f01967090b26d12b9092fea0115b662eb..dd70ab146915ef3a97ce87ac7ac5a178dbe4f95e 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
@@ -154,11 +154,6 @@ public class F_N_Manager implements StudiedSystem{
 			
 			nonRandomExplorationStep();
 			
-		}
-		else if(selfLearning) {
-			
-			selfLearning = false;
-			
 		}
 		else if(activeLearning) {
 			
@@ -573,7 +568,15 @@ private double[] subZoneCenter3D(int nb) {
 			out.put("px" + i,x[i]);
 			
 		}
-		out.put("oracle",result);
+		if(selfLearning) {
+			selfLearning = false;
+			out.put("oracle",null);
+		}else {
+			out.put("oracle",result);
+		}
+		//out.put("oracle",result);
+		System.out.println(out);
+		
 		return out;
 	}
 	
diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java
index d246a9e00f672798511c0ab6b19ca606617c451f..76f1154d33df6e3809e96e7bcc10bd6517f7f3b9 100644
--- a/AMOEBAonAMAK/src/kernel/AMOEBA.java
+++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java
@@ -217,6 +217,12 @@ public class AMOEBA extends Amas<World> implements IAMOEBA {
 			perceptions = studiedSystem.getOutput();
 			
 			
+			if(perceptions.get("oracle")==null) {
+				data.useOracle = false;
+			}else {
+				data.useOracle = true;
+			}
+			
 		}
 		
 		environment.preCycleActions();
@@ -247,15 +253,15 @@ public class AMOEBA extends Amas<World> implements IAMOEBA {
 	protected void onSystemCycleEnd() {
 		
 		if(studiedSystem != null) {
-			if(head.isActiveLearning()) {
-				data.activeLearning = false;
-				studiedSystem.setActiveLearning(true);
+			if(data.selfLearning) {
+				data.selfLearning = false;
+				studiedSystem.setSelfLearning(true);
 				studiedSystem.setSelfRequest(head.getSelfRequest());
 				 
 			}
-			else if(head.isSelfLearning()) {
-				data.selfLearning = false;
-				studiedSystem.setSelfLearning(true);
+			else if(data.activeLearning) {
+				data.activeLearning = false;
+				studiedSystem.setActiveLearning(true);
 				studiedSystem.setSelfRequest(head.getSelfRequest());
 			}
 		}
diff --git a/AMOEBAonAMAK/src/kernel/AmoebaData.java b/AMOEBAonAMAK/src/kernel/AmoebaData.java
index 6e32b074e225279bc62f5394dca51a0487470a37..a413c55a28cc554b120c0f9b02363f8a1ce2c6b6 100644
--- a/AMOEBAonAMAK/src/kernel/AmoebaData.java
+++ b/AMOEBAonAMAK/src/kernel/AmoebaData.java
@@ -32,8 +32,8 @@ public class AmoebaData implements Serializable {
 	public Double endogenousPredictionNContexts = 0.0;
 	public Double endogenousPredictionNContextsByInfluence = 0.0;
 
-	public double oracleValue;
-	public double oldOracleValue;
+	public Double oracleValue;
+	public Double oldOracleValue;
 	public double criticity = 0.0;
 	public double distanceToRegression;
 	public double oldCriticity;
@@ -47,6 +47,7 @@ public class AmoebaData implements Serializable {
 	public boolean contextFromPropositionWasSelected = false;
 	
 	public boolean isActiveLearning;
+	public boolean isSelfLearning;
 	
 	public boolean activeLearning = false;
 	public boolean selfLearning = false;