   }
 }
 
+// MARK: - Private Helpers
+fileprivate extension ListViewController {
+  func fadeImageView(_ imageView: UIImageView, to newImage: UIImage, with duration: TimeInterval) {
+    UIView.transition(with: imageView,
+                      duration: duration,
+                      options: .transitionCrossDissolve,
+                      animations: {
+                        imageView.image = newImage
+    },
+                      completion: nil)
+  }
+}
+
 // MARK: - Activity Presentor Protocol
 extension ListViewController: ActivityIndicatorPresentor {
 }

    if let imagePath = result.imagePath {
      
      if let cachedImage = self.imageCache.object(forKey: imagePath as NSString) {
        cell.imageView.image = cachedImage
      } else {
        ImageLoader.loadImage(from: imagePath) { (image, error) in
          guard let image = image, error == .noError else {

          }
          
          self.imageCache.setObject(image, forKey: imagePath as NSString)
          self.fadeImageView(cell.imageView, to: image, with: 0.5)
        }
      }
    } else {
