diff --git a/AMOEBAonAMAK/src/agents/context/Context.java b/AMOEBAonAMAK/src/agents/context/Context.java
index e5fcadd1ae8eaa49e2c38e2b185624f2014fff57..9504f902830cfb5cc18e78c8e439661a4ec06816 100644
--- a/AMOEBAonAMAK/src/agents/context/Context.java
+++ b/AMOEBAonAMAK/src/agents/context/Context.java
@@ -876,7 +876,7 @@ public class Context extends AmoebaAgent {
 			request.put(pct, getRandomValueInRange(pct));
 		}
 		getEnvironment().trace(TRACE_LEVEL.EVENT,new ArrayList<String>(Arrays.asList("NEW ENDO REQUEST","10", ""+request, ""+this.getName())));
-		getAmas().getHeadAgent().addSelfRequest(request, 10,this);
+		getAmas().getHeadAgent().addChildRequest(request, 10,this);
 		
 	}
 	
diff --git a/AMOEBAonAMAK/src/agents/head/Head.java b/AMOEBAonAMAK/src/agents/head/Head.java
index e0b425f0ceb8fb36563dc2c439a875e8e73e243c..a80074d1b6098690289e812ba3f48efa27bc7ac8 100644
--- a/AMOEBAonAMAK/src/agents/head/Head.java
+++ b/AMOEBAonAMAK/src/agents/head/Head.java
@@ -63,6 +63,12 @@ public class Head extends AmoebaAgent {
 			   }
 			});
 	
+	Queue<EndogenousRequest> endogenousChildRequests = new PriorityQueue<EndogenousRequest>(new Comparator<EndogenousRequest>(){
+		   public int compare(EndogenousRequest r1, EndogenousRequest r2) {
+			      return r2.getPriority().compareTo(r1.getPriority());
+			   }
+			});
+	
 	static double lembda = 0.99;
 	// -----------------------------
 	
@@ -244,12 +250,16 @@ public class Head extends AmoebaAgent {
 		}
 
 		
-		if(isSelfRequest()) {
-			if(getAmas().data.isSelfLearning && endogenousRequests.element().getType() !=  REQUEST.SELF) {
+		if(isSelfRequest() ) {
+			if(getAmas().data.isSelfLearning) {
 				getAmas().data.selfLearning = true;
 			}else if(getAmas().data.isActiveLearning) {
 				getAmas().data.activeLearning = true;
 			}
+		}else if(isSelfChildRequest()) {
+			if(getAmas().data.isActiveLearning) {
+				getAmas().data.activeLearning = true;
+			}
 		}
 		
 		updateStatisticalInformations(); /// regarder dans le détail, possible que ce pas trop utile
@@ -1217,7 +1227,7 @@ public class Head extends AmoebaAgent {
 							if(potentialRequest != null) {
 								
 								
-								addEndogenousRequest(potentialRequest);
+								addEndogenousRequest(potentialRequest, endogenousRequests);
 							}
 						}
 					}
@@ -2206,7 +2216,7 @@ public class Head extends AmoebaAgent {
 	
 	
 	public HashMap<Percept, Double> getSelfRequest(){
-		getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("FUTURE ACTIVE LEARNING", ""+endogenousRequests.element())));
+		getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("FUTURE SELF LEARNING", ""+endogenousRequests.element())));
 		EndogenousRequest futureRequest = endogenousRequests.poll();
 		lastEndogenousRequest = futureRequest;
 		for(Context ctxt : futureRequest.getAskingContexts()) {
@@ -2216,6 +2226,23 @@ public class Head extends AmoebaAgent {
 		return futureRequest.getRequest();
 	}
 	
+	public HashMap<Percept, Double> getActiveRequest(){
+		EndogenousRequest futureRequest = null;
+		if(endogenousChildRequests.size()>0) {
+			futureRequest = endogenousChildRequests.poll();
+		}else if(endogenousRequests.size()>0) {
+			futureRequest = endogenousRequests.poll();
+		}
+		getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("FUTURE ACTIVE LEARNING", ""+futureRequest)));
+		
+		lastEndogenousRequest = futureRequest;
+		for(Context ctxt : futureRequest.getAskingContexts()) {
+			ctxt.deleteWaitingRequest(futureRequest);
+		}
+		
+		return futureRequest.getRequest();
+	}
+	
 	public EndogenousRequest getLastEndogenousRequest() {
 		return lastEndogenousRequest;
 	}
@@ -2228,6 +2255,14 @@ public class Head extends AmoebaAgent {
 		
 	}
 	
+	public boolean isSelfChildRequest(){
+		getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("ENDO CHILD REQUESTS", ""+endogenousChildRequests.size())));
+		for(EndogenousRequest endoRequest : endogenousChildRequests) {
+			getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("" + endoRequest)));
+		}
+		return endogenousChildRequests.size()>0;
+	}
+	
 	public boolean isSelfRequest(){
 		getEnvironment().trace(TRACE_LEVEL.STATE, new ArrayList<String>(Arrays.asList("ENDO REQUESTS", ""+endogenousRequests.size())));
 		for(EndogenousRequest endoRequest : endogenousRequests) {
@@ -2236,19 +2271,19 @@ public class Head extends AmoebaAgent {
 		return endogenousRequests.size()>0;
 	}
 	
-	public void addSelfRequest(HashMap<Percept, Double> request, int priority, Context ctxt){		
+	public void addChildRequest(HashMap<Percept, Double> request, int priority, Context ctxt){		
 		
 		getAmas().data.activeLearning = true;
-		addEndogenousRequest(new EndogenousRequest(request, null, priority,new ArrayList<Context>(Arrays.asList(ctxt)), REQUEST.SELF));
+		addEndogenousRequest(new EndogenousRequest(request, null, priority,new ArrayList<Context>(Arrays.asList(ctxt)), REQUEST.SELF), endogenousChildRequests);
 	}
 	
-	public void addEndogenousRequest(EndogenousRequest request) {
+	public void addEndogenousRequest(EndogenousRequest request, Queue<EndogenousRequest> endogenousRequestsList) {
 		
 		boolean existingRequestTest = false;
 		
 		if(request.getAskingContexts().size()>1) {
 			
-			Iterator<EndogenousRequest> itr = endogenousRequests.iterator();
+			Iterator<EndogenousRequest> itr = endogenousRequestsList.iterator();
 			while(!existingRequestTest && itr.hasNext()) {
 				
 				EndogenousRequest currentRequest = itr.next();
@@ -2266,12 +2301,12 @@ public class Head extends AmoebaAgent {
 				for(Context ctxt : request.getAskingContexts()) {
 					ctxt.addWaitingRequest(request);
 				}
-				endogenousRequests.add(request);
+				endogenousRequestsList.add(request);
 				getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEW ADDED ENDO REQUEST", ""+request)));
 			}
 		}else {
 			request.getAskingContexts().get(0).addWaitingRequest(request);
-			endogenousRequests.add(request);
+			endogenousRequestsList.add(request);
 			getEnvironment().trace(TRACE_LEVEL.EVENT, new ArrayList<String>(Arrays.asList("NEW ADDED ENDO REQUEST", ""+request)));
 		}
 		
diff --git a/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java b/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java
index 80756bc9c9159796e795102ae6fd2530802cef93..b8100b80089a1fcbd2a0432375bcf8cfd9a2c342 100644
--- a/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java
+++ b/AMOEBAonAMAK/src/experiments/UnityLauncher/Main.java
@@ -111,7 +111,7 @@ public class Main implements Runnable {
 			if(amoeba.getHeadAgent().isActiveLearning()) {
 			
 				studiedSystem.setActiveLearning(true);
-				studiedSystem.setSelfRequest(amoeba.getHeadAgent().getSelfRequest());
+				studiedSystem.setSelfRequest(amoeba.getHeadAgent().getSelfRequest()); //TODO self active ...
 			 
 			}
 			
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
index 6c4ea496a298b40f325f2f3cf663c0a4225a1bf8..1ccc5f4400297de7b84acce64882dc97d9aa2954 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Launcher.java
@@ -33,7 +33,7 @@ public class F_N_Launcher  extends Application implements Serializable {
 	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 nbOfModels = 2	;
 	public static final int normType = 2	;
 	public static final boolean randomExploration = true;
 	public static final boolean limitedToSpaceZone = true;
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_LauncherMultiUI.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_LauncherMultiUI.java
index 0256e545391f70cdc2c15000e5f924fc42b6b67c..903eda8e1960f044089dfbfb1357e4e5d631a917 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_LauncherMultiUI.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_LauncherMultiUI.java
@@ -273,7 +273,7 @@ public class F_N_LauncherMultiUI extends Application implements Serializable {
                     	amoeba.learn(studiedSystem.getOutput());
                     	if(amoeba.getHeadAgent().isActiveLearning()) {
                     		studiedSystem.setActiveLearning(true);
-                    		studiedSystem.setSelfRequest(amoeba.getHeadAgent().getSelfRequest());
+                    		studiedSystem.setSelfRequest(amoeba.getHeadAgent().getSelfRequest()); //TODO self active ...
     						 
     					}
                     	System.out.println(status);
@@ -344,7 +344,7 @@ public class F_N_LauncherMultiUI extends Application implements Serializable {
                     	amoeba2.learn(studiedSystem2.getOutput());
                     	if(amoeba2.getHeadAgent().isActiveLearning()) {
                     		studiedSystem2.setActiveLearning(true);
-                    		studiedSystem2.setSelfRequest(amoeba2.getHeadAgent().getSelfRequest());
+                    		studiedSystem2.setSelfRequest(amoeba2.getHeadAgent().getSelfRequest()); //TODO self active ...
     						 
     					}
                     	System.out.println(status);
diff --git a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
index dd70ab146915ef3a97ce87ac7ac5a178dbe4f95e..9ce57be50be4fa1e073e8db6d8b4e8503ea3fa1b 100644
--- a/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
+++ b/AMOEBAonAMAK/src/experiments/nDimensionsLaunchers/F_N_Manager.java
@@ -280,23 +280,23 @@ public class F_N_Manager implements StudiedSystem{
 		int subzone = subzone2D(xRequest);
 		
 		/* Multi */
-//		if(subzone == 1) {
-//			/* Disques */
-//			return modelN(xRequest) ;
-//		}else if (subzone == 2) {
-//			/* Gaussian model */
-//			return gaussianModel(xRequest, subZoneCenter3D(2), gaussianCoef, gaussianVariance);
-//			
-//		}else if (subzone == 3) {
-//			/* Square */
-//			return square2DModel(xRequest, subZoneCenter3D(3));
-//			
-//		}else if (subzone == 4) {
-//			/* Exp */
-//			return gaussianMapping2D(xRequest);
-//		}
-//		
-//		return model1();
+		if(subzone == 1) {
+			/* Disques */
+			return modelN(xRequest) ;
+		}else if (subzone == 2) {
+			/* Gaussian model */
+			return gaussianModel(xRequest, subZoneCenter3D(2), gaussianCoef, gaussianVariance);
+			
+		}else if (subzone == 3) {
+			/* Square */
+			return square2DModel(xRequest, subZoneCenter3D(3));
+			
+		}else if (subzone == 4) {
+			/* Exp */
+			return gaussianMapping2D(xRequest);
+		}
+		
+		return model1();
 		
 		
 		/* Disc */
@@ -307,7 +307,7 @@ public class F_N_Manager implements StudiedSystem{
 		//return model1();
 		
 		/* Triangle */
-		return (xRequest[0] > xRequest[1]) ? model1(xRequest[0],xRequest[1]) : model2(xRequest[0],xRequest[1]);
+		//return (xRequest[0] > xRequest[1]) ? model1(xRequest[0],xRequest[1]) : model2(xRequest[0],xRequest[1]);
 		
 		/* Split */
 		//return ( x <= 0 ) ? 2*x + y : 5*x - 8*y;
diff --git a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementLauncher2D.java b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementLauncher2D.java
index 4b1cb0bbf9107328ddf1f63712662e747e58116c..b9804256fa473e4dd73500c491e450c3f8323ce7 100644
--- a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementLauncher2D.java
+++ b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementLauncher2D.java
@@ -185,7 +185,7 @@ public class ReinforcementLauncher2D extends Application implements Serializable
                     	amoebaSpatialReward.learn(studiedSystem.getOutput());
                     	if(amoebaSpatialReward.getHeadAgent().isActiveLearning()) {
                     		studiedSystem.setActiveLearning(true);
-                    		studiedSystem.setSelfRequest(amoebaSpatialReward.getHeadAgent().getSelfRequest());
+                    		studiedSystem.setSelfRequest(amoebaSpatialReward.getHeadAgent().getSelfRequest()); //TODO self active ...
     						 
     					}
                     	//System.out.println(status);
diff --git a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementWithControlLauncher2D.java b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementWithControlLauncher2D.java
index 278ee8db0baa0ed920f117b6cfed7582b5419435..3fae320ad747017e98a28d7086bad8429a67b792 100644
--- a/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementWithControlLauncher2D.java
+++ b/AMOEBAonAMAK/src/experiments/reinforcement/WithStudiedSystem/ReinforcementWithControlLauncher2D.java
@@ -219,7 +219,7 @@ public class ReinforcementWithControlLauncher2D extends Application implements S
                     	amoebaSpatialReward.learn(studiedSystem.getOutput());
                     	if(amoebaSpatialReward.getHeadAgent().isActiveLearning()) {
                     		studiedSystem.setActiveLearning(true);
-                    		studiedSystem.setSelfRequest(amoebaSpatialReward.getHeadAgent().getSelfRequest());
+                    		studiedSystem.setSelfRequest(amoebaSpatialReward.getHeadAgent().getSelfRequest()); //TODO self active ...
     						 
     					}
                     	//System.out.println(status);
diff --git a/AMOEBAonAMAK/src/kernel/AMOEBA.java b/AMOEBAonAMAK/src/kernel/AMOEBA.java
index 76f1154d33df6e3809e96e7bcc10bd6517f7f3b9..1d95549f77382f676023230d87d1ce3f784ba132 100644
--- a/AMOEBAonAMAK/src/kernel/AMOEBA.java
+++ b/AMOEBAonAMAK/src/kernel/AMOEBA.java
@@ -262,7 +262,7 @@ public class AMOEBA extends Amas<World> implements IAMOEBA {
 			else if(data.activeLearning) {
 				data.activeLearning = false;
 				studiedSystem.setActiveLearning(true);
-				studiedSystem.setSelfRequest(head.getSelfRequest());
+				studiedSystem.setSelfRequest(head.getActiveRequest());
 			}
 		}