diff --git a/includes/comment.inc b/includes/comment.inc
index 5bfdbbc..6b5c8d7 100644
--- a/includes/comment.inc
+++ b/includes/comment.inc
@@ -574,7 +574,7 @@ function project_issue_update_by_comment($comment_data, $op) {
   $priority_weight = db_result(db_query('SELECT weight FROM {project_issue_priority} WHERE priority = %d', $comment_data->priority));
 
   // Update the issue data to reflect the new final states.
-  db_query("UPDATE {project_issues} SET pid = %d, category = '%s', component = '%s', priority = %d, rid = %d, assigned = %d, sid = %d, priority_weight = %d WHERE nid = %d", $comment_data->pid, $comment_data->category, $comment_data->component, $comment_data->priority, $comment_data->rid, $comment_data->assigned, $comment_data->sid, $priority_weight, $comment_data->nid);
+  db_query("UPDATE {project_issues} SET pid = %d, category = '%s', component = '%s', priority = %d, rid = %d, assigned = %d, sid = %d, priority_weight = %d, changed = %d WHERE nid = %d", $comment_data->pid, $comment_data->category, $comment_data->component, $comment_data->priority, $comment_data->rid, $comment_data->assigned, $comment_data->sid, $priority_weight, $comment_data->timestamp, $comment_data->nid);
 
   // Update the issue title.
   $node = node_load($comment_data->nid, NULL, TRUE);  // Don't use cached since we changed data above.
diff --git a/includes/issue_node_form.inc b/includes/issue_node_form.inc
index 6c006b1..b206906 100644
--- a/includes/issue_node_form.inc
+++ b/includes/issue_node_form.inc
@@ -480,7 +480,7 @@ function _project_issue_insert($node) {
 
   $priority_weight = db_result(db_query('SELECT weight FROM {project_issue_priority} WHERE priority = %d', $node->priority));
 
-  db_query("INSERT INTO {project_issues} (nid, pid, category, component, priority, rid, assigned, sid, original_issue_data, last_comment_id, db_lock, priority_weight) VALUES (%d, %d, '%s', '%s', %d, %d, %d, %d, '%s', %d, %d, %d)", $node->nid, $node->pid, $node->category, $node->component, $node->priority, $node->rid, $node->assigned, $node->sid, serialize($original_issue_data), 0, 0, $priority_weight);
+  db_query("INSERT INTO {project_issues} (nid, pid, category, component, priority, rid, assigned, sid, original_issue_data, last_comment_id, db_lock, priority_weight, changed) VALUES (%d, %d, '%s', '%s', %d, %d, %d, %d, '%s', %d, %d, %d, %d)", $node->nid, $node->pid, $node->category, $node->component, $node->priority, $node->rid, $node->assigned, $node->sid, serialize($original_issue_data), 0, 0, $priority_weight, $node->changed);
 
   // Auto-flag the issue for the issue author and the current assignee.
   project_issue_flag_issue($node->nid, $node->uid);
diff --git a/project_issue.install b/project_issue.install
index ab23325..0cea04c 100644
--- a/project_issue.install
+++ b/project_issue.install
@@ -155,6 +155,12 @@ function project_issue_schema() {
         'not null' => TRUE,
         'default' => 0,
       ),
+      'changed' => array(
+        'description' => 'The Unix timestamp when the issue was most recently updated.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
       'db_lock' => array(
         'description' => 'Row-lock indicator to prevent race conditions when determining sequential comment number (http://drupal.org/node/180866).',
         'type' => 'int',
@@ -168,6 +174,8 @@ function project_issue_schema() {
       'project_issues_sid' => array('sid'),
       'project_issues_nid_assigned' => array('nid', 'assigned'),
       'project_issues_priority_weight' => array('priority_weight'),
+      'project_issues_pid_changed' => array('pid', 'changed'),
+      'project_issues_changed' => array('changed'),
     ),
     'primary key' => array('nid'),
   );
@@ -1167,3 +1175,25 @@ function project_issue_update_6017() {
     }
   }
 }
+
+/**
+ * Add {project_issues}.changed to *significantly* speed up issue queues.
+ */
+function project_issue_update_6018() {
+  $ret = array();
+
+  // Create 'changed' column to speed up sorting.
+  db_add_field($ret, 'project_issues', 'changed',
+  array(
+    'type' => 'int',
+    'not null' => TRUE,
+    'default' => 0,
+  ));
+  db_query('UPDATE {project_issues} p, {node_comment_statistics} s SET p.changed = s.last_comment_timestamp WHERE p.nid = s.nid');
+
+  // This will drastically increase issue queue performance.
+  db_add_index($ret, 'project_issues', 'project_issues_pid_changed', array('pid', 'changed'));
+  db_add_index($ret, 'project_issues', 'project_issues_changed', array('changed'));
+
+  return $ret;
+}
diff --git a/views/default_views/project_issue_all_projects.view.php b/views/default_views/project_issue_all_projects.view.php
index f23e8ec..5212808 100644
--- a/views/default_views/project_issue_all_projects.view.php
+++ b/views/default_views/project_issue_all_projects.view.php
@@ -119,14 +119,14 @@ $fields = array(
     'field' => 'new_comments',
     'relationship' => 'none',
   ),
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'label' => 'Last updated',
     'date_format' => 'raw time ago',
     'custom_date_format' => '',
     'exclude' => 0,
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'relationship' => 'none',
   ),
   'name' => array(
@@ -182,7 +182,7 @@ if (module_exists('search')) {
     'separator' => ',',
     'prefix' => '',
     'suffix' => '',
-    'alternate_sort' => 'last_comment_timestamp',
+    'alternate_sort' => 'changed',
     'alternate_order' => 'desc',
     'exclude' => 0,
     'id' => 'score',
@@ -193,12 +193,12 @@ if (module_exists('search')) {
 }
 $handler->override_option('fields', $fields);
 $sorts = array();
-$sorts['last_comment_timestamp'] = array(
+$sorts['changed'] = array(
   'order' => 'DESC',
   'granularity' => 'second',
-  'id' => 'last_comment_timestamp',
-  'table' => 'node_comment_statistics',
-  'field' => 'last_comment_timestamp',
+  'id' => 'changed',
+  'table' => 'project_issues',
+  'field' => 'changed',
   'relationship' => 'none',
 );
 if (module_exists('search')) {
@@ -359,7 +359,7 @@ $handler->override_option('style_options', array(
     'category' => 'category',
     'comment_count' => 'comment_count',
     'new_comments' => 'comment_count',
-    'last_comment_timestamp' => 'last_comment_timestamp',
+    'changed' => 'changed',
     'name' => 'name',
     'created' => 'created',
     'score' => 'score',
@@ -395,7 +395,7 @@ $handler->override_option('style_options', array(
     'new_comments' => array(
       'separator' => '',
     ),
-    'last_comment_timestamp' => array(
+    'changed' => array(
       'sortable' => 1,
       'separator' => '',
     ),
@@ -412,7 +412,7 @@ $handler->override_option('style_options', array(
       'separator' => '',
     ),
   ),
-  'default' => module_exists('search') ? 'score' : 'last_comment_timestamp',
+  'default' => module_exists('search') ? 'score' : 'changed',
 ));
 $handler = $view->new_display('page', 'Page', 'page_1');
 $handler->override_option('path', 'project/issues');
@@ -431,12 +431,12 @@ $handler->override_option('tab_options', array(
 ));
 $handler = $view->new_display('feed', 'Feed', 'feed_1');
 $handler->override_option('sorts', array(
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'order' => 'DESC',
     'granularity' => 'second',
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'override' => array(
       'button' => 'Use default',
     ),
diff --git a/views/default_views/project_issue_project.view.php b/views/default_views/project_issue_project.view.php
index 7e9840a..8be1354 100644
--- a/views/default_views/project_issue_project.view.php
+++ b/views/default_views/project_issue_project.view.php
@@ -121,14 +121,14 @@ $fields = array(
     'field' => 'new_comments',
     'relationship' => 'none',
   ),
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'label' => 'Last updated',
     'date_format' => 'raw time ago',
     'custom_date_format' => '',
     'exclude' => 0,
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'relationship' => 'none',
   ),
   'name' => array(
@@ -184,7 +184,7 @@ if (module_exists('search')) {
     'separator' => ',',
     'prefix' => '',
     'suffix' => '',
-    'alternate_sort' => 'last_comment_timestamp',
+    'alternate_sort' => 'changed',
     'alternate_order' => 'desc',
     'exclude' => 0,
     'id' => 'score',
@@ -219,12 +219,12 @@ $handler->override_option('arguments', array(
   ),
 ));
 $sorts = array();
-$sorts['last_comment_timestamp'] = array(
+$sorts['changed'] = array(
   'order' => 'DESC',
   'granularity' => 'second',
-  'id' => 'last_comment_timestamp',
-  'table' => 'node_comment_statistics',
-  'field' => 'last_comment_timestamp',
+  'id' => 'changed',
+  'table' => 'project_issues',
+  'field' => 'changed',
   'relationship' => 'none',
 );
 if (module_exists('search')) {
@@ -403,7 +403,7 @@ $handler->override_option('style_options', array(
     'component' => 'component',
     'comment_count' => 'comment_count',
     'new_comments' => 'comment_count',
-    'last_comment_timestamp' => 'last_comment_timestamp',
+    'changed' => 'changed',
     'name' => 'name',
     'created' => 'created',
     'score' => 'score',
@@ -443,7 +443,7 @@ $handler->override_option('style_options', array(
     'new_comments' => array(
       'separator' => '',
     ),
-    'last_comment_timestamp' => array(
+    'changed' => array(
       'sortable' => 1,
       'separator' => '',
     ),
@@ -460,7 +460,7 @@ $handler->override_option('style_options', array(
       'separator' => '',
     ),
   ),
-  'default' => module_exists('search') ? 'score' : 'last_comment_timestamp',
+  'default' => module_exists('search') ? 'score' : 'changed',
 ));
 $handler = $view->new_display('page', 'Page', 'page_1');
 $handler->override_option('path', 'project/issues/%');
@@ -479,12 +479,12 @@ $handler->override_option('tab_options', array(
 ));
 $handler = $view->new_display('feed', 'Feed', 'feed_1');
 $handler->override_option('sorts', array(
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'order' => 'DESC',
     'granularity' => 'second',
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'override' => array(
       'button' => 'Use default',
     ),
@@ -546,12 +546,12 @@ $handler->override_option('fields', array(
   ),
 ));
 $handler->override_option('sorts', array(
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'order' => 'DESC',
     'granularity' => 'second',
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'relationship' => 'none',
   ),
 ));
@@ -618,4 +618,3 @@ $handler->override_option('row_options', array(
 ));
 $handler->override_option('block_description', 'Project: recent issues');
 $handler->override_option('block_caching', -1);
-
diff --git a/views/default_views/project_issue_search_all.view.php b/views/default_views/project_issue_search_all.view.php
index e2d411f..efab1c1 100644
--- a/views/default_views/project_issue_search_all.view.php
+++ b/views/default_views/project_issue_search_all.view.php
@@ -128,14 +128,14 @@ $fields = array(
     'field' => 'new_comments',
     'relationship' => 'none',
   ),
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'label' => 'Last updated',
     'date_format' => 'raw time ago',
     'custom_date_format' => '',
     'exclude' => 0,
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'relationship' => 'none',
   ),
   'name' => array(
@@ -191,7 +191,7 @@ if (module_exists('search')) {
     'separator' => ',',
     'prefix' => '',
     'suffix' => '',
-    'alternate_sort' => 'last_comment_timestamp',
+    'alternate_sort' => 'changed',
     'alternate_order' => 'desc',
     'exclude' => 0,
     'id' => 'score',
@@ -202,12 +202,12 @@ if (module_exists('search')) {
 }
 $handler->override_option('fields', $fields);
 $sorts = array();
-$sorts['last_comment_timestamp'] = array(
+$sorts['changed'] = array(
   'order' => 'DESC',
   'granularity' => 'second',
-  'id' => 'last_comment_timestamp',
-  'table' => 'node_comment_statistics',
-  'field' => 'last_comment_timestamp',
+  'id' => 'changed',
+  'table' => 'project_issues',
+  'field' => 'changed',
   'relationship' => 'none',
 );
 if (module_exists('search')) {
@@ -425,7 +425,7 @@ $handler->override_option('style_options', array(
     'version' => 'version',
     'comment_count' => 'comment_count',
     'new_comments' => 'comment_count',
-    'last_comment_timestamp' => 'last_comment_timestamp',
+    'changed' => 'changed',
     'name' => 'name',
     'created' => 'created',
     'score' => 'score',
@@ -465,7 +465,7 @@ $handler->override_option('style_options', array(
     'new_comments' => array(
       'separator' => '',
     ),
-    'last_comment_timestamp' => array(
+    'changed' => array(
       'sortable' => 1,
       'separator' => '',
     ),
@@ -482,7 +482,7 @@ $handler->override_option('style_options', array(
       'separator' => '',
     ),
   ),
-  'default' => module_exists('search') ? 'score' : 'last_comment_timestamp',
+  'default' => module_exists('search') ? 'score' : 'changed',
 ));
 $handler = $view->new_display('page', 'Page', 'page_1');
 $handler->override_option('path', 'project/issues/search');
@@ -501,12 +501,12 @@ $handler->override_option('tab_options', array(
 ));
 $handler = $view->new_display('feed', 'Feed', 'feed_1');
 $handler->override_option('sorts', array(
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'order' => 'DESC',
     'granularity' => 'second',
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'override' => array(
       'button' => 'Use default',
     ),
@@ -538,4 +538,3 @@ $handler->override_option('displays', array(
   'default' => 0,
 ));
 $handler->override_option('sitename_title', FALSE);
-
diff --git a/views/default_views/project_issue_search_project.view.php b/views/default_views/project_issue_search_project.view.php
index 303e657..cee77ff 100644
--- a/views/default_views/project_issue_search_project.view.php
+++ b/views/default_views/project_issue_search_project.view.php
@@ -128,14 +128,14 @@ $fields = array(
     'field' => 'new_comments',
     'relationship' => 'none',
   ),
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'label' => 'Last updated',
     'date_format' => 'raw time ago',
     'custom_date_format' => '',
     'exclude' => 0,
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'relationship' => 'none',
   ),
   'name' => array(
@@ -191,7 +191,7 @@ if (module_exists('search')) {
     'separator' => ',',
     'prefix' => '',
     'suffix' => '',
-    'alternate_sort' => 'last_comment_timestamp',
+    'alternate_sort' => 'changed',
     'alternate_order' => 'desc',
     'exclude' => 0,
     'id' => 'score',
@@ -242,9 +242,9 @@ $sorts = array();
 $sorts['last_comment_timestamp'] = array(
   'order' => 'DESC',
   'granularity' => 'second',
-  'id' => 'last_comment_timestamp',
-  'table' => 'node_comment_statistics',
-  'field' => 'last_comment_timestamp',
+  'id' => 'changed',
+  'table' => 'project_issues',
+  'field' => 'changed',
   'relationship' => 'none',
 );
 if (module_exists('search')) {
@@ -479,7 +479,7 @@ $handler->override_option('style_options', array(
     'component' => 'component',
     'comment_count' => 'comment_count',
     'new_comments' => 'comment_count',
-    'last_comment_timestamp' => 'last_comment_timestamp',
+    'changed' => 'changed',
     'name' => 'name',
     'created' => 'created',
     'score' => 'score',
@@ -519,7 +519,7 @@ $handler->override_option('style_options', array(
     'new_comments' => array(
       'separator' => '',
     ),
-    'last_comment_timestamp' => array(
+    'changed' => array(
       'sortable' => 1,
       'separator' => '',
     ),
@@ -536,7 +536,7 @@ $handler->override_option('style_options', array(
       'separator' => '',
     ),
   ),
-  'default' => module_exists('search') ? 'score' : 'last_comment_timestamp',
+  'default' => module_exists('search') ? 'score' : 'changed',
 ));
 $handler = $view->new_display('page', 'Page', 'page_1');
 $handler->override_option('path', 'project/issues/search/%');
@@ -555,12 +555,12 @@ $handler->override_option('tab_options', array(
 ));
 $handler = $view->new_display('feed', 'Feed', 'feed_1');
 $handler->override_option('sorts', array(
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'order' => 'DESC',
     'granularity' => 'second',
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'override' => array(
       'button' => 'Use default',
     ),
@@ -592,4 +592,3 @@ $handler->override_option('displays', array(
   'default' => 0,
 ));
 $handler->override_option('sitename_title', FALSE);
-
diff --git a/views/default_views/project_issue_user_projects.view.php b/views/default_views/project_issue_user_projects.view.php
index bd20248..cd3f258 100644
--- a/views/default_views/project_issue_user_projects.view.php
+++ b/views/default_views/project_issue_user_projects.view.php
@@ -128,14 +128,14 @@ $fields = array(
     'field' => 'new_comments',
     'relationship' => 'none',
   ),
-  'last_comment_timestamp' => array(
+  'changed' => array(
     'label' => 'Last updated',
     'date_format' => 'raw time ago',
     'custom_date_format' => '',
     'exclude' => 0,
-    'id' => 'last_comment_timestamp',
-    'table' => 'node_comment_statistics',
-    'field' => 'last_comment_timestamp',
+    'id' => 'changed',
+    'table' => 'project_issues',
+    'field' => 'changed',
     'relationship' => 'none',
   ),
   'name' => array(
@@ -191,7 +191,7 @@ if (module_exists('search')) {
     'separator' => ',',
     'prefix' => '',
     'suffix' => '',
-    'alternate_sort' => 'last_comment_timestamp',
+    'alternate_sort' => 'changed',
     'alternate_order' => 'desc',
     'exclude' => 0,
     'id' => 'score',
@@ -202,12 +202,12 @@ if (module_exists('search')) {
 }
 $handler->override_option('fields', $fields);
 $sorts = array();
-$sorts['last_comment_timestamp'] = array(
+$sorts['changed'] = array(
   'order' => 'DESC',
   'granularity' => 'second',
-  'id' => 'last_comment_timestamp',
-  'table' => 'node_comment_statistics',
-  'field' => 'last_comment_timestamp',
+  'id' => 'changed',
+  'table' => 'project_issues',
+  'field' => 'changed',
   'relationship' => 'none',
 );
 if (module_exists('search')) {
@@ -395,7 +395,7 @@ $handler->override_option('style_options', array(
     'version' => 'version',
     'comment_count' => 'comment_count',
     'new_comments' => 'comment_count',
-    'last_comment_timestamp' => 'last_comment_timestamp',
+    'changed' => 'changed',
     'name' => 'name',
     'created' => 'created',
     'score' => 'score',
@@ -435,7 +435,7 @@ $handler->override_option('style_options', array(
     'new_comments' => array(
       'separator' => '',
     ),
-    'last_comment_timestamp' => array(
+    'changed' => array(
       'sortable' => 1,
       'separator' => '',
     ),
@@ -452,7 +452,7 @@ $handler->override_option('style_options', array(
       'separator' => '',
     ),
   ),
-  'default' => module_exists('search') ? 'score' : 'last_comment_timestamp',
+  'default' => module_exists('search') ? 'score' : 'changed',
 ));
 $handler = $view->new_display('page', 'Page', 'page_1');
 $handler->override_option('path', 'project/user');
@@ -498,4 +498,3 @@ $handler->override_option('displays', array(
   'default' => 0,
 ));
 $handler->override_option('sitename_title', FALSE);
-
diff --git a/views/project_issue.views.inc b/views/project_issue.views.inc
index 89bca5b..9fcef36 100644
--- a/views/project_issue.views.inc
+++ b/views/project_issue.views.inc
@@ -177,6 +177,22 @@ function project_issue_views_data() {
       'handler' => 'views_handler_argument_numeric',
     ),
   );
+
+  $data['project_issues']['changed'] = array(
+    'title' => t('Last update time'),
+    'help' => t('Date and time of when the issue was last updated.'),
+    'field' => array(
+      'handler' => 'views_handler_field_date',
+      'click sortable' => TRUE,
+    ),
+    'sort' => array(
+      'handler' => 'views_handler_sort_date',
+    ),
+    'filter' => array(
+      'handler' => 'views_handler_filter_date',
+    ),
+  );
+
   return $data;
 }
 
@@ -257,4 +273,3 @@ function project_issue_views_plugins() {
     ),
   );
 }
-
