diff --git a/src/app/config/.gitignore b/src/app/config/.gitignore
deleted file mode 100644
index d6b7ef3..0000000
--- a/src/app/config/.gitignore
+++ /dev/null
@@ -1,2 +0,0 @@
-*
-!.gitignore
diff --git a/src/app/core/footer/footer.spec.ts b/src/app/core/footer/footer.spec.ts
index 06c1044..4193bc9 100644
--- a/src/app/core/footer/footer.spec.ts
+++ b/src/app/core/footer/footer.spec.ts
@@ -3,13 +3,18 @@
 import * as angular from 'angular';
 import 'angular-mocks';
 import {xosFooter} from './footer';
-import {StyleConfig} from '../../config/style.config';
+
+const MockStyleConfig = {
+  projectName: 'CORD'
+};
 
 describe('footer component', () => {
   beforeEach(() => {
     angular
       .module('xosFooter', ['app/core/footer/footer.html'])
-      .component('xosFooter', xosFooter);
+      .component('xosFooter', xosFooter)
+      .constant('StyleConfig', MockStyleConfig);
+
     angular.mock.module('xosFooter');
   });
 
@@ -17,6 +22,6 @@
     const element = $compile('<xos-footer></xos-footer>')($rootScope);
     $rootScope.$digest();
     const footer = element.find('a');
-    expect(footer.html().trim()).toEqual(`${StyleConfig.projectName} Team`);
+    expect(footer.html().trim()).toEqual(`${MockStyleConfig.projectName} Team`);
   }));
 });
diff --git a/src/app/core/footer/footer.ts b/src/app/core/footer/footer.ts
index 77a223b..e5fbe3f 100644
--- a/src/app/core/footer/footer.ts
+++ b/src/app/core/footer/footer.ts
@@ -1,11 +1,15 @@
-import {StyleConfig} from '../../config/style.config';
-
+import {IXosStyleConfig} from '../../../index';
 class FooterCtrl {
+
+  static $inject = ['StyleConfig'];
+
   public brand: string;
 
   /** @ngInject */
-  constructor() {
-    this.brand = StyleConfig.projectName;
+  constructor(
+    private StyleConfig: IXosStyleConfig
+  ) {
+    this.brand = this.StyleConfig.projectName;
   }
 }
 
diff --git a/src/app/core/header/header.spec.ts b/src/app/core/header/header.spec.ts
index 864c5a4..62fa368 100644
--- a/src/app/core/header/header.spec.ts
+++ b/src/app/core/header/header.spec.ts
@@ -51,7 +51,11 @@
       .value('toastr', MockToastr)
       .value('toastrConfig', MockToastrConfig)
       .value('AuthService', MockAuth)
-      .value('NavigationService', {});
+      .value('NavigationService', {})
+      .value('StyleConfig', {
+        logo: 'cord-logo.png',
+      });
+
     angular.mock.module('xosHeader');
   });
 
diff --git a/src/app/core/header/header.ts b/src/app/core/header/header.ts
index 88562ea..0a98494 100644
--- a/src/app/core/header/header.ts
+++ b/src/app/core/header/header.ts
@@ -1,5 +1,4 @@
 import './header.scss';
-import {StyleConfig} from '../../config/style.config';
 import {IWSEvent} from '../../datasources/websocket/global';
 import {IStoreService} from '../../datasources/stores/synchronizer.store';
 import {IXosAuthService} from '../../datasources/rest/auth.rest';
@@ -7,13 +6,14 @@
 import {IStateService} from 'angular-ui-router';
 import * as _ from 'lodash';
 import * as $ from 'jquery';
+import {IXosStyleConfig} from '../../../index';
 
 export interface INotification extends IWSEvent {
   viewed?: boolean;
 }
 
 class HeaderController {
-  static $inject = ['$scope', '$rootScope', '$state', 'AuthService', 'SynchronizerStore', 'toastr', 'toastrConfig', 'NavigationService'];
+  static $inject = ['$scope', '$rootScope', '$state', 'AuthService', 'SynchronizerStore', 'toastr', 'toastrConfig', 'NavigationService', 'StyleConfig'];
   public notifications: INotification[] = [];
   public newNotifications: INotification[] = [];
   public version: string;
@@ -30,7 +30,8 @@
     private syncStore: IStoreService,
     private toastr: ng.toastr.IToastrService,
     private toastrConfig: ng.toastr.IToastrConfig,
-    private NavigationService: IXosNavigationService
+    private NavigationService: IXosNavigationService,
+    private StyleConfig: IXosStyleConfig
   ) {
     this.version = require('../../../../package.json').version;
     angular.extend(this.toastrConfig, {
@@ -107,7 +108,7 @@
   }
 
   public getLogo(): string {
-    return require(`../../images/brand/${StyleConfig.logo}`);
+    return require(`../../images/brand/${this.StyleConfig.logo}`);
   }
 
   // TODO display a list of notification in the template (if it make sense)
diff --git a/src/app/core/login/login.ts b/src/app/core/login/login.ts
index ac0da82..2dcabe9 100644
--- a/src/app/core/login/login.ts
+++ b/src/app/core/login/login.ts
@@ -1,27 +1,28 @@
 import {AuthService} from '../../datasources/rest/auth.rest';
-import {StyleConfig} from '../../config/style.config';
 import './login.scss';
 import {IXosModelSetupService} from '../services/helpers/model-setup.helpers';
+import {IXosStyleConfig} from '../../../index';
 
 class LoginCtrl {
-  static $inject = ['AuthService', '$state', 'ModelSetup'];
+  static $inject = ['AuthService', '$state', 'ModelSetup', 'StyleConfig'];
   public loginStyle: any;
   public img: string;
   /** @ngInject */
   constructor(
     private authService: AuthService,
     private $state: angular.ui.IStateService,
-    private ModelSetup: IXosModelSetupService
+    private ModelSetup: IXosModelSetupService,
+    private StyleConfig: IXosStyleConfig
   ) {
 
     if (this.authService.isAuthenticated()) {
       this.$state.go('xos.dashboard');
     }
 
-    this.img = this.getImg(StyleConfig.background);
+    this.img = this.getImg(this.StyleConfig.background);
 
     this.loginStyle = {
-      'background-image': `url('${this.getImg(StyleConfig.background)}')`
+      'background-image': `url('${this.getImg(this.StyleConfig.background)}')`
     };
   }
 
diff --git a/src/app/core/nav/nav.spec.ts b/src/app/core/nav/nav.spec.ts
index 28cd3e1..fafec7d 100644
--- a/src/app/core/nav/nav.spec.ts
+++ b/src/app/core/nav/nav.spec.ts
@@ -30,7 +30,8 @@
       .module('xosNav', ['app/core/nav/nav.html', 'ui.router'])
       .component('xosNav', xosNav)
       .service('NavigationService', NavigationService)
-      .value('AuthService', AuthMock);
+      .value('AuthService', AuthMock)
+      .value('StyleConfig', {});
     angular.mock.module('xosNav');
   });
 
diff --git a/src/app/core/nav/nav.ts b/src/app/core/nav/nav.ts
index 6c26635..c100c42 100644
--- a/src/app/core/nav/nav.ts
+++ b/src/app/core/nav/nav.ts
@@ -1,10 +1,10 @@
 import './nav.scss';
 import {IXosNavigationService, IXosNavigationRoute} from '../services/navigation';
-import {StyleConfig} from '../../config/style.config';
 import {IXosAuthService} from '../../datasources/rest/auth.rest';
+import {IXosStyleConfig} from '../../../index';
 
 class NavCtrl {
-  static $inject = ['$scope', '$state', 'NavigationService', 'AuthService'];
+  static $inject = ['$scope', '$state', 'NavigationService', 'AuthService', 'StyleConfig'];
   public routes: IXosNavigationRoute[];
   public navSelected: string;
   public appName: string;
@@ -14,7 +14,8 @@
     private $scope: ng.IScope,
     private $state: angular.ui.IStateService,
     private navigationService: IXosNavigationService,
-    private authService: IXosAuthService
+    private authService: IXosAuthService,
+    private StyleConfig: IXosStyleConfig
   ) {
     // NOTE we'll need to have:
     // - Base routes (defined from configuration based on BRAND)
@@ -24,8 +25,8 @@
     this.$scope.$watch(() => this.navigationService.query(), (routes) => {
       this.routes = routes;
     });
-    this.appName = StyleConfig.projectName;
-    this.payoff = StyleConfig.payoff;
+    this.appName = this.StyleConfig.projectName;
+    this.payoff = this.StyleConfig.payoff;
   }
 
   activateRoute(route: IXosNavigationRoute) {
diff --git a/src/app/core/services/navigation.spec.ts b/src/app/core/services/navigation.spec.ts
index c5fb85d..62e8d3c 100644
--- a/src/app/core/services/navigation.spec.ts
+++ b/src/app/core/services/navigation.spec.ts
@@ -8,15 +8,46 @@
 
 let defaultRoutes: IXosNavigationRoute[];
 
+const mockRoutes = [
+  {
+    label: 'Slices',
+    state: 'xos.core.slices'
+  },
+  {
+    label: 'Instances',
+    state: 'xos.core.instances'
+  },
+  {
+    label: 'Nodes',
+    state: 'xos.core.nodes'
+  }
+];
+
 describe('The Navigation service', () => {
 
-  beforeEach(angular.mock.module(xosCore));
+  beforeEach(() => {
+    angular.module(xosCore)
+      .value('StyleConfig', {
+        routes: mockRoutes
+      });
+
+    angular.mock.module(xosCore);
+  });
 
   beforeEach(angular.mock.inject((
     NavigationService: IXosNavigationService,
   ) => {
     service = NavigationService;
-    defaultRoutes = angular.copy(service.query());
+    defaultRoutes = [
+      {
+        label: 'Home',
+        state: 'xos.dashboard'
+      },
+      {
+        label: 'Core',
+        state: 'xos.core'
+      }
+    ].concat(mockRoutes);
   }));
 
   it('should return navigation routes', () => {
diff --git a/src/app/core/services/navigation.ts b/src/app/core/services/navigation.ts
index d184fc2..31f2b4e 100644
--- a/src/app/core/services/navigation.ts
+++ b/src/app/core/services/navigation.ts
@@ -1,7 +1,7 @@
 /// <reference path="../../../../typings/index.d.ts" />
 
 import * as _ from 'lodash';
-import {StyleConfig} from '../../config/style.config';
+import {IXosStyleConfig} from '../../../index';
 
 export interface IXosNavigationRoute {
   label: string;
@@ -18,9 +18,12 @@
 }
 
 export class NavigationService {
+  static $inject = ['StyleConfig'];
   private routes: IXosNavigationRoute[];
 
-  constructor() {
+  constructor(
+    private StyleConfig: IXosStyleConfig
+  ) {
     const defaultRoutes = [
       {
         label: 'Home',
@@ -34,7 +37,7 @@
     // adding configuration defined routes
     // this.routes = StyleConfig.routes.concat(defaultRoutes).reverse();
     this.routes = defaultRoutes;
-    StyleConfig.routes.forEach(r => {
+    this.StyleConfig.routes.forEach(r => {
       this.add(r);
     });
   }
diff --git a/src/app/core/services/page-title.spec.ts b/src/app/core/services/page-title.spec.ts
index 0959e57..9e6f519 100644
--- a/src/app/core/services/page-title.spec.ts
+++ b/src/app/core/services/page-title.spec.ts
@@ -4,12 +4,20 @@
 import {xosCore} from '../index';
 import {IXosPageTitleService} from './page-title';
 import IWindowService = angular.IWindowService;
-import {StyleConfig} from '../../config/style.config';
 
 let service: IXosPageTitleService, $window: IWindowService;
+
+const MockStyleConfig = {
+  projectName: 'CORD'
+};
+
 describe('The PageTitle service', () => {
 
-  beforeEach(angular.mock.module(xosCore));
+  beforeEach(() => {
+    angular.module(xosCore)
+      .constant('StyleConfig', MockStyleConfig);
+    angular.mock.module(xosCore);
+  });
 
   beforeEach(angular.mock.inject((
     PageTitle: IXosPageTitleService,
@@ -26,11 +34,11 @@
 
   it('should set a page title', () => {
     service.set('sample');
-    expect($window.document.title).toEqual(`${StyleConfig.projectName} - sample`);
+    expect($window.document.title).toEqual(`${MockStyleConfig.projectName} - sample`);
   });
 
   it('should convert dots to >', () => {
     service.set('core.sample.bread.crumb');
-    expect($window.document.title).toEqual(`${StyleConfig.projectName} - core > sample > bread > crumb`);
+    expect($window.document.title).toEqual(`${MockStyleConfig.projectName} - core > sample > bread > crumb`);
   });
 });
diff --git a/src/app/core/services/page-title.ts b/src/app/core/services/page-title.ts
index 865149d..e3b8d42 100644
--- a/src/app/core/services/page-title.ts
+++ b/src/app/core/services/page-title.ts
@@ -1,4 +1,4 @@
-import {StyleConfig} from '../../config/style.config';
+import {IXosStyleConfig} from '../../../index';
 export interface IXosPageTitleService {
   get(): string;
   set(title: string): void;
@@ -6,10 +6,11 @@
 }
 
 export class PageTitle {
-  static $inject = ['$window', '$transitions'];
+  static $inject = ['$window', '$transitions', 'StyleConfig'];
   constructor(
     private $window: angular.IWindowService,
-    private $transitions: any // missing definition
+    private $transitions: any, // missing definition
+    private StyleConfig: IXosStyleConfig
   ) {
     this.$transitions.onSuccess({ to: '**' }, (transtion) => {
       this.set(transtion.$to().name);
@@ -21,7 +22,7 @@
   }
 
   set(title: string) {
-    this.$window.document.title = `${StyleConfig.projectName} - ${this.formatStateName(title)}`;
+    this.$window.document.title = `${this.StyleConfig.projectName} - ${this.formatStateName(title)}`;
   }
 
   private formatStateName(stateName: string): string {
diff --git a/src/app/datasources/helpers/store.helpers.spec.ts b/src/app/datasources/helpers/store.helpers.spec.ts
index 4e45070..b8ba662 100644
--- a/src/app/datasources/helpers/store.helpers.spec.ts
+++ b/src/app/datasources/helpers/store.helpers.spec.ts
@@ -21,7 +21,8 @@
       .service('ConfigHelpers', ConfigHelpers) // NOTE evaluate mock
       .service('ModelRest', ModelRest) // NOTE evaluate mock
       .service('StoreHelpers', StoreHelpers)
-      .service('AuthService', AuthService);
+      .service('AuthService', AuthService)
+      .value('AppConfig', {});
 
     angular.mock.module('test');
   });
diff --git a/src/app/datasources/rest/auth.rest.spec.ts b/src/app/datasources/rest/auth.rest.spec.ts
index 16c0f8d..483bcfc 100644
--- a/src/app/datasources/rest/auth.rest.spec.ts
+++ b/src/app/datasources/rest/auth.rest.spec.ts
@@ -3,7 +3,6 @@
 import 'angular-resource';
 import 'angular-cookies';
 import {xosDataSources} from '../index';
-import {AppConfig} from '../../config/app.config';
 import {IXosAuthService} from './auth.rest';
 
 let service: IXosAuthService;
@@ -11,11 +10,20 @@
 let $scope;
 let $cookies;
 
+const MockAppCfg = {
+  apiEndpoint: 'http://xos-test:3000/api',
+  websocketClient: 'http://xos-test:3000'
+};
+
 describe('The AuthService service', () => {
 
   beforeEach(angular.mock.module(xosDataSources));
 
   beforeEach(() => {
+
+    angular.module(xosDataSources)
+      .constant('AppConfig', MockAppCfg);
+
     angular.mock.module(xosDataSources);
   });
 
@@ -34,7 +42,7 @@
 
   describe('when logging in', () => {
     beforeEach(() => {
-      httpBackend.expectPOST(`${AppConfig.apiEndpoint}/utility/login/`)
+      httpBackend.expectPOST(`${MockAppCfg.apiEndpoint}/utility/login/`)
         .respond({
           user: JSON.stringify({usernane: 'test@xos.org'}),
           xoscsrftoken: 'token',
@@ -59,7 +67,7 @@
 
   describe('when logging out', () => {
     beforeEach(() => {
-      httpBackend.expectPOST(`${AppConfig.apiEndpoint}/utility/logout/`)
+      httpBackend.expectPOST(`${MockAppCfg.apiEndpoint}/utility/logout/`)
         .respond({
           user: JSON.stringify({usernane: 'test@xos.org'}),
           xoscsrftoken: 'token',
diff --git a/src/app/datasources/rest/auth.rest.ts b/src/app/datasources/rest/auth.rest.ts
index edf7705..2979bf1 100644
--- a/src/app/datasources/rest/auth.rest.ts
+++ b/src/app/datasources/rest/auth.rest.ts
@@ -1,5 +1,5 @@
-import {AppConfig} from '../../config/app.config';
 import IHttpPromiseCallbackArg = angular.IHttpPromiseCallbackArg;
+import {IXosAppConfig} from '../../../index';
 export interface IAuthRequestData {
   username: string;
   password: string;
@@ -30,17 +30,18 @@
   constructor(
     private $http: angular.IHttpService,
     private $q: angular.IQService,
-    private $cookies: angular.cookies.ICookiesService
+    private $cookies: angular.cookies.ICookiesService,
+    private AppConfig: IXosAppConfig
   ) {
   }
 
   public login(data: IAuthRequestData): Promise<any> {
     const d = this.$q.defer();
-    this.$http.post(`${AppConfig.apiEndpoint}/utility/login/`, data)
+    this.$http.post(`${this.AppConfig.apiEndpoint}/utility/login/`, data)
       .then((res: IAuthResponseData) => {
-        this.$cookies.put('xoscsrftoken', res.data.xoscsrftoken);
-        this.$cookies.put('xossessionid', res.data.xossessionid);
-        this.$cookies.put('xosuser', res.data.user);
+        this.$cookies.put('xoscsrftoken', res.data.xoscsrftoken, {path: '/'});
+        this.$cookies.put('xossessionid', res.data.xossessionid, {path: '/'});
+        this.$cookies.put('xosuser', res.data.user, {path: '/'});
         res.data.user = JSON.parse(res.data.user);
         d.resolve(res.data);
       })
@@ -52,7 +53,7 @@
 
   public logout(): Promise<any> {
     const d = this.$q.defer();
-    this.$http.post(`${AppConfig.apiEndpoint}/utility/logout/`, {
+    this.$http.post(`${this.AppConfig.apiEndpoint}/utility/logout/`, {
       xoscsrftoken: this.$cookies.get('xoscsrftoken'),
       xossessionid: this.$cookies.get('xossessionid')
     })
@@ -67,9 +68,9 @@
   }
 
   public clearUser(): void {
-    this.$cookies.remove('xoscsrftoken');
-    this.$cookies.remove('xossessionid');
-    this.$cookies.remove('xosuser');
+    this.$cookies.remove('xoscsrftoken', {path: '/'});
+    this.$cookies.remove('xossessionid', {path: '/'});
+    this.$cookies.remove('xosuser', {path: '/'});
   }
 
   public getUser(): IXosUser {
diff --git a/src/app/datasources/rest/model.rest.spec.ts b/src/app/datasources/rest/model.rest.spec.ts
index f57c0c8..9d5b4f3 100644
--- a/src/app/datasources/rest/model.rest.spec.ts
+++ b/src/app/datasources/rest/model.rest.spec.ts
@@ -4,7 +4,6 @@
 import 'angular-cookies';
 import {IXosResourceService} from './model.rest';
 import {xosDataSources} from '../index';
-import {AppConfig} from '../../config/app.config';
 
 let service: IXosResourceService;
 let resource: ng.resource.IResourceClass<any>;
@@ -12,11 +11,20 @@
 let $resource;
 let $scope;
 
+const MockAppCfg = {
+  apiEndpoint: 'http://xos-test:3000/api',
+  websocketClient: 'http://xos-test:3000'
+};
+
 describe('The ModelRest service', () => {
 
   beforeEach(angular.mock.module(xosDataSources));
 
   beforeEach(() => {
+
+    angular.module(xosDataSources)
+      .constant('AppConfig', MockAppCfg);
+
     angular.mock.module(xosDataSources);
   });
 
@@ -39,7 +47,7 @@
   });
 
   it('should have a query method', (done) => {
-    httpBackend.expectGET(`${AppConfig.apiEndpoint}/core/test`)
+    httpBackend.expectGET(`${MockAppCfg.apiEndpoint}/core/test`)
       .respond([
         {status: 'ok'}
       ]);
@@ -57,7 +65,7 @@
   });
 
   it('should have a get method', (done) => {
-    httpBackend.expectGET(`${AppConfig.apiEndpoint}/core/test/1`)
+    httpBackend.expectGET(`${MockAppCfg.apiEndpoint}/core/test/1`)
       .respond([
         {status: 'ok'}
       ]);
diff --git a/src/app/datasources/rest/model.rest.ts b/src/app/datasources/rest/model.rest.ts
index 8bd2c1f..12590af 100644
--- a/src/app/datasources/rest/model.rest.ts
+++ b/src/app/datasources/rest/model.rest.ts
@@ -1,21 +1,21 @@
-import {AppConfig} from '../../config/app.config';
-
+import {IXosAppConfig} from '../../../index';
 export interface IXosResourceService {
   getResource(url: string): ng.resource.IResourceClass<any>;
 }
 
 export class ModelRest implements IXosResourceService {
-  static $inject = ['$resource'];
+  static $inject = ['$resource', 'AppConfig'];
 
   /** @ngInject */
   constructor(
-    private $resource: ng.resource.IResourceService
+    private $resource: ng.resource.IResourceService,
+    private AppConfig: IXosAppConfig
   ) {
 
   }
 
   public getResource(url: string): ng.resource.IResourceClass<ng.resource.IResource<any>> {
-    const resource: angular.resource.IResourceClass<any> = this.$resource(`${AppConfig.apiEndpoint}${url}/:id/`, {id: '@id'}, {
+    const resource: angular.resource.IResourceClass<any> = this.$resource(`${this.AppConfig.apiEndpoint}${url}/:id/`, {id: '@id'}, {
       update: { method: 'PUT' }
     });
 
diff --git a/src/app/datasources/rest/modeldefs.rest.spec.ts b/src/app/datasources/rest/modeldefs.rest.spec.ts
index 6469cca..9dc4025 100644
--- a/src/app/datasources/rest/modeldefs.rest.spec.ts
+++ b/src/app/datasources/rest/modeldefs.rest.spec.ts
@@ -3,18 +3,26 @@
 import 'angular-resource';
 import 'angular-cookies';
 import {xosDataSources} from '../index';
-import {AppConfig} from '../../config/app.config';
 import {IModeldefsService} from './modeldefs.rest';
 
 let service: IModeldefsService;
 let httpBackend: ng.IHttpBackendService;
 let $scope;
 
+const MockAppCfg = {
+  apiEndpoint: 'http://xos-test:3000/api',
+  websocketClient: 'http://xos-test:3000'
+};
+
 describe('The ModelDefs service', () => {
 
   beforeEach(angular.mock.module(xosDataSources));
 
   beforeEach(() => {
+
+    angular.module(xosDataSources)
+      .constant('AppConfig', MockAppCfg);
+
     angular.mock.module(xosDataSources);
   });
 
@@ -31,7 +39,7 @@
   }));
 
   it('should have a get method', (done) => {
-    httpBackend.expectGET(`${AppConfig.apiEndpoint}/utility/modeldefs/`)
+    httpBackend.expectGET(`${MockAppCfg.apiEndpoint}/utility/modeldefs/`)
       .respond([
         {name: 'ok'}
       ]);
diff --git a/src/app/datasources/rest/modeldefs.rest.ts b/src/app/datasources/rest/modeldefs.rest.ts
index d5a5541..d927f8c 100644
--- a/src/app/datasources/rest/modeldefs.rest.ts
+++ b/src/app/datasources/rest/modeldefs.rest.ts
@@ -1,5 +1,5 @@
-import {AppConfig} from '../../config/app.config';
 import {IXosModelDefsField} from '../../core/services/helpers/config.helpers';
+import {IXosAppConfig} from '../../../index';
 
 export interface IModeldef {
   fields: IXosModelDefsField[];
@@ -12,15 +12,19 @@
 }
 
 export class ModeldefsService {
+
+  static $inject = ['$http', '$q', 'AppConfig'];
+
   constructor(
     private $http: angular.IHttpService,
     private $q: angular.IQService,
+    private AppConfig: IXosAppConfig
   ) {
   }
 
   public get(): Promise<any> {
     const d = this.$q.defer();
-    this.$http.get(`${AppConfig.apiEndpoint}/utility/modeldefs/`)
+    this.$http.get(`${this.AppConfig.apiEndpoint}/utility/modeldefs/`)
       .then((res) => {
         d.resolve(res.data);
       })
diff --git a/src/app/datasources/stores/model.store.spec.ts b/src/app/datasources/stores/model.store.spec.ts
index 5bdc498..97ce890 100644
--- a/src/app/datasources/stores/model.store.spec.ts
+++ b/src/app/datasources/stores/model.store.spec.ts
@@ -6,7 +6,6 @@
 import {IWSEvent} from '../websocket/global';
 import {StoreHelpers} from '../helpers/store.helpers';
 import {ModelRest} from '../rest/model.rest';
-import {AppConfig} from '../../config/app.config';
 import {ConfigHelpers} from '../../core/services/helpers/config.helpers';
 import {AuthService} from '../rest/auth.rest';
 
@@ -34,6 +33,11 @@
   {id: 1, name: 'bar'}
 ];
 
+const MockAppCfg = {
+  apiEndpoint: 'http://xos-test:3000/api',
+  websocketClient: 'http://xos-test:3000'
+};
+
 describe('The ModelStore service', () => {
 
   beforeEach(() => {
@@ -44,7 +48,8 @@
       .service('ModelRest', ModelRest) // TODO mock
       .service('ModelStore', ModelStore)
       .service('ConfigHelpers', ConfigHelpers) // TODO mock
-      .service('AuthService', AuthService);
+      .service('AuthService', AuthService)
+      .constant('AppConfig', MockAppCfg);
 
     angular.mock.module('ModelStore');
   });
@@ -61,7 +66,7 @@
     WebSocket = _WebSocket_;
 
     // ModelRest will call the backend
-    httpBackend.whenGET(`${AppConfig.apiEndpoint}/core/samples`)
+    httpBackend.whenGET(`${MockAppCfg.apiEndpoint}/core/samples`)
       .respond(queryData);
   }));
 
@@ -122,11 +127,11 @@
   describe('when multiple stores are requested', () => {
 
     beforeEach(() => {
-      httpBackend.expectGET(`${AppConfig.apiEndpoint}/core/firsts`)
+      httpBackend.expectGET(`${MockAppCfg.apiEndpoint}/core/firsts`)
         .respond([
           {first: 'foo'}
         ]);
-      httpBackend.expectGET(`${AppConfig.apiEndpoint}/core/seconds`)
+      httpBackend.expectGET(`${MockAppCfg.apiEndpoint}/core/seconds`)
         .respond([
           {second: 'foo'}
         ]);
diff --git a/src/app/datasources/websocket/global.ts b/src/app/datasources/websocket/global.ts
index 89a8607..a5852c8 100644
--- a/src/app/datasources/websocket/global.ts
+++ b/src/app/datasources/websocket/global.ts
@@ -1,6 +1,6 @@
 import * as io from 'socket.io-client';
 import {Subject, Observable} from 'rxjs/Rx';
-import {AppConfig} from '../../config/app.config';
+import {IXosAppConfig} from '../../../index';
 
 export interface IWSEvent {
   model: string;
@@ -16,10 +16,15 @@
 }
 
 export class WebSocketEvent {
+
+  static $inject = ['AppConfig'];
+
   private _events: Subject<IWSEvent> = new Subject<IWSEvent>();
     private socket;
-    constructor() {
-      this.socket = io(AppConfig.websocketClient);
+    constructor(
+      private AppConfig: IXosAppConfig
+    ) {
+      this.socket = io(this.AppConfig.websocketClient);
       this.socket.on('event', (data: IWSEvent): void => {
           this._events.next(data);
         });
diff --git a/src/index.html b/src/index.html
index 8cf67ce..2f5ee65 100644
--- a/src/index.html
+++ b/src/index.html
@@ -15,4 +15,6 @@
   <body class="{{class}}">
     <ui-view></ui-view>
   </body>
+  <script type="text/javascript" src="./app.config.js"></script>
+  <script type="text/javascript" src="./style.config.js"></script>
 </html>
diff --git a/src/index.ts b/src/index.ts
index 916730e..0be6245 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -22,14 +22,28 @@
 } from './interceptors';
 import {IXosCrudData} from './app/views/crud/crud';
 import {IXosPageTitleService} from './app/core/services/page-title';
-import {StyleConfig} from './app/config/style.config';
 import {IXosAuthService} from './app/datasources/rest/auth.rest';
 import {IXosModelSetupService} from './app/core/services/helpers/model-setup.helpers';
+import {IXosNavigationRoute} from './app/core/services/navigation';
 
 export interface IXosState extends angular.ui.IState {
   data: IXosCrudData;
 };
 
+export interface IXosAppConfig {
+  apiEndpoint: string;
+  websocketClient: string;
+}
+
+export interface IXosStyleConfig {
+  projectName: string;
+  payoff: string;
+  favicon: string;
+  background: string;
+  logo: string;
+  routes: IXosNavigationRoute[];
+}
+
 angular
   .module('app', [
     xosCore,
@@ -45,7 +59,7 @@
   .factory('CredentialsInterceptor', CredentialsInterceptor)
   .factory('NoHyperlinksInterceptor', NoHyperlinksInterceptor)
   .component('xos', main)
-  .run(function($rootScope: ng.IRootScopeService, $transitions: any) {
+  .run(function($rootScope: ng.IRootScopeService, $transitions: any, StyleConfig: IXosStyleConfig) {
     $rootScope['favicon'] = `./app/images/brand/${StyleConfig.favicon}`;
     $transitions.onSuccess({ to: '**' }, (transtion) => {
       if (transtion.$to().name === 'login') {
diff --git a/src/interceptors.ts b/src/interceptors.ts
index 273d19e..9e3ba65 100644
--- a/src/interceptors.ts
+++ b/src/interceptors.ts
@@ -13,9 +13,9 @@
 
   const checkLogin = (res) => {
     if (res.status === 401 || res.status === -1) {
-      $cookies.remove('xoscsrftoken');
-      $cookies.remove('xossessionid');
-      $cookies.remove('xosuser');
+      $cookies.remove('xoscsrftoken', {path: '/'});
+      $cookies.remove('xossessionid', {path: '/'});
+      $cookies.remove('xosuser', {path: '/'});
       $state.go('login');
     }
     return res;
