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
index cfbeb56b6..cf9bba9fa 100644
--- a/xmlbuilder/xmlbuilder.d.ts
+++ b/xmlbuilder/xmlbuilder.d.ts
@@ -3,83 +3,87 @@
// Definitions by: Oskar Gewalli
// Definitions: https://github.com/borisyankov/DefinitelyTyped
-declare class XMLDocType {
- clone(): XMLDocType;
- element(name, value): XMLDocType;
- attList(elementName, attributeName, attributeType, defaultValueType, defaultValue): XMLDocType;
- entity(name, value): XMLDocType;
- pEntity(name, value): XMLDocType;
- notation(name, value): XMLDocType;
- cdata(value): XMLDocType;
- comment(value): XMLDocType;
- instruction(target, value): XMLDocType;
- root(): XMLDocType;
- document(): any;
- toString(options, level): string;
-
- ele(name, value): XMLDocType;
- att(elementName, attributeName, attributeType, defaultValueType, defaultValue): XMLDocType;
- ent(name, value): XMLDocType;
- pent(name, value): XMLDocType;
- not(name, value): XMLDocType;
- dat(value): XMLDocType;
- com(value): XMLDocType;
- ins(target, value): XMLDocType;
- up(): XMLDocType;
- doc(): any;
-}
-
-declare class XMLNode {
- element(name, attributes, text): XMLNode;
- ele(name, attributes, text): XMLNode;
- insertBefore(name, attributes, text): XMLNode;
- insertAfter(name, attributes, text): XMLNode;
- remove(): XMLNode;
- node(name, attributes, text): XMLNode;
- text(value): XMLNode;
- cdata(value): XMLNode;
- comment(value): XMLNode;
- raw(value): XMLNode;
- declaration(version, encoding, standalone): XMLNode;
- doctype(pubID, sysID): XMLDocType;
- up(): XMLNode;
- root(): XMLNode;
- document(): any;
- end(options): string;
- prev(): XMLNode;
- next(): XMLNode;
- nod(name, attributes, text): XMLNode;
- txt(value): XMLNode;
- dat(value): XMLNode;
- com(value): XMLNode;
- doc(value): XMLNode;
- dec(version, encoding, standalone): XMLNode;
- dtd(pubID, sysID): XMLDocType;
- e(name, attributes, text): XMLNode;
- n(name, attributes, text): XMLNode;
- t(value): XMLNode;
- d(value): XMLNode;
- c(value): XMLNode;
- r(value): XMLNode;
- u(value): XMLNode;
-}
-
-declare class XMLElement extends XMLNode {
- clone(): XMLElement;
- attribute(name: string, value: any): XMLElement;
- att(name: string, value: any): XMLElement;
- removeAttribute(name: string): XMLElement;
- instruction(target, value): XMLElement;
- ins(target, value): XMLElement;
- a(name, value): XMLElement;
- i(target, value): XMLElement;
- toString(options?, level?): string;
-}
-
-interface XMLBuilderStatic {
- create(name: string, xmldec?: Object, doctype?: string, options?: Object): XMLElement;
-}
-
declare module 'xmlbuilder' {
- export = XMLBuilderStatic;
+ 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;
+ }
}