diff --git a/sitegin/legacy/writeFiles.js b/sitegin/legacy/writeFiles.js
deleted file mode 100644
index fe92cc5083ea6dae232592a4d6dbe76268f6caa9..0000000000000000000000000000000000000000
--- a/sitegin/legacy/writeFiles.js
+++ /dev/null
@@ -1,21 +0,0 @@
-
-var fs = require('fs');
-var path = require('path');
-var mkdirp = require('mkdirp');
-var builddir = "build";
-if(process.argv[2] !== "compileonly") builddir = "build-debug";
-
-module.exports = function() {
-  var out = this;
-  out.fancyname = "output filesystem";
-  out.forEachPage = function(article, cb) {
-    mkdirp(path.dirname(builddir+'/'+article.file+"/index.html"), () => {
-      var file = builddir+'/'+article.file+"/index.html";
-      fs.writeFile(file, article.content, function(err){
-        if(err) throw err;
-        cb();
-      });
-    });
-  }
-}
-
diff --git a/sitegin/pipeline.js b/sitegin/pipeline.js
index 2c2efaef6c9cbbd5c4566e7160c5e6724c5f0044..b1efcffafd1fcfd56be63e744b0dbd2f02f5f1df 100644
--- a/sitegin/pipeline.js
+++ b/sitegin/pipeline.js
@@ -11,6 +11,7 @@ module.exports = function(jobs) {
     'markdown',
     'tags',
     'theme',
+    'writeFiles',
     'print'
   );
 }
diff --git a/sitegin/sitegin.js b/sitegin/sitegin.js
index ac5d3df63f3377a5daf20da0ebee6ad883c18ac1..bf5a0e514bcf9c56f52bcfeeea8be0afff60a9b4 100644
--- a/sitegin/sitegin.js
+++ b/sitegin/sitegin.js
@@ -13,6 +13,7 @@ module.exports = function(config) {
     ['tags', './tags'],
     ['nunjucks', './nunjucks'],
     ['theme', './theme'],
+    ['writeFiles', './writeFiles'],
 
     ['pipeline','./pipeline']
   )
diff --git a/sitegin/writeFiles.js b/sitegin/writeFiles.js
new file mode 100644
index 0000000000000000000000000000000000000000..04a17fd0a6e11e9989250e7f189c0e7e3e9e3d01
--- /dev/null
+++ b/sitegin/writeFiles.js
@@ -0,0 +1,26 @@
+
+var fs = require('fs');
+var path = require('path');
+var mkdirp = require('mkdirp');
+
+module.exports = function(obj) {
+  return new Promise(function(resolve,reject) {
+    var builddir = obj.config.builddir;
+    var todo = 0;
+
+    var writeFile = function(article) {
+      var filename = path.join(builddir,article.file,"index.html");
+      mkdirp(path.dirname(filename), function() {
+        fs.writeFile(filename, article.content, function(err) {
+          if(err) reject(err);
+          todo--;
+          if(todo <= 0) resolve(obj);
+        });
+      });
+    }
+    obj.pages.forEach(function(o) { writeFile(o); })
+    obj.redirects.forEach(function(o) { writeFile(o); })
+    obj.tags.forEach(function(o) { writeFile(o); })
+    if(todo <= 0) resolve(obj);
+  })
+}