diff --git a/handlers/views_handler_filter_combine.inc b/handlers/views_handler_filter_combine.inc
index d30447b..c9def53 100644
--- a/handlers/views_handler_filter_combine.inc
+++ b/handlers/views_handler_filter_combine.inc
@@ -71,7 +71,7 @@ class views_handler_filter_combine extends views_handler_filter_string {
         }
       }
       $expression = implode(', ', $seperated_fields);
-      $expression = "CONCAT($expression)";
+      $expression = "CONCAT_WS(' ', $expression)";
 
       $info = $this->operators();
       if (!empty($info[$this->operator]['method'])) {
diff --git a/tests/handlers/views_handler_filter_combine.test b/tests/handlers/views_handler_filter_combine.test
new file mode 100644
index 0000000..6801f3b
--- /dev/null
+++ b/tests/handlers/views_handler_filter_combine.test
@@ -0,0 +1,108 @@
+<?php
+
+/**
+ * @file
+ * Definition of ViewsHandlerFilterCombineTest.
+ */
+
+/**
+ * Tests the combine filter handler.
+ */
+class ViewsHandlerFilterCombineTest extends ViewsSqlTest {
+  var $column_map = array();
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Filter: Combine',
+      'description' => 'Tests the combine filter handler.',
+      'group' => 'Views Handlers',
+    );
+  }
+
+  function setUp() {
+    parent::setUp();
+    $this->column_map = array(
+      'views_test_name' => 'name',
+      'views_test_job' => 'job',
+    );
+  }
+
+  protected function getBasicView() {
+    $view = parent::getBasicView();
+    $fields = $view->display['default']->handler->options['fields'];
+    $fields += array(
+      'job' => array(
+        'id' => 'job',
+        'table' => 'views_test',
+        'field' => 'job',
+        'relationship' => 'none',
+      ),
+    );
+    $view->display['default']->handler->override_option('fields', $fields);
+    return $view;
+  }
+
+  public function testFilterCombineContains() {
+    $view = $this->getBasicView();
+
+    // Change the filtering.
+    $view->display['default']->handler->override_option('filters', array(
+      'age' => array(
+        'id' => 'combine',
+        'table' => 'views',
+        'field' => 'combine',
+        'relationship' => 'none',
+        'operator' => 'contains',
+        'fields' => array(
+          'name',
+          'job',
+        ),
+        'value' => 'ing',
+      ),
+    ));
+
+    $this->executeView($view);
+    $resultset = array(
+      array(
+        'name' => 'John',
+        'job' => 'Singer',
+      ),
+      array(
+        'name' => 'George',
+        'job' => 'Singer',
+      ),
+      array(
+        'name' => 'Ringo',
+        'job' => 'Drummer',
+      ),
+      array(
+        'name' => 'Ginger',
+        'job' => NULL,
+      ),
+    );
+    $this->assertIdenticalResultset($view, $resultset, $this->column_map);
+  }
+
+  /**
+   * Additional data to test the NULL issue.
+   */
+  protected function dataSet() {
+    $data_set = parent::dataSet();
+    $data_set[] = array(
+      'name' => 'Ginger',
+      'age' => 25,
+      'job' => NULL,
+      'created' => gmmktime(0, 0, 0, 1, 2, 2000),
+    );
+    return $data_set;
+  }
+
+  /**
+   * Allow {views_test}.job to be NULL.
+   */
+  protected function schemaDefinition() {
+    $schema = parent::schemaDefinition();
+    unset($schema['views_test']['fields']['job']['not null']);
+    return $schema;
+  }
+}
diff --git a/views.info b/views.info
index db1a79a..41afe04 100644
--- a/views.info
+++ b/views.info
@@ -260,6 +260,7 @@ files[] = tests/handlers/views_handler_field_file_size.test
 files[] = tests/handlers/views_handler_field_math.test
 files[] = tests/handlers/views_handler_field_url.test
 files[] = tests/handlers/views_handler_field_xss.test
+files[] = tests/handlers/views_handler_filter_combine.test
 files[] = tests/handlers/views_handler_filter_date.test
 files[] = tests/handlers/views_handler_filter_equality.test
 files[] = tests/handlers/views_handler_filter_in_operator.test
