diff --git a/spec/iterator.spec.ts b/spec/iterator.spec.ts
new file mode 100644
index 0000000000000000000000000000000000000000..68dce8db1c895b1e2a8980479b3b0c9f04edd25e
--- /dev/null
+++ b/spec/iterator.spec.ts
@@ -0,0 +1,40 @@
+/// <reference path="../node_modules/@types/jasmine/index.d.ts" />
+
+import { ArrayReverseIterator } from "../src/util/iterator";
+
+describe('iterator : ', () => {
+    it("reverse ( undefined )", () => {
+        const arr: Object[] = undefined;
+        const it = new ArrayReverseIterator<Object>(arr);
+        expect(it.next().done).toBeTruthy();
+    });
+
+    it("reverse( [] )", () => {
+        const arr: Object[] = [];
+        const it = new ArrayReverseIterator<Object>(arr);
+        expect(it.next().done).toBeTruthy();
+    });
+
+    it("reverse( [1] )", () => {
+        const arr: number[] = [1];
+        const it = new ArrayReverseIterator<number>(arr);
+        const v1 = it.next();
+        expect(v1.done).toBeFalsy();
+        expect(v1.value).toEqual(1);
+        const v2 = it.next();
+        expect(v2.done).toBeTruthy();
+    });
+
+    it("reverse( [1,2] )", () => {
+        const arr: number[] = [1, 2];
+        const it = new ArrayReverseIterator<number>(arr);
+        const v1 = it.next();
+        expect(v1.done).toBeFalsy();
+        expect(v1.value).toEqual(2);
+        const v2 = it.next();
+        expect(v2.done).toBeFalsy();
+        expect(v2.value).toEqual(1);
+        const v3 = it.next();
+        expect(v3.done).toBeTruthy();
+    });
+});
diff --git a/src/index.ts b/src/index.ts
index 3443109f1ede023a24682abfa8b6a8a0b2da7d5b..a939be42a85a627af3fedbaad3e5a0fd0c791bfb 100644
--- a/src/index.ts
+++ b/src/index.ts
@@ -22,3 +22,4 @@ export * from "./util/pair";
 export * from "./util/interval";
 export * from "./pab/pab_dimension";
 export * from "./pab/pab_puissance";
+export * from "./util/iterator";
diff --git a/src/util/iterator.ts b/src/util/iterator.ts
new file mode 100644
index 0000000000000000000000000000000000000000..71a7cfa8105f4a0dc0c86ccab1ccffa76e866ea1
--- /dev/null
+++ b/src/util/iterator.ts
@@ -0,0 +1,25 @@
+export class ArrayReverseIterator<T> implements IterableIterator<T> {
+    private _index: number;
+
+    constructor(private _arr: any[]) {
+        this._index = this._arr == undefined ? 0 : this._arr.length - 1;
+    }
+
+    public next(): IteratorResult<T> {
+        if (this._arr != undefined && this._index >= 0) {
+            return {
+                done: false,
+                value: this._arr[this._index--]
+            }
+        } else {
+            return {
+                done: true,
+                value: null
+            }
+        }
+    }
+
+    [Symbol.iterator](): IterableIterator<T> {
+        return this;
+    }
+}
diff --git a/tsconfig.json b/tsconfig.json
index e5b0503469e05cc0e822ab774c1c6588fe2ed880..c345304ba5072030805570231b733fcf0c9e0745 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,6 +1,6 @@
 {
   "compilerOptions": {
-    "target": "es5",
+    "target": "es6",
     "module": "commonjs",
     "outDir": "./build",
     "noImplicitAny": true,
@@ -12,4 +12,4 @@
   "exclude": [
     "node_modules"
   ]
-}
+}
\ No newline at end of file