diff --git a/modules/block/block.admin.inc b/modules/block/block.admin.inc
index 3981de9..2d32395 100644
--- a/modules/block/block.admin.inc
+++ b/modules/block/block.admin.inc
@@ -238,17 +238,14 @@ function _block_compare($a, $b) {
  *
  * Also used by block_add_block_form() for adding a new custom block.
  *
- * @param $module
- *   Name of the module that implements the block to be configured.
- * @param $delta
- *   Unique ID of the block within the context of $module.
+ * @param $block
+ *   A block object.
  *
  * @see block_admin_configure_validate()
  * @see block_admin_configure_submit()
  * @ingroup forms
  */
-function block_admin_configure($form, &$form_state, $module, $delta) {
-  $block = block_load($module, $delta);
+function block_admin_configure($form, &$form_state, $block) {
   $form['module'] = array(
     '#type' => 'value',
     '#value' => $block->module,
@@ -514,7 +511,8 @@ function block_admin_configure_submit($form, &$form_state) {
  * @ingroup forms
  */
 function block_add_block_form($form, &$form_state) {
-  return block_admin_configure($form, $form_state, 'block', NULL);
+  $block = block_load('block', NULL);
+  return block_admin_configure($form, $form_state, $block);
 }
 
 /**
diff --git a/modules/block/block.module b/modules/block/block.module
index dd7bf91..b28aa7a 100644
--- a/modules/block/block.module
+++ b/modules/block/block.module
@@ -112,14 +112,15 @@ function block_menu() {
     'access arguments' => array('administer blocks'),
     'file' => 'block.admin.inc',
   );
-  $items['admin/structure/block/manage/%/%'] = array(
+  $items['admin/structure/block/manage/%block_object/%'] = array(
     'title' => 'Configure block',
+    'load arguments' => array(5),
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('block_admin_configure', 4, 5),
+    'page arguments' => array('block_admin_configure', 4),
     'access arguments' => array('administer blocks'),
     'file' => 'block.admin.inc',
   );
-  $items['admin/structure/block/manage/%/%/configure'] = array(
+  $items['admin/structure/block/manage/%block_object/%/configure'] = array(
     'title' => 'Configure block',
     'type' => MENU_DEFAULT_LOCAL_TASK,
     'context' => MENU_CONTEXT_INLINE,
@@ -661,7 +662,23 @@ function block_list($region) {
 }
 
 /**
- * Load a block object from the database.
+ * Loads a block object from the datbase, useful as a wildcard load function.
+ *
+ * @param $module
+ *   Name of the module that implements the block to load.
+ * @param $delta
+ *   Unique ID of the block within the context of $module. Pass NULL to return
+ *   an empty $block object for $module.
+ *
+ * @return
+ *   A block object, FALSE if the block does not exist.
+ */
+function block_object_load($module, $delta) {
+  return db_query('SELECT * FROM {block} WHERE module = :module AND delta = :delta', array(':module' => $module, ':delta' => $delta))->fetchObject();
+}
+
+/**
+ * Load a block object from the database, initializes object if block is new.
  *
  * @param $module
  *   Name of the module that implements the block to load.
@@ -674,7 +691,7 @@ function block_list($region) {
  */
 function block_load($module, $delta) {
   if (isset($delta)) {
-    $block = db_query('SELECT * FROM {block} WHERE module = :module AND delta = :delta', array(':module' => $module, ':delta' => $delta))->fetchObject();
+    $block = block_object_load($module, $delta);
   }
 
   // If the block does not exist in the database yet return a stub block
diff --git a/modules/block/block.test b/modules/block/block.test
index d036d36..9da0fde 100644
--- a/modules/block/block.test
+++ b/modules/block/block.test
@@ -193,6 +193,15 @@ class BlockTestCase extends DrupalWebTestCase {
   }
 
   /**
+   * Test that in invalid delta returns a 404.
+   */
+  function testInvalidDelta() {
+    $invalid_delta = 'invalid-delta';
+    $this->drupalGet('admin/structure/block/manage/system/' . $invalid_delta . '/configure');
+    $this->assertResponse(404, t('The configuration page was not found'));
+  }
+
+  /**
    * Test user customization of block visibility.
    */
   function testBlockVisibilityPerUser() {
