         }
     }
     
-    public fileprivate(set) lazy var updateSignal: Signal<(Value, UpdateInfo), NoError> = { [unowned self] in
-        var extractedSignal: Signal<(Value, UpdateInfo), NoError>!
-        self.updateProducer.startWithSignal { signal, _ in
-            extractedSignal = signal
-        }
-        return extractedSignal
-    }()
-    
-    public init(_ initialValue: Value, info: UpdateInfo) {
+    public init(_ initialValue: Value) {
         _value = initialValue
         
         lock = NSRecursiveLock()
         lock.name = "org.FU.ViewModelProperty"
         
-        (updateProducer, updateObserver) = SignalProducer.buffer(1)
+        (updateSignal, updateObserver) = Signal.pipe()
         (actionSignal, actionObserver) = Signal.pipe()
-        
-        updateObserver.sendNext((initialValue, info))
     }
     
     /// Set the value by program update such as network callback. Returns the old value.

import ReactiveCocoa
import Result

public final class ViewModelProperty<Value, UpdateInfo, ActionInfo> {
    public let updateProducer: SignalProducer<(Value, UpdateInfo), NoError>
    public fileprivate(set) lazy var noInfoUpdateProducer: SignalProducer<Value, NoError> = self.updateProducer.map { (value, _) in value }
    fileprivate let updateObserver: Signal<(Value, UpdateInfo), NoError>.Observer
    
    public let actionSignal: Signal<(Value, ActionInfo), NoError>
    public fileprivate(set) lazy var noInfoActionSignal: Signal<Value, NoError> = self.actionSignal.map { (value, _) in value }
    fileprivate let actionObserver: Signal<(Value, ActionInfo), NoError>.Observer
    
    public fileprivate(set) lazy var mergedProducer: SignalProducer<Value, NoError> = { [unowned self] () -> SignalProducer<Value, NoError> in
        return SignalProducer<Value, NoError> { observer, producerDisposable in
            self.updateProducer.startWithSignal { signal, cancelDisposable in
                producerDisposable += cancelDisposable

        }
    }()
    
    private let lock: NSRecursiveLock
    private var _value: Value
    
    public var value: Value {
        get {
