    var modelWriteKeys: [Key] { get }
    var viewReadKeys: [Key] { get }
    var viewWriteKeys: [Key] { get }
-   
-   // MARK: - Bindings
-   func bindings(for key: Key) -> [Binding]
 }
 
 public extension ConductionModelType {
    // MARK: - Keys
    var modelKeys: [Key] { return modelReadKeys + modelWriteKeys }
    var viewKeys: [Key] { return modelReadKeys + modelWriteKeys }
-
-   // MARK: - Bindings
-   func bindings(for keyString: String) -> [Binding] {
-      guard let key = Key(rawValue: keyString) else { return [] }
-      return bindings(for: key)
-   }
 
    // MARK: - StringConductionModelType Protocol
    var modelReadKeyStrings: [String] {

   var modelWriteKeyStrings: [String] { get }
   var viewReadKeyStrings: [String] { get }
   var viewWriteKeyStrings: [String] { get }
   
   func bindings(for keyString: String) -> [Binding]
}

public extension StringConductionModelType {

   open var viewReadKeys: [Key] { return viewReadOnlyKeys + viewReadWriteKeys }
   open var viewWriteKeys: [Key] { return viewReadWriteKeys + viewWriteOnlyKeys }
   
   // MARK: - Bindable Protocol
   public var bindingBlocks: [Key : [((targetObject: AnyObject, rawTargetKey: String)?, Any?) throws -> Bool?]] = [:]
   public var keysBeingSet: [Key] = []
   
   public func value(for key: Key) -> Any? {
      guard viewReadKeys.contains(key) || modelWriteKeys.contains(key) else { fatalError() }
      let value = values[key]
      return conductedValue(value, for: key)
   }
   
   public func setOwn(value: Any?, for key: Key) throws {
      guard viewWriteKeys.contains(key) || modelReadKeys.contains(key) else { fatalError() }
      let conductedValue = try set(conductedValue: value, for: key)
      values[key] = conductedValue
   }
}
