Index: modules/field_ui/field_ui.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.admin.inc,v
retrieving revision 1.30
diff -u -p -r1.30 field_ui.admin.inc
--- modules/field_ui/field_ui.admin.inc	24 Nov 2009 21:38:33 -0000	1.30
+++ modules/field_ui/field_ui.admin.inc	28 Nov 2009 10:33:02 -0000
@@ -402,13 +402,20 @@ function _field_ui_field_overview_form_v
       form_set_error('_add_new_field][type', t('Add new field: you need to select a field type.'));
     }
 
+    $widget_types = field_ui_widget_type_options($field['type']);
     // Missing widget type.
     if (!$field['widget_type']) {
-      form_set_error('_add_new_field][widget_type', t('Add new field: you need to select a widget.'));
+      // If there's only one possible widget type, use that.
+      if (count($widget_types) == 1) {
+        $widget_type = key($widget_types);
+        form_set_value($form['_add_new_field']['widget_type'], $widget_type, $form_state);
+      }
+      else {
+        form_set_error('_add_new_field][widget_type', t('Add new field: you need to select a widget.'));
+      }
     }
     // Wrong widget type.
     elseif ($field['type']) {
-      $widget_types = field_ui_widget_type_options($field['type']);
       if (!isset($widget_types[$field['widget_type']])) {
         form_set_error('_add_new_field][widget_type', t('Add new field: invalid widget.'));
       }
@@ -439,13 +446,21 @@ function _field_ui_field_overview_form_v
         form_set_error('_add_existing_field][field_name', t('Add existing field: you need to select a field.'));
       }
 
+      $existing_field = field_info_field($field['field_name']);
+      $widget_types = field_ui_widget_type_options($existing_field['type']);
       // Missing widget type.
       if (!$field['widget_type']) {
-        form_set_error('_add_existing_field][widget_type', t('Add existing field: you need to select a widget.'));
+        // If there's only one possible widget type, use that.
+        if (count($widget_types) == 1) {
+          $widget_type = key($widget_types);
+          form_set_value($form['_add_existing_field']['widget_type'], $widget_type, $form_state);
+        }
+        else {
+          form_set_error('_add_existing_field][widget_type', t('Add existing field: you need to select a widget.'));
+        }
       }
       // Wrong widget type.
-      elseif ($field['field_name'] && ($existing_field = field_info_field($field['field_name']))) {
-        $widget_types = field_ui_widget_type_options($existing_field['type']);
+      elseif ($field['field_name'] && ($existing_field)) {
         if (!isset($widget_types[$field['widget_type']])) {
           form_set_error('_add_existing_field][widget_type', t('Add existing field: invalid widget.'));
         }
Index: modules/field_ui/field_ui.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.css,v
retrieving revision 1.1
diff -u -p -r1.1 field_ui.css
--- modules/field_ui/field_ui.css	19 Aug 2009 13:31:13 -0000	1.1
+++ modules/field_ui/field_ui.css	28 Nov 2009 10:33:02 -0000
@@ -16,3 +16,7 @@
   padding-bottom: .5em;
 }
 
+#field-overview select[disabled] {
+  color: #808080;
+}
+
Index: modules/field_ui/field_ui.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/field_ui/field_ui.js,v
retrieving revision 1.1
diff -u -p -r1.1 field_ui.js
--- modules/field_ui/field_ui.js	19 Aug 2009 13:31:13 -0000	1.1
+++ modules/field_ui/field_ui.js	28 Nov 2009 10:33:02 -0000
@@ -59,9 +59,18 @@ function attachUpdateSelects(context) {
 jQuery.fn.fieldPopulateOptions = function (options, selected) {
   return this.each(function () {
     var disabled = false;
-    if (options.length == 0) {
-      options = [this.initialValue];
+    var counter=0;
+
+    for (i in options) {
+      counter++;
+    }
+
+    // Disable widget select box if selection is obvious.
+    if (counter <= 1) {
       disabled = true;
+      if (counter == 0) {
+        options = [this.initialValue];
+      }
     }
 
     // If possible, keep the same widget selected when changing field type.
