diff --git a/src/main/scala/org/scadcop/solver/decentralized/mgm2/AgentBehaviour.scala b/src/main/scala/org/scadcop/solver/decentralized/mgm2/AgentBehaviour.scala
index 17919942caeb97b6b20d39402cfa3734316030f1..763281d7f0032cb5be0d2af4eb230912186622b2 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/mgm2/AgentBehaviour.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/mgm2/AgentBehaviour.scala
@@ -277,7 +277,7 @@ class AgentBehaviour(variable: Variable,
      case Event(MakeOffer(eventualOffer), mind) if mind.nbReceivedOffers == neighbours.size-1 =>
      if (debug) println(s"$variable in $stateName has received MakeOffer and the context is full.")
       var updatedMind: MGM2Mind = mind.addOffer(eventualOffer)
-      val (bestOffer, bestDelta) = updatedMind.chooseBestSingleOffer(variable, neighbours, constraints)
+      val (bestOffer, bestDelta) = updatedMind.chooseBestSingleOffer(variable, constraints)
        updatedMind = updatedMind.updateDeltas(variable, bestDelta)
        val partner : Option[Variable]= bestOffer match {
          case Some(o) => Some(o.offererVariable)
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 68210d3e1f0a5b185a65b676df2c6a212319c6da..b7dafea5f90546fa5747ac7472931d21313af3cd 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/mgm2/MGM2Mind.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/mgm2/MGM2Mind.scala
@@ -122,7 +122,6 @@ class MGM2Mind(val context : Context = new Context(),
      * @param constraints which should be valuated
      */
    def chooseBestSingleOffer(receiverVariable: Variable,
-                             neighbours: Set[Variable],
                              constraints: Set[Constraint]): (Option[Offer], Double) = {
      val currentCost = currentContext.cost(constraints)
      var bestOffer: Option[Offer] = None // The best offer which will be selected, eventually none
@@ -133,13 +132,13 @@ class MGM2Mind(val context : Context = new Context(),
          val receiverValue: Value = move.context.getValue(receiverVariable).get
          val offererValue: Value = move.context.getValue(offererVariable).get
          val constraint: Constraint = relevantConstraint(constraints, receiverVariable, offererVariable)
-         val costConstraint = constraint.cost(context)
+         val commonUtilityBeforeChange = constraint.cost(context)
          val potentialContext = context.fix(offererVariable, offererValue).fix(receiverVariable, receiverValue)
+          val commonUtilityAfterChange = constraint.cost(potentialContext)
          val potentialCost =  potentialContext.cost(constraints)
-         val potentialCostConstraint = constraint.cost(potentialContext)
-         val gainConstraint = costConstraint - potentialCostConstraint
+         val sharedUtilityGain = commonUtilityAfterChange - commonUtilityBeforeChange
          //Subtract the difference in the link between the two agent so it is not counted twice
-         val delta: Double = currentCost - potentialCost + move.payoff - gainConstraint
+         val delta: Double = potentialCost - currentCost + move.payoff - sharedUtilityGain
          if (delta ~> bestDelta) {
            bestDelta = delta
            bestOffer = Some(new Offer(offererVariable, List(move)))
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 e0e4e5ce0f8a4d1afa4a29af6f6ab544830ba90e..51e59e79031d96885d800f962761211a682100de 100644
--- a/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
@@ -249,7 +249,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm) extends Actor with Sta
 
 object Supervisor {
   var counter = 0
-  val NB_ROUNDS = 2
+  val NB_ROUNDS = 5
 
   def incrementCounter() : Int = {
     counter = counter + 1