diff --git a/long/long-tests.ts b/long/long-tests.ts
new file mode 100644
index 0000000000..35b0d1eeaf
--- /dev/null
+++ b/long/long-tests.ts
@@ -0,0 +1,68 @@
+///
+
+// --- commonjs ---
+import Long = require("long");
+// --- browser ---
+//var Long = dcodeIO.Long;
+
+var val:Long;
+var n:number;
+var b:boolean;
+var s:string;
+
+val = new (Long)(0xFFFFFFFF, 0x7FFFFFFF);
+
+val = Long.from28Bits(0xFFFFFFF, 0xFFFFFFF, 0xFF);
+
+val = Long.fromInt(-1, true);
+n = val.low;
+n = val.high;
+b = val.unsigned;
+s = val.toString();
+
+val = val.add(val);
+val = val.and(val);
+val = val.clone();
+n = val.compare(val);
+val = val.div(val);
+b = val.equals(val);
+n = val.getHighBits();
+n = val.getHighBitsUnsigned();
+n = val.getLowBits();
+n = val.getLowBitsUnsigned();
+n = val.getNumBitsAbs();
+b = val.greaterThan(val);
+b = val.greaterThanOrEqual(val);
+b = val.isEven();
+b = val.isNegative();
+b = val.isOdd();
+b = val.isZero();
+b = val.lessThan(val);
+b = val.lessThanOrEqual(val);
+val = val.modulo(val);
+val = val.multiply(val);
+val = val.negate();
+val = val.not();
+b = val.notEquals(val);
+val = val.or(val);
+val = val.shiftLeft(2);
+val = val.shiftRight(1);
+val = val.shiftRightUnsigned(1);
+val = val.subtract(val);
+n = val.toInt();
+n = val.toNumber();
+val = val.toSigned();
+val = val.toUnsigned();
+val = val.xor(val);
+
+val = Long.MAX_SIGNED_VALUE;
+val = Long.MAX_UNSIGNED_VALUE;
+val = Long.MAX_VALUE;
+val = Long.MIN_SIGNED_VALUE;
+val = Long.MIN_UNSIGNED_VALUE;
+val = Long.MIN_VALUE;
+val = Long.NEG_ONE;
+val = Long.ONE;
+val = Long.ZERO;
+
+
diff --git a/long/long.d.ts b/long/long.d.ts
new file mode 100644
index 0000000000..70de25c14d
--- /dev/null
+++ b/long/long.d.ts
@@ -0,0 +1,80 @@
+// Type definitions for Long.js 1.1.2
+// Project: https://github.com/dcodeIO/Long.js
+// Definitions by: Toshihide Hara
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+interface LongStatic {
+ MAX_SIGNED_VALUE:Long;
+ MAX_UNSIGNED_VALUE:Long;
+ MAX_VALUE:Long;
+ MIN_SIGNED_VALUE:Long;
+ MIN_UNSIGNED_VALUE:Long;
+ MIN_VALUE:Long;
+ NEG_ONE:Long;
+ ONE:Long;
+ ZERO:Long;
+
+ from28Bits(part0:number, part1:number, part2:number, unsigned?:boolean):Long;
+ fromBits(lowBits:number, highBits:number, unsigned?:boolean):Long;
+ fromInt(value:number, unsigned?:boolean):Long;
+ fromNumber(value:number, unsigned?:boolean):Long;
+ fromString(str:string, unsigned?:boolean, radix?:number):Long;
+ fromString(str:string, unsigned?:number, radix?:number):Long;
+ fromString(str:string, unsigned?:any, radix?:number):Long;
+}
+
+interface Long {
+ new(low:number, high:number, unsigned?:boolean):Long;
+
+ high:number;
+ low:number;
+ unsigned:boolean;
+
+ add(other:Long):Long;
+ and(other:Long):Long;
+ clone():Long;
+ compare(other:Long):number;
+ div(other:Long):Long;
+ equals(other:Long):boolean;
+ getHighBits():number;
+ getHighBitsUnsigned():number;
+ getLowBits():number;
+ getLowBitsUnsigned():number;
+ getNumBitsAbs():number;
+ greaterThan(other:Long):boolean;
+ greaterThanOrEqual(other:Long):boolean;
+ isEven():boolean;
+ isNegative():boolean;
+ isOdd():boolean;
+ isZero():boolean;
+ lessThan(other:Long):boolean;
+ lessThanOrEqual(other:Long):boolean;
+ modulo(other:Long):Long;
+ multiply(other:Long):Long;
+ negate():Long;
+ not():Long;
+ notEquals(other:Long):boolean;
+ or(other:Long):Long;
+ shiftLeft(numBits:number):Long;
+ shiftRight(numBits:number):Long;
+ shiftRightUnsigned(numBits:number):Long;
+ subtract(other:Long):Long;
+ toInt():number;
+ toNumber():number;
+ toSigned():Long;
+ toString(radix?:number):string;
+ toUnsigned():Long;
+ xor(other:Long):Long;
+}
+
+// for browser
+declare module dcodeIO {
+ export var Long:LongStatic;
+}
+
+// for node, commonjs
+declare var Long:LongStatic;
+
+declare module "long" {
+export = Long;
+}