diff --git a/src/app/extender/index.ts b/src/app/extender/index.ts
new file mode 100644
index 0000000..622491a
--- /dev/null
+++ b/src/app/extender/index.ts
@@ -0,0 +1,21 @@
+import {xosDataSources} from '../datasources/index';
+export const xosExtender = 'xosExtender';
+
+import 'angular-ui-bootstrap';
+import 'angular-animate';
+import 'angular-toastr';
+import 'oclazyload';
+import {XosOnboarder, IXosOnboarder} from './services/onboard.service';
+
+
+(function () {
+  angular.module(xosExtender, [
+    'oc.lazyLoad',
+    xosDataSources
+  ])
+    .service('XosOnboarder', XosOnboarder)
+    .run(function ($log: ng.ILogService, XosOnboarder: IXosOnboarder) {
+      $log.info('[XosOnboarder] Setup');
+    });
+})();
+
diff --git a/src/app/extender/services/onboard.service.spec.ts b/src/app/extender/services/onboard.service.spec.ts
new file mode 100644
index 0000000..f9373c9
--- /dev/null
+++ b/src/app/extender/services/onboard.service.spec.ts
@@ -0,0 +1,69 @@
+import * as angular from 'angular';
+import 'angular-mocks';
+import 'angular-resource';
+import {Subject} from 'rxjs';
+import {XosOnboarder, IXosOnboarder} from './onboard.service';
+import {IWSEventService} from '../../datasources/websocket/global';
+
+let service, $ocLazyLoad;
+
+const subject = new Subject();
+
+const MockWs: IWSEventService = {
+  list() {
+    return subject.asObservable();
+  }
+};
+
+const MockPromise = {
+  then: (cb) => {
+    cb('done');
+    return MockPromise;
+  },
+  catch: (cb) => {
+    cb('err');
+    return MockPromise;
+  }
+};
+
+const MockLoad = {
+  load: () => {
+    return MockPromise;
+  }
+};
+
+describe('The XosOnboarder service', () => {
+
+  beforeEach(() => {
+
+    angular
+      .module('XosOnboarder', [])
+      .value('WebSocket', MockWs)
+      .value('$ocLazyLoad', MockLoad)
+      .service('XosOnboarder', XosOnboarder);
+
+    angular.mock.module('XosOnboarder');
+  });
+
+  beforeEach(angular.mock.inject((
+    XosOnboarder: IXosOnboarder,
+    _$ocLazyLoad_: any
+  ) => {
+    $ocLazyLoad = _$ocLazyLoad_;
+    spyOn($ocLazyLoad, 'load').and.callThrough();
+    service = XosOnboarder;
+  }));
+
+  describe('when receive an event', () => {
+    it('should use $ocLazyLoad to add modules to the app', () => {
+      subject.next({
+        msg: {
+          app: 'sample',
+          files: ['vendor.js', 'app.js']
+        }
+      });
+      expect($ocLazyLoad.load).toHaveBeenCalledWith('vendor.js');
+      expect($ocLazyLoad.load).toHaveBeenCalledWith('app.js');
+    });
+  });
+});
diff --git a/src/app/extender/services/onboard.service.ts b/src/app/extender/services/onboard.service.ts
new file mode 100644
index 0000000..70d830c
--- /dev/null
+++ b/src/app/extender/services/onboard.service.ts
@@ -0,0 +1,56 @@
+import {IWSEventService} from '../../datasources/websocket/global';
+
+export interface IXosOnboarder {
+
+}
+
+export class XosOnboarder implements IXosOnboarder {
+  static $inject = ['$timeout', '$log', '$q', 'WebSocket', '$ocLazyLoad'];
+
+  constructor(
+    private $timeout: ng.ITimeoutService,
+    private $log: ng.ILogService,
+    private $q: ng.IQService,
+    private webSocket: IWSEventService,
+    private $ocLazyLoad: any // TODO add definition
+  ) {
+    this.$log.info('[XosOnboarder] Setup');
+    this.webSocket.list()
+      .filter((e) => {
+        this.$log.log(e);
+        // TODO define event format
+        return e.msg['files'].length > 0;
+      })
+      .subscribe(
+        (event) => {
+          this.loadFile(event.msg['files'])
+            .then((res) => {
+              this.$log.info(`[XosOnboarder] All files loaded for app: ${event.msg['app']}`);
+            });
+        }
+      );
+  }
+
+  // NOTE files needs to be loaded in order, so async loop!
+  private loadFile(files: string[], d?: ng.IDeferred<any>): ng.IPromise<string[]> {
+    if (!angular.isDefined(d)) {
+      d = this.$q.defer();
+    }
+    const file = files.shift();
+    this.$log.info(`[XosOnboarder] Loading file: ${file}`);
+    this.$ocLazyLoad.load(file)
+      .then((res) => {
+        this.$log.info(`[XosOnboarder] Loaded file: `, file);
+        if (files.length > 0) {
+          return this.loadFile(files, d);
+        }
+        return d.resolve(file);
+      })
+      .catch((err) => {
+        this.$log.error(`[XosOnboarder] Failed to load file: `, err);
+        d.reject(err);
+      });
+
+    return d.promise;
+  }
+}
