           new_value = kb.getValue(_model, kb.peek(@key), @args)
         else if _model
           kb.setValue(_model, kb.peek(@key), unwrapped_new_value)
-        @_value.update(new_value)
+        @update(new_value)
 
       owner: @_vm
     }

        _model = @_model(); ko.utils.unwrapObservable(arg) for arg in args = [@key].concat(@args or [])
        kb.utils.wrappedEventWatcher(@)?.emitter(_model or null) # update the event watcher
        if @read
          @_value.update(@read.apply(@_vm, args))
        else if !_.isUndefined(_model)
          kb.ignore => @_value.update(kb.getValue(_model, kb.peek(@key), @args))
        return @_value.value()

      write: (new_value) => kb.ignore =>

        # update references
        new_value = kb.getValue(new_model, kb.peek(@key), @args)
        @_model(new_model)
        if not new_model
          @update(null)
        else if not _.isUndefined(new_value)
          @update(new_value)
    }
    kb.EventWatcher.useOptionsOrCreate({event_watcher: event_watcher}, model or null, @, {emitter: @model, update: (=> kb.ignore => @_value.update()), key: @key, path: create_options.path})
    @_value.rawValue() or @_value.update() # wasn't loaded so create
