       if delta.attributes?
         @setStyle selection, delta.attributes
 
-      selectionList = @getSelections()
-      for sel in selectionList
-        sel.merge selection
+        selectionList = @getSelections()
+        for sel in selectionList when sel != selection and sel
+          sel.merge selection
+
+  # Add a  selection to the selection list
+  pushSel: (selection)->
+    @_rte.selections.push selection
 
   # Return all the selections bound to left and right, except self
   # @return [Array<Selection>] an array of selection
   getSelections: ->
-    uniq = (value, index, self) ->
-      self.indexOf(value) == index and value != @
-
-    ret = []
-    if @left and @left.left
-      ret.append(@left.left)
-    if @left and @left.right
-      ret.append(@left.left)
-    if @right and @right.right
-      ret.append(@right.right)
-    if @right and @right.left
-      ret.append(@right.left)
-
-    ret.filter uniq # return a value with unique elements
+    @_rte.selections or []
 
   # Remove a selection from selection list
   #

    if not selection.isValid()
      throw new Error "Invalid selection, got", selection

    selection.style = style or {}

    # Link the boundary words to selection
    leftWord = selection.left or {right: []}
    rightWord = selection.right or {left: []}

    # Merge left…
    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 when tmpSelection
      tmpSelection.merge selection

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

    @lt(@right, @rightPos, "left")


  # Try to merge the given selection with this selection, keeping this selection
  #
  # @param [Selection] selection the selection to merge to
  #
