       =>
         removeSink sink
         unsubscribeFromSource() unless @hasSubscribers()
-  toEventStream: -> new EventStream(@subscribe)
-  toString: -> "Dispatcher"
+
+class PropertyDispatcher extends Dispatcher
+  constructor: (subscribe, handleEvent) ->
+    super(subscribe, handleEvent)
+    current = undefined
+    push = @push
+    subscribe = @subscribe
+    @push = (event) =>
+      if event.hasValue()
+        current = event.value
+      push.apply(this, [event])
+    @subscribe = (sink) =>
+      if @hasSubscribers() and current?
+        reply = sink initial(current)
+        if reply == Bacon.noMore
+          return nop
+      subscribe.apply(this, [sink])
 
 class Bus extends EventStream
   constructor: ->

        unsubMe = this.subscribe mySink
        unsubOther = other.subscribe otherSink unless unsubscribed
        unsubBoth
    @combine = (other, combinator) =>
      combineAndPush = (sink, event, myVal, otherVal) -> sink(event.apply(combinator(myVal, otherVal)))
      combine(other, combineAndPush, combineAndPush)

      unsubRight = right.subscribe(smartSink) unless unsubscribed
      unsubBoth

  toProperty: (initValue) ->
   @scan(initValue, latter)

