diff --git a/bl/bl-tests.ts b/bl/bl-tests.ts
new file mode 100644
index 0000000000..96bfb8e3bc
--- /dev/null
+++ b/bl/bl-tests.ts
@@ -0,0 +1,68 @@
+///
+
+import BufferList = require('bl');
+
+var bl: BufferList;
+var buffer: Buffer;
+var offset: number;
+var num: number;
+var str: string;
+var noAssert: boolean;
+
+bl = new BufferList();
+bl = new BufferList((err:Error, buffer:Buffer) => {
+
+});
+
+bl.append(buffer);
+num = bl.get(num);
+
+buffer = bl.slice(num, num);
+buffer = bl.slice(num);
+buffer = bl.slice();
+
+bl.copy(buffer, num, num, num);
+bl.copy(buffer, num, num);
+bl.copy(buffer, num);
+bl.copy(buffer);
+
+bl = bl.duplicate();
+
+bl.consume();
+bl.consume(num);
+
+str = bl.toString(str, num, num);
+str = bl.toString(str, num);
+str = bl.toString(str);
+str = bl.toString();
+
+num = bl.length;
+
+buffer = bl.readDoubleBE(offset, noAssert);
+buffer = bl.readDoubleBE(offset);
+buffer = bl.readDoubleLE(offset, noAssert);
+buffer = bl.readDoubleLE(offset);
+buffer = bl.readFloatBE(offset, noAssert);
+buffer = bl.readFloatBE(offset);
+buffer = bl.readFloatLE(offset, noAssert);
+buffer = bl.readFloatLE(offset);
+buffer = bl.readInt32BE(offset, noAssert);
+buffer = bl.readInt32BE(offset);
+buffer = bl.readInt32LE(offset, noAssert);
+buffer = bl.readInt32LE(offset);
+buffer = bl.readUInt32BE(offset, noAssert);
+buffer = bl.readUInt32BE(offset);
+buffer = bl.readUInt32LE(offset, noAssert);
+buffer = bl.readUInt32LE(offset);
+buffer = bl.readInt16BE(offset, noAssert);
+buffer = bl.readInt16BE(offset);
+buffer = bl.readInt16LE(offset, noAssert);
+buffer = bl.readInt16LE(offset);
+buffer = bl.readUInt16BE(offset, noAssert);
+buffer = bl.readUInt16BE(offset);
+buffer = bl.readUInt16LE(offset, noAssert);
+buffer = bl.readUInt16LE(offset);
+buffer = bl.readInt8(offset, noAssert);
+buffer = bl.readInt8(offset);
+buffer = bl.readUInt8(offset, noAssert);
+buffer = bl.readUInt8(offset);
diff --git a/bl/bl.d.ts b/bl/bl.d.ts
new file mode 100644
index 0000000000..c277ea44b4
--- /dev/null
+++ b/bl/bl.d.ts
@@ -0,0 +1,40 @@
+// Type definitions for BufferList v0.8.0
+// Project: https://github.com/rvagg/bl
+// Definitions by: Bart van der Schoor
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+///
+
+declare module 'bl' {
+ import stream = require('stream');
+
+ class BufferList extends stream.Duplex {
+ new (callback?:(err:Error, buffer:Buffer) => void): void;
+
+ append(buffer: Buffer):void;
+ get(index: number): number;
+ slice(start?: number, end?: number): Buffer;
+ copy(dest: Buffer, destStart?: number, srcStart?: number, srcEnd?: number): void;
+ duplicate(): BufferList;
+ consume(bytes?: number): void;
+ toString(encoding?: string, start?: number, end?: number): string;
+ length: number;
+
+ readDoubleBE(offset: number, noAssert?: boolean): Buffer;
+ readDoubleLE(offset: number, noAssert?: boolean): Buffer;
+ readFloatBE(offset: number, noAssert?: boolean): Buffer;
+ readFloatLE(offset: number, noAssert?: boolean): Buffer;
+ readInt32BE(offset: number, noAssert?: boolean): Buffer;
+ readInt32LE(offset: number, noAssert?: boolean): Buffer;
+ readUInt32BE(offset: number, noAssert?: boolean): Buffer;
+ readUInt32LE(offset: number, noAssert?: boolean): Buffer;
+ readInt16BE(offset: number, noAssert?: boolean): Buffer;
+ readInt16LE(offset: number, noAssert?: boolean): Buffer;
+ readUInt16BE(offset: number, noAssert?: boolean): Buffer;
+ readUInt16LE(offset: number, noAssert?: boolean): Buffer;
+ readInt8(offset: number, noAssert?: boolean): Buffer;
+ readUInt8(offset: number, noAssert?: boolean): Buffer;
+ }
+
+ export = BufferList;
+}