diff --git a/src/app/core/header/header.ts b/src/app/core/header/header.ts
index 620aecd..1f01bf8 100644
--- a/src/app/core/header/header.ts
+++ b/src/app/core/header/header.ts
@@ -48,10 +48,6 @@
       // tapToDismiss: false
     });
 
-    // this.$rootScope.$on('xos.core.modelSetup', () => {
-    //   this.states = _.uniqBy(this.states, 'state');
-    // });
-
     this.search = (query: string) => {
       return this.SearchService.search(query);
     };
@@ -61,7 +57,6 @@
       if (e.key === 'f') {
         $('.navbar-form input').focus();
       }
-      // console.log(this.SearchService.getStates());
     });
 
     // redirect to selected page
diff --git a/src/app/core/login/login.ts b/src/app/core/login/login.ts
index a08c17d..673d9a8 100644
--- a/src/app/core/login/login.ts
+++ b/src/app/core/login/login.ts
@@ -4,11 +4,12 @@
 import {IXosStyleConfig} from '../../../index';
 
 class LoginCtrl {
-  static $inject = ['AuthService', '$state', 'ModelSetup', 'StyleConfig'];
+  static $inject = ['$log', 'AuthService', '$state', 'ModelSetup', 'StyleConfig'];
   public loginStyle: any;
   public img: string;
   /** @ngInject */
   constructor(
+    private $log: ng.ILogService,
     private authService: AuthService,
     private $state: angular.ui.IStateService,
     private ModelSetup: IXosModelSetupService,
@@ -39,7 +40,7 @@
         this.$state.go('xos.dashboard');
       })
       .catch(e => {
-        console.error(e);
+        this.$log.error(e);
       });
   }
 
diff --git a/src/app/core/services/helpers/model-setup.helpers.ts b/src/app/core/services/helpers/model-setup.helpers.ts
index b0a2be6..e79899d 100644
--- a/src/app/core/services/helpers/model-setup.helpers.ts
+++ b/src/app/core/services/helpers/model-setup.helpers.ts
@@ -53,8 +53,7 @@
             parent: 'xos.core'
           });
         });
-        console.log('xos.core.modelSetup');
-        this.$rootScope.$emit('xos.core.modelSetup', {done: true});
+
         d.resolve();
       })
       .catch(d.reject);
diff --git a/src/app/core/validation/validation.ts b/src/app/core/validation/validation.ts
index 7481b3b..5a27045 100644
--- a/src/app/core/validation/validation.ts
+++ b/src/app/core/validation/validation.ts
@@ -7,7 +7,6 @@
   public config: any;
 
   $onInit() {
-    console.log('validation');
     this.config = {
       type: 'danger'
     };
diff --git a/src/app/datasources/stores/model.store.spec.ts b/src/app/datasources/stores/model.store.spec.ts
index 97ce890..a73e5ff 100644
--- a/src/app/datasources/stores/model.store.spec.ts
+++ b/src/app/datasources/stores/model.store.spec.ts
@@ -105,7 +105,6 @@
             }
           },
           err => {
-            console.log(err);
             done(err);
           }
         );
diff --git a/src/app/datasources/stores/model.store.ts b/src/app/datasources/stores/model.store.ts
index 4c6c09d..a070436 100644
--- a/src/app/datasources/stores/model.store.ts
+++ b/src/app/datasources/stores/model.store.ts
@@ -11,9 +11,10 @@
 }
 
 export class ModelStore {
-  static $inject = ['WebSocket', 'StoreHelpers', 'ModelRest'];
+  static $inject = ['$log', 'WebSocket', 'StoreHelpers', 'ModelRest'];
   private _collections: any; // NOTE contains a map of {model: BehaviourSubject}
   constructor(
+    private $log: ng.ILogService,
     private webSocket: IWSEventService,
     private storeHelpers: IStoreHelpersService,
     private ModelRest: IXosResourceService,
@@ -71,8 +72,9 @@
       .then(
         res => {
           this._collections[model].next(res);
-        },
-        err => console.log(`Error retrieving ${model}`, err)
+        })
+      .catch(
+        err => this.$log.log(`Error retrieving ${model}`, err)
       );
   }
 }
diff --git a/src/decorators.ts b/src/decorators.ts
new file mode 100644
index 0000000..3b2ab4e
--- /dev/null
+++ b/src/decorators.ts
@@ -0,0 +1,39 @@
+export default function XosLogDecorator($provide: ng.auto.IProvideService) {
+  $provide.decorator('$log', function($delegate: any) {
+    const isLogEnabled = () => {
+      return window.location.href.indexOf('debug=true') >= 0;
+    };
+    // Save the original $log.debug()
+    let logFn = $delegate.log;
+    let infoFn = $delegate.info;
+    let warnFn = $delegate.warn;
+    let errorFn = $delegate.error;
+    let debugFn = $delegate.debug;
+
+    // create the replacement function
+    const replacement = (fn) => {
+      return function(){
+        if (!isLogEnabled()) {
+          return;
+        }
+
+        let args    = [].slice.call(arguments);
+        let now     = new Date();
+
+        // Prepend timestamp
+        args[0] = `[${now.getHours()}:${now.getMinutes()}:${now.getSeconds()}] ${args[0]}`;
+
+        // Call the original with the output prepended with formatted timestamp
+        fn.apply(null, args);
+      };
+    };
+
+    $delegate.info = replacement(infoFn);
+    $delegate.log = replacement(logFn);
+    $delegate.warn = replacement(warnFn);
+    $delegate.error = replacement(errorFn); // note this will prevent errors to be printed
+    $delegate.debug = replacement(debugFn);
+
+    return $delegate;
+  });
+}
diff --git a/src/index.ts b/src/index.ts
index 0be6245..0322608 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -25,6 +25,7 @@
 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';
+import XosLogDecorator from './decorators';
 
 export interface IXosState extends angular.ui.IState {
   data: IXosCrudData;
@@ -53,13 +54,14 @@
     'ngResource',
     xosTemplate // template module
   ])
+  .config(XosLogDecorator)
   .config(routesConfig)
   .config(interceptorConfig)
   .factory('UserStatusInterceptor', userStatusInterceptor)
   .factory('CredentialsInterceptor', CredentialsInterceptor)
   .factory('NoHyperlinksInterceptor', NoHyperlinksInterceptor)
   .component('xos', main)
-  .run(function($rootScope: ng.IRootScopeService, $transitions: any, StyleConfig: IXosStyleConfig) {
+  .run(function($log: ng.ILogService, $rootScope: ng.IRootScopeService, $transitions: any, StyleConfig: IXosStyleConfig) {
     $rootScope['favicon'] = `./app/images/brand/${StyleConfig.favicon}`;
     $transitions.onSuccess({ to: '**' }, (transtion) => {
       if (transtion.$to().name === 'login') {
@@ -71,6 +73,7 @@
     });
   })
   .run((
+    $rootScope: ng.IRootScopeService,
     $transitions: any,
     $location: ng.ILocationService,
     $state: ng.ui.IStateService,
@@ -87,15 +90,29 @@
       }
     });
 
+    // preserve debug=true query string parameter
+    $transitions.onStart({ to: '**' }, (transtion) => {
+      // save location.search so we can add it back after transition is done
+      this.locationSearch = $location.search();
+    });
+
+    $transitions.onSuccess({ to: '**' }, (transtion) => {
+      // restore all query string parameters back to $location.search
+      if (angular.isDefined(this.locationSearch.debug) && this.locationSearch.debug) {
+        $location.search({debug: 'true'});
+      }
+    });
+
     // save the last visited state before reload
-    const lastRoute = window.location.hash.replace('#', '');
+    const lastRoute = $location.path();
+    const lastQueryString = $location.search();
 
     // if the user is authenticated
     if (AuthService.getUser()) {
       ModelSetup.setup()
         .then(() => {
           // after setting up dynamic routes, redirect to previous state
-          $location.path(lastRoute);
+          $location.path(lastRoute).search(lastQueryString);
         });
     }
 
diff --git a/tslint.json b/tslint.json
index 9f4f2c7..04d33e1 100644
--- a/tslint.json
+++ b/tslint.json
@@ -1,6 +1,5 @@
 {
   "rules": {
-    "no-console": [true],
     "ban": [true,
       ["_", "extend"],
       ["_", "isNull"],
@@ -31,7 +30,9 @@
       "info",
       "time",
       "timeEnd",
-      "trace"
+      "trace",
+      "log",
+      "error"
     ],
     "no-construct": true,
     "no-constructor-vars": false,
