diff --git render_example/render_example.info render_example/render_example.info
new file mode 100644
index 0000000..e3e0e20
--- /dev/null
+++ render_example/render_example.info
@@ -0,0 +1,6 @@
+; $Id$
+name = Render example
+description = Demonstrates drupal_render's capabilities and altering render arrays
+core = 7.x
+files[] = render_example.module
+dependencies[] = devel
diff --git render_example/render_example.install render_example/render_example.install
new file mode 100644
index 0000000..dec07f7
--- /dev/null
+++ render_example/render_example.install
@@ -0,0 +1,17 @@
+<?php
+// $Id$
+/**
+ * @file render_example.install
+ * Install/uninstall routines for render example.
+ */
+
+/**
+ * Implementation of hook_uninstall().
+ */
+function render_example_uninstall() {
+  variable_del('render_example_show_page');
+  variable_del('render_example_show_block');
+  variable_del('render_example_reverse_sidebar');
+  variable_del('render_example_note_about_render_arrays');
+  variable_del('render_example_move_navigation_menu');
+}
diff --git render_example/render_example.module render_example/render_example.module
new file mode 100644
index 0000000..b4090af
--- /dev/null
+++ render_example/render_example.module
@@ -0,0 +1,166 @@
+<?php
+// $Id$
+/**
+ * @file render_example.module
+ * Demonstrate how render arrays are arranged and how they can be altered.
+ * This alters forms, blocks, and the page to show the actual render array
+ * that is being used to create each item.
+ */
+
+/**
+ * Implementation of hook_menu().
+ */
+function render_example_menu() {
+  $items['examples/render_example'] = array(
+    'title' => 'Render Array Example',
+    'page callback' => 'drupal_get_form',
+    'page arguments' => array('render_example_demo_form'),
+    'access callback' => TRUE,
+  );
+
+  return $items;
+}
+
+
+/**
+ * Builds the form that offers options of what items to show.
+ */
+function render_example_demo_form($form, &$form_state) {
+  $form['description'] = array(
+    '#type' => 'markup',
+    '#markup' => t('This example shows what render arrays look like in the building of a page. It will not work unless the user running it has the "access devel information" privilege.'),
+  );
+
+  $form['show_arrays'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Show render arrays'),
+  );
+
+  foreach (array('block', 'page') as $type) {
+    $form['show_arrays']['render_example_show_' . $type] = array(
+      '#type' => 'checkbox',
+      '#title' => t('Show @type render arrays', array('@type' => $type)),
+      '#default_value' => variable_get('render_example_show_' . $type, FALSE),
+    );
+  }
+
+  $form['page_fiddling'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Make changes on page via hook_page_alter()'),
+  );
+  $form['page_fiddling']['render_example_reverse_sidebar'] = array(
+    '#title' => t('Reverse ordering of sidebar_first elements (if it exists)'),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('render_example_reverse_sidebar', FALSE),
+  );
+  $form['page_fiddling']['render_example_note_about_render_arrays'] = array(
+    '#title' => t('Add a note about render arrays to top of sidebar_first (if it exists)'),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('render_example_note_about_render_arrays', FALSE),
+  );
+  $form['page_fiddling']['render_example_move_navigation_menu'] = array(
+    '#title' => t('Move the navigation menu to the top of the content area'),
+    '#type' => 'checkbox',
+    '#default_value' => variable_get('render_example_move_navigation_menu', FALSE),
+  );
+
+  return system_settings_form($form);
+}
+
+/**
+ * Alters the page to add to the footer a demonstration of the render
+ * array that built it.
+ */
+function render_example_page_alter(&$page) {
+
+  // Re-sort the sidebar.
+  if (variable_get('render_example_reverse_sidebar', FALSE) && !empty($page['sidebar_first'])) {
+    $page['sidebar_first'] = array_reverse($page['sidebar_first']);
+    foreach(element_children($page['sidebar_first']) as $element) {
+      // Reverse the weights if they exist.
+      if (!empty($page['sidebar_first'][$element]['#weight'])) {
+        $page['sidebar_first'][$element]['#weight'] *= -1;
+      }
+    }
+    unset($page['sidebar_first']['#sorted']);
+  }
+
+  // Add a list of items to the top of sidebar_first.
+  if (variable_get('render_example_note_about_render_arrays', FALSE) && !empty($page['sidebar_first'])) {
+    $items = array(
+      t('Render arrays are everywhere in D7'),
+      t('Leave content unrendered as much as possible'),
+      t('This allows rearrangement and alteration very late in page cycle'),
+    );
+
+    $note = array(
+      '#title' => t('Render Array Example'),
+      '#items' => $items,
+      '#theme' => 'item_list',
+      '#weight' => -9999,
+    );
+    $page['sidebar_first']['render_array_note'] = $note;
+    unset($page['sidebar_first']['#sorted']);
+  }
+
+
+  // Move the navigation menu into the content area.
+  if (variable_get('render_example_move_navigation_menu', FALSE) && !empty($page['sidebar_first']['system_navigation']) && !empty($page['content'])) {
+    $page['content']['system_navigation'] = $page['sidebar_first']['system_navigation'];
+    $page['content']['system_navigation']['#weight'] = -99999;
+    unset($page['content']['#sorted']);
+    unset($page['sidebar_first']['system_navigation']);
+  }
+
+  // Show the render array used to build the page at the bottom of the page.
+  if (variable_get('render_example_show_page', FALSE)) {
+    $form['render_example_page_fieldset'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Page render array'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      '#weight' => 1000,
+    );
+    $form['render_example_page_fieldset']['markup'] = array(
+      '#markup' => kpr($page, TRUE),
+    );
+    $page['footer']['page_render_array'] = drupal_get_form('render_example_embedded_form', $form);
+  }
+}
+
+/**
+ * Alters block to add the render array that built it.
+ */
+function render_example_block_view_alter(&$block, $block_info) {
+	if (variable_get('render_example_show_block', FALSE) && !empty($block['content']) && is_array($block['content'])) {
+    $form['render_example_block_fieldset'] = array(
+      '#type' => 'fieldset',
+      '#title' => t('Block render array'),
+      '#collapsible' => TRUE,
+      '#collapsed' => TRUE,
+      '#weight' => 999,
+    );
+    $display = $block;
+    if (!empty($display['content']['render_example_form_fieldset'])) {
+      unset($display['content']['render_example_form_fieldset']);
+    }
+    $form['render_example_block_fieldset']['markup'] = array(
+      '#markup' => kpr($display, TRUE),
+    );
+    $block['content']['content_block_render_array'] = drupal_get_form('render_example_embedded_form', $form);
+  }
+}
+
+/**
+ * Utility function to build a named form given a set of form elements.
+ * This is a standard form builder function that takes an additional array,
+ * which is itself a form.
+ *
+ * @param $form
+ * @param $form_state
+ * @param $form_items
+ *   The form items to be included in this form.
+ */
+function render_example_embedded_form($form, &$form_state, $form_items) {
+  return $form_items;
+}
\ No newline at end of file
