diff --git a/modules/aggregator/aggregator.module b/modules/aggregator/aggregator.module
index 70f8c5c..b27ce83 100644
--- a/modules/aggregator/aggregator.module
+++ b/modules/aggregator/aggregator.module
@@ -361,7 +361,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/modules/block/block.admin.inc b/modules/block/block.admin.inc
index bd61790..a1c8d36 100644
--- a/modules/block/block.admin.inc
+++ b/modules/block/block.admin.inc
@@ -279,7 +279,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;
     }
@@ -440,6 +440,31 @@ function block_admin_configure($form, &$form_state, $module, $delta) {
 }
 
 /**
+ * Invokes the block configuration hook.
+ *
+ * Since module_invoke() cannot pass arguments by reference, we have to use a
+ * custom function.
+ *
+ * @param $module
+ *   The name of the module.
+ * @param $delta
+ *   The unique identifier for the block.
+ * @param $form_state
+ *   The current form state, passed by reference.
+ *
+ * @return
+ *   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 validation handler for block_admin_configure().
  *
  * @see block_admin_configure()
diff --git a/modules/block/block.api.php b/modules/block/block.api.php
index 312eb11..b7bd478 100644
--- a/modules/block/block.api.php
+++ b/modules/block/block.api.php
@@ -144,6 +144,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
@@ -154,7 +156,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/modules/block/block.module b/modules/block/block.module
index 3a988de..9e5662b 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -217,7 +217,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/modules/blog/blog.module b/modules/blog/blog.module
index 11e3ab9..d508e8c 100644
--- a/modules/blog/blog.module
+++ b/modules/blog/blog.module
@@ -203,7 +203,7 @@ function blog_block_info() {
 /**
  * Implements hook_block_configure().
  */
-function blog_block_configure($delta = '') {
+function blog_block_configure($delta = '', &$form_state = array()) {
   if ($delta == 'recent') {
     $form['blog_block_count'] = array(
       '#type' => 'select',
diff --git a/modules/book/book.module b/modules/book/book.module
index 7afed9a..ba17644 100644
--- a/modules/book/book.module
+++ b/modules/book/book.module
@@ -326,7 +326,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/modules/comment/comment.module b/modules/comment/comment.module
index a83069f..4f3548b 100644
--- a/modules/comment/comment.module
+++ b/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/modules/forum/forum.module b/modules/forum/forum.module
index 575de36..6744875 100644
--- a/modules/forum/forum.module
+++ b/modules/forum/forum.module
@@ -659,7 +659,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'),
diff --git a/modules/node/node.module b/modules/node/node.module
index 2680762..b1006c0 100644
--- a/modules/node/node.module
+++ b/modules/node/node.module
@@ -2285,7 +2285,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/modules/profile/profile.module b/modules/profile/profile.module
index d76d08a..d988c58 100644
--- a/modules/profile/profile.module
+++ b/modules/profile/profile.module
@@ -145,7 +145,7 @@ function profile_menu() {
 /**
  * Implements hook_block_configure().
  */
-function profile_block_configure($delta = '') {
+function profile_block_configure($delta = '', &$form_state = array()) {
   // Compile a list of fields to show
   $fields = array();
   $result = db_query('SELECT name, title, weight, visibility FROM {profile_field} WHERE visibility IN (:visibility) ORDER BY weight', array(':visibility' => array(PROFILE_PUBLIC, PROFILE_PUBLIC_LISTINGS)));
diff --git a/modules/statistics/statistics.module b/modules/statistics/statistics.module
index 81d24b7..9674262 100644
--- a/modules/statistics/statistics.module
+++ b/modules/statistics/statistics.module
@@ -323,7 +323,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/modules/user/user.module b/modules/user/user.module
index 5124207..8ecbad1 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -1354,7 +1354,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) {
