Index: entityreference.module
===================================================================
--- entityreference.module	(revision 233)
+++ entityreference.module	(working copy)
@@ -427,7 +427,7 @@
 
   ctools_include('plugins');
   $handlers = ctools_get_plugins('entityreference', 'selection');
-  uasort($handlers, 'ctools_plugin_sort');
+  uasort($handlers, 'ctools_plugin_sort');  
   $handlers_options = array();
   foreach ($handlers as $handler => $handler_info) {
     $handlers_options[$handler] = check_plain($handler_info['title']);
@@ -465,9 +465,27 @@
   );
 
   $handler = entityreference_get_selection_handler($field, $instance);
-  $form['handler']['handler_settings'] += $handler->settingsForm($field, $instance);
+  $form['handler']['handler_settings'] += $handler->settingsForm($field, $instance);  
+  if($form['target_type']['#default_value'] == 'taxonomy_term'){
+    $form['handler']['handler_settings'] += array(
+    'add_to_target' => array(
+        '#type' => 'checkbox',
+        '#title' => 'Create terms if no matches.',
+        '#default_value' => isset($settings['handler_settings']['add_to_target']) ? $settings['handler_settings']['add_to_target'] : 0, //added line
+      ));  
+  }else{
+    $form['handler']['handler_settings'] += array(
+    'add_to_target' => array(
+        '#type' => 'checkbox',
+        '#title' => 'Create terms if no matches.',
+        '#default_value' => 0,
+        '#disabled' => TRUE
 
+      ));  
+  }
   _entityreference_get_behavior_elements($form, $field, $instance, 'field');
+  
+  
   if (!empty($form['behaviors'])) {
     $form['behaviors'] += array(
       '#type' => 'fieldset',
@@ -770,12 +788,14 @@
   $target_type = $field['settings']['target_type'];
   $entity_info = entity_get_info($target_type);
 
+
   $return = array();
   foreach ($options as $bundle => $entity_ids) {
     $bundle_label = check_plain($entity_info['bundles'][$bundle]['label']);
     $return[$bundle_label] = $entity_ids;
   }
 
+
   return count($return) == 1 ? reset($return) : $return;
 }
 
@@ -874,7 +894,7 @@
   }
 }
 
-function _entityreference_autocomplete_validate($element, &$form_state, $form) {
+function _entityreference_autocomplete_validate($element, &$form_state, $form) {  
   // If a value was entered into the autocomplete...
   $value = '';
   if (!empty($element['#value'])) {
@@ -898,7 +918,22 @@
   form_set_value($element, $value, $form_state);
 }
 
-function _entityreference_autocomplete_tags_validate($element, &$form_state, $form) {
+function _entityreference_autocomplete_add_to_target($vocabulary, $entity, &$target_id){
+  $term = new stdclass();  
+  $vid = taxonomy_vocabulary_machine_name_load($vocabulary);  
+  if($vid === FALSE){
+    // Error vocabulary does not exists.
+    form_error($element, t('There are is vocabulary matching "%value"', array('%value' => $vocabulary)));
+  }
+  $term->vid =  $vid->vid;
+  $term->name = $entity;  
+  $res = taxonomy_term_save($term);  
+  if($res == SAVED_NEW || $res == SAVED_UPDATE){
+    $target_id = $term->tid;
+  }
+}
+
+function _entityreference_autocomplete_tags_validate($element, &$form_state, $form) {  
   $value = array();
   // If a value was entered into the autocomplete...
   if (!empty($element['#value'])) {
@@ -909,16 +944,31 @@
       if (preg_match("/.+\((\d+)\)/", $entity, $matches)) {
         $value[] = array(
           'target_id' => $matches[1],
-        );
+        );        
       }
       else {
         // Try to get a match from the input string when the user didn't use the
-        // autocomplete but filled in a value manually.
+        // autocomplete but filled in a value manually.        
         $field = field_info_field($element['#field_name']);
-        $handler = entityreference_get_selection_handler($field);
-        $value[] = array(
-          'target_id' => $handler->validateAutocompleteInput($entity, $element, $form_state, $form),
-        );
+        $handler = entityreference_get_selection_handler($field);        
+        $target_id = $handler->validateAutocompleteInput($entity, $element, $form_state, $form);
+
+        // add_to_target check
+        $add_to_target = (isset($handler->field['settings']['handler_settings']['add_to_target'])) ? $handler->field['settings']['handler_settings']['add_to_target'] : 0;
+
+        // If no matches and add_to_target = 1
+
+        if(empty($target_id) && $add_to_target == 1){          
+          $machine_name_v = reset($handler->field['settings']['handler_settings']['target_bundles']);
+          _entityreference_autocomplete_add_to_target($machine_name_v, $entity, $target_id);
+          $value[] = array(
+            'target_id' => $target_id,
+            );
+        }else{
+          $value[] = array(
+            'target_id' => $target_id,
+          ); 
+        }        
       }
     }
   }
Index: plugins/selection/EntityReference_SelectionHandler_Generic.class.php
===================================================================
--- plugins/selection/EntityReference_SelectionHandler_Generic.class.php	(revision 233)
+++ plugins/selection/EntityReference_SelectionHandler_Generic.class.php	(working copy)
@@ -208,12 +208,19 @@
    * Implements EntityReferenceHandler::validateAutocompleteInput().
    */
   public function validateAutocompleteInput($input, &$element, &$form_state, $form) {
-      $entities = $this->getReferencableEntities($input, '=', 6);
-      if (empty($entities)) {
+    
+      $entities = $this->getReferencableEntities($input, '=', 6);      
+      $field = field_info_field($element['#field_name']);      
+      $handler = entityreference_get_selection_handler($field);               
+      $add_to_target = (isset($handler->field['settings']['handler_settings']['add_to_target'])) ? $handler->field['settings']['handler_settings']['add_to_target'] : 0;
+      
+      if (empty($entities) &&  $add_to_target == 0) {
         // Error if there are no entities available for a required field.
         form_error($element, t('There are no entities matching "%value"', array('%value' => $input)));
-      }
-      elseif (count($entities) > 5) {
+      }elseif(empty($entities) && $add_to_target == 1){
+        // No entities available but we can create the term.
+        return $entities;
+      }elseif (count($entities) > 5) {
         // Error if there are more than 5 matching entities.
         form_error($element, t('Many entities are called %value. Specify the one you want by appending the id in parentheses, like "@value (@id)"', array(
           '%value' => $input,
@@ -228,11 +235,10 @@
           $multiples[] = $name . ' (' . $id . ')';
         }
         form_error($element, t('Multiple entities match this reference; "%multiple"', array('%multiple' => implode('", "', $multiples))));
+      }else{
+        // Take the one and only matching entity.        
+        return ($field['settings']['target_type'] == 'taxonomy_term') ? key(reset($entities)) : key($entities);
       }
-      else {
-        // Take the one and only matching entity.
-        return key($entities);
-      }
   }
 
   /**
