diff --git a/core/modules/field/field.api.php b/core/modules/field/field.api.php
index 329cf16..fdcb392 100644
--- a/core/modules/field/field.api.php
+++ b/core/modules/field/field.api.php
@@ -717,6 +717,7 @@ function hook_field_widget_info() {
         'multiple values' => FIELD_BEHAVIOR_DEFAULT,
         'default value' => FIELD_BEHAVIOR_DEFAULT,
       ),
+      'widget callback' => 'text_textfield_field_widget_form',
     ),
     'text_textarea' => array(
       'label' => t('Text area (multiple rows)'),
@@ -726,6 +727,7 @@ function hook_field_widget_info() {
         'multiple values' => FIELD_BEHAVIOR_DEFAULT,
         'default value' => FIELD_BEHAVIOR_DEFAULT,
       ),
+      'widget callback' => 'text_textarea_field_widget_form',
     ),
     'text_textarea_with_summary' => array(
       'label' => t('Text area with a summary'),
@@ -735,6 +737,7 @@ function hook_field_widget_info() {
         'multiple values' => FIELD_BEHAVIOR_DEFAULT,
         'default value' => FIELD_BEHAVIOR_DEFAULT,
       ),
+      'widget callback' => 'text_textarea_with_summary_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/modules/number/number.module b/core/modules/field/modules/number/number.module
index 87e2d3a..463ecca 100644
--- a/core/modules/field/modules/number/number.module
+++ b/core/modules/field/modules/number/number.module
@@ -321,7 +321,8 @@ 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/number/number.test b/core/modules/field/modules/number/number.test
diff --git a/core/modules/field/modules/options/options.module b/core/modules/field/modules/options/options.module
index d4d05ec..b5981b2 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_select_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_buttons_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_onoff_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..d01d2dc 100644
--- a/core/modules/field/modules/text/text.module
+++ b/core/modules/field/modules/text/text.module
@@ -453,16 +453,31 @@ function text_field_widget_info() {
       'label' => t('Text field'),
       'field types' => array('text'),
       'settings' => array('size' => 60),
+      'behaviors' => array(
+        'multiple values' => FIELD_BEHAVIOR_DEFAULT,
+        'default value' => FIELD_BEHAVIOR_DEFAULT,
+      ),    
+      'widget callback' => 'text_textfield_field_widget_form',
     ),
     'text_textarea' => array(
       'label' => t('Text area (multiple rows)'),
       'field types' => array('text_long'),
       'settings' => array('rows' => 5),
+      'behaviors' => array(
+        'multiple values' => FIELD_BEHAVIOR_DEFAULT,
+        'default value' => FIELD_BEHAVIOR_DEFAULT,
+      ),    
+      'widget callback' => 'text_textarea_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),
+      'behaviors' => array(
+        'multiple values' => FIELD_BEHAVIOR_DEFAULT,
+        'default value' => FIELD_BEHAVIOR_DEFAULT,
+      ),    
+      'widget callback' => 'text_textarea_with_summary_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/field/modules/text/text.test b/core/modules/field/modules/text/text.test
diff --git a/core/modules/field_ui/field_ui.admin.inc b/core/modules/field_ui/field_ui.admin.inc
index 24a99e1..37fff67 100644
--- a/core/modules/field_ui/field_ui.admin.inc
+++ b/core/modules/field_ui/field_ui.admin.inc
@@ -816,6 +816,7 @@ function field_ui_field_overview_form_submit($form, &$form_state) {
       'widget' => array(
         'type' => $values['widget_type'],
         'weight' => $values['weight'],
+        'widget callback' => $values['widget_callback'],
       ),
     );
 
@@ -851,6 +852,7 @@ function field_ui_field_overview_form_submit($form, &$form_state) {
         'widget' => array(
           'type' => $values['widget_type'],
           'weight' => $values['weight'],
+          'widget callback' => $values['widget_callback'],
         ),
       );
 
diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc
index a46ed1a..9f850ec 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_generic_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/image/image.field.inc b/core/modules/image/image.field.inc
index aef6be7..c62fdec 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_image_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 3f56e9e..ddb28d8 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -1361,6 +1361,7 @@ function taxonomy_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget callback' => 'taxonomy_autocomplete_field_widget_form',
     ),
   );
 }
