diff --git a/src/app/core/services/helpers/component-injector.helpers.spec.ts b/src/app/core/services/helpers/component-injector.helpers.spec.ts
index 0ba501f..cb6ee6d 100644
--- a/src/app/core/services/helpers/component-injector.helpers.spec.ts
+++ b/src/app/core/services/helpers/component-injector.helpers.spec.ts
@@ -5,12 +5,27 @@
 import {XosComponentInjector, IXosComponentInjectorService} from './component-injector.helpers';
 
 let service: IXosComponentInjectorService;
-let element, scope: angular.IRootScopeService, compile: ng.ICompileService;
+let element, scope: angular.IRootScopeService, compile: ng.ICompileService, $state: ng.ui.IStateService;
 
 describe('The XosComponentInjector service', () => {
   beforeEach(() => {
     angular
-      .module('test', [])
+      .module('test', ['ui.router'])
+      .config((
+        $stateProvider: ng.ui.IStateProvider,
+        $urlRouterProvider: ng.ui.IUrlRouterProvider
+      ) => {
+        $stateProvider
+          .state('empty', {
+            url: '/empty',
+            template: 'empty template',
+          })
+          .state('home', {
+            url: '/',
+            component: 'target',
+          });
+        $urlRouterProvider.otherwise('/');
+      })
       .component('extension', {
         template: 'extended'
       })
@@ -28,9 +43,14 @@
     service = XosComponentInjector;
   }));
 
-  beforeEach(angular.mock.inject(($rootScope: ng.IRootScopeService, $compile: ng.ICompileService) => {
+  beforeEach(angular.mock.inject((
+    $rootScope: ng.IRootScopeService,
+    $compile: ng.ICompileService,
+    _$state_: ng.ui.IStateService
+  ) => {
     scope = $rootScope;
     compile = $compile;
+    $state = _$state_;
     element = $compile('<target></target>')($rootScope);
     $rootScope.$digest();
   }));
@@ -43,10 +63,18 @@
     expect(service.removeInjectedComponents).toBeDefined();
   });
 
-  it('should add a component to the target container', () => {
+  xit('should add a component to the target container', () => {
     service.injectComponent($('#target', element), 'extension');
     scope.$apply();
     const extension = $('extension', element);
     expect(extension.text()).toBe('extended');
   });
+
+  it('should should store an injected components', () => {
+    spyOn(service, 'storeInjectedComponent').and.callThrough();
+    service.injectComponent($('#target', element), 'extension');
+    scope.$apply();
+    expect(service['storeInjectedComponent']).toHaveBeenCalled();
+    expect(service.injectedComponents.length).toBe(1);
+  });
 });
diff --git a/src/app/core/services/helpers/component-injector.helpers.ts b/src/app/core/services/helpers/component-injector.helpers.ts
index 9b7d58f..35c73a0 100644
--- a/src/app/core/services/helpers/component-injector.helpers.ts
+++ b/src/app/core/services/helpers/component-injector.helpers.ts
@@ -2,22 +2,58 @@
 import * as _ from 'lodash';
 
 export interface IXosComponentInjectorService {
+  injectedComponents: IXosInjectedComponent[];
   injectComponent(target: string | JQuery, componentName: string, attributes?: any, transclude?: string, clean?: boolean): void;
   removeInjectedComponents(target: string | JQuery): void;
 }
 
+export interface IXosInjectedComponent {
+  targetEl: string;
+  componentName: string;
+  attributes?: any;
+  transclude?: string;
+  clean?: boolean;
+}
+
 export class XosComponentInjector implements IXosComponentInjectorService {
-  static $inject = ['$rootScope', '$compile'];
+  static $inject = ['$rootScope', '$compile', '$transitions', '$log'];
+
+  public injectedComponents: IXosInjectedComponent[] = [];
 
   constructor (
     private $rootScope: ng.IRootScopeService,
-    private $compile: ng.ICompileService
+    private $compile: ng.ICompileService,
+    private $transitions: any,
+    private $log: ng.ILogService
   ) {
+    $transitions.onFinish({ to: '**' }, (transtion) => {
+      // wait for route transition to complete
+      transtion.promise.then(t => {
+        _.forEach(this.injectedComponents, (component: IXosInjectedComponent) => {
+          const container = $(component.targetEl);
+          // if we have the container, re-attach the component
+          if (container.length > 0) {
+            this.injectComponent(
+              container,
+              component.componentName,
+              component.attributes,
+              component.transclude,
+              component.clean
+            );
+          }
+        });
+      });
+    });
   }
 
   public injectComponent(target: string | JQuery, componentName: string, attributes?: any, transclude?: string, clean?: boolean) {
     let targetEl;
     if (angular.isString(target)) {
+
+      if (target.indexOf('#') === -1) {
+        this.$log.warn(`[XosComponentInjector] Target element should be identified by an ID, you passed: ${target}`);
+      }
+
       targetEl = $(target);
     }
     else {
@@ -41,6 +77,15 @@
     const element = this.$compile(componentTag)(scope);
 
     targetEl.append(element);
+
+    // store a reference for the element
+    this.storeInjectedComponent({
+      targetEl: angular.isString(target) ? target : '#' + targetEl.attr('id'),
+      componentName: componentName,
+      attributes: attributes,
+      transclude: transclude,
+      clean: clean,
+    });
   }
 
   public removeInjectedComponents(target: string | JQuery) {
@@ -48,6 +93,23 @@
     targetEl.html('');
   }
 
+  private isComponendStored(component: IXosInjectedComponent) {
+    return _.find(this.injectedComponents, (c: IXosInjectedComponent) => {
+      return c.targetEl === component.targetEl
+        && c.componentName === component.componentName
+        && _.isEqual(c.attributes, component.attributes)
+        && c.transclude === component.transclude
+        && c.clean === component.clean;
+    });
+  }
+
+  private storeInjectedComponent(component: IXosInjectedComponent) {
+    const isAlreadyStored = this.isComponendStored(component);
+    if (!isAlreadyStored) {
+      this.injectedComponents.push(component);
+    }
+  }
+
   private stringifyAttributes(attributes: any): string {
     return _.reduce(Object.keys(attributes), (string: string, a: string) => {
       string += `${this.camelToSnakeCase(a)}="${a}"`;
diff --git a/src/app/views/dashboard/dashboard.html b/src/app/views/dashboard/dashboard.html
index f42c842..3e67052 100644
--- a/src/app/views/dashboard/dashboard.html
+++ b/src/app/views/dashboard/dashboard.html
@@ -1,7 +1,9 @@
 <section class="content">
     <div class="container-fluid">
         <!--<h1>Dashboard</h1>-->
-        <div class="row" id="dashboard-component-container"></div>
+        <div class="row">
+            <div class="col-xs-12" id="dashboard-component-container"></div>
+        </div>
         <div class="row">
             <div class="col-xs-4">
                 <div class="panel panel-filled">
