diff --git a/plugins/sources/mongodb.inc b/plugins/sources/mongodb.inc
new file mode 100644
index 0000000..5486aaa
--- /dev/null
+++ b/plugins/sources/mongodb.inc
@@ -0,0 +1,86 @@
+<?php
+
+/**
+ * @file
+ * Define a MigrateSource for importing from MongoDB.
+ */
+
+/**
+ * Implementation of MigrateSource, to handle imports from MongoDB.
+ */
+class MigrateSourceMongoDB extends MigrateSource {
+  /**
+   * String containing connection details to Mongo:
+   *  mongodb://[username:password@]host1[:port1][,host2[:port2:],...]/db
+   *
+   *  @see http://php.net/manual/en/mongoclient.construct.php.
+   *
+   * @var string
+   */
+  protected $configuration;
+
+  /**
+   * The active MongoDB connection for this source.
+   *
+   * @var resource
+   */
+  protected $connection;
+
+  /**
+   * Simple initialization.
+   */
+  public function __construct(array $configuration, $query, $count_query,
+      array $fields, array $options = array()) {
+    parent::__construct($options);
+    $this->query = $query;
+    $this->countQuery = $count_query;
+    $this->configuration = $configuration;
+    $this->fields = $fields;
+    if (empty($options['character_set'])) {
+      $this->characterSet = 'UTF8';
+    }
+    else {
+      $this->characterSet = $options['character_set'];
+    }
+  }
+
+  /**
+   * Connect to MongoDB.
+   */
+  protected function connect() {
+    if (!isset($this->connection)) {
+      $class = 'MongoClient';
+
+      if (!class_exists($class)){
+        $class = 'Mongo';
+      }
+
+      try {
+        $this->connection = new $class($this->configuration);
+      }
+      catch (Exception $e) {
+        throw new Exception(t('You must configure the Mongo or MongoClient extension in PHP.'));
+      }
+    }
+    if ($this->connection) {
+      return TRUE;
+    }
+    else {
+      throw new MongoConnectionException($e);
+      return FALSE;
+    }
+  }
+
+  /**
+   * Returns a list of fields available to be mapped from the source query.
+   *
+   * @return array
+   *  Keys: machine names of the fields (to be passed to addFieldMapping)
+   *  Values: Human-friendly descriptions of the fields.
+   */
+  public function fields() {
+    // The fields are passed to the constructor for this plugin.
+    return $this->fields;
+  }
+
+}
