         if @reorder
           @moveUp.disabled = nothingSelected or @allSelectionsAtTop()
           @moveDown.disabled = nothingSelected or @allSelectionsAtBottom()
+
+      doSelect: -> @transferOptions @available, @selected, @reorder
+
+      doDeselect: -> @transferOptions @selected, @available, false
 
       transferOptions: (from, to, atEnd) ->
         if from.element.selectedIndex is -1

          @selected.element.add option

      updateHidden: ->
        values = _.pluck(this.selected, "value")
        hidden.value JSON.stringify values

      bindEvents: ->
        @select.on "click", =>
          @doSelect()
          return false

        @deselect.on "click", =>
          @doDeselect()
          return false


        for i in [(e.length - 1)..(e.selectedIndex)] by -1
          o = options[i]
          if o.selected
            e.remove i
            movers.unshift o

        return movers
