diff --git a/include/class.thread.php b/include/class.thread.php
index 08f2bc68bc5dc93cf972321acdaf6a068dff44ba..be370e87379bfef222d8142afa127c35bffc53a6 100644
--- a/include/class.thread.php
+++ b/include/class.thread.php
@@ -2074,25 +2074,25 @@ class Event extends VerySimpleModel {
         return $this->name;
     }
 
-    function getNameById($id) {
+    function getDescription() {
+        return $this->description;
+    }
+
+    static function getNameById($id) {
         return array_search($id, self::getIds());
     }
 
-    function getIdByName($name) {
+    static function getIdByName($name) {
          $ids =  self::getIds();
          return $ids[$name] ?: 0;
     }
 
-    function getDescription() {
-        return $this->description;
-    }
-
     static function getIds() {
         static $ids;
 
         if (!isset($ids)) {
             $ids = array();
-            $events = static::objects()->values_flat('id', 'name');
+            $events = self::objects()->values_flat('id', 'name');
             foreach ($events as $row) {
                 list($id, $name) = $row;
                 $ids[$name] = $id;
diff --git a/include/upgrader/streams/core/26fd79dc-00c949a6.task.php b/include/upgrader/streams/core/26fd79dc-00c949a6.task.php
index d3d6a2084ac31d8cab76465794c8992a3d6e69e3..01895a67dc5f85e7cbb0df73d05a0f2599dba64a 100644
--- a/include/upgrader/streams/core/26fd79dc-00c949a6.task.php
+++ b/include/upgrader/streams/core/26fd79dc-00c949a6.task.php
@@ -5,6 +5,7 @@ class EventEnumRemoval extends MigrationTask {
     var $queue;
     var $skipList;
     var $errorList = array();
+    var $limit = 20000;
 
     function sleep() {
         return array('queue'=>$this->queue, 'skipList'=>$this->skipList);
@@ -13,11 +14,11 @@ class EventEnumRemoval extends MigrationTask {
         $this->queue = $stuff['queue'];
         $this->skipList = $stuff['skipList'];
         while (!$this->isFinished())
-            $this->do_batch(30, 5000);
+            $this->do_batch(30, $this->limit);
     }
 
     function run($max_time) {
-        $this->do_batch($max_time * 0.9, 5000);
+        $this->do_batch($max_time * 0.9, $this->limit);
     }
 
     function isFinished() {
@@ -49,40 +50,34 @@ class EventEnumRemoval extends MigrationTask {
         if(($qc=$this->getQueueLength()))
             return $qc;
 
-        $sql = "SELECT this.id, this.state, that.id, that.name FROM ".THREAD_EVENT_TABLE. " this
-            INNER JOIN (
-            SELECT id, name
-            FROM ". EVENT_TABLE. ") that
-            WHERE this.state = that.name
-            AND event_id IS NULL";
-
-        if(($skipList=$this->getSkipList()))
-            $sql.= ' AND this.id NOT IN('.implode(',', db_input($skipList)).')';
-
-        if($limit && is_numeric($limit))
-            $sql.=' LIMIT '.$limit;
+        $sql = "SELECT COUNT(t.id) FROM ".THREAD_EVENT_TABLE. " t
+            INNER JOIN ".EVENT_TABLE. " e ON (e.name=t.state)
+            WHERE t.event_id IS NULL";
 
         //XXX: Do a hard fail or error querying the database?
         if(!($res=db_query($sql)))
             return $this->error('Unable to query DB for Thread Event migration!');
 
+        $count = db_result($res);
+
         // Force the log message to the database
-        $ost->logDebug("Thread Event Migration", 'Found '.db_num_rows($res)
+        $ost->logDebug("Thread Event Migration", 'Found '.$count
             .' events to migrate', true);
 
-        if(!db_num_rows($res))
+        if($count == 0)
             return 0;  //Nothing else to do!!
 
+        $start = db_result(db_query("SELECT id FROM ".THREAD_EVENT_TABLE. "
+            WHERE event_id IS NULL
+            ORDER BY id ASC LIMIT 1"));
+
         $this->queue = array();
-        while (list($id, $state, $eventId, $eventName)=db_fetch_row($res)) {
-            $info=array(
-                'id'        => $id,
-                'state'     => $state,
-                'eventId'   => $eventId,
-                'eventName' => $eventName,
-            );
-            $this->enqueue($info);
-        }
+        $info=array(
+            'count'        => $count,
+            'start'        => $start,
+            'end'          => $start + $limit
+        );
+        $this->enqueue($info);
 
         return $this->getQueueLength();
     }
@@ -125,16 +120,12 @@ class EventEnumRemoval extends MigrationTask {
         # need to be recalculated for every shift() operation.
         $info = array_pop($this->queue);
 
-        if (!$info['state']) {
-            # Continue with next thread event
-            return $this->skip($info['eventId'],
-            sprintf('Thread Event ID %s: State is blank', $info['eventId']));
-        }
+        $sql = "UPDATE ".THREAD_EVENT_TABLE. " t
+            INNER JOIN ".EVENT_TABLE. " e ON (e.name=t.state)
+            SET t.event_id = e.id
+            WHERE t.event_id IS NULL AND t.id <= ". $info['end'];
 
-        db_query('update '.THREAD_EVENT_TABLE
-            .' set event_id='.db_input($info['eventId'])
-            .' where state='.db_input($info['eventName'])
-            .' and id='.db_input($info['id']));
+        db_query($sql);
 
         return true;
     }