diff --git a/database/updates.inc b/database/updates.inc
index f3b3eb863ebe6878169b1d8ff308e9ace24068b1..5d65503cd615b57458b826ea6c0c04ae7be7f449 100644
--- a/database/updates.inc
+++ b/database/updates.inc
@@ -1689,15 +1689,7 @@ function system_update_173() {
 }
 
 function system_update_174() {
-  // update comments system variables on upgrade.
-  $mode = variable_get('comment_default_mode', 4);
-  if ($mode > 0) {
-    variable_set('comment_default_mode', $mode - 1);
-  }
-  $order = variable_get('comment_default_order', 1);
-  if ($order > 0) {
-    variable_set('comment_default_order', $order - 1);
-  }
+  // This update (update comments system variables on upgrade) has been removed.
   return array();
 }
 
diff --git a/modules/comment.module b/modules/comment.module
index afaf5492f968c3c4683e5d0416683de142733e13..83fae38b7b28e1c97c712512b1e5c67f999c50cd 100644
--- a/modules/comment.module
+++ b/modules/comment.module
@@ -19,16 +19,16 @@
 /**
  * Constants to define the viewing modes for comment listings
  */
-define('COMMENT_MODE_FLAT_COLLAPSED', 0);
-define('COMMENT_MODE_FLAT_EXPANDED', 1);
-define('COMMENT_MODE_THREADED_COLLAPSED', 2);
-define('COMMENT_MODE_THREADED_EXPANDED', 3);
+define('COMMENT_MODE_FLAT_COLLAPSED', 1);
+define('COMMENT_MODE_FLAT_EXPANDED', 2);
+define('COMMENT_MODE_THREADED_COLLAPSED', 3);
+define('COMMENT_MODE_THREADED_EXPANDED', 4);
 
 /**
  * Constants to define the viewing orders for comment listings
  */
-define('COMMENT_ORDER_NEWEST_FIRST', 0);
-define('COMMENT_ORDER_OLDEST_FIRST', 1);
+define('COMMENT_ORDER_NEWEST_FIRST', 1);
+define('COMMENT_ORDER_OLDEST_FIRST', 2);
 
 /**
  * Constants to define the position of the comment controls
@@ -696,11 +696,6 @@ function comment_links($comment, $return = 1) {
 function comment_render($node, $cid = 0) {
   global $user;
 
-  $mode = $_GET['mode'];
-  $order = $_GET['order'];
-  $comments_per_page = $_GET['comments_per_page'];
-  $comment_page = $_GET['comment_page'];
-
   $output = '';
 
   if (user_access('access comments')) {
@@ -710,17 +705,9 @@ function comment_render($node, $cid = 0) {
       $nid = 0;
     }
 
-    if (!isset($mode)) {
-      $mode = isset($user->mode) ? $user->mode : (isset($_SESSION['comment_mode']) ? $_SESSION['comment_mode'] : variable_get('comment_default_mode', COMMENT_MODE_THREADED_EXPANDED));
-    }
-
-    if (!isset($order)) {
-      $order = isset($user->sort) ? $user->sort : (isset($_SESSION['comment_sort']) ? $_SESSION['comment_sort'] : variable_get('comment_default_order', COMMENT_ORDER_NEWEST_FIRST));
-    }
-
-    if (empty($comments_per_page)) {
-      $comments_per_page = $user->comments_per_page ? $user->comments_per_page : ($_SESSION['comment_comments_per_page'] ? $_SESSION['comment_comments_per_page'] : variable_get('comment_default_per_page', '50'));
-    }
+    $mode = _comment_get_display_setting('mode');
+    $order = _comment_get_display_setting('sort');
+    $comments_per_page = _comment_get_display_setting('comments_per_page');
 
     $output .= "<a id=\"comment\"></a>\n";
 
@@ -866,9 +853,7 @@ function comment_render($node, $cid = 0) {
         }
       }
 
-      // Use the standard pager; $pager_total is the number of returned rows,
-      // is global and defined in pager.inc.
-      $output .= theme('pager', NULL, $comments_per_page, 0, array('comments_per_page' => $comments_per_page));
+      $output .= theme('pager', NULL, $comments_per_page, 0);
 
       if (db_num_rows($result) && (variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_BELOW || variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_ABOVE_BELOW)) {
         $output .= comment_controls($mode, $order, $comments_per_page);
@@ -1672,6 +1657,49 @@ function _comment_per_page() {
   return drupal_map_assoc(array(10, 30, 50, 70, 90, 150, 200, 250, 300));
 }
 
+/**
+ * Return a current comment display setting
+ *
+ * $setting can be one of these: 'mode', 'sort', 'comments_per_page'
+ */
+function _comment_get_display_setting($setting) {
+  global $user;
+  
+  if ($_GET[$setting]) {
+    $value = $_GET[$setting];
+  }
+  else {
+    // get the setting's site default
+    switch ($setting) {
+      case 'mode':
+        $default = variable_get('comment_default_mode', COMMENT_MODE_THREADED_EXPANDED);
+        break;
+      case 'sort':
+        $default = variable_get('comment_default_order', COMMENT_ORDER_NEWEST_FIRST);
+        break;
+      case 'comments_per_page':
+        $default = variable_get('comment_default_per_page', '50');
+    }
+    if (variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_HIDDEN) {
+      // if comment controls are disabled use site default
+      $value = $default;
+    }
+    else {
+      // otherwise use the user's setting if set
+      if ($user->$setting) {
+        $value = $user->$setting;
+      }
+      else if ($_SESSION['comment_'. $setting]) {
+        $value = $_SESSION['comment_'. $setting];
+      }
+      else {
+        $value = $default;
+      }
+    }
+  }
+  return $value;
+}
+
 /**
  * Updates the comment statistics for a given node.  This should be called any
  * time a comment is added, deleted, or updated.
diff --git a/modules/comment/comment.module b/modules/comment/comment.module
index afaf5492f968c3c4683e5d0416683de142733e13..83fae38b7b28e1c97c712512b1e5c67f999c50cd 100644
--- a/modules/comment/comment.module
+++ b/modules/comment/comment.module
@@ -19,16 +19,16 @@
 /**
  * Constants to define the viewing modes for comment listings
  */
-define('COMMENT_MODE_FLAT_COLLAPSED', 0);
-define('COMMENT_MODE_FLAT_EXPANDED', 1);
-define('COMMENT_MODE_THREADED_COLLAPSED', 2);
-define('COMMENT_MODE_THREADED_EXPANDED', 3);
+define('COMMENT_MODE_FLAT_COLLAPSED', 1);
+define('COMMENT_MODE_FLAT_EXPANDED', 2);
+define('COMMENT_MODE_THREADED_COLLAPSED', 3);
+define('COMMENT_MODE_THREADED_EXPANDED', 4);
 
 /**
  * Constants to define the viewing orders for comment listings
  */
-define('COMMENT_ORDER_NEWEST_FIRST', 0);
-define('COMMENT_ORDER_OLDEST_FIRST', 1);
+define('COMMENT_ORDER_NEWEST_FIRST', 1);
+define('COMMENT_ORDER_OLDEST_FIRST', 2);
 
 /**
  * Constants to define the position of the comment controls
@@ -696,11 +696,6 @@ function comment_links($comment, $return = 1) {
 function comment_render($node, $cid = 0) {
   global $user;
 
-  $mode = $_GET['mode'];
-  $order = $_GET['order'];
-  $comments_per_page = $_GET['comments_per_page'];
-  $comment_page = $_GET['comment_page'];
-
   $output = '';
 
   if (user_access('access comments')) {
@@ -710,17 +705,9 @@ function comment_render($node, $cid = 0) {
       $nid = 0;
     }
 
-    if (!isset($mode)) {
-      $mode = isset($user->mode) ? $user->mode : (isset($_SESSION['comment_mode']) ? $_SESSION['comment_mode'] : variable_get('comment_default_mode', COMMENT_MODE_THREADED_EXPANDED));
-    }
-
-    if (!isset($order)) {
-      $order = isset($user->sort) ? $user->sort : (isset($_SESSION['comment_sort']) ? $_SESSION['comment_sort'] : variable_get('comment_default_order', COMMENT_ORDER_NEWEST_FIRST));
-    }
-
-    if (empty($comments_per_page)) {
-      $comments_per_page = $user->comments_per_page ? $user->comments_per_page : ($_SESSION['comment_comments_per_page'] ? $_SESSION['comment_comments_per_page'] : variable_get('comment_default_per_page', '50'));
-    }
+    $mode = _comment_get_display_setting('mode');
+    $order = _comment_get_display_setting('sort');
+    $comments_per_page = _comment_get_display_setting('comments_per_page');
 
     $output .= "<a id=\"comment\"></a>\n";
 
@@ -866,9 +853,7 @@ function comment_render($node, $cid = 0) {
         }
       }
 
-      // Use the standard pager; $pager_total is the number of returned rows,
-      // is global and defined in pager.inc.
-      $output .= theme('pager', NULL, $comments_per_page, 0, array('comments_per_page' => $comments_per_page));
+      $output .= theme('pager', NULL, $comments_per_page, 0);
 
       if (db_num_rows($result) && (variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_BELOW || variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_ABOVE_BELOW)) {
         $output .= comment_controls($mode, $order, $comments_per_page);
@@ -1672,6 +1657,49 @@ function _comment_per_page() {
   return drupal_map_assoc(array(10, 30, 50, 70, 90, 150, 200, 250, 300));
 }
 
+/**
+ * Return a current comment display setting
+ *
+ * $setting can be one of these: 'mode', 'sort', 'comments_per_page'
+ */
+function _comment_get_display_setting($setting) {
+  global $user;
+  
+  if ($_GET[$setting]) {
+    $value = $_GET[$setting];
+  }
+  else {
+    // get the setting's site default
+    switch ($setting) {
+      case 'mode':
+        $default = variable_get('comment_default_mode', COMMENT_MODE_THREADED_EXPANDED);
+        break;
+      case 'sort':
+        $default = variable_get('comment_default_order', COMMENT_ORDER_NEWEST_FIRST);
+        break;
+      case 'comments_per_page':
+        $default = variable_get('comment_default_per_page', '50');
+    }
+    if (variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_HIDDEN) {
+      // if comment controls are disabled use site default
+      $value = $default;
+    }
+    else {
+      // otherwise use the user's setting if set
+      if ($user->$setting) {
+        $value = $user->$setting;
+      }
+      else if ($_SESSION['comment_'. $setting]) {
+        $value = $_SESSION['comment_'. $setting];
+      }
+      else {
+        $value = $default;
+      }
+    }
+  }
+  return $value;
+}
+
 /**
  * Updates the comment statistics for a given node.  This should be called any
  * time a comment is added, deleted, or updated.