diff --git a/xmlbuilder/xmlbuilder-tests.ts b/xmlbuilder/xmlbuilder-tests.ts
new file mode 100644
index 000000000..bebc5f4d8
--- /dev/null
+++ b/xmlbuilder/xmlbuilder-tests.ts
@@ -0,0 +1,44 @@
+///
+
+import xmlbuilder = require('xmlbuilder');
+var xml = xmlbuilder.create;
+
+// https://github.com/oozcitak/xmlbuilder-js/blob/master/test/comment.coffee
+xml('comment', {}, {}, { headless: true }).comment('<>\'"&\t\n\r').end();
+
+// https://github.com/oozcitak/xmlbuilder-js/blob/master/test/instructions.coffee
+xml('test17', { headless: true }).ins('pi', 'mypi').end();
+
+xml('test17', { headless: true }).ins({ 'pi': 'mypi', 'pi2': 'mypi2', 'pi3': null }).end();
+
+xml('test17', { headless: true }).ins(['pi', 'pi2']).end();
+
+xml('test18', { headless: true })
+ .ins('renderCache.subset', '"Verdana" 0 0 ISO-8859-1 4 268 67 "#(),-./')
+ .ins('pitarget', () => 'pivalue')
+ .end();
+
+// https://github.com/oozcitak/xmlbuilder-js/blob/master/test/createxml.coffee
+xml('root')
+ .ele('xmlbuilder')
+ .att('for', 'node-js')
+ .com('CoffeeScript is awesome.')
+ .nod('repo')
+ .att('type', 'git')
+ .txt('git://github.com/oozcitak/xmlbuilder-js.git')
+ .up()
+ .up()
+ .ele('test')
+ .att('escaped', 'chars <>\'"&\t\n\r')
+ .txt('complete 100%<>\'"&\t\n\r')
+ .up()
+ .ele('cdata')
+ .cdata('this is a test\nSecond line')
+ .up()
+ .ele('raw')
+ .raw('&<>&')
+ .up()
+ .ele('atttest', { 'att': 'val' }, 'text')
+ .up()
+ .ele('atttest', 'text')
+ .end();
diff --git a/xmlbuilder/xmlbuilder.d.ts b/xmlbuilder/xmlbuilder.d.ts
new file mode 100644
index 000000000..6f13452c1
--- /dev/null
+++ b/xmlbuilder/xmlbuilder.d.ts
@@ -0,0 +1,89 @@
+// Type definitions for xmlbuilder
+// Project: https://github.com/oozcitak/xmlbuilder-js
+// Definitions by: Wallymathieu
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+declare module 'xmlbuilder' {
+ export = xmlbuilder;
+ class XMLDocType {
+ clone(): XMLDocType;
+ element(name: string, value?: Object): XMLDocType;
+ attList(elementName: string, attributeName: string, attributeType: string, defaultValueType?: string, defaultValue?: any): XMLDocType;
+ entity(name: string, value: any): XMLDocType;
+ pEntity(name: string, value: any): XMLDocType;
+ notation(name: string, value: any): XMLDocType;
+ cdata(value: string): XMLDocType;
+ comment(value: string): XMLDocType;
+ instruction(target: string, value: any): XMLDocType;
+ root(): XMLDocType;
+ document(): any;
+ toString(options?: Object, level?: Number): string;
+
+ ele(name: string, value?: Object): XMLDocType;
+ att(elementName: string, attributeName: string, attributeType: string, defaultValueType?: string, defaultValue?: any): XMLDocType;
+ ent(name: string, value: any): XMLDocType;
+ pent(name: string, value: any): XMLDocType;
+ not(name: string, value: any): XMLDocType;
+ dat(value: string): XMLDocType;
+ com(value: string): XMLDocType;
+ ins(target: string, value: any): XMLDocType;
+ up(): XMLDocType;
+ doc(): any;
+ }
+
+ class XMLElementOrXMLNode {
+ // XMLElement:
+ clone(): XMLElementOrXMLNode;
+ attribute(name: any, value?: any): XMLElementOrXMLNode;
+ att(name: any, value?: any): XMLElementOrXMLNode;
+ removeAttribute(name: string): XMLElementOrXMLNode;
+ instruction(target: string, value: any): XMLElementOrXMLNode;
+ instruction(array: Array): XMLElementOrXMLNode;
+ instruction(obj: Object): XMLElementOrXMLNode;
+ ins(target: string, value: any): XMLElementOrXMLNode;
+ ins(array: Array): XMLElementOrXMLNode;
+ ins(obj: Object): XMLElementOrXMLNode;
+ a(name: any, value?: any): XMLElementOrXMLNode;
+ i(target: string, value: any): XMLElementOrXMLNode;
+ i(array: Array): XMLElementOrXMLNode;
+ i(obj: Object): XMLElementOrXMLNode;
+ toString(options?:Object, level?:Number): string;
+ // XMLNode:
+ element(name: any, attributes?: Object, text?: any): XMLElementOrXMLNode;
+ ele(name: any, attributes?: Object, text?: any): XMLElementOrXMLNode;
+ insertBefore(name: any, attributes?: Object, text?: any): XMLElementOrXMLNode;
+ insertAfter(name: any, attributes?: Object, text?: any): XMLElementOrXMLNode;
+ remove(): XMLElementOrXMLNode;
+ node(name: any, attributes?: Object, text?: any): XMLElementOrXMLNode;
+ text(value: string): XMLElementOrXMLNode;
+ cdata(value: string): XMLElementOrXMLNode;
+ comment(value: string): XMLElementOrXMLNode;
+ raw(value: string): XMLElementOrXMLNode;
+ declaration(version: string, encoding: string, standalone: boolean): XMLElementOrXMLNode;
+ doctype(pubID: string, sysID: string): XMLDocType;
+ up(): XMLElementOrXMLNode;
+ root(): XMLElementOrXMLNode;
+ document(): any;
+ end(options?: Object): string;
+ prev(): XMLElementOrXMLNode;
+ next(): XMLElementOrXMLNode;
+ nod(name: any, attributes?: Object, text?: any): XMLElementOrXMLNode;
+ txt(value: string): XMLElementOrXMLNode;
+ dat(value: string): XMLElementOrXMLNode;
+ com(value: string): XMLElementOrXMLNode;
+ doc(): XMLElementOrXMLNode;
+ dec(version: string, encoding: string, standalone: boolean): XMLElementOrXMLNode;
+ dtd(pubID: string, sysID: string): XMLDocType;
+ e(name: any, attributes?: Object, text?: any): XMLElementOrXMLNode;
+ n(name: any, attributes?: Object, text?: any): XMLElementOrXMLNode;
+ t(value: string): XMLElementOrXMLNode;
+ d(value: string): XMLElementOrXMLNode;
+ c(value: string): XMLElementOrXMLNode;
+ r(value: string): XMLElementOrXMLNode;
+ u(): XMLElementOrXMLNode;
+ }
+
+ module xmlbuilder {
+ function create(name: string, xmldec?: Object, doctype?: any, options?: Object): XMLElementOrXMLNode;
+ }
+}