         var cards:[Card] = [self.card]
         
         // If this is the waste pile, just return the top card.
-        if(!self.solitaireGame.wastePile.isEmpty() && pile.topCard()!.isEqualTo(self.solitaireGame.wastePile.topCard()!, ignoreSuit: false)) {
+        if(!self.solitaireGame!.wastePile.isEmpty() && pile.topCard()!.isEqualTo(self.solitaireGame!.wastePile.topCard()!, ignoreSuit: false)) {
             return cards;
         }
         

    let backTexture: SKTexture
    var faceUp: Bool
    
    var solitaireScene: SolitaireScene
    var solitaireGame: Solitaire
    
    var toLocation: CGPoint?        // Where the user lifted their finger
    var fromLocation: CGPoint?      // Where the user began dragging
    
    var newPile: StackPile?         // Pile to which the user dragged
    var oldPile: StackPile?         // Original pile from which the user dragged
    
    var touchedHidden = false;      // Did the user touch a card that was face down?
    var flipHidden = false;         // Should the hidden card be flipped?

        var yPositionDeltas : [CGFloat] = [];
        let baseYPosition : CGFloat;
        
        if(newPile!.topCard() != nil && toLocation!.y != solitaireScene!.topRowYPos) {
            baseYPosition = nodeFromCard(newPile!.topCard()!).position.y - CGFloat(cardConstants.CARD_CASCADE_OFFSET);
        } else if(toLocation!.y == solitaireScene!.bottomRowYPos) {
            baseYPosition = solitaireScene!.bottomRowYPos;
        } else {
            baseYPosition = solitaireScene!.topRowYPos;
        }
        
        while(!oldPile!.isEmpty() && !oldPile!.topCard()!.isEqualTo(self.card)) {
