diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md
index 5292ba4bf..1b2eda33d 100644
--- a/CONTRIBUTORS.md
+++ b/CONTRIBUTORS.md
@@ -125,6 +125,7 @@ All definitions files include a header with the author and editors, so at some p
* [highlight.js](https://github.com/isagalaev/highlight.js) (by [Niklas Mollenhauer](https://github.com/nikeee))
* [History.js](https://github.com/browserstate/history.js) (by [Boris Yankov](https://github.com/borisyankov))
* [Html2Canvas.js](https://github.com/niklasvh/html2canvas/) (by [Richard Hepburn](https://github.com/rwhepburn))
+* [htmlparser2](https://github.com/fb55/htmlparser2/) (by [James Roland Cabresos](https://github.com/staticfunction))
* [http-string-parser](https://github.com/apiaryio/http-string-parser) (by [MIZUNE Pine](https://github.com/pine613))
* [Humane.js](http://wavded.github.com/humane-js/) (by [John Vrbanac](https://github.com/jmvrbanac))
* [i18next](http://i18next.com/) (by [Maarten Docter](https://github.com/mdocter))
@@ -247,6 +248,7 @@ All definitions files include a header with the author and editors, so at some p
* [Moment.js](https://github.com/timrwood/moment) (by [Michael Lakerveld](https://github.com/Lakerfield))
* [MongoDB](http://mongodb.github.io/node-mongodb-native/) (from TypeScript samples, updated by [Niklas Mollenhauer](https://github.com/nikeee))
* [mongoose](http://mongoosejs.com/) (by [Hiroki Horiuchi](https://github.com/horiuchi/))
+* [morgan](https://github.com/expressjs/morgan/) (by [James Roland Cabresos](https://github.com/staticfunction/))
* [Mousetrap](http://craig.is/killing/mice) (by [Dániel Tar](https://github.com/qcz))
* [msgpack.js](https://github.com/uupaa/msgpack.js) (by [Shinya Mochizuki](https://github.com/enrapt-mochizuki))
* [Mustache.js](https://github.com/janl/mustache.js) (by [Boris Yankov](https://github.com/borisyankov))
@@ -272,6 +274,7 @@ All definitions files include a header with the author and editors, so at some p
* [OpenLayers](https://github.com/openlayers/openlayers) (by [Ilya Bolkhovsky](https://github.com/bolhovsky/))
* [Optimist](https://github.com/substack/node-optimist) (by [Carlos Ballesteros Velasco](https://github.com/soywiz))
* [Passport](http://passportjs.org/) (by [Hiroki Horiuchi](https://github.com/horiuchi/))
+* [passport-facebook](https://github.com/jaredhanson/passport-facebook) (by [James Roland Cabresos](https://github.com/staticfunction/))
* [passport-strategy](https://github.com/jaredhanson/passport-strategy) (by [Lior Mualem](https://github.com/liorm))
* [pathwatcher](http://atom.github.io/node-pathwatcher/) (by [vvakame](https://github.com/vvakame))
* [Parallel.js](https://github.com/adambom/parallel.js) (by [Josh Baldwin](https://github.com/jbaldwin))
diff --git a/htmlparser2/htmlparser2-tests.ts b/htmlparser2/htmlparser2-tests.ts
new file mode 100644
index 000000000..53f6ee2aa
--- /dev/null
+++ b/htmlparser2/htmlparser2-tests.ts
@@ -0,0 +1,24 @@
+///
+/**
+ * Created by staticfunction on 8/4/14.
+ */
+import htmlparser = require("htmlparser2");
+
+var parser = new htmlparser.Parser({
+ onopentag: (name:string, attribs:{[s:string]:string}) => {
+ if(name === "script" && attribs['type'] === "text/javascript"){
+ console.log("JS! Hooray!");
+ }
+ },
+ ontext: (text: string) => {
+ console.log("-->", text);
+ },
+ onclosetag: (tagname:string) => {
+ if(tagname === "script"){
+ console.log("That's it?!");
+ }
+ }
+});
+
+parser.write("Xyz ");
+parser.end();
diff --git a/htmlparser2/htmlparser2.d.ts b/htmlparser2/htmlparser2.d.ts
new file mode 100644
index 000000000..77fb0b983
--- /dev/null
+++ b/htmlparser2/htmlparser2.d.ts
@@ -0,0 +1,89 @@
+// Type definitions for htmlparser2 v3.7.x
+// Project: https://github.com/fb55/htmlparser2/
+// Definitions by: James Roland Cabresos
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+
+declare module "htmlparser2" {
+
+ export interface Handler {
+ onopentag?:(name:string, attribs:{[type:string]: string}) => void;
+ onopentagname?:(name:string) => void;
+ onattribute?:(name:string, value:string) => void;
+ ontext?:(text:string) => void;
+ onclosetag?: (text:string) => void;
+ onprocessinginstruction?:(name:string, data:string) => void;
+ oncomment?:(data:string) => void;
+ oncommentend?:() => void;
+ oncdatastart?:() => void;
+ oncdataend?:() => void;
+ onerror?:(error:Error) => void;
+ onreset?:() => void;
+ onend?:() => void;
+ }
+
+ export interface Options {
+
+ /***
+ * Indicates whether special tags (