diff -r 005ea97b5200 webform.module
--- a/webform.module	Tue Dec 09 12:09:20 2008 +0300
+++ b/webform.module	Tue Dec 09 12:09:52 2008 +0300
@@ -2026,7 +2026,7 @@
       return webform_results_submissions($node, TRUE);
     case 'submissions':
     default :
-      return webform_results_submissions($node);
+      return webform_results_submissions($node, FALSE, TRUE);
       break;
   }
 }
diff -r 005ea97b5200 webform_report.inc
--- a/webform_report.inc	Tue Dec 09 12:09:20 2008 +0300
+++ b/webform_report.inc	Tue Dec 09 12:09:52 2008 +0300
@@ -12,18 +12,18 @@
 /**
  * Retrieve lists of submissions for a given webform.
  */
-function webform_results_submissions($node, $user_filter = FALSE) {
+function webform_results_submissions($node, $user_filter = FALSE, $paged = FALSE) {
   global $user;
 
   $header = theme('webform_results_submissions_header', $node);
   if ($user_filter) {
     drupal_set_title(t('Submissions for %user', array('%user' => $user->name)));
-    $submissions = webform_get_submissions($node->nid, $header, $user->uid);
+    $submissions = webform_get_submissions($node->nid, $header, $user->uid, $paged);
   }
   else {
-    $submissions = webform_get_submissions($node->nid, $header);
+    $submissions = webform_get_submissions($node->nid, $header, NULL, $paged);
   }
-  return theme('webform_results_submissions', $node, $submissions);
+  return theme('webform_results_submissions', $node, $submissions, $paged);
 }
 
 /**
@@ -54,7 +54,7 @@
  * @param $submissions
  *   An array of all submissions for this webform.
  */
-function theme_webform_results_submissions($node, $submissions) {
+function theme_webform_results_submissions($node, $submissions, $paged = FALSE) {
   global $user;
   // This header has to be generated seperately so we can add the SQL necessary
   // to sort the results.
@@ -88,6 +88,9 @@
   $output = theme('table', $header, $rows);
   if (arg(2) == 'submissions') {
     $output .= theme('links', array('webform' => array('title' => t('Go back to the form'), 'href' => 'node/'. $node->nid)));
+  }
+  if ($paged) {
+    $output .= theme('pager', NULL, 50, 0);
   }
   return $output;
 }
diff -r 005ea97b5200 webform_submissions.inc
--- a/webform_submissions.inc	Tue Dec 09 12:09:20 2008 +0300
+++ b/webform_submissions.inc	Tue Dec 09 12:09:52 2008 +0300
@@ -136,12 +136,30 @@
  * @return $submissions
  *   An array of submissions matching your filters.
  */
-function webform_get_submissions($nid, $header = NULL, $uid = NULL) {
+function webform_get_submissions($nid, $header = NULL, $uid = NULL, $paged = FALSE) {
+  $sids = NULL;
+  if ($paged) {
+    $pager_query = 'SELECT * FROM {webform_submissions} WHERE nid = %d';
+    if ($uid) {
+      $pager_query .= ' AND u.uid = %d';
+    }
+    $res = pager_query($pager_query, 50, 0, NULL, $nid, $uid);
+    $sids = array();
+    while ($row = db_fetch_object($res)) {
+      $sids[] = $row->sid;
+    }
+    $sids = implode($sids, ',');
+  }
+
   $query = 'SELECT s.*, sd.cid, sd.no, sd.data, u.name, u.mail, u.status '.
            'FROM {webform_submissions} s '.
            'LEFT JOIN {webform_submitted_data} sd ON sd.sid = s.sid '.
            'LEFT JOIN {users} u ON u.uid = s.uid '.
            'WHERE sd.nid = %d';
+
+  if ($paged) {
+    $query .= ' AND s.sid IN (%s)';
+  }
 
   if ($uid) {
     $query .= ' AND u.uid = %d';
@@ -158,7 +176,7 @@
     $query .= ' ORDER BY sid ASC, cid ASC, no ASC';
   }
 
-  $res = db_query($query, $nid, $uid);
+  $res = db_query($query, $nid, $sids, $uid);
   $submissions = array();
   $previous = array();
 
