diff --git a/src/Query/ConditionGroup.php b/src/Query/ConditionGroup.php
index e31b64a..94a71f7 100644
--- a/src/Query/ConditionGroup.php
+++ b/src/Query/ConditionGroup.php
@@ -94,7 +94,7 @@ public function &getTags() {
   /**
    * Implements the magic __clone() method.
    *
-   * Takes care to clone nested condition groups, too.
+   * Takes care to clone nested conditions and condition groups, too.
    */
   public function __clone() {
     foreach ($this->conditions as $i => $condition) {
diff --git a/src/Query/Query.php b/src/Query/Query.php
index 7ba22d3..b4931f7 100644
--- a/src/Query/Query.php
+++ b/src/Query/Query.php
@@ -648,6 +648,10 @@ public function &getTags() {
    */
   public function __clone() {
     $this->results = $this->getResults()->getCloneForQuery($this);
+    $this->conditionGroup = clone $this->conditionGroup;
+    if ($this->parseMode) {
+      $this->parseMode = clone $this->parseMode;
+    }
   }
 
   /**
diff --git a/tests/src/Kernel/BackendTestBase.php b/tests/src/Kernel/BackendTestBase.php
index adb91c9..89bc8b8 100644
--- a/tests/src/Kernel/BackendTestBase.php
+++ b/tests/src/Kernel/BackendTestBase.php
@@ -458,6 +458,7 @@ protected function regressionTests() {
     $this->regressionTest2469547();
     $this->regressionTest1403916();
     $this->regressionTest2783987();
+    $this->regressionTest2809753();
   }
 
   /**
@@ -785,6 +786,48 @@ protected function regressionTest2783987() {
   }
 
   /**
+   * Regression test for multiple facets.
+   *
+   * @see https://www.drupal.org/node/2809753
+   */
+  protected function regressionTest2809753() {
+    $query = $this->buildSearch();
+    $condition_group = $query->createConditionGroup('OR', array('facet:type'));
+    $condition_group->addCondition('type', 'article');
+    $query->addConditionGroup($condition_group);
+    $facets['type'] = array(
+      'field' => 'type',
+      'limit' => 0,
+      'min_count' => 1,
+      'missing' => FALSE,
+      'operator' => 'or',
+    );
+    $facets['category'] = array(
+      'field' => 'category',
+      'limit' => 0,
+      'min_count' => 1,
+      'missing' => FALSE,
+      'operator' => 'or',
+    );
+    $query->setOption('search_api_facets', $facets);
+    $results = $query->execute();
+
+    $this->assertResults(array(4, 5), $results, 'Multi-facets query');
+    $expected = array(
+      array('count' => 3, 'filter' => '"item"'),
+      array('count' => 2, 'filter' => '"article"'),
+    );
+    $type_facets = $results->getExtraData('search_api_facets')['type'];
+    usort($type_facets, array($this, 'facetCompare'));
+    $this->assertEquals($expected, $type_facets, 'Correct facets were returned for first facet');
+    $expected = array(
+      array('count' => 2, 'filter' => '"article_category"'),
+    );
+    $category_facets = $results->getExtraData('search_api_facets')['category'];
+    $this->assertEquals($expected, $category_facets, 'Correct facets were returned for second facet');
+  }
+
+  /**
    * Compares two facet filters to determine their order.
    *
    * Used as a callback for usort() in regressionTests().
