diff --git a/include/class.collaborator.php b/include/class.collaborator.php
index 6bc891e5fd9fd53d19789faac4de813fc2ab1dfc..b51fbe48cddd695b76496db3c3fd34c3bf335dcb 100644
--- a/include/class.collaborator.php
+++ b/include/class.collaborator.php
@@ -114,6 +114,12 @@ implements EmailContact, ITicketUser {
         return $this->user_id;
     }
 
+    static function create($vars=false) {
+        $inst = parent::create($vars);
+        $inst->created = SqlFunction::NOW();
+        return $inst;
+    }
+
     function save($refetch=false) {
         if ($this->dirty)
             $this->updated = SqlFunction::NOW();
diff --git a/include/upgrader/streams/core/2d590ffa-9143a511.patch.sql b/include/upgrader/streams/core/2d590ffa-9143a511.patch.sql
index 1f6fd0b70b44de0a0917f461349c64ea9fcbae0f..4244e3bd590ea4c8f44fe131bed41748432e4095 100644
--- a/include/upgrader/streams/core/2d590ffa-9143a511.patch.sql
+++ b/include/upgrader/streams/core/2d590ffa-9143a511.patch.sql
@@ -27,6 +27,17 @@ RENAME TABLE `%TABLE_PREFIX%ticket_collaborator` TO `%TABLE_PREFIX%thread_collab
 ALTER TABLE `%TABLE_PREFIX%thread_collaborator`
   CHANGE `ticket_id` `thread_id` int(11) unsigned NOT NULL DEFAULT '0';
 
+UPDATE `%TABLE_PREFIX%thread_collaborator` t1
+    LEFT JOIN  `%TABLE_PREFIX%thread` t2 ON (t2.object_id = t1.thread_id  and t2.object_type = 'T')
+    SET t1.thread_id = t2.id, t1.created = t2.created;
+
+-- Drop zombie collaborators from tickets which were deleted and had
+-- collaborators and the collaborators were not removed
+DELETE A1.*
+    FROM `%TABLE_PREFIX%thread_collaborator` A1
+    LEFT JOIN `%TABLE_PREFIX%thread` A2 ON (A2.id = A1.thread_id)
+    WHERE A2.id IS NULL;
+
 ALTER TABLE `%TABLE_PREFIX%task`
   ADD `lock_id` int(11) unsigned NOT NULL DEFAULT '0' AFTER `team_id`;