diff --git a/hashtable/hashtable-tests.ts b/hashtable/hashtable-tests.ts
new file mode 100644
index 0000000000..9c90b5729d
--- /dev/null
+++ b/hashtable/hashtable-tests.ts
@@ -0,0 +1,25 @@
+///
+
+class Point {
+ constructor(public x: number, public y: number) {
+ }
+}
+
+function hashPoint(p: Point) {
+ return "Point:" + p.x + "," + p.y;
+}
+
+function pointsEqual(p1: Point, p2: Point) {
+ return p1.x === p2.x && p1.y === p2.y;
+}
+
+var coloursForPoints = new Hashtable({ hashCode: hashPoint, equals: pointsEqual });
+
+function getColourAt(x: number, y: number) {
+ var point = new Point(x, y);
+ return coloursForPoints.get(point);
+}
+
+coloursForPoints.put(new Point(1, 2), "green");
+
+alert(getColourAt(1, 2)); // Alerts green
\ No newline at end of file
diff --git a/hashtable/hashtable.d.ts b/hashtable/hashtable.d.ts
new file mode 100644
index 0000000000..1a5ac47b9c
--- /dev/null
+++ b/hashtable/hashtable.d.ts
@@ -0,0 +1,48 @@
+// Type definitions for jshashtable 3.0
+// Project: http://www.timdown.co.uk/jshashtable/
+// Definitions by: Sergey Gerasimov
+// Definitions: https://github.com/borisyankov/DefinitelyTyped
+
+interface IHashtable
+{
+ put(key: TKey, value: TValue): TValue;
+ putAll(hashtable: IHashtable, conflictCallback?: (key: TKey, thisValue: TValue, value: TValue) => TValue): void;
+
+ get(key: TKey): TValue;
+ containsKey(key: TKey): boolean;
+ containsValue(value: TValue): boolean;
+
+ clear(): void;
+ isEmpty(): boolean;
+
+ keys(): TKey[];
+ values(): TValue[];
+ entries(): any[][];
+
+ remove(key: TKey): TValue;
+ size(): number;
+
+ clone(): IHashtable;
+ each(callback: (key: TKey, value: TValue) => void): void;
+
+ equals(hashtable: IHashtable): boolean;
+ toQueryString(): string;
+}
+
+interface IHashtableOptions {
+ hashCode?: (key: TKey) => any;
+ equals?: (key1: TKey, key2: TKey) => boolean;
+ replaceDuplicateKey?: boolean;
+}
+
+interface IHashtableStatic {
+ new (): IHashtable;
+ new (options: IHashtableOptions): IHashtable;
+ new (hashCode?: (value: TValue) => any, equals?: (value1: TValue, value2: TValue) => boolean): IHashtable;
+}
+
+declare var Hashtable: IHashtableStatic;
+
+declare module "hashtable" {
+ export = Hashtable;
+}
\ No newline at end of file