           model = @view.models[dependency.shift()]
           keypath = dependency.join '.'
 
-        @view.config.adapter.unsubscribe model, keypath, @sync
+        @view.adapters['.'].unsubscribe model, keypath, @sync
 
   # Updates the binding's model from what is currently set on the view. Unbinds
   # the old model first and then re-binds with the new model.
   update: (models = {}) =>
     if @key
       if models[@key]
-        unless @options.bypass
-          @view.config.adapter.unsubscribe @model, @keypath, @sync
-
+        @view.adapters['.'].unsubscribe @model, @keypath, @sync
         @model = models[@key]
-
-        if @options.bypass
-          @sync()
-        else
-          @view.config.adapter.subscribe @model, @keypath, @sync
-          @sync() if @view.config.preloadData
+        @view.adapters['.'].subscribe @model, @keypath, @sync
+        @sync() if @view.config.preloadData
     else
       @sync()
 


  # Syncs up the view binding with the model.
  sync: =>
    @set if @options.bypass
      @model[@keypath]
    else
      @view.config.adapter.read @model, @keypath

  # Publishes the value currently set on the input element back to the model.
  publish: =>

      if @view.formatters[id]?.publish
        value = @view.formatters[id].publish value, args...

    @view.adapters['.'].publish @model, @keypath, value

  # Subscribes to the model for changes at the specified keypath. Bi-directional
  # routines will also listen for changes on the element to propagate them back
  # to the model.
  bind: =>
    @binder.bind?.call @, @el
    @view.adapters['.'].subscribe @model, @keypath, @sync
    @sync() if @view.config.preloadData

    if @options.dependencies?.length
      for dependency in @options.dependencies
