diff --git a/core/modules/field/field.api.php b/core/modules/field/field.api.php
index 774d8b5..a34656c 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 form' => '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 form' => '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 form' => 'text_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/field/field.form.inc b/core/modules/field/field.form.inc
index be3685d..65b2fb0 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 = isset($instance['widget']['widget form']) ? $instance['widget']['widget form'] : NULL;
       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 = isset($instance['widget']['widget form']) ? $instance['widget']['widget form'] : NULL;
   if (function_exists($function)) {
     for ($delta = 0; $delta <= $max; $delta++) {
       $multiple = $field['cardinality'] > 1 || $field['cardinality'] == FIELD_CARDINALITY_UNLIMITED;
@@ -358,7 +358,7 @@ function field_default_form_errors($entity_type, $entity, $field, $instance, $la
   $field_state = field_form_get_state($form['#parents'], $field['field_name'], $langcode, $form_state);
 
   if (!empty($field_state['errors'])) {
-    $function = $instance['widget']['module'] . '_field_widget_error';
+    $function = isset($instance['widget']['widget error']) ? $instance['widget']['widget error'] : NULL;
     $function_exists = function_exists($function);
 
     // Locate the correct element in the the form.
diff --git a/core/modules/field/field.info.inc b/core/modules/field/field.info.inc
index 78bc62e..cacfe37 100644
--- a/core/modules/field/field.info.inc
+++ b/core/modules/field/field.info.inc
@@ -395,6 +395,9 @@ function _field_info_prepare_instance_widget($field, $widget) {
     $widget_type = field_info_widget_types($widget['type']);
   }
   $widget['module'] = $widget_type['module'];
+  if (isset($widget_type['widget form'])) {
+    $widget['widget form'] = $widget_type['widget form'];
+  }
   // 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..cbedac9 100644
--- a/core/modules/field/modules/number/number.module
+++ b/core/modules/field/modules/number/number.module
@@ -321,6 +321,8 @@ function number_field_widget_info() {
     'number' => array(
       'label' => t('Text field'),
       'field types' => array('number_integer', 'number_decimal', 'number_float'),
+      'widget form' => 'number_field_widget_form',
+      'widget error' => 'number_field_widget_error',
     ),
   );
 }
diff --git a/core/modules/field/modules/options/options.module b/core/modules/field/modules/options/options.module
index 04b88d8..d1c2ede 100644
--- a/core/modules/field/modules/options/options.module
+++ b/core/modules/field/modules/options/options.module
@@ -46,6 +46,8 @@ function options_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget form' => 'options_field_widget_form',
+      'widget error' => 'options_field_widget_error',
     ),
     'options_buttons' => array(
       'label' => t('Check boxes/radio buttons'),
@@ -53,6 +55,8 @@ function options_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget form' => 'options_field_widget_form',
+      'widget error' => 'options_field_widget_error',
     ),
     'options_onoff' => array(
       'label' => t('Single on/off checkbox'),
@@ -60,6 +64,8 @@ function options_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget form' => 'options_field_widget_form',
+      'widget error' => 'options_field_widget_error',
       '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..8eccdc6 100644
--- a/core/modules/field/modules/text/text.module
+++ b/core/modules/field/modules/text/text.module
@@ -453,16 +453,22 @@ function text_field_widget_info() {
       'label' => t('Text field'),
       'field types' => array('text'),
       'settings' => array('size' => 60),
+      'widget form' => 'text_field_widget_form',
+      'widget error' => 'text_field_widget_error',
     ),
     'text_textarea' => array(
       'label' => t('Text area (multiple rows)'),
       'field types' => array('text_long'),
       'settings' => array('rows' => 5),
+      'widget form' => 'text_field_widget_form',
+      'widget error' => 'text_field_widget_error',
     ),
     '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 form' => 'text_field_widget_form',
+      'widget error' => 'text_field_widget_error',
     ),
   );
 }
diff --git a/core/modules/field/tests/field_test.field.inc b/core/modules/field/tests/field_test.field.inc
index cc76a99..abdab0d 100644
--- a/core/modules/field/tests/field_test.field.inc
+++ b/core/modules/field/tests/field_test.field.inc
@@ -169,6 +169,8 @@ function field_test_field_widget_info() {
       'label' => t('Test field'),
       'field types' => array('test_field', 'hidden_test_field'),
       'settings' => array('test_widget_setting' => 'dummy test string'),
+      'widget form' => 'field_test_field_widget_form',
+      'widget error' => 'field_test_field_widget_error',
     ),
     'test_field_widget_multiple' => array(
       'label' => t('Test field 1'),
@@ -177,6 +179,8 @@ function field_test_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget form' => 'field_test_field_widget_form',
+      'widget error' => 'field_test_field_widget_error',
     ),
   );
 }
diff --git a/core/modules/file/file.field.inc b/core/modules/file/file.field.inc
index a46ed1a..8ef9711 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 form' => 'file_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/image/image.field.inc b/core/modules/image/image.field.inc
index aef6be7..2a4e3d5 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 form' => 'image_field_widget_form',
     ),
   );
 }
diff --git a/core/modules/taxonomy/taxonomy.module b/core/modules/taxonomy/taxonomy.module
index 47cde42..d1bcaf4 100644
--- a/core/modules/taxonomy/taxonomy.module
+++ b/core/modules/taxonomy/taxonomy.module
@@ -1407,6 +1407,8 @@ function taxonomy_field_widget_info() {
       'behaviors' => array(
         'multiple values' => FIELD_BEHAVIOR_CUSTOM,
       ),
+      'widget form' => 'taxonomy_field_widget_form',
+      'widget error' => 'taxonomy_field_widget_error',
     ),
   );
 }
