diff --git a/.gitignore b/.gitignore
index 6a1b2aef80bf4fd20377cbe222193cdc57358d67..da675fa6f67991bfb04372c8701c41d56ff02ba9 100644
--- a/.gitignore
+++ b/.gitignore
@@ -17,3 +17,4 @@ src/ApnsPHP
 src/Psr
 src/Resque
 src/PHPMailer
+.idea
diff --git a/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php b/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
index fb5b3e9294d6067ee23558e94de2586fd5e55347..e7f21c747c3edcb5e7e83ec8620e175a3a98209e 100644
--- a/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
+++ b/src/Lunr/Gravity/Database/DatabaseDMLQueryBuilder.php
@@ -113,6 +113,12 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     protected $join;
 
     /**
+     * SQL Query part: USING clause
+     * @var String
+     */
+    protected $using;
+
+    /**
      * SQL Query part: WHERE clause
      * @var String
      */
@@ -232,7 +238,7 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
 
         $components = array();
 
-        array_push($components, 'select_mode', 'select', 'from', 'join', 'where');
+        array_push($components, 'select_mode', 'select', 'from', 'join', 'using', 'where');
         array_push($components, 'group_by', 'having', 'order_by', 'limit', 'lock_mode');
 
         $standard = 'SELECT ' . $this->implode_query($components);
@@ -260,9 +266,9 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
         }
 
         $components = array();
-        array_push($components, 'delete_mode', 'delete', 'from', 'join', 'where');
+        array_push($components, 'delete_mode', 'delete', 'from', 'join', 'using', 'where');
 
-        if (($this->delete == '') && ($this->join == ''))
+        if (($this->delete == '') && ($this->join == '') && ($this->using == ''))
         {
             array_push($components, 'order_by', 'limit');
         }
@@ -363,9 +369,9 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
         $this->update_mode = array_intersect($this->update_mode, $valid);
 
         $components = array();
-        array_push($components, 'update_mode', 'update', 'join', 'set', 'where');
+        array_push($components, 'update_mode', 'update', 'join', 'using', 'set', 'where');
 
-        if ((strpos($this->update, ',') === FALSE) && $this->join == '')
+        if ((strpos($this->update, ',') === FALSE) && $this->join == '' && $this->using == '')
         {
             $components[] = 'order_by';
             $components[] = 'limit';
@@ -476,6 +482,29 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
     }
 
     /**
+     * Define USING clause of the SQL statement.
+     *
+     * @param $name            expression
+     * @param $condition
+     */
+    function sql_using($name, $condition)
+    {
+        $condition = ($condition === 'using') ? 'USING' : strtolower($condition);
+
+        if (empty($this->$condition))
+        {
+            $this->$condition = 'USING (';
+        }
+        elseif (substr($this->$condition, -1) == ')')
+        {
+            $this->$condition = rtrim($this->$condition, ')');
+            $this->$condition .= ', ';
+        }
+
+        $this->$condition .= "$name" . ')';
+    }
+
+    /**
      * Define INTO clause of the SQL statement.
      *
      * @param String $table Table reference
@@ -816,3 +845,4 @@ abstract class DatabaseDMLQueryBuilder implements DMLQueryBuilderInterface
 }
 
 ?>
+
diff --git a/src/Lunr/Gravity/Database/MySQL/MySQLSimpleDMLQueryBuilder.php b/src/Lunr/Gravity/Database/MySQL/MySQLSimpleDMLQueryBuilder.php
index 0a36f773844f819fb5a7439945060fce6885d8d4..9999b45c3e74d64251157a8e852ffdf625527e92 100644
--- a/src/Lunr/Gravity/Database/MySQL/MySQLSimpleDMLQueryBuilder.php
+++ b/src/Lunr/Gravity/Database/MySQL/MySQLSimpleDMLQueryBuilder.php
@@ -155,6 +155,18 @@ class MySQLSimpleDMLQueryBuilder extends MySQLDMLQueryBuilder
     }
 
     /**
+     * Define USING part of the SQL statement.
+     *
+     * @param String $name  expression
+     *
+     * @return MySQLDMLQueryBuilder $self Self reference
+     */
+    public function using($name)
+    {
+        return parent::using($this->escaper->column($name));
+    }
+
+    /**
      * Define ON part of a JOIN clause with LIKE comparator of the SQL statement.
      *
      * @param String $left   Left expression
diff --git a/src/Lunr/Gravity/Database/SQLDMLQueryBuilder.php b/src/Lunr/Gravity/Database/SQLDMLQueryBuilder.php
index 6296e70626d239c092488dd7d59ef2c218c322b2..5bb1b99fd8cd8d2b2e053c4b26cb2ff93ff8c11f 100644
--- a/src/Lunr/Gravity/Database/SQLDMLQueryBuilder.php
+++ b/src/Lunr/Gravity/Database/SQLDMLQueryBuilder.php
@@ -187,6 +187,19 @@ abstract class SQLDMLQueryBuilder extends DatabaseDMLQueryBuilder
     }
 
     /**
+     * Define USING part of a JOIN clause of the SQL statement.
+     *
+     * @param String $name expression
+     *
+     * @return SQLDMLQueryBuilder $self Self reference
+     */
+    public function using($name)
+    {
+        $this->sql_using($name, 'USING');
+        return $this;
+    }
+
+    /**
      * Define ON part of a JOIN clause with LIKE comparator of the SQL statement.
      *
      * @param String $left   Left expression
@@ -545,3 +558,4 @@ abstract class SQLDMLQueryBuilder extends DatabaseDMLQueryBuilder
 }
 
 ?>
+
diff --git a/src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderUsingTest.php b/src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderUsingTest.php
new file mode 100644
index 0000000000000000000000000000000000000000..dd192b3006f82362bf5723526af4d53ded4d3fd2
--- /dev/null
+++ b/src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderUsingTest.php
@@ -0,0 +1,56 @@
+<?php
+
+/**
+ * This file contains the SQLDMLQueryBuilderUsingTest class.
+ *
+ * PHP Version 5.4
+ *
+ * @package    Lunr\Gravity\Database
+ * @author     Patrick Valk <p.valk@m2mobi.com>
+ * @copyright  2016-2016, M2Mobi BV, Amsterdam, The Netherlands
+ * @license    http://lunr.nl/LICENSE MIT License
+ */
+
+namespace Lunr\Gravity\Database\Tests;
+
+/**
+ * This class contains the tests for the query parts methods.
+ *
+ * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder
+ */
+class SQLDMLQueryBuilderUsingTest extends SQLDMLQueryBuilderTest
+{
+
+    /**
+     * Test specifying the using part.
+     *
+     * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_using
+     */
+    public function testUsing()
+    {
+        $this->class->using('table');
+
+        $string = 'USING (table)';
+
+        $this->assertEquals($string, $this->get_reflection_property_value('using'));
+    }
+
+    /**
+     * Test specifying the using part.
+     *
+     * @covers Lunr\Gravity\Database\DatabaseDMLQueryBuilder::sql_using
+     */
+    public function testUsingTwice()
+    {
+        $this->class->using('same_table_name1');
+        $this->class->using('same_table_name2');
+
+        $string = 'USING (same_table_name1, same_table_name2)';
+
+        $this->assertEquals($string, $this->get_reflection_property_value('using'));
+    }
+
+}
+
+?>
+
diff --git a/tests/phpunit.xml b/tests/phpunit.xml
index ecc5759f5caa9cab0b4d4b91e12339342b46b99c..04ec4962a5c25fd02693e11aac873edcb3df0963 100644
--- a/tests/phpunit.xml
+++ b/tests/phpunit.xml
@@ -127,6 +127,7 @@
             <file>../src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderConditionTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderOrderByTest.php</file>
             <file>../src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderLimitTest.php</file>
+            <file>../src/Lunr/Gravity/Database/Tests/SQLDMLQueryBuilderUsingTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderSelectTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderDeleteTest.php</file>
             <file>../src/Lunr/Gravity/Database/MySQL/Tests/MySQLDMLQueryBuilderInsertTest.php</file>
@@ -435,3 +436,4 @@
                 logIncompleteSkipped="false"/>
     </logging>
 </phpunit>
+
