diff --git a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
index 4cbc0fb..e811065 100644
--- a/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
+++ b/core/modules/views/src/Plugin/views/filter/FilterPluginBase.php
@@ -830,9 +830,8 @@
     }
   }
 
-
   /**
-   * Render our chunk of the exposed filter form when selecting
+   * Render our chunk of the exposed filter form when selecting.
    *
    * You can override this if it doesn't do what you expect.
    */
@@ -850,6 +849,28 @@
       $this->exposedTranslate($form[$operator], 'operator');
 
       unset($form['operator']);
+
+      // When the operator and value forms are both in play, enclose them within
+      // a wrapper, for usability.
+      if (!empty($this->options['expose']['identifier'])) {
+        $value = $this->options['expose']['identifier'];
+        $wrapper = $value . '_wrapper';
+        $form[$wrapper] = [
+          '#type' => 'fieldset',
+        ];
+
+        $exposed_info = $this->exposedInfo();
+        if (!empty($exposed_info['label'])) {
+          $form[$wrapper]['#title'] = $exposed_info['label'];
+        }
+        if (!empty($exposed_info['description'])) {
+          $form[$wrapper]['#description'] = $exposed_info['description'];
+        }
+        $form[$operator]['#title_display'] = 'invisible';
+
+        $form[$wrapper][$operator] = $form[$operator];
+        unset($form[$operator]);
+      }
     }
 
     // Build the form and set the value based on the identifier.
@@ -875,6 +896,14 @@
       if ($value != 'value') {
         unset($form['value']);
       }
+
+      // When the operator and value forms are both in play, enclose them within
+      // a wrapper, for usability.
+      if (!empty($this->options['expose']['use_operator']) && !empty($this->options['expose']['operator_id'])) {
+        $wrapper = $value . '_wrapper';
+        $form[$wrapper][$value] = $form[$value];
+        unset($form[$value]);
+      }
     }
   }
 
diff --git a/core/modules/views/src/Plugin/views/filter/NumericFilter.php b/core/modules/views/src/Plugin/views/filter/NumericFilter.php
index 7f687a1..0118016 100644
--- a/core/modules/views/src/Plugin/views/filter/NumericFilter.php
+++ b/core/modules/views/src/Plugin/views/filter/NumericFilter.php
@@ -130,8 +130,9 @@ class NumericFilter extends FilterPluginBase {
 
     return $options;
   }
+
   /**
-   * Provide a simple textfield for equality
+   * Provide a simple textfield for equality.
    */
   protected function valueForm(&$form, FormStateInterface $form_state) {
     $form['value']['#tree'] = TRUE;
@@ -149,7 +150,7 @@ class NumericFilter extends FilterPluginBase {
       $identifier = $this->options['expose']['identifier'];
 
       if (empty($this->options['expose']['use_operator']) || empty($this->options['expose']['operator_id'])) {
-        // exposed and locked.
+        // Exposed and locked.
         $which = in_array($this->operator, $this->operatorValues(2)) ? 'minmax' : 'value';
       }
       else {
@@ -194,14 +195,13 @@ class NumericFilter extends FilterPluginBase {
     if ($which == 'all' || $which == 'minmax') {
       $form['value']['min'] = [
         '#type' => 'textfield',
-        '#title' => !$exposed ? $this->t('Min') : $this->exposedInfo()['label'],
+        '#title' => $this->t('Min'),
         '#size' => 30,
         '#default_value' => $this->value['min'],
-        '#description' => !$exposed ? '' : $this->exposedInfo()['description']
       ];
       $form['value']['max'] = [
         '#type' => 'textfield',
-        '#title' => !$exposed ? $this->t('And max') : $this->t('And'),
+        '#title' => $this->t('Max'),
         '#size' => 30,
         '#default_value' => $this->value['max'],
       ];
@@ -227,7 +227,7 @@ class NumericFilter extends FilterPluginBase {
         // Ensure there is something in the 'value'.
         $form['value'] = [
           '#type' => 'value',
-          '#value' => NULL
+          '#value' => NULL,
         ];
       }
     }
