diff --git a/README.md b/README.md
index b16991224ddb2f975ab4c45b60a00122bf65897a..9024bb782a1304fe2fcd88091cad405507b4a233 100644
--- a/README.md
+++ b/README.md
@@ -288,6 +288,17 @@ Remove one or more values from an array.
     DB::collection('users')->where('name', 'John')->pull('items', 'boots');
     DB::collection('users')->where('name', 'John')->pull('items', array('sword', 'shield'));
 
+**Unset**
+
+Remove one or more fields from a document.
+
+    DB::collection('users')->where('name', 'John')->unset('note');
+
+You can also perform an unset on a model.
+
+    $user = User::where('name', 'John')->first();
+    $user->unset('note');
+
 ### Query Caching
 
 You may easily cache the results of a query using the remember method:
diff --git a/src/Jenssegers/Mongodb/Builder.php b/src/Jenssegers/Mongodb/Builder.php
index 69091ad92e4a69eb575e139ee5664db916c96bfd..9c9e3df86d4bfb15af5e61bca1d2e687cb058d4e 100644
--- a/src/Jenssegers/Mongodb/Builder.php
+++ b/src/Jenssegers/Mongodb/Builder.php
@@ -7,17 +7,17 @@ use Closure;
 class Builder extends \Illuminate\Database\Query\Builder {
 
     /**
-    * The database collection
-    *
-    * @var MongoCollection
-    */
+     * The database collection
+     *
+     * @var MongoCollection
+     */
     protected $collection;
 
     /**
-    * All of the available operators.
-    *
-    * @var array
-    */
+     * All of the available operators.
+     *
+     * @var array
+     */
     protected $conversion = array(
         '='  => '=',
         '!=' => '$ne',
@@ -29,11 +29,11 @@ class Builder extends \Illuminate\Database\Query\Builder {
     );
 
     /**
-    * Create a new query builder instance.
-    *
-    * @param Connection $connection
-    * @return void
-    */
+     * Create a new query builder instance.
+     *
+     * @param Connection $connection
+     * @return void
+     */
     public function __construct(Connection $connection)
     {
         $this->connection = $connection;
@@ -339,24 +339,15 @@ class Builder extends \Illuminate\Database\Query\Builder {
      */
     public function increment($column, $amount = 1, array $extra = array())
     {
-        // build update statement
-        $update = array(
+        $query = array(
             '$inc' => array($column => $amount),
             '$set' => $extra,
         );
 
-        // protect
+        // Protect
         $this->whereNotNull($column);
 
-        // perform
-        $result = $this->collection->update($this->compileWheres(), $update, array('multiple' => true));
-
-        if (1 == (int) $result['ok'])
-        {
-            return $result['n'];
-        }
-
-        return 0;
+        return $this->performUpdate($query);
     }
 
     /**
@@ -505,6 +496,28 @@ class Builder extends \Illuminate\Database\Query\Builder {
         return $this->performUpdate($query);
     }
 
+    /**
+     * Remove one or more fields.
+     *
+     * @param  mixed $columns
+     * @return int
+     */
+    public function dropColumn($columns)
+    {
+        if (!is_array($columns)) $columns = array($columns);
+
+        $fields = array();
+
+        foreach ($columns as $column)
+        {
+            $fields[$column] = 1;
+        }
+
+        $query = array('$unset' => $fields);
+
+        return $this->performUpdate($query);
+    }
+
     /**
      * Get a new instance of the query builder.
      *
@@ -516,7 +529,7 @@ class Builder extends \Illuminate\Database\Query\Builder {
     }
 
     /**
-     * Perform update.
+     * Perform an update query.
      *
      * @param  array  $query
      * @param  array  $options
@@ -541,7 +554,7 @@ class Builder extends \Illuminate\Database\Query\Builder {
     }
 
     /**
-     * Convert a key to MongoID if needed
+     * Convert a key to MongoID if needed.
      * 
      * @param  mixed $id
      * @return mixed
@@ -557,10 +570,10 @@ class Builder extends \Illuminate\Database\Query\Builder {
     }
 
     /**
-    * Compile the where array
-    *
-    * @return array
-    */
+     * Compile the where array.
+     *
+     * @return array
+     */
     protected function compileWheres()
     {
         if (!$this->wheres) return array();
@@ -694,4 +707,21 @@ class Builder extends \Illuminate\Database\Query\Builder {
         return $where['sql'];
     }
 
+    /**
+     * Handle dynamic method calls into the method.
+     *
+     * @param  string  $method
+     * @param  array   $parameters
+     * @return mixed
+     */
+    public function __call($method, $parameters)
+    {
+        if ($method == 'unset')
+        {
+            return call_user_func_array(array($this, 'dropColumn'), $parameters);
+        }
+
+        return parent::__call($method, $parameters);
+    }
+
 }
\ No newline at end of file
diff --git a/src/Jenssegers/Mongodb/Model.php b/src/Jenssegers/Mongodb/Model.php
index 2e0ce4410583dc93e133007a911cf617f36fc654..bbefcc472bbcb91a3a42c70502785a60d79f3f49 100644
--- a/src/Jenssegers/Mongodb/Model.php
+++ b/src/Jenssegers/Mongodb/Model.php
@@ -213,4 +213,41 @@ abstract class Model extends \Illuminate\Database\Eloquent\Model {
         parent::setRawAttributes($attributes, $sync);
     }
 
+    /**
+     * Remove one or more fields.
+     *
+     * @param  mixed $columns
+     * @return int
+     */
+    public function dropColumn($columns)
+    {
+        if (!is_array($columns)) $columns = array($columns);
+
+        // Unset attributes
+        foreach ($columns as $column)
+        {
+            $this->__unset($column);
+        }
+        
+        // Perform unset only on current document
+        return $query = $this->newQuery()->where($this->getKeyName(), $this->getKey())->unset($columns);
+    }
+
+    /**
+     * Handle dynamic method calls into the method.
+     *
+     * @param  string  $method
+     * @param  array   $parameters
+     * @return mixed
+     */
+    public function __call($method, $parameters)
+    {
+        if ($method == 'unset')
+        {
+            return call_user_func_array(array($this, 'dropColumn'), $parameters);
+        }
+
+        return parent::__call($method, $parameters);
+    }
+
 }
\ No newline at end of file
diff --git a/tests/ModelTest.php b/tests/ModelTest.php
index 5b5a2af8a5ed7b98c16147d9d69f353a4dee0972..230220c9afc80338bced7550e783407e3d0e6151 100644
--- a/tests/ModelTest.php
+++ b/tests/ModelTest.php
@@ -278,4 +278,31 @@ class ModelTest extends PHPUnit_Framework_TestCase {
 		$this->assertEquals($original[0], $items[0]->toArray());
 	}
 
+	public function testUnset()
+	{
+		$user1 = User::create(array('name' => 'John Doe', 'note1' => 'ABC', 'note2' => 'DEF'));
+		$user2 = User::create(array('name' => 'Jane Doe', 'note1' => 'ABC', 'note2' => 'DEF'));
+
+		$user1->unset('note1');
+
+		$this->assertFalse(isset($user1->note1));
+		$this->assertTrue(isset($user1->note2));
+		$this->assertTrue(isset($user2->note1));
+		$this->assertTrue(isset($user2->note2));
+
+		// Re-fetch to be sure
+		$user1 = User::find($user1->_id);
+		$user2 = User::find($user2->_id);
+
+		$this->assertFalse(isset($user1->note1));
+		$this->assertTrue(isset($user1->note2));
+		$this->assertTrue(isset($user2->note1));
+		$this->assertTrue(isset($user2->note2));
+
+		$user2->unset(array('note1', 'note2'));
+
+		$this->assertFalse(isset($user2->note1));
+		$this->assertFalse(isset($user2->note2));
+	}
+
 }
\ No newline at end of file
diff --git a/tests/QueryBuilderTest.php b/tests/QueryBuilderTest.php
index e2f36a1775bfa97a4a48f77275fec2e06064a56f..e838f83906bba10820b8093f01247e4fba74eaeb 100644
--- a/tests/QueryBuilderTest.php
+++ b/tests/QueryBuilderTest.php
@@ -383,4 +383,26 @@ class QueryBuilderTest extends PHPUnit_Framework_TestCase {
 		$this->assertEquals(1, DB::collection('items')->count());
 	}
 
+	public function testUnset()
+	{
+		$id1 = DB::collection('users')->insertGetId(array('name' => 'John Doe', 'note1' => 'ABC', 'note2' => 'DEF'));
+		$id2 = DB::collection('users')->insertGetId(array('name' => 'Jane Doe', 'note1' => 'ABC', 'note2' => 'DEF'));
+
+		DB::collection('users')->where('name', 'John Doe')->unset('note1');
+
+		$user1 = DB::collection('users')->find($id1);
+		$user2 = DB::collection('users')->find($id2);
+
+		$this->assertFalse(isset($user1['note1']));
+		$this->assertTrue(isset($user1['note2']));
+		$this->assertTrue(isset($user2['note1']));
+		$this->assertTrue(isset($user2['note2']));
+
+		DB::collection('users')->where('name', 'Jane Doe')->unset(array('note1', 'note2'));
+
+		$user2 = DB::collection('users')->find($id2);
+		$this->assertFalse(isset($user2['note1']));
+		$this->assertFalse(isset($user2['note2']));
+	}
+
 }
\ No newline at end of file