Index: autocomplete_widgets/autocomplete_widgets.admin.inc
===================================================================
--- autocomplete_widgets/autocomplete_widgets.admin.inc	(revision 18)
+++ autocomplete_widgets/autocomplete_widgets.admin.inc	(revision 19)
@@ -58,6 +58,14 @@
         '#options' => array('starts_with' => t('Starts with'), 'contains' => t('Contains')),
         '#description' => t('Select the method used to collect autocomplete suggestions. Note that <em>Contains</em> can cause performance issues on sites with thousands of records.'),
       );
+      if ($widget['type'] == 'autocomplete_widgets_allowvals') {
+        $form['autocomplete_unlisted'] = array(
+          '#type' => 'checkbox',
+          '#title' => t('Accept unlisted strings'),
+          '#default_value' => (isset($widget['autocomplete_unlisted']) ? $widget['autocomplete_unlisted'] : FALSE),
+          '#description' => t('Enable this option to be able to enter unlisted strings.'),
+        );
+      }
       $form['autocomplete_case'] = array(
         '#type' => 'radios',
         '#title' => t('Case sensitive'),
@@ -103,6 +111,6 @@
       return $form;
 
     case 'save':
-      return array('size', 'autocomplete_match', 'autocomplete_case', 'i18n_flddata');
+      return array('size', 'autocomplete_match', 'autocomplete_unlisted', 'autocomplete_case', 'i18n_flddata');
   }
 }
Index: autocomplete_widgets/autocomplete_widgets.module
===================================================================
--- autocomplete_widgets/autocomplete_widgets.module	(revision 18)
+++ autocomplete_widgets/autocomplete_widgets.module	(revision 19)
@@ -99,18 +99,24 @@
  */
 function autocomplete_widgets_process($element, $edit, $form_state, $form) {
   $field = $form['#field_info'][$element['#field_name']];
+  $needs_validate = !(isset($field['widget']['autocomplete_unlisted']) ? $field['widget']['autocomplete_unlisted'] : FALSE);
   $field_key = $element['#columns'][0];
 
   $value = NULL;
   if ($field['widget']['type'] == 'autocomplete_widgets_allowvals') {
-    if (isset($element['#value'][$field_key])) {
-      $keys = array($element['#value'][$field_key]);
-      module_load_include('inc', 'autocomplete_widgets', 'autocomplete_widgets.common');
-      $options = _autocomplete_widgets_get_options($field, '', '', $keys, 1);
-      if (!empty($options)) {
-        $value = current($options);
-      }
+    if ($needs_validate) {
+      if (isset($element['#value'][$field_key])) {
+        $keys = array($element['#value'][$field_key]);
+        module_load_include('inc', 'autocomplete_widgets', 'autocomplete_widgets.common');
+        $options = _autocomplete_widgets_get_options($field, '', '', $keys, 1);
+        if (!empty($options)) {
+          $value = current($options);
+        }
+       }
     }
+    else {
+      $value = $element['#value'][$field_key];
+    }
   }
   else if ($field['widget']['type'] == 'autocomplete_widgets_flddata') {
     if (isset($element['#value'][$field_key])) {
@@ -158,10 +164,11 @@
   $type_name = $element['#type_name'];
   $delta = $element['#delta'];
   $field = content_fields($field_name, $type_name);
+  $needs_validate = !(isset($field['widget']['autocomplete_unlisted']) ? $field['widget']['autocomplete_unlisted'] : FALSE);
   $field_key = $element['#columns'][0];
   $value = trim($element['#value']);
 
-  if ($field['widget']['type'] == 'autocomplete_widgets_allowvals') {
+  if ($field['widget']['type'] == 'autocomplete_widgets_allowvals' && $needs_validate) {
     if ($value !== '') {
       module_load_include('inc', 'autocomplete_widgets', 'autocomplete_widgets.common');
       $options = _autocomplete_widgets_get_options($field, $value, 'equals', NULL, 1);
