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 1382b836478e60a81f1861268eddfd71ed929e51..44368fdd714eca567b6d0ecfb0656a111fe75c93 100755
--- a/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/supervisor/Supervisor.scala
@@ -88,7 +88,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
       val variable = directory.variableOf(sender)
       if (debug) println(s"Supervisor ($stateName): $variable is ready")
       stay using
-        new SupervisorStatus(readyVariables =  status.readyVariables + variable,
+        new SupervisorStatus(readyVariables =  status.readyVariables + variable, previousObj = status.previousObj,
           isFirstRound = status.isFirstRound)
 
     //When all the agents become ready
@@ -100,7 +100,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
         directory.addressOf(anyVariable) ! Trigger
       }
       goto(RunningSupervisorState) using
-        new SupervisorStatus(readyVariables =  status.readyVariables + variable,
+        new SupervisorStatus(readyVariables =  status.readyVariables + variable, previousObj = status.previousObj,
           isFirstRound = status.isFirstRound)
   }
 
@@ -121,15 +121,17 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
       stay using new SupervisorStatus(readyVariables = status.readyVariables,
         inactiveVariables = status.inactiveVariables + variable,
         assignment = status.assignment.fix(variable,value),
+        previousObj = status.previousObj,
         isFirstRound = status.isFirstRound)
 
     // When all the agent become inactive
     case Event(InformValue(value), status) if status.assignment.valuation.size == 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),
+        previousObj = status.previousObj,
         isFirstRound = false)
 
       if (! updatedStatus.isTerminated){// If the solving must be restart for another round
@@ -147,6 +149,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
           directory.addressOf(anyVariable) ! Query
         }
         if (trace) println(s"Supervisor -> self : StopAlgo")
+        updatedStatus = updatedStatus.updateObjectiveValue(pb.objective(status.assignment))
         self ! StopAlgo
         }
         goto(Deciding) using updatedStatus
@@ -203,6 +206,7 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
         killedVariables = status.killedVariables + variable,
         assignment = status.assignment,
         status.metric,
+        previousObj = status.previousObj,
         isFirstRound = status.isFirstRound)
 
     // When all the agent become inactive
@@ -222,7 +226,9 @@ class Supervisor(val pb : DCOP, val algorithm: Algorithm, val initialContext: Co
         inactiveVariables = status.inactiveVariables,
         killedVariables = status.killedVariables + variable,
         assignment = status.assignment,
-        metric, isFirstRound = status.isFirstRound)
+        metric, 
+        previousObj = status.previousObj,
+        isFirstRound = status.isFirstRound)
   }
 
     /**
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..bba85f19d896b98fd559383155a1a99d3694ec44 100755
--- a/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala
+++ b/src/main/scala/org/scadcop/solver/decentralized/supervisor/SupervisorStatus.scala
@@ -18,6 +18,7 @@ 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 previousObj: Double = 0.0,
                        val isFirstRound : Boolean = true
                       ){
 
@@ -49,9 +50,22 @@ class SupervisorStatus(val readyVariables: Set[Variable] = Set(),
       killedVariables,
       assignment = new Context(),
       metric,
+      previousObj,
       isFirstRound
     )
   }
+
+  //Returns the updated status with new value of objective function
+  def updateObjectiveValue(newObj: Double): SupervisorStatus = {
+    new SupervisorStatus(readyVariables, 
+    inactiveVariables,
+    killedVariables,
+    assignment,
+    metric,
+    previousObj = newObj,
+    isFirstRound
+    )
+  }
 }