     fileprivate let side: Card.Side
 
     // MARK: Views
-    fileprivate let preview: PreviewOutline = PreviewOutline.constrained()
-    fileprivate let background: UIImageView = UIImageView.constrained()
-    fileprivate let backgroundEffect: UIVisualEffectView = UIVisualEffectView(effect:
+    fileprivate let previewView: PreviewOutline = PreviewOutline.constrained()
+    fileprivate let backgroundView: UIImageView = UIImageView.constrained()
+    fileprivate let backgroundEffectView: UIVisualEffectView = UIVisualEffectView(effect:
         UIBlurEffect(style: .dark)).with { $0.translatesAutoresizingMaskIntoConstraints = false }
-    fileprivate let scrollView: UIScrollView = UIScrollView.constrained()
-    fileprivate let imageView: UIImageView = UIImageView.constrained()
+    fileprivate let imageView: UIImageView = UIImageView(frame: .zero)
+    fileprivate lazy var scrollView: UIScrollView = UIScrollView.constrained().with {
+        $0.delegate = self
+        $0.maximumZoomScale = 2
+        $0.showsVerticalScrollIndicator = false
+        $0.showsHorizontalScrollIndicator = false
+        $0.isScrollEnabled = true
+    }
 
     init(image: UIImage, side: Card.Side) {
         imageView.image = UIImage(cgImage: image.cgImage!, scale: 1, orientation: .right)
-        background.image = imageView.image
+        backgroundView.image = imageView.image
         self.side = side
         super.init(nibName: nil, bundle: nil)
     }

    // MARK: Lifecycle
    override func viewDidLoad() {
        super.viewDidLoad()
        preview.closeButton.tapped = { [unowned self] in
            self.dismiss()
        }
        preview.captureButton.tapped = { [unowned self] in
            self.process().flatMap {
                self.delegate?.cropViewController(self, didCropPhoto: $0, for: self.side)
            }

    func viewForZooming(in scrollView: UIScrollView) -> UIView? {
        return imageView
    }
}
