private void addUnits(final HashMap<UnitType, Suggestion> suggestions,
                          List<UnitType> have, Colony colony, int grow) {
        final String action = colony.getId();
        final ImageLibrary lib = getGUI().getImageLibrary();

        String layout = (suggestions.size() <= 1) ? null
            : "split " + Integer.toString(suggestions.size());
        List<UnitType> types = new ArrayList<UnitType>();
        types.addAll(suggestions.keySet());
        Collections.sort(types, new Comparator<UnitType>() {
                public int compare(UnitType t1, UnitType t2) {
                    int cmp = suggestions.get(t2).amount
                        - suggestions.get(t1).amount;
                    return (cmp != 0) ? cmp
                        : t1.getId().compareTo(t2.getId());
                }
            });
        for (UnitType type : types) {
            boolean present = false;
            if (have.contains(type)) {
                have.remove(type);
                present = true;
            }
            Suggestion suggestion = suggestions.get(type);
            String label = Integer.toString(suggestion.amount);
            ImageIcon ii = lib.getUnitImageIcon(type, Role.DEFAULT,
                true, 0.333);
            StringTemplate tip = (suggestion.oldType == null)
                ? stpl("report.colony.wanting.description")
                    .addName("%colony%", colony.getName())
                    .add("%unit%", type.getNameKey())
                    .add("%goods%", suggestion.goodsType.getNameKey())
                    .addAmount("%amount%", suggestion.amount)
                : stpl("report.colony.improving.description")
                    .addName("%colony%", colony.getName())
                    .add("%oldUnit%", suggestion.oldType.getNameKey())
                    .add("%unit%", type.getNameKey())
                    .add("%goods%", suggestion.goodsType.getNameKey())
                    .addAmount("%amount%", suggestion.amount);
            JButton b = colourButton(action, label, ii,
                (present) ? cGood : cPlain, tip);
            reportPanel.add(b, layout);
            layout = null;
        }
    }