diff --git a/node_modules/clone-stats/LICENSE.md b/node_modules/clone-stats/LICENSE.md
new file mode 100644
index 0000000..146cb32
--- /dev/null
+++ b/node_modules/clone-stats/LICENSE.md
@@ -0,0 +1,21 @@
+## The MIT License (MIT) ##
+
+Copyright (c) 2014 Hugh Kennedy
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in
+all copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
+THE SOFTWARE.
diff --git a/node_modules/clone-stats/README.md b/node_modules/clone-stats/README.md
new file mode 100644
index 0000000..8b12b6f
--- /dev/null
+++ b/node_modules/clone-stats/README.md
@@ -0,0 +1,17 @@
+# clone-stats [![Flattr this!](https://api.flattr.com/button/flattr-badge-large.png)](https://flattr.com/submit/auto?user_id=hughskennedy&url=http://github.com/hughsk/clone-stats&title=clone-stats&description=hughsk/clone-stats%20on%20GitHub&language=en_GB&tags=flattr,github,javascript&category=software)[![experimental](http://hughsk.github.io/stability-badges/dist/experimental.svg)](http://github.com/hughsk/stability-badges) #
+
+Safely clone node's
+[`fs.Stats`](http://nodejs.org/api/fs.html#fs_class_fs_stats) instances without
+losing their class methods, i.e. `stat.isDirectory()` and co.
+
+## Usage ##
+
+[![clone-stats](https://nodei.co/npm/clone-stats.png?mini=true)](https://nodei.co/npm/clone-stats)
+
+### `copy = require('clone-stats')(stat)` ###
+
+Returns a clone of the original `fs.Stats` instance (`stat`).
+
+## License ##
+
+MIT. See [LICENSE.md](http://github.com/hughsk/clone-stats/blob/master/LICENSE.md) for details.
diff --git a/node_modules/clone-stats/index.js b/node_modules/clone-stats/index.js
new file mode 100644
index 0000000..e797cfe
--- /dev/null
+++ b/node_modules/clone-stats/index.js
@@ -0,0 +1,13 @@
+var Stat = require('fs').Stats
+
+module.exports = cloneStats
+
+function cloneStats(stats) {
+  var replacement = new Stat
+
+  Object.keys(stats).forEach(function(key) {
+    replacement[key] = stats[key]
+  })
+
+  return replacement
+}
diff --git a/node_modules/clone-stats/package.json b/node_modules/clone-stats/package.json
new file mode 100644
index 0000000..4d25bda
--- /dev/null
+++ b/node_modules/clone-stats/package.json
@@ -0,0 +1,60 @@
+{
+  "_from": "clone-stats@^1.0.0",
+  "_id": "clone-stats@1.0.0",
+  "_inBundle": false,
+  "_integrity": "sha1-s3gt/4u1R04Yuba/D9/ngvh3doA=",
+  "_location": "/clone-stats",
+  "_phantomChildren": {},
+  "_requested": {
+    "type": "range",
+    "registry": true,
+    "raw": "clone-stats@^1.0.0",
+    "name": "clone-stats",
+    "escapedName": "clone-stats",
+    "rawSpec": "^1.0.0",
+    "saveSpec": null,
+    "fetchSpec": "^1.0.0"
+  },
+  "_requiredBy": [
+    "/vinyl"
+  ],
+  "_resolved": "https://registry.npmjs.org/clone-stats/-/clone-stats-1.0.0.tgz",
+  "_shasum": "b3782dff8bb5474e18b9b6bf0fdfe782f8777680",
+  "_spec": "clone-stats@^1.0.0",
+  "_where": "C:\\Users\\marcr\\Desktop\\KorAp\\Git\\Kalamar\\node_modules\\vinyl",
+  "author": {
+    "name": "Hugh Kennedy",
+    "email": "hughskennedy@gmail.com",
+    "url": "http://hughsk.io/"
+  },
+  "browser": "index.js",
+  "bugs": {
+    "url": "https://github.com/hughsk/clone-stats/issues"
+  },
+  "bundleDependencies": false,
+  "dependencies": {},
+  "deprecated": false,
+  "description": "Safely clone node's fs.Stats instances without losing their class methods",
+  "devDependencies": {
+    "tape": "~2.3.2"
+  },
+  "homepage": "https://github.com/hughsk/clone-stats",
+  "keywords": [
+    "stats",
+    "fs",
+    "clone",
+    "copy",
+    "prototype"
+  ],
+  "license": "MIT",
+  "main": "index.js",
+  "name": "clone-stats",
+  "repository": {
+    "type": "git",
+    "url": "git://github.com/hughsk/clone-stats.git"
+  },
+  "scripts": {
+    "test": "node test"
+  },
+  "version": "1.0.0"
+}
diff --git a/node_modules/clone-stats/test.js b/node_modules/clone-stats/test.js
new file mode 100644
index 0000000..e4bb281
--- /dev/null
+++ b/node_modules/clone-stats/test.js
@@ -0,0 +1,36 @@
+var test = require('tape')
+var clone = require('./')
+var fs = require('fs')
+
+test('file', function(t) {
+  compare(t, fs.statSync(__filename))
+  t.end()
+})
+
+test('directory', function(t) {
+  compare(t, fs.statSync(__dirname))
+  t.end()
+})
+
+function compare(t, stat) {
+  var copy = clone(stat)
+
+  t.deepEqual(stat, copy, 'clone has equal properties')
+  t.ok(stat instanceof fs.Stats, 'original is an fs.Stat')
+  t.ok(copy instanceof fs.Stats, 'copy is an fs.Stat')
+
+  ;['isDirectory'
+  , 'isFile'
+  , 'isBlockDevice'
+  , 'isCharacterDevice'
+  , 'isSymbolicLink'
+  , 'isFIFO'
+  , 'isSocket'
+  ].forEach(function(method) {
+    t.equal(
+        stat[method].call(stat)
+      , copy[method].call(copy)
+      , 'equal value for stat.' + method + '()'
+    )
+  })
+}
