diff --git a/src/app/core/index.ts b/src/app/core/index.ts
index 53dfade..2df80c8 100644
--- a/src/app/core/index.ts
+++ b/src/app/core/index.ts
@@ -15,6 +15,7 @@
 import 'angular-toastr';
 import {xosAlert} from './alert/alert';
 import {xosValidation} from './validation/validation';
+import {ModelSetup} from './services/helpers/model-setup.helpers';
 
 export const xosCore = 'xosCore';
 
@@ -30,6 +31,7 @@
   .service('PageTitle', PageTitle)
   .service('XosFormHelpers', XosFormHelpers)
   .service('ConfigHelpers', ConfigHelpers)
+  .service('ModelSetup', ModelSetup)
   .directive('xosLinkWrapper', xosLinkWrapper)
   .component('xosHeader', xosHeader)
   .component('xosFooter', xosFooter)
diff --git a/src/app/core/login/login.ts b/src/app/core/login/login.ts
index 334ad08..c091e43 100644
--- a/src/app/core/login/login.ts
+++ b/src/app/core/login/login.ts
@@ -1,15 +1,17 @@
 import {AuthService} from '../../datasources/rest/auth.rest';
 import {StyleConfig} from '../../config/style.config';
 import './login.scss';
+import {IXosModelSetupService} from '../services/helpers/model-setup.helpers';
 
 class LoginCtrl {
-  static $inject = ['AuthService', '$state'];
+  static $inject = ['AuthService', '$state', 'ModelSetup'];
   public loginStyle: any;
   public img: string;
   /** @ngInject */
   constructor(
     private authService: AuthService,
-    private $state: angular.ui.IStateService
+    private $state: angular.ui.IStateService,
+    private ModelSetup: IXosModelSetupService
   ) {
     this.img = this.getImg(StyleConfig.background);
 
@@ -24,6 +26,10 @@
       password: password
     })
       .then(res => {
+        // after login set up models
+        return this.ModelSetup.setup();
+      })
+      .then(() => {
         this.$state.go('xos.dashboard');
       })
       .catch(e => console.error);
diff --git a/src/app/core/services/helpers/model-setup.helpers.ts b/src/app/core/services/helpers/model-setup.helpers.ts
new file mode 100644
index 0000000..6a276d9
--- /dev/null
+++ b/src/app/core/services/helpers/model-setup.helpers.ts
@@ -0,0 +1,62 @@
+import {ModeldefsService, IModeldef} from '../../../datasources/rest/modeldefs.rest';
+import {IXosConfigHelpersService} from './config.helpers';
+import {IRuntimeStatesService} from '../runtime-states';
+import {NavigationService} from '../navigation';
+import {IXosState} from '../../../../index';
+import * as _ from 'lodash';
+import IPromise = angular.IPromise;
+
+export interface IXosModelSetupService {
+  setup(): IPromise<null>;
+}
+
+export class ModelSetup {
+  static $inject = ['$q', 'ModelDefs', 'ConfigHelpers', 'RuntimeStates', 'NavigationService'];
+
+  constructor(
+    private $q: ng.IQService,
+    private ModelDefs: ModeldefsService,
+    private ConfigHelpers: IXosConfigHelpersService,
+    private RuntimeStates: IRuntimeStatesService,
+    private NavigationService: NavigationService
+  ) {
+
+  }
+
+  public setup(): IPromise<null> {
+    const d = this.$q.defer();
+    this.ModelDefs.get()
+      .then((models: IModeldef[]) => {
+        _.forEach(models, (m: IModeldef) => {
+          const stateUrl = `/${this.ConfigHelpers.pluralize(m.name.toLowerCase())}/:id?`;
+          const stateName = `xos.core.${this.ConfigHelpers.pluralize(m.name.toLowerCase())}`;
+          const state: IXosState = {
+            parent: 'core',
+            url: stateUrl,
+            component: 'xosCrud',
+            params: {
+              id: null
+            },
+            data: {
+              model: m.name,
+              related: m.relations,
+              xosTableCfg: this.ConfigHelpers.modelToTableCfg(m, stateUrl),
+              xosFormCfg: this.ConfigHelpers.modelToFormCfg(m)
+            }
+          };
+
+          this.RuntimeStates.addState(stateName, state);
+          this.NavigationService.add({
+            label: this.ConfigHelpers.pluralize(m.name),
+            state: stateName,
+            parent: 'xos.core'
+          });
+        });
+
+        d.resolve();
+      })
+      .catch(d.reject);
+
+    return d.promise;
+  }
+}
diff --git a/src/index.ts b/src/index.ts
index e925e08..916730e 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -20,16 +20,11 @@
   interceptorConfig, userStatusInterceptor, CredentialsInterceptor,
   NoHyperlinksInterceptor
 } from './interceptors';
-import {IRuntimeStatesService} from './app/core/services/runtime-states';
-import {IModeldefsService, IModeldef} from './app/datasources/rest/modeldefs.rest';
 import {IXosCrudData} from './app/views/crud/crud';
-import * as _ from 'lodash';
-import {IXosNavigationService} from './app/core/services/navigation';
 import {IXosPageTitleService} from './app/core/services/page-title';
-import {IXosConfigHelpersService} from './app/core/services/helpers/config.helpers';
 import {StyleConfig} from './app/config/style.config';
-import {IXosResourceService} from './app/datasources/rest/model.rest';
 import {IXosAuthService} from './app/datasources/rest/auth.rest';
+import {IXosModelSetupService} from './app/core/services/helpers/model-setup.helpers';
 
 export interface IXosState extends angular.ui.IState {
   data: IXosCrudData;
@@ -62,15 +57,11 @@
     });
   })
   .run((
+    $transitions: any,
     $location: ng.ILocationService,
     $state: ng.ui.IStateService,
-    ModelDefs: IModeldefsService,
-    ModelRest: IXosResourceService,
-    RuntimeStates: IRuntimeStatesService,
-    NavigationService: IXosNavigationService,
-    ConfigHelpers: IXosConfigHelpersService,
+    ModelSetup: IXosModelSetupService,
     AuthService: IXosAuthService,
-    $transitions: any,
     toastr: ng.toastr.IToastrService,
     PageTitle: IXosPageTitleService
   ) => {
@@ -85,39 +76,14 @@
     // save the last visited state before reload
     const lastRoute = window.location.hash.replace('#', '');
 
-    // TODO this must be triggered only when user is authenticated
-    // Dinamically add a  core states
-    ModelDefs.get()
-      .then((models: IModeldef[]) => {
-        // TODO move in a separate service and test (StateConfig service in Core)
-        _.forEach(models, (m: IModeldef) => {
-          const stateUrl = `/${ConfigHelpers.pluralize(m.name.toLowerCase())}/:id?`;
-          const stateName = `xos.core.${ConfigHelpers.pluralize(m.name.toLowerCase())}`;
-          const state: IXosState = {
-            parent: 'core',
-            url: stateUrl,
-            component: 'xosCrud',
-            params: {
-              id: null
-            },
-            data: {
-              model: m.name,
-              related: m.relations,
-              xosTableCfg: ConfigHelpers.modelToTableCfg(m, stateUrl),
-              xosFormCfg: ConfigHelpers.modelToFormCfg(m)
-            }
-          };
-
-          RuntimeStates.addState(stateName, state);
-          NavigationService.add({
-            label: ConfigHelpers.pluralize(m.name),
-            state: stateName,
-            parent: 'xos.core'
-          });
+    // if the user is authenticated
+    if (AuthService.getUser()) {
+      ModelSetup.setup()
+        .then(() => {
+          // after setting up dynamic routes, redirect to previous state
+          $location.path(lastRoute);
         });
+    }
 
-        // after setting up dynamic routes, redirect to previous state
-        $location.path(lastRoute);
-      });
   });
 
