diff --git a/src/Connectors/Test.js b/src/Connectors/Test.js
index 0e1ac5d17fca51a72d3d960df0841873606d00b6..305d308f9c96a4711fb76c6d3e7bc8f6cbbcbc00 100644
--- a/src/Connectors/Test.js
+++ b/src/Connectors/Test.js
@@ -1,4 +1,4 @@
-// returns a rendom element of o
+// returns a random element of o
 // works on Object, and Array
 function getRandom (o) {
   if (o instanceof Array) {
diff --git a/src/Operations.js b/src/Operations.js
index 84937ed07fb65d25294cd5553bda069b1273bc0b..9f3230802a0cbefa0a696e42ad74f70b6ede95be 100644
--- a/src/Operations.js
+++ b/src/Operations.js
@@ -169,5 +169,50 @@ var Struct = {
         o = yield* Struct.Insert.create.call(this, {}, content, o, or, op);
       }
     }
+  },
+  Map: {
+    create: function*( op : Op){
+      op.start = null;
+      op.end = null;
+      op.struct = "Map";
+      return yield* Struct.Operation.create.call(this, op);
+    },
+    requiredOps: function(op, ids){
+      if (op.start != null) {
+        ids.push(op.start);
+      }
+      if (op.end != null){
+        ids.push(op.end);
+      }
+      return ids;
+    },
+    execute: function* () {
+      // nop
+    },
+    ref: function* (op : Op, pos : number) : Insert {
+      var o = op.start;
+      while ( pos !== 0 || o != null) {
+        o = (yield* this.getOperation(o)).right;
+        pos--;
+      }
+      return (o == null) ? null : yield* this.getOperation(o);
+    },
+    map: function* (o : Op, f : Function) : Array<any> {
+      o = o.start;
+      var res = [];
+      while ( o != null) {
+        var operation = yield* this.getOperation(o);
+        res.push(f(operation.content));
+        o = operation.right;
+      }
+      return res;
+    },
+    insert: function* (op, pos : number, contents : Array<any>) {
+      var o = yield* Struct.List.ref.call(this, op, pos);
+      var or = yield* this.getOperation(o.right);
+      for (var content of contents) {
+        o = yield* Struct.Insert.create.call(this, {}, content, o, or, op);
+      }
+    }
   }
 };
diff --git a/src/y.js b/src/y.js
index 847354979b285187407fbd685b0ad89baa2dfb22..574ff12e46ce438e2e7dd168ae41bbb9c1596638 100644
--- a/src/y.js
+++ b/src/y.js
@@ -8,4 +8,13 @@ class Y { //eslint-disable-line no-unused-vars
   transact (generator) {
     this.db.requestTransaction(generator);
   }
+  destroy () {
+    this.connector.disconnect();
+    this.db.removeDatabase();
+    this.connector = null;
+    this.db = null;
+    this.transact = function(){
+      throw new Error("Remember?, you destroyed this type ;)");
+    };
+  }
 }