diff --git a/includes/build.inc b/includes/build.inc
diff --git a/includes/finder.inc b/includes/finder.inc
index 3c1caba..10b406c 100644
--- a/includes/finder.inc
+++ b/includes/finder.inc
@@ -380,12 +380,6 @@ class finder {
     $element = $element ? $element : NULL;
     $reset = $reset ? $reset : FALSE;
 
-    if ($mode == 'choices' && is_null($element)) {
-      // This is for development only, remove when convenient.
-      drupal_set_message(t('Incorrect usage of $finder->find().'), 'error');
-      return;
-    }
-
     // Create an ID using the function params so we can cache the return value.
     $id = ($mode == 'choices' ? 'e' . $element->id : 'f' . $this->id) . '|';
     $id_length = strlen($id);
@@ -415,13 +409,37 @@ class finder {
       $this->find = $cache->data;
     }
     else {
-      // Calculate the values from the database.
-
       // Allow other modules to react to and alter the finder.
       module_invoke_all('finder_find', $this);
 
-      // Get this other function to do the bulk of the work.
-      $this->views_find();
+      if ($mode == 'choices' && $this->esetting($element, 'choices_style', 'used_values') != 'used_values') {
+        $choices_style = $this->esetting($element, 'choices_style');
+
+        if ($choices_style == 'available_options') {
+          $available_options = explode("\n", $settings['available_options']);
+          $list = array();
+          foreach ($available_options as $available_option) {
+            if (strpos($available_option, '|') !== FALSE) {
+              list($key, $value) = explode('|', $available_option);
+              $list[$key] = (isset($value) && $value !== '') ? $value : $key;
+            }
+            else {
+              $list[$available_options] = $available_option;
+            }
+          }
+
+        }
+        elseif ($choices_style == 'php_code') {
+          $list = finder_eval($this->esetting($element, 'choices_style'), array('finder_element' => $element));
+        }
+
+        // @todo: keyword match here :/
+
+      }
+      else {
+        // Calculate the values from the database.
+        $this->views_find();
+      }
 
       if ($mode == 'choices' && $this->esetting($element, 'sort')) {
         natcasesort($this->find['results']);
@@ -430,6 +448,7 @@ class finder {
       // Allow other modules to react to and alter the finder.
       module_invoke_all('finder_find_alter', $this);
 
+
       // Add the resulting $finder_find to the drupal cache.
       if ($this->setting('cache')) {
         cache_set($cache_id, $this->find, 'cache_finder_find', REQUEST_TIME + $this->setting('cache'));
diff --git a/includes/form.inc b/includes/form.inc
diff --git a/includes/theme.inc b/includes/theme.inc
diff --git a/modules/finder_ui/finder_ui.api.php b/modules/finder_ui/finder_ui.api.php
diff --git a/modules/finder_ui/finder_ui.css b/modules/finder_ui/finder_ui.css
diff --git a/modules/finder_ui/finder_ui.i18n_string.inc b/modules/finder_ui/finder_ui.i18n_string.inc
diff --git a/modules/finder_ui/finder_ui.js b/modules/finder_ui/finder_ui.js
diff --git a/modules/finder_ui/includes/common.inc b/modules/finder_ui/includes/common.inc
diff --git a/modules/finder_ui/includes/element-item.inc b/modules/finder_ui/includes/element-item.inc
diff --git a/modules/finder_ui/includes/element.inc b/modules/finder_ui/includes/element.inc
index 985a4db..e49956c 100644
--- a/modules/finder_ui/includes/element.inc
+++ b/modules/finder_ui/includes/element.inc
@@ -521,12 +521,10 @@ function finder_ui_element($finder, $finder_element_id) {
     ),
   );
 
-
-
-    /*
   $choices_style_options = array(
-    'used' => t('Get choices from used field values of potential results'),
-    'php' => t('Custom PHP choices (specify below)'),
+    'used_values' => t('Used values'),
+    'available_options' => t('Available options'),
+    'php_code' => t('PHP Code'),
   );
   $fields = $finder->fields();
 
@@ -534,37 +532,38 @@ function finder_ui_element($finder, $finder_element_id) {
     '#group' => 'choices',
     '#item' => array(
       '#title' => t('Choices style'),
-      '#value' => $finder->esetting($element, 'choices_style'),
+      '#value' => $choices_style_options[$finder->esetting($element, 'choices_style', 'used_values')],
     ),
     '#form' => array(
       'settings' => array(
         'choices_style' => array(
           '#type' => 'radios',
-          '#default_value' => $finder->esetting($element, 'choices_style'),
+          '#default_value' => $finder->esetting($element, 'choices_style', 'used_values'),
           '#title' => t('Choices style'),
           '#options' => $choices_style_options,
-          '#description' => t('What to display as a choice.'),
+          '#description' => t('If this element needs to display a list of choices, where do they come from?  <em>Used values</em> is the traditional finder choices style, it is completely automated but can be poor in performance.'),
         ),
 
-        'choices_field' => array(
-          '#type' => 'select',
-          '#default_value' => $finder->esetting($element, 'choices_field'),
-          '#title' => t('Choices field'),
-          '#options' => $fields,
+        'available_options' => array(
+          '#type' => 'textarea',
+          '#title' => t('Available options'),
+          '#rows' => 6,
+          '#default_value' => $finder->esetting($element, 'available_options'),
+          '#description' => t('PHP code that returns an associative array where the keys are the values to be submitted and the values are the display labels.  PHP must be enclosed in PHP tags.'),
           '#process' => array('ctools_dependent_process'),
-          '#dependency' => array('radio:settings[choices_style]' => array('field')),
+          '#dependency' => array('radio:settings[choices_style]' => array('available_options')),
+          '#description' => t('A list of values that are available for selection. Enter one value per line, in the format key|label. The key is the value that will be submitted in the form, and the label is what will be displayed to the user.'),
         ),
 
-
-        'choices_php' => finder_ui_php_setting(
+        'php_code' => finder_ui_php_setting(
           array(
             '#type' => 'textarea',
-            '#title' => t('Custom PHP choices'),
+            '#title' => t('PHP Code'),
             '#rows' => 6,
-            '#default_value' => $finder->esetting($element, 'choices_rewrite'),
+            '#default_value' => $finder->esetting($element, 'php_code'),
             '#description' => t('PHP code that returns an associative array where the keys are the values to be submitted and the values are the display labels.  PHP must be enclosed in PHP tags.'),
             '#process' => array('ctools_dependent_process'),
-            '#dependency' => array('radio:settings[choices_style]' => array('choices_php')),
+            '#dependency' => array('radio:settings[choices_style]' => array('php_code')),
           ),
           array(
             'finder_element' => t('Object containing data about this finder element.'),
@@ -572,7 +571,7 @@ function finder_ui_element($finder, $finder_element_id) {
         )
       ),
     ),
-  );        */
+  );
 
   $items['delimit'] = array(
     '#group' => 'results',
diff --git a/modules/finder_ui/includes/field.inc b/modules/finder_ui/includes/field.inc
diff --git a/modules/finder_ui/includes/finder.inc b/modules/finder_ui/includes/finder.inc
diff --git a/modules/finder_ui/includes/item.inc b/modules/finder_ui/includes/item.inc
diff --git a/modules/finder_ui/includes/theme.inc b/modules/finder_ui/includes/theme.inc
diff --git a/modules/finder_ui/plugins/export_ui/finder_ui.class.php b/modules/finder_ui/plugins/export_ui/finder_ui.class.php
diff --git a/modules/finder_ui/plugins/export_ui/finder_ui.inc b/modules/finder_ui/plugins/export_ui/finder_ui.inc
diff --git a/plugins/element_handler/autocomplete.inc b/plugins/element_handler/autocomplete.inc
diff --git a/plugins/element_handler/autocomplete.js b/plugins/element_handler/autocomplete.js
diff --git a/plugins/element_handler/buttons.inc b/plugins/element_handler/buttons.inc
diff --git a/plugins/element_handler/onoff.inc b/plugins/element_handler/onoff.inc
diff --git a/plugins/element_handler/select.inc b/plugins/element_handler/select.inc
diff --git a/plugins/element_handler/text.inc b/plugins/element_handler/text.inc
diff --git a/plugins/finder_default/finder.finder_default.inc b/plugins/finder_default/finder.finder_default.inc
diff --git a/views/finder.views.inc b/views/finder.views.inc
diff --git a/views/finder.views_default.inc b/views/finder.views_default.inc
diff --git a/views/finder_plugin_display.inc b/views/finder_plugin_display.inc
diff --git a/views/finder_plugin_style.inc b/views/finder_plugin_style.inc
