diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
index e5327f1..e91771a 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/BooleanOperator.php
@@ -38,6 +38,40 @@ class BooleanOperator extends FilterPluginBase {
   // Whether to accept NULL as a false value or not
   var $accept_null = FALSE;
 
+
+
+  /**
+   * {@inheritdoc}
+   */
+  function operator_options($which = 'title') {
+    $options = array();
+    foreach ($this->operators() as $id => $info) {
+      $options[$id] = $info[$which];
+    }
+
+    return $options;
+  }
+
+  /**
+   * @TODO
+   */
+  public function operators() {
+    return array(
+      '=' => array(
+        'title' => t('Is equal to'),
+        'method' => 'queryOpBoolean',
+        'short' => t('='),
+        'values' => 1,
+      ),
+      '!=' => array(
+        'title' => t('Is not equal to'),
+        'method' => 'queryOpBoolean',
+        'short' => t('!='),
+        'values' => 1,
+      ),
+    );
+  }
+
   /**
    * Overrides \Drupal\views\Plugin\views\filter\FilterPluginBase::init().
    */
@@ -96,10 +130,6 @@ protected function defineOptions() {
     return $options;
   }
 
-  function operator_form(&$form, &$form_state) {
-    $form['operator'] = array();
-  }
-
   function value_form(&$form, &$form_state) {
     if (empty($this->value_options)) {
       // Initialize the array of possible values for this filter.
@@ -136,7 +166,7 @@ function value_form(&$form, &$form_state) {
   }
 
   function value_validate($form, &$form_state) {
-    if ($form_state['values']['options']['value'] == 'All' && !empty($form_state['values']['options']['expose']['required'])) {
+    if (isset($form_state['values']['options']['value']) && $form_state['values']['options']['value'] == 'All' && !empty($form_state['values']['options']['expose']['required'])) {
       form_set_error('value', t('You must select a value unless this is an non-required exposed filter.'));
     }
   }
@@ -165,10 +195,20 @@ public function defaultExposeOptions() {
     $this->options['expose']['required'] = TRUE;
   }
 
+  /**
+   * {@inheritdoc}
+   */
   public function query() {
     $this->ensureMyTable();
     $field = "$this->tableAlias.$this->realField";
 
+    $info = $this->operators();
+    if (!empty($info[$this->operator]['method'])) {
+      $this->{$info[$this->operator]['method']}($field);
+    }
+  }
+
+  protected function queryOpBoolean($field) {
     if (empty($this->value)) {
       if ($this->accept_null) {
         $or = db_or()
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
index e0dd2d5..40f94bd 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/filter/FilterPluginBase.php
@@ -1002,7 +1002,7 @@ function build_group_form(&$form, &$form_state) {
       }
 
       if ($without_children) {
-        if (!empty($this->options['group_info']['group_items'][$item_id]['value'])) {
+        if (isset($this->options['group_info']['group_items'][$item_id]['value']) && $this->options['group_info']['group_items'][$item_id]['value'] != '') {
           $row['value']['#default_value'] = $this->options['group_info']['group_items'][$item_id]['value'];
         }
       }
diff --git a/core/modules/views_ui/lib/Drupal/views_ui/Tests/FilterBooleanWebTest.php b/core/modules/views_ui/lib/Drupal/views_ui/Tests/FilterBooleanWebTest.php
new file mode 100644
index 0000000..287a870
--- /dev/null
+++ b/core/modules/views_ui/lib/Drupal/views_ui/Tests/FilterBooleanWebTest.php
@@ -0,0 +1,89 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\views\Tests\Handler\FilterBooleanWebTest.
+ */
+
+namespace Drupal\views_ui\Tests;
+
+/**
+ * Tests the boolean filter UI.
+ *
+ * @see \Drupal\views\Plugin\views\filter\BooleanOperator
+ */
+class FilterBooleanWebTest extends UITestBase {
+
+  /**
+   * Views used by this test.
+   *
+   * @var array
+   */
+  public static $testViews = array('test_view');
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Filter: Boolean',
+      'description' => 'Tests the boolean filter UI.',
+      'group' => 'Views UI',
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function dataSet() {
+    // Use default dataset but remove the age from john and paul
+    $data = parent::dataSet();
+    $data[0]['age'] = 0;
+    $data[3]['age'] = 0;
+    return $data;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  protected function viewsData() {
+    $data = parent::viewsData();
+    $data['views_test_data']['age']['filter']['id'] = 'boolean';
+    return $data;
+  }
+
+  /**
+   * Tests the filter boolean UI.
+   */
+  public function testFilterBooleanUI() {
+    $this->drupalPost('admin/structure/views/nojs/add-item/test_view/default/filter', array('name[views_test_data.age]' => TRUE), t('Add and configure @handler', array('@handler' => t('filter criteria'))));
+
+    $this->drupalPost(NULL, array(), t('Expose filter'));
+    $this->drupalPost(NULL, array(), t('Grouped filters'));
+
+    $edit = array();
+    $edit['options[group_info][group_items][1][title]'] = 'Published';
+    $edit['options[group_info][group_items][1][operator]'] = '=';
+    $edit['options[group_info][group_items][1][value]'] = 1;
+    $edit['options[group_info][group_items][2][title]'] = 'Not published';
+    $edit['options[group_info][group_items][2][operator]'] = '=';
+    $edit['options[group_info][group_items][2][value]'] = 0;
+    $edit['options[group_info][group_items][3][title]'] = 'Not published2';
+    $edit['options[group_info][group_items][3][operator]'] = '!=';
+    $edit['options[group_info][group_items][3][value]'] = 1;
+
+    $this->drupalPost(NULL, $edit, t('Apply'));
+
+    $this->drupalGet('admin/structure/views/nojs/config-item/test_view/default/filter/age');
+
+    $result = $this->xpath('//input[@name="options[group_info][group_items][1][value]"]');
+    $this->assertEqual((int) $result[1]->attributes()->checked, 'checked');
+    $result = $this->xpath('//input[@name="options[group_info][group_items][2][value]"]');
+    $this->assertEqual((int) $result[2]->attributes()->checked, 'checked');
+    $result = $this->xpath('//input[@name="options[group_info][group_items][3][value]"]');
+    $this->assertEqual((int) $result[1]->attributes()->checked, 'checked');
+
+    $this->drupalPost(NULL, $edit, t('Apply'));
+    $this->drupalPost(NULL, array(), t('Save'));
+    $view = entity_load('view', 'test_view');
+    $display = $view->getDisplay('default');
+  }
+
+}
