public void finishPaying() {
        if (isFree || payment.isAllPaid()) {
            if (skipStack)
                AbilityFactory.resolve(ability, false);
            else
                addAbilityToStack();

            select.resetTargets();
            AllZone.getGameAction().checkStateEffects();
        } else if (payment.isCanceled()) {
            Card c = ability.getSourceCard();
            if (bCasting && !c.isCopiedSpell()) {    // and not a copy
                // add back to Previous Zone
                AllZone.getGameAction().moveTo(fromZone, c);
            }

            if (select != null)
                select.resetTargets();

            payment.cancelPayment();
            AllZone.getStack().clearFrozen();
        }
    }