diff --git a/examples.index.php b/examples.index.php
index beab81a..f47b11a 100644
--- a/examples.index.php
+++ b/examples.index.php
@@ -21,6 +21,7 @@
  * - @link node_access_example.module Define custom node access fules using node access hooks @endlink
  * - @link node_example.module Creating custom node types, with fields @endlink
  * - @link page_example.module Creating a custom page @endlink
+ * - @link pager_example.module Using a table with a pager @endlink
  * - @link queue_example.module Using the Queue API @endlink
  * - @link render_example.module Demonstrates the render API @endlink
  * - @link simpletest_example.module Writing tests for Drupal @endlink
@@ -28,4 +29,4 @@
  * - @link trigger_example.module Implementing triggers and actions @endlink
  * - @link vertical_tabs_example.module Using vertical tabs @endlink
  * - @link xmlrpc_example.module XML-RPC example @endlink
- */
\ No newline at end of file
+ */
diff --git a/pager_example/pager_example.info b/pager_example/pager_example.info
new file mode 100644
index 0000000..78d4ff1
--- /dev/null
+++ b/pager_example/pager_example.info
@@ -0,0 +1,5 @@
+name = Pager example
+description = Demonstrates a page with content in a pager
+package = Example modules
+core = 7.x
+files[] = pager_example.test
diff --git a/pager_example/pager_example.module b/pager_example/pager_example.module
new file mode 100644
index 0000000..959dd87
--- /dev/null
+++ b/pager_example/pager_example.module
@@ -0,0 +1,87 @@
+<?php
+// $Id$
+/**
+ * @file
+ * This is an example describing how a module can implement a pager in order
+ * to reduce the number of output rows to the screen and allow a user
+ * to scroll through multiple screens of output.
+ *
+ * See:
+ * @link http://drupal.org/developing/api/database Database API @endlink
+ * @link http://drupal.org/node/508796 Extenders @endlink
+ */
+
+/**
+ * Implements hook_help().
+ */
+function pager_help($path, $arg) {
+  switch ($path) {
+    case 'examples/pager_example':
+      return '<p>' . t('The layout here is a themed as a table with a default limit of 10 rows per page. The limit can be changed in the code by changing the limit to some other value.  This can be extended to add a filter form as well so the user can choose how many they would like to see on each screen.') . '</p>';
+  }
+}
+
+/**
+ * Implements hook_menu().
+ */
+function pager_example_menu() {
+  $items['examples/pager_example'] = array(
+    'title' => 'Pager example',
+    'description' => 'Show a page with a long list across multiple pages',
+    'page callback' => 'pager_example_page',
+    'access callback' => TRUE
+  );
+  return $items;
+}
+
+/**
+ * Build the pager query
+ *
+ * Uses the date_formats table since it is installed with ~35 rows
+ * in it and we don't have to create fake data in order to show
+ * this example.
+ *
+ * @return
+ *   A render array completely set up with a pager.
+ */
+function pager_example_page() {
+  // we are going to output the results in a table with a nice header
+  $header = array(
+    array('data' => t('DFID')),
+    array('data' => t('Format')),
+    array('data' => t('Type')),
+  );
+
+  // we are extending the PagerDefault class here
+  // it has a default of 10 rows per page
+  // the extend('PagerDefault') part here does all the magic.
+  $query = db_select('date_formats', 'd')->extend('PagerDefault');
+  $query->fields('d', array('dfid', 'format', 'type'));
+
+  $result = $query
+    ->limit(10)         // this is where you change the number of rows
+    ->orderBy('d.dfid')
+    ->execute();
+
+  $rows = array();
+  foreach ($result as $row) {
+    // normally we would add some nice formatting to our rows
+    // but for our purpose we are simply going to add our row
+    // to the array.
+    $rows[] = array('data' => (array) $row);
+  }
+
+  // Create a render array ($build) which will be themed as a table with a
+  // pager.
+  $build['pager_table'] = array(
+    '#theme' => 'table',
+    '#header' => $header,
+    '#rows' => $rows,
+    '#empty' => t('There are no date formats found in the db'),
+  );
+
+  // attach the pager theme
+  $build['pager_pager'] = array('#theme' => 'pager');
+
+  return $build;
+}
diff --git a/pager_example/pager_example.test b/pager_example/pager_example.test
new file mode 100644
index 0000000..bee8dca
--- /dev/null
+++ b/pager_example/pager_example.test
@@ -0,0 +1,50 @@
+<?php
+// $Id$
+/**
+ * @file
+ * Simpletest case for pager_example module.
+ */
+
+/**
+ * Functionality tests for the pager example module.
+ */
+class PagerExampleTestCase extends DrupalWebTestCase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Pager Example',
+      'description' => 'Verify the pager functionality',
+      'group' => 'Examples',
+    );
+  }
+
+  function setUp() {
+    // Enable the module.
+    parent::setUp('pager_example');
+  }
+
+  /**
+   * Verify the functionality of the example module.
+   */
+  function testPagerPage() {
+    // no need to login for this test
+    $this->drupalGet('examples/pager_example');
+    $this->assertText('next', 'Found next link');
+    $this->assertText('last', 'Found last link');
+
+    // on the first page we shouldn't see the first
+    // or previous links
+    $this->assertNoText('first', 'No first link on the first page');
+    $this->assertNoText('previous', 'No previous link on the first page');
+
+    // lets go to the second page
+    $this->drupalGet('examples/pager_example', array('query' => array('page' => 1)));
+    $this->assertText('next', 'Found next link');
+    $this->assertText('last', 'Found last link');
+
+    // on the second page we should also see the first
+    // and previous links
+    $this->assertText('first', 'Found first link');
+    $this->assertText('previous', 'Found previous link');
+  }
+}
