diff --git a/core/includes/form.inc b/core/includes/form.inc
index 3684578..bb3993d 100644
--- a/core/includes/form.inc
+++ b/core/includes/form.inc
@@ -138,6 +138,28 @@ function drupal_get_form($form_id) {
 }
 
 /**
+ * Returns a renderable form array using a specific callback.
+ *
+ * When using drupal_get_form(), the $form_id or information from hook_forms()
+ * is used to determine the callback used to build the form. If the callback
+ * needs to be explicitly specified, or if it is a method, use this function.
+ *
+ * @param string $form_id
+ *   The unique string identifying the desired form.
+ * @param callable $callback
+ *   A callback to be used for building the form.
+ * @param array $args
+ *   (optional) An array of arguments to pass to the form callback. Defaults to
+ *   an empty array.
+ */
+function drupal_get_callback_form($form_id, $callback, array $args = array()) {
+  $form_state = array();
+  $form_state['build_info']['args'] = $args;
+  $form_state['build_info']['callback'] = $callback;
+  return drupal_build_form($form_id, $form_state);
+}
+
+/**
  * Builds and processes a form for a given form ID.
  *
  * The form may also be retrieved from the cache if the form was built in a
diff --git a/core/modules/block/lib/Drupal/block/BlockListController.php b/core/modules/block/lib/Drupal/block/BlockListController.php
index d21e1a9..fc82771 100644
--- a/core/modules/block/lib/Drupal/block/BlockListController.php
+++ b/core/modules/block/lib/Drupal/block/BlockListController.php
@@ -55,10 +55,7 @@ public function render($theme = NULL) {
     // If no theme was specified, use the current theme.
     $this->theme = $theme ?: $GLOBALS['theme_key'];
 
-    $form_state = array();
-    $form_state['build_info']['args'] = array();
-    $form_state['build_info']['callback'] = array($this, 'form');
-    return drupal_build_form('block_admin_display_form', $form_state);
+    return drupal_get_callback_form('block_admin_display_form', array($this, 'form'));
   }
 
   /**
diff --git a/core/modules/field_ui/field_ui.admin.inc b/core/modules/field_ui/field_ui.admin.inc
index fd225ca..3bd3a3b 100644
--- a/core/modules/field_ui/field_ui.admin.inc
+++ b/core/modules/field_ui/field_ui.admin.inc
@@ -315,11 +315,7 @@ function field_ui_field_overview($entity_type, $bundle) {
 
   $field_overview = new FieldOverview($entity_type, $bundle);
 
-  $form_state = array();
-  $form_state['build_info']['callback'] = array($field_overview, 'form');
-  $form_state['build_info']['args'] = array($entity_type, $bundle);
-
-  return drupal_build_form('field_ui_field_overview_form', $form_state);
+  return drupal_get_callback_form('field_ui_field_overview_form', array($field_overview, 'form'), array($entity_type, $bundle));
 }
 
 /**
@@ -366,11 +362,7 @@ function field_ui_display_overview($entity_type, $bundle, $view_mode) {
 
   $display_overview = new DisplayOverview($entity_type, $bundle, $view_mode);
 
-  $form_state = array();
-  $form_state['build_info']['callback'] = array($display_overview, 'form');
-  $form_state['build_info']['args'] = array($entity_type, $bundle, $view_mode);
-
-  return drupal_build_form('field_ui_display_overview_form', $form_state);
+  return drupal_get_callback_form('field_ui_display_overview_form', array($display_overview, 'form'), array($entity_type, $bundle, $view_mode));
 }
 
 /**
