diff --git a/pom.xml b/pom.xml
index 5a0fb1726e9b76fb4cf40bdbcfd339e0481434bc..fef1b64bdb16b8c4d86d6c171d0059e0bef103b6 100644
--- a/pom.xml
+++ b/pom.xml
@@ -23,7 +23,7 @@
 
     <groupId>com.syncleus.maven.plugins</groupId>
     <artifactId>maven-mongodb-plugin</artifactId>
-    <version>1.0.2-SNAPSHOT</version>
+    <version>1.1.0-SNAPSHOT</version>
     <packaging>maven-plugin</packaging>
 
     <name>maven-mongodb-plugin</name>
@@ -337,7 +337,7 @@
         <dependency>
             <groupId>de.flapdoodle.embed</groupId>
             <artifactId>de.flapdoodle.embed.mongo</artifactId>
-            <version>1.47.3</version>
+            <version>1.48.0</version>
         </dependency>
         <dependency>
             <groupId>junit</groupId>
@@ -348,7 +348,7 @@
         <dependency>
             <groupId>org.mongodb</groupId>
             <artifactId>mongo-java-driver</artifactId>
-            <version>2.13.0</version>
+            <version>3.0.2</version>
         </dependency>
         <dependency>
             <groupId>org.mockito</groupId>
diff --git a/src/main/java/com/syncleus/maven/plugins/mongodb/ReplSetInitiateConfig.java b/src/main/java/com/syncleus/maven/plugins/mongodb/ReplSetInitiateConfig.java
new file mode 100644
index 0000000000000000000000000000000000000000..56ca33d8e1dde08dbc161a3aa4c7332da69c0aa8
--- /dev/null
+++ b/src/main/java/com/syncleus/maven/plugins/mongodb/ReplSetInitiateConfig.java
@@ -0,0 +1,232 @@
+/**
+ * Copyright: (c) Syncleus, Inc.
+ *
+ * You may redistribute and modify this source code under the terms and
+ * conditions of the Open Source Community License - Type C version 1.0
+ * or any later version as published by Syncleus, Inc. at www.syncleus.com.
+ * There should be a copy of the license included with this file. If a copy
+ * of the license is not included you are granted no right to distribute or
+ * otherwise use this file except through a legal and valid license. You
+ * should also contact Syncleus, Inc. at the information below if you cannot
+ * find a license:
+ *
+ * Syncleus, Inc.
+ * 2604 South 12th Street
+ * Philadelphia, PA 19148
+ */
+package com.syncleus.maven.plugins.mongodb;
+
+import com.mongodb.BasicDBList;
+import com.mongodb.BasicDBObject;
+import org.apache.maven.plugins.annotations.Parameter;
+import java.util.HashMap;
+
+public class ReplSetInitiateConfig {
+    private String _id;
+    private Integer version;
+    private MembersConfig[] members;
+    private SettingsConfig settings;
+
+    public ReplSetInitiateConfig() {
+    }
+
+    public ReplSetInitiateConfig(String _id, Integer version, MembersConfig[] members, SettingsConfig settings) {
+        this._id = _id;
+        this.version = version;
+        this.members = members;
+        this.settings = settings;
+    }
+
+    public String get_id() {
+        return _id;
+    }
+
+    public Integer getVersion() {
+        return version;
+    }
+
+    public MembersConfig[] getMembers() {
+        return members;
+    }
+
+    public SettingsConfig getSettings() {
+        return settings;
+    }
+
+    public BasicDBObject makeCommand() {
+        final BasicDBObject cmd = new BasicDBObject();
+        if( _id != null && !_id.isEmpty())
+            cmd.put("_id", _id);
+        if(version != null)
+            cmd.put("version", version);
+        if( members != null && members.length > 0) {
+            final BasicDBList dbMembers = new BasicDBList();
+            for(final MembersConfig member : members )
+                dbMembers.add(member.makeCommand());
+            cmd.put("members", dbMembers);
+        }
+        if(settings != null)
+            cmd.put("settings", settings.makeCommand());
+        return cmd;
+    }
+
+    public static class MembersConfig {
+        private Integer _id;
+        private String host;
+        private Boolean arbiterOnly;
+        private Boolean buildIndexes;
+        private Boolean hidden;
+        private Integer priority;
+        private HashMap<String, String> tags;
+        private Integer slaveDelay;
+        private Integer votes;
+
+        public MembersConfig() {
+        }
+
+        public MembersConfig(Integer _id, String host, Boolean arbiterOnly, Boolean buildIndexes, Boolean hidden, Integer priority, HashMap<String, String> tags, Integer slaveDelay, Integer votes) {
+            this._id = _id;
+            this.host = host;
+            this.arbiterOnly = arbiterOnly;
+            this.buildIndexes = buildIndexes;
+            this.hidden = hidden;
+            this.priority = priority;
+            this.tags = tags;
+            this.slaveDelay = slaveDelay;
+            this.votes = votes;
+        }
+
+        public Integer get_id() {
+            return _id;
+        }
+
+        public String getHost() {
+            return host;
+        }
+
+        public Boolean getArbiterOnly() {
+            return arbiterOnly;
+        }
+
+        public Boolean getBuildIndexes() {
+            return buildIndexes;
+        }
+
+        public Boolean getHidden() {
+            return hidden;
+        }
+
+        public Integer getPriority() {
+            return priority;
+        }
+
+        public HashMap<String, String> getTags() {
+            return tags;
+        }
+
+        public Integer getSlaveDelay() {
+            return slaveDelay;
+        }
+
+        public Integer getVotes() {
+            return votes;
+        }
+
+        public BasicDBObject makeCommand() {
+            final BasicDBObject cmd = new BasicDBObject();
+            if(_id != null)
+                cmd.put("_id", _id);
+            if(host != null && !host.isEmpty())
+                cmd.put("host", host);
+            if(arbiterOnly != null)
+                cmd.put("arbiterOnly", arbiterOnly);
+            if(hidden != null)
+                cmd.put("hidden", arbiterOnly);
+            if(priority != null)
+                cmd.put("priority", priority);
+            if( tags != null && tags.size() > 0)
+                cmd.put("tags", new BasicDBObject(tags));
+            if(slaveDelay != null)
+                cmd.put("slaveDelay", slaveDelay);
+            if(votes != null)
+                cmd.put("votes", votes);
+            return cmd;
+        }
+    }
+
+    public static class SettingsConfig {
+        private Boolean chainingAllowed;
+        private Integer heartbeatTimeoutSecs;
+        private GetLastErrorModesConfig[] getLastErrorModes;
+
+        //TODO: implement getLastErrorDefaults
+
+        public SettingsConfig() {
+        }
+
+        public SettingsConfig(Boolean chainingAllowed, Integer heartbeatTimeoutSecs, GetLastErrorModesConfig[] getLastErrorModes) {
+            this.chainingAllowed = chainingAllowed;
+            this.heartbeatTimeoutSecs = heartbeatTimeoutSecs;
+            this.getLastErrorModes = getLastErrorModes;
+        }
+
+        public Boolean getChainingAllowed() {
+            return chainingAllowed;
+        }
+
+        public Integer getHeartbeatTimeoutSecs() {
+            return heartbeatTimeoutSecs;
+        }
+
+        public GetLastErrorModesConfig[] getGetLastErrorModes() {
+            return getLastErrorModes;
+        }
+
+        public BasicDBObject makeCommand() {
+            final BasicDBObject cmd = new BasicDBObject();
+            if(chainingAllowed != null)
+                cmd.put("chainingAllowed", chainingAllowed);
+            if(heartbeatTimeoutSecs != null)
+                cmd.put("heartbeatTimeoutSecs", heartbeatTimeoutSecs);
+            if(getLastErrorModes != null && getLastErrorModes.length > 0) {
+                final BasicDBObject dbGetLastErrorModes = new BasicDBObject();
+                for( final GetLastErrorModesConfig getLastErrorMode : getLastErrorModes) {
+                    getLastErrorMode.makeCommand(dbGetLastErrorModes);
+                }
+                cmd.put("getLastErrorModes", dbGetLastErrorModes);
+            }
+            return cmd;
+        }
+
+        public static class GetLastErrorModesConfig {
+            private String writeConcern;
+            private HashMap<String, String> tags;
+
+            public GetLastErrorModesConfig() {
+            }
+
+            public GetLastErrorModesConfig(String writeConcern, HashMap<String, String> tags) {
+                this.writeConcern = writeConcern;
+                this.tags = tags;
+            }
+
+            public String getWriteConcern() {
+                return writeConcern;
+            }
+
+            public HashMap<String, String> getTags() {
+                return tags;
+            }
+
+            public void makeCommand(final BasicDBObject cmd) {
+                if( tags != null && !tags.isEmpty()) {
+                    final BasicDBObject dbTags = new BasicDBObject();
+                    dbTags.putAll(tags);
+                    cmd.put(writeConcern, dbTags);
+                }
+                else
+                    cmd.put(writeConcern, new BasicDBObject());
+            }
+        }
+    }
+}
diff --git a/src/main/java/com/syncleus/maven/plugins/mongodb/StartMongoMojo.java b/src/main/java/com/syncleus/maven/plugins/mongodb/StartMongoMojo.java
index f0cbce3e1d75cd4becf00b307472282561459728..e5f877d15b3522fc3a3bf7545fc10a852dc842ee 100644
--- a/src/main/java/com/syncleus/maven/plugins/mongodb/StartMongoMojo.java
+++ b/src/main/java/com/syncleus/maven/plugins/mongodb/StartMongoMojo.java
@@ -21,10 +21,7 @@
  */
 package com.syncleus.maven.plugins.mongodb;
 
-import com.mongodb.CommandResult;
-import com.mongodb.DB;
-import com.mongodb.MongoClient;
-import com.mongodb.MongoException;
+import com.mongodb.*;
 import com.syncleus.maven.plugins.mongodb.log.Loggers;
 import com.syncleus.maven.plugins.mongodb.log.Loggers.LoggingStyle;
 import de.flapdoodle.embed.mongo.*;
@@ -285,6 +282,9 @@ public class StartMongoMojo extends AbstractMongoMojo {
     @Parameter
     private InitializerConfig[] initalizations;
 
+    @Parameter
+    private ReplSetInitiateConfig replSetInitiate;
+
     /**
      * Not a mojo configuration parameter, this is used internally.
      */
@@ -387,6 +387,7 @@ public class StartMongoMojo extends AbstractMongoMojo {
             throw new MojoExecutionException("Unable to start the mongod", e);
         }
 
+        startReplSetInitiate();
         startImport();
         startInitialization();
 
@@ -679,12 +680,13 @@ public class StartMongoMojo extends AbstractMongoMojo {
 
     }
 
+
     private void startInitialization() throws MojoExecutionException, MojoFailureException {
         if (initalizations == null || initalizations.length == 0)
             return;
 
         for (final InitializerConfig initConfig : this.initalizations) {
-            final DB db = connectToMongoAndGetDatabase(initConfig.getDatabaseName());
+            final DB db = connectToMongoAndGetDB(initConfig.getDatabaseName());
 
             for (final File scriptFile : initConfig.getScripts()) {
                 if (scriptFile.isDirectory())
@@ -695,21 +697,18 @@ public class StartMongoMojo extends AbstractMongoMojo {
         }
     }
 
-    DB connectToMongoAndGetDatabase(final String databaseName) throws MojoExecutionException {
+    @Deprecated
+    DB connectToMongoAndGetDB(final String databaseName) throws MojoExecutionException {
         if (databaseName == null || databaseName.trim().length() == 0) {
             throw new MojoExecutionException("Database name is missing");
         }
 
-        final MongoClient mongoClient;
-        try {
-            mongoClient = new MongoClient("localhost", getPort());
-        } catch (final UnknownHostException e) {
-            throw new MojoExecutionException("Unable to connect to mongo instance", e);
-        }
+        final MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", getPort()));
         getLog().info("Connected to MongoDB");
         return mongoClient.getDB(databaseName);
     }
 
+    @Deprecated
     private void processScriptDirectory(final DB db, final File scriptDirectory) throws MojoExecutionException {
         final File[] files = scriptDirectory.listFiles();
         getLog().info("Folder " + scriptDirectory.getAbsolutePath() + " contains " + files.length + " file(s):");
@@ -719,6 +718,7 @@ public class StartMongoMojo extends AbstractMongoMojo {
         getLog().info("Data initialized with success");
     }
 
+    @Deprecated
     private void processScriptFile(final DB db, final File scriptFile) throws MojoExecutionException {
         Scanner scanner = null;
         final StringBuilder instructions = new StringBuilder();
@@ -747,4 +747,16 @@ public class StartMongoMojo extends AbstractMongoMojo {
         }
         getLog().info("- file " + scriptFile.getName() + " parsed successfully");
     }
+
+    private void startReplSetInitiate() throws MojoExecutionException, MojoFailureException {
+        if(replSetInitiate == null)
+            return;
+
+        final MongoClient mongoClient = new MongoClient(new ServerAddress("localhost", getPort()));
+        getLog().info("Connected to MongoDB");
+        final DB db = mongoClient.getDB("admin");
+
+        getLog().info("would have initated: " + replSetInitiate.makeCommand().toString());
+        db.command(new BasicDBObject("replSetInitiate", replSetInitiate.makeCommand()));
+    }
 }
diff --git a/src/test/java/com/mongodb/EmbedMongoDB.java b/src/test/java/com/mongodb/EmbedMongoDB.java
index a58f7ea2349aec5add17114d5b26c4d6c6824f7e..bf3cfda19bedffea5137c063ba1b417f5922e518 100644
--- a/src/test/java/com/mongodb/EmbedMongoDB.java
+++ b/src/test/java/com/mongodb/EmbedMongoDB.java
@@ -16,6 +16,8 @@
  */
 package com.mongodb;
 
+import org.bson.BsonDocument;
+
 import java.net.UnknownHostException;
 import java.util.Set;
 
@@ -26,44 +28,20 @@ public class EmbedMongoDB extends DB {
     }
 
     public CommandResult notOkErrorResult(String message) {
-        try {
-            CommandResult commandResult = new CommandResult(new ServerAddress("localhost"));
-            commandResult.put("errmsg", message);
-            commandResult.put("ok", 0);
-            return commandResult;
-        } catch (UnknownHostException e) {
-            return null;
-        }
+        CommandResult commandResult = new CommandResult(new BsonDocument(), new ServerAddress("localhost"));
+        commandResult.put("errmsg", message);
+        commandResult.put("ok", 0);
+        return commandResult;
     }
 
     @Override
     public CommandResult doEval(String code, Object... args) {
-        CommandResult commandResult;
-        try {
-            commandResult = new CommandResult(new ServerAddress("localhost"));
-            commandResult.put("ok", 1.0);
-            commandResult.put("retval", "null");
-        } catch (UnknownHostException e) {
-            return notOkErrorResult(e.getMessage());
-        }
+        CommandResult commandResult = new CommandResult(new BsonDocument(), new ServerAddress("localhost"));
+        commandResult.put("ok", 1.0);
+        commandResult.put("retval", "null");
         return commandResult;
     }
 
-    @Override
-    public void requestStart() {
-
-    }
-
-    @Override
-    public void requestDone() {
-
-    }
-
-    @Override
-    public void requestEnsureConnection() {
-
-    }
-
     @Override
     protected DBCollection doGetCollection(String name) {
         return null;
@@ -73,14 +51,4 @@ public class EmbedMongoDB extends DB {
     public Set<String> getCollectionNames() {
         return null;
     }
-
-    @Override
-    CommandResult doAuthenticate(MongoCredential credentials) {
-        return null;
-    }
-
-    @Override
-    public void cleanCursors(boolean force) {
-
-    }
 }
diff --git a/src/test/java/com/syncleus/maven/plugins/mongodb/StartMongoMojoTest.java b/src/test/java/com/syncleus/maven/plugins/mongodb/StartMongoMojoTest.java
index 88c5518d4359d5b14883b894354c6d31107e02af..71ca02f32aaa2c70530776928c31997be0299b28 100644
--- a/src/test/java/com/syncleus/maven/plugins/mongodb/StartMongoMojoTest.java
+++ b/src/test/java/com/syncleus/maven/plugins/mongodb/StartMongoMojoTest.java
@@ -131,7 +131,7 @@ public class StartMongoMojoTest {
         }
 
         @Override
-        DB connectToMongoAndGetDatabase(String databaseName) throws MojoExecutionException {
+        DB connectToMongoAndGetDB(String databaseName) throws MojoExecutionException {
             return database;
         }
     }