     }
     
     func updateImageAndContentSize(image: UIImage) {
-        
+
         activityIndicatorView.stopAnimating()
-        
-        if imageView.image == nil {
-            
-            scrollView.zoomScale = minimumZoomScale
-            let aspectFitSize = aspectFitContentSize(forBoundingSize: rotationAdjustedBounds().size, contentSize: image.size)
-            imageView.frame.size = aspectFitSize
-            self.scrollView.contentSize = aspectFitSize
-            imageView.center = scrollView.boundsCenter
-        }
-        
-        if let handler = fadeInHandler where handler.wasPresented(self.index) == false {
-            
-            if self.index != self.startIndex {
-                
-                activityIndicatorView.stopAnimating()
-                
-                UIView.transitionWithView(self.scrollView, duration: 0.5, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: { [weak self] () -> Void in
-                    
-                    self?.imageView.image = image
-                    
-                    }, completion: { finished in
-                        
-                        handler.addPresentedImageIndex(self.index)
-                })
-                
-                return
-            }
-        }
-        
-        self.imageView.image = image
-        fadeInHandler?.addPresentedImageIndex(self.index)
-    }
-    
+
+        let boundingSize = rotationAdjustedBounds().size
+        let aspectFitSize = aspectFitContentSize(forBoundingSize: boundingSize, contentSize: image.size)
+        let isHorizontalFit = abs(boundingSize.width - aspectFitSize.width) < 1
+
+        scrollView.contentSize = aspectFitSize
+        scrollView.zoomScale = scrollView.minimumZoomScale
+        scrollView.maximumZoomScale = isHorizontalFit ? boundingSize.height / aspectFitSize.height : boundingSize.width / aspectFitSize.width
+
+        imageView.frame.size = aspectFitSize
+        imageView.center = scrollView.boundsCenter
+
+        if self.needToAnimateImage() {
+            UIView.transitionWithView(self.scrollView, duration: 0.5, options: UIViewAnimationOptions.TransitionCrossDissolve, animations: { () -> Void in
+                self.imageView.image = image
+                }, completion: { finished in
+                    self.fadeInHandler?.addPresentedImageIndex(self.index)
+            })
+        } else {
+            self.imageView.image = image
+            self.fadeInHandler?.addPresentedImageIndex(self.index)
+        }
+    }
+
+    private func needToAnimateImage() -> Bool {
+        guard let fadeInHandler = fadeInHandler else { return false }
+
+        return !fadeInHandler.wasPresented(self.index) && self.index != self.startIndex
+    }
+
     func adjustImageViewForRotation() {
         
         guard self.imageView.bounds != CGRect.zero else { return }

            if let imageView = self?.imageView, _ = imageView.image, scrollView = self?.scrollView {
                
                imageView.bounds.size = aspectFitContentSize(forBoundingSize: boundingSize, contentSize: imageView.bounds.size)
                scrollView.zoomScale = self!.minimumZoomScale
            }
            }, completion: nil)
    }

    override func viewDidDisappear(animated: Bool) {
        super.viewDidDisappear(animated)
        
        self.scrollView.zoomScale = self.scrollView.minimumZoomScale
    }
    
    override func viewDidLayoutSubviews() {
