 fileprivate var messageDispatcherAssociationKey = 0
 fileprivate var mailboxAssociationKey = 1
 
-protocol MessageHandler where Self : UIControl {
+protocol MessageHandler: MailBoxHandler where Self : UIControl {
     
-    func getMailbox<MessageType>() -> Mailbox<MessageType>
+    func getDispatcher<MessageType>(for event: UIControlEvents) -> MessageDispatcher<MessageType>?
     
     func on<MessageType>(event: UIControlEvents, dispatch message: MessageType) -> Mailbox<MessageType>
-    
-    func getDispatcher<MessageType>(for event: UIControlEvents) -> MessageDispatcher<MessageType>?
     
     func register<MessageType>(dispatcher: MessageDispatcher<MessageType>, for event: UIControlEvents)
     

    }
    
}

    
}

protocol MailBoxHandler where Self: UIView {
    
    func getMailbox<MessageType>() -> Mailbox<MessageType>
    
}

extension MessageHandler {
    
    func on<MessageType>(event: UIControlEvents, dispatch message: MessageType) -> Mailbox<MessageType> {
        if let oldDispatcher = getDispatcher(for: event) as MessageDispatcher<MessageType>? {
