diff --git a/src/main/scala/org/scadcop/solver/decentralized/mgm2/MGM2Mind.scala b/src/main/scala/org/scadcop/solver/decentralized/mgm2/MGM2Mind.scala
index b7dafea5f90546fa5747ac7472931d21313af3cd..28c62e722c4a8f1260809f789480cf2fb30de727 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/mgm2/MGM2Mind.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/mgm2/MGM2Mind.scala
@@ -78,7 +78,7 @@ class MGM2Mind(val context : Context = new Context(),
     variable.domain.foreach { value =>
       val potentialContext: Context = context.fix(variable, value)
       val potentialCost =  potentialContext.cost(constraints)
-      val delta = currentCost - potentialCost
+      val delta = potentialCost - currentCost
       if (delta ~> bestDelta) {
         val move = new UnilateralMove(potentialContext, delta)
         bestDelta = delta
diff --git a/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala b/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
index 51e59e79031d96885d800f962761211a682100de..6f77a87a55472dbeb1d21237f1ad2b3dde122af2 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
@@ -85,6 +85,12 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm) extends Actor with Sta
         new SupervisorStatus(readyVariables =  status.readyVariables + variable,
           isFirstRound = status.isFirstRound)
 
+    //when it receives an InformValue from an early agent
+    case Event(InformValue(_), status) => {
+      stash
+      stay using status
+    }
+
     //When all the agents become ready
     case Event(Ready, status) if status.nbReady == pb.size - 1  =>
       val variable = directory.variableOf(sender)
@@ -93,6 +99,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm) extends Actor with Sta
         if (trace) println(s"Supervisor -> $anyVariable : Trigger")
         directory.addressOf(anyVariable) ! Trigger
       }
+      unstashAll
       goto(RunningSupervisorState) using
         new SupervisorStatus(readyVariables =  status.readyVariables + variable,
           isFirstRound = status.isFirstRound)
@@ -109,22 +116,25 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm) extends Actor with Sta
       stay using status
 
     // When an agent becomes inactive
-    case Event(InformValue(value), status) if status.assignment.valuation.size < pb.size - 1 =>
+    case Event(InformValue(value), status) if status.informValCounter < pb.size - 1 =>
       val variable: Variable = directory.variableOf(sender)
       if (debug) println(s"Supervisor ($stateName): $variable is inactive")
-      stay using new SupervisorStatus(readyVariables = status.readyVariables,
+      var updatedStatus = new SupervisorStatus(readyVariables = status.readyVariables,
         inactiveVariables = status.inactiveVariables + variable,
         assignment = status.assignment.fix(variable,value),
         isFirstRound = status.isFirstRound)
+        updatedStatus.incrementInformValCounter()
+      stay using updatedStatus
 
     // When all the agent become inactive
-    case Event(InformValue(value), status) if status.assignment.valuation.size == pb.size - 1 =>
+    case Event(InformValue(value), status) if status.informValCounter == pb.size - 1 =>
       val variable: Variable = directory.variableOf(sender)
       if (debug) println(s"Supervisor ($stateName): $variable is finally inactive")
-      val updatedStatus =  new SupervisorStatus(readyVariables = status.readyVariables,
+      var updatedStatus =  new SupervisorStatus(readyVariables = status.readyVariables,
         inactiveVariables = status.inactiveVariables + variable,
         assignment = status.assignment.fix(variable,value),
         isFirstRound = false)
+        updatedStatus.incrementInformValCounter()
 
       if (! updatedStatus.isTerminated){// If the solving must be restart for another round
         pb.variables.foreach { anyVariable: Variable =>
@@ -249,7 +259,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm) extends Actor with Sta
 
 object Supervisor {
   var counter = 0
-  val NB_ROUNDS = 5
+  val NB_ROUNDS = 10
 
   def incrementCounter() : Int = {
     counter = counter + 1
diff --git a/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala b/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala
index bc71821bd566acddcb3f8b94d167c8f85b40f58a..160acec0ad9d03e5c7c3bc65b8e67fc869d420ac 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala
@@ -18,7 +18,8 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(),
                        val killedVariables: Set[Variable] = Set(),
                        val assignment: Context = new Context(),
                        val metric: Metric= collection.mutable.Map[String,Double](),
-                       val isFirstRound : Boolean = true
+                       val isFirstRound : Boolean = true,
+                       val informValCounter: Int = 0
                       ){
 
   /**
@@ -42,14 +43,26 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(),
     */
   def isTerminated : Boolean = Supervisor.incrementCounter() > Supervisor.NB_ROUNDS
 
+  def incrementInformValCounter(): SupervisorStatus = {
+   new SupervisorStatus(readyVariables,
+                       inactiveVariables,
+                       killedVariables,
+                       assignment,
+                       metric,
+                       isFirstRound,
+                       informValCounter = informValCounter + 1
+                      )
+  }
+
   /*Returns the updated supervisor's status when resetting the context*/
   def resetContext(): SupervisorStatus = {
     new SupervisorStatus(readyVariables,
       inactiveVariables = Set(),
       killedVariables,
-      assignment = new Context(),
+      assignment,
       metric,
-      isFirstRound
+      isFirstRound,
+      informValCounter = 0
     )
   }
 }