diff --git a/skyquake/framework/core/api_utils/utils.js b/skyquake/framework/core/api_utils/utils.js
index 163769a..0d1990c 100644
--- a/skyquake/framework/core/api_utils/utils.js
+++ b/skyquake/framework/core/api_utils/utils.js
@@ -1,5 +1,5 @@
 /*
- * 
+ *
  *   Copyright 2016 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
@@ -233,5 +233,5 @@
 
 	sendSuccessResponse: sendSuccessResponse,
 
-	passThroughConstructor: passThroughConstructor
+    passThroughConstructor: passThroughConstructor
 };
diff --git a/skyquake/framework/core/modules/routes/configuration.js b/skyquake/framework/core/modules/routes/configuration.js
index 3a686f0..b789ff0 100644
--- a/skyquake/framework/core/modules/routes/configuration.js
+++ b/skyquake/framework/core/modules/routes/configuration.js
@@ -1,6 +1,6 @@
 
 /*
- * 
+ *
  *   Copyright 2016 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
@@ -18,7 +18,7 @@
  */
 
 /**
- * Node configuration routes module. 
+ * Node configuration routes module.
  * Provides a RESTful API to provide configuration
  * details such as api_server.
  * @module framework/core/modules/routes/configuration
@@ -30,6 +30,9 @@
 var configurationAPI = require('../api/configuration');
 var Router = require('express').Router();
 var utils = require('../../api_utils/utils');
+var CONSTANTS = require('../../api_utils/constants.js');
+var request = require('request');
+var _ = require('lodash');
 
 Router.use(bodyParser.json());
 Router.use(cors());
@@ -48,9 +51,43 @@
 Router.get('/server-configuration', cors(), function(req, res) {
     configurationAPI.get(req).then(function(data) {
         utils.sendSuccessResponse(data, res);
-	}, function(error) {
-		utils.sendErrorResponse(error, res);
-	});
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
 });
 
+Router.get('/check-auth', function(req, res) {
+    console.log('testing auth')
+    var api_server = req.query["api_server"];
+    var uri = utils.confdPort(api_server) + '/api/config/';
+
+    checkAuth(uri, req).then(function(data) {
+        utils.sendSuccessResponse(data, res);
+    }, function(error) {
+        utils.sendErrorResponse(error, res);
+    });
+});
+
+function checkAuth(uri, req){
+    return new Promise(function(resolve, reject) {
+        request({
+            uri: uri,
+            method: 'GET',
+            headers: _.extend({}, {
+                'Authorization': req.get('Authorization'),
+                forever: CONSTANTS.FOREVER_ON,
+                rejectUnauthorized: false,
+            })
+        }, function(error, response, body) {
+            console.log(arguments)
+            if( response.statusCode == 401) {
+                reject({statusCode: 401, error: response.body});
+            } else {
+                resolve({statusCode:200, data:response.body})
+            }
+        });
+    });
+}
+
+
 module.exports = Router;
diff --git a/skyquake/framework/utils/utils.js b/skyquake/framework/utils/utils.js
index d08fe5f..7442027 100644
--- a/skyquake/framework/utils/utils.js
+++ b/skyquake/framework/utils/utils.js
@@ -1,5 +1,5 @@
 /*
- * 
+ *
  *   Copyright 2016 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
@@ -20,7 +20,7 @@
 var $ = require('jquery');
 var rw = require('utils/rw.js');
 var API_SERVER = rw.getSearchParams(window.location).api_server;
-var NODE_PORT = 3000;
+let NODE_PORT = require('utils/rw.js').getSearchParams(window.location).api_port || ((window.location.protocol == 'https:') ? 8443 : 8000);
 var SockJS = require('sockjs-client');
 
 var Utils = {};
@@ -188,9 +188,20 @@
     var AuthBase64 = btoa(username + ":" + password);
     window.sessionStorage.setItem("auth", AuthBase64);
     self.detectInactivity();
-    if (cb) {
-        cb();
-    }
+    $.ajax({
+            url: '//' + window.location.hostname + ':' + NODE_PORT + '/check-auth?api_server=' + API_SERVER,
+            type: 'GET',
+            beforeSend: Utils.addAuthorizationStub,
+            success: function(data) {
+              //console.log("LoggingSource.getLoggingConfig success call. data=", data);
+                if (cb) {
+                    cb();
+                };
+            },
+            error: function(data) {
+                Utils.clearAuthentication();
+            }
+          });
 }
 Utils.clearAuthentication = function(callback) {
     var self = this;
diff --git a/skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js b/skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js
index 03bc7ef..49356a4 100644
--- a/skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js
+++ b/skyquake/framework/widgets/skyquake_container/skyquakeContainerSource.js
@@ -40,6 +40,7 @@
                         type: 'GET',
                         // beforeSend: Utils.addAuthorizationStub,
                         success: function(data) {
+                            Utils.detectInactivity();
                             resolve(data);
                         }
                     })
diff --git a/skyquake/plugins/accounts/api/accounts.js b/skyquake/plugins/accounts/api/accounts.js
index 1b51c7b..ec74f51 100644
--- a/skyquake/plugins/accounts/api/accounts.js
+++ b/skyquake/plugins/accounts/api/accounts.js
@@ -1,5 +1,5 @@
 /*
- * 
+ *
  *   Copyright 2016 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
@@ -28,7 +28,7 @@
 var Accounts = {};
 var nameSpace = {
     cloud: 'cloud',
-    sdn: 'sdn-account',
+    sdn: 'sdn',
     'config-agent': 'config-agent'
 };
 Accounts.get = function(req) {
@@ -42,7 +42,9 @@
                             type: req.params.type
                         })
                     });
-                })
+                }, function(reason) {
+            reject(reason);
+        })
         } else {
             getAll(req, resolve, reject);
         }
@@ -66,6 +68,8 @@
                 statusCode: 200,
                 data: ReturnData
             });
+        }, function(reason) {
+            reject(reason);
         })
     }
 }
@@ -81,11 +85,7 @@
         var id = req.params.id || req.params.name;
         var requestHeaders = {};
         var type = nameSpace[req.params.type];
-        var url = utils.confdPort(api_server) + '/api/operational/' + type;
-        //SDN model doesn't follow convention
-        if (type != 'sdn-account') {
-            url += '/account';
-        }
+        var url = utils.confdPort(api_server) + '/api/operational/' + type + '/account';
         if (id) {
             url += '/' + id;
         }
@@ -108,16 +108,12 @@
                 var data;
                 var objKey = 'rw-' + type + ':account';
                 //SDN model doesn't follow convention
-                if (type == 'sdn-account') {
-                    objKey = 'rw-sdn:sdn-account';
-                }
                 if (utils.validateResponse(type.toUpperCase() + '.get', error, response, body, resolve, reject)) {
                     try {
                         data = JSON.parse(response.body);
                         if (!id) {
                             data = data.collection;
                         }
-
                         data = data[objKey]
                     } catch (e) {
                         console.log('Problem with "' + type.toUpperCase() + '.get"', e);
@@ -148,27 +144,14 @@
     var url = utils.confdPort(api_server) + '/api/config/' + type;
     var method = 'POST'
     if (!id) {
-        if (type == 'sdn-account') {
-            createData = {
-                'sdn-account': Array.isArray(data) ? data : [data]
-            }
-        } else {
-            createData = {
-                'account': Array.isArray(data) ? data : [data]
-            }
+        createData = {
+            'account': Array.isArray(data) ? data : [data]
         }
         console.log('Creating ' + type + ' account: ', createData);
     } else {
         method = 'PUT';
-        if (type == 'sdn-account') {
-            url += '/' + id;
-            createData['rw-sdn:sdn-account'] = Array.isArray(data) ? data : [data];
-
-        } else {
-            url += '/account/' + id;
-            createData['rw-' + type + ':account'] = Array.isArray(data) ? data : [data];
-        }
-        //createData = createData[0];
+        url += '/account/' + id;
+        createData['rw-' + type + ':account'] = Array.isArray(data) ? data : [data];
     }
 
 
@@ -206,11 +189,7 @@
     var requestHeaders = {};
     var createData = {};
     var url = utils.confdPort(api_server) + '/api/config/' + type;
-    if (type == 'sdn-account') {
-        url += '/' + id;
-    } else {
-        url += '/account/' + id;
-    }
+    url += '/account/' + id;
     return new Promise(function(resolve, reject) {
         _.extend(requestHeaders,
             constants.HTTP_HEADERS.accept.data,
diff --git a/skyquake/plugins/accounts/api/sdn_account/sdnAccount.js b/skyquake/plugins/accounts/api/sdn_account/sdnAccount.js
index c2b592d..6757c28 100644
--- a/skyquake/plugins/accounts/api/sdn_account/sdnAccount.js
+++ b/skyquake/plugins/accounts/api/sdn_account/sdnAccount.js
@@ -1,5 +1,5 @@
 /*
- * 
+ *
  *   Copyright 2016 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
@@ -41,7 +41,7 @@
           'Authorization': req.get('Authorization')
         });
       request({
-          url: utils.confdPort(api_server) + '/api/operational/sdn-account?deep',
+          url: utils.confdPort(api_server) + '/api/operational/sdn/account?deep',
           type: 'GET',
           headers: requestHeaders,
           forever: constants.FOREVER_ON,
@@ -51,7 +51,7 @@
           var data;
           if (utils.validateResponse('Sdn.get', error, response, body, resolve, reject)) {
             try {
-              data = JSON.parse(response.body).collection['rw-sdn:sdn-account']
+              data = JSON.parse(response.body).collection['rw-sdn:account']
             } catch (e) {
               console.log('Problem with "Sdn.get"', e);
 
@@ -81,7 +81,7 @@
         });
 
       request({
-          url: utils.confdPort(api_server) + '/api/operational/sdn-account/' + id + '?deep',
+          url: utils.confdPort(api_server) + '/api/operational/sdn/account/' + id + '?deep',
           type: 'GET',
           headers: requestHeaders,
           forever: constants.FOREVER_ON,
@@ -91,7 +91,7 @@
           var data;
           if (utils.validateResponse('Sdn.get', error, response, body, resolve, reject)) {
             try {
-              data = JSON.parse(response.body)['rw-sdn:sdn-account'];
+              data = JSON.parse(response.body)['rw-sdn:sdn'];
             } catch (e) {
               console.log('Problem with "Sdn.get"', e);
 
@@ -134,7 +134,7 @@
       });
 
     request({
-      url: utils.confdPort(api_server) + '/api/config/sdn-account',
+      url: utils.confdPort(api_server) + '/api/config/sdn/account',
       method: 'POST',
       headers: requestHeaders,
       forever: constants.FOREVER_ON,
@@ -159,7 +159,7 @@
 
   return new Promise(function(resolve, reject) {
     var jsonData = {
-      "rw-sdn:sdn-account": data
+      "rw-sdn:sdn": data
     };
 
     console.log('Updating SDN account ', id, ' with', JSON.stringify(jsonData));
@@ -172,7 +172,7 @@
       });
 
     request({
-      url: utils.confdPort(api_server) + '/api/config/sdn-account/' + id,
+      url: utils.confdPort(api_server) + '/api/config/sdn/account/' + id,
       method: 'PUT',
       headers: requestHeaders,
       forever: constants.FOREVER_ON,
@@ -215,7 +215,7 @@
       });
 
     request({
-      url: utils.confdPort(api_server) + '/api/config/sdn-account/' + id,
+      url: utils.confdPort(api_server) + '/api/config/sdn/account/' + id,
       method: 'DELETE',
       headers: requestHeaders,
       forever: constants.FOREVER_ON,
diff --git a/skyquake/plugins/accounts/src/account/account.jsx b/skyquake/plugins/accounts/src/account/account.jsx
index c40e627..45b31fc 100644
--- a/skyquake/plugins/accounts/src/account/account.jsx
+++ b/skyquake/plugins/accounts/src/account/account.jsx
@@ -1,5 +1,5 @@
 /*
- * 
+ *
  *   Copyright 2016 RIFT.IO Inc
  *
  *   Licensed under the Apache License, Version 2.0 (the "License");
@@ -47,6 +47,7 @@
         }
     }
     componentWillUnmount() {
+        this.props.store.closeSocket();
         this.props.store.unlisten(this.storeListener);
     }
     setUp(props){
@@ -328,12 +329,12 @@
                     <div className="accountForm-content" style={{display: 'flex', justifyContent: 'space-between', alignItems: 'center'}}>
                         <div style={{display: 'flex', justifyContent: 'space-between', alignItems: 'center'}}>
                             <AccountConnectivityStatus status={Account['connection-status'].status} />
-                            {Account['connection-status'].status.toUpperCase()}
+                            {Account['connection-status'] && Account['connection-status'].status &&  Account['connection-status'].status.toUpperCase()}
                         </div>
                             <Button className="refreshList light" onClick={this.props.store.refreshAccount.bind(this, Account.name, AccountType)} label="REFRESH STATUS"></Button>
                     </div>
                     {
-                        Account['connection-status'].status.toUpperCase() === 'FAILURE' ?
+                        (Account['connection-status'] && Account['connection-status'].status && Account['connection-status'].status.toUpperCase()) === 'FAILURE' ?
                         displayFailureMessage(Account['connection-status'].details) : null
                     }
                 </div>
diff --git a/skyquake/plugins/accounts/src/account/accountSource.js b/skyquake/plugins/accounts/src/account/accountSource.js
index 4506724..c0fd36b 100644
--- a/skyquake/plugins/accounts/src/account/accountSource.js
+++ b/skyquake/plugins/accounts/src/account/accountSource.js
@@ -34,6 +34,7 @@
             return new Promise(function(resolve, reject) {
               //If socket connection already exists, eat the request.
               if(state.socket) {
+                console.log('connection already exists')
                 return resolve(false);
               }
                $.ajax({
diff --git a/skyquake/plugins/accounts/src/account/accountStore.js b/skyquake/plugins/accounts/src/account/accountStore.js
index 002a9e1..1267fab 100644
--- a/skyquake/plugins/accounts/src/account/accountStore.js
+++ b/skyquake/plugins/accounts/src/account/accountStore.js
@@ -18,7 +18,7 @@
 import AccountActions from './accountActions.js';
 import AccountSource from './accountSource.js';
 
-
+var Utils = require('utils/utils.js');
 var rw = require('utils/rw.js');
 var altImage = rw.getSearchParams(window.location).alt_image;
 
@@ -252,7 +252,6 @@
     openAccountSocketSuccess = (connection) => {
         let self = this;
         let  ws = window.multiplexer.channel(connection);
-
         if (!connection) return;
         this.setState({
             socket: ws.ws,
@@ -261,6 +260,9 @@
         ws.onmessage = (socket) => {
             try {
                 var data = JSON.parse(socket.data);
+                Utils.checkAuthentication(data.statusCode, function() {
+                    self.closeSocket();
+                });
                 let SdnOptions = [{
                     label: 'Select an SDN Account',
                     value: false
@@ -350,7 +352,7 @@
     }
     generateOptionsByName(data) {
         let results = [];
-        if (data.constructor.name == "Array") {
+        if (data && data.constructor.name == "Array") {
           data.map(function(d) {
               results.push({
                   label: d.name,
@@ -407,18 +409,3 @@
     }
 }
 
-
-/**
- *Cloud
- *
- * {"name":"eng2","account-type":"openstack","openstack":{"key":"lmaultsb","secret":"mypasswd","auth_url":"http://engstack.eng.riftio.com:5000/v3/","tenant":"lmaultsb","mgmt-network":"private"}}
-Name
-Path
-
-
-SDN
-
-
- *
- *
- */
diff --git a/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js b/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js
index 59d2f95..a2373e6 100644
--- a/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js
+++ b/skyquake/plugins/composer/src/src/components/EditDescriptorModelProperties.js
@@ -182,7 +182,7 @@
 		const onFocus = onFocusPropertyFormInputElement.bind(container, property, path, value);
 		const placeholder = changeCase.title(property.name);
 		const className = ClassNames(property.name + '-input', {'-is-guid': isGuid});
-		const fieldValue = value ? value.constructor.name == "String" ? value : '' : undefined;
+		const fieldValue = value ? (value.constructor.name != "Object") ? value : '' : undefined;
 		if (isEnumeration) {
 			const enumeration = Property.getEnumeration(property, value);
 			const options = enumeration.map((d, i) => {
diff --git a/skyquake/plugins/config/src/dashboard/configStore.js b/skyquake/plugins/config/src/dashboard/configStore.js
index c5ba696..54f3568 100644
--- a/skyquake/plugins/config/src/dashboard/configStore.js
+++ b/skyquake/plugins/config/src/dashboard/configStore.js
@@ -52,7 +52,7 @@
     }
 }
 
-export default class AccountStore {
+export default class ConfigStore {
     constructor() {
         this.account = {};
         this.accountType = 'openmano';
diff --git a/skyquake/plugins/config/src/dashboard/dashboard.jsx b/skyquake/plugins/config/src/dashboard/dashboard.jsx
index b8a743f..99bff06 100644
--- a/skyquake/plugins/config/src/dashboard/dashboard.jsx
+++ b/skyquake/plugins/config/src/dashboard/dashboard.jsx
@@ -123,7 +123,6 @@
                             }
                 </div>
                 <div className="form-actions">
-                    <Button  className="light" label="Cancel" />
                     <Button key="4" role="button" className="update dark" label="Update"  onClick={this.updateAccount} />
                 </div>
             </form>
diff --git a/skyquake/plugins/launchpad/src/instantiate/instantiateStore.js b/skyquake/plugins/launchpad/src/instantiate/instantiateStore.js
index 4807816..94ba391 100644
--- a/skyquake/plugins/launchpad/src/instantiate/instantiateStore.js
+++ b/skyquake/plugins/launchpad/src/instantiate/instantiateStore.js
@@ -156,7 +156,7 @@
         let newState = {
             dataCenters: dataCenters || []
         };
-        if (this.ro['account-type'] == 'openmano') {
+	if (this.ro && this.ro['account-type'] == 'openmano') {
             newState.dataCenterID = dataCenters[this.ro.name][0].uuid
         }
         this.setState(newState)
@@ -183,7 +183,11 @@
         return window.location.hash = 'launchpad/' + tokenizedHash[2];
     }
     launchNSRError(error) {
-        Alt.actions.global.showError.defer('Something went wrong while trying to instantiate. Check the error logs for more information');
+        var msg = 'Something went wrong while trying to instantiate. Check the error logs for more information';
+        if(error) {
+            msg = error;
+        }
+        Alt.actions.global.showNotification.defer(msg);
         Alt.actions.global.hideScreenLoader.defer();
         this.setState({
             isLoading: false
diff --git a/skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js b/skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js
index 1b2d526..6c5daaa 100644
--- a/skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js
+++ b/skyquake/plugins/launchpad/src/instantiate/launchNetworkServiceSource.js
@@ -128,7 +128,16 @@
           }).fail(function(xhr){
             //Authentication and the handling of fail states should be wrapped up into a connection class.
             Utils.checkAuthentication(xhr.status);
-            reject();
+            var error;
+            if(xhr.responseText) {
+              try {
+                error = JSON.parse(xhr.responseText);
+                error = JSON.parse(error.error)['rpc-reply']['rpc-error']['error-message'];
+              } catch(e){
+                console.log(e);
+              }
+            }
+            reject(error);
           });
         })
       },
