diff --git a/include/class.upgrader.php b/include/class.upgrader.php
index 7e45e9e6a0e33933148ac7133b280c2759f09fd4..23f98011b1345c9c8c5913ff1efb6c0fbb620a2d 100644
--- a/include/class.upgrader.php
+++ b/include/class.upgrader.php
@@ -26,7 +26,6 @@ class Upgrader extends SetupWizard {
     function Upgrader($signature, $prefix, $sqldir) {
 
         $this->signature = $signature;
-        $this->shash = substr($signature, 0, 8);
         $this->prefix = $prefix;
         $this->sqldir = $sqldir;
         $this->errors = array();
@@ -45,8 +44,8 @@ class Upgrader extends SetupWizard {
         //Tasks to perform - saved on the session.
         $this->tasks = &$_SESSION['ost_upgrader'][$this->getShash()]['tasks'];
 
-        //Database migrater 
-        $this->migrater = new DatabaseMigrater($this->signature, SCHEMA_SIGNATURE, $this->sqldir);
+        //Database migrater
+        $this->migrater = null;
     }
 
     function onError($error) {
@@ -87,7 +86,7 @@ class Upgrader extends SetupWizard {
     }
 
     function getShash() {
-        return $this->shash;
+        return  substr($this->getSchemaSignature(), 0, 8);
     }
 
     function getTablePrefix() {
@@ -106,13 +105,24 @@ class Upgrader extends SetupWizard {
         $this->state = $state;
     }
 
+
+    function getMigrater() {
+        if(!$this->migrater)
+            $this->migrater = new DatabaseMigrater($this->signature, SCHEMA_SIGNATURE, $this->sqldir);
+
+        return  $this->migrater;
+    }
+
     function getPatches() {
-        return $this->migrater->getPatches();
+        $patches = array();
+        if($this->getMigrater())
+            $patches = $this->getMigrater()->getPatches();
+
+        return $patches;
     }
 
     function getNextPatch() {
-        $p = $this->getPatches();
-        return (count($p)) ? $p[0] : false;
+        return (($p=$this->getPatches()) && count($p)) ? $p[0] : false;
     }
 
     function getNextVersion() {
@@ -198,7 +208,11 @@ class Upgrader extends SetupWizard {
         if(!($tasks=$this->getPendingTasks()))
             return true; //Nothing to do.
 
-        $ost->logDebug('Upgrader', sprintf('There are %d pending upgrade tasks', count($tasks)));
+        $c = count($tasks);
+        $ost->logDebug(
+                sprintf('Upgrader - %s (%d pending tasks).', $this->getShash(), $c),
+                sprintf('There are %d pending upgrade tasks for %s patch', $c, $this->getShash())
+                );
         $start_time = Misc::micro_time();
         foreach($tasks as $k => $task) {
             //TODO: check time used vs. max execution - break if need be
@@ -227,18 +241,20 @@ class Upgrader extends SetupWizard {
             if (!$this->load_sql_file($patch, $this->getTablePrefix()))
                 return false;
 
-            //clear previous patch info - 
+            //clear previous patch info -
             unset($_SESSION['ost_upgrader'][$this->getShash()]);
 
             $phash = substr(basename($patch), 0, 17);
+            $shash = substr($phash, 9, 8);
 
             //Log the patch info
-            $logMsg = "Patch $phash applied ";
+            $logMsg = "Patch $phash applied successfully ";
             if(($info = $this->readPatchInfo($patch)) && $info['version'])
                 $logMsg.= ' ('.$info['version'].') ';
 
-            $ost->logDebug('Upgrader - Patch applied', $logMsg);
-            
+            $ost->logDebug("Upgrader - $shash applied", $logMsg);
+            $this->signature = $shash; //Update signature to the *new* HEAD
+
             //Check if the said patch has scripted tasks
             if(!($tasks=$this->getTasksForPatch($phash))) {
                 //Break IF elapsed time is greater than 80% max time allowed.
@@ -250,16 +266,14 @@ class Upgrader extends SetupWizard {
             }
 
             //We have work to do... set the tasks and break.
-            $shash = substr($phash, 9, 8);
             $_SESSION['ost_upgrader'][$shash]['tasks'] = $tasks;
             $_SESSION['ost_upgrader'][$shash]['state'] = 'upgrade';
-            
-            $ost->logDebug('Upgrader', sprintf('Found %d tasks to be executed for %s',
-                            count($tasks), $shash));
             break;
-
         }
 
+        //Reset the migrater
+        $this->migrater = null;
+
         return true;
 
     }