diff --git includes/common.inc includes/common.inc
index f5508c5..bad8984 100644
--- includes/common.inc
+++ includes/common.inc
@@ -3263,7 +3263,12 @@ function drupal_alter($type, &$data) {
 function drupal_get_page($content = NULL) {
   // Initialize page array with defaults. @see hook_elements() - 'page' element.
   $page = element_info('page');
-  $page['content'] = is_array($content) ? $content : array('main' => array('#markup' => $content));
+  system_set_content_block($content);
+
+  // UNCOMMENT this if you try this patch without re-installation. Then
+  // put the main content block into the content region and then comment
+  // this out again (or your content will be printed twice).
+  // $page['content'] = is_array($content) ? $content : array('main' => array('#markup' => $content));
 
   return $page;
 }
diff --git includes/theme.inc includes/theme.inc
index a5cd31d..7fd2125 100644
--- includes/theme.inc
+++ includes/theme.inc
@@ -2035,16 +2035,20 @@ function template_preprocess_node(&$variables) {
  */
 function template_preprocess_block(&$variables) {
   static $block_counter = array();
-  $variables['block'] = $variables['block']['#block'];
+  $block = $variables['block'] = $variables['block']['#block'];
   // All blocks get an independent counter for each region.
-  if (!isset($block_counter[$variables['block']->region])) {
-    $block_counter[$variables['block']->region] = 1;
+  if (!isset($block_counter[$block->region])) {
+    $block_counter[$block->region] = 1;
   }
   // Same with zebra striping.
-  $variables['block_zebra'] = ($block_counter[$variables['block']->region] % 2) ? 'odd' : 'even';
-  $variables['block_id'] = $block_counter[$variables['block']->region]++;
+  $variables['block_zebra'] = ($block_counter[$block->region] % 2) ? 'odd' : 'even';
+  $variables['block_id'] = $block_counter[$block->region]++;
 
-  $variables['template_files'][] = 'block-' . $variables['block']->region;
-  $variables['template_files'][] = 'block-' . $variables['block']->module;
-  $variables['template_files'][] = 'block-' . $variables['block']->module . '-' . $variables['block']->delta;
+  $variables['content'] = is_array($block->content) ? drupal_render($block->content) : $block->content;
+  $variables['subject'] = $block->subject;
+  $variables['id'] = 'block-' . $block->module . '-' . $block->delta;
+
+  $variables['template_files'][] = 'block-' . $block->region;
+  $variables['template_files'][] = 'block-' . $block->module;
+  $variables['template_files'][] = 'block-' . $block->module . '-' . $block->delta;
 }
diff --git modules/system/block.tpl.php modules/system/block.tpl.php
index 412000b..1b20011 100644
--- modules/system/block.tpl.php
+++ modules/system/block.tpl.php
@@ -6,8 +6,9 @@
  * Default theme implementation to display a block.
  *
  * Available variables:
- * - $block->subject: Block title.
- * - $block->content: Block content.
+ * - $subject: Block title.
+ * - $content: Block content.
+ * - $id: HTML ID property for the block, composed of the block's module and delta.
  * - $block->module: Module that generated the block.
  * - $block->delta: An ID for the block, unique within each module.
  * - $block->region: The block region embedding the current block.
@@ -25,12 +26,12 @@
  * @see template_preprocess_block()
  */
 ?>
-<div id="block-<?php print $block->module . '-' . $block->delta; ?>" class="block block-<?php print $block->module ?>">
-<?php if ($block->subject): ?>
-  <h2><?php print $block->subject ?></h2>
+<div id="<?php print $id; ?>" class="block block-<?php print $block->module ?>">
+<?php if ($subject): ?>
+  <h2><?php print $subject ?></h2>
 <?php endif;?>
 
   <div class="content">
-    <?php print $block->content ?>
+    <?php print $content ?>
   </div>
 </div>
diff --git modules/system/system.install modules/system/system.install
index 1667074..cd9f006 100644
--- modules/system/system.install
+++ modules/system/system.install
@@ -3263,6 +3263,15 @@ function system_update_7020() {
 }
 
 /**
+ * Enable the main content block.
+ */
+function system_update_7021() {
+  $ret = array();
+  db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'system', 'main', 'garland', 1, 0, 'content', '', -1);
+  return $ret;
+}
+
+/**
  * @} End of "defgroup updates-6.x-to-7.x"
  * The next series of updates should start at 8000.
  */
diff --git modules/system/system.module modules/system/system.module
index 3cb93a6..3d4f1f5 100644
--- modules/system/system.module
+++ modules/system/system.module
@@ -881,6 +881,11 @@ function system_user_timezone(&$edit, &$form) {
  * Implementation of hook_block_list().
  */
 function system_block_list() {
+  $blocks['main'] = array(
+    'info' => t('Main page content'),
+     // Cached elsewhere.
+    'cache' => BLOCK_NO_CACHE,
+  );
   $blocks['powered-by'] = array(
     'info' => t('Powered by Drupal'),
     'weight' => '10',
@@ -946,6 +951,10 @@ function system_block_save($delta = '', $edit = NULL) {
 function system_block_view($delta = '') {
   $block = array();
   switch ($delta) {
+    case 'main':
+      $block['subject'] = NULL;
+      $block['content'] = system_set_content_block();
+      return $block;
     case 'powered-by':
       $image_path = 'misc/' . variable_get('drupal_badge_color', 'powered-blue') . '-' . variable_get('drupal_badge_size', '80x15') . '.png';
       // Don't display a title.
@@ -965,6 +974,23 @@ function system_block_view($delta = '') {
 }
 
 /**
+ * Memory for the page content so that it can be put into a region as a block.
+ *
+ * Given the nature of the Drupal page handling, this will be called once with
+ * a string or array. We store that and return it later as the block is being
+ * displayed.
+ */
+function system_set_content_block($content = NULL) {
+  $content_block = &drupal_static(__FUNCTION__, NULL);
+  if (!empty($content)) {
+    $content_block = (is_array($content) ? $content : array('main' => array('#markup' => $content)));
+  }
+  else {
+    return $content_block;
+  }
+}
+
+/**
  * Provide a single block on the administration overview page.
  *
  * @param $item
diff --git profiles/default/default.profile profiles/default/default.profile
index c069f38..724255b 100644
--- profiles/default/default.profile
+++ profiles/default/default.profile
@@ -91,7 +91,8 @@ function default_profile_task_list() {
  */
 function default_profile_tasks(&$task, $url) {
   
-  // Enable 4 standard blocks.
+  // Enable 5 standard blocks.
+  db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'system', 'main', 'garland', 1, 0, 'content', '', -1);
   db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'user', 'login', 'garland', 1, 0, 'left', '', -1);
   db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'system', 'navigation', 'garland', 1, 0, 'left', '', -1);
   db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'system', 'management', 'garland', 1, 1, 'left', '', -1);
diff --git profiles/expert/expert.profile profiles/expert/expert.profile
index b7e71fc..a919c39 100644
--- profiles/expert/expert.profile
+++ profiles/expert/expert.profile
@@ -42,7 +42,8 @@ function expert_profile_task_list() {
  * Perform any final installation tasks for this profile.
  */
 function expert_profile_tasks(&$task, $url) {
-  // Enable 3 standard blocks.
+  // Enable 4 standard blocks.
+  db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'system', 'main', 'garland', 1, 0, 'content', '', -1);
   db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'user', 'login', 'garland', 1, 0, 'left', '', -1);
   db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'system', 'navigation', 'garland', 1, 0, 'left', '', -1);
   db_query("INSERT INTO {block} (module, delta, theme, status, weight, region, pages, cache) VALUES ('%s', '%s', '%s', %d, %d, '%s', '%s', %d)", 'system', 'management', 'garland', 1, 1, 'left', '', -1);
diff --git themes/garland/block.tpl.php themes/garland/block.tpl.php
index 9a0025c..7481d03 100644
--- themes/garland/block.tpl.php
+++ themes/garland/block.tpl.php
@@ -1,11 +1,11 @@
 <?php
 // $Id: block.tpl.php,v 1.5 2009-02-18 14:28:25 webchick Exp $
 ?>
-<div id="block-<?php print $block->module . '-' . $block->delta; ?>" class="clearfix block block-<?php print $block->module ?>">
+<div id="<?php print $id; ?>" class="clearfix block block-<?php print $block->module ?>">
 
-<?php if (!empty($block->subject)): ?>
-  <h2><?php print $block->subject ?></h2>
+<?php if (!empty($subject)): ?>
+  <h2><?php print $subject ?></h2>
 <?php endif;?>
 
-  <div class="content"><?php print $block->content ?></div>
+  <div class="content"><?php print $content ?></div>
 </div>
