         throw new Error "Expecting numbers as arguments"
       if not (rte instanceof Rte)
         throw new Error "Expecting an rte instance as third argument, got #{rte}"
-      @startPos = @_relativeFromAbsolute start, rte
-      @endPos = @_relativeFromAbsolute end, rte
-      @style = style
-
-      @left = rte.getWord @startPos.word
-      @right = rte.getWord @endPos.word
+
+      @rte = rte
+
+      @startPos = @_relativeFromAbsolute start
+      @endPos = @_relativeFromAbsolute end
+      @setStyle style
+
+      @left = @rte.getWord @startPos.word
+      @right = @rte.getWord @endPos.word
 
       @left.left.push @
       @right.right.push @
 
-      rte._rte.selections.push @
+      @rte._rte.selections.push @
+
 
     else throw new Error "Wrong set of parameters #{start}, #{end}, #{rte}, #{style}"
-
-    if not _.isUndefined(style)
-      @style = style
 
     @startPos.lt = @endPos.lt = (selection) ->
       @word < selection.word or (@word == selection.word and @pos <= selection.pos)

    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

    # 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)

    # Merge left…
    for tmpSelection in leftWord.right
      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, @

  # Apply a delta to the object
  # @see http://quilljs.com/docs/deltas/

  # 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
