private CardList get3Colors(CardList in) {
        int a;
        int b;
        int c;

        a = CardUtil.getRandomIndex(Constant.Color.onlyColors);
        do {
            b = CardUtil.getRandomIndex(Constant.Color.onlyColors);
            c = CardUtil.getRandomIndex(Constant.Color.onlyColors);
        } while (a == b || a == c || b == c);//do not want to get the same color thrice

        color1 = Constant.Color.onlyColors[a];
        color2 = Constant.Color.onlyColors[b];
        color3 = Constant.Color.onlyColors[c];

        CardList out = new CardList();
        out.addAll(CardListUtil.getColor(in, color1));
        out.addAll(CardListUtil.getColor(in, color2));
        out.addAll(CardListUtil.getColor(in, color3));
        out.shuffle();

        CardList artifact = in.filter(new CardListFilter() {
            public boolean addCard(Card c) {
                //is this really a colorless artifact and not something
                //wierd like Sarcomite Myr which is a colored artifact
                return c.isArtifact() &&
                        CardUtil.getColors(c).contains(Constant.Color.Colorless) &&
                        !Gui_NewGame.removeArtifacts.isSelected();
            }
        });
        out.addAll(artifact);

        out = out.filter(new CardListFilter() {
            public boolean addCard(Card c) {
                if (c.isCreature() &&
                        c.getNetAttack() <= 1 &&
                        Gui_NewGame.removeSmallCreatures.isSelected()) {
                    return false;
                }

                return true;
            }
        });

        out = filterBadCards(out, 3);
        return out;
    }