                 
                 firstCardView.frame = frameForTopCard()
                 
-                applyRevertAnimation(firstCardView, complete: {
-                    self.delegate?.koloda(self, didShowCardAtIndex: UInt(self.currentCardNumber))
+                animating = true
+                applyRevertAnimation(firstCardView, completion: { [weak self] in
+                    if let _self = self {
+                        _self.animating = false
+                        _self.delegate?.koloda(_self, didShowCardAtIndex: UInt(_self.currentCardNumber))
+                    }
                 })
             }
             

            self?.userInteractionEnabled = true
            self?.animating = false
        }
    func applyRevertAnimation(card: DraggableCardView, complete: (() -> Void)? = nil) {
        animating = true
        
        let firstCardAppearAnimation = POPBasicAnimation(propertyNamed: kPOPViewAlpha)
        
        firstCardAppearAnimation.toValue = NSNumber(float: Float(revertCardAnimationToValue))
        firstCardAppearAnimation.fromValue =  NSNumber(float: Float(revertCardAnimationFromValue))
        firstCardAppearAnimation.duration = revertCardAnimationDuration
        firstCardAppearAnimation.completionBlock = {
            (_, _) in
            
            self.animating = false
            complete?()
        }
        
        card.pop_addAnimation(firstCardAppearAnimation, forKey: revertCardAnimationName)
    }
    
    //MARK: DraggableCardDelegate

private let defaultAlphaValueTransparent: CGFloat = 0.0
private let defaultAlphaValueSemiTransparent: CGFloat = 0.7

public protocol KolodaViewDataSource:class {
    
    func koloda(kolodaNumberOfCards koloda: KolodaView) -> UInt
