diff --git a/composer.json b/composer.json
index 34ab0a256900d706b0f1de8689fa529f7797d851..131a640f065d9db2a113acd3c4dd41e05b96cda6 100644
--- a/composer.json
+++ b/composer.json
@@ -74,7 +74,7 @@
         "drupal/admin_toolbar": "1.24",
         "drupal/administerusersbyrole": "2.0-alpha6",
         "drupal/allowed_formats": "1.1",
-        "drupal/better_exposed_filters": "3.0-alpha3",
+        "drupal/better_exposed_filters": "3.0-alpha4",
         "drupal/block_permissions": "^1.0",
         "drupal/block_region_permissions": "^1.2",
         "drupal/bootstrap": "3.5",
diff --git a/composer.lock b/composer.lock
index 911cd135cce1ed8ebe00253a53f9ccf1ab4ec0a0..97231667f6f594c5883febb133b0ee05519235d3 100644
--- a/composer.lock
+++ b/composer.lock
@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file",
         "This file is @generated automatically"
     ],
-    "content-hash": "60e47e19de7071bb94ff15a24b7a3cfd",
+    "content-hash": "5708485abce6f91ba4060cba02b1f1db",
     "packages": [
         {
             "name": "alchemy/zippy",
@@ -1564,17 +1564,17 @@
         },
         {
             "name": "drupal/better_exposed_filters",
-            "version": "3.0.0-alpha3",
+            "version": "3.0.0-alpha4",
             "source": {
                 "type": "git",
                 "url": "https://git.drupal.org/project/better_exposed_filters",
-                "reference": "8.x-3.0-alpha3"
+                "reference": "8.x-3.0-alpha4"
             },
             "dist": {
                 "type": "zip",
-                "url": "https://ftp.drupal.org/files/projects/better_exposed_filters-8.x-3.0-alpha3.zip",
-                "reference": "8.x-3.0-alpha3",
-                "shasum": "0268a42ea5a4ab170c8f4aefecd26b6f3c7448d2"
+                "url": "https://ftp.drupal.org/files/projects/better_exposed_filters-8.x-3.0-alpha4.zip",
+                "reference": "8.x-3.0-alpha4",
+                "shasum": "f42013d1fc36d45212d582e18afc59bc2c364719"
             },
             "require": {
                 "drupal/core": "*"
@@ -1585,7 +1585,7 @@
                     "dev-3.x": "3.x-dev"
                 },
                 "drupal": {
-                    "version": "8.x-3.0-alpha3",
+                    "version": "8.x-3.0-alpha4",
                     "datestamp": "1525044484",
                     "security-coverage": {
                         "status": "not-covered",
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index d1bb9bb8e0facfcfaab8ce179488a49d258e9667..9ec806fba6edb4df77f2b70be64e216af0459d5c 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1615,18 +1615,18 @@
     },
     {
         "name": "drupal/better_exposed_filters",
-        "version": "3.0.0-alpha3",
-        "version_normalized": "3.0.0.0-alpha3",
+        "version": "3.0.0-alpha4",
+        "version_normalized": "3.0.0.0-alpha4",
         "source": {
             "type": "git",
             "url": "https://git.drupal.org/project/better_exposed_filters",
-            "reference": "8.x-3.0-alpha3"
+            "reference": "8.x-3.0-alpha4"
         },
         "dist": {
             "type": "zip",
-            "url": "https://ftp.drupal.org/files/projects/better_exposed_filters-8.x-3.0-alpha3.zip",
-            "reference": "8.x-3.0-alpha3",
-            "shasum": "0268a42ea5a4ab170c8f4aefecd26b6f3c7448d2"
+            "url": "https://ftp.drupal.org/files/projects/better_exposed_filters-8.x-3.0-alpha4.zip",
+            "reference": "8.x-3.0-alpha4",
+            "shasum": "f42013d1fc36d45212d582e18afc59bc2c364719"
         },
         "require": {
             "drupal/core": "*"
@@ -1637,7 +1637,7 @@
                 "dev-3.x": "3.x-dev"
             },
             "drupal": {
-                "version": "8.x-3.0-alpha3",
+                "version": "8.x-3.0-alpha4",
                 "datestamp": "1525044484",
                 "security-coverage": {
                     "status": "not-covered",
diff --git a/web/modules/better_exposed_filters/better_exposed_filters.info.yml b/web/modules/better_exposed_filters/better_exposed_filters.info.yml
index f2d1d3e77d2d57cd6374a4114b155f260096b768..b5e40eb0a92416a78edb74a30408d963b8254cb9 100644
--- a/web/modules/better_exposed_filters/better_exposed_filters.info.yml
+++ b/web/modules/better_exposed_filters/better_exposed_filters.info.yml
@@ -4,10 +4,10 @@ description: Provides advanced options (such as links, checkboxes, or jQueryUI w
 type: module
 package: Views
 dependencies:
-  - views
+  - drupal:views
 
-# Information added by Drupal.org packaging script on 2017-07-28
-version: '8.x-3.0-alpha3'
+# Information added by Drupal.org packaging script on 2018-04-29
+version: '8.x-3.0-alpha4'
 core: '8.x'
 project: 'better_exposed_filters'
-datestamp: 1501274345
+datestamp: 1525044488
diff --git a/web/modules/better_exposed_filters/better_exposed_filters.module b/web/modules/better_exposed_filters/better_exposed_filters.module
index ee7648c1e6dc1f9dd4d7f41da4fe9d00263ffcf1..bf29b7869f642382b3442b71445180786a114c00 100644
--- a/web/modules/better_exposed_filters/better_exposed_filters.module
+++ b/web/modules/better_exposed_filters/better_exposed_filters.module
@@ -296,8 +296,9 @@ function _bef_preprocess_nested_elements(array &$variables) {
  */
 function bef_sort_combine_submit($form, FormStateInterface $form_state) {
   $sortBy = $sortOrder = '';
-  if ($form_state->hasValue('sort_bef_combine')) {
-    list($sortBy, $sortOrder) = explode(' ', $form_state->getValue('sort_bef_combine'));
+  $combined = $form_state->getValue('sort_bef_combine');
+  if (!empty($combined)) {
+    list($sortBy, $sortOrder) = explode(' ', $combined);
   }
   $form_state->setValue('sort_by', $sortBy);
   $form_state->setValue('sort_order', $sortOrder);
diff --git a/web/modules/better_exposed_filters/better_exposed_filters.theme b/web/modules/better_exposed_filters/better_exposed_filters.theme
index 8d3f4426f9ba1e1e3ab7307f712a28e064c1f3a7..d51a79d5b9afc5bd4795442ef480ed6b9d03c621 100644
--- a/web/modules/better_exposed_filters/better_exposed_filters.theme
+++ b/web/modules/better_exposed_filters/better_exposed_filters.theme
@@ -87,7 +87,8 @@ function theme_select_as_hidden($vars) {
     // Check for Taxonomy-based filters.
     if (is_object($elem)) {
       $slice = array_slice($elem->option, 0, 1, TRUE);
-      list($option, $elem) = each($slice);
+      $option = key($slice);
+      $elem = current($slice);
     }
 
     // Check for optgroups.  Put subelements in the $element_set array and add a
@@ -212,7 +213,8 @@ function theme_select_as_tree($vars) {
     // Check for Taxonomy-based filters.
     if (is_object($option_label)) {
       $slice = array_slice($option_label->option, 0, 1, TRUE);
-      list($option_value, $option_label) = each($slice);
+      $option_value = key($slice);
+      $option_label = current($slice);
     }
 
     // Check for optgroups -- which is basically a two-level deep tree.
@@ -391,7 +393,8 @@ function theme_select_as_links($vars) {
     // Check for Taxonomy-based filters.
     if (is_object($elem)) {
       $slice = array_slice($elem->option, 0, 1, TRUE);
-      list($option, $elem) = each($slice);
+      $option = key($slice);
+      $elem = current($slice);
     }
 
     // Check for optgroups.  Put subelements in the $element_set array and add
diff --git a/web/modules/better_exposed_filters/config/schema/better_exposed_filters.exposed_form.schema.yml b/web/modules/better_exposed_filters/config/schema/better_exposed_filters.exposed_form.schema.yml
index 167f9d8e39a19f75237c93bb2e19ddc506d4d9c8..2bc504662f3967e5d4b0d877d21fb56189a7a26e 100644
--- a/web/modules/better_exposed_filters/config/schema/better_exposed_filters.exposed_form.schema.yml
+++ b/web/modules/better_exposed_filters/config/schema/better_exposed_filters.exposed_form.schema.yml
@@ -12,6 +12,9 @@ better_exposed_filters.general:
     autosubmit:
       type: boolean
       label: 'Autosubmit'
+    autosubmit_exclude_textfield:
+      type: boolean
+      label: 'Exclude Textfield'
     autosubmit_hide:
       type: boolean
       label: 'Hide submit button'
diff --git a/web/modules/better_exposed_filters/js/bef_select_all_none.js b/web/modules/better_exposed_filters/js/bef_select_all_none.js
index f855042a3ed2485d89887214d2b64ad3760d80eb..30d6313c205c73af35d56669493932e8b2f7f610 100644
--- a/web/modules/better_exposed_filters/js/bef_select_all_none.js
+++ b/web/modules/better_exposed_filters/js/bef_select_all_none.js
@@ -68,7 +68,7 @@
 
             // If all checkboxes are already checked by default then switch to Select None
             if ($('input:checkbox:checked', this).length == $('input:checkbox', this).length) {
-              newLink.click();
+              newLink.text(selNone);
             }
           })
         ;
diff --git a/web/modules/better_exposed_filters/src/Plugin/views/exposed_form/BetterExposedFilters.php b/web/modules/better_exposed_filters/src/Plugin/views/exposed_form/BetterExposedFilters.php
index 72348d0c25323282c0dbff0700d1adc12e47894c..9e52626a7e8d610338204c53a81bd8fe6afa0478 100644
--- a/web/modules/better_exposed_filters/src/Plugin/views/exposed_form/BetterExposedFilters.php
+++ b/web/modules/better_exposed_filters/src/Plugin/views/exposed_form/BetterExposedFilters.php
@@ -88,6 +88,18 @@ public function buildOptionsForm(&$form, FormStateInterface $form_state) {
       '#default_value' => $existing['general']['autosubmit'],
     );
 
+    $bef_options['general']['autosubmit_exclude_textfield'] = array(
+      '#type' => 'checkbox',
+      '#title' => $this->t('Exclude Textfield'),
+      '#description' => $this->t('Exclude Textfield from autosubmit. User will have to press enter key or click submit.'),
+      '#default_value' => $existing['general']['autosubmit_exclude_textfield'],
+      '#states' => array(
+        'visible' => array(
+          ':input[name="exposed_form_options[bef][general][autosubmit]"]' => array('checked' => TRUE),
+        ),
+      ),
+    );
+
     $bef_options['general']['autosubmit_hide'] = array(
       '#type' => 'checkbox',
       '#title' => $this->t('Hide submit button'),
@@ -644,6 +656,14 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
       $form['actions']['submit']['#attributes']['data-bef-auto-submit-click'] = '';
       $form['#attached']['library'][] = 'better_exposed_filters/auto_submit';
 
+      if (!empty($settings['general']['autosubmit_exclude_textfield'])) {
+        foreach ($form as &$element) {
+          if (isset($element['#type']) && $element['#type'] == 'textfield') {
+            $element['#attributes'] = ['data-bef-auto-submit-exclude' => ''];
+          }
+        }
+      }
+
       if (!empty($settings['general']['autosubmit_hide'])) {
         $form['actions']['submit']['#attributes']['class'][] = 'js-hide';
       }
@@ -719,7 +739,7 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
             // the view results appear on. This can cause problems with
             // select_as_links options as they will use the wrong path. We
             // provide a hint for theme functions to correct this.
-            $form['sort_bef_combine']['#bef_path'] = $this->displayHandler->getUrl();
+            $form['sort_bef_combine']['#bef_path'] = $this->getExposedFormActionUrl();
             break;
 
           case 'default':
@@ -747,12 +767,14 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
         // Leave sort_by and sort_order as separate elements.
         if ('bef' == $settings['sort']['bef_format']) {
           foreach (['sort_by', 'sort_order'] as $field) {
-            $form[$field]['#theme'] = 'bef_radios';
-            $form[$field]['#type'] = 'radios';
-            if (empty($form[$field]['#process'])) {
-              $form[$field]['#process'] = array();
+            if (!empty($form[$field])) {
+              $form[$field]['#theme'] = 'bef_radios';
+              $form[$field]['#type'] = 'radios';
+              if (empty($form[$field]['#process'])) {
+                $form[$field]['#process'] = array();
+              }
+              $form[$field]['#process'][] = ['\Drupal\Core\Render\Element\Radios', 'processRadios'];
             }
-            $form[$field]['#process'][] = ['\Drupal\Core\Render\Element\Radios', 'processRadios'];
           }
         }
         elseif ('bef_links' == $settings['sort']['bef_format']) {
@@ -765,9 +787,9 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
           // view results appear on. This can cause problems with
           // select_as_links options as they will use the wrong path. We provide
           // a hint for theme functions to correct this.
-          $form['sort_by']['#bef_path'] = $this->displayHandler->getUrl();
+          $form['sort_by']['#bef_path'] = $this->getExposedFormActionUrl();
           if(!empty($form['sort_order'])) {
-            $form['sort_order']['#bef_path'] = $this->displayHandler->getUrl();
+            $form['sort_order']['#bef_path'] = $this->getExposedFormActionUrl();
           }
         }
 
@@ -834,7 +856,7 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
             // the view results appear on. This can cause problems with
             // select_as_links options as they will use the wrong path. We
             // provide a hint for theme functions to correct this.
-            $form['items_per_page']['#bef_path'] = $this->displayHandler->getUrl();
+            $form['items_per_page']['#bef_path'] = $this->getExposedFormActionUrl();
           }
           break;
       }
@@ -1082,7 +1104,7 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
           // the view results appear on. This can cause problems with
           // select_as_links options as they will use the wrong path. We provide
           // a hint for theme functions to correct this.
-          $form[$field_id]['#bef_path'] = $this->displayHandler->getUrl();
+          $form[$field_id]['#bef_path'] = $this->getExposedFormActionUrl();
           break;
 
         case 'bef_single':
@@ -1090,8 +1112,36 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
 
           // Use filter label as checkbox label.
           $form[$field_id]['#title'] = $filters[$label]->options['expose']['label'];
-          $form[$field_id]['#return_value'] = 1;
           $form[$field_id]['#type'] = 'checkbox';
+          // Views populates missing values in $form_state['input'] with the
+          // defaults and a checkbox does not appear in $_GET (or $_POST) so it
+          // will appear to be missing when a user submits a form. Because of
+          // this, instead of unchecking the checkbox value will revert to the
+          // default. More, the default value for select values is reused which
+          // results in the checkbox always checked. So we need to add a form
+          // element to see whether the form is submitted or not and then we
+          // need to look at $_GET directly to see whether the checkbox is
+          // there. For security reasons, we must not copy the $_GET value.
+
+          // First, let's figure out a short name for the signal element and
+          // then add it.
+          if (empty($signal)) {
+            for ($signal = 'a'; isset($form[$signal]); $signal++);
+            // This is all the signal element needs.
+            $form[$signal]['#type'] = 'hidden';
+          }
+          $input = $form_state->getUserInput();
+          $value = \Drupal::request()->query->get($field_id);
+          $checked = isset($input[$signal]) ? isset($value) : $form[$field_id]['#default_value'];
+          // For security, we check if value is valid and exist.
+          if ($checked) {
+            if (!in_array($value, array_keys($form[$field_id]['#options']))) {
+              $checked = FALSE;
+            }
+          }
+          // Now we know whether the checkbox is checked or not, set #value
+          // accordingly.
+          $form[$field_id]['#value'] = $checked ? $value : 0;
           break;
 
         case 'bef':
@@ -1167,9 +1217,11 @@ public function exposedFormAlter(&$form, FormStateInterface $form_state) {
         $form['#info']["filter-$label"]['description'] = '';
 
         // Check if the operator is exposed for this filter.
-        if ($this->view->getHandlers('filter')[$field_id]['expose']['use_operator']) {
+        if (isset($this->view->getHandlers('filter')[$label])
+          && $this->view->getHandlers('filter')[$label]['expose']['use_operator']
+        ) {
           // Include the exposed operator with the filter.
-          $operator_id = $this->view->getHandlers('filter')[$field_id]['expose']['operator_id'];
+          $operator_id = $this->view->getHandlers('filter')[$label]['expose']['operator_id'];
           $form[$field_id][$operator_id] = $form[$operator_id];
           unset($form[$operator_id]);
         }
@@ -1322,7 +1374,8 @@ protected function rewriteOptions(array $options, $rewriteSettings, $reorder = F
         }
         else {
           if ($return[$index] instanceof \stdClass) {
-            list($tid, $text) = each($return[$index]->option);
+            $tid = key($return[$index]->option);
+            $text = current($return[$index]->option);
             $return[$index]->option[$tid] = $rewrites[$text];
           }
           else {
@@ -1357,7 +1410,8 @@ protected function cleanOptions(array $options) {
       // need to be converted to text.
       if (is_object($value) && !is_a($value, 'Drupal\Core\StringTranslation\TranslatableMarkup')) {
         reset($value->option);
-        list($key, $val) = each($value->option);
+        $key = key($value->option);
+        $val = current($value->option);
         $clean[$key] = $val;
       }
       else {
@@ -1471,6 +1525,7 @@ protected function getSettings() {
         'allow_secondary' => FALSE,
         'secondary_label' => $this->t('Advanced options'),
         'autosubmit' => FALSE,
+        'autosubmit_exclude_textfield' => FALSE,
         'autosubmit_hide' => FALSE,
       ),
       'sort' => array(
@@ -1542,4 +1597,22 @@ protected function getSettings() {
     return $settings;
   }
 
+  /**
+   * Returns exposed form action URL object.
+   *
+   * @return \Drupal\Core\Url
+   *   Url object.
+   */
+  protected function getExposedFormActionUrl() {
+    if ($this->displayHandler->getRoutedDisplay()) {
+      return $this->displayHandler->getUrl();
+    }
+
+    $request = \Drupal::request();
+    $url = Url::createFromRequest($request);
+    $url->setAbsolute();
+
+    return $url;
+  }
+
 }
diff --git a/web/modules/better_exposed_filters/tests/bef_test/bef_test.info.yml b/web/modules/better_exposed_filters/tests/bef_test/bef_test.info.yml
index 8eefb0ca9e43584dd1650d23545cce1944a1af32..0005b22879d1f6b3a7545fa66cc79ee751f23cce 100644
--- a/web/modules/better_exposed_filters/tests/bef_test/bef_test.info.yml
+++ b/web/modules/better_exposed_filters/tests/bef_test/bef_test.info.yml
@@ -10,8 +10,8 @@ dependencies:
   - options
   - user
 
-# Information added by Drupal.org packaging script on 2017-07-28
-version: '8.x-3.0-alpha3'
+# Information added by Drupal.org packaging script on 2018-04-29
+version: '8.x-3.0-alpha4'
 core: '8.x'
 project: 'better_exposed_filters'
-datestamp: 1501274345
+datestamp: 1525044488
diff --git a/web/modules/better_exposed_filters/tests/bef_test/bef_test.install b/web/modules/better_exposed_filters/tests/bef_test/bef_test.install
index e4b21ff30a7830a885ab3d91e277048b36b8d9c6..e43bc07da7f6154a0c554e9c106a8c99337d0ce9 100644
--- a/web/modules/better_exposed_filters/tests/bef_test/bef_test.install
+++ b/web/modules/better_exposed_filters/tests/bef_test/bef_test.install
@@ -69,7 +69,7 @@ function bef_test_install() {
  *   TID of the newly created term.
  */
 function _bef_test_add_term($name, $parent = 0) {
-  $term = \Drupal::entityManager()->getStorage('taxonomy_term')->create([
+  $term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->create([
     'vid' => 'bef_test_location',
     'name' => $name,
     'parent' => [$parent],
diff --git a/web/modules/better_exposed_filters/tests/src/Unit/BetterExposedFiltersTest.php b/web/modules/better_exposed_filters/tests/src/Unit/BetterExposedFiltersTest.php
index 244ce73386709ca38f7a84fd0509415835e2ecb4..cade986a7b1d6e1479c8294eb839541db27c7669 100644
--- a/web/modules/better_exposed_filters/tests/src/Unit/BetterExposedFiltersTest.php
+++ b/web/modules/better_exposed_filters/tests/src/Unit/BetterExposedFiltersTest.php
@@ -1,10 +1,5 @@
 <?php
 
-/**
- * @file
- * Contains \Drupal\better_exposed_filters\Tests\BetterExposedFiltersTest.
- */
-
 namespace Drupal\better_exposed_filters\Tests;
 
 use Drupal\better_exposed_filters\Plugin\views\exposed_form\BetterExposedFilters;