diff --git a/core/modules/node/lib/Drupal/node/Plugin/views/argument_validator/Node.php b/core/modules/node/lib/Drupal/node/Plugin/views/argument_validator/Node.php
index 4607e77..5e187d4 100644
--- a/core/modules/node/lib/Drupal/node/Plugin/views/argument_validator/Node.php
+++ b/core/modules/node/lib/Drupal/node/Plugin/views/argument_validator/Node.php
@@ -10,6 +10,7 @@
 use Drupal\Core\Annotation\Plugin;
 use Drupal\Core\Annotation\Translation;
 use Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase;
+use Drupal\views\Plugin\views\HandlerBase;
 
 /**
  * Validate whether an argument is an acceptable node.
@@ -109,17 +110,16 @@ function validate_argument($argument) {
         return isset($types[$node->type]);
 
       case 'nids':
-        $nids = new stdClass();
-        $nids->value = array($argument);
-        $nids = $this->breakPhrase($argument, $nids);
-        if ($nids->value == array(-1)) {
+        extract(HandlerBase::breakPhrase($this->argument, TRUE));
+
+        if ($value === array(-1)) {
           return FALSE;
         }
 
-        $test = drupal_map_assoc($nids->value);
+        $test = drupal_map_assoc($value);
         $titles = array();
 
-        $nodes = node_load_multiple($nids->value);
+        $nodes = node_load_multiple($value);
         foreach ($nodes as $node) {
           if ($types && empty($types[$node->type])) {
             return FALSE;
@@ -135,7 +135,7 @@ function validate_argument($argument) {
           unset($test[$node->nid]);
         }
 
-        $this->argument->validated_title = implode($nids->operator == 'or' ? ' + ' : ', ', $titles);
+        $this->argument->validated_title = implode($operator === 'or' ? ' + ' : ', ', $titles);
         // If this is not empty, we did not find a nid.
         return empty($test);
     }
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTidDepth.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTidDepth.php
index b5ab713..b250f6a 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTidDepth.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument/IndexTidDepth.php
@@ -102,21 +102,14 @@ public function query($group_by = FALSE) {
     $this->ensureMyTable();
 
     if (!empty($this->options['break_phrase'])) {
-      $tids = new \stdClass();
-      $tids->value = $this->argument;
-      $tids = $this->breakPhrase($this->argument, $tids);
-      if ($tids->value == array(-1)) {
+      extract(static::breakPhrase($this->argument));
+      if ($value === array(-1)) {
         return FALSE;
       }
 
-      if (count($tids->value) > 1) {
-        $operator = 'IN';
-      }
-      else {
-        $operator = '=';
-      }
+      $operator = (count($value) > 1) ? 'IN' : '=';
 
-      $tids = $tids->value;
+      $tids = $value;
     }
     else {
       $operator = "=";
diff --git a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_validator/Term.php b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_validator/Term.php
index 484559a..cac8a43 100644
--- a/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_validator/Term.php
+++ b/core/modules/taxonomy/lib/Drupal/taxonomy/Plugin/views/argument_validator/Term.php
@@ -12,6 +12,7 @@
 use Drupal\Core\Annotation\Plugin;
 use Drupal\Core\Annotation\Translation;
 use Drupal\views\Plugin\views\argument_validator\ArgumentValidatorPluginBase;
+use Drupal\views\Plugin\views\HandlerBase;
 
 /**
  * Validate whether an argument is an acceptable node.
@@ -118,14 +119,12 @@ function validate_argument($argument) {
           return FALSE;
         }
 
-        $tids = new stdClass();
-        $tids->value = $argument;
-        $tids = $this->breakPhrase($argument, $tids);
-        if ($tids->value == array(-1)) {
+        extract(HandlerBase::breakPhrase($this->argument, TRUE));
+        if ($value === array(-1)) {
           return FALSE;
         }
 
-        $test = drupal_map_assoc($tids->value);
+        $test = drupal_map_assoc($value);
         $titles = array();
 
         // check, if some tids already verified
@@ -159,7 +158,7 @@ function validate_argument($argument) {
         // Remove duplicate titles
         $titles = array_unique($titles);
 
-        $this->argument->validated_title = implode($tids->operator == 'or' ? ' + ' : ', ', $titles);
+        $this->argument->validated_title = implode($operator === 'or' ? ' + ' : ', ', $titles);
         // If this is not empty, we did not find a tid.
         return empty($test);
 
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
index 7c789e6..b734415 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/HandlerBase.php
@@ -826,117 +826,45 @@ public function getEntityType() {
   }
 
   /**
-   * Breaks x,y,z and x+y+z into an array. Numeric only.
+   * Explodes x,y,z and x+y+z to be used as views filter argument.
    *
    * @param string $str
-   *   The string to parse.
-   * @param Drupal\views\Plugin\views\HandlerBase|null $handler
-   *   The handler object to use as a base. If not specified one will
-   *   be created.
+   *   The string to split.
    *
-   * @return Drupal\views\Plugin\views\HandlerBase|stdClass $handler
-   *   The new handler object.
-   */
-  public static function breakPhrase($str, &$handler = NULL) {
-    if (!$handler) {
-      $handler = new \stdClass();
-    }
-
-    // Set up defaults:
-
-    if (!isset($handler->value)) {
-      $handler->value = array();
-    }
-
-    if (!isset($handler->operator)) {
-      $handler->operator = 'or';
-    }
-
-    if (empty($str)) {
-      return $handler;
-    }
-
-    if (preg_match('/^([0-9]+[+ ])+[0-9]+$/', $str)) {
-      // The '+' character in a query string may be parsed as ' '.
-      $handler->operator = 'or';
-      $handler->value = preg_split('/[+ ]/', $str);
-    }
-    elseif (preg_match('/^([0-9]+,)*[0-9]+$/', $str)) {
-      $handler->operator = 'and';
-      $handler->value = explode(',', $str);
-    }
-
-    // Keep an 'error' value if invalid strings were given.
-    if (!empty($str) && (empty($handler->value) || !is_array($handler->value))) {
-      $handler->value = array(-1);
-      return $handler;
-    }
-
-    // Doubly ensure that all values are numeric only.
-    foreach ($handler->value as $id => $value) {
-      $handler->value[$id] = intval($value);
-    }
-
-    return $handler;
-  }
-
-  /**
-   * Breaks x,y,z and x+y+z into an array. Works for strings.
+   * @param bool $force_int
+   *   Enforce a numeric check.
    *
-   * @param string $str
-   *   The string to parse.
-   * @param Drupal\views\Plugin\views\HandlerBase|null $handler
-   *   The object to use as a base. If not specified one will
-   *   be created.
-   *
-   * @return Drupal\views\Plugin\views\HandlerBase|stdClass $handler
-   *   The new handler object.
+   * @return array $return
+   *   An array containing the exploded values as array and "and" or "or" as
+   *   operator.
    */
-  public static function breakPhraseString($str, &$handler = NULL) {
-    if (!$handler) {
-      $handler = new \stdClass();
-    }
-
-    // Set up defaults:
-    if (!isset($handler->value)) {
-      $handler->value = array();
-    }
-
-    if (!isset($handler->operator)) {
-      $handler->operator = 'or';
-    }
-
-    if ($str == '') {
-      return $handler;
-    }
+  public static function breakPhrase($str, $force_int = FALSE) {
+    $return = array('operator' => NULL, 'value' => NULL);
 
-    // Determine if the string has 'or' operators (plus signs) or 'and' operators
-    // (commas) and split the string accordingly. If we have an 'and' operator,
-    // spaces are treated as part of the word being split, but otherwise they are
-    // treated the same as a plus sign.
-    $or_wildcard = '[^\s+,]';
-    $and_wildcard = '[^+,]';
-    if (preg_match("/^({$or_wildcard}+[+ ])+{$or_wildcard}+$/", $str)) {
-      $handler->operator = 'or';
-      $handler->value = preg_split('/[+ ]/', $str);
+    // Determine if the string has 'or' operators (plus signs) or 'and'
+    // operators (commas) and split the string accordingly.
+    if (preg_match('/^([\w0-9]+[+ ]+)+[\w0-9]+$/', $str)) {
+      // The '+' character in a query string may be parsed as ' '.
+      $return['operator'] = 'or';
+      $return['value'] = preg_split('/[+ ]/', $str);
     }
-    elseif (preg_match("/^({$and_wildcard}+,)*{$and_wildcard}+$/", $str)) {
-      $handler->operator = 'and';
-      $handler->value = explode(',', $str);
+    elseif (preg_match('/^([\w0-9]+[,]+)*[\w0-9]+$/', $str)) {
+      $return['operator'] = 'and';
+      $return['value']= explode(',', $str);
     }
 
-    // Keep an 'error' value if invalid strings were given.
-    if (!empty($str) && (empty($handler->value) || !is_array($handler->value))) {
-      $handler->value = array(-1);
-      return $handler;
+    // Filter any empty matches (Like from '++' in a string) and reset the array
+    // keys.
+    if (!empty($return['value'])) {
+      $return['value'] = array_values(array_filter($return['value']));
     }
 
-    // Doubly ensure that all values are strings only.
-    foreach ($handler->value as $id => $value) {
-      $handler->value[$id] = (string) $value;
+    if ($force_int) {
+      foreach ($return['value'] as $key => &$value) {
+        $value = (int) $value;
+      }
     }
 
-    return $handler;
+    return $return;
   }
-
 }
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/argument/ManyToOne.php b/core/modules/views/lib/Drupal/views/Plugin/views/argument/ManyToOne.php
index 141db80..5b3353e 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/argument/ManyToOne.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/argument/ManyToOne.php
@@ -122,12 +122,11 @@ public function query($group_by = FALSE) {
     }
 
     if (!empty($this->options['break_phrase'])) {
-      if (!empty($this->definition['numeric'])) {
-        $this->breakPhrase($this->argument, $this);
-      }
-      else {
-        $this->breakPhraseString($this->argument, $this);
-      }
+      $force_int = !empty($this->definition['numeric']);
+
+      extract(static::breakPhrase($this->argument, $force_int));
+      $this->value = array($value);
+      $this->operator = $operator;
     }
     else {
       $this->value = array($this->argument);
@@ -143,7 +142,10 @@ function title() {
     }
 
     if (!empty($this->options['break_phrase'])) {
-      $this->breakPhrase($this->argument, $this);
+      $force_int = !empty($this->definition['numeric']);
+      extract(static::breakPhrase($this->argument, $force_int));
+      $this->value = array($value);
+      $this->operator = $operator;
     }
     else {
       $this->value = array($this->argument);
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/argument/Numeric.php b/core/modules/views/lib/Drupal/views/Plugin/views/argument/Numeric.php
index 3972b4d..b93ad06 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/argument/Numeric.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/argument/Numeric.php
@@ -69,7 +69,9 @@ function title() {
     }
 
     if (!empty($this->options['break_phrase'])) {
-      $this->breakPhrase($this->argument, $this);
+      extract(static::breakPhrase($this->argument, TRUE));
+      $this->value = array($value);
+      $this->operator = $operator;
     }
     else {
       $this->value = array($this->argument);
@@ -100,7 +102,9 @@ public function query($group_by = FALSE) {
     $this->ensureMyTable();
 
     if (!empty($this->options['break_phrase'])) {
-      $this->breakPhrase($this->argument, $this);
+      extract(static::breakPhrase($this->argument, TRUE));
+      $this->value = array($value);
+      $this->operator = $operator;
     }
     else {
       $this->value = array($this->argument);
diff --git a/core/modules/views/lib/Drupal/views/Plugin/views/argument/String.php b/core/modules/views/lib/Drupal/views/Plugin/views/argument/String.php
index f48dbdf..98c1a03 100644
--- a/core/modules/views/lib/Drupal/views/Plugin/views/argument/String.php
+++ b/core/modules/views/lib/Drupal/views/Plugin/views/argument/String.php
@@ -191,7 +191,9 @@ public function query($group_by = FALSE) {
     }
 
     if (!empty($this->options['break_phrase'])) {
-      $this->breakPhraseString($argument, $this);
+      extract(static::breakPhrase($this->argument));
+      $this->value = array($value);
+      $this->operator = $operator;
     }
     else {
       $this->value = array($argument);
@@ -262,7 +264,9 @@ function title() {
     }
 
     if (!empty($this->options['break_phrase'])) {
-      $this->breakPhraseString($this->argument, $this);
+      extract(static::breakPhrase($this->argument));
+      $this->value = array($value);
+      $this->operator = $operator;
     }
     else {
       $this->value = array($this->argument);
diff --git a/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerTest.php b/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerTest.php
index 28cc00c..648434a 100644
--- a/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerTest.php
+++ b/core/modules/views/lib/Drupal/views/Tests/Handler/HandlerTest.php
@@ -90,97 +90,64 @@ function testFilterInOperatorUi() {
   }
 
   /**
-   * Tests the breakPhraseString() method.
-   */
-  function testBreakPhraseString() {
-    $empty_stdclass = new \stdClass();
-    $empty_stdclass->operator = 'or';
-    $empty_stdclass->value = array();
-
-    // check defaults
-    $null = NULL;
-    $this->assertEqual($empty_stdclass, HandlerBase::breakPhraseString('', $null));
-
-    $handler = views_get_handler('node', 'title', 'argument');
-    $this->assertEqual($handler, HandlerBase::breakPhraseString('', $handler), 'The breakPhraseString() method works correctly.');
-
-    // test ors
-    $handler = HandlerBase::breakPhraseString('word1 word2+word');
-    $this->assertEqualValue(array('word1', 'word2', 'word'), $handler);
-    $this->assertEqual('or', $handler->operator);
-    $handler = HandlerBase::breakPhraseString('word1+word2+word');
-    $this->assertEqualValue(array('word1', 'word2', 'word'), $handler);
-    $this->assertEqual('or', $handler->operator);
-    $handler = HandlerBase::breakPhraseString('word1 word2 word');
-    $this->assertEqualValue(array('word1', 'word2', 'word'), $handler);
-    $this->assertEqual('or', $handler->operator);
-    $handler = HandlerBase::breakPhraseString('word-1+word-2+word');
-    $this->assertEqualValue(array('word-1', 'word-2', 'word'), $handler);
-    $this->assertEqual('or', $handler->operator);
-    $handler = HandlerBase::breakPhraseString('wõrd1+wõrd2+wõrd');
-    $this->assertEqualValue(array('wõrd1', 'wõrd2', 'wõrd'), $handler);
-    $this->assertEqual('or', $handler->operator);
-
-    // test ands.
-    $handler = HandlerBase::breakPhraseString('word1,word2,word');
-    $this->assertEqualValue(array('word1', 'word2', 'word'), $handler);
-    $this->assertEqual('and', $handler->operator);
-    $handler = HandlerBase::breakPhraseString('word1 word2,word');
-    $this->assertEqualValue(array('word1 word2', 'word'), $handler);
-    $this->assertEqual('and', $handler->operator);
-    $handler = HandlerBase::breakPhraseString('word1,word2 word');
-    $this->assertEqualValue(array('word1', 'word2 word'), $handler);
-    $this->assertEqual('and', $handler->operator);
-    $handler = HandlerBase::breakPhraseString('word-1,word-2,word');
-    $this->assertEqualValue(array('word-1', 'word-2', 'word'), $handler);
-    $this->assertEqual('and', $handler->operator);
-    $handler = HandlerBase::breakPhraseString('wõrd1,wõrd2,wõrd');
-    $this->assertEqualValue(array('wõrd1', 'wõrd2', 'wõrd'), $handler);
-    $this->assertEqual('and', $handler->operator);
-
-    // test a single word
-    $handler = HandlerBase::breakPhraseString('word');
-    $this->assertEqualValue(array('word'), $handler);
-    $this->assertEqual('and', $handler->operator);
-  }
-
-  /**
    * Tests Drupal\views\Plugin\views\HandlerBase::breakPhrase() function.
    */
   function testBreakPhrase() {
-    $empty_stdclass = new \stdClass();
-    $empty_stdclass->operator = 'or';
-    $empty_stdclass->value = array();
+    // Check defaults.
+    $this->assertEqual(array('operator' => NULL, 'value' => NULL), HandlerBase::breakPhrase(''));
 
-    $null = NULL;
-    // check defaults
-    $this->assertEqual($empty_stdclass, HandlerBase::breakPhrase('', $null));
-
-    $handler = views_get_handler('node', 'title', 'argument');
-    $this->assertEqual($handler, HandlerBase::breakPhrase('', $handler), 'The breakPhrase() method works correctly.');
-
-    // Generate three random numbers which can be used below;
+    // Generate three random numbers and one string which can be used below.
+    $s1 = $this->randomName();
     $n1 = rand(0, 100);
     $n2 = rand(0, 100);
     $n3 = rand(0, 100);
-    // test ors
-    $this->assertEqualValue(array($n1, $n2, $n3), HandlerBase::breakPhrase("$n1 $n2+$n3", $handler));
-    $this->assertEqual('or', $handler->operator);
-    $this->assertEqualValue(array($n1, $n2, $n3), HandlerBase::breakPhrase("$n1+$n2+$n3", $handler));
-    $this->assertEqual('or', $handler->operator);
-    $this->assertEqualValue(array($n1, $n2, $n3), HandlerBase::breakPhrase("$n1 $n2 $n3", $handler));
-    $this->assertEqual('or', $handler->operator);
-    $this->assertEqualValue(array($n1, $n2, $n3), HandlerBase::breakPhrase("$n1 $n2++$n3", $handler));
-    $this->assertEqual('or', $handler->operator);
-
-    // test ands.
-    $this->assertEqualValue(array($n1, $n2, $n3), HandlerBase::breakPhrase("$n1,$n2,$n3", $handler));
-    $this->assertEqual('and', $handler->operator);
-    $this->assertEqualValue(array($n1, $n2, $n3), HandlerBase::breakPhrase("$n1,,$n2,$n3", $handler));
-    $this->assertEqual('and', $handler->operator);
+
+    // Test "or"s.
+    extract(HandlerBase::breakPhrase("$s1 $n2+$n3"));
+    $this->assertEqual(array($s1, $n2, $n3), $value);
+    $this->assertEqual('or', $operator);
+
+    extract(HandlerBase::breakPhrase("$s1+$n2+$n3"));
+    $this->assertEqual(array($s1, $n2, $n3), $value);
+    $this->assertEqual('or', $operator);
+
+    extract(HandlerBase::breakPhrase("$s1 $n2 $n3"));
+    $this->assertEqual(array($s1, $n2, $n3), $value);
+    $this->assertEqual('or', $operator);
+
+    extract(HandlerBase::breakPhrase("$s1 $n2++$n3"));
+    $this->assertEqual(array($s1, $n2, $n3), $value);
+    $this->assertEqual('or', $operator);
+
+    // Test "and"s.
+    extract(HandlerBase::breakPhrase("$s1,$n2,$n3"));
+    $this->assertEqual(array($s1, $n2, $n3), $value);
+    $this->assertEqual('and', $operator);
+
+    extract(HandlerBase::breakPhrase("$s1,,$n2,$n3"));
+    $this->assertEqual(array($s1, $n2, $n3), $value);
+    $this->assertEqual('and', $operator);
+
+    // Enforce int values.
+    extract(HandlerBase::breakPhrase("$n1,$n2,$n3", TRUE));
+    $this->assertEqual(array($n1, $n2, $n3), $value);
+    $this->assertEqual('and', $operator);
+
+    extract(HandlerBase::breakPhrase("$n1+$n2+$n3", TRUE));
+    $this->assertEqual(array($n1, $n2, $n3), $value);
+    $this->assertEqual('or', $operator);
+
+    // Fail on strings.
+    extract(HandlerBase::breakPhrase("$s1,$n2,$n3", TRUE));
+    $this->assertEqual(array((int) $s1, $n2, $n3), $value);
+    $this->assertEqual('and', $operator);
+
+    extract(HandlerBase::breakPhrase("$s1+$n2+$n3", TRUE));
+    $this->assertEqual(array((int) $s1, $n2, $n3), $value);
+    $this->assertEqual('or', $operator);
   }
 
-   /**
+  /**
    * Tests the order of handlers is the same before and after saving.
    */
   public function testHandlerWeights() {
@@ -207,26 +174,6 @@ public function testHandlerWeights() {
 
   }
 
-
-  /**
-   * Check to see if a value is the same as the value on a certain handler.
-   *
-   * @param $first
-   *   The first value to check.
-   * @param Drupal\views\Plugin\views\HandlerBase $handler
-   *   The handler that has the $handler->value property to compare with first.
-   * @param string $message
-   *   The message to display along with the assertion.
-   * @param string $group
-   *   The type of assertion - examples are "Browser", "PHP".
-   *
-   * @return bool
-   *   TRUE if the assertion succeeded, FALSE otherwise.
-   */
-  protected function assertEqualValue($first, $handler, $message = '', $group = 'Other') {
-    return $this->assert($first == $handler->value, $message ? $message : t('First value is equal to second value'), $group);
-  }
-
   /**
    * Tests the relationship ui for field/filter/argument/relationship.
    */
