     super
 
     @emitter = new Emitter
-
-    @items = Sequence.fromArray(compact(params?.items ? []))
+    @items = []
+
+    @addItems(compact(params?.items ? []))
     @setActiveItem(@items[0]) unless @getActiveItem()?
-
-    @subscribe @items.onEach (item) =>
-      if typeof item.on is 'function'
-        @subscribe item, 'destroyed', => @removeItem(item, true)
-
-    @subscribe @items.onRemoval (item, index) =>
-      @unsubscribe item if typeof item.on is 'function'
 
   # Called by the Serializable mixin during serialization.
   serializeParams: ->

  addItem: (item, index=@getActiveItemIndex() + 1) ->
    return if item in @items

    @items.splice(index, 0, item)
    @emit 'item-added', item, index
    @emitter.emit 'did-add-item', {item, index}

  removeItem: (item, destroyed=false) ->
    index = @items.indexOf(item)
    return if index is -1

    if typeof item.on is 'function'
      @unsubscribe item

    if item is @activeItem
      if @items.length is 1
        @setActiveItem(undefined)
