diff --git a/reference_option_limit.views.inc b/reference_option_limit.views.inc
index 3e23f5f..7bdaf51 100644
--- a/reference_option_limit.views.inc
+++ b/reference_option_limit.views.inc
@@ -169,14 +169,30 @@ function reference_option_limit_views_handler_filter_get_value_options($filter_h
     //dsm($handler);
 
     // Here we probably need to switch out depending on whether we are:
-    // a filter, an exposed filter, or an argument.
+    // a filter or an argument.
 
     // Case: filter.
     // This is the only one in my use case at the moment; if you want more
     // post a patch ;)
-
-    // Grab the value from $handler->value;
-    $match_values[$field_name_matching] = $handler->value;
+    if ($handler_type == 'filter') {
+      if ($handler->options['exposed']) {
+        // Exposed filter.
+        // accept_exposed_input() has not yet been run on the handler at this
+        // stage, so we need to get it from the view. Furthermore, we can't
+        // call accept_exposed_input() ourselves as various other things it
+        // expects haven't happened yet.
+        $exposed_input = $handler->view->get_exposed_input();
+        // This ends up as a nested array if the filter takes multiple values
+        // but nothing further one seems to be bothered by it!
+        if (isset($exposed_input[$handler->options['expose']['identifier']])) {
+          $match_values[$field_name_matching] = array($exposed_input[$handler->options['expose']['identifier']]);
+        }
+      }
+      else {
+        // Non-exposed filter: grab the value from $handler->value.
+        $match_values[$field_name_matching] = $handler->value;
+      }
+    }
 
     $field_info_matching = field_info_field($field_name_matching);
     // Get the list of columns we should be extracting from the form and
@@ -198,9 +214,11 @@ function reference_option_limit_views_handler_filter_get_value_options($filter_h
   foreach ($fields_match as $field_name_matching => $handler) {
     // @todo: handle more than one column to match on.
     $column = $match_columns[$field_name_matching][0];
-    $value = $match_values[$field_name_matching];
-    if (!empty($value)) {
-      $query->fieldCondition($field_name_matching, $column, $value, 'IN');
+    if (isset($match_values[$field_name_matching])) {
+      $value = $match_values[$field_name_matching];
+      if (!empty($value)) {
+        $query->fieldCondition($field_name_matching, $column, $value, 'IN');
+      }
     }
   }
   // @todo: add some sort of ordering?
diff --git a/reference_option_limit_handler_filter_limited_options_term_reference.inc b/reference_option_limit_handler_filter_limited_options_term_reference.inc
index 09dabc6..4111401 100644
--- a/reference_option_limit_handler_filter_limited_options_term_reference.inc
+++ b/reference_option_limit_handler_filter_limited_options_term_reference.inc
@@ -68,6 +68,11 @@ class reference_option_limit_handler_filter_limited_options_term_reference exten
     // Get the options for the value form.
     $options = reference_option_limit_views_handler_filter_get_value_options($this, $referred_entity_type, $referred_bundles);
 
+    $form['value'] = array(
+      '#type' => 'select',
+      '#multiple' => TRUE,
+    );
+
     // Gacked from parent class.
     $default_value = (array) $this->value;
     if (!empty($form_state['exposed'])) {
@@ -94,15 +99,42 @@ class reference_option_limit_handler_filter_limited_options_term_reference exten
           $default_value = array_shift($copy);
         }
       }
+
+      // Accomodate $form and prepare settings to be used in hook_form_alter.
+      $form['value'][LANGUAGE_NONE] = array(
+        '#required' => $this->options['expose']['required'],
+        '#description' => '', # @todo
+      );
+
+      $fields_match = array();
+      foreach ($this->options['options_limit_fields'] as $olf) {
+        $type = substr($olf, 0, strpos($olf, ':'));
+        $field = substr($olf, strpos($olf, ':') + 1);
+        $field_match = $this->view->{$type}[$field]->definition['field_name'];
+        $fields_match[] = $field_match;
+
+        // Here we're altering other field. Is this legitimate?
+        $form[$field_match][LANGUAGE_NONE] = array('#default_value' => $form[$field_match]['#default_value']);
+      }
+
+      $settings = array(
+       'field' => $this->definition['field_name'],
+        'fields_match' => $fields_match,
+        'entity_type' => $this->view->base_table,
+        'entity_bundle' => 'article', // TODO !
+      );
+      $form_state['reference_option_limit'] = array();
+      $form_state['reference_option_limit'][$this->definition['field_name']] = $settings;
     }
 
-    $form['value'] = array(
-      '#type' => 'select',
+    $form['value'] += array(
       '#title' => $this->options['limit'] ? t('Select terms from vocabulary @voc', array('@voc' => $vocabulary->name)) : t('Select terms'),
-      '#multiple' => TRUE,
       '#options' => $options,
       '#size' => min(9, count($options)),
       '#default_value' => $default_value,
     );
+    //dpm($settings);
+    //dpm($form);
+    //dpm($this);
   }
 }
