diff --git a/xos/core/xoslib/xos-builder/gulp/build.js b/xos/core/xoslib/xos-builder/gulp/build.js
new file mode 100644
index 0000000..b001266
--- /dev/null
+++ b/xos/core/xoslib/xos-builder/gulp/build.js
@@ -0,0 +1,80 @@
+'use strict';
+
+// BUILD
+// 
+// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
+// .html => dashboards
+// .js (minified and concat) => static/js
+// 
+// The template are parsed and added to js with angular $templateCache
+
+var gulp = require('gulp');
+var ngmin = require('gulp-ngmin');
+var uglify = require('gulp-uglify');
+var templateCache = require('gulp-angular-templatecache');
+var runSequence = require('run-sequence');
+var minifyHtml = require("gulp-minify-html");
+var concat = require("gulp-concat");
+var del = require('del');
+var wiredep = require('wiredep');
+var babel = require('gulp-babel');
+
+var TEMPLATE_HEADER = '/*This code is autogenerated from the templates files */ angular.module("<%= module %>"<%= standalone %>).run(["$templateCache", function($templateCache) {';
+
+module.exports = function(options){
+    
+  gulp.task('clean', function(){
+    return del(['dist/**/*']);
+  });
+
+  gulp.task('scripts', function() {
+    return gulp.src([
+        'src/xosContentProvider.js',
+        'src/templates.js'
+      ])
+      .pipe(babel())
+      .pipe(ngmin())
+      .pipe(concat('xosContentProvider.js'))
+      .pipe(uglify())
+      .pipe(gulp.dest('dist'));
+  });
+
+  gulp.task('templates', function(){
+    return gulp.src("./src/templates/*.html")
+      .pipe(templateCache({
+        module: 'xos.contentProviderApp',
+        root: '../../static/templates/contentProvider/',
+        templateHeader: TEMPLATE_HEADER
+      }))
+      .pipe(gulp.dest("src"));
+  });
+
+  gulp.task('copyJs', function(){
+    return gulp.src('dist/xosContentProvider.js')
+      .pipe(gulp.dest('../static/js/'))
+  });
+
+  gulp.task('copyVendor', function(){
+    return gulp.src('dist/xosNgVendor.js')
+      .pipe(gulp.dest('../static/js/vendor/'));
+  });
+
+  gulp.task('wiredep', function(){
+    var bowerDeps = wiredep().js;
+    return gulp.src(bowerDeps)
+      .pipe(concat('xosNgVendor.js'))
+      .pipe(uglify())
+      .pipe(gulp.dest('dist'));
+  });
+
+  gulp.task('build', function() {
+    runSequence(
+      'clean',
+      'templates',
+      'scripts',
+      'copyJs',
+      'wiredep',
+      'copyVendor'
+    );
+  });
+}
\ No newline at end of file
diff --git a/xos/core/xoslib/xos-builder/gulpfile.js b/xos/core/xoslib/xos-builder/gulpfile.js
index 77a1ce2..7b84baf 100644
--- a/xos/core/xoslib/xos-builder/gulpfile.js
+++ b/xos/core/xoslib/xos-builder/gulpfile.js
@@ -1,77 +1,16 @@
 'use strict';
 
-// BUILD
-// 
-// The only purpose of this gulpfile is to build a XOS view and copy the correct files into
-// .html => dashboards
-// .js (minified and concat) => static/js
-// 
-// The template are parsed and added to js with angular $templateCache
-
 var gulp = require('gulp');
-var ngmin = require('gulp-ngmin');
-var uglify = require('gulp-uglify');
-var templateCache = require('gulp-angular-templatecache');
-var runSequence = require('run-sequence');
-var minifyHtml = require("gulp-minify-html");
-var concat = require("gulp-concat");
-var del = require('del');
-var wiredep = require('wiredep');
-var babel = require('gulp-babel');
+var wrench = require('wrench');
 
-var TEMPLATE_HEADER = '/*This code is autogenerated from the templates files */ angular.module("<%= module %>"<%= standalone %>).run(["$templateCache", function($templateCache) {';
+var options = {};
 
-gulp.task('clean', function(){
-  return del(['dist/**/*']);
+wrench.readdirSyncRecursive('./gulp')
+.map(function(file) {
+  console.log(file);
+  require('./gulp/' + file)(options);
 });
 
-gulp.task('scripts', function() {
-  return gulp.src([
-      'src/xosContentProvider.js',
-      'src/templates.js'
-    ])
-    .pipe(babel())
-    .pipe(ngmin())
-    .pipe(concat('xosContentProvider.js'))
-    .pipe(uglify())
-    .pipe(gulp.dest('dist'));
-});
-
-gulp.task('templates', function(){
-  return gulp.src("./src/templates/*.html")
-    .pipe(templateCache({
-      module: 'xos.contentProviderApp',
-      root: '../../static/templates/contentProvider/',
-      templateHeader: TEMPLATE_HEADER
-    }))
-    .pipe(gulp.dest("src"));
-});
-
-gulp.task('copyJs', function(){
-  return gulp.src('dist/xosContentProvider.js')
-    .pipe(gulp.dest('../static/js/'))
-});
-
-gulp.task('copyVendor', function(){
-  return gulp.src('dist/xosNgVendor.js')
-    .pipe(gulp.dest('../static/js/vendor/'));
-});
-
-gulp.task('wiredep', function(){
-  var bowerDeps = wiredep().js;
-  return gulp.src(bowerDeps)
-    .pipe(concat('xosNgVendor.js'))
-    .pipe(uglify())
-    .pipe(gulp.dest('dist'));
-});
-
-gulp.task('default', function() {
-  runSequence(
-    'clean',
-    'templates',
-    'scripts',
-    'copyJs',
-    'wiredep',
-    'copyVendor'
-  );
+gulp.task('default', ['clean'], function () {
+  gulp.start('build');
 });
diff --git a/xos/core/xoslib/xos-builder/package.json b/xos/core/xoslib/xos-builder/package.json
index c9bdc6a..1348663 100644
--- a/xos/core/xoslib/xos-builder/package.json
+++ b/xos/core/xoslib/xos-builder/package.json
@@ -24,6 +24,7 @@
     "gulp-ngmin": "^0.3.0",
     "gulp-uglify": "^1.4.2",
     "run-sequence": "^1.1.4",
-    "wiredep": "^3.0.0-beta"
+    "wiredep": "^3.0.0-beta",
+    "wrench": "^1.5.8"
   }
 }
