diff --git a/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php b/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
index be83d28f823733d7ac7add0adf9dc6ab3c01e406..b81e87077aaaedc927a71a7e4f3dac6b3dcaccf7 100644
--- a/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
+++ b/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
@@ -9,6 +9,7 @@
  * @author     Heinz Wiesinger <heinz@m2mobi.com>
  * @author     Olivier Wizen <olivier@m2mobi.com>
  * @author     Felipe Martinez <felipe@m2mobi.com>
+ * @author     Ruben de Groot <r.degroot@m2mobi.com>
  * @copyright  2012-2016, M2Mobi BV, Amsterdam, The Netherlands
  * @license    http://lunr.nl/LICENSE MIT License
  */
@@ -154,38 +155,38 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     protected $connector;
 
     /**
-     * SQL Query part: Boolean identifying if we are joining tables
+     * SQL Query part: Boolean identifying if the join is not finished
      * @var Boolean
      */
-    protected $is_join;
+    protected $is_unfinished_join;
 
     /**
      * Constructor.
      */
     public function __construct()
     {
-        $this->select           = '';
-        $this->select_mode      = array();
-        $this->update           = '';
-        $this->update_mode      = array();
-        $this->delete           = '';
-        $this->delete_mode      = array();
-        $this->from             = '';
-        $this->join             = '';
-        $this->where            = '';
-        $this->group_by         = '';
-        $this->having           = '';
-        $this->order_by         = '';
-        $this->limit            = '';
-        $this->connector        = '';
-        $this->into             = '';
-        $this->insert_mode      = array();
-        $this->set              = '';
-        $this->column_names     = '';
-        $this->values           = '';
-        $this->select_statement = '';
-        $this->compound         = '';
-        $this->is_join          = FALSE;
+        $this->select             = '';
+        $this->select_mode        = array();
+        $this->update             = '';
+        $this->update_mode        = array();
+        $this->delete             = '';
+        $this->delete_mode        = array();
+        $this->from               = '';
+        $this->join               = '';
+        $this->where              = '';
+        $this->group_by           = '';
+        $this->having             = '';
+        $this->order_by           = '';
+        $this->limit              = '';
+        $this->connector          = '';
+        $this->into               = '';
+        $this->insert_mode        = array();
+        $this->set                = '';
+        $this->column_names       = '';
+        $this->values             = '';
+        $this->select_statement   = '';
+        $this->compound           = '';
+        $this->is_unfinished_join = FALSE;
     }
 
     /**
@@ -214,7 +215,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
         unset($this->column_names);
         unset($this->values);
         unset($this->select_statement);
-        unset($this->is_join);
+        unset($this->is_unfinished_join);
     }
 
     /**
@@ -458,6 +459,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     protected function sql_join($table_reference, $type, $index_hints = NULL)
     {
         $type = strtoupper($type);
+
         $join = ($type == 'STRAIGHT') ? 'STRAIGHT_JOIN ' : ltrim($type . ' JOIN ');
 
         if ($this->join != '')
@@ -467,7 +469,10 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
 
         $this->join .= $join . $table_reference . $this->prepare_index_hints($index_hints);
 
-        $this->is_join = TRUE;
+        if (substr($type, 0, 7) != 'NATURAL')
+        {
+            $this->is_unfinished_join = TRUE;
+        }
     }
 
     /**
@@ -590,9 +595,9 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     {
         $condition = ($base === 'ON') ? 'join' : strtolower($base);
 
-        if (rtrim($this->$condition, '(') == '' || $this->is_join)
+        if (rtrim($this->$condition, '(') == '' || $this->is_unfinished_join)
         {
-            if ($this->is_join)
+            if ($this->is_unfinished_join)
             {
                 $this->$condition .= ' ' . $base . ' ';
             }
@@ -601,8 +606,8 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
                 $this->$condition = $base . ' ' . $this->$condition;
             }
 
-            $this->connector = '';
-            $this->is_join   = FALSE;
+            $this->connector          = '';
+            $this->is_unfinished_join = FALSE;
         }
         elseif ($this->connector != '')
         {
@@ -760,9 +765,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
         {
             $index_hints = array_diff($index_hints, array(NULL));
             $hints       = ' ' . implode(', ', $index_hints);
-        }
-        else
-        {
+        } else {
             $hints = '';
         }
 
@@ -772,7 +775,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     /**
      * Open the parentheses for the sql condition.
      *
-     * @param String $condition String indicationg Statement to group
+     * @param String $condition String indication Statement to group
      *
      * @return void
      */
@@ -780,10 +783,10 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     {
         $condition = ($condition === 'ON') ? 'join' : strtolower($condition);
 
-        if ($this->is_join)
+        if ($this->is_unfinished_join)
         {
-            $this->$condition .= 'ON ';
-            $this->is_join     = FALSE;
+            $this->$condition        .= 'ON ';
+            $this->is_unfinished_join = FALSE;
         }
         elseif ($this->connector != '')
         {
@@ -801,7 +804,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     /**
      * Close the parentheses for the sql condition.
      *
-     * @param String $condition String indicationg Statement to group
+     * @param String $condition String indication Statement to group
      *
      * @return void
      */
diff --git a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsConditionTest.php b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsConditionTest.php
index 3efa827ddd427aee4ad25446fb630267d117d85f..d3f6f387d79a1d35e19089acdcb4b224bfa725b6 100644
--- a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsConditionTest.php
+++ b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsConditionTest.php
@@ -64,7 +64,7 @@ class DatabaseDMLQueryBuilderQueryPartsConditionTest extends DatabaseDMLQueryBui
     {
         $method = $this->get_accessible_reflection_method('sql_condition');
 
-        $this->set_reflection_property_value('is_join', TRUE);
+        $this->set_reflection_property_value('is_unfinished_join', TRUE);
         $this->set_reflection_property_value('join', 'JOIN table');
 
         $method->invokeArgs($this->class, [ 'a', 'b', '=', 'ON' ]);
@@ -83,7 +83,7 @@ class DatabaseDMLQueryBuilderQueryPartsConditionTest extends DatabaseDMLQueryBui
     {
         $method = $this->get_accessible_reflection_method('sql_condition');
 
-        $this->set_reflection_property_value('is_join', FALSE);
+        $this->set_reflection_property_value('is_unfinished_join', FALSE);
 
         $this->set_reflection_property_value('join', 'JOIN table ON (');
 
diff --git a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsJoinTest.php b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsJoinTest.php
index 5e6a1d99654fc2e6abc22fdca86d43dcd512c3ea..d0f1be1af94ab0407d3bcfec8e06e516146eabd3 100644
--- a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsJoinTest.php
+++ b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsJoinTest.php
@@ -192,17 +192,33 @@ class DatabaseDMLQueryBuilderQueryPartsJoinTest extends DatabaseDMLQueryBuilderT
     }
 
     /**
-     * Test that specifying a join clause sets the property is_join.
+     * Test that specifying a join clause sets the property is_unfinished_join to FALSE
+     * when there is a natural join.
      *
      * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_join
      */
-    public function testJoinSetsIsJoin()
+    public function testJoinDontSetsUnfinishedJoinWithNaturalJoin()
+    {
+        $method = $this->get_accessible_reflection_method('sql_join');
+
+        $method->invokeArgs($this->class, [ 'table', 'NATURAL LEFT JOIN' ]);
+
+        $this->assertFalse($this->get_reflection_property_value('is_unfinished_join'));
+    }
+
+    /**
+     * Test that specifying a join clause sets the property is_unfinished_join to TRUE
+     * when the join still has to be finished.
+     *
+     * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_join
+     */
+    public function testJoinSetsUnfinishedJoin()
     {
         $method = $this->get_accessible_reflection_method('sql_join');
 
         $method->invokeArgs($this->class, [ 'table', 'INNER' ]);
 
-        $this->assertTrue($this->get_reflection_property_value('is_join'));
+        $this->assertTrue($this->get_reflection_property_value('is_unfinished_join'));
     }
 
 }
diff --git a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
index b6e6561490ed4d3742e213f561a8db6eb504a834..a5e89a169e4f1718ef25aa8992d6a2682ecd224c 100644
--- a/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
+++ b/src/Lunr/Gravity/Database/Tests/DatabaseDMLQueryBuilderQueryPartsTest.php
@@ -238,13 +238,28 @@ class DatabaseDMLQueryBuilderQueryPartsTest extends DatabaseDMLQueryBuilderTest
     */
     public function testOpenGroupIfJoin()
     {
-        $this->set_reflection_property_value('is_join', TRUE);
+        $this->set_reflection_property_value('is_unfinished_join', TRUE);
 
         $method = $this->get_accessible_reflection_method('sql_group_start');
         $method->invokeArgs($this->class, [ 'ON' ]);
 
         $this->assertEquals('ON (', $this->get_reflection_property_value('join'));
-        $this->assertFalse($this->get_reflection_property_value('is_join'));
+        $this->assertFalse($this->get_reflection_property_value('is_unfinished_join'));
+    }
+
+    /**
+     * Test grouping condition start with closed join statement.
+     *
+     * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_group_start
+     */
+    public function testOpenGroupIfNaturalJoin()
+    {
+        $this->set_reflection_property_value('is_unfinished_join', FALSE);
+
+        $method = $this->get_accessible_reflection_method('sql_group_start');
+        $method->invokeArgs($this->class, [ 'WHERE' ]);
+
+        $this->assertEquals('', $this->get_reflection_property_value('join'));
     }
 
     /**
