diff --git a/src/Connectors/Test.js b/src/Connectors/Test.js
index 1a04b33018d4ce4728bb306c8d8203ad878bb8e8..8c14b047843f3a3ea1932ca6b0173eeb849e8f4c 100644
--- a/src/Connectors/Test.js
+++ b/src/Connectors/Test.js
@@ -14,7 +14,7 @@ module.exports = function (Y) {
     },
     addUser: function (connector) {
       this.users[connector.userId] = connector
-      this.buffers[connector.userId] = []
+      this.buffers[connector.userId] = {}
       for (var uname in this.users) {
         if (uname !== connector.userId) {
           var u = this.users[uname]
@@ -32,14 +32,27 @@ module.exports = function (Y) {
     },
     flushOne: function flushOne () {
       var bufs = []
-      for (var i in globalRoom.buffers) {
-        if (globalRoom.buffers[i].length > 0) {
-          bufs.push(i)
+      for (var receiver in globalRoom.buffers) {
+        let buff = globalRoom.buffers[receiver]
+        var push = false
+        for (let sender in buff) {
+          if (buff[sender].length > 0) {
+            push = true
+            break
+          }
+        }
+        if (push) {
+          bufs.push(receiver)
         }
       }
       if (bufs.length > 0) {
         var userId = getRandom(bufs)
-        var m = globalRoom.buffers[userId].shift()
+        let buff = globalRoom.buffers[userId]
+        let sender = getRandom(Object.keys(buff))
+        var m = buff[sender].shift()
+        if (buff[sender].length === 0) {
+          delete buff[sender]
+        }
         var user = globalRoom.users[userId]
         user.receiveMessage(m[0], m[1])
         return user.y.db.whenTransactionsFinished()
@@ -99,12 +112,19 @@ module.exports = function (Y) {
     send (userId, message) {
       var buffer = globalRoom.buffers[userId]
       if (buffer != null) {
-        buffer.push(JSON.parse(JSON.stringify([this.userId, message])))
+        if (buffer[this.userId] == null) {
+          buffer[this.userId] = []
+        }
+        buffer[this.userId].push(JSON.parse(JSON.stringify([this.userId, message])))
       }
     }
     broadcast (message) {
       for (var key in globalRoom.buffers) {
-        globalRoom.buffers[key].push(JSON.parse(JSON.stringify([this.userId, message])))
+        var buff = globalRoom.buffers[key]
+        if (buff[this.userId] == null) {
+          buff[this.userId] = []
+        }
+        buff[this.userId].push(JSON.parse(JSON.stringify([this.userId, message])))
       }
     }
     isDisconnected () {
@@ -127,8 +147,13 @@ module.exports = function (Y) {
     flush () {
       var self = this
       return async(function * () {
-        while (globalRoom.buffers[self.userId].length > 0) {
-          var m = globalRoom.buffers[self.userId].shift()
+        var buff = globalRoom.buffers[self.userId]
+        while (Object.keys(buff).length > 0) {
+          var sender = getRandom(Object.keys(buff))
+          var m = buff[sender].shift()
+          if (buff[sender].length === 0) {
+            delete buff[sender]
+          }
           this.receiveMessage(m[0], m[1])
         }
         yield self.whenTransactionsFinished()
diff --git a/src/SpecHelper.js b/src/SpecHelper.js
index 682bf99eebaf5aea6c484d54dde1bfb66547d125..3a1ac1c9c4b8a0d4e52f32e62c47c65570f07cc0 100644
--- a/src/SpecHelper.js
+++ b/src/SpecHelper.js
@@ -60,11 +60,7 @@ function getRandom (o) {
   if (o instanceof Array) {
     return o[Math.floor(Math.random() * o.length)]
   } else if (o.constructor === Object) {
-    var ks = []
-    for (var key in o) {
-      ks.push(key)
-    }
-    return o[getRandom(ks)]
+    return o[getRandom(Object.keys(o))]
   }
 }
 g.getRandom = getRandom
@@ -79,7 +75,7 @@ g.getRandomNumber = getRandomNumber
 
 function getRandomString () {
   var tokens = 'abcdefäö' // ü\n\n\n\n\n\n\n'
-  return tokens[getRandomNumber(tokens.length - 1)]
+  return tokens[getRandomNumber(tokens.length)]
 }
 g.getRandomString = getRandomString
 
diff --git a/src/Transaction.js b/src/Transaction.js
index 1bb4ea03feceea3d155af72e4746eeb15dcb0fce..1013285513b5c75d6a32abd09f46cb1630a17724 100644
--- a/src/Transaction.js
+++ b/src/Transaction.js
@@ -409,7 +409,7 @@ module.exports = function (Y/* :any */) {
             if (parentDeleted) {
               op.gc = true
               if (!op.deleted) {
-                yield* this.markDeleted(op.id, delLength)
+                yield* this.markDeleted(op.id, opLength)
                 op.deleted = true
                 if (op.opContent != null) {
                   yield* this.deleteOperation(op.opContent)