diff --git a/entityreference.install b/entityreference.install
index cc7bce5..b835729 100644
--- a/entityreference.install
+++ b/entityreference.install
@@ -163,3 +163,22 @@ function entityreference_update_7002() {
     ));
   }
 }
+
+/**
+ * Move selection handler config to field instance settings.
+ */
+function entityreference_update_7003() {
+  // Get the list of fields of type 'entityreference'.
+  foreach (field_info_fields() as $field_name => $field) {
+    if ($field['type'] == 'entityreference') {
+      // Update the instances configuration.
+      foreach ($field['bundles'] as $entity_type => $bundles) {
+        foreach ($bundles as $bundle) {
+          $instance = field_info_instance($entity_type, $field_name, $bundle);
+          $instance['settings']['handler_settings'] = $field['settings']['handler_settings'];
+          field_update_instance($instance);
+        }
+      }
+    }
+  }
+}
diff --git a/entityreference.module b/entityreference.module
index 8e8990e..11df1fc 100644
--- a/entityreference.module
+++ b/entityreference.module
@@ -62,10 +62,11 @@ function entityreference_field_info() {
       'target_type' => 'node',
       // The handler for this field.
       'handler' => 'base',
+    ),
+    'instance_settings' => array(
       // The handler settings.
       'handler_settings' => array(),
     ),
-    'instance_settings' => array(),
     'default_widget' => 'entityreference_autocomplete',
     'default_formatter' => 'entityreference_label',
     'property_callbacks' => array('entityreference_field_property_callback'),
@@ -162,7 +163,7 @@ function entityreference_get_behavior_handlers($field, $instance = NULL) {
     $field['settings'] += array('behaviors' => array());
 
     $object_cache[$field['field_name']] = array();
-    $behaviors = !empty($field['settings']['handler_settings']['behaviors']) ? $field['settings']['handler_settings']['behaviors'] : array();
+    $behaviors = !empty($field['settings']['behaviors']) ? $field['settings']['behaviors'] : array();
     if (!empty($instance['settings']['behaviors'])) {
       $behaviors = array_merge($behaviors, $instance['settings']['behaviors']);
     }
@@ -408,7 +409,7 @@ function entityreference_field_settings_form($field, $instance, $has_data) {
       'css' => array(drupal_get_path('module', 'entityreference') . '/entityreference.admin.css'),
     ),
     '#process' => array(
-      '_entityreference_field_settings_process',
+      '_entityreference_field_settings_form',
       '_entityreference_field_settings_ajax_process',
     ),
     '#element_validate' => array('_entityreference_field_settings_validate'),
@@ -420,9 +421,9 @@ function entityreference_field_settings_form($field, $instance, $has_data) {
 }
 
 /**
- * Callback for custom element processing.
+ * Field settings form builder.
  */
-function _entityreference_field_settings_process($form, $form_state) {
+function _entityreference_field_settings_form($form, $form_state) {
   $field = isset($form_state['entityreference']['field']) ? $form_state['entityreference']['field'] : $form['#field'];
   $instance = isset($form_state['entityreference']['instance']) ? $form_state['entityreference']['instance'] : $form['#instance'];
   $has_data = $form['#has_data'];
@@ -483,20 +484,11 @@ function _entityreference_field_settings_process($form, $form_state) {
     '#submit' => array('entityreference_settings_ajax_submit'),
   );
 
-  $form['handler']['handler_settings'] = array(
-    '#type' => 'container',
-    '#attributes' => array('class' => array('entityreference-settings')),
-  );
-
-  $handler = entityreference_get_selection_handler($field, $instance);
-  $form['handler']['handler_settings'] += $handler->settingsForm($field, $instance);
-
   _entityreference_get_behavior_elements($form, $field, $instance, 'field');
   if (!empty($form['behaviors'])) {
     $form['behaviors'] += array(
       '#type' => 'fieldset',
       '#title' => t('Additional behaviors'),
-      '#parents' => array_merge($form['#parents'], array('handler_settings', 'behaviors')),
     );
   }
 
@@ -591,6 +583,14 @@ function _entityreference_field_instance_settings_form($form, $form_state) {
   $field = isset($form_state['entityreference']['field']) ? $form_state['entityreference']['field'] : $form['#field'];
   $instance = isset($form_state['entityreference']['instance']) ? $form_state['entityreference']['instance'] : $form['#instance'];
 
+  $form['handler_settings'] = array(
+    '#type' => 'fieldset',
+    '#title' => t('Entity selection settings'),
+  );
+
+  $handler = entityreference_get_selection_handler($field, $instance);
+  $form['handler_settings'] += $handler->settingsForm($field, $instance);
+
   _entityreference_get_behavior_elements($form, $field, $instance, 'instance');
   if (!empty($form['behaviors'])) {
     $form['behaviors'] += array(
@@ -601,6 +601,7 @@ function _entityreference_field_instance_settings_form($form, $form_state) {
       ),
     );
   }
+
   return $form;
 }
 
@@ -628,7 +629,7 @@ function _entityreference_get_behavior_elements(&$element, $field, $instance, $l
 
     foreach ($behavior_plugins[$level] as $name => $plugin) {
       if ($level == 'field') {
-        $settings = !empty($field['settings']['handler_settings']['behaviors'][$name]) ? $field['settings']['handler_settings']['behaviors'][$name] : array();
+        $settings = !empty($field['settings']['behaviors'][$name]) ? $field['settings']['behaviors'][$name] : array();
       }
       else {
         $settings = !empty($instance['settings']['behaviors'][$name]) ? $instance['settings']['behaviors'][$name] : array();
@@ -660,7 +661,6 @@ function _entityreference_get_behavior_elements(&$element, $field, $instance, $l
           // Get the behavior settings.
           $behavior_elements += array(
             '#type' => 'container',
-            '#process' => array('_entityreference_form_process_merge_parent'),
             '#attributes' => array(
               'class' => array('entityreference-settings'),
             ),
diff --git a/plugins/selection/EntityReference_SelectionHandler_Generic.class.php b/plugins/selection/EntityReference_SelectionHandler_Generic.class.php
index e0dff00..1647f3b 100644
--- a/plugins/selection/EntityReference_SelectionHandler_Generic.class.php
+++ b/plugins/selection/EntityReference_SelectionHandler_Generic.class.php
@@ -40,13 +40,14 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
    */
   public static function settingsForm($field, $instance) {
     $entity_info = entity_get_info($field['settings']['target_type']);
+    $settings = $instance['settings'];
 
     // Merge-in default values.
-    $field['settings']['handler_settings'] += array(
+    $settings['handler_settings'] += array(
       'target_bundles' => array(),
       'sort' => array(
         'type' => 'none',
-      )
+      ),
     );
 
     if (!empty($entity_info['entity keys']['bundle'])) {
@@ -59,7 +60,7 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
         '#type' => 'checkboxes',
         '#title' => t('Target bundles'),
         '#options' => $bundles,
-        '#default_value' => $field['settings']['handler_settings']['target_bundles'],
+        '#default_value' => $settings['handler_settings']['target_bundles'],
         '#size' => 6,
         '#multiple' => TRUE,
         '#description' => t('The bundles of the entity type that can be referenced. Optional, leave empty for all bundles.'),
@@ -83,7 +84,7 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
       ),
       '#ajax' => TRUE,
       '#limit_validation_errors' => array(),
-      '#default_value' => $field['settings']['handler_settings']['sort']['type'],
+      '#default_value' => $settings['handler_settings']['sort']['type'],
     );
 
     $form['sort']['settings'] = array(
@@ -92,9 +93,9 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
       '#process' => array('_entityreference_form_process_merge_parent'),
     );
 
-    if ($field['settings']['handler_settings']['sort']['type'] == 'property') {
+    if ($settings['handler_settings']['sort']['type'] == 'property') {
       // Merge-in default values.
-      $field['settings']['handler_settings']['sort'] += array(
+      $settings['handler_settings']['sort'] += array(
         'property' => NULL,
       );
 
@@ -103,12 +104,12 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
         '#title' => t('Sort property'),
         '#required' => TRUE,
         '#options' => drupal_map_assoc($entity_info['schema_fields_sql']['base table']),
-        '#default_value' => $field['settings']['handler_settings']['sort']['property'],
+        '#default_value' => $settings['handler_settings']['sort']['property'],
       );
     }
-    elseif ($field['settings']['handler_settings']['sort']['type'] == 'field') {
+    elseif ($settings['handler_settings']['sort']['type'] == 'field') {
       // Merge-in default values.
-      $field['settings']['handler_settings']['sort'] += array(
+      $settings['handler_settings']['sort'] += array(
         'field' => NULL,
       );
 
@@ -127,13 +128,13 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
         '#title' => t('Sort field'),
         '#required' => TRUE,
         '#options' => $fields,
-        '#default_value' => $field['settings']['handler_settings']['sort']['field'],
+        '#default_value' => $settings['handler_settings']['sort']['field'],
       );
     }
 
-    if ($field['settings']['handler_settings']['sort']['type'] != 'none') {
+    if ($settings['handler_settings']['sort']['type'] != 'none') {
       // Merge-in default values.
-      $field['settings']['handler_settings']['sort'] += array(
+      $settings['handler_settings']['sort'] += array(
         'direction' => 'ASC',
       );
 
@@ -145,7 +146,7 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
           'ASC' => t('Ascending'),
           'DESC' => t('Descending'),
         ),
-        '#default_value' => $field['settings']['handler_settings']['sort']['direction'],
+        '#default_value' => $settings['handler_settings']['sort']['direction'],
       );
     }
 
@@ -245,8 +246,8 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
   protected function buildEntityFieldQuery($match = NULL, $match_operator = 'CONTAINS') {
     $query = new EntityFieldQuery();
     $query->entityCondition('entity_type', $this->field['settings']['target_type']);
-    if (!empty($this->field['settings']['handler_settings']['target_bundles'])) {
-      $query->entityCondition('bundle', $this->field['settings']['handler_settings']['target_bundles'], 'IN');
+    if (!empty($this->instance['settings']['handler_settings']['target_bundles'])) {
+      $query->entityCondition('bundle', $this->instance['settings']['handler_settings']['target_bundles'], 'IN');
     }
     if (isset($match)) {
       $entity_info = entity_get_info($this->field['settings']['target_type']);
@@ -262,8 +263,8 @@ class EntityReference_SelectionHandler_Generic implements EntityReference_Select
     $query->addMetaData('entityreference_selection_handler', $this);
 
     // Add the sort option.
-    if (!empty($this->field['settings']['handler_settings']['sort'])) {
-      $sort_settings = $this->field['settings']['handler_settings']['sort'];
+    if (!empty($this->instance['settings']['handler_settings']['sort'])) {
+      $sort_settings = $this->instance['settings']['handler_settings']['sort'];
       if ($sort_settings['type'] == 'property') {
         $query->propertyOrderBy($sort_settings['property'], $sort_settings['direction']);
       }
@@ -543,7 +544,7 @@ class EntityReference_SelectionHandler_Generic_taxonomy_term extends EntityRefer
 
     // We imitate core by calling taxonomy_get_tree().
     $entity_info = entity_get_info('taxonomy_term');
-    $bundles = !empty($this->field['settings']['handler_settings']['target_bundles']) ? $this->field['settings']['handler_settings']['target_bundles'] : array_keys($entity_info['bundles']);
+    $bundles = !empty($this->instance['settings']['handler_settings']['target_bundles']) ? $this->instance['settings']['handler_settings']['target_bundles'] : array_keys($entity_info['bundles']);
 
     foreach ($bundles as $bundle) {
       if ($vocabulary = taxonomy_vocabulary_machine_name_load($bundle)) {
diff --git a/plugins/selection/EntityReference_SelectionHandler_Views.class.php b/plugins/selection/EntityReference_SelectionHandler_Views.class.php
index 68e6a6d..3100e37 100644
--- a/plugins/selection/EntityReference_SelectionHandler_Views.class.php
+++ b/plugins/selection/EntityReference_SelectionHandler_Views.class.php
@@ -22,7 +22,7 @@ class EntityReference_SelectionHandler_Views implements EntityReference_Selectio
    * Implements EntityReferenceHandler::settingsForm().
    */
   public static function settingsForm($field, $instance) {
-    $view_settings = empty($field['settings']['handler_settings']['view']) ? '' : $field['settings']['handler_settings']['view'];
+    $view_settings = empty($instance['settings']['handler_settings']['view']) ? '' : $instance['settings']['handler_settings']['view'];
     $displays = views_get_applicable_views('entityreference display');
     // Filter views that list the entity type we want, and group the separate
     // displays by view.
@@ -92,10 +92,8 @@ class EntityReference_SelectionHandler_Views implements EntityReference_Selectio
   }
 
   protected function initializeView($match = NULL, $match_operator = 'CONTAINS', $limit = 0, $ids = NULL) {
-    $view_name = $this->field['settings']['handler_settings']['view']['view_name'];
-    $display_name = $this->field['settings']['handler_settings']['view']['display_name'];
-    $args = $this->field['settings']['handler_settings']['view']['args'];
-    $entity_type = $this->field['settings']['target_type'];
+    $view_name = $this->instance['settings']['handler_settings']['view']['view_name'];
+    $display_name = $this->instance['settings']['handler_settings']['view']['display_name'];
 
     // Check that the view is valid and the display still exists.
     $this->view = views_get_view($view_name);
@@ -124,8 +122,8 @@ class EntityReference_SelectionHandler_Views implements EntityReference_Selectio
    * Implements EntityReferenceHandler::getReferencableEntities().
    */
   public function getReferencableEntities($match = NULL, $match_operator = 'CONTAINS', $limit = 0) {
-    $display_name = $this->field['settings']['handler_settings']['view']['display_name'];
-    $args = $this->handleArgs($this->field['settings']['handler_settings']['view']['args']);
+    $display_name = $this->instance['settings']['handler_settings']['view']['display_name'];
+    $args = $this->handleArgs($this->instance['settings']['handler_settings']['view']['args']);
     $result = array();
     if ($this->initializeView($match, $match_operator, $limit)) {
       // Get the results.
@@ -153,8 +151,8 @@ class EntityReference_SelectionHandler_Views implements EntityReference_Selectio
   }
 
   function validateReferencableEntities(array $ids) {
-    $display_name = $this->field['settings']['handler_settings']['view']['display_name'];
-    $args = $this->handleArgs($this->field['settings']['handler_settings']['view']['args']);
+    $display_name = $this->instance['settings']['handler_settings']['view']['display_name'];
+    $args = $this->handleArgs($this->instance['settings']['handler_settings']['view']['args']);
     $result = array();
     if ($this->initializeView(NULL, 'CONTAINS', 0, $ids)) {
       // Get the results.
