 }
 
 public struct AndProperty: PropertyType {
-    private let left: PropertyOf<Bool>
-    private let right: PropertyOf<Bool>
+    private let left: AnyProperty<Bool>
+    private let right: AnyProperty<Bool>
     
     public var value: Bool {
         return left.value && right.value

    }

    public init<P: PropertyType where P.Value == Bool>(property: P) {
        source = PropertyOf(property)
    }
}

    }
    
    public init<L: PropertyType, R: PropertyType where L.Value == Bool, R.Value == Bool>(lhs: L, rhs: R) {
        left = AnyProperty(lhs)
        right = AnyProperty(rhs)
    }
}

public struct OrProperty: PropertyType {
    private let left: AnyProperty<Bool>
    private let right: AnyProperty<Bool>
    
    public var value: Bool {
        return left.value || right.value
