diff --git a/include/upgrader/streams/core/9143a511-00000000.patch.sql b/include/upgrader/streams/core/9143a511-00000000.patch.sql
new file mode 100644
index 0000000000000000000000000000000000000000..10a6a23214346ab8fdc42578ae01fcdf867ef5a8
--- /dev/null
+++ b/include/upgrader/streams/core/9143a511-00000000.patch.sql
@@ -0,0 +1,28 @@
+
+ALTER TABLE `%TABLE_PREFIX%ticket_event`
+  ADD `id` int(10) unsigned NOT NULL AUTO_INCREMENT PRIMARY KEY FIRST,
+  CHANGE `ticket_id` `thread_id` int(11) unsigned NOT NULL default '0',
+  CHANGE `staff` `username` varchar(128) NOT NULL default 'SYSTEM',
+  CHANGE `state` `state` enum('created','closed','reopened','assigned','transferred','overdue','edited','viewed','error','collab','resent') NOT NULL,
+  ADD `data` varchar(1024) DEFAULT NULL COMMENT 'Encoded differences' AFTER `state`,
+  ADD `uid` int(11) unsigned DEFAULT NULL AFTER `username`,
+  ADD `uid_type` char(1) NOT NULL DEFAULT 'S' AFTER `uid`,
+  RENAME TO `%TABLE_PREFIX%thread_event`;
+
+-- Change the `ticket_id` column to the values in `%thread`.`id`
+CREATE TABLE `%TABLE_PREFIX%_ticket_thread_evt`
+    (PRIMARY KEY (`object_id`))
+    SELECT `object_id`, `id` FROM `%TABLE_PREFIX%thread`
+    WHERE `object_type` = 'T';
+
+UPDATE `%TABLE_PREFIX%thread_event` A1
+    JOIN `%TABLE_PREFIX%_ticket_thread_evt` A2 ON (A1.`thread_id` = A2.`object_id`)
+    SET A1.`thread_id` = A2.`id`;
+
+DROP TABLE `%TABLE_PREFIX%_ticket_thread_evt`;
+
+-- Attempt to connect the `username` to the staff_id
+UPDATE `%TABLE_PREFIX%thread_event` A1
+    LEFT JOIN `%TABLE_PREFIX%staff` A2 ON (A2.`username` = A1.`username`)
+    SET A1.`uid` = A2.`staff_id`
+    WHERE A1.`username` != 'SYSTEM';
diff --git a/setup/inc/streams/core/install-mysql.sql b/setup/inc/streams/core/install-mysql.sql
index 26f129681118b2c67eea32dc5f4b74f78d30a656..3ecb6bff63ea7a9df79958e498b18981fdde17f1 100644
--- a/setup/inc/streams/core/install-mysql.sql
+++ b/setup/inc/streams/core/install-mysql.sql
@@ -712,18 +712,22 @@ CREATE TABLE `%TABLE_PREFIX%lock` (
   KEY `staff_id` (`staff_id`)
 ) DEFAULT CHARSET=utf8;
 
-DROP TABLE IF EXISTS `%TABLE_PREFIX%ticket_event`;
-CREATE TABLE `%TABLE_PREFIX%ticket_event` (
-  `ticket_id` int(11) unsigned NOT NULL default '0',
+DROP TABLE IF EXISTS `%TABLE_PREFIX%thread_event`;
+CREATE TABLE `%TABLE_PREFIX%thread_event` (
+  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
+  `thread_id` int(11) unsigned NOT NULL default '0',
   `staff_id` int(11) unsigned NOT NULL,
   `team_id` int(11) unsigned NOT NULL,
   `dept_id` int(11) unsigned NOT NULL,
   `topic_id` int(11) unsigned NOT NULL,
-  `state` enum('created','closed','reopened','assigned','transferred','overdue') NOT NULL,
-  `staff` varchar(255) NOT NULL default 'SYSTEM',
+  `state` enum('created','closed','reopened','assigned','transferred','overdue','edited','viewed','error','collab','resent') NOT NULL,
+  `data` varchar(1024) DEFAULT NULL COMMENT 'Encoded differences',
+  `username` varchar(128) NOT NULL default 'SYSTEM',
+  `uid` int(11) unsigned DEFAULT NULL,
+  `uid_type` char(1) NOT NULL DEFAULT 'S',
   `annulled` tinyint(1) unsigned NOT NULL default '0',
   `timestamp` datetime NOT NULL,
-  KEY `ticket_state` (`ticket_id`, `state`, `timestamp`),
+  KEY `ticket_state` (`thread_id`, `state`, `timestamp`),
   KEY `ticket_stats` (`timestamp`, `state`)
 ) DEFAULT CHARSET=utf8;