           @selected.element.add option
 
       updateHidden: ->
-        values = _.pluck(this.selected, "value")
-        hidden.value JSON.stringify values
+        values = _.pluck(@selected.element.options, "value")
+        @hidden.value JSON.stringify values
 
       bindEvents: ->
+        @container.on "change", "select", =>
+          @updateButtons()
+          return false
+
         @select.on "click", =>
           @doSelect()
           return false
 
+        @available.on "dblclick", =>
+          @doSelect()
+          return false
+
         @deselect.on "click", =>
+          @doDeselect()
+          return false
+
+        @selected.on "dblclick", =>
           @doDeselect()
           return false
 

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

        return movers

        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
