private void removeFromStack(SpellAbility tgtSA, SpellAbility srcSA, SpellAbility_StackInstance si) {
        AllZone.getStack().remove(si);

        if (tgtSA.isAbility()) {
            //For Ability-targeted counterspells - do not move it anywhere, even if Destination$ is specified.
        } else if (destination.equals("Graveyard")) {
            AllZone.getGameAction().moveToGraveyard(tgtSA.getSourceCard());
        } else if (destination.equals("Exile")) {
            AllZone.getGameAction().exile(tgtSA.getSourceCard());
        } else if (destination.equals("TopOfLibrary")) {
            AllZone.getGameAction().moveToLibrary(tgtSA.getSourceCard());
        } else if (destination.equals("Hand")) {
            AllZone.getGameAction().moveToHand(tgtSA.getSourceCard());
        } else if (destination.equals("BottomOfLibrary")) {
            AllZone.getGameAction().moveToBottomOfLibrary(tgtSA.getSourceCard());
        } else if (destination.equals("ShuffleIntoLibrary")) {
            AllZone.getGameAction().moveToBottomOfLibrary(tgtSA.getSourceCard());
            tgtSA.getSourceCard().getController().shuffle();
        } else {
            throw new IllegalArgumentException("AbilityFactory_CounterMagic: Invalid Destination argument for card " + srcSA.getSourceCard().getName());
        }

        if (!tgtSA.isAbility())
            System.out.println("Send countered spell to " + destination);
    }