 
 		isEnabled = state.map { $0.isEnabled }
 		isExecuting = state.map { $0.isExecuting }
+	}
+
+	/// Initializes an action that will be conditionally enabled, and creates a
+	/// SignalProducer for each input.
+	///
+	/// - parameters:
+	///   - enabledIf: Boolean property that shows whether the action is
+	///                enabled.
+	///   - execute: A closure that returns the signal producer returned by
+	///              calling `apply(Input)` on the action.
+	public convenience init<P: PropertyProtocol>(enabledIf property: P, _ execute: @escaping (Input) -> SignalProducer<Output, Error>) where P.Value == Bool {
+		self.init(_internalEnabledIf: property) {
+			execute($0).mapError(ActionError.producerFailed)
+		}
 	}
 
 	/// Initializes an action that will be enabled by default, and creates a

	/// Initializes an action that will be conditionally enabled, and creates a
	/// SignalProducer for each input.
	///
	/// - parameters:
	///   - enabledIf: Boolean property that shows whether the action is
	///                enabled.
	///   - execute: A closure that returns the signal producer returned by
	///              calling `apply(Input)` on the action.
	init<P: PropertyProtocol>(enabledIf property: P, _ execute: @escaping (Input) -> SignalProducer<Output, Error>) where P.Value == Bool

	/// Whether the action is currently enabled.
	var isEnabled: Property<Bool> { get }

public final class Action<Input, Output, Error: Swift.Error> {
	private let deinitToken: Lifetime.Token

	private let executeClosure: (Input) -> SignalProducer<Output, ActionError<Error>>
	private let eventsObserver: Signal<Event<Output, Error>, NoError>.Observer
	private let disabledErrorsObserver: Signal<(), NoError>.Observer

