   #
   # Returns nothing.
   execute: (count=1) ->
-    buffer = @editor.getBuffer()
-
-    buffer.transact =>
+    @undoTransaction =>
       _.times count, =>
         @editor.joinLine()
 
-  # Public: Not implemented.
-  #
-  # Returns nothing.
-  compose: (register) ->
-    throw new OperatorError("Not Implemented")
-
 module.exports = { OperatorError, Delete, Yank, Put, Join, Indent, Outdent, Change }

  # Returns nothing.
  execute: (count=1) ->
    cursor = @editor.getCursor()
    buffer = @editor.getBuffer()

    buffer.transact =>
      _.times count, =>
        if _.last(@motion.select(1, @selectOptions))
          @editor.getSelection().delete()

          @editor.moveCursorUp()
          @editor.moveCursorToFirstCharacterOfLine()

#
# It combines the current line with the following line.
#
class Join extends Operator
  constructor: (@editor, @vimState, {@selectOptions}={}) -> @complete = true

  # Public: Combines the current with the following lines
  #
