 					expect(value).to(beTrue())
 				}
 			}
+			
+			it("should emit true when at least one of the producers in array emits true") {
+				let producer1 = SignalProducer<Bool, Never> { observer, _ in
+					observer.send(value: true)
+					observer.sendCompleted()
+				}
+				let producer2 = SignalProducer<Bool, Never> { observer, _ in
+					observer.send(value: false)
+					observer.sendCompleted()
+				}
+				let producer3 = SignalProducer<Bool, Never> { observer, _ in
+					observer.send(value: false)
+					observer.sendCompleted()
+				}
+				
+				SignalProducer.or([producer1, producer2, producer3]).startWithValues { value in
+					expect(value).to(beTrue())
+				}
+			}
 
 			it("should emit false when both producers emits false") {
 				let producer1 = SignalProducer<Bool, Never> { observer, _ in

					expect(value).to(beTrue())
				}
				observer2.send(value: true)

				observer2.sendCompleted()
			}

			it("should be able to fallback to SignalProducer for contextual lookups") {
				_ = SignalProducer<Bool, Never>.empty
					.or(.init(value: true))
			}
		}

					expect(value).to(beFalse())
				}
			}
			
			it("should emit false when all producers in array emit false") {
				let producer1 = SignalProducer<Bool, Never> { observer, _ in
					observer.send(value: false)
					observer.sendCompleted()
				}
				let producer2 = SignalProducer<Bool, Never> { observer, _ in
					observer.send(value: false)
					observer.sendCompleted()
				}
				let producer3 = SignalProducer<Bool, Never> { observer, _ in
					observer.send(value: false)
					observer.sendCompleted()
				}
				
				SignalProducer.or([producer1, producer2, producer3]).startWithValues { value in
					expect(value).to(beFalse())
				}
			}

			it("should work the same way when using signal instead of a producer") {
				let producer1 = SignalProducer<Bool, Never> { observer, _ in
