diff --git a/include/ajax.upgrader.php b/include/ajax.upgrader.php
index 41100b9d38ebb37716fc7cdb08a22b8a9285321d..fa0b50a99c9c8271caf96e927c6032bbde4b9eee 100644
--- a/include/ajax.upgrader.php
+++ b/include/ajax.upgrader.php
@@ -39,12 +39,10 @@ class UpgraderAjaxAPI extends AjaxController {
             exit;
         }
 
-        if($upgrader->getNumPendingTasks()) {
-            if($upgrader->doTasks() && !$upgrader->getNumPendingTasks() && $ost->isUpgradePending()) {
-                //Just reporting done...with tasks - break in between patches with scripted tasks!
-                Http::response(201, "TASKS DONE!");
-                exit;
-            }
+        if($upgrader->getNumPendingTasks() && $upgrader->doTasks()) {
+            //More pending tasks - doTasks returns the number of pending tasks
+            Http::response(200, $upgrader->getNextAction());
+            exit;
         } elseif($ost->isUpgradePending() && $upgrader->isUpgradable()) {
             $version = $upgrader->getNextVersion();
             if($upgrader->upgrade()) {
@@ -55,7 +53,7 @@ class UpgraderAjaxAPI extends AjaxController {
         } elseif(!$ost->isUpgradePending()) {
             $upgrader->setState('done');
             session_write_close();
-            Http::response(201, "DONE!");
+            Http::response(201, "We're done!");
             exit;
         }
 
diff --git a/include/class.upgrader.php b/include/class.upgrader.php
index de11aee3a2e6f054d334205b9538fe73be2b0907..1b490a71dfa91a03e9cd3ddadc86d5b320e0004e 100644
--- a/include/class.upgrader.php
+++ b/include/class.upgrader.php
@@ -196,7 +196,7 @@ class Upgrader extends SetupWizard {
             }
         }
 
-        return (!$this->getPendingTasks());
+        return $this->getPendingTasks();
     }
     
     function upgrade() {
@@ -261,6 +261,10 @@ class Upgrader extends SetupWizard {
                 $tasks[] = array('func' => 'migrateSessionFile2DB',
                                  'desc' => 'Transitioning to db-backed sessions');
                 break;
+            case '98ae1ed2-e342f869': //v1.6 RC1-4 -> v1.6 RC5
+                $task[] = array('func' => 'migrateAPIKeys',
+                                'desc' => 'Migrating API keys to a new table');
+                break;
         }
 
         //Check IF SQL cleanup is exists. 
@@ -310,5 +314,24 @@ class Upgrader extends SetupWizard {
         osTicketSession::write(session_id(), session_encode()); 
         return 0;
     }
+
+    function migrateAPIKeys($taskId) {
+
+        $res = db_query('SELECT api_whitelist, api_key FROM '.CONFIG_TABLE.' WHERE id=1');
+        if(!$res || !db_num_rows($res))
+            return 0;  //Reporting success.
+
+        list($whitelist, $key) = db_fetch_row($res);
+
+        $ips=array_filter(explode(',', ereg_replace(' ', '', $whitelist)));
+        foreach($ips as $ip) {
+            $sql='INSERT INTO '.API_KEY_TABLE.' SET created=NOW(), updated=NOW(), isactive=1 '
+                .',ipaddr='.db_input($ip)
+                .',apikey='.db_input(strtoupper(md5($ip.md5($key))));
+            db_query($sql);
+        }
+
+        return 0;
+    }
 }
 ?>