diff --git a/misc.inc b/misc.inc
index cdb9db1..8e3a9ad 100644
--- a/misc.inc
+++ b/misc.inc
@@ -333,7 +333,12 @@ function mm_show_page() {
   if (!count($mmtids)) $mmtids = array($this_mmtid = mm_home_mmtid());
   $perms = mm_content_user_can($this_mmtid);
 
-  $output = _mm_render_pages($mmtids, $oarg_list, $err);
+  // Allow modules to affect the list of page IDs, etc. before they are
+  // rendered.
+  mm_module_invoke_all_array('mm_showpage_prerender', array(&$mmtids, &$oarg_list, &$err));
+  $output = !empty($mmtids) ? _mm_render_pages($mmtids, $oarg_list, $err) : array();
+  // Allow modules to affect the list of page IDs, etc. and output after render.
+  mm_module_invoke_all_array('mm_showpage_postrender', array(&$mmtids, &$oarg_list, &$err, &$output));
   $links = array();
 
   if ($perms[MM_PERMS_IS_RECYCLED]) {
diff --git a/mm_api.inc b/mm_api.inc
index bdedb85..160c625 100644
--- a/mm_api.inc
+++ b/mm_api.inc
@@ -226,6 +226,38 @@ function hook_mm_node_info() {
 }
 
 /**
+ * Alter the values used by mm_show_page() prior to the rendering of MM
+ * pages.
+ */
+function hook_mm_showpage_prerender(&$mmtids, &$oarg_list, &$err) {
+  // Set what MM considers to be the current page to 123.
+  $mmtids[] = 123;
+}
+
+/**
+ * Alter the values used by mm_show_page(), as well as rendered page output,
+ * after _mm_render_pages() has been invoked.
+ */
+function hook_mm_showpage_postrender(&$mmtids, &$oarg_list, &$err, &$output) {
+  // Add an arbitrary "Like" link to Facebook.com to every content item.
+  foreach ($output as &$content) {
+    $content['share_links'] = array(
+      '#theme' => 'links',
+      'links' => array(
+        'fb' => array(
+          'title' => t('Like'),
+          'href' => 'http://www.facebook.com',
+        ),
+      ),
+    );
+  }
+  // Add some content to the page, for no apparent reason.
+  $output['some_content'] = array(
+    '#markup' => t('Some content thrown onto the end of every single page.'),
+  );
+}
+
+/**
  * Define one or more functions to be called whenever MM renders nodes at a
  * particular part of the tree. Output can be appended to, pre-pended to, or
  * completely replace the normal list of nodes.
