diff --git a/.project b/.project
new file mode 100755
index 0000000..47e9a08
--- /dev/null
+++ b/.project
@@ -0,0 +1,7 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>mongeo</name>
+	<comment></comment>
+	<projects>
+	</projects>
+</projectDescription>
diff --git a/bin/mongeo b/bin/mongeo
index f726a13..2a78f68 100755
--- a/bin/mongeo
+++ b/bin/mongeo
@@ -21,6 +21,9 @@ program
 	.option('-p, --port [port]', 'Port for the mongoDB')
 	.option('-u, --user [user]', 'Username for database' )
 	.option('-w, --pass [pass]', 'Password for database' )
+	.option('-g, --geoip [collection]', 'Name de collection for the Ip' )
+	.option('-c, --city [collection]', 'Name de collection for the citys' )
+	.option('-o, --country [collection]', 'Name de collection for the countrys' )
 	.option('-m, --multi [multi]', 'Multiply servers mongo' )

 	.parse(process.argv);
diff --git a/examples/connect.js b/examples/connect.js
index e18fee4..70109b7 100755
--- a/examples/connect.js
+++ b/examples/connect.js
@@ -3,11 +3,11 @@
  */

 var connect = require('connect'),
-	mongeo = new require('mongeo')( );;
+	mongeo = new require('mongeo')( 'mongodb://localhost/Hello' ); //Local DB

 connect()
 	.use(connect.bodyParser())
-	.use(mongeo.connect)
+	.use(mongeo.connect())
 	.use(hello)
 	.listen(3000);

diff --git a/examples/express.js b/examples/express.js
index c1fb083..4b30626 100755
--- a/examples/express.js
+++ b/examples/express.js
@@ -1,6 +1,15 @@
 var express = require('express'),
 	http = require('http'),
-	mongeo = new require('mongeo')();
+	mongeo = new require('mongeo')({
+		host : 'myHost.mydomain.com',
+		port : 8080,
+		username : 'MyUser',
+		password : 'MyPaSsWoRd',
+		db : 'myDB',
+		country : 'MyCountrys',
+		city : 'MyCitys',
+		geoip : 'geoip'
+	});

 var app = express();

@@ -10,7 +19,7 @@ app.configure(function(){
 	app.use(express.logger('dev'));
 	app.use(express.bodyParser());
 	app.use(express.methodOverride());
-	app.use(mongeo.express);
+	app.use(mongeo.express());
 	app.use(app.router);
 });

diff --git a/examples/socketio.js b/examples/socketio.js
index 7073cfb..ae9532f 100755
--- a/examples/socketio.js
+++ b/examples/socketio.js
@@ -4,10 +4,13 @@

 var io = require('socket.io').listen(80),
-	mongeo = new require('mongeo')();
+	mongeo = new require('mongeo')( [ 'mongodb://localhost/hello', 'mongo://mydoamin.com/hello' ] );

 io.configure(function (){
-	io.set('authorization', mongo.socketio);
+	io.set('authorization', mongeo.socketio(function(err, auth){
+		//More!! Code
+		//auth is Boolan
+	}));
 });

 io.sockets.on('connection', function (socket) {
diff --git a/lib/creator.js b/lib/creator.js
new file mode 100755
index 0000000..d223946
--- /dev/null
+++ b/lib/creator.js
@@ -0,0 +1,47 @@
+var path 	= require('path'),
+	dir 	= path.join(__dirname, '..'),
+	_ 		= require('underscore'),
+	utils 	= require(path.join(dir, 'lib', 'utils.js')),
+	models	= require(path.join(dir, 'lib', 'models.js')),
+	config	= require(path.join(dir, 'lib', 'config.js'));
+
+exports.update = function(path, db, orden, divid, callback) {
+	var model = models(db);
+	// lea linea por liena
+	utils.read(path, function(err, array){
+		if (err)
+			utils.console(err, array);
+		for(i in array) {
+			utils.LineToObjt(array[i], divid, orden, function(err, obj) {
+				if (err)
+					utils.console(err, array);
+				model[config.get('countries')].find({
+					name : obj.country,
+					code : obj.code
+				}, {
+					upsert : true
+				}).exec(function(err, doc) {
+					if (err)
+						utils.console(err, doc);
+					doc.City.push({
+						name : obj.city,
+						lng : obj.lng,
+						lat : obj.lat
+					});
+					doc.save(utils.console);
+					ip = new model[config.get('geoip')]({
+						country : doc._id,
+						city : _.last(doc.city)._id,
+						IPv4Max : obj.IPv4to,
+						IPv4Min : obj.IPv6from,
+						IPv6Max : obj.IPv4to,
+						IPv6Min : obj.IPv6form
+					});
+					ip.save(utils.console)
+				});
+			});
+		};
+		return callback(null, "That's Ok!");
+	});
+};
+
diff --git a/lib/models.js b/lib/models.js
index 3db38bc..9996f0d 100755
--- a/lib/models.js
+++ b/lib/models.js
@@ -4,37 +4,34 @@
 var mongo	= require('mongoose'),
 	path 	= require('path'),
 	dir 	= path.join(__dirname, '..'),
-	config 	= require(path.join(dir, 'lib', 'config.js'))
 	Schema	= mongo.Schema,
 	ObjectId= Schema.Types.ObjectId;

 //Cuidades
 var CitySchema = Schema({
-	name : { type : String, trim : true, index : true, require : true },
-	lang : { type : Number, min : 0, require : true },
-	lat : { type : Number, min : 0, require : true }
+	name : 	{ type : String, trim : true, index : true, require : true },
+	lang :	{ type : Number, min : 0, require : true },
+	lat  : 	{ type : Number, min : 0, require : true }
 });
 //Paises
 var CountrySchema = Schema({
-	name : { type : String, trim : true, require : true },
-	code : { type : String, match : /[a-z]/, trim : true, index : true, require : true },
+	name : { type : String, require : true,  trim : true  },
+	code : { type : String, require : true,  trim : true, index : true, match : /[a-z]/ },
 	citys : [ CitySchema ]
 });
-//IPv4 y su relacion
-var IpSchema = Schema({
-	country : { type : ObjectId, ref : config['countries'], require : true },
-	city : { type : ObjectId, ref : config['countries']+ '.'+ config['city'], require : true },
-	IPv4Max : { type : Number, min : 0 },
-	IPv4Min : { type : Number, min : 0 },
-	IPv6Max : { type : Number, min : 0 },
-	IPv6Min : { type : Number, min : 0 },
-	date : { type : Date, defauct : Date.now }
-});

-module.exports = function(dbString){
+module.exports = function(dbString, config){
 	obj =  new Object;
 	db = mongo.createConnection( dbString, { server: { auto_reconnect: false } } );
 	obj[ config['countries'] ] = db.model(config['countries'], CountrySchema);
-	obj[ config['geoip'] ] = db.model(config['geoip'], IpSchema);
+	//IPv4 y su relacion
+	obj[ config['geoip'] ] = db.model(config['geoip'], Schema({
+		country : { type : ObjectId, ref : config['countries'], require : true },
+		city : { type : ObjectId, ref : config['countries']+ '.'+ config['city'], require : true },
+		IPv4Max : { type : Number, min : 0, require : true  },
+		IPv4Min : { type : Number, min : 0, require : true  },
+		IPv6Max : { type : Number, min : 0 },
+		IPv6Min : { type : Number, min : 0 }
+	}) );
 	return obj;
 };
\ No newline at end of file
diff --git a/lib/mongeo-express.js b/lib/mongeo-express.js
deleted file mode 100755
index 1076079..0000000
--- a/lib/mongeo-express.js
+++ /dev/null
@@ -1,158 +0,0 @@
-/**
- * @author Alejandro
- *
- * var mongeo = new require('mongeo')();
- *
- * mongeo.express(); Plugin de Express
- * mongeo.connect(); Plugin de Connect
- * mongeo.socketio(); Plugin de SocketIO
- * mongeo.IPv4(); Entero
- * mongeo.IPv6(); Entero
- * mongeo.IP(); Busqueda por enteros
- * mongeo.stream(); Observacion en tiempo real
- *
- *
- */
-var _ = require('underscore'),
-	path = require('path'),
-	dir = path.join(__dirname, '..'),
-	models = require(path.join(dir, 'lib', 'models.js')),
-	utils = require(path.join(dir, 'lib', 'utils.js')),
-	config = require(path.join(dir, 'lib', 'config.js')),
-	net = require('net');
-
-var MonGeo = function(_super) {
-	this.MonGeoDB = models(_.isArray(_super) ? _super.join() : _.isString(_super) ? _super : utils.url({
-		host : _.isObject(_super) ? _super.host || config.get('host') : config.get('host'),
-		port : _.isObject(_super) ? _super.port || config.get('port') : config.get('port'),
-		user : _.isObject(_super) ? _super.username || false : false,
-		pass : _.isObject(_super) ? _super.password || false : false,
-		path : _.isObject(_super) ? _super.db || config.get('db') : config.get('db'),
-		type : config.get('type'),
-	}));
-}
-//IPv4
-IPv4 = function(ip) {
-	return (16777216 * ip.split('.')[0] )
-		+ (65536 * ip.split('.')[1] )
-		+ (256 * ip.split('.')[2] )
-		+ ip.split('.')[3];
-};
-
-//IPv6
-IPv6 = function(ip) {
-	//TODO REHACER A JS
-	$ip_n = inet_pton($ipv6);
-	$bits = 15;
-
-	$ipv6long = 0;
-
-	while ($bits >= 0) {
-		$bin = sprintf("%08b", (ord($ip_n[$bits])));
-
-		if ($ipv6long) {
-			$ipv6long = $bin.$ipv6long;
-		} else {
-			$ipv6long = $bin;
-		}
-		$bits--;
-	}
-	return gmp_strval(gmp_init($ipv6long, 2), 10);
-};
-
-//GeoIp
-geoIP = function(IP, callaback) {
-	switch ( net.isIP( IP ) ) {
-		case 4:
-			query = [{
-				min4 : {
-					$gte : IPv4(IP)
-				}
-			}, {
-				max4 : {
-					$lte : IPv4(IP)
-				}
-			}];
-			break;
-		case 6:
-			query = [{
-				min6 : {
-					$gte : IPv6(IP)
-				}
-			}, {
-				max6 : {
-					$lte : IPv6(IP)
-				}
-			}];
-			break;
-		default:
-			query = null
-			break;
-	};
-	if (net.isIP(req.ip) > 0 && !_.isNull(query)) {
-		return this.MonGeoDB[ config.get('geoip') ].findOne().and(query)
-				.populate(config.get('countries'), ['name', 'code']).populate('city')
-				.exec(function(err, doc){
-					doc.date = new Date;
-					return doc.save(callback);
-				});
-	} else {
-		return callaback('Dont Found the IP', {
-			city : {
-				name : 'host',
-				lat : 0,
-				lang : 0,
-			},
-			country : {
-				name : 'local',
-				code : 'lc'
-			}
-		});
-	};
-};
-
-//Express
-express = function(res, req, next) {
-	geoIP(req.ip, function(err, doc) {
-		req.geo = {
-			city : doc.city.name,
-			country : doc.country.name,
-			lang : doc.city.lang,
-			lat : doc.city.lat,
-			code : doc.country.code
-		};
-		next(err);
-	});
-};
-
-//Socket.IO
-socketio = function(socket, callback){
-	geoIP(socket.handshake.address.address, function(err, doc) {
-		socket.handshake.geo = {
-			city : doc.city.name,
-			country : doc.country.name,
-			lang : doc.city.lang,
-			lat : doc.city.lat,
-			code : doc.country.code
-		};
-		callback(err, err ? false : true);
-	});
-};
-
-//Stream
-stream = function(){
-	return this.MonGeoDB[ config.get('geoip') ].find()
-		.where('date').gte( new Date )
-		.sort({ field: 'date', test: -1 }).stream();
-};
-
-//Exports
-MonGeo.prototype.stream = stream;
-MonGeo.prototype.socketio = socketio;
-MonGeo.prototype.connect = express;
-MonGeo.prototype.express = express;
-MonGeo.prototype.IPv6 = IPv6;
-MonGeo.prototype.IPv4 = IPv4;
-MonGeo.prototype.IP = geoIP;
-MonGeo.prototype.models = this.MonGeoDB;
-module.exports = exports = MonGeo;
\ No newline at end of file
diff --git a/lib/mongeo.js b/lib/mongeo.js
index d223946..e48b167 100755
--- a/lib/mongeo.js
+++ b/lib/mongeo.js
@@ -1,47 +1,153 @@
-var path 	= require('path'),
-	dir 	= path.join(__dirname, '..'),
-	_ 		= require('underscore'),
-	utils 	= require(path.join(dir, 'lib', 'utils.js')),
-	models	= require(path.join(dir, 'lib', 'models.js')),
-	config	= require(path.join(dir, 'lib', 'config.js'));
-
-exports.update = function(path, db, orden, divid, callback) {
-	var model = models(db);
-	// lea linea por liena
-	utils.read(path, function(err, array){
-		if (err)
-			utils.console(err, array);
-		for(i in array) {
-			utils.LineToObjt(array[i], divid, orden, function(err, obj) {
-				if (err)
-					utils.console(err, array);
-				model[config.get('countries')].find({
-					name : obj.country,
-					code : obj.code
-				}, {
-					upsert : true
-				}).exec(function(err, doc) {
-					if (err)
-						utils.console(err, doc);
-					doc.City.push({
-						name : obj.city,
-						lng : obj.lng,
-						lat : obj.lat
-					});
-					doc.save(utils.console);
-					ip = new model[config.get('geoip')]({
-						country : doc._id,
-						city : _.last(doc.city)._id,
-						IPv4Max : obj.IPv4to,
-						IPv4Min : obj.IPv6from,
-						IPv6Max : obj.IPv4to,
-						IPv6Min : obj.IPv6form
-					});
-					ip.save(utils.console)
+/**
+ * @author Alejandro
+ *
+ * var mongeo = new require('mongeo')();
+ *
+ * mongeo.express(); Plugin de Express
+ * mongeo.connect(); Plugin de Connect
+ * mongeo.socketio(); Plugin de SocketIO
+ * mongeo.IPv4(); Entero
+ * mongeo.IPv6(); Entero
+ * mongeo.IP(); Busqueda por enteros
+ * mongeo.stream(); Observacion en tiempo real
+ *
+ *
+ */
+var _ = require('underscore'),
+	path = require('path'),
+	dir = path.join(__dirname, '..'),
+	models = require(path.join(dir, 'lib', 'models.js')),
+	utils = require(path.join(dir, 'lib', 'utils.js')),
+	net = require('net');
+
+var MonGeo = function(_super) {
+	this.config = require(path.join(dir, 'lib', 'config.js'));
+	if(_.isObject(_super)){
+		if( _.has(_super, 'countries')
+			this.config.set('countries', _super["countries"]);
+		if( _.has(_super, 'geoip')
+			this.config.set('geoip', _super["geoip"]);
+		if( _.has(_super, 'city')
+			this.config.set('city', _super["city"]);
+	};
+	this.MonGeoDB = models( _.isArray(_super ) ? _super.join() : _.isString(_super) ? _super : utils.url({
+		host : _.isObject(_super) ? _super.host || this.config.get('host') : this.config.get('host'),
+		port : _.isObject(_super) ? _super.port || this.config.get('port') : this.config.get('port'),
+		user : _.isObject(_super) ? _super.username || false : false,
+		pass : _.isObject(_super) ? _super.password || false : false,
+		path : _.isObject(_super) ? _super.db || this.config.get('db') : this.config.get('db'),
+		type : config.get('type'),
+	}) );
+}
+//IPv4
+IPv4 = function(ip) {
+	return (16777216 * ip.split('.')[0] )
+		+ (65536 * ip.split('.')[1] )
+		+ (256 * ip.split('.')[2] )
+		+ ip.split('.')[3];
+};
+
+//IPv6
+IPv6 = function(ip) {
+	//TODO REHACER A JS
+	ip_n = inet_pton( ipv6 );
+	bits = 15;
+
+	ipv6long = 0;
+
+	while ( bits >= 0) {
+		bin = sprintf("%08b", ( ord( ip_n[ bits] ) ) );
+
+		if ( ipv6long) {
+			 ipv6long = bin.ipv6long;
+		} else {
+			ipv6long = bin;
+		}
+		bits--;
+	}
+	return gmp_strval(gmp_init( ipv6long, 2), 10);
+};
+
+//GeoIp
+geoIP = function(IP, callback) {
+	switch ( net.isIP( IP ) ) {
+		case 4:
+			query = [{
+				min4 : {
+					$gte : IPv4(IP)
+				}
+			}, {
+				max4 : {
+					$lte : IPv4(IP)
+				}
+			}];
+			break;
+		case 6:
+			query = [{
+				min6 : {
+					$gte : IPv6(IP)
+				}
+			}, {
+				max6 : {
+					$lte : IPv6(IP)
+				}
+			}];
+			break;
+		default:
+			query = null
+			break;
+	};
+	if (net.isIP( IP ) > 0 && !_.isNull( query ) ) {
+		return this.MonGeoDB[ this.config.get('geoip') ].findOne().and(query)
+				.populate(this.config.get('countries'), ['name', 'code']).populate('city')
+				.exec(function(err, doc){
+					return callback(err, doc.toObject() );
 				});
-			});
-		};
-		return callback(null, "That's Ok!");
-	});
+	} else {
+		return callback('Dont Found the IP', null);
+	};
+};
+
+//Express
+express = function(where){
+		return function(res, req, next) {
+		geoIP(req.ip, function(err, doc) {
+			if(err)
+				next( new Error( err ) );
+			req[ where || 'geo' ] = {
+				city : doc.city.name,
+				country : doc.country.name,
+				lang : doc.city.lang,
+				lat : doc.city.lat,
+				code : doc.country.code
+			};
+			next(null);
+		});
+	};
+};
+
+//Socket.IO
+socketio = function(cb){
+	return function(socket, callback){
+		geoIP(socket.handshake.address.address, function(err, doc) {
+			socket.handshake.geo = {
+				city : doc.city.name,
+				country : doc.country.name,
+				lang : doc.city.lang,
+				lat : doc.city.lat,
+				code : doc.country.code
+			};
+			callback( err, cb(err, err ? false : true) );
+		});
+	};
 };

+//Exports
+MonGeo.prototype.socketio = socketio;
+MonGeo.prototype.connect = express;
+MonGeo.prototype.express = express;
+MonGeo.prototype.IPv6 = IPv6;
+MonGeo.prototype.IPv4 = IPv4;
+MonGeo.prototype.IP = geoIP;
+MonGeo.prototype.models = this.MonGeoDB;
+module.exports = exports = MonGeo;
\ No newline at end of file
diff --git a/lib/utils.js b/lib/utils.js
index f092827..c94b6aa 100755
--- a/lib/utils.js
+++ b/lib/utils.js
@@ -72,10 +72,6 @@ exports.LineToObjt = function(string, divid, orden, callback) {
 	return callabck(_.isArray(obj.adiciona) ? 'Error fail' : null, obj);
 };

-exports.isUrl = function(url) {
-	return _.isEmpty(url) ? config.get('download') : path.resuelve(url);
-};
-
 exports.read = function(url, callback) {
 	return fs.readFile(url, function(err, data) {
 		if (err)
Revisando todo falta una funcion