       @stoppedChangingTimeout = null
       modifiedStatus = @isModified()
       @emitter.emit 'did-stop-changing', Object.freeze(normalizePatchChanges(@stoppedChangingPatch.getChanges()))
-      @stoppedChangingPatch = new Patch
+      @stoppedChangingPatch = new Patch(combineChanges: true, batchMode: true)
       @emitModifiedStatusChanged(modifiedStatus)
     @stoppedChangingTimeout = setTimeout(stoppedChangingCallback, @stoppedChangingDelay)
 


    @changeCount++
    @stoppedChangingPatch.splice(oldRange.start, oldRange.getExtent(), newRange.getExtent(), text: newText)
    @didChangeTextPatch ?= new Patch
    @didChangeTextPatch.splice(oldRange.start, oldRange.getExtent(), newRange.getExtent(), text: newText)
    @emitter.emit 'did-change', changeEvent


    text = params if typeof params is 'string'

    @emitter = new Emitter
    @stoppedChangingPatch = new Patch(combineChanges: true, batchMode: true)
    @didChangeTextPatch = new Patch(combineChanges: true, batchMode: true)
    @id = params?.id ? crypto.randomBytes(16).toString('hex')
    @lines = ['']
    @lineEndings = ['']
