diff --git a/better_exposed_filters_exposed_form_plugin.inc b/better_exposed_filters_exposed_form_plugin.inc
index 7298658..33b803a 100644
--- a/better_exposed_filters_exposed_form_plugin.inc
+++ b/better_exposed_filters_exposed_form_plugin.inc
@@ -1410,7 +1410,25 @@ dateFormat: "dd-mm-yy"
           $form[$filter_id]['#description'] = $options['more_options']['bef_filter_description'];
           $form[$filter_id]['#return_value'] = 1;
           $form[$filter_id]['#type'] = 'checkbox';
-
+          // Exposed forms are never considered submitted by form API so
+          // we need to redo form_type_checkbox_value() for ourselves. First,
+          // we need a form element to signal the form is submitted.
+          if (empty($signal)) {
+            // Find a short name which is not used in the form.
+            for ($signal = 'a'; isset($form[$signal]); $signal++);
+            // This is the signal element.
+            $form[$signal] = array(
+              '#type' => 'hidden',
+              'value' => '',
+            );
+          }
+          // If it is submitted then the value depends on whether this filter
+          // is in $_GET. Views loads the defaults into $form_state['input']
+          // so $_GET must be used. If it is not submitted then the default
+          // value can be used.
+          $value = isset($form_state['input'][$signal]) ? isset($_GET[$filter_id]) : $form[$filter_id]['#default_value'];
+          // Now make it the same as return value or 0.
+          $form[$filter_id]['#value'] = $value ? 1 : 0;
           // Handoff to the theme layer.
           $form[$filter_id]['#theme'] = 'checkbox';
           break;
