diff --git a/views/ngXosViews/UITutorial/src/index.html b/views/ngXosViews/UITutorial/src/index.html
index e790d6e..6819b46 100644
--- a/views/ngXosViews/UITutorial/src/index.html
+++ b/views/ngXosViews/UITutorial/src/index.html
@@ -39,4 +39,7 @@
 <!-- inject:js -->
 <script src="/vendor/ng-xos-lib/dist/ngXosHelpers.min.js"></script>
 <script src="/.tmp/main.js"></script>
+<script src="/.tmp/responseHandler.js"></script>
+<script src="/.tmp/exploreCmd.js"></script>
+<script src="/.tmp/errorHandler.js"></script>
 <!-- endinject -->
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/errorHandler.js b/views/ngXosViews/UITutorial/src/js/errorHandler.js
new file mode 100644
index 0000000..dbe41f4
--- /dev/null
+++ b/views/ngXosViews/UITutorial/src/js/errorHandler.js
@@ -0,0 +1,10 @@
+(function () {
+  'use strict';
+  angular.module('xos.UITutorial')
+  .service('ErrorHandler', function(){
+    this.print = (msg, done) => {
+      const errorTpl = _.template(`<span class="error">[ERROR] <%= msg %></span>`);
+      done(errorTpl({msg: msg}));
+    };
+  });
+})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/exploreCmd.js b/views/ngXosViews/UITutorial/src/js/exploreCmd.js
new file mode 100644
index 0000000..d4bba90
--- /dev/null
+++ b/views/ngXosViews/UITutorial/src/js/exploreCmd.js
@@ -0,0 +1,100 @@
+(function () {
+  'use strict';
+  angular.module('xos.UITutorial')
+  .service('ExploreCmd', function($injector, ResponseHandler, ErrorHandler){
+
+    this.setup = (shell) => {
+      shell.setCommandHandler('resource', {
+        exec: (cmd, args, done) => {
+          switch(args[0]){
+            case 'list':
+              return listAvailableResources(done);
+              break;
+            default:
+              // use the resource
+              const resourceName = args.shift();
+              const method = args.shift();
+              return consumeResource(resourceName, method, args, done);
+          }
+        },
+        completion: function(cmd, arg, line, callback) {
+          const args = ['list'].concat(getAvailableResources());
+          if(line.text.match(/resource\s[A-Z][a-z]+\s/)){
+            // if arg is a resource, then return available methods
+            if(args.indexOf(arg) !== -1){
+              arg = '';
+            }
+            const methods = ['query', 'get', 'save', '$save', 'delete'];
+            return callback(shell.bestMatch(arg, methods));
+          }
+          return callback(shell.bestMatch(arg, args));
+        }
+      });
+    };
+
+    const getAvailableResources = () => {
+      return angular.module('xos.helpers')._invokeQueue
+          .filter((d) => {
+            if(d[1] !== 'service'){
+              return false;
+            }
+            const serviceDeps = d[2][1];
+            return serviceDeps.indexOf('$resource') !== -1;
+          })
+          .reduce((list, i) => list.concat([i[2][0]]), []);
+    }
+
+    const listAvailableResources = (done) => {
+      const resources = getAvailableResources()
+          .reduce((html, i) => `${html}${i}<br/>`, '');
+      done(resources);
+    }
+
+    const consumeResource = (resourceName, method, args, done) => {
+
+      // TODO if not resourceName/method print cmd instructions
+
+      if(getAvailableResources().indexOf(resourceName) === -1){
+        return ErrorHandler.print(`Resource "${resourceName}" does not exists`, done);
+      }
+
+      if(['query', 'get', 'save', '$save', 'delete'].indexOf(method) === -1){
+        return ErrorHandler.print(`Method "${method}" not allowed`, done);
+      }
+
+      let Resource;
+      try{
+        Resource = $injector.get(resourceName);
+
+        // TODO @Teo if get/delete check for arguments
+        let params = {};
+
+        // if the method require arguments checks for them
+        if(['get', '$save', 'delete'].indexOf(method) !== -1){
+          if(args.length === 0){
+            return ErrorHandler.print(`Method "${method}" require parameters`, done);
+          }
+        }
+
+        // if there are arguments parse them
+        if(args.length > 0){
+          params = eval(`(${args[0]})`);
+        }
+
+        // if it is a query is not possible to use id as parameter
+        if(method === 'query' && angular.isDefined(params.id)){
+          return ErrorHandler.print(`Is not possible to use "id" as filter in method "${method}", use "get" instead!`, done);
+        }
+
+        Resource[method](params).$promise
+        .then(res => {
+          return ResponseHandler.parse(res, done);
+        });
+      }
+      catch(e){
+        return ErrorHandler.print(`Failed to inject resource "${resourceName}"`, done);
+      }
+    };
+
+  });
+})();
\ No newline at end of file
diff --git a/views/ngXosViews/UITutorial/src/js/main.js b/views/ngXosViews/UITutorial/src/js/main.js
index 818d4f5..bc5c27e 100644
--- a/views/ngXosViews/UITutorial/src/js/main.js
+++ b/views/ngXosViews/UITutorial/src/js/main.js
@@ -23,147 +23,23 @@
     bindToController: true,
     controllerAs: 'vm',
     templateUrl: 'templates/js-shell.tpl.html',
-    controller: function($injector){
+    controller: function(ExploreCmd){
       var history = new Josh.History({ key: 'helloworld.history'});
       var shell = Josh.Shell({history: history});
 
-      shell.onNewPrompt(function(callback) {
-        callback('[ngXosLib] $ ');
+      shell.onNewPrompt(function(done) {
+        done('[ngXosLib] $ ');
       });
 
-      const errorHandler = (msg, done) => {
-        const errorTpl = _.template(`<span class="error">[ERROR] <%= msg %></span>`);
-        done(errorTpl({msg: msg}));
-      }
-
-      const parseResponse = (res, done) => {
-
-        // TODO @Arpit format res (it can be an array or an object),
-        // it is better if the output is a valid JSON (that we can copy and paste)
-        // TODO handle 204/No-Content response
-        if(angular.isArray(res)){
-          res = res.map(i => {
-            return JSON.stringify(i, ['id', 'name', 'max_instances'], 2) + '<br/>';
-          });
-        }
-        else {
-          res = JSON.stringify(res, ['id', 'name', 'max_instances'], 2);
-        }
-
-        done(res);
-      }
-
-      const getAvailableResources = () => {
-        return angular.module('xos.helpers')._invokeQueue
-            .filter((d) => {
-              if(d[1] !== 'service'){
-                return false;
-              }
-              const serviceDeps = d[2][1];
-              return serviceDeps.indexOf('$resource') !== -1;
-            })
-            .reduce((list, i) => list.concat([i[2][0]]), []);
-      }
-
-      const listAvailableResources = (done) => {
-        const resources = getAvailableResources()
-            .reduce((html, i) => `${html}${i}<br/>`, '');
-        done(resources);
-      }
-
-      const consumeResource = (resourceName, method, args, done) => {
-
-        if(getAvailableResources().indexOf(resourceName) === -1){
-          return errorHandler(`Resource "${resourceName}" does not exists`, done);
-        }
-
-        if(['query', 'get', 'save', '$save', 'delete'].indexOf(method) === -1){
-          return errorHandler(`Method "${method}" not allowed`, done);
-        }
-
-        let Resource;
-        try{
-          Resource = $injector.get(resourceName);
-
-          // TODO @Teo if get/delete check for arguments
-          let params = {};
-
-          // if the method require arguments checks for them
-          if(['get', '$save', 'delete'].indexOf(method) !== -1){
-            if(args.length === 0){
-              return errorHandler(`Method "${method}" require parameters`, done);
-            }
-          }
-
-          // if there are arguments parse them
-          if(args.length > 0){
-            params = eval(`(${args[0]})`);
-          }
-
-          // if it is a query is not possible to use id as parameter
-          if(method === 'query' && angular.isDefined(params.id)){
-            return errorHandler(`Is not possible to use "id" as filter in method "${method}", use "get" instead!`, done);
-          }
-
-          Resource[method](params).$promise
-          .then(res => {
-            return parseResponse(res, done);
-          });
-        }
-        catch(e){
-          console.log(e);
-          return errorHandler(`Failed to inject resource "${resourceName}"`, done);
-        }
-      }
-
-      shell.setCommandHandler('resource', {
+      shell.setCommandHandler('explore', {
         exec: (cmd, args, done) => {
-          switch(args[0]){
-            case 'list':
-              return listAvailableResources(done);
-              break;
-            default:
-              // use the resource
-              const resourceName = args.shift();
-              const method = args.shift();
-              return consumeResource(resourceName, method, args, done);
-          }
-        },
-        completion: function(cmd, arg, line, callback) {
-          const args = ['list'].concat(getAvailableResources());
-          if(line.text.match(/resource\s[A-Z][a-z]+\s/)){
-            // if arg is a resource, then return available methods
-            if(args.indexOf(arg) !== -1){
-              arg = '';
-            }
-            const methods = ['query', 'get', 'save', '$save', 'delete'];
-            return callback(shell.bestMatch(arg, methods));
-          }
-          return callback(shell.bestMatch(arg, args));
-        }
-      })
-
-      shell.setCommandHandler('slices', {
-        exec: (cmd, args, done) => {
-          Slices.query().$promise
-          .then(res => {
-            res = res.map(i => {
-              return JSON.stringify(i, ['id', 'name', 'max_instances'], 2);
-            });
-            
-            res = res.reduce((response, item) => {
-              return `${response},<br>${item}`;
-            });
-
-            done(res);
-          })
-          .catch(err => {
-            console.log(err);
-            done('An error occurred');
-          })
+          ExploreCmd.setup(shell);
+          done();
         }
       });
 
+
+
       shell.activate();
     }
   };
diff --git a/views/ngXosViews/UITutorial/src/js/responseHandler.js b/views/ngXosViews/UITutorial/src/js/responseHandler.js
new file mode 100644
index 0000000..28146b5
--- /dev/null
+++ b/views/ngXosViews/UITutorial/src/js/responseHandler.js
@@ -0,0 +1,21 @@
+(function () {
+  'use strict';
+  angular.module('xos.UITutorial')
+  .service('ResponseHandler', function(){
+    this.parse = (res, done) => {
+      // TODO @Arpit format res (it can be an array or an object),
+      // it is better if the output is a valid JSON (that we can copy and paste)
+      // TODO handle 204/No-Content response
+      if(angular.isArray(res)){
+        res = res.map(i => {
+          return JSON.stringify(i, ['id', 'name', 'max_instances'], 2) + '<br/>';
+        });
+      }
+      else {
+        res = JSON.stringify(res, ['id', 'name', 'max_instances'], 2);
+      }
+
+      done(res);
+    };
+  });
+})();
\ No newline at end of file
