         adjusted = if @index > -1 then @index else -1  # todo: better name (this is for if prompt offset)
         @selected = Ember.EnumerableUtils.indexOf(selectedIndexes, adjusted) > -1
 
-  _triggerChange: ->
-    selection = @get('selection') # todo try other syntax
+  _triggerChange: (->
+    selection = @get('selection')
     @selectionDidChange() if not Ember.isNone(selection)
 
     @_change()
+  ).on('didInsertElement')
 
-  _change: ->
+  _change: (->
     # todo: get rid of this proxy fn
     @_changeMultiple()
+  ).on('change')
 
   _changeMultiple: ->
     options = this.$('input[type=checkbox]:checked')

  # if didn't add isFulfilled, true values were never shown
  ).property('content', 'parentView.selection', 'parentView.selection.isFulfilled')

  labelPathDidChange: Ember.observer('parentView.optionLabelPath', ->
    labelPath = Ember.get(this, 'parentView.optionLabelPath') # todo: try other syntax
    return if not labelPath

    Ember.defineProperty(@, 'label', Ember.computed(->
      @get(labelPath) # bound to caller or not?
    ).property(labelPath))
  )

  # todo try other syntax
  valuePathDidChange: Ember.observer('parentView.optionValuePath', ->
    valuePath = @get('parentView.optionValuePath')
    return if not valuePath

    Ember.defineProperty(@, 'value', Ember.computed(->
      @get(valuePath)
    ).property(valuePath))
  )


App.MultiSelect = Ember.View.extend

      if Ember.isArray selection
        Ember.EnumerableUtils.replace selection, 0, Ember.get(selection, 'length'), newSelection
      else
        @set('selection', newSelection)
