private static void upkeep_Echo() {
        CardList list = AllZoneUtil.getPlayerCardsInPlay(AllZone.getPhase().getPlayerTurn());
        list = list.filter(new CardListFilter() {
            public boolean addCard(Card c) {
                return c.hasKeyword("(Echo unpaid)");
            }
        });

        for (int i = 0; i < list.size(); i++) {
            final Card c = list.get(i);
            if (c.getIntrinsicKeyword().contains("(Echo unpaid)")) {

                final Command paidCommand = Command.Blank;

                final Command unpaidCommand = new Command() {
                    private static final long serialVersionUID = -7354791599039157375L;

                    public void execute() {
                        AllZone.getGameAction().sacrifice(c);
                    }
                };

                final Ability aiPaid = upkeepAIPayment(c, c.getEchoCost());

                final StringBuilder sb = new StringBuilder();
                sb.append("Echo for ").append(c).append("\n");

                final Ability sacAbility = new Ability(c, "0") {
                    @Override
                    public void resolve() {
                        if (c.getController().isHuman()) {
                            payManaDuringAbilityResolve(sb.toString(), c.getEchoCost(), paidCommand, unpaidCommand);
                        } else //computer
                        {
                            if (ComputerUtil.canPayCost(aiPaid))
                                ComputerUtil.playNoStack(aiPaid);
                            else
                                AllZone.getGameAction().sacrifice(c);
                        }
                    }
                };
                sacAbility.setStackDescription(sb.toString());

                AllZone.getStack().addSimultaneousStackEntry(sacAbility);


                c.removeIntrinsicKeyword("(Echo unpaid)");
            }
        }
    }