diff --git a/admportal/server/router/routes/Odl.js b/admportal/server/router/routes/OdlInterface.js
similarity index 99%
rename from admportal/server/router/routes/Odl.js
rename to admportal/server/router/routes/OdlInterface.js
index a27d73b..1fc615c 100755
--- a/admportal/server/router/routes/Odl.js
+++ b/admportal/server/router/routes/OdlInterface.js
@@ -1,10 +1,10 @@
-// Odl.js
+// OdlInterface.js
 var https = require('https');
 var http = require('http');
 var properties = require(process.env.SDNC_CONFIG_DIR + '/admportal.json');
 
 
-var Odl = function() {
+var OdlInterface = function() {
     // Call ODL page
     //  get(uri,res)
     //  post(uri,data, res)
@@ -590,5 +590,5 @@
     };
 }();
 
-module.exports = Odl;
+module.exports = OdlInterface;
 
diff --git a/admportal/server/router/routes/mobility.js b/admportal/server/router/routes/mobility.js
index 1c45452..d19f65a 100644
--- a/admportal/server/router/routes/mobility.js
+++ b/admportal/server/router/routes/mobility.js
@@ -32,7 +32,7 @@
 };
 
 // Connection to OpenDaylight
-Odl = require('./Odl');
+OdlInterface = require('./OdlInterface');
 
 // used for file upload button, retain original file name
 //router.use(bodyParser());
@@ -60,23 +60,23 @@
 
 
 // GET
-router.get('/getVnfData', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/getVnfData', csp.checkAuth, function(req,res) {
 	dbRoutes.getVnfData(req,res, {code:'', msg:''}, req.session.loggedInAdmin);
 });
-router.get('/getVmNetworks', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/getVmNetworks', csp.checkAuth, function(req,res) {
 	dbRoutes.getVmNetworks(req,res, {code:'', msg:''}, req.session.loggedInAdmin);
 });
-router.get('/getVnfProfile', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/getVnfProfile', csp.checkAuth, function(req,res) {
 	dbRoutes.getVnfProfile(req,res, {code:'', msg:''}, req.session.loggedInAdmin);
 });
-router.get('/getVnfNetworks', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/getVnfNetworks', csp.checkAuth, function(req,res) {
 	dbRoutes.getVnfNetworks(req,res, {code:'', msg:''}, req.session.loggedInAdmin);
 });
-router.get('/getVmProfile', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/getVmProfile', csp.checkAuth, function(req,res) {
 	dbRoutes.getVmProfile(req,res, {code:'', msg:''}, req.session.loggedInAdmin);
 });
 ////////
-router.get('/getVnfNetworkData', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/getVnfNetworkData', csp.checkAuth, function(req,res) {
 	dbRoutes.getVnfNetworkData(req,res, {code:'', msg:''}, req.session.loggedInAdmin);
 });
 
@@ -89,7 +89,7 @@
     var tasks = [];
 
     tasks.push(function(callback){
-		Odl.GetPreloadVnfData('/restconf/config/VNF-API:preload-vnfs/vnf-preload-list/'
+		OdlInterface.GetPreloadVnfData('/restconf/config/VNF-API:preload-vnfs/vnf-preload-list/'
             + encodeURIComponent(network_name) + '/' + encodeURIComponent(network_type) + '/', options,res,callback);
 
     });
@@ -119,7 +119,7 @@
 	var tasks = [];
 
 	tasks.push(function(callback){
-		Odl.GetPreloadVnfData('/restconf/config/VNF-API:preload-vnfs/vnf-preload-list/'
+		OdlInterface.GetPreloadVnfData('/restconf/config/VNF-API:preload-vnfs/vnf-preload-list/'
 			+ encodeURIComponent(vnf_name) + '/' + encodeURIComponent(vnf_type) + '/', options,res,callback);
 
 	});
@@ -140,7 +140,7 @@
 
 });
 
-router.get('/loadVnfNetworkData', csp.checkAuth, dbRoutes.checkDB, function(req,res)
+router.get('/loadVnfNetworkData', csp.checkAuth, function(req,res)
 {
 
     var privilegeObj = req.session.loggedInAdmin;
@@ -188,7 +188,7 @@
     	// add the two curly braces at the end that we stripped off
     	s_file = s_file.concat('}}');
 
-        Odl.Post('/restconf/operations/VNF-API:preload-network-topology-operation',
+        OdlInterface.Post('/restconf/operations/VNF-API:preload-network-topology-operation',
                     options,s_file,res,callback);
     });
 
@@ -216,7 +216,7 @@
 });
 
 
-router.get('/loadVnfData', csp.checkAuth, dbRoutes.checkDB, function(req,res) 
+router.get('/loadVnfData', csp.checkAuth, function(req,res) 
 {
     var privilegeObj = req.session.loggedInAdmin;
 	var full_path_file_name = process.cwd() + "/uploads/" + req.query.filename
@@ -266,7 +266,7 @@
 		// add the two curly braces at the end that we stripped off
 		s_file = s_file.concat('}}');
 
-		Odl.Post('/restconf/operations/VNF-API:preload-vnf-topology-operation',
+		OdlInterface.Post('/restconf/operations/VNF-API:preload-vnf-topology-operation',
                     options,s_file,res,callback);
 	});
 
@@ -294,7 +294,7 @@
 });
 
 
-router.get('/deleteVnfNetworkData', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/deleteVnfNetworkData', csp.checkAuth, function(req,res) {
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -323,7 +323,7 @@
 		inputString = inputString.concat('","svc-action": "delete"}}}');
 	
         tasks.push(function(callback) {
-            Odl.Post('/restconf/operations/VNF-API:preload-network-topology-operation',
+            OdlInterface.Post('/restconf/operations/VNF-API:preload-network-topology-operation',
                     options,inputString,res,callback);
         });
         tasks.push(function(callback) {
@@ -347,7 +347,7 @@
 });
 
 
-router.get('/deleteVnfData', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/deleteVnfData', csp.checkAuth, function(req,res) {
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -388,7 +388,7 @@
 		//inputString = inputString.concat('"svc-action": "delete"}}}');
 		
         tasks.push(function(callback) {
-        	Odl.Post('/restconf/operations/VNF-API:preload-vnf-topology-operation',
+        	OdlInterface.Post('/restconf/operations/VNF-API:preload-vnf-topology-operation',
                     options,inputString,res,callback);
         });
         tasks.push(function(callback) {
@@ -412,7 +412,7 @@
 });
 
 
-router.get('/deleteVmProfile', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/deleteVmProfile', csp.checkAuth, function(req,res) {
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -441,7 +441,7 @@
 });
 
 
-router.get('/deleteVnfNetwork', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/deleteVnfNetwork', csp.checkAuth, function(req,res) {
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -469,7 +469,7 @@
     });
 });
 
-router.get('/deleteVnfProfile', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/deleteVnfProfile', csp.checkAuth, function(req,res) {
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -496,7 +496,7 @@
     });
 });
 
-router.get('/deleteVmNetwork', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/deleteVmNetwork', csp.checkAuth, function(req,res) {
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -527,7 +527,7 @@
 
 
 // POST
-router.post('/addVmProfile', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.post('/addVmProfile', csp.checkAuth, function(req,res){
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -568,7 +568,7 @@
 });
 
 
-router.post('/addVnfNetwork', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.post('/addVnfNetwork', csp.checkAuth, function(req,res){
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -595,7 +595,7 @@
     });
 });
 
-router.post('/addVnfProfile', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.post('/addVnfProfile', csp.checkAuth, function(req,res){
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -624,7 +624,7 @@
     });
 });
 
-router.post('/addVmNetwork', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.post('/addVmNetwork', csp.checkAuth, function(req,res){
 
     var privilegeObj = req.session.loggedInAdmin;
     var tasks = [];
@@ -704,7 +704,7 @@
 });
 
 // POST
-router.post('/uploadVnfData', csp.checkAuth, dbRoutes.checkDB, upload.single('filename'), function(req, res)
+router.post('/uploadVnfData', csp.checkAuth, upload.single('filename'), function(req, res)
 {
 console.log('filename:'+ JSON.stringify(req.file.originalname));
     var msgArray = new Array();
@@ -776,7 +776,7 @@
 
 } );
 
-router.post('/uploadVnfNetworkData', csp.checkAuth, dbRoutes.checkDB, upload.single('filename'), function(req, res)
+router.post('/uploadVnfNetworkData', csp.checkAuth, upload.single('filename'), function(req, res)
 {
     var msgArray = new Array();
     var privilegeObj = req.session.loggedInAdmin;
@@ -846,7 +846,7 @@
 } );
 
 
-router.post('/uploadVmNetworks', csp.checkAuth, dbRoutes.checkDB, upload.single('filename'), function(req, res){
+router.post('/uploadVmNetworks', csp.checkAuth, upload.single('filename'), function(req, res){
 
     var msgArray = new Array();
     var privilegeObj = req.session.loggedInAdmin;
@@ -967,7 +967,7 @@
 
 } );
 
-router.post('/uploadVnfProfile', csp.checkAuth, dbRoutes.checkDB, upload.single('filename'), function(req, res){
+router.post('/uploadVnfProfile', csp.checkAuth, upload.single('filename'), function(req, res){
 
     var msgArray = new Array();
     var privilegeObj = req.session.loggedInAdmin;
@@ -1092,7 +1092,7 @@
 } );
 
 
-router.post('/uploadVnfNetworks', csp.checkAuth, dbRoutes.checkDB, upload.single('filename'), function(req, res){
+router.post('/uploadVnfNetworks', csp.checkAuth, upload.single('filename'), function(req, res){
 
     var msgArray = new Array();
     var privilegeObj = req.session.loggedInAdmin;
@@ -1214,7 +1214,7 @@
     }
 } );
 
-router.post('/uploadVmProfile', csp.checkAuth, dbRoutes.checkDB, upload.single('filename'), function(req, res){
+router.post('/uploadVmProfile', csp.checkAuth, upload.single('filename'), function(req, res){
 
     var msgArray = new Array();
     var privilegeObj = req.session.loggedInAdmin;
diff --git a/admportal/server/router/routes/odl.js b/admportal/server/router/routes/odl.js
index fba646f..3882afc 100644
--- a/admportal/server/router/routes/odl.js
+++ b/admportal/server/router/routes/odl.js
@@ -23,7 +23,7 @@
 };
 
 // Connection to OpenDaylight
-Odl = require('./Odl');
+OdlInterface = require('./OdlInterface');
 
 function handleResult(err, response_str, res) {
     if (err) {
@@ -44,7 +44,7 @@
 // calls restconf to get information
 router.get('/listWklst', csp.checkAuth, function(req, res) {
     options.strictSSL = true;   // used to test SSL certificate
-    Odl.Get('/restconf/config/L3SDN-API:services',options, handleResult,req,res);
+    OdlInterface.Get('/restconf/config/L3SDN-API:services',options, handleResult,req,res);
 });
 
 router.get('/pageWklst', csp.checkAuth, function(req,res) {
@@ -102,7 +102,7 @@
 	};
 	var tasks = [];
 	tasks.push(function(callback){
-		Odl.put_vr_lan_interface('/restconf/config/L3SDN-API:services/layer3-service-list/'
+		OdlInterface.put_vr_lan_interface('/restconf/config/L3SDN-API:services/layer3-service-list/'
 			+ svc_instance_id
 			+ '/service-data/vr-lan/', options, callback);
 	});
@@ -136,36 +136,36 @@
              + '"svc-instance-id":"'+ req.query['svc-instance-id']+ '"' + ','
              + '"svc-aic-site-id":"'+ req.query['svc-aic-site-id']+ '"'
              +' } }';
-    Odl.Post('/restconf/operations/L3SDN-API:svc-topology-operation', options, formData, handleResult, res);
+    OdlInterface.Post('/restconf/operations/L3SDN-API:svc-topology-operation', options, formData, handleResult, res);
 });
 
 // delete request
 router.get('/wklist-delete', function(req, res) {
     //console.dir(req.query);
-    Odl.Delete('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request'], options, handleResult, res);
+    OdlInterface.Delete('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request'], options, handleResult, res);
 });
 
 // get request
 router.get('/getid',function(req, res) {
     //console.dir(req.query);
-    Odl.GetID('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request'], options, res);
+    OdlInterface.GetID('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request'], options, res);
 });
 
 router.get('/getvnf', function(req,res) {
     //console.log("/getvnf "+req.query);
-    Odl.GetVNF('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request']+'/vnf/',options,req,res);
+    OdlInterface.GetVNF('/restconf/config/L3SDN-API:l3sdn-api-worklist/requests/'+req.query['request']+'/vnf/',options,req,res);
 });
 router.get('/getvrlan', function(req,res) {
 	var vrtasks = [];
 	var reqstr = encodeURIComponent(req.query['request']);
     vrtasks.push(function(callback) {
-		Odl.GetVRlan('/restconf/config/L3SDN-API:services/layer3-service-list/'+reqstr+'/service-data/vr-lan/',options,callback);
+		OdlInterface.GetVRlan('/restconf/config/L3SDN-API:services/layer3-service-list/'+reqstr+'/service-data/vr-lan/',options,callback);
     });
 	async.series(vrtasks, function(err,result){
     	var msgArray = new Array();
         if(err){
             msgArray.push(err);
-			Odl.Get('/restconf/config/L3SDN-API:services',options, handleResult,res);
+			OdlInterface.Get('/restconf/config/L3SDN-API:services',options, handleResult,res);
 			//res.render("pages/err",
                 //{result:{code:'error', msg:"Unable to get vr-lan information: "+ String(err) }});
             return;
@@ -230,7 +230,7 @@
 
 	urlArray.forEach(function(request){
     	urltasks.push(function(callback) {
-        	Odl.GetClusterStatus(request,callback);
+        	OdlInterface.GetClusterStatus(request,callback);
 		});
     });
     async.series(urltasks, function(err,result){
diff --git a/admportal/server/router/routes/preload.js b/admportal/server/router/routes/preload.js
index 1a63ec0..fd41bb4 100644
--- a/admportal/server/router/routes/preload.js
+++ b/admportal/server/router/routes/preload.js
@@ -35,9 +35,6 @@
         strictSSL: false
 };
 
-// Connection to OpenDaylight
-Odl = require('./Odl');
-
 // multer 1.1
 var unixTime = moment().unix();
 var storage = multer.diskStorage({
@@ -60,7 +57,7 @@
 	}
 });
 
-router.post('/uploadVnfCsv', csp.checkAuth, dbRoutes.checkDB, upload.array('filename'), function(req, res)
+router.post('/uploadVnfCsv', csp.checkAuth, upload.array('filename'), function(req, res)
 {
 	console.log('files:'+ JSON.stringify(req.files,null,4));
 
@@ -91,7 +88,7 @@
 
 });
 
-router.post('/uploadNetworkCsv', csp.checkAuth, dbRoutes.checkDB, upload.array('filename'), function(req, res)
+router.post('/uploadNetworkCsv', csp.checkAuth, upload.array('filename'), function(req, res)
 {
     console.log('files:'+ JSON.stringify(req.files,null,4));
 
diff --git a/admportal/server/router/routes/root.js b/admportal/server/router/routes/root.js
index f586892..b314d7d 100644
--- a/admportal/server/router/routes/root.js
+++ b/admportal/server/router/routes/root.js
@@ -5,7 +5,7 @@
 var sla = require('./sla');
 var os = require('os');
 var async = require('async');
-var Odl = require('./Odl');
+var OdlInterface = require('./OdlInterface');
 var properties = require(process.env.SDNC_CONFIG_DIR + '/admportal.json');
 
 
@@ -67,7 +67,7 @@
 });
 
 function createFunctionObj( loptions ) {
-	return function(callback) { Odl.Healthcheck(loptions,callback); };
+	return function(callback) { OdlInterface.Healthcheck(loptions,callback); };
 }
 
 router.get('/mytree', function(req,res) {
@@ -76,13 +76,13 @@
 router.get('/setuplogin', function(req,res) {
 	res.render('pages/setuplogin');
 });
-router.post('/formSetupLogin', dbRoutes.checkDB, function(req,res) {
+router.post('/formSetupLogin', function(req,res) {
 	dbRoutes.saveSetupLogin(req,res);
 });
-router.post('/formSignUp', dbRoutes.checkDB, function(req,res) {
+router.post('/formSignUp', function(req,res) {
 	dbRoutes.saveUser(req,res);
 });
-router.post('/formlogin', csp.login, dbRoutes.checkDB, function(req,res) {
+router.post('/formlogin', csp.login, function(req,res) {
 });
 router.get('/login', function(req,res) {
 	res.render('pages/login');
diff --git a/admportal/server/router/routes/sla.js b/admportal/server/router/routes/sla.js
index 92fa846..10d6433 100644
--- a/admportal/server/router/routes/sla.js
+++ b/admportal/server/router/routes/sla.js
@@ -57,11 +57,11 @@
 
 
 // GET
-router.get('/listSLA', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/listSLA', csp.checkAuth, function(req,res) {
 	dbRoutes.listSLA(req,res,{code:'', msg:''} );
 });
 
-router.get('/activate', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.get('/activate', csp.checkAuth, function(req,res){
 
 	var _module = req.query.module;
 	var rpc = req.query.rpc;
@@ -82,7 +82,7 @@
 	});
 });
 
-router.get('/deactivate', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.get('/deactivate', csp.checkAuth, function(req,res){
 
 	var _module = req.query.module;
 	var rpc = req.query.rpc;
@@ -102,7 +102,7 @@
     });
 });
 
-router.get('/deleteDG', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.get('/deleteDG', csp.checkAuth, function(req,res){
 
 	var _module = req.query.module;
 	var rpc = req.query.rpc;
@@ -122,7 +122,7 @@
     });
 });
 
-router.post('/dgUpload', dbRoutes.checkDB, upload.single('filename'), function(req, res, next){
+router.post('/dgUpload', upload.single('filename'), function(req, res, next){
 
     if(req.file.originalname){
         if (req.file.originalname == 0) {
@@ -188,7 +188,7 @@
 
 
 // POST
-router.post('/upload', csp.checkAuth, dbRoutes.checkDB, upload.single('filename'),  function(req, res, next){
+router.post('/upload', csp.checkAuth, upload.single('filename'),  function(req, res, next){
 
 console.log('file:'+ JSON.stringify(req.file));
 
@@ -257,7 +257,7 @@
 	}
 });
 
-router.get('/printAsXml', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.get('/printAsXml', csp.checkAuth, function(req,res){
 
 	try {
 		//dbRoutes.checkSvcLogic(req,res);
@@ -309,7 +309,7 @@
 });
 
 
-router.get('/printAsGv', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+router.get('/printAsGv', csp.checkAuth, function(req,res){
 
 	try {	
 		//dbRoutes.checkSvcLogic(req,res);
diff --git a/admportal/server/router/routes/user.js b/admportal/server/router/routes/user.js
index 116bf93..40d3437 100644
--- a/admportal/server/router/routes/user.js
+++ b/admportal/server/router/routes/user.js
@@ -26,11 +26,11 @@
 router.get('/listUsers', csp.checkAuth, function(req,res) {
 	dbRoutes.listUsers(req,res, {user:req.session.loggedInAdmin,code:'', msg:''} );
 });
-router.get('/deleteUser', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.get('/deleteUser', csp.checkAuth, function(req,res) {
 	dbRoutes.deleteUser(req,res, {code:'', msg:''} );
 });
 
-//router.get('/activate', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+//router.get('/activate', csp.checkAuth, function(req,res){
 
 	//var _module = req.query.module;
 	//var rpc = req.query.rpc;
@@ -40,7 +40,7 @@
 	//dbRoutes.activate(req,res,_module,rpc,version,mode);
 //});
 
-//router.get('/deactivate', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+//router.get('/deactivate', csp.checkAuth, function(req,res){
 
 	//var _module = req.query.module;
 	//var rpc = req.query.rpc;
@@ -50,7 +50,7 @@
 	//dbRoutes.deactivate(req,res,_module,rpc,version,mode);
 //});
 
-//router.get('/deleteDG', csp.checkAuth, dbRoutes.checkDB, function(req,res){
+//router.get('/deleteDG', csp.checkAuth, function(req,res){
 
 	//var _module = req.query.module;
 	//var rpc = req.query.rpc;
@@ -94,14 +94,14 @@
 
 
 // POST
-router.post('/updateUser', csp.checkAuth, dbRoutes.checkDB, function(req,res,next){
+router.post('/updateUser', csp.checkAuth, function(req,res,next){
 	dbRoutes.updateUser(req,res,{code:'',msg:''});
 });
-router.post('/addUser', csp.checkAuth, dbRoutes.checkDB, function(req,res) {
+router.post('/addUser', csp.checkAuth, function(req,res) {
 	dbRoutes.addUser(req,res, {code:'', msg:''} );
 });
 
-//router.post('/upload', csp.checkAuth, dbRoutes.checkDB, function(req, res, next){
+//router.post('/upload', csp.checkAuth, function(req, res, next){
 
 /*
 logger.debug("upload");
