diff --git a/core/modules/aggregator/aggregator.module b/core/modules/aggregator/aggregator.module
index bd0c6c1..204de22 100644
--- a/core/modules/aggregator/aggregator.module
+++ b/core/modules/aggregator/aggregator.module
@@ -365,7 +365,7 @@ function aggregator_block_info() {
 /**
  * Implements hook_block_configure().
  */
-function aggregator_block_configure($delta = '') {
+function aggregator_block_configure($delta = '', &$form_state = array()) {
   list($type, $id) = explode('-', $delta);
   if ($type == 'category') {
     $value = db_query('SELECT block FROM {aggregator_category} WHERE cid = :cid', array(':cid' => $id))->fetchField();
diff --git a/core/modules/block/block.admin.inc b/core/modules/block/block.admin.inc
index 2b3c2dd..957a763 100644
--- a/core/modules/block/block.admin.inc
+++ b/core/modules/block/block.admin.inc
@@ -290,7 +290,7 @@ function block_admin_configure($form, &$form_state, $module, $delta) {
   );
 
   // Module-specific block configuration.
-  if ($settings = module_invoke($block->module, 'block_configure', $block->delta)) {
+  if ($settings = block_configure_invoke($block->module, $block->delta, $form_state)) {
     foreach ($settings as $k => $v) {
       $form['settings'][$k] = $v;
     }
@@ -529,6 +529,31 @@ function block_admin_configure_submit($form, &$form_state) {
 }
 
 /**
+ * Invokes the block configuration hook.
+ *
+ * Since module_invoke() cannot pass arguments by reference, we have to use a
+ * custom function.
+ *
+ * @param string $module
+ *   The name of the module.
+ * @param string $delta
+ *   The unique identifier for the block.
+ * @param array &$form_state
+ *   The current form state, passed by reference.
+ *
+ * @return array
+ *   An array of block configuration form elements, if the module implemented
+ *   hook_block_configure(). FALSE, otherwise.
+ */
+function block_configure_invoke($module, $delta, &$form_state) {
+  $function = $module . '_block_configure';
+  if (function_exists($function)) {
+    return $function($delta, $form_state);
+  }
+  return FALSE;
+}
+
+/**
  * Form constructor for the add block form.
  *
  * Path: admin/structure/block/add
diff --git a/core/modules/block/block.api.php b/core/modules/block/block.api.php
index d33f594..60d183d 100644
--- a/core/modules/block/block.api.php
+++ b/core/modules/block/block.api.php
@@ -136,6 +136,8 @@ function hook_block_info_alter(&$blocks, $theme, $code_blocks) {
  * @param $delta
  *   Which block is being configured. This is a unique identifier for the block
  *   within the module, defined in hook_block_info().
+ * @param $form_state
+ *   The current state of the form, passed by reference.
  *
  * @return
  *   A configuration form, if one is needed for your block beyond the standard
@@ -146,7 +148,7 @@ function hook_block_info_alter(&$blocks, $theme, $code_blocks) {
  * @see hook_block_info()
  * @see hook_block_save()
  */
-function hook_block_configure($delta = '') {
+function hook_block_configure($delta = '', &$form_state = array()) {
   // This example comes from node.module.
   $form = array();
   if ($delta == 'recent') {
diff --git a/core/modules/block/block.module b/core/modules/block/block.module
index 4d942ed..dd9c6cf 100644
--- a/core/modules/block/block.module
+++ b/core/modules/block/block.module
@@ -231,7 +231,7 @@ function block_block_info() {
 /**
  * Implements hook_block_configure().
  */
-function block_block_configure($delta = 0) {
+function block_block_configure($delta = 0, &$form_state = array()) {
   if ($delta) {
     $custom_block = block_custom_block_get($delta);
   }
diff --git a/core/modules/book/book.module b/core/modules/book/book.module
index ab57d38..4b4f131 100644
--- a/core/modules/book/book.module
+++ b/core/modules/book/book.module
@@ -322,7 +322,7 @@ function book_block_view($delta = '') {
 /**
  * Implements hook_block_configure().
  */
-function book_block_configure($delta = '') {
+function book_block_configure($delta = '', &$form_state = array()) {
   $block = array();
   $options = array(
     'all pages' => t('Show block on all pages'),
diff --git a/core/modules/comment/comment.module b/core/modules/comment/comment.module
index 7793499..eca7eed 100644
--- a/core/modules/comment/comment.module
+++ b/core/modules/comment/comment.module
@@ -428,7 +428,7 @@ function comment_block_info() {
 /**
  * Implements hook_block_configure().
  */
-function comment_block_configure($delta = '') {
+function comment_block_configure($delta = '', &$form_state = array()) {
   $form['comment_block_count'] = array(
     '#type' => 'select',
     '#title' => t('Number of recent comments'),
diff --git a/core/modules/forum/forum.module b/core/modules/forum/forum.module
index 3575bfd..8acb81b 100644
--- a/core/modules/forum/forum.module
+++ b/core/modules/forum/forum.module
@@ -635,7 +635,7 @@ function forum_block_info() {
 /**
  * Implements hook_block_configure().
  */
-function forum_block_configure($delta = '') {
+function forum_block_configure($delta = '', &$form_state = array()) {
   $form['forum_block_num_' . $delta] = array('#type' => 'select', '#title' => t('Number of topics'), '#default_value' => variable_get('forum_block_num_' . $delta, '5'), '#options' => drupal_map_assoc(array(2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)));
   return $form;
 }
diff --git a/core/modules/node/node.module b/core/modules/node/node.module
index 7c25666..3fffc0d 100644
--- a/core/modules/node/node.module
+++ b/core/modules/node/node.module
@@ -2246,7 +2246,7 @@ function node_block_view($delta = '') {
 /**
  * Implements hook_block_configure().
  */
-function node_block_configure($delta = '') {
+function node_block_configure($delta = '', &$form_state = array()) {
   $form = array();
   if ($delta == 'recent') {
     $form['node_recent_block_count'] = array(
diff --git a/core/modules/statistics/statistics.module b/core/modules/statistics/statistics.module
index 4f72553..4fff509 100644
--- a/core/modules/statistics/statistics.module
+++ b/core/modules/statistics/statistics.module
@@ -322,7 +322,7 @@ function statistics_block_info() {
 /**
  * Implements hook_block_configure().
  */
-function statistics_block_configure($delta = '') {
+function statistics_block_configure($delta = '', &$form_state = array()) {
   // Popular content block settings
   $numbers = array('0' => t('Disabled')) + drupal_map_assoc(array(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 15, 20, 25, 30, 40));
   $form['statistics_block_top_day_num'] = array('#type' => 'select', '#title' => t("Number of day's top views to display"), '#default_value' => variable_get('statistics_block_top_day_num', 0), '#options' => $numbers, '#description' => t('How many content items to display in "day" list.'));
diff --git a/core/modules/user/user.module b/core/modules/user/user.module
index 2dded35..4294128 100644
--- a/core/modules/user/user.module
+++ b/core/modules/user/user.module
@@ -1259,7 +1259,7 @@ function user_block_info() {
 /**
  * Implements hook_block_configure().
  */
-function user_block_configure($delta = '') {
+function user_block_configure($delta = '', &$form_state = array()) {
   global $user;
 
   switch ($delta) {
