 					d: strInject(secondOp.d, firstOp.p - secondOp.p, firstOp.d)
 				]
 			]
-		else
-			return [firstUpdate, secondUpdate]
-
-	_cancelOppositeInsertsAndDeletes: (firstUpdate, secondUpdate) ->
-		firstUpdate =
-			op: firstUpdate.op
-			meta:
-				user_id:  firstUpdate.meta.user_id or null
-				start_ts: firstUpdate.meta.start_ts or firstUpdate.meta.ts
-				end_ts:   firstUpdate.meta.end_ts   or firstUpdate.meta.ts
-		secondUpdate =
-			op: secondUpdate.op
-			meta:
-				user_id:  secondUpdate.meta.user_id or null
-				start_ts: secondUpdate.meta.start_ts or secondUpdate.meta.ts
-				end_ts:   secondUpdate.meta.end_ts   or secondUpdate.meta.ts
-
-		if firstUpdate.meta.user_id != secondUpdate.meta.user_id
-			return [firstUpdate, secondUpdate]
-
-		if secondUpdate.meta.start_ts - firstUpdate.meta.end_ts > ConcatManager.MAX_TIME_BETWEEN_UPDATES
-			return [firstUpdate, secondUpdate]
-
-		firstOp = firstUpdate.op[0]
-		secondOp = secondUpdate.op[0]
-
 		# An insert and then a delete
-		if firstOp.i? and secondOp.d? and firstOp.p <= secondOp.p <= (firstOp.p + firstOp.i.length)
+		if mergeInsertsAndDeletes and firstOp.i? and secondOp.d? and firstOp.p <= secondOp.p <= (firstOp.p + firstOp.i.length)
 			offset = secondOp.p - firstOp.p
 			insertedText = firstOp.i.slice(offset, offset + secondOp.d.length)
 			if insertedText == secondOp.d

			else
				# This shouldn't be possible!
				return [firstUpdate, secondUpdate]
		else if firstOp.d? and secondOp.i? and firstOp.p  == secondOp.p
			offset = firstOp.d.indexOf(secondOp.i)
			if offset == -1
				return [firstUpdate, secondUpdate]

		for update in firstPass
			lastCompressedUpdate = secondPass.pop()
			if lastCompressedUpdate?
				secondPass = secondPass.concat ConcatManager._concatTwoUpdates lastCompressedUpdate, update, true
			else
				secondPass.push update

