--- includes/pager.inc.old	2007-04-12 19:23:12.000000000 +1000
+++ includes/pager.inc	2007-04-12 20:04:23.000000000 +1000
@@ -60,19 +60,28 @@
     $args = $args[0];
   }
 
-  // Construct a count query if none was given.
-  if (!isset($count_query)) {
-    $count_query = preg_replace(array('/SELECT.*?FROM /As', '/ORDER BY .*/'), array('SELECT COUNT(*) FROM ', ''), $query);
-  }
-
   // Convert comma-separated $page to an array, used by other functions.
   $pager_page_array = explode(',', $page);
 
+  // Execute the query
+  $results = db_query_range($query, $args, $pager_page_array[$element] * $limit, $limit);
+  $num_results = db_num_rows($results);
+  if ($num_results == $limit) {
+    // Construct a count query if none was given.
+    if (!isset($count_query)) {
+      $count_query = preg_replace(array('/SELECT.*?FROM /As', '/ORDER BY .*/'), array('SELECT COUNT(*) FROM ', ''), $query);
+    }
+    $pager_total_items[$element] = db_result(db_query($count_query, $args));
+  }
+  else {
+    // We know exactly how many results there are without asking the DB
+    $pager_total_items[$element] = $pager_page_array[$element] * $limit + $num_results;
+  }
+
   // We calculate the total of pages as ceil(items / limit).
-  $pager_total_items[$element] = db_result(db_query($count_query, $args));
   $pager_total[$element] = ceil($pager_total_items[$element] / $limit);
   $pager_page_array[$element] = max(0, min((int)$pager_page_array[$element], ((int)$pager_total[$element]) - 1));
-  return db_query_range($query, $args, $pager_page_array[$element] * $limit, $limit);
+  return $results;
 }
 
 /**
