diff --git a/index.js b/index.js
index e13a009f578cdc66de89fae01c18ca0e8c3b5666..8d611ecaf3d7fc43edba41db4e1ded40d0deb24f 100755
--- a/index.js
+++ b/index.js
@@ -7,8 +7,21 @@ require('./sitegin/sitegin')({
   var sass = require('node-sass');
   var fs = require('fs');
 
+  var isRunning = false;
+  var runAgain = false;
+
   function run() {
-    jobs.runSequence('config','readFiles','parseHugo','print')
+    runAgain = false;
+    if(isRunning) {
+      runAgain = true;
+      return;
+    }
+    isRunning = true;
+    jobs.run('pipeline',jobs)
+    .then(function() {
+      isRunning = false;
+      if(runAgain) run();
+    })
     .catch(e => console.log(e.stack));
   }
 
diff --git a/sitegin/gitInfo.js b/sitegin/gitInfo.js
index bb0dc377cde042a26bb8fe8754956016518e21f2..076fce51bd1856db1d422c97d85eafef7b0d4fa6 100644
--- a/sitegin/gitInfo.js
+++ b/sitegin/gitInfo.js
@@ -1,4 +1,8 @@
-// Add git commit author and date to metadata
+/*
+ * Add date: {creation, modification, modified} and author: {name, email}
+ * to metadata if not already present
+ */
+
 var nodegit = require('nodegit');
 var git = require('nodegit-kit');
 var path = require('path');
@@ -73,51 +77,38 @@ var getFilesHistory = function() {
   });
 }
 
-module.exports = function() {
-  var tr = this;
-  tr.fancyname = "transformer git";
-
-  tr.pre = function(cb, articleList) {
-    getFilesHistory()
-    .then((filesHistory) => {
-      var todo = articleList.length;
-      articleList.forEach(function(article) {
-        var file = path.relative(pathToRepo, article.origFile);
-        var commits = filesHistory[file];
-        if(commits !== undefined) {
-          commits.sort(function(a,b){
-            return b.date - a.date;
-          });
-          var newestCommit = commits[0];
-          var oldestCommit = commits[commits.length-1];
+module.exports = function(obj) {
+  return getFilesHistory()
+  .then((filesHistory) => {
+    obj.pages.forEach(function(article) {
+      var file = path.relative(pathToRepo, article.filename);
+      var commits = filesHistory[file];
+      if(commits !== undefined) {
+        commits.sort(function(a,b){
+          return b.date - a.date;
+        });
+        var newestCommit = commits[0];
+        var oldestCommit = commits[commits.length-1];
 
-          if(article.metadata.date == undefined)
-            article.metadata.date = {};
+        if(article.metadata.date == undefined)
+          article.metadata.date = {};
 
-          if(article.metadata.date.creation == undefined)
-            article.metadata.date.creation = oldestCommit.date;
+        if(article.metadata.date.creation == undefined)
+          article.metadata.date.creation = oldestCommit.date;
 
-          article.metadata.date.modification = newestCommit.date;
-          article.metadata.date.modified = (newestCommit !== oldestCommit);
+        article.metadata.date.modification = newestCommit.date;
+        article.metadata.date.modified = (newestCommit !== oldestCommit);
 
-          if(article.metadata.author === undefined)
-            article.metadata.author = {}
-          if(article.metadata.author.name == undefined)
-            article.metadata.author.name = oldestCommit.author.name
-          if(article.metadata.author.email == undefined)
-            article.metadata.author.email = oldestCommit.author.email
+        if(article.metadata.author === undefined)
+          article.metadata.author = {}
+        if(article.metadata.author.name == undefined)
+          article.metadata.author.name = oldestCommit.author.name
+        if(article.metadata.author.email == undefined)
+          article.metadata.author.email = oldestCommit.author.email
 
-          article.commits = commits;
-        }
-
-        todo--;
-        if(todo == 0) cb();
-      });
-    })
-    .catch(function(err) {console.log(err.stack);});
-  }
-
-  tr.forEachPage = function(article, cb) {
-    cb();
-  }
+        article.commits = commits;
+      }
+    });
+    return obj;
+  })
 }
diff --git a/sitegin/parseHugo.js b/sitegin/parseHugo.js
index e0cd9a94443c7772624c2f62a2ce1045af7c9993..7b53e1e7dd93e606494fea11c7624b87039a77fc 100644
--- a/sitegin/parseHugo.js
+++ b/sitegin/parseHugo.js
@@ -18,6 +18,7 @@ var readPageWorker = function(content, articleName) {
   }
   var obj = {};
   obj.content = content.substring(fm_end+4);
+  obj.filename = articleName;
   try {
     obj.metadata = toml.parse(content.substring(0,fm_end-1)+"\n");
   } catch(e) {
diff --git a/sitegin/pipeline.js b/sitegin/pipeline.js
new file mode 100644
index 0000000000000000000000000000000000000000..0137a6f39a405cfdd79c0c7d57f8924ed3a88deb
--- /dev/null
+++ b/sitegin/pipeline.js
@@ -0,0 +1,7 @@
+/*
+ * This jobs just runs all job in the right order
+ */
+
+module.exports = function(jobs) {
+  return jobs.runSequence('config','readFiles','parseHugo','gitInfo','print');
+}
diff --git a/sitegin/sitegin.js b/sitegin/sitegin.js
index 0991f4c0cc07f3611f65148d9e7eb3452dabd1e6..eb24ec66dea60c050e0324bf181001de28cfc41b 100644
--- a/sitegin/sitegin.js
+++ b/sitegin/sitegin.js
@@ -4,19 +4,12 @@ module.exports = function(config) {
   return jobs.registerMultiple(
     config,
     ['config', './config'],
-    ['readFiles', './readFiles'],
+    ['gitInfo', './gitInfo'],
     ['parseHugo', './parseHugo'],
     ['print', './print'],
+    ['readFiles', './readFiles'],
 
-    ['transformer-git', './transformer-git'],
-    ['output-console', './output-console'],
-    ['output-filesystem', './output-filesystem'],
-    ['transformer-basichtml', './transformer-basichtml'],
-
-    ['transformer-markdown', './transformer-markdown'],
-    ['transformer-nunjucks', './transformer-nunjucks'],
-    ['transformer-urlizetags', './transformer-urlizetags'],
-    ['transformer-other', './transformer-other']
+    ['pipeline','./pipeline']
   )
   .then(function() {
     return jobs;