 
         guard let path = imagePath else { return nil }
 
+        let cache = MessageStyle.bubbleImageCache
+
+        if let cachedImage = cache.object(forKey: path as NSString) {
+            return cachedImage
+        }
+
         guard var image = UIImage(contentsOfFile: path) else { return nil }
 
         switch self {

            image = UIImage(cgImage: cgImage, scale: image.scale, orientation: corner.imageOrientation)
        }

        return stretch(image)
    }

    // MARK: - Private

        return image.resizableImage(withCapInsets: capInsets, resizingMode: .stretch)
    }

    private static let bubbleImageCache = NSCache<NSString, UIImage>()
}
