             element.selectedIndex = valueIndexOf options, newValue
         else
           element.value = newValue
-
-      bindObservable element, value, context, update
+        return
+
     else
       # Because firing twice with the same value is idempotent just binding both
       # oninput and onchange handles the widest range of inputs and browser
       # inconsistencies.
       element.oninput = element.onchange = ->
         value?(element.value)
+        return
 
       bindObservable element, value, context, (newValue) ->
         unless element.value is newValue
           element.value = newValue
+        return
 
   return
 

      append get item, context
    else
      element.appendChild document.createTextNode item

  update = (contents) ->
    # TODO: Zipper merge optimization to more efficiently modify the DOM
    empty element

    contents.forEach append

  bindObservable element, content, context, update

bufferTo = (context, collection) ->
  (content) ->

  elementCleaners.get(element)?.forEach (cleaner) ->
    cleaner()
    elementCleaners.delete(element)
    return
  return

attachCleaner = (element, cleaner) ->
  cleaners = elementCleaners.get(element)
