         var yPositionDeltas : [CGFloat] = [];
         let baseYPosition : CGFloat;
         
-        if(newPile!.topCard() != nil && toLocation!.y != solitaireScene.topRowYPos) {
+        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 if(toLocation!.y == solitaireScene!.bottomRowYPos) {
+            baseYPosition = solitaireScene!.bottomRowYPos;
         } else {
-            baseYPosition = solitaireScene.topRowYPos;
+            baseYPosition = solitaireScene!.topRowYPos;
         }
         
         while(!oldPile!.isEmpty() && !oldPile!.topCard()!.isEqualTo(self.card)) {

            let cardNode = nodeFromCard(tempCard);
            let cardPosition : CGPoint;
            
            if(baseYPosition != solitaireScene.topRowYPos) {
                cardPosition = CGPoint(x: toLocation!.x, y: (CGFloat(baseYPosition) - yPositionDeltas[--count]));
            } else {
                cardPosition = CGPoint(x: toLocation!.x, y: baseYPosition);

    * Increase this card's z-index so it is above all other cards and save the fromLocation.
    */
    override func touchesBegan(touches: Set<UITouch>, withEvent event: UIEvent?) {
        fromLocation = solitaireScene!.snapToCGPoint(self.position);
        let touchedPile = solitaireScene!.CGPointToPile(fromLocation!);
        
        if(touchedPile != nil) {
            if(!faceUp) {
