     if not selection.isValid()
       throw new Error "Invalid selection"
 
-    # In case the selection already has a style which is different
-    if selection.style != style
-      selection = new Selection(selection.start, selection.end, style)
-
-    # If no style add it
-    if _.isUndefined selection.style
-      selection.style = style
+    selection.style = style or ""
 
     # Link the boundary words to selection
-    leftWord = @getWord selection.startPos.word
-    rightWord = @getWord selection.endPos.word
-
-    selection.left = leftWord
-    selection.right = rightWord
-
-    leftWord.left.push(selection)
-    rightWord.right.push(selection)
-
+    leftWord = selection.left
+    rightWord = selection.right
     # Merge left…
-    for tmpSelection in leftWord.right
-      tmpSelection.merge(selection, @)
+    for tmpSelection in leftWord.right when tmpSelection
+      tmpSelection.merge selection
     # …and right (only happens when selections are contiguous or overlapping
     # and have same style)
-    for tmpSelection in rightWord.left
-      tmpSelection.merge(selection, @)
-
-    # Try to merge with previous / next contiguous selection
-    {prevWord, position} = @_jump(selection.startPos, -1)
-    {nextWord, position} = @_jump(selection.endPos,   +1)
-    for s in prevWord.selections when selection.style == s.style
-      s.merge selection, @
-    for s in nextWord.selections when selection.style == s.style
-      s.merge selection, @
+    for tmpSelection in rightWord.left when tmpSelection
+      tmpSelection.merge selection
 
   # Apply a delta to the object
   # @see http://quilljs.com/docs/deltas/


    @left = null
    @right = null

# Class describing the Rich Text Editor type
#

  # Try to merge the given selection with this selection
  #
  # @param [Selection] selection the selection to merge to
  #
  # @example
  #   1                 2                   3
  #   [  left selection ][  right selection ]
  #    becomes
  #   [           right selection           ]
  merge: (selection) ->
    if @ == selection
      return
    if @style != selection.style
      return false
    if @atLeftOf selection
      leftSel = @
      rightSel = selection
    else if selection.atLeftOf @
      leftSel = selection
      rightSel = @
    else
      return

    # unbind words from left selection, remove it from selection list
    # expand the selection at right to the left end of previous left selection
