diff --git a/select_or_other.field_widget.inc b/select_or_other.field_widget.inc
index 6479997..6e35327 100644
--- a/select_or_other.field_widget.inc
+++ b/select_or_other.field_widget.inc
@@ -99,10 +99,11 @@ function _select_or_other_field_widget_get_available_options($select_or_other_fi
   }
   return $select_or_other_field_widget_list;
 }
+
 /**
  * Prepare options for the widget list.
  */
-function select_or_other_field_widget_form_prepare_options($field, $instance, $has_value = FALSE) {
+function select_or_other_field_widget_form_prepare_options($field, $instance) {
   $options = array();
 
   $settings = &$instance['widget']['settings'];
@@ -121,33 +122,20 @@ function select_or_other_field_widget_form_prepare_options($field, $instance, $h
     }
   }
 
-  $required = (isset($instance['required']) && $instance['required']);
-  $multiple = (($instance['widget']['type'] == 'select_or_other' && $field['cardinality'] == -1)
-    || ($instance['widget']['type'] == 'select_or_other_sort'));
-  $multiple_checkbox = ($instance['widget']['type'] == 'select_or_other_buttons' && $field['cardinality'] == -1);
-
-  $empty_option = array('_none' => theme('select_or_other_none', array('instance' => $instance)));
-  // Multiple select.
-  if ($multiple) {
-    // Add a 'none' option for non-required fields.
-    if (!$required) {
-      $options = $empty_option + $options;
-    }
-  }
-  // Single select.
-  elseif (!$multiple_checkbox) {
-    // Add a 'none' option for non-required fields, and a 'select a value'
-    // option for required fields that do not come with a value selected.
-    if (!$required) {
-      $options = $empty_option + $options;
-    }
-  }
-
   // @todo: This isset() can probably be taken out in drupal 8.
   if (isset($settings['sort_options']) && $settings['sort_options']) {
     natcasesort($options);
   }
 
+  // Add the N/A option for non-required radios
+  if ($instance['widget']['type'] === 'select_or_other_buttons' &&
+    !$instance['required'] &&
+    $field['cardinality'] === 1
+  ) {
+    $empty_option = array('_none' => 'N/A');
+    $options = array_merge($empty_option, $options);
+  }
+
   return $options;
 }
 
@@ -155,23 +143,31 @@ function select_or_other_field_widget_form_prepare_options($field, $instance, $h
  * Implements hook_field_widget_form().
  */
 function select_or_other_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) {
+  $default_value = NULL;
+  if (isset($items[$delta]['value'])) {
+    $default_value = $items[$delta]['value'];
+  }
+  elseif ($instance['widget']['type'] === 'select_or_other_buttons') {
+    $default_value = '_none';
+  }
+
   // Construct the element.
   $element = $element + array(
-    '#type' => 'select_or_other',
-    '#other' => isset($instance['widget']['settings']['other']) ? $instance['widget']['settings']['other'] : t('Other'),
-    '#other_title' => !empty($instance['widget']['settings']['other_title']) ? $instance['widget']['settings']['other_title'] : NULL,
-    '#other_size' => $instance['widget']['settings']['other_size'],
-    '#default_value' => isset($items[$delta]['value']) ? $items[$delta]['value'] : NULL,
-    '#options' => select_or_other_field_widget_form_prepare_options($field, $instance, !empty($items[$delta])),
-    '#description' => isset($instance['description']) ? $instance['description'] : '',
-    '#multiple' => $field['cardinality'] == 1 ? FALSE : $field['cardinality'],
-    '#required' => $instance['required'],
-    //'#other_delimiter' => $field['widget']['settings']['other_delimiter'] == 'FALSE' ? FALSE : $field['widget']['settings']['other_delimiter'],
-    '#other_delimiter' => FALSE,
-    '#other_unknown_defaults' => isset($instance['widget']['settings']['other_unknown_defaults']) ? $instance['widget']['settings']['other_unknown_defaults'] : 'other',
-    '#element_validate' => array('select_or_other_field_widget_validate'),
-    '#field_widget' => $instance['widget']['type'],
-  );
+      '#type' => 'select_or_other',
+      '#other' => isset($instance['widget']['settings']['other']) ? $instance['widget']['settings']['other'] : t('Other'),
+      '#other_title' => !empty($instance['widget']['settings']['other_title']) ? $instance['widget']['settings']['other_title'] : NULL,
+      '#other_size' => $instance['widget']['settings']['other_size'],
+      '#default_value' => $default_value,
+      '#options' => select_or_other_field_widget_form_prepare_options($field, $instance),
+      '#description' => isset($instance['description']) ? $instance['description'] : '',
+      '#multiple' => $field['cardinality'] == 1 ? FALSE : $field['cardinality'],
+      '#required' => $instance['required'],
+      //'#other_delimiter' => $field['widget']['settings']['other_delimiter'] == 'FALSE' ? FALSE : $field['widget']['settings']['other_delimiter'],
+      '#other_delimiter' => FALSE,
+      '#other_unknown_defaults' => isset($instance['widget']['settings']['other_unknown_defaults']) ? $instance['widget']['settings']['other_unknown_defaults'] : 'other',
+      '#element_validate' => array('select_or_other_field_widget_validate'),
+      '#field_widget' => $instance['widget']['type'],
+    );
   if (!empty($field['settings']['max_length'])) {
     $element['#maxlength'] = $field['settings']['max_length'];
   }
@@ -309,25 +305,9 @@ function select_or_other_field_widget_settings_validate($element, &$form_state,
 }
 
 /**
- * Transforms submitted form values into field storage format.
- * Align with Drupal core select list, NULL (-None-) value.
- * http://drupal.org/node/1830090
- */
-function _select_or_other_options_form_to_storage($value) {
-  if (isset($value[0])) {
-    $index = array_search('_none', $value[0], TRUE);
-    if ($index !== FALSE) {
-      unset($value[0][$index]);
-    }
-  }
-  return $value;
-}
-
-/**
  * Element validate callback for a Select (or other) field widget.
  */
 function select_or_other_field_widget_validate($element, &$form_state) {
-  //$field_name = $element['#parents'][count($element['#parents']) - 2];
   $field_name = $element['#field_name'];
   $field_info = field_info_field($field_name);
 
@@ -349,33 +329,43 @@ function select_or_other_field_widget_validate($element, &$form_state) {
     $value = $element['select']['#value'];
   }
   if ($other_selected && !$element['other']['#value']) {
-    form_error($element['other'], t('!name: !title is required', array('!name' => t($element['select']['#title']), '!title' => $element['#other'])));
+    form_error($element['other'], t('!name: !title is required', array(
+      '!name' => t($element['select']['#title']),
+      '!title' => $element['#other']
+    )));
   }
-  if (isset($value) && $value !== "") {
-    if (in_array($element['#field_widget'], array('select_or_other', 'select_or_other_buttons'))) {
-      // Filter out 'none' value (if present, will always be in key 0)
-      if (isset($items[0]['value']) && $items[0]['value'] === '') {
-        unset($items[0]);
-      }
+  if ($value !== "") {
+    if (in_array($element['#field_widget'], array(
+      'select_or_other',
+      'select_or_other_buttons'
+    ))) {
       if ($element['#multiple'] >= 2 && count($value) > $element['#multiple']) {
-        form_error($element['select'], t('!name: cannot hold more than @count values.', array('!name' => t($element['select']['#title']), '@count' => $element['#multiple'])));
+        form_error($element['select'], t('!name: cannot hold more than @count values.', array(
+          '!name' => t($element['select']['#title']),
+          '@count' => $element['#multiple']
+        )));
       }
-      $delta = 0;
       $values = array();
-      foreach ((array)$value as $v) {
-        if ($field_info['type'] == 'number_integer' && !preg_match('/^-?\d+$/', $v) && $v != '_none') {
-          form_error($element, t('!name field must be a valid integer.', array('!name' => t($element['select']['#title']))));
-          break;
-        }
-        if (($field_info['type'] == 'number_float' || $field_info['type'] == 'number_decimal') && !is_numeric($v)) {
-          form_error($element, t('!name field must be a valid integer or decimal.', array('!name' => t($element['select']['#title']))));
-          break;
+      foreach ((array) $value as $v) {
+        // Ignore '_none' as it is the empty value.
+        if ($v !== '_none') {
+          if ($field_info['type'] == 'number_integer' && !preg_match('/^-?\d+$/', $v)) {
+            form_error($element, t('!name field must be a valid integer.', array('!name' => t($element['select']['#title']))));
+            break;
+          }
+          if (($field_info['type'] == 'number_float' || $field_info['type'] == 'number_decimal') && !is_numeric($v)) {
+            form_error($element, t('!name field must be a valid integer or decimal.', array('!name' => t($element['select']['#title']))));
+            break;
+          }
+          elseif ($field_info['type'] == 'text' && drupal_strlen($v) > $field_info['settings']['max_length']) {
+            form_error($element, t('!name field must be a string at most @max characters long.', array(
+              '!name' => t($element['select']['#title']),
+              '@max' => $field_info['settings']['max_length']
+            )));
+            break;
+          }
+          $values[]['value'] = $v;
         }
-        elseif ($field_info['type'] == 'text' && drupal_strlen($v) > $field_info['settings']['max_length']) {
-          form_error($element, t('!name field must be a string at most @max characters long.', array('!name' => t($element['select']['#title']), '@max' => $field_info['settings']['max_length'])));
-          break;
-        }
-        $values[$delta++]['value'] = $v;
       }
       $value = $values;
     }
@@ -383,10 +373,6 @@ function select_or_other_field_widget_validate($element, &$form_state) {
       $value = array('value' => $value);
     }
 
-    // Align with Drupal core select list, NULL (-None-) value.
-    // http://drupal.org/node/1830090
-    $value = _select_or_other_options_form_to_storage($value);
-
     form_set_value($element, $value, $form_state);
     $form_state['clicked_button']['#post'][$element['#name']] = $value; // Is this something we should do?
   }
@@ -394,7 +380,7 @@ function select_or_other_field_widget_validate($element, &$form_state) {
     form_set_value($element, array(array('value' => '')), $form_state);
   }
 
-  // Add values to available options is configured to do so.
+  // Add values to available options if configured to do so.
   if (!empty($form_state['field'][$field_name][$element['#parents'][1]]['instance'])) {
     $instance = $form_state['field'][$field_name][$element['#parents'][1]]['instance'];
   }
@@ -416,8 +402,6 @@ function select_or_other_field_widget_validate($element, &$form_state) {
       field_update_instance($instance);
     }
   }
-
-  //return $element;
 }
 
 /**
diff --git a/select_or_other.module b/select_or_other.module
index 7f26e81..c8094e8 100644
--- a/select_or_other.module
+++ b/select_or_other.module
@@ -20,12 +20,6 @@ function select_or_other_theme() {
     'select_or_other' => array(
       'render element' => 'element',
     ),
-    'select_or_other_none' => array(
-      'variables' => array(
-        'instance' => NULL,
-        'option' => NULL,
-      ),
-    ),
   );
 
 }
@@ -237,40 +231,6 @@ function select_or_other_element_validate($element, &$form_state) {
 }
 
 /**
- * Returns HTML for the label for the empty value for options that are not required.
- *
- * The default theme will display N/A for a radio list and '- None -' for a select.
- *
- * @param $variables
- *   An associative array containing:
- *   - instance: An array representing the widget requesting the options.
- *   - option: An array representing the widget requesting the options.
- *
- */
-function theme_select_or_other_none($variables) {
-  $instance = $variables['instance'];
-
-  $output = '';
-  switch ($instance['widget']['type']) {
-    case 'select_or_other_buttons':
-      $output = t('N/A');
-      break;
-
-    case 'select_or_other':
-    case 'select_or_other_sort':
-      if (!empty($variables['option']) && $variables['option'] == 'option_none') {
-        $output = t('- None -');
-      }
-      else {
-        $output = t('- Select a value -');
-      }
-      break;
-  }
-
-  return $output;
-}
-
-/**
  * Helper function to check keys in multidimensional array.
  *
  * @param $needle
