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..456c2a2
--- /dev/null
+++ b/tests/handlers/views_handler_filter_combine.test
@@ -0,0 +1,95 @@
+<?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' => 'Handlers: 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',
+    );
+  }
+
+  function viewsData() {
+    $data = parent::viewsData();
+    $data['views']['combine'] = array(
+      'title' => t('Combine fields filter'),
+      'help' => t('Combine two fields together and search by them.'),
+      'filter' => array(
+        'handler' => 'views_handler_filter_combine',
+      ),
+    );
+    return $data;
+  }
+
+  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' => array('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() {
+    $dateSet = parent::dataSet();
+    $dataSet[] = array(
+      'name' => 'Ginger',
+      'age' => 25,
+      'job' => NULL,
+      'created' => gmmktime(0, 0, 0, 1, 2, 2000),
+    );
+  }
+}
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
