diff --git a/core/modules/field/field.api.php b/core/modules/field/field.api.php
index 774d8b5..3304186 100644
--- a/core/modules/field/field.api.php
+++ b/core/modules/field/field.api.php
@@ -724,6 +724,7 @@ function hook_field_widget_info() {
         'multiple values' => FIELD_BEHAVIOR_DEFAULT,
         'default value' => FIELD_BEHAVIOR_DEFAULT,
       ),
+      'widget callback' => 'text_field_widget_form',
     ),
     'text_textarea' => array(
       'label' => t('Text area (multiple rows)'),
@@ -733,6 +734,7 @@ function hook_field_widget_info() {
         'multiple values' => FIELD_BEHAVIOR_DEFAULT,
         'default value' => FIELD_BEHAVIOR_DEFAULT,
       ),
+      'widget callback' => 'text_field_widget_form',
     ),
     'text_textarea_with_summary' => array(
       'label' => t('Text area with a summary'),
@@ -742,6 +744,7 @@ function hook_field_widget_info() {
         'multiple values' => FIELD_BEHAVIOR_DEFAULT,
         'default value' => FIELD_BEHAVIOR_DEFAULT,
       ),
+      'widget callback' => 'text_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/field/field.form.inc b/core/modules/field/field.form.inc
index be3685d..9587a08 100644
--- a/core/modules/field/field.form.inc
+++ b/core/modules/field/field.form.inc
@@ -60,7 +60,7 @@ function field_default_form($entity_type, $entity, $field, $instance, $langcode,
     // make it the $delta value.
     else {
       $delta = isset($get_delta) ? $get_delta : 0;
-      $function = $instance['widget']['module'] . '_field_widget_form';
+      $function = $instance['widget']['widget callback'];
       if (function_exists($function)) {
         $element = array(
           '#entity_type' => $instance['entity_type'],
@@ -170,7 +170,7 @@ function field_multiple_value_form($field, $instance, $langcode, $items, &$form,
 
   $field_elements = array();
 
-  $function = $instance['widget']['module'] . '_field_widget_form';
+  $function = $instance['widget']['widget callback'];
   if (function_exists($function)) {
     for ($delta = 0; $delta <= $max; $delta++) {
       $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED;
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index 78bc62e..a72789b 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -395,6 +395,7 @@ function _field_info_prepare_instance_widget($field, $widget) {
     $widget_type = field_info_widget_types($widget['type']);
   }
   $widget['module'] = $widget_type['module'];
+  $widget['widget callback'] = $widget_type['widget callback'];
   // Fill in default settings for the widget.
   $widget['settings'] += field_info_widget_settings($widget['type']);
 
diff --git a/core/modules/field/modules/number/number.module b/core/modules/field/modules/number/number.module
index d00c55f..0c77904 100644
--- a/core/modules/field/modules/number/number.module
+++ b/core/modules/field/modules/number/number.module
@@ -321,6 +321,7 @@ function number_field_widget_info() {
     'number' => array(
       'label' => t('Text field'),
       'field types' => array('number_integer', 'number_decimal', 'number_float'),
+      'widget callback' => 'number_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/field/modules/options/options.module b/core/modules/field/modules/options/options.module
index 04b88d8..dc7c4c6 100644
--- a/core/modules/field/modules/options/options.module
+++ b/core/modules/field/modules/options/options.module
@@ -46,6 +46,7 @@ function options_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget callback' => 'options_field_widget_form',
     ),
     'options_buttons' => array(
       'label' => t('Check boxes/radio buttons'),
@@ -53,6 +54,7 @@ function options_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget callback' => 'options_field_widget_form',
     ),
     'options_onoff' => array(
       'label' => t('Single on/off checkbox'),
@@ -60,6 +62,7 @@ function options_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget callback' => 'options_field_widget_form',
       'settings' => array('display_label' => 0),
     ),
   );
diff --git a/core/modules/field/modules/text/text.module b/core/modules/field/modules/text/text.module
index d73814f..dfb7458 100644
--- a/core/modules/field/modules/text/text.module
+++ b/core/modules/field/modules/text/text.module
@@ -453,16 +453,19 @@ function text_field_widget_info() {
       'label' => t('Text field'),
       'field types' => array('text'),
       'settings' => array('size' => 60),
+      'widget callback' => 'text_field_widget_form',
     ),
     'text_textarea' => array(
       'label' => t('Text area (multiple rows)'),
       'field types' => array('text_long'),
       'settings' => array('rows' => 5),
+      'widget callback' => 'text_field_widget_form',
     ),
     'text_textarea_with_summary' => array(
       'label' => t('Text area with a summary'),
       'field types' => array('text_with_summary'),
       'settings' => array('rows' => 20, 'summary_rows' => 5),
+      'widget callback' => 'text_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/field/tests/field_test.field.inc b/core/modules/field/tests/field_test.field.inc
index cc76a99..91d3302 100644
--- a/core/modules/field/tests/field_test.field.inc
+++ b/core/modules/field/tests/field_test.field.inc
@@ -177,6 +177,7 @@ function field_test_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget callback' => 'field_test_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc
index a46ed1a..392c8cd 100644
--- a/core/modules/file/file.field.inc
+++ b/core/modules/file/file.field.inc
@@ -421,6 +421,7 @@ function file_field_widget_info() {
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
         'default value' => FIELD_BEHAVIOR_NONE,
       ),
+      'widget callback' => 'file_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/image/image.field.inc b/core/modules/image/image.field.inc
index aef6be7..ba6d1e8 100644
--- a/core/modules/image/image.field.inc
+++ b/core/modules/image/image.field.inc
@@ -273,6 +273,7 @@ function image_field_widget_info() {
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
         'default value' => FIELD_BEHAVIOR_NONE,
       ),
+      'widget callback' => 'image_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 47cde42..5d16186 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -1407,6 +1407,7 @@ function taxonomy_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget callback' => 'taxonomy_field_widget_form',
     ),
   );
 }
