 
 // MARK: - ActivityIndicator
 
-private var activityIndicatorKey: Void?
-private var showActivityIndicatorWhenLoadingKey: Void?
+private var activityIndicatorAssociatedKey: Void?
+private var showActivityIndicatorWhenLoadingAssociatedKey: Void?
 
 extension UIImageView {
 
     private var yep_activityIndicator: UIActivityIndicatorView? {
-        return objc_getAssociatedObject(self, &activityIndicatorKey) as? UIActivityIndicatorView
+        return objc_getAssociatedObject(self, &activityIndicatorAssociatedKey) as? UIActivityIndicatorView
     }
 
     private func yep_setActivityIndicator(activityIndicator: UIActivityIndicatorView?) {
-        objc_setAssociatedObject(self, &activityIndicatorKey, activityIndicator, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
+        objc_setAssociatedObject(self, &activityIndicatorAssociatedKey, activityIndicator, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
     }
 
     public var yep_showActivityIndicatorWhenLoading: Bool {
         get {
-            guard let result = objc_getAssociatedObject(self, &showActivityIndicatorWhenLoadingKey) as? NSNumber else {
+            guard let result = objc_getAssociatedObject(self, &showActivityIndicatorWhenLoadingAssociatedKey) as? NSNumber else {
                 return false
             }
 

                    yep_setActivityIndicator(nil)
                }

                objc_setAssociatedObject(self, &showActivityIndicatorWhenLoadingKey, NSNumber(bool: newValue), .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
            }
        }
    }
}

// MARK: - Message

private var messageKey: Void?

extension UIImageView {

    private var yep_messageImageKey: String? {
        return objc_getAssociatedObject(self, &messageKey) as? String
    }

    private func yep_setMessageImageKey(messageImageKey: String) {
        objc_setAssociatedObject(self, &messageKey, messageImageKey, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }

    func yep_setImageOfMessage(message: Message, withSize size: CGSize, tailDirection: MessageImageTailDirection, completion: (loadingProgress: Double, image: UIImage?) -> Void) {

    }
}

// MARK: - Message Map Image

private var messageMapImageAssociatedKey: Void?

extension UIImageView {

    private var yep_messageMapImageKey: String? {
        return objc_getAssociatedObject(self, &messageMapImageAssociatedKey) as? String
    }

    private func yep_setMessageMapImageKey(messageMapImageKey: String) {
        objc_setAssociatedObject(self, &messageMapImageAssociatedKey, messageMapImageKey, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }

    func yep_setMapImageOfMessage(message: Message, withSize size: CGSize, tailDirection: MessageImageTailDirection) {

        let imageKey = message.mapImageKey

        yep_setMessageMapImageKey(imageKey)

        let locationName = message.textContent
        ImageCache.sharedInstance.mapImageOfMessage(message, withSize: CGSize(width: 192, height: 108), tailDirection: .Right, bottomShadowEnabled: !locationName.isEmpty) { [weak self] mapImage in

            guard let strongSelf = self, _imageKey = strongSelf.yep_messageMapImageKey where _imageKey == imageKey else {
                return
            }

            SafeDispatch.async { [weak self] in
                self?.image = mapImage
            }
        }
    }
}

// MARK: - AttachmentURL

private var attachmentURLAssociatedKey: Void?

extension UIImageView {

    private var yep_attachmentURL: NSURL? {
        return objc_getAssociatedObject(self, &attachmentURLAssociatedKey) as? NSURL
    }

    private func yep_setAttachmentURL(URL: NSURL) {
        objc_setAssociatedObject(self, &attachmentURLAssociatedKey, URL, .OBJC_ASSOCIATION_RETAIN_NONATOMIC)
    }

    func yep_setImageOfAttachment(attachment: DiscoveredAttachment, withSize size: CGSize) {
