docs: function(name){
  		var routerCfg = config.router.instances[name];
  		log("debug", "Instantiating Router - " + name);
  		routers[name] = new EventEmitter2({wildcard: true, delimiter: '.', newListener: false, maxListeners:  config.maxObjectListeners, verboseMemoryLeak: false});
  		var Incoming = function(message){
  			var route = Route(message.request.host, message.request.path);
  			var verb = message.request.verb.toLowerCase();
  			if(!route || !route.match.controller) { 
  				log("warning","Router > Received request from an interface but could not resolve endpoint - 404 - " + message.msgId, message);
  				ReturnError(message,"Page Not Found",404); 
  				return; 
  			}
  			var controller = route.match.controller;
  			var Req = require("./lib/req.js");
  			var req = new Req;
  			req.init(isnode, {
  				msgId: message.msgId,
  				type: message.type,
  				interface: message.interface,
  				router: name,
  				path: message.request.path,
  				host: message.request.host,
  				headers: message.request.headers,
  				port: message.request.port,
  				query: message.request.query,
  				params: route.param,
  				cookies: message.request.cookies,
  				ip: message.request.ip,
  				verb: message.request.verb,
  				secure: message.request.secure,
  				service: route.match.service,
  				body: message.request.body
  			});
  			var Res = require("./lib/res.js");
  			var res = new Res;
  			res.init(isnode, {
  				msgId: message.msgId,
  				service: route.match.service,
  				type: message.type,
  				interface: message.interface,
  				router: name
  			});
  			var responseListener = function(msg){
  				log("debug","Router > Received response from controller. Message ID: " + message.msgId, message);
  				isnode.module(message.type, "interface").get(message.interface).emit("outgoing."+message.msgId,msg);
  				routers[name].removeListener('router.' + msg.msgId, responseListener);
  			}
  			routers[name].on('router.' + message.msgId, responseListener);
  			var verbs = ["get", "post", "put", "delete", "update", "patch", "head", "options", "trace"];
  			if(message.request.verb && controller && controller[verb] && verbs.includes(verb)) {
  				controller[verb](req,res);
  			} else {
  				log("error","Router > Cannot pass control to controller because controller function cannot be found", message);
  			}
  		}
  		var Route = function(hostname,url){
  			var searchObj = {
  				hostname: hostname,
  				url: url,
  				services: config.router.instances[name].services
  			}
  			return isnode.module("services").search(searchObj);
  		}
  		var ReturnError = function(msgObject,message,statusCode){
  			var msg = {
  				"type": msgObject.type,
  				"interface": msgObject.interface,
  				"msgId": msgObject.msgId,
  				"sessionId": msgObject.sessionId,
  				"state": "outgoing",
  				"directional": msgObject.directional,
  				"response": {
  					"body": {"message":message},
  					"message": message,
  					"statusCode": statusCode
  				}
  			}	
  			log("debug","Router > Sending message " + msgObject.msgId + " back to originating interface", msgObject);
  			if(msgObject.sessionId)
  				isnode.module(msgObject.type, "interface").get(msgObject.interface).emit("outgoing."+msgObject.sessionId,msg);
  			else
  				isnode.module(msgObject.type, "interface").get(msgObject.interface).emit("outgoing."+msgObject.msgId,msg);
  			return;
  		}
  		routers[name].incoming = Incoming;
  		routers[name].route = Route;
  		return;
  	}