=== added directory 'modules/pages'
=== added file 'modules/pages/pages.module'
--- /dev/null	
+++ modules/pages/pages.module	
@@ -0,0 +1,21 @@
+<?php
+
+function pages_menu($may_cache) {
+  if ($may_cache) {
+    return array(array('path' => 'pages', 'access' => user_access('access content'), 'title' => '', 'type' => MENU_CALLBACK, 'callback' => 'pages_page'));
+  }
+}
+
+function pages_page($path) {
+  // this line makes this module secure
+  $path = preg_replace('/[^a-zA-Z0-9_]/', '', strtolower($path));
+  $dir = drupal_get_path('module', 'pages');
+  $file = "./$dir/$path.inc";
+  if (file_exists($file)) {
+    drupal_set_title($path);
+    ob_start();
+    include_once($file);
+    $output = ob_get_clean();
+    print theme('page', $output);
+  }
+}
=== modified file 'modules/block.module'
--- modules/block.module	
+++ modules/block.module	
@@ -163,40 +163,38 @@ function _block_rehash($order_by = array
 
   db_query("DELETE FROM {blocks} WHERE theme = '%s'", $theme_key);
 
-  foreach (module_list() as $module) {
-    $module_blocks = module_invoke($module, 'block', 'list');
-    if ($module_blocks) {
-      foreach ($module_blocks as $delta => $block) {
-        $block['module'] = $module;
-        $block['delta']  = $delta;
-        // If previously written to database, load values.
-        if ($old_blocks[$module][$delta]) {
-          $block['status'] = $old_blocks[$module][$delta]->status;
-          $block['weight'] = $old_blocks[$module][$delta]->weight;
-          $block['region'] = $old_blocks[$module][$delta]->region;
-          $block['visibility'] = $old_blocks[$module][$delta]->visibility;
-          $block['pages'] = $old_blocks[$module][$delta]->pages;
-          $block['custom'] = $old_blocks[$module][$delta]->custom;
-          $block['throttle'] = $old_blocks[$module][$delta]->throttle;
-        }
-        // Otherwise, use any set values, or else substitute defaults.
-        else {
-          $properties = array ('status' => 0, 'weight' => 0, 'region' => 'left', 'pages' => '', 'custom' => 0);
-          foreach ($properties as $property => $default) {
-            if (!isset ($block[$property])) {
-              $block[$property] = $default;
-            }
+  foreach (module_implements('block') as $module) {
+    $module_blocks = block_get_list($module);
+    foreach ($module_blocks as $delta => $block) {
+      $block['module'] = $module;
+      $block['delta']  = $delta;
+      // If previously written to database, load values.
+      if ($old_blocks[$module][$delta]) {
+        $block['status'] = $old_blocks[$module][$delta]->status;
+        $block['weight'] = $old_blocks[$module][$delta]->weight;
+        $block['region'] = $old_blocks[$module][$delta]->region;
+        $block['visibility'] = $old_blocks[$module][$delta]->visibility;
+        $block['pages'] = $old_blocks[$module][$delta]->pages;
+        $block['custom'] = $old_blocks[$module][$delta]->custom;
+        $block['throttle'] = $old_blocks[$module][$delta]->throttle;
+      }
+      // Otherwise, use any set values, or else substitute defaults.
+      else {
+        $properties = array ('status' => 0, 'weight' => 0, 'region' => 'left', 'pages' => '', 'custom' => 0);
+        foreach ($properties as $property => $default) {
+          if (!isset ($block[$property])) {
+            $block[$property] = $default;
           }
         }
+      }
 
-        // reinsert blocks into table
-        db_query("INSERT INTO {blocks} (module, delta, theme, status, weight, region, visibility, pages, custom, throttle) VALUES ('%s', '%s', '%s', %d, %d, '%s', %d, '%s', %d, %d)",
-          $block['module'], $block['delta'], $theme_key, $block['status'], $block['weight'], $block['region'], $block['visibility'], $block['pages'], $block['custom'], $block['throttle']);
-        $blocks[] = $block;
+      // reinsert blocks into table
+      db_query("INSERT INTO {blocks} (module, delta, theme, status, weight, region, visibility, pages, custom, throttle) VALUES ('%s', '%s', '%s', %d, %d, '%s', %d, '%s', %d, %d)",
+        $block['module'], $block['delta'], $theme_key, $block['status'], $block['weight'], $block['region'], $block['visibility'], $block['pages'], $block['custom'], $block['throttle']);
+      $blocks[] = $block;
 
-        // build array to sort on
-        $order[$order_by[0]][] = $block[$order_by[0]];
-      }
+      // build array to sort on
+      $order[$order_by[0]][] = $block[$order_by[0]];
     }
   }
 
@@ -320,7 +318,8 @@ function block_admin_configure($module =
   $edit = db_fetch_array(db_query("SELECT pages, visibility, custom FROM {blocks} WHERE module = '%s' AND delta = '%s'", $module, $delta));
 
   // Module-specific block configurations.
-  if ($settings = module_invoke($module, 'block', 'configure', $delta)) {
+  $settings = module_invoke($module, 'block', 'configure', $delta);
+  if (isset($settings) && is_array($settings)) {
     $form['block_settings'] = array(
       '#type' => 'fieldset',
       '#title' => t('Block specific settings'),
@@ -333,7 +332,7 @@ function block_admin_configure($module =
   }
 
   // Get the block subject for the page title.
-  $info = module_invoke($module, 'block', 'list');
+  $info = block_get_list($module);
   drupal_set_title(t("'%name' block", array('%name' => $info[$delta]['info'])));
 
   // Standard block configurations.
@@ -531,7 +530,7 @@ function block_user($type, $edit, &$user
         $result = db_query('SELECT * FROM {blocks} WHERE status = 1 AND custom != 0 ORDER BY weight, module, delta');
         $form['block'] = array('#type' => 'fieldset', '#title' => t('Block configuration'), '#weight' => 3, '#collapsible' => TRUE, '#tree' => TRUE);
         while ($block = db_fetch_object($result)) {
-          $data = module_invoke($block->module, 'block', 'list');
+          $data = block_get_list($block->module);
           if ($data[$block->delta]['info']) {
             $return = TRUE;
             $form['block'][$block->module][$block->delta] = array('#type' => 'checkbox', '#title' => $data[$block->delta]['info'], '#default_value' => isset($user->block[$block->module][$block->delta]) ? $user->block[$block->module][$block->delta] : ($block->custom == 1));
@@ -612,10 +611,16 @@ function block_list($region) {
         // Check the current throttle status and see if block should be displayed
         // based on server load.
         if (!($block->throttle && (module_invoke('throttle', 'status') > 0))) {
-          $array = module_invoke($block->module, 'block', 'view', $block->delta);
-          if (isset($array) && is_array($array)) {
-            foreach ($array as $k => $v) {
-              $block->$k = $v;
+          $return = module_invoke($block->module, 'block', 'view', $block->delta);
+          if (isset($return)) {
+            if (is_array($return)) {
+              foreach ($return as $k => $v) {
+                $block->$k = $v;
+              }
+            }
+            else {
+              $block->subject = $block->module;
+              $block->content = $return;
             }
           }
         }
@@ -632,4 +637,11 @@ function block_list($region) {
   return $blocks[$region];
 }
 
+function block_get_list($module) {
+  $module_blocks = module_invoke($module, 'block', 'list');
+  if (!is_array($module_blocks)) {
+    $module_blocks = array(array('info' => $module));
+  }
+  return $module_blocks;
+}
 
