diff --git a/src/main/java/de/flapdoodle/embed/mongo/AbstractMongoProcess.java b/src/main/java/de/flapdoodle/embed/mongo/AbstractMongoProcess.java
index 39fba3cb3c14855a17da2d77d3637d1fc08bfe80..61a33ba720c6f69a6ad1acaf89fe7afcd21a535b 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/AbstractMongoProcess.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/AbstractMongoProcess.java
@@ -51,7 +51,7 @@ public abstract class AbstractMongoProcess<T extends IMongoConfig, E extends Exe
 			throws IOException {
 		super(distribution, config, runtimeConfig, executable);
 	}
-	
+
 	@Override
 	protected final void onAfterProcessStart(ProcessControl process, IRuntimeConfig runtimeConfig) throws IOException {
 		ProcessOutput outputConfig = runtimeConfig.getProcessOutput();
@@ -72,7 +72,14 @@ public abstract class AbstractMongoProcess<T extends IMongoConfig, E extends Exe
 						"----------------------\n" +
 						""+logWatch.getOutput();
 			}
-			throw new IOException("Could not start process: "+failureFound);
+			try {
+				// Process could be finished with success here! In this case no need to throw an exception!
+				if(process.waitFor() != 0){
+					throw new IOException("Could not start process: "+failureFound);
+				}
+			} catch (InterruptedException e) {
+				throw new IOException("Could not start process: "+failureFound, e);
+			}
 		}
 	}
 
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/AbstractMongoConfigBuilder.java b/src/main/java/de/flapdoodle/embed/mongo/config/AbstractMongoConfigBuilder.java
index 4714155100108da193eab88c2227a6d101835f8f..3288da5873dce87eef7bd8562d14bbef0110fce1 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/AbstractMongoConfigBuilder.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/AbstractMongoConfigBuilder.java
@@ -37,14 +37,20 @@ public abstract class AbstractMongoConfigBuilder<T extends IMongoConfig> extends
 	protected static final TypedProperty<Net> NET = TypedProperty.with("Net", Net.class);
 	protected static final TypedProperty<IMongoCmdOptions> CMD_OPTIONS = TypedProperty.with("CmdOptions", IMongoCmdOptions.class);
 	protected static final TypedProperty<String> PID_FILE = TypedProperty.with("PidFile", String.class);
+	protected static final TypedProperty<String> USERNAME = TypedProperty.with("UserName", String.class);
+	protected static final TypedProperty<String> PASSWORD = TypedProperty.with("Password", String.class);
+	protected static final TypedProperty<String> DBNAME = TypedProperty.with("DbName", String.class);
+
 
-	
 	public AbstractMongoConfigBuilder() throws UnknownHostException, IOException  {
 		timeout().setDefault(new Timeout());
 		net().setDefault(new Net());
 		cmdOptions().setDefault(new MongoCmdOptionsBuilder().build());
+		username().setDefault("");
+		password().setDefault("");
+		dbName().setDefault("");
 	}
-	
+
 	protected IProperty<IFeatureAwareVersion> version() {
 		return property(VERSION);
 	}
@@ -53,6 +59,18 @@ public abstract class AbstractMongoConfigBuilder<T extends IMongoConfig> extends
 		return property(TIMEOUT);
 	}
 
+	protected IProperty<String> username() {
+		return property(USERNAME);
+	}
+
+	protected IProperty<String> password() {
+		return property(PASSWORD);
+	}
+
+	protected IProperty<String> dbName() {
+		return property(DBNAME);
+	}
+
 	protected IProperty<Net> net() {
 		return property(NET);
 	}
@@ -64,26 +82,32 @@ public abstract class AbstractMongoConfigBuilder<T extends IMongoConfig> extends
 	protected IProperty<String> pidFile() {
 		return property(PID_FILE);
 	}
-	
+
 	static class ImmutableMongoConfig implements IMongoConfig {
 
 		private final ISupportConfig _supportConfig;
-		
+
 		private final IFeatureAwareVersion _version;
 		private final Timeout _timeout;
 		private final Net _net;
 		private final IMongoCmdOptions _cmdOptions;
 		private final String _pidFile;
+		private final String _userName;
+		private final String _password;
 
-		public ImmutableMongoConfig(ISupportConfig supportConfig, IFeatureAwareVersion version, Net net, Timeout timeout,IMongoCmdOptions cmdOptions,String pidFile) {
+		public ImmutableMongoConfig(ISupportConfig supportConfig, IFeatureAwareVersion version, Net net,
+									String userName, String password,
+									Timeout timeout, IMongoCmdOptions cmdOptions, String pidFile) {
 			super();
 			_supportConfig = supportConfig;
-			
+
 			_version = version;
 			_net = net;
 			_timeout = timeout;
 			_cmdOptions = cmdOptions;
 			_pidFile = pidFile;
+			_userName = userName;
+			_password = password;
 		}
 
 		@Override
@@ -105,12 +129,22 @@ public abstract class AbstractMongoConfigBuilder<T extends IMongoConfig> extends
 		public IMongoCmdOptions cmdOptions() {
 			return _cmdOptions;
 		}
-		
+
+		@Override
+		public String password() {
+			return _password;
+		}
+
+		@Override
+		public String userName() {
+			return _userName;
+		}
+
 		@Override
 		public String pidFile() {
 			return _pidFile;
 		}
-		
+
 		@Override
 		public ISupportConfig supportConfig() {
 			return _supportConfig;
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/IMongoCmdOptions.java b/src/main/java/de/flapdoodle/embed/mongo/config/IMongoCmdOptions.java
index 92f1e14a53a09cadea212271046d9981193abae3..288136ea79ae61c600df67b25155947e1936c304 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/IMongoCmdOptions.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/IMongoCmdOptions.java
@@ -24,7 +24,9 @@ package de.flapdoodle.embed.mongo.config;
 public interface IMongoCmdOptions {
 
 	Integer syncDelay();
-	
+
+	String storageEngine();
+
 	boolean isVerbose();
 
 	boolean useNoPrealloc();
@@ -34,4 +36,8 @@ public interface IMongoCmdOptions {
 	boolean useNoJournal();
 	
 	boolean enableTextSearch();
+
+	boolean auth();
+
+	boolean master();
 }
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/IMongoConfig.java b/src/main/java/de/flapdoodle/embed/mongo/config/IMongoConfig.java
index 57673180591dd01d45d77268d5d15a77ac698d67..dd5d25456e5991998c19a79753f51863000e38e3 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/IMongoConfig.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/IMongoConfig.java
@@ -33,6 +33,10 @@ public interface IMongoConfig extends IExecutableProcessConfig {
 	Net net();
 
 	IMongoCmdOptions cmdOptions();
-	
+
+	String password();
+
+	String userName();
+
     String pidFile();
 }
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/IMongoShellConfig.java b/src/main/java/de/flapdoodle/embed/mongo/config/IMongoShellConfig.java
index e053725c9ca17fbad18e06b8088fc5c75b9e3e7b..394559a6bb587fe4a47d5540c0e6974e17521735 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/IMongoShellConfig.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/IMongoShellConfig.java
@@ -29,4 +29,5 @@ public interface IMongoShellConfig extends IMongoConfig {
 
 	String getScriptName();
 
+	String getDbName();
 }
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/IMongodConfig.java b/src/main/java/de/flapdoodle/embed/mongo/config/IMongodConfig.java
index c61d1088c7ddc830f8239fa51291271977276db1..92021397c53a41b12ded42af602cd3ba9fdd3e69 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/IMongodConfig.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/IMongodConfig.java
@@ -22,6 +22,7 @@ package de.flapdoodle.embed.mongo.config;
 
 import de.flapdoodle.embed.mongo.config.processlistener.IMongoProcessListener;
 
+import java.util.Map;
 
 public interface IMongodConfig extends IMongoConfig {
 
@@ -30,4 +31,6 @@ public interface IMongodConfig extends IMongoConfig {
 	boolean isConfigServer();
 
 	IMongoProcessListener processListener();
+
+	Map params();
 }
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/MongoCmdOptionsBuilder.java b/src/main/java/de/flapdoodle/embed/mongo/config/MongoCmdOptionsBuilder.java
index 7b351b61f51ff4cc841382da399a77a12a172a8b..931e9971f7f4e826dfe7b99d4ec3cdb18740c0d5 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/MongoCmdOptionsBuilder.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/MongoCmdOptionsBuilder.java
@@ -27,20 +27,26 @@ import de.flapdoodle.embed.process.builder.TypedProperty;
 public class MongoCmdOptionsBuilder extends AbstractBuilder<IMongoCmdOptions> {
 
 	protected static final TypedProperty<Integer> SYNC_DELAY = TypedProperty.with("syncDelay", Integer.class);
+	protected static final TypedProperty<String> STORAGE_ENGINE = TypedProperty.with("storageEngine", String.class);
 	protected static final TypedProperty<Boolean> VERBOSE = TypedProperty.with("verbose", Boolean.class);
 	protected static final TypedProperty<Boolean> NOPREALLOC = TypedProperty.with("noprealloc", Boolean.class);
 	protected static final TypedProperty<Boolean> SMALLFILES = TypedProperty.with("smallfiles", Boolean.class);
 	protected static final TypedProperty<Boolean> NOJOURNAL = TypedProperty.with("nojournal", Boolean.class);
 	protected static final TypedProperty<Boolean> ENABLE_TEXTSEARCH = TypedProperty.with("enableTextSearch", Boolean.class);
-	
-	
+	protected static final TypedProperty<Boolean> ENABLE_AUTH = TypedProperty.with("auth", Boolean.class);
+	protected static final TypedProperty<Boolean> MASTER = TypedProperty.with("master", Boolean.class);
+
+
 	public MongoCmdOptionsBuilder() {
 		property(SYNC_DELAY).setDefault(0);
+		property(STORAGE_ENGINE).setDefault(null);
 		property(VERBOSE).setDefault(false);
 		property(NOPREALLOC).setDefault(true);
 		property(SMALLFILES).setDefault(true);
 		property(NOJOURNAL).setDefault(true);
 		property(ENABLE_TEXTSEARCH).setDefault(false);
+		property(ENABLE_AUTH).setDefault(false);
+		property(MASTER).setDefault(false);
 	}
 
 	public MongoCmdOptionsBuilder useNoPrealloc(boolean value) {
@@ -72,7 +78,22 @@ public class MongoCmdOptionsBuilder extends AbstractBuilder<IMongoCmdOptions> {
 		set(ENABLE_TEXTSEARCH, verbose);
 		return this;
 	}
-	
+
+	public MongoCmdOptionsBuilder useStorageEngine(String storageEngine) {
+		set(STORAGE_ENGINE, storageEngine);
+		return this;
+	}
+
+	public MongoCmdOptionsBuilder enableAuth(boolean enable) {
+		set(ENABLE_AUTH, enable);
+		return this;
+	}
+
+	public MongoCmdOptionsBuilder master(boolean enable) {
+		set(MASTER, enable);
+		return this;
+	}
+
 	public MongoCmdOptionsBuilder defaultSyncDelay() {
 		set(SYNC_DELAY, null);
 		return this;
@@ -81,12 +102,15 @@ public class MongoCmdOptionsBuilder extends AbstractBuilder<IMongoCmdOptions> {
 	@Override
 	public IMongoCmdOptions build() {
 		Integer syncDelay = get(SYNC_DELAY, null);
+		String storageEngine = get(STORAGE_ENGINE, null);
 		boolean verbose = get(VERBOSE);
 		boolean noPrealloc = get(NOPREALLOC);
 		boolean smallFiles = get(SMALLFILES);
 		boolean noJournal = get(NOJOURNAL);
 		boolean enableTextSearch = get(ENABLE_TEXTSEARCH);
-		return new MongoCmdOptions(syncDelay, verbose, noPrealloc, smallFiles, noJournal, enableTextSearch);
+		boolean auth = get(ENABLE_AUTH);
+		boolean master = get(MASTER);
+		return new MongoCmdOptions(syncDelay, storageEngine, verbose, noPrealloc, smallFiles, noJournal, enableTextSearch, auth, master);
 	}
 
 	static class MongoCmdOptions implements IMongoCmdOptions {
@@ -97,16 +121,21 @@ public class MongoCmdOptionsBuilder extends AbstractBuilder<IMongoCmdOptions> {
 		private final boolean _smallFiles;
 		private final boolean _noJournal;
 		private final boolean _enableTextSearch;
+		private final boolean _auth;
+		private final boolean _master;
+		private final String _storageEngine;
 
-
-		public MongoCmdOptions(Integer syncDelay, boolean verbose, boolean noPrealloc, boolean smallFiles,
-		                       boolean noJournal, boolean enableTextSearch) {
+		public MongoCmdOptions(Integer syncDelay, String storageEngine, boolean verbose, boolean noPrealloc, boolean smallFiles,
+                               boolean noJournal, boolean enableTextSearch, boolean auth, boolean master) {
 			_syncDelay = syncDelay;
+			_storageEngine = storageEngine;
 			_verbose = verbose;
 			_noPrealloc = noPrealloc;
 			_smallFiles = smallFiles;
 			_noJournal = noJournal;
 			_enableTextSearch = enableTextSearch;
+			_auth = auth;
+			_master = master;
 		}
 
 		@Override
@@ -114,6 +143,11 @@ public class MongoCmdOptionsBuilder extends AbstractBuilder<IMongoCmdOptions> {
 			return _syncDelay;
 		}
 
+		@Override
+		public String storageEngine() {
+			return _storageEngine;
+		}
+
 		@Override
 		public boolean isVerbose() {
 			return _verbose;
@@ -138,5 +172,15 @@ public class MongoCmdOptionsBuilder extends AbstractBuilder<IMongoCmdOptions> {
 		public boolean enableTextSearch() {
 			return _enableTextSearch;
 		}
+
+		@Override
+		public boolean auth() {
+			return _auth;
+		}
+
+		@Override
+		public boolean master() {
+			return _master;
+		}
 	}
 }
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/MongoImportConfigBuilder.java b/src/main/java/de/flapdoodle/embed/mongo/config/MongoImportConfigBuilder.java
index 687a064a93f0025c21aa778edbb612d6e141d4ab..2de25f47156f46a30e9cf318beeece9773e9e568 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/MongoImportConfigBuilder.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/MongoImportConfigBuilder.java
@@ -111,7 +111,8 @@ public class MongoImportConfigBuilder extends AbstractMongoConfigBuilder<IMongoI
         IMongoCmdOptions cmdOptions=get(CMD_OPTIONS);
         String pidFile = get(PID_FILE);
 
-        return new ImmutableMongoImportConfig(version, net, timeout, cmdOptions, pidFile, database, collection ,importFile,jsonArray, upsert, drop);
+		return new ImmutableMongoImportConfig(version, net, timeout, cmdOptions, pidFile,
+				database, collection, importFile, jsonArray, upsert, drop);
     }
 
     static class ImmutableMongoImportConfig extends ImmutableMongoConfig implements IMongoImportConfig {
@@ -122,8 +123,9 @@ public class MongoImportConfigBuilder extends AbstractMongoConfigBuilder<IMongoI
         private final Boolean _dropCollection;
         private final Boolean _upsetDocuments;
 
-        public ImmutableMongoImportConfig(IFeatureAwareVersion version, Net net, Timeout timeout, IMongoCmdOptions cmdOptions, String pidFile, String database, String collection, String importFile,Boolean jsonArray, Boolean upsert, Boolean drop) {
-            super(new SupportConfig(Command.MongoImport),version, net, timeout,cmdOptions,pidFile);
+		public ImmutableMongoImportConfig(IFeatureAwareVersion version, Net net, Timeout timeout, IMongoCmdOptions cmdOptions, String pidFile,
+											String database, String collection, String importFile, Boolean jsonArray, Boolean upsert, Boolean drop) {
+			super(new SupportConfig(Command.MongoImport), version, net, null, null, timeout, cmdOptions, pidFile);
             _databaseName=database;
             _collectionName=collection;
             _getImportFile=importFile;
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/MongoShellConfigBuilder.java b/src/main/java/de/flapdoodle/embed/mongo/config/MongoShellConfigBuilder.java
index db8d8b6c5bbe5de9f6673fbc224eb9d30cf67a36..dd5aa7019a34568e0a8a35b7a8d59dca35bd967d 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/MongoShellConfigBuilder.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/MongoShellConfigBuilder.java
@@ -20,6 +20,10 @@
  */
 package de.flapdoodle.embed.mongo.config;
 
+import de.flapdoodle.embed.mongo.Command;
+import de.flapdoodle.embed.mongo.distribution.IFeatureAwareVersion;
+import de.flapdoodle.embed.process.builder.TypedProperty;
+
 import java.io.IOException;
 import java.net.UnknownHostException;
 import java.util.ArrayList;
@@ -50,11 +54,26 @@ public class MongoShellConfigBuilder extends AbstractMongoConfigBuilder<IMongoSh
 		return this;
 	}
 
+	public MongoShellConfigBuilder username(String username) {
+		username().set(username);
+		return this;
+	}
+
+	public MongoShellConfigBuilder password(String password) {
+		password().set(password);
+		return this;
+	}
+
 	public MongoShellConfigBuilder net(Net net) {
 		net().set(net);
 		return this;
 	}
 
+	public MongoShellConfigBuilder dbName(String dbName) {
+		dbName().set(dbName);
+		return this;
+	}
+
 	public MongoShellConfigBuilder cmdOptions(IMongoCmdOptions cmdOptions) {
 		cmdOptions().set(cmdOptions);
 		return this;
@@ -64,11 +83,11 @@ public class MongoShellConfigBuilder extends AbstractMongoConfigBuilder<IMongoSh
 		set(JS_SCRIPT, scriptName);
 		return this;
 	}
-	
+
 	public MongoShellConfigBuilder parameters(String... parameters) {
 		return parameters(Arrays.asList(parameters));
 	}
-	
+
 	public MongoShellConfigBuilder parameters(List<String> parameters) {
 		set(JS_SCRIPT_PARAMETERS, parameters);
 		return this;
@@ -81,23 +100,29 @@ public class MongoShellConfigBuilder extends AbstractMongoConfigBuilder<IMongoSh
 		Timeout timeout = timeout().get();
 		IMongoCmdOptions cmdOptions=get(CMD_OPTIONS);
 		String pidFile = get(PID_FILE);
-		
+
 		String name = get(JS_SCRIPT,null);
 		List<String> parameters = get(JS_SCRIPT_PARAMETERS,new ArrayList<String>());
 		if ((name==null) && (parameters.isEmpty())) {
 			throw new RuntimeException("you must set parameters or scriptName");
 		}
 
-		return new ImmutableMongoShellConfig(version, net, timeout, cmdOptions, pidFile, name, parameters);
+		return new ImmutableMongoShellConfig(version, net, timeout, cmdOptions, pidFile, name,
+					username().get(), password().get(), dbName().get(), parameters);
 	}
 
 	static class ImmutableMongoShellConfig extends ImmutableMongoConfig implements IMongoShellConfig {
 
 		private final String _name;
+		private final String _dbname;
 		private final List<String> _parameters;
 
-		public ImmutableMongoShellConfig(IFeatureAwareVersion version, Net net, Timeout timeout, IMongoCmdOptions cmdOptions, String pidFile, String scriptName, List<String> parameters) {
-			super(new SupportConfig(Command.Mongo), version, net, timeout,cmdOptions,pidFile);
+		public ImmutableMongoShellConfig(IFeatureAwareVersion version, Net net, Timeout timeout,
+											IMongoCmdOptions cmdOptions, String pidFile,
+											String scriptName, String username, String password, String dbName,
+											List<String> parameters) {
+ 			super(new SupportConfig(Command.Mongo), version, net, username, password, timeout, cmdOptions, pidFile);
+ 			this._dbname = dbName;
 			this._name = scriptName;
 			this._parameters = Collections.unmodifiableList(new ArrayList<String>(parameters));
 		}
@@ -110,6 +135,11 @@ public class MongoShellConfigBuilder extends AbstractMongoConfigBuilder<IMongoSh
 		@Override
 		public String getScriptName() {
 			return _name;
+ 		}
+
+ 		@Override
+ 		public String getDbName() {
+ 			return _dbname;
 		}
 
 	}
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/MongodConfigBuilder.java b/src/main/java/de/flapdoodle/embed/mongo/config/MongodConfigBuilder.java
index 688452068a34fcb151f190b4406a6213b6839c43..74b32febbb966e6930b7e58aed6cb17ecd97a4be 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/MongodConfigBuilder.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/MongodConfigBuilder.java
@@ -22,6 +22,8 @@ package de.flapdoodle.embed.mongo.config;
 
 import java.io.IOException;
 import java.net.UnknownHostException;
+import java.util.HashMap;
+import java.util.Map;
 
 import de.flapdoodle.embed.mongo.Command;
 import de.flapdoodle.embed.mongo.config.processlistener.IMongoProcessListener;
@@ -33,6 +35,7 @@ import de.flapdoodle.embed.process.distribution.IVersion;
 public class MongodConfigBuilder extends AbstractMongoConfigBuilder<IMongodConfig> {
 
 	protected static final TypedProperty<Storage> REPLICATION = TypedProperty.with("Replication", Storage.class);
+	protected static final TypedProperty<Map> PARAMS = TypedProperty.with("Params", Map.class);
 	protected static final TypedProperty<Boolean> CONFIG_SERVER = TypedProperty.with("ConfigServer", Boolean.class);
 	protected static final TypedProperty<IMongoProcessListener> PROCESS_LISTENER = TypedProperty.with("ProcessListener", IMongoProcessListener.class);
 
@@ -42,18 +45,19 @@ public class MongodConfigBuilder extends AbstractMongoConfigBuilder<IMongodConfi
 		property(CONFIG_SERVER).setDefault(false);
 		property(PROCESS_LISTENER).setDefault(new NoopProcessListener());
 		property(PID_FILE).setDefault("mongod.pid");
+		property(PARAMS).setDefault(new HashMap());
 	}
 
 	public MongodConfigBuilder version(IFeatureAwareVersion version) {
 		version().set(version);
 		return this;
 	}
-	
+
 	public MongodConfigBuilder timeout(Timeout timeout) {
 		timeout().set(timeout);
 		return this;
 	}
-	
+
 	public MongodConfigBuilder net(Net net) {
 		net().set(net);
 		return this;
@@ -63,27 +67,32 @@ public class MongodConfigBuilder extends AbstractMongoConfigBuilder<IMongodConfi
 		cmdOptions().set(cmdOptions);
 		return this;
 	}
-	
+
+	public MongodConfigBuilder setParameter(String name, String value) {
+		get(PARAMS).put(name, value);
+		return this;
+	}
+
 	public MongodConfigBuilder replication(Storage replication) {
 		set(REPLICATION,replication);
 		return this;
 	}
-	
+
 	public MongodConfigBuilder configServer(boolean configServer) {
 		set(CONFIG_SERVER,configServer);
 		return this;
 	}
-	
+
 	public MongodConfigBuilder processListener(IMongoProcessListener processListener) {
 		set(PROCESS_LISTENER,processListener);
 		return this;
 	}
-	
+
 	public MongodConfigBuilder pidFile(String pidFile) {
         pidFile().set(pidFile);
         return this;
     }
-	
+
 	@Override
 	public IMongodConfig build() {
 		IFeatureAwareVersion version=version().get();
@@ -94,8 +103,9 @@ public class MongodConfigBuilder extends AbstractMongoConfigBuilder<IMongodConfi
 		IMongoCmdOptions cmdOptions=get(CMD_OPTIONS);
 		IMongoProcessListener processListener=get(PROCESS_LISTENER);
 		String pidFile=get(PID_FILE);
-		
-		return new ImmutableMongodConfig(version, net, timeout, cmdOptions, pidFile, replication, configServer,processListener);
+		Map params = get(PARAMS);
+
+		return new ImmutableMongodConfig(version, net, timeout, cmdOptions, pidFile, replication, configServer, processListener, params);
 	}
 
 	static class ImmutableMongodConfig extends ImmutableMongoConfig implements IMongodConfig {
@@ -103,12 +113,16 @@ public class MongodConfigBuilder extends AbstractMongoConfigBuilder<IMongodConfi
 		private final Storage _replication;
 		private final boolean _configServer;
 		private final IMongoProcessListener _processListener;
+		private final Map _params;
 
-		public ImmutableMongodConfig(IFeatureAwareVersion version, Net net, Timeout timeout, IMongoCmdOptions cmdOptions, String pidFile, Storage replication,boolean configServer, IMongoProcessListener processListener) {
-			super(new SupportConfig(Command.MongoD),version, net, timeout,cmdOptions,pidFile);
+		public ImmutableMongodConfig(IFeatureAwareVersion version, Net net, Timeout timeout, IMongoCmdOptions cmdOptions,
+										String pidFile, Storage replication, boolean configServer,
+										IMongoProcessListener processListener, Map params) {
+			super(new SupportConfig(Command.MongoD), version, net, null, null, timeout, cmdOptions, pidFile);
 			_replication = replication;
 			_configServer = configServer;
 			_processListener = processListener;
+			_params = params;
 		}
 
 		@Override
@@ -125,5 +139,10 @@ public class MongodConfigBuilder extends AbstractMongoConfigBuilder<IMongodConfi
 		public IMongoProcessListener processListener() {
 			return _processListener;
 		}
+
+		@Override
+		public Map params() {
+			return _params;
+		}
 	}
 }
diff --git a/src/main/java/de/flapdoodle/embed/mongo/config/MongosConfigBuilder.java b/src/main/java/de/flapdoodle/embed/mongo/config/MongosConfigBuilder.java
index 28886537cf0a2b37d00eb06206600b551d28b26c..39a0a73ded1c63902cee5e93a46aa121520bdb24 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/config/MongosConfigBuilder.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/config/MongosConfigBuilder.java
@@ -77,8 +77,9 @@ public class MongosConfigBuilder extends AbstractMongoConfigBuilder<IMongosConfi
 
 		private final String _configDB;
 
-		public ImmutableMongosConfig(IFeatureAwareVersion version, Net net, Timeout timeout, IMongoCmdOptions cmdOptions, String pidFile, String configDB) {
-			super(MongosSupportConfig.getInstance(), version, net, timeout,cmdOptions,pidFile);
+		public ImmutableMongosConfig(IFeatureAwareVersion version, Net net, Timeout timeout, IMongoCmdOptions cmdOptions,
+										String pidFile, String configDB) {
+			super(MongosSupportConfig.getInstance(), version, net, null, null, timeout, cmdOptions, pidFile);
 			_configDB = configDB;
 		}
 
diff --git a/src/main/java/de/flapdoodle/embed/mongo/distribution/Version.java b/src/main/java/de/flapdoodle/embed/mongo/distribution/Version.java
index 64cb8d54e0394449235c0aa4682cc94e64a23477..8f696f6c71c327260f60cd77312aaa0bbfaba75a 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/distribution/Version.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/distribution/Version.java
@@ -144,9 +144,14 @@ public enum Version implements IFeatureAwareVersion {
   V2_7_1("2.7.1",Feature.SYNC_DELAY),
 
   /**
-   * Latest 2.7 series development release
+   * Latest 3.0 series development release
+   */
+  V3_0_0("3.0.0", Feature.SYNC_DELAY),
+  V3_0_1("3.0.1",Feature.SYNC_DELAY),
+  /**
+   * Latest 3.1 series development release
    */
-  V3_0_0("3.0.0",Feature.SYNC_DELAY),
+  V3_1_0("3.1.0",Feature.SYNC_DELAY),
 
   ;
 
@@ -185,22 +190,24 @@ public enum Version implements IFeatureAwareVersion {
 		@Deprecated
 		V2_3(V2_3_0),
 		V2_4(V2_4_10),
-    @Deprecated
+        @Deprecated
 		V2_5(V2_5_4),
+        @Deprecated
+		V2_6(V2_6_8),
+        @Deprecated
+        V2_7(V2_7_1),
+
 		/**
 		 * Latest production release
 		 */
-		V2_6(V2_6_8),
-
-    /**
-     * Latest development release
-     */
-		@Deprecated
-    V2_7(V2_7_1),
-    V3_0(V3_0_0),
+		V3_0(V3_0_1),
+		/**
+		 * Latest development release
+		 */
+		V3_1(V3_1_0),
 
-		PRODUCTION(V2_6),
-		DEVELOPMENT(V3_0), ;
+		PRODUCTION(V3_0),
+		DEVELOPMENT(V3_1), ;
 
 		private final IFeatureAwareVersion _latest;
 
diff --git a/src/main/java/de/flapdoodle/embed/mongo/runtime/MongoShell.java b/src/main/java/de/flapdoodle/embed/mongo/runtime/MongoShell.java
index 756a6516dbe33f17694b92a70923f9a878292826..4628b81f5fadb6d69ba0ea64bb1d348ff48169ed 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/runtime/MongoShell.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/runtime/MongoShell.java
@@ -29,6 +29,8 @@ import de.flapdoodle.embed.mongo.config.IMongoShellConfig;
 import de.flapdoodle.embed.mongo.config.Net;
 import de.flapdoodle.embed.process.extract.IExtractedFileSet;
 
+import static java.util.Arrays.asList;
+
 /**
  *
  */
@@ -38,7 +40,7 @@ public class MongoShell extends AbstractMongo {
 			throws UnknownHostException {
 		List<String> ret = new ArrayList<String>();
 		ret.addAll(Arrays.asList(files.executable().getAbsolutePath()));
-		
+
 		String hostname="localhost";
 		Net net = config.net();
 		if (net.isIpv6()) {
@@ -48,10 +50,22 @@ public class MongoShell extends AbstractMongo {
 			hostname=net.getBindIp();
 		}
 
-		
+		if (config.password() != null && !config.userName().isEmpty()) {
+			ret.addAll(asList(
+				"--username", config.userName()
+			));
+		}
+		if (config.password() != null && !config.password().isEmpty()) {
+			ret.addAll(asList(
+				"--password", config.password()
+			));
+		}
 
-		
-		ret.add(hostname+":" + net.getPort());
+		if (config.getDbName() != null && !config.getDbName().isEmpty()) {
+			ret.add(hostname + ":" + net.getPort() + "/" + config.getDbName());
+		} else {
+			ret.add(hostname+":" + net.getPort());
+        }
 		if (!config.getScriptParameters().isEmpty()) {
 			ret.add("--eval");
 			StringBuilder eval = new StringBuilder();
@@ -63,7 +77,7 @@ public class MongoShell extends AbstractMongo {
 		if (config.getScriptName()!=null) {
 			ret.add(config.getScriptName());
 		}
-		
+
 		return ret;
 	}
 }
diff --git a/src/main/java/de/flapdoodle/embed/mongo/runtime/Mongod.java b/src/main/java/de/flapdoodle/embed/mongo/runtime/Mongod.java
index 0b4f480f51800514cba420df2e8d7d04b06a4844..5433fde1074c2b327ca23f2d0d85213f6f1ac4d1 100644
--- a/src/main/java/de/flapdoodle/embed/mongo/runtime/Mongod.java
+++ b/src/main/java/de/flapdoodle/embed/mongo/runtime/Mongod.java
@@ -45,6 +45,9 @@ import org.slf4j.LoggerFactory;
 import java.util.regex.Matcher;
 import java.util.regex.Pattern;
 
+import static java.lang.String.format;
+import static java.util.Arrays.asList;
+
 /**
  *
  */
@@ -122,11 +125,19 @@ public class Mongod extends AbstractMongo {
 	public static List<String> getCommandLine(IMongodConfig config, IExtractedFileSet files, File dbDir)
 			throws UnknownHostException {
 		List<String> ret = new ArrayList<String>();
-		ret.addAll(Arrays.asList(files.executable().getAbsolutePath(),
-				"--dbpath",
-				"" + dbDir.getAbsolutePath(),
-				"--noauth"));
+		ret.addAll(asList(files.executable().getAbsolutePath(),
+			"--dbpath", "" + dbDir.getAbsolutePath()));
 
+		if (config.params() != null && !config.params().isEmpty()) {
+			for (Object key : config.params().keySet()) {
+				ret.addAll(asList(format("--setParameter"), format("%s=%s", key, config.params().get(key))));
+			}
+		}
+		if (config.cmdOptions().auth()) {
+			ret.add("--auth");
+		} else {
+			ret.add("--noauth");
+		}
 		if (config.cmdOptions().useNoPrealloc()) {
 			ret.add("--noprealloc");
 		}
@@ -136,6 +147,14 @@ public class Mongod extends AbstractMongo {
 		if (config.cmdOptions().useNoJournal()) {
 			ret.add("--nojournal");
 		}
+		if (config.cmdOptions().master()) {
+			ret.add("--master");
+		}
+
+		if (config.cmdOptions().storageEngine() != null) {
+			ret.add("--storageEngine");
+			ret.add(config.cmdOptions().storageEngine());
+		}
 
 		if (config.cmdOptions().isVerbose()) {
 			ret.add("-v");
@@ -171,7 +190,7 @@ public class Mongod extends AbstractMongo {
 			ret.add("--syncdelay=" + syncDelay);
 		}
 	}
-	
+
 	private static void applyTextSearch(List<String> ret, IMongoCmdOptions cmdOptions) {
 		if (cmdOptions.enableTextSearch()) {
 			ret.add("--setParameter");