diff --git a/csvToJsonReader/app.js b/csvToJsonReader/app.js
new file mode 100644
index 0000000..518c3aa
--- /dev/null
+++ b/csvToJsonReader/app.js
@@ -0,0 +1,9 @@
+'use strict';
+
+var csvJson = require('./csvToJson');
+console.log('starting');
+var data = csvJson().readFile('testfile.csv')
+console.log(data)
+
+console.log('Asynchronous conversion using streams')
+csvJson().readFileAsync('testfile.csv')
\ No newline at end of file
diff --git a/csvToJsonReader/csvToJson.js b/csvToJsonReader/csvToJson.js
new file mode 100644
index 0000000..c509b53
--- /dev/null
+++ b/csvToJsonReader/csvToJson.js
@@ -0,0 +1,77 @@
+(function () {
+  var fs = require('fs')
+  var csvReader = require('fast-csv')
+
+	module.exports = function(){
+
+		var methods = {};
+
+		methods.readFileAsync = function(filename) {
+            var stream = fs.createReadStream(filename);
+
+            var lineNumber = 0;
+            var headers = {};
+            var csvString = '';
+            csvReader.fromStream(stream)
+            .transform(function(data) {
+                  if(lineNumber === 0) {
+                      headers = data.map(function(d) {
+                      	return d.trim();
+                      });
+                      lineNumber++;
+                      return;
+                  }
+
+                lineNumber++;
+
+                var line = data.map(function(d) {
+                	return d.trim();
+                })
+                csvString = csvString + ' ' + methods.csvJsonLine(line, headers);
+                console.log(csvString);
+              })
+              .on('data', function(data) {
+                  //console.log(data);
+              })
+              .on('end', function() {
+                  console.log('done');
+              });
+        };
+
+		methods.csvJsonLine = function(csvLine, headers) {
+			var obj = {};
+
+			for(var j = 0; j < headers.length; j++) {
+				obj[headers[j]] = csvLine[j];
+			}
+
+			return JSON.stringify(obj);
+		};
+
+		methods.readFile = function(filename) {
+			var buffer = fs.readFileSync(filename);
+
+			var lines = buffer.toString().split('\n');
+
+			var headers = lines[0].split(',').map(function(d) {
+				return d.replace(/[\r]/g, '').trim();
+			});
+
+			var numberOfLines = lines.length;
+			var objArray = [];
+
+			for(var j = 1; j < numberOfLines; j++) {
+				var line = lines[j].split(',').map(function(d) {
+					return d.replace(/[\r]/g, '').trim();
+				});
+				var jsonObj = methods.csvJsonLine(line, headers);
+				objArray.push(jsonObj);
+			}
+
+			return objArray;
+		}
+
+		return methods;
+	};
+
+}());
diff --git a/csvToJsonReader/testfile.csv b/csvToJsonReader/testfile.csv
new file mode 100644
index 0000000..0e4847f
--- /dev/null
+++ b/csvToJsonReader/testfile.csv
@@ -0,0 +1,3 @@
+header1, header2, header3
+one, two, three
+four, five, six
\ No newline at end of file
diff --git a/csvToJsonReader/tests/testcsvJsonLine.js b/csvToJsonReader/tests/testcsvJsonLine.js
new file mode 100644
index 0000000..c03d2f7
--- /dev/null
+++ b/csvToJsonReader/tests/testcsvJsonLine.js
@@ -0,0 +1,13 @@
+var test = require('tape')
+var csvJson = require('../csvToJson')
+
+test('oneLineFile', function (t) {
+  var headers = ['header1', 'header2']
+  var line = ['one', 'two']
+
+  var result = csvJson().csvJsonLine(line, headers)
+
+  t.equal(result, '{"header1":"one","header2":"two"}')
+
+  t.end()
+})
diff --git a/csvToJsonReader/tests/testreadFile.js b/csvToJsonReader/tests/testreadFile.js
new file mode 100644
index 0000000..5ad18af
--- /dev/null
+++ b/csvToJsonReader/tests/testreadFile.js
@@ -0,0 +1,9 @@
+var test = require('tape');
+var csvJson = require('../csvToJson');
+
+test('simpleFile', function(t) {
+	var expectedResult = ['{"header1":"one","header2":"two","header3":"three"}','{"header1":"four","header2":"five","header3":"six"}'];
+	var result = csvJson().readFile('./csvToJsonReader/testfile.csv');
+	t.deepEqual(result, expectedResult);
+	t.end();
+});
\ No newline at end of file
diff --git a/package.json b/package.json
index 8930853..d0208c2 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
   "description": "Tabular Data support for Dat/hypercore",
   "main": "index.js",
   "scripts": {
-    "test": "standard && tape test/*.js"
+    "test": "tape csvToJsonReader/tests/*.js"
   },
   "repository": {
     "type": "git",
@@ -25,6 +25,7 @@
   },
   "devDependencies": {
     "standard": "^6.0.5",
-    "tape": "^4.4.0"
+    "tape": "^4.5.0",
+    "fast-csv": "^1.0.0"
   }
 }