public void finishResolving(SpellAbility sa, boolean fizzle) {

        //remove card from the stack
        removeCardFromStack(sa, fizzle);

        // After SA resolves we have to do a handful of things
        setResolving(false);
        this.unfreezeStack();
        sa.resetOnceResolved();

        AllZone.getGameAction().checkStateEffects();

        AllZone.getPhase().setNeedToNextPhase(false);

        if (AllZone.getPhase().inCombat())
            CombatUtil.showCombat();

        GuiDisplayUtil.updateGUI();

        //TODO - this is a huge hack.  Why is this necessary?
        //hostCard in AF is not the same object that's on the battlefield
        //verified by System.identityHashCode(card);
        Card tmp = sa.getSourceCard();
        if (tmp.getClones().size() > 0) {
            for (Card c : AllZoneUtil.getCardsInPlay()) {
                if (c.equals(tmp)) {
                    c.setClones(tmp.getClones());
                }
            }

        }
    }