diff --git a/bin/server.js b/bin/server.js
index 727feb359518a86e30ea1d91d9a3830676b56c50..b45f94b35d1f4f9d51cbc5a0f315272ad11061be 100644
--- a/bin/server.js
+++ b/bin/server.js
@@ -8,6 +8,16 @@ var config      = require('../config'),
     http        = require('http'),
     nodecoin    = require('../lib/nodecoin');
 
+// Bootstraps models
+nodecoin.database.init();
+nodecoin.database.connect(config, function (err) {
+  if(!err)
+    console.log("Connected to MongoDB.");
+  else
+    console.log("Error connecting to DB: " + err);
+});
+
+// Init Express app
 var app = nodecoin.express.app(config);
 
 http.createServer(app).listen(app.get('port'), function(){
diff --git a/config.js b/config.js
index 5f33f0f166d1891618095b92cf0dd96a3f8cba4a..1b9b1f09d76ff5d2857830a365f3ac61b8b532da 100644
--- a/config.js
+++ b/config.js
@@ -3,3 +3,11 @@ exports.server = {
   ipv4address: '',
   ipv6address: ''
 };
+
+exports.db = {
+  //port     : 27017, // optional
+  database : "nodecoin",
+  host     : "localhost"
+};
+
+exports.initKeys = [];
\ No newline at end of file
diff --git a/lib/amendments.js b/lib/amendments.js
index 73808e918171db99628b67093a428c5592529970..70141090399abd6bed8b16b28df6c819f9a7e441 100644
--- a/lib/amendments.js
+++ b/lib/amendments.js
@@ -1,12 +1,12 @@
-var fs  = require('fs'),
-util    = require('util'),
-async   = require('async'),
-orm     = require('orm'),
-_       = require('underscore'),
-stream  = require('stream');
+var fs    = require('fs'),
+util      = require('util'),
+async     = require('async'),
+mongoose  = require('mongoose'),
+PublicKey = mongoose.model('PublicKey'),
+_         = require('underscore'),
+stream    = require('stream');
 
 module.exports.init = function (initKeys, req, res) {
-  var PublicKey = req.models.PublicKey;
   var pubkeys = [];
   async.forEach(initKeys, function (initkey, done) {
     var pk = new PublicKey({ raw:initkey.data });
diff --git a/lib/entities/PrivateKey.js b/lib/entities/PrivateKey.js
deleted file mode 100644
index 7b96b253ffc460dc962f9119173fce8a8e736209..0000000000000000000000000000000000000000
--- a/lib/entities/PrivateKey.js
+++ /dev/null
@@ -1,46 +0,0 @@
-var async = require('async'),
-orm       = require('orm'),
-_         = require('underscore');
-
-module.exports = function (db, cb) {
-
-  var PrivateKey = db.define("privkey", {
-    raw: Buffer,
-    fingerprint: {type: "text", size: 40},
-    name: String,
-    email: String,
-    comment: String,
-    created: Date,
-    updated: Date
-  });
-
-  PrivateKey.search = function (motif, done) {
-    var obj = this;
-    var found = [];
-    async.parallel({
-      byName: function(callback){
-        obj.find({ name: orm.like("%" + motif + "%")}, function (err, keys) {
-          found.push(keys);
-          callback();
-        });
-      },
-      byEmail: function(callback){
-        obj.find({ email: orm.like("%" + motif + "%")}, function (err, keys) {
-          found.push(keys);
-          callback();
-        });
-      },
-      byComment: function(callback){
-        obj.find({ comment: orm.like("%" + motif + "%")}, function (err, keys) {
-          found.push(keys);
-          callback();
-        });
-      }
-    },
-    function(err) {
-        done(err, _(found).flatten());
-    });
-  };
-
-  return cb();
-};
\ No newline at end of file
diff --git a/lib/entities/PublicKey.js b/lib/entities/PublicKey.js
deleted file mode 100644
index 63e1c04b02474fccadd8b22dd003f1d0c12ecf61..0000000000000000000000000000000000000000
--- a/lib/entities/PublicKey.js
+++ /dev/null
@@ -1,119 +0,0 @@
-var async = require('async'),
-orm       = require('orm'),
-sys       = require('sys'),
-jpgp      = require('../jpgp'),
-_         = require('underscore');
-
-module.exports = function (db, cb) {
-
-  var PublicKey = db.define("pubkey", {
-    raw: {type: "text", size: 50000},
-    fingerprint: {type: "text", size: 40},
-    name: String,
-    email: String,
-    comment: String,
-    created: Date,
-    updated: Date
-  }, {
-    methods: {
-      construct: function(done) {
-        var obj = this;
-        jpgp().certificate(obj.raw).parse(function (err, stdout, stderr) {
-          if(stderr)
-            sys.print('stderr: \n' + stderr);
-          if (err !== null) {
-            console.log('exec error: ' + err);
-          }
-          var k = JSON.parse(stdout).data;
-          obj.fingerprint = k.fingerprint;
-          var uid = k.uids[0].uid;
-          var extract = uid.match(/([\s\S]*) \(([\s\S]*)\) <([\s\S]*)>/);
-          if(extract && extract.length === 4){
-            obj.name = extract[1];
-            obj.comment = extract[2];
-            obj.email = extract[3];
-          }
-          else{
-            extract = uid.match(/([\s\S]*) <([\s\S]*)>/);
-            if(extract && extract.length === 3){
-              obj.name = extract[1];
-              obj.comment = '';
-              obj.email = extract[2];
-            }
-          }
-          done(err);
-        });
-      }
-    }
-  });
-
-  PublicKey.search = function (motif, done) {
-    var obj = this;
-    var found = [];
-    var fprPattern = motif.match(/^0x(.*)$/);
-    var searchByUID = {
-      byName: function(callback){
-        obj.find({ name: orm.like("%" + motif + "%")}, function (err, keys) {
-          found.push(keys);
-          callback();
-        });
-      },
-      byEmail: function(callback){
-        obj.find({ email: orm.like("%" + motif + "%")}, function (err, keys) {
-          found.push(keys);
-          callback();
-        });
-      },
-      byComment: function(callback){
-        obj.find({ comment: orm.like("%" + motif + "%")}, function (err, keys) {
-          found.push(keys);
-          callback();
-        });
-      }
-    };
-    var searchByFingerprint = {
-      byFingerprint: function (callback) {
-        var fpr = fprPattern ? fprPattern[1] : "";
-        obj.find({ fingerprint: orm.like("%" + fpr + "%")}, function (err, keys) {
-          found.push(keys);
-          callback();
-        });
-      }
-    };
-    var searchFunc = fprPattern ? searchByFingerprint : searchByUID;
-    async.parallel(searchFunc, function(err) {
-      var pubKeys = {};
-      var foundKeys = _(found).flatten();
-      async.each(foundKeys, function (key, done) {
-        pubKeys[key.id] = key;
-        done();
-      }, function (err) {
-        done(err, _(pubKeys).values());
-      });
-    });
-  };
-
-  PublicKey.verify = function (asciiArmored, signature, done) {
-    jpgp()
-      .publicKey(asciiArmored)
-      .data(asciiArmored)
-      .noCarriage()
-      .signature(signature)
-      .verify(function (err, stdout, stderr) {
-        if(!err && !stderr){
-          var verified = JSON.parse(stdout).data;
-          if(verified){
-            done();
-          }
-          else{
-            done("Signature does not match.\n" + err + "\n" + stdout + "\n" + stderr);
-          }
-        }
-        else{
-          done(err + "\n" + stderr);
-        }
-    });
-  };
-
-  return cb();
-};
\ No newline at end of file
diff --git a/lib/entities/load.js b/lib/entities/load.js
deleted file mode 100644
index f040b3f760f786139e2c36367b7550493c29d869..0000000000000000000000000000000000000000
--- a/lib/entities/load.js
+++ /dev/null
@@ -1,18 +0,0 @@
-var async = require('async'),
-orm       = require('orm'),
-_         = require('underscore');
-
-module.exports = function (db, cb) {
-
-  async.parallel({
-      pubkey: function(callback){
-        db.load(__dirname + '/PublicKey', function (err) {
-          return callback(err);
-        });
-      }
-  },
-  function(err) {
-    // loaded !
-    return cb();
-  });
-};
\ No newline at end of file
diff --git a/lib/nodecoin.js b/lib/nodecoin.js
index 132c9eba85a4d154adf9774e9f27653859072e38..f32cc1bf8293719b0035b12560578fd43c85b0ad 100644
--- a/lib/nodecoin.js
+++ b/lib/nodecoin.js
@@ -1,16 +1,30 @@
-var pks    = require('./pks'),
-amend      = require('./amendments'),
-express    = require('express'),
-orm        = require('orm'),
-async      = require('async'),
-config     = require('../config'),
-path       = require('path'),
-_          = require('underscore'),
-nodecoin   = require('../lib/nodecoin');
-configurer = require('../lib/configurer');
+var express    = require('express');
+var fs         = require('fs');
+var async      = require('async');
+var config     = require('../config');
+var path       = require('path');
+var mongoose   = require('mongoose');
+var _          = require('underscore');
+var nodecoin   = require('../lib/nodecoin');
+var configurer = require('../lib/configurer');
 
-module.exports.pks = pks;
-module.exports.amendments = amend;
+module.exports.database = {
+  init: function () {
+    var models_path = __dirname + '/../app/models';
+    fs.readdirSync(models_path).forEach(function (file) {
+      if (~file.indexOf('.js')) require(models_path + '/' + file);
+    });
+  },
+
+  connect: function (config, done) {
+    mongoose.connect('mongodb://' + config.db.host + (config.db.port ? ':' + config.db.port : '') + '/' + config.db.database);
+    var db = mongoose.connection;
+    db.on('error', console.error.bind(console, 'connection error:'));
+    db.once('open', function (err) {
+      done(err);
+    });
+  }
+};
 module.exports.express = {
 
   route: function(app){
@@ -20,6 +34,9 @@ module.exports.express = {
       res.end();
     }
 
+    var amend = require('./amendments');
+    var pks   = require('./pks');
+
     app.get(    '/pks/lookup',                                  pks.lookup);
     app.get(    '/pks/add',                                     pks.add.get);
     app.post(   '/pks/add',                                     pks.add.post);
@@ -39,16 +56,8 @@ module.exports.express = {
     app.get(    '/udc/transactions/view/:transaction_id',       notImplemented);
   },
 
-  app: function (someConfig) {
+  app: function (config) {
     var app = express();
-    var config = someConfig || {
-      server: { port: 8001 },
-      db: {
-        database : "nodecoin_test",
-        protocol : "sqlite",
-        dropAll: false
-      }
-    };
 
     configurer(config).parseFiles(function (err) {
       if(!err){
@@ -69,44 +78,6 @@ module.exports.express = {
     app.use(express.methodOverride());
     app.use(express.cookieParser('your secret here'));
     app.use(express.session());
-    app.use(orm.express(config.db, {
-      define: function (db, models) {
-
-        db.load(__dirname + '/entities/load', function (err) {
-          // loaded !
-          var PublicKey = db.models.pubkey;
-          var PrivateKey = db.models.privkey;
-
-          function createTables(callback){
-            PublicKey.sync(function (err2) {
-              if(!err)
-                console.log("Table 'PublicKey' created.");
-              callback(err);
-            });
-          }
-
-          function dropTables(callback){
-            PublicKey.drop(function (err2) {
-              if(!err)
-                console.log("Table 'PublicKey' dropped.");
-              callback(err);
-            });
-          }
-
-          if(config.db.dropAll){
-            dropTables(function (err2) {
-              createTables(function (err3) {});
-            });
-          }
-          else{
-            createTables(function (err2) {});
-          }
-
-          models.PublicKey = PublicKey;
-          models.PrivateKey = PrivateKey;
-        });
-      }
-    }));
     app.use(app.router);
 
     // development only
diff --git a/lib/pks.js b/lib/pks.js
index d5a8660757e987e2bba3bb5826abbf98690a85d5..8e0b2bdec0b38c365cc9c620ddac54c90e7119b9 100644
--- a/lib/pks.js
+++ b/lib/pks.js
@@ -1,9 +1,10 @@
-var fs  = require('fs'),
-util    = require('util'),
-async   = require('async'),
-orm     = require('orm'),
-_       = require('underscore'),
-stream  = require('stream');
+var fs    = require('fs'),
+util      = require('util'),
+async     = require('async'),
+mongoose  = require('mongoose'),
+PublicKey = mongoose.model('PublicKey'),
+_         = require('underscore'),
+stream    = require('stream');
 
 function processRawKey (pubkey, done) {
   async.parallel([
@@ -20,7 +21,7 @@ module.exports.lookup = function (req, res) {
   var op = req.query.op;
   var pattern = req.query.search;
   if(pattern !== undefined){
-    req.models.PublicKey.search(pattern, function (err, foundKeys) {
+    PublicKey.search(pattern, function (err, foundKeys) {
       switch(op){
         case 'get':
           var count = foundKeys.length;
@@ -126,7 +127,6 @@ function getAsciiArmoredMessages(body, files, callback) {
 module.exports.add.post = function (req, res) {
   getAsciiArmoredMessages(req.body, req.files, function (err, aaPubkey, aaSignature) {
     if(!err){
-      var PublicKey = req.models.PublicKey;
       var pubKeys = [];
       PublicKey.verify(aaPubkey, aaSignature, function (err) {
         if(!err){
diff --git a/package.json b/package.json
index 6b02f9077bef574a1ac559ed5571fb82b22014a9..3b96d94e1a832a7669b0cb908ef825db2ac3f2d3 100644
--- a/package.json
+++ b/package.json
@@ -31,9 +31,7 @@
     "express": "",
     "commander": "",
     "ejs": "",
-    "orm": "",
-    "mysql" : "2.0.0-alpha7",
-    "sqlite3" : "",
+    "mongoose": "",
     "async": "",
     "underscore": ""
   },
diff --git a/test/data/cgeek.pub b/test/data/cgeek.pub
new file mode 100644
index 0000000000000000000000000000000000000000..5a59413bae27773d2ce71c408e9da10dda71ced7
--- /dev/null
+++ b/test/data/cgeek.pub
@@ -0,0 +1,43 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+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
+ao8cQfpq60JVtGMseERMCbPZEi+Ggg==
+=kwCy
+-----END PGP PUBLIC KEY BLOCK-----
\ No newline at end of file
diff --git a/test/data/cgeek.pub.asc b/test/data/cgeek.pub.asc
new file mode 100644
index 0000000000000000000000000000000000000000..e4c02ed0f205bb4e0e9cec560477c026d7b26f29
--- /dev/null
+++ b/test/data/cgeek.pub.asc
@@ -0,0 +1,56 @@
+-----BEGIN PGP MESSAGE-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+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
+i88h2Fv/Gw==
+=vAtp
+-----END PGP MESSAGE-----
diff --git a/test/data/lolcat.pub b/test/data/lolcat.pub
new file mode 100644
index 0000000000000000000000000000000000000000..5de57a9bcb9d07f9bbec9701de0dd30d651358b8
--- /dev/null
+++ b/test/data/lolcat.pub
@@ -0,0 +1,31 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+mQENBFHHC/EBCADWTLSN7EGP+n30snndS3ZNcB02foL+0opcS6LK2coPDJLg2noo
+keJRHZxF3THmZQrKwZOjiuDBinOc5DWlzIS/gD/RaXwntgPFlGKBlBU+g255fr28
+ziSb5Y1lW4N//nUFdPZzoMmPgRj0b17T0UPCoMR8ZZ/Smk5LINbQwt+A+LEoxEdE
+Vcq+Tyc0OlEabqO6RFqiKDRiPhGPiCwVQA3yPjb6iCp5gTchObCxCnDbxA0Mfj9F
+mHrGbepNHGXxStO4xT0woCb7y02S1E8K08kOc5Bq9e1Yj5I/mdaw4Hn/Wp28lZl1
+mnO1u1z9ZU/rcglhEyaEOTwasheb44QcdGSfABEBAAG0TUxvTCBDYXQgKHVkaWQy
+O2M7Q0FUO0xPTDsyMDAwLTA0LTE5O2UrNDMuNzAtMDc5LjQyOzA7KSA8Y2VtLm1v
+cmVhdUBnbWFpbC5jb20+iQE9BBMBCAAnBQJRxwvxAhsDBQkLR5jvBQsJCAcDBRUK
+CQgLBRYCAwEAAh4BAheAAAoJEOnKt20ZqGUeZYcH/0ItH4b/O0y7V1Jzc1DZAdn4
+iDiI7/SF3fN4f6cJCu/SOVb+ERFIb6JK+HNHdVAcMHKaPW625R0FahHUkcXWkkGm
+Q6+sLIsVZwVN1oeZtlD12cq9A4UJyfJUXkinMKkI8xpdV8J7s5wFRavOS/qaF5be
+ah0Z+IGwQK0nuXxWpT6UZWbpUfXPQB2Mz2/rpjSWKwO3X4FwwOfDiuZExyH2JPDY
+shdPcj/x+gnzYW9XfWCJw3rOK42vtM+aLtUpJO0Jh6X/sj/iqyS4rPB4DVCmEgSX
+Px1P+kqnsz3aNTOIujXS8Faz+TC+eNhn+z3SoTl5gBlNNM171fWFr0BR3nIfIu65
+AQ0EUccL8QEIAPAQaxK6s4DjDHiOwrMotvb479QD5PsHU6S0VG0+naoPlNJb2d5w
+YhnFAn4aYLiXx4IIl38rHnV+yWATOUe2rdCe4enTXkxyWJVaxIcNJLFpUjHYGbrC
+nNwiXpuQfSDuRN/wcVNSBKXhWNUPY9IsbgERWhS5YTFnuQcBjMqDwF6JImQ8O4nZ
+wno811nqK1XaMuLVvXZAsO1Vi1k3NArM5+jdlq9e3BA0NcHJmGEcQdTw0Tk5Oq6r
+mE8ux7pS0bn6OUkkseR5DyRlFtzqi4wp30GeggeFExx7ZCVuctpJX9ZoC3cJoZT0
+s3LuUtV0EW50yCtP+3Vpkek2WtjfVbM6kDkAEQEAAYkBJQQYAQgADwUCUccL8QIb
+DAUJC0eY7wAKCRDpyrdtGahlHg7+B/95xEoSrFQ7/mc7g6sbisvx3s547gUXXYSu
+FHS03IMDWJrfGKqXtBf9ETBx4OLeBXY7z1lL4WCN6/xtrL+mSQ9dbDqdXv/1EhkS
+v0s+IvJ34KYGAkFXSCoTE7rnkPwQjoMYVSFkf5e8g9adyKvndq/QSPNuv+FPL6sH
+m1N9nmus5Ebr0zTVDmmfoqzokuDfHm5h6YrkFscMGjrCKWuXSiTaGj9Hm3MqeZ3T
+Kva5isa/h0h7Ai3wJ5XJpMrFNN6BU/wIt7fM2hsNAOwaG+WUfgjYEkOua8gPPtpL
+ZJJPb/89yrs9F7JkLi/oiAl5VpItm+hlFpLe1TE7oa6k53eZ2a+V
+=rOj9
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/test/data/snow.pub b/test/data/snow.pub
new file mode 100644
index 0000000000000000000000000000000000000000..8193565e1eaa501084fa9bd17decba36bc63e56a
--- /dev/null
+++ b/test/data/snow.pub
@@ -0,0 +1,42 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+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
+CKXqhQsOxtUFEg0/Rxy2cEKHpb290yw=
+=AaRc
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/test/data/uchiha.pub b/test/data/uchiha.pub
new file mode 100644
index 0000000000000000000000000000000000000000..539ab945b9314f6be7e39b3b7ebea05ac3f73f25
--- /dev/null
+++ b/test/data/uchiha.pub
@@ -0,0 +1,31 @@
+-----BEGIN PGP PUBLIC KEY BLOCK-----
+Version: GnuPG v1.4.12 (GNU/Linux)
+
+mQENBFHG4x4BCADi8J4sSpIv5q2gREBwMj1TCUFDvQDx8/WivLKJ+LgmC2zwuuMD
+Yo9YwZBmMe/orZJRSDwslKUARtFzmSui2CR3b4EEr1Hhz9coyqHsF9lYdht2YU7i
+08FOdppRJdk7XuHCABZ+mXeG8WnNMP+9QjRAh3sFDkWpji9iL5ZmzlDx6UMXq3lM
+SvN3VC32X+K2HoQgesm3fTjCBmQik2Ayvp89Ikc2wAWM5/B7RCwdHTTysVOE0Kkx
+IIkeus76p+5pvLzrZOvM18ToLxV7KThxVvHn+dj2iOMuteY3BylN+XL1J/nBYkOC
+fsCigMClbWj7IptqDZWmqRbzYgcrOYa8SezxABEBAAG0VVRvYmkgVWNoaXdhICh1
+ZGlkMjtjO1VDSElXQTtPQklUTzsyMDAwLTA5LTMwO2UrMzUuNjkrMTM5LjY5OzAp
+IDxjZW0ubW9yZWF1QGdtYWlsLmNvbT6JAT0EEwEIACcFAlHG4x4CGwMFCQs75EIF
+CwkIBwMFFQoJCAsFFgIDAQACHgECF4AACgkQJFehWHyg7ZxljwgAkkV+cXO8kXXC
+qXdo9hwSprQwbHHfwsovhIvZI9E4Tpce0TXaebflCecDwsPgGyeP8xPUX8pZAvYY
+w5klREvKn7Vu6NiGrE07k7EUCIs+kkPTXeRAv/NpMfJoUOdh+da0ybs+nTO1lJV+
+cEGqz0OX8yIwrlwhrkvnlFWRE/oe3NoJ9f0N7sMXejhs8aTGClXU87GiUAoQ0XC1
+U8BPLjprkne5RMsSVHj3HbVzVQXmreNVDNsvtJVTskGxUE7IzIK80fBZP7OmC+bi
+ZuwTqXekF6SCqOJjlIsDY4uIL/cCQRkhM1kmeeHcGOQT+6auPtpHXniRxUNOoi7V
+CWg/HS2r9rkBDQRRxuMeAQgA+jCWHHx/kPQxghMBuio36RoR63qQSFxpp2Lx5HIk
+UYhpHE0oGOEEiBG0HrKIv7Qz+4Cs1VHSDCplD+vtRS9PkjOopSxE+ROHjIfT0fcj
+kYT14m2Ftmcqs5/Vw9qBHLhJQPyqIR4TMVuDP5/1LIfnv/EUoisAFcpT86CFK1jO
+GtdTALxDKIk6mlsiPCXD7jlSWw3btJlwydeudTVYBq5OhC/DLREn2vgtvqcWjvi4
+X/ttEWB35EzP11s6gRTv3ldVlXQ13Db+gHrjExRn848bRu0R1RzgcpsXOVeyzlzM
+KFJDXueyCOdiVAyEVPmLHKojwaP+UHlEnwI/v5OMva1VsQARAQABiQElBBgBCAAP
+BQJRxuMeAhsMBQkLO+RCAAoJECRXoVh8oO2cgiQIAKCqxY4LVbHYDywkwI4dAFp4
+bFlqKDURKzEq8nfDliBLmFrDAv9lFEBbNii7Y6b3FxaijUTPlJbU9RX8xtPO6bbA
+ujJPyHsi/hBZjqWCqbajbwoNMYzu9nbtB2DfxZKYnVijjmb15WuXVC+GN4M+ZCtw
++SNrpFTBPUUl4LjBRvUJ9DhjbD2+FlqXfDiRLKma0658s2PQZhqajiEswDyo1fAh
+OykaWCE5pW0DHl2Fizc77/QDe7iQa8ZRWp8Q/w0FJE2bXb3Paxtd40XURVOGRmtN
+vLPTKXIgxFi2dTCBQz6oTeajOjun6x6BUJVUbnJ40YmlqYbXqHyI9AcVMMEsLdw=
+=ZdXC
+-----END PGP PUBLIC KEY BLOCK-----
diff --git a/test/main.js b/test/main.js
index 46cc8be88877278e592f37f6a9cb195e9cf931cc..992f15fd24209bc645039f863b311f1f5292e31e 100644
--- a/test/main.js
+++ b/test/main.js
@@ -3,16 +3,26 @@ var should = require('should');
 var request = require('supertest');
 var nodecoin = require('../lib/nodecoin');
 
-var app = nodecoin.express.app({
+var config = {
   server: { port: 8001 },
   db: {
-    database : "nodecoin_test.db",
-    protocol : "sqlite",
-    dropAll: true
+    database : "nodecoin_test",
+    host: "localhost"
   },
   initKeys: []
+};
+
+// Bootstraps models
+nodecoin.database.init();
+nodecoin.database.connect(config, function (err) {
+  if(!err)
+    console.log("Connected to MongoDB.");
+  else
+    console.log("Error connecting to DB: " + err);
 });
 
+var app = nodecoin.express.app(config);
+
 var gets = [
   {should: 501, url: '/udc/amendments/view/[000001]/members'},
   {should: 501, url: '/udc/amendments/view/[000001]/self'},