    private void updateColony(Colony colony) {
        final Specification spec = getSpecification();
        final GoodsType foodType = spec.getPrimaryFoodType();
        final UnitType colonistType
            = spec.getUnitType("model.unit.freeColonist");
        final ImageLibrary lib = getCanvas().getImageLibrary();
        final String cac = colony.getId();
        List<Tile> exploreTiles = new ArrayList<Tile>();
        List<Tile> clearTiles = new ArrayList<Tile>();
        List<Tile> plowTiles = new ArrayList<Tile>();
        List<Tile> roadTiles = new ArrayList<Tile>();
        colony.getColonyTileTodo(exploreTiles, clearTiles, plowTiles,
            roadTiles);
        boolean plowMe = plowTiles.size() > 0
            && plowTiles.get(0) == colony.getTile();
        int newFood = colony.getAdjustedNetProductionOf(foodType);
        boolean famine = newFood < 0
            && colony.getGoodsCount(foodType) / -newFood <= 3;
        int newColonist = (newFood == 0) ? 0
            : (newFood < 0) ? colony.getGoodsCount(foodType) / newFood - 1
            : (Settlement.FOOD_PER_COLONIST - colony.getGoodsCount(foodType))
                / newFood + 1;
        int pop = colony.getUnitCount();
        int grow, bonus = colony.getProductionBonus();
        if (bonus < 0) {
            int i;
            for (i = 1; i < pop; i++) {
                if (colony.governmentChange(pop - i) == 1) break;
            }
            grow = -i;
        } else {
            int i;
            for (i = 1; i < pop; i++) {
                if (colony.governmentChange(pop + i) == -1) break;
            }
            grow = i - 1;
        }
        JButton b = colourButton(cac, colony.getName(), null,
            (bonus <= -2) ? cAlarm
            : (bonus == -1) ? cWarn
            : (bonus == 0) ? cPlain
            : (bonus == 1) ? cExport
            : cGood,
            null);
        if (famine) {
            b.setFont(b.getFont().deriveFont(Font.BOLD));
        }
        reportPanel.add(b, "newline");
        if (exploreTiles.size() > 0) {
            b = colourButton(cac, Integer.toString(exploreTiles.size()),
                null, cAlarm,
                stpl("report.colony.exploring.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", exploreTiles.size()));
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        if (plowTiles.size() > 0) {
            b = colourButton(cac, Integer.toString(plowTiles.size()),
                null, cAlarm,
                stpl("report.colony.plowing.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", plowTiles.size()));
            if (plowMe) {
                b.setFont(b.getFont().deriveFont(Font.BOLD));
            }
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        if (roadTiles.size() > 0) {
            b = colourButton(cac, Integer.toString(roadTiles.size()),
                null, cAlarm,
                stpl("report.colony.roadBuilding.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", roadTiles.size()));
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        final int adjustment = colony.getWarehouseCapacity()
            / GoodsContainer.CARGO_SIZE;
        for (GoodsType g : goodsTypes) {
            int p = colony.getAdjustedNetProductionOf(g);
            ExportData exportData = colony.getExportData(g);
            int low = exportData.getLowLevel() * adjustment;
            int high = exportData.getHighLevel() * adjustment;
            int amount = colony.getGoodsCount(g);
            Color c;
            StringTemplate tip;
            if (p < 0) {
                if (amount < low) {
                    int turns = amount / p + 1;
                    c = cAlarm;
                    tip = stpl("report.colony.production.low.description")
                        .addName("%colony%", colony.getName())
                        .add("%goods%", g.getNameKey())
                        .addAmount("%amount%", p)
                        .addAmount("%turns%", turns);
                } else {
                    c = cWarn;
                    tip = stpl("report.colony.production.description")
                            .addName("%colony%", colony.getName())
                            .add("%goods%", g.getNameKey())
                        .addAmount("%amount%", p);
                }
            } else if (p == 0) {
                if (colony.getProductionOf(g) == 0) {
                    c = null;
                    tip = null;
                } else {
                    c = cPlain;
                    tip = stpl("report.colony.production.description")
                        .addName("%colony%", colony.getName())
                        .add("%goods%", g.getNameKey())
                        .addAmount("%amount%", p);
                }
            } else if (exportData.isExported()) {
                c = cExport;
                tip = stpl("report.colony.production.export.description")
                    .addName("%colony%", colony.getName())
                    .add("%goods%", g.getNameKey())
                    .addAmount("%amount%", p)
                    .addAmount("%export%", exportData.getExportLevel());
            } else if (g != foodType
                && amount + p > colony.getWarehouseCapacity()) {
                c = cAlarm;
                int waste = amount + p - colony.getWarehouseCapacity();
                tip = stpl("report.colony.production.waste.description")
                    .addName("%colony%", colony.getName())
                    .add("%goods%", g.getNameKey())
                    .addAmount("%amount%", p)
                    .addAmount("%waste%", waste);
            } else if (g != foodType && amount > high) {
                int turns = (colony.getWarehouseCapacity() - amount) / p;
                c = cWarn;
                tip = stpl("report.colony.production.high.description")
                    .addName("%colony%", colony.getName())
                    .add("%goods%", g.getNameKey())
                    .addAmount("%amount%", p)
                    .addAmount("%turns%", turns);
            } else {
                c = cGood;
                tip = stpl("report.colony.production.description")
                    .addName("%colony%", colony.getName())
                    .add("%goods%", g.getNameKey())
                    .addAmount("%amount%", p);
            }
            if (c == null) reportPanel.add(new JLabel(""));
            else {
                b = colourButton(cac, Integer.toString(p), null, c, tip);
                reportPanel.add(b);
            }
        }
        HashMap<UnitType, Suggestion> improve
            = new HashMap<UnitType, Suggestion>();
        HashMap<UnitType, Suggestion> want
            = new HashMap<UnitType, Suggestion>();
        List<Unit> teachers = new ArrayList<Unit>();
        List<Unit> notWorking = new ArrayList<Unit>();
        for (Unit u : colony.getTile().getUnitList()) {
            if (u.getState() != UnitState.FORTIFIED
                && u.getState() != UnitState.SENTRY) {
                notWorking.add(u);
            }
        }
        for (WorkLocation wl : colony.getWorkLocations()) {
            if (wl instanceof ColonyTile) {
                if (!((ColonyTile) wl).canBeWorked()) continue;
            } else if (wl instanceof Building) {
                if (((Building) wl).canTeach()) {
                    teachers.addAll(wl.getUnitList());
                    continue;
                }
            }
            UnitType expert;
            GoodsType work;
            boolean needsWorker = wl.getUnitCount() < wl.getUnitCapacity();
            int delta;
            for (Unit u : wl.getUnitList()) {
                if (u.getTeacher() != null) {
                    continue; 
                } else if ((work = u.getWorkType()) == null) {
                    notWorking.add(u);
                    needsWorker = true;
                } else if ((expert = spec.getExpertForProducing(work)) != null
                    && expert != u.getType()
                    && (delta = wl.getPotentialProduction(expert, work)
                        - wl.getPotentialProduction(u.getType(), work)) > 0
                    && wantGoods(wl, work, u, expert)) {
                    addSuggestion(improve, u.getType(), expert,
                        work, delta);
                }
            }
            if (needsWorker
                && (work = bestProduction(wl, colonistType)) != null
                && (expert = spec.getExpertForProducing(work)) != null
                && (delta = wl.getPotentialProduction(expert, work)) > 0
                && wantGoods(wl, work, null, expert)) {
                addSuggestion(want, null, expert, work, delta);
            }
        }
        List<UnitType> couldWork = new ArrayList<UnitType>();
        for (Unit u : notWorking) {
            GoodsType t = u.getWorkType();
            WorkLocation wl = (u.getLocation() instanceof Building
                || u.getLocation() instanceof ColonyTile)
                ? (WorkLocation) u.getLocation()
                : null;
            GoodsType w = bestProduction(wl, colonistType);
            if (w == null || w != t) couldWork.add(u.getType());
        }
        if (newColonist > 0) {
            b = colourButton(cac, Integer.toString(newColonist),
                null, cGood,
                stpl("report.colony.arriving.description")
                    .addName("%colony%", colony.getName())
                    .add("%unit%", colonistType.getNameKey())
                    .addAmount("%turns%", newColonist));
            reportPanel.add(b);
        } else if (newColonist < 0) {
            b = colourButton(cac, Integer.toString(-newColonist),
                null, (newColonist >= -3) ? cAlarm : cWarn,
                stpl("report.colony.starving.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%turns%", -newColonist));
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        BuildableType build = colony.getCurrentlyBuilding();
        int fields = 1 + teachers.size();
        String layout = (fields > 1) ? "split " + fields : null;
        String qac = BUILDQUEUE + colony.getId();
        if (build == null) {
            b = colourButton(qac, Messages.message("nothing"),
                null, cAlarm,
                stpl("report.colony.making.noconstruction.description")
                    .addName("%colony%", colony.getName()));
            b.setFont(b.getFont().deriveFont(Font.BOLD));
        } else {
            int turns = colony.getTurnsToComplete(build);
            String name = Messages.message(build.getNameKey());
            if (turns == FreeColObject.UNDEFINED) {
                b = colourButton(qac, name, null, cAlarm,
                    stpl("report.colony.making.noconstruction.description")
                        .addName("%colony%", colony.getName()));
            } else if (turns >= 0) {
                turns++;
                name += " " + Integer.toString(turns);
                b = colourButton(qac, name, null, cGood,
                    stpl("report.colony.making.constructing.description")
                        .addName("%colony%", colony.getName())
                        .add("%buildable%", build.getNameKey())
                        .addAmount("%turns%", turns));;
            } else if (turns < 0) {
                turns = -turns;
                name += " " + Integer.toString(turns);
                b = colourButton(qac, name, null, cAlarm,
                    stpl("report.colony.making.block.description")
                        .addName("%colony%", colony.getName())
                        .add("%buildable%", build.getNameKey())
                        .addAmount("%turns%", turns));
            }
        }
        reportPanel.add(b, layout);
        layout = null;
        Collections.sort(teachers, teacherComparator);
        for (Unit u : teachers) {
            int left = u.getNeededTurnsOfTraining()
                - u.getTurnsOfTraining();
            JLabel teach;
            if (left <= 0) {
                b = colourButton(cac, Integer.toString(0),
                    lib.getUnitImageIcon(u.getType(), Role.DEFAULT,
                        true, 0.333), cAlarm,
                    stpl("report.colony.making.noteach.description")
                        .addName("%colony%", colony.getName())
                        .addStringTemplate("%teacher%", u.getLabel()));
            } else {
                b = colourButton(cac, Integer.toString(left),
                    lib.getUnitImageIcon(u.getType(), Role.DEFAULT,
                        true, 0.333), Color.BLACK,
                    stpl("report.colony.making.educating.description")
                        .addName("%colony%", colony.getName())
                        .addStringTemplate("%teacher%", u.getLabel())
                        .addAmount("%turns%", left));
            }
            reportPanel.add(b);
        }
        if (fields <= 0) reportPanel.add(new JLabel(""));
        if (!improve.isEmpty()) {
            addUnits(improve, couldWork, colony, grow);
        } else {
            reportPanel.add(new JLabel(""));
        }
        if (grow < 0) {
            b = colourButton(cac, Integer.toString(-grow), null, cAlarm,
                stpl("report.colony.shrinking.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", -grow));
            reportPanel.add(b);
        } else if (grow > 0) {
            b = colourButton(cac, Integer.toString(grow), null, cGood,
                stpl("report.colony.growing.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", grow));
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        if (!want.isEmpty()) {
            grow = Math.min(grow, colony.getNetProductionOf(foodType)
                / Settlement.FOOD_PER_COLONIST);
            addUnits(want, couldWork, colony, grow);
        } else {
            reportPanel.add(new JLabel(""));
        }
    }

    private void updateColony(Colony colony) {
        final Specification spec = getSpecification();
        final GoodsType foodType = spec.getPrimaryFoodType();
        final UnitType colonistType
            = spec.getUnitType("model.unit.freeColonist");
        final ImageLibrary lib = getCanvas().getImageLibrary();
        final String cac = colony.getId();
        List<Tile> exploreTiles = new ArrayList<Tile>();
        List<Tile> clearTiles = new ArrayList<Tile>();
        List<Tile> plowTiles = new ArrayList<Tile>();
        List<Tile> roadTiles = new ArrayList<Tile>();
        colony.getColonyTileTodo(exploreTiles, clearTiles, plowTiles,
            roadTiles);
        boolean plowMe = plowTiles.size() > 0
            && plowTiles.get(0) == colony.getTile();
        int newFood = colony.getAdjustedNetProductionOf(foodType);
        boolean famine = newFood < 0
            && colony.getGoodsCount(foodType) / -newFood <= 3;
        int newColonist = (newFood == 0) ? 0
            : (newFood < 0) ? colony.getGoodsCount(foodType) / newFood - 1
            : (Settlement.FOOD_PER_COLONIST - colony.getGoodsCount(foodType))
                / newFood + 1;
        int pop = colony.getUnitCount();
        int grow, bonus = colony.getProductionBonus();
        if (bonus < 0) {
            int i;
            for (i = 1; i < pop; i++) {
                if (colony.governmentChange(pop - i) == 1) break;
            }
            grow = -i;
        } else {
            int i;
            for (i = 1; i < pop; i++) {
                if (colony.governmentChange(pop + i) == -1) break;
            }
            grow = i - 1;
        }
        JButton b = colourButton(cac, colony.getName(), null,
            (bonus <= -2) ? cAlarm
            : (bonus == -1) ? cWarn
            : (bonus == 0) ? cPlain
            : (bonus == 1) ? cExport
            : cGood,
            null);
        if (famine) {
            b.setFont(b.getFont().deriveFont(Font.BOLD));
        }
        reportPanel.add(b, "newline");
        if (exploreTiles.size() > 0) {
            b = colourButton(cac, Integer.toString(exploreTiles.size()),
                null, cAlarm,
                stpl("report.colony.exploring.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", exploreTiles.size()));
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        if (plowTiles.size() > 0) {
            b = colourButton(cac, Integer.toString(plowTiles.size()),
                null, cAlarm,
                stpl("report.colony.plowing.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", plowTiles.size()));
            if (plowMe) {
                b.setFont(b.getFont().deriveFont(Font.BOLD));
            }
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        if (roadTiles.size() > 0) {
            b = colourButton(cac, Integer.toString(roadTiles.size()),
                null, cAlarm,
                stpl("report.colony.roadBuilding.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", roadTiles.size()));
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        final int adjustment = colony.getWarehouseCapacity()
            / GoodsContainer.CARGO_SIZE;
        for (GoodsType g : goodsTypes) {
            int p = colony.getAdjustedNetProductionOf(g);
            ExportData exportData = colony.getExportData(g);
            int low = exportData.getLowLevel() * adjustment;
            int high = exportData.getHighLevel() * adjustment;
            int amount = colony.getGoodsCount(g);
            Color c;
            StringTemplate tip;
            if (p < 0) {
                if (amount < low) {
                    int turns = -amount / p + 1;
                    c = cAlarm;
                    tip = stpl("report.colony.production.low.description")
                        .addName("%colony%", colony.getName())
                        .add("%goods%", g.getNameKey())
                        .addAmount("%amount%", p)
                        .addAmount("%turns%", turns);
                } else {
                    c = cWarn;
                    tip = stpl("report.colony.production.description")
                            .addName("%colony%", colony.getName())
                            .add("%goods%", g.getNameKey())
                        .addAmount("%amount%", p);
                }
            } else if (p == 0) {
                if (colony.getProductionOf(g) == 0) {
                    c = null;
                    tip = null;
                } else {
                    c = cPlain;
                    tip = stpl("report.colony.production.description")
                        .addName("%colony%", colony.getName())
                        .add("%goods%", g.getNameKey())
                        .addAmount("%amount%", p);
                }
            } else if (exportData.isExported()) {
                c = cExport;
                tip = stpl("report.colony.production.export.description")
                    .addName("%colony%", colony.getName())
                    .add("%goods%", g.getNameKey())
                    .addAmount("%amount%", p)
                    .addAmount("%export%", exportData.getExportLevel());
            } else if (g != foodType
                && amount + p > colony.getWarehouseCapacity()) {
                c = cAlarm;
                int waste = amount + p - colony.getWarehouseCapacity();
                tip = stpl("report.colony.production.waste.description")
                    .addName("%colony%", colony.getName())
                    .add("%goods%", g.getNameKey())
                    .addAmount("%amount%", p)
                    .addAmount("%waste%", waste);
            } else if (g != foodType && amount > high) {
                int turns = (colony.getWarehouseCapacity() - amount) / p;
                c = cWarn;
                tip = stpl("report.colony.production.high.description")
                    .addName("%colony%", colony.getName())
                    .add("%goods%", g.getNameKey())
                    .addAmount("%amount%", p)
                    .addAmount("%turns%", turns);
            } else {
                c = cGood;
                tip = stpl("report.colony.production.description")
                    .addName("%colony%", colony.getName())
                    .add("%goods%", g.getNameKey())
                    .addAmount("%amount%", p);
            }
            if (c == null) reportPanel.add(new JLabel(""));
            else {
                b = colourButton(cac, Integer.toString(p), null, c, tip);
                reportPanel.add(b);
            }
        }
        HashMap<UnitType, Suggestion> improve
            = new HashMap<UnitType, Suggestion>();
        HashMap<UnitType, Suggestion> want
            = new HashMap<UnitType, Suggestion>();
        List<Unit> teachers = new ArrayList<Unit>();
        List<Unit> notWorking = new ArrayList<Unit>();
        for (Unit u : colony.getTile().getUnitList()) {
            if (u.getState() != UnitState.FORTIFIED
                && u.getState() != UnitState.SENTRY) {
                notWorking.add(u);
            }
        }
        for (WorkLocation wl : colony.getWorkLocations()) {
            if (wl instanceof ColonyTile) {
                if (!((ColonyTile) wl).canBeWorked()) continue;
            } else if (wl instanceof Building) {
                if (((Building) wl).canTeach()) {
                    teachers.addAll(wl.getUnitList());
                    continue;
                }
            }
            UnitType expert;
            GoodsType work;
            boolean needsWorker = wl.getUnitCount() < wl.getUnitCapacity();
            int delta;
            for (Unit u : wl.getUnitList()) {
                if (u.getTeacher() != null) {
                    continue; 
                } else if ((work = u.getWorkType()) == null) {
                    notWorking.add(u);
                    needsWorker = true;
                } else if ((expert = spec.getExpertForProducing(work)) != null
                    && expert != u.getType()
                    && (delta = wl.getPotentialProduction(expert, work)
                        - wl.getPotentialProduction(u.getType(), work)) > 0
                    && wantGoods(wl, work, u, expert)) {
                    addSuggestion(improve, u.getType(), expert,
                        work, delta);
                }
            }
            if (needsWorker
                && (work = bestProduction(wl, colonistType)) != null
                && (expert = spec.getExpertForProducing(work)) != null
                && (delta = wl.getPotentialProduction(expert, work)) > 0
                && wantGoods(wl, work, null, expert)) {
                addSuggestion(want, null, expert, work, delta);
            }
        }
        List<UnitType> couldWork = new ArrayList<UnitType>();
        for (Unit u : notWorking) {
            GoodsType t = u.getWorkType();
            WorkLocation wl = (u.getLocation() instanceof Building
                || u.getLocation() instanceof ColonyTile)
                ? (WorkLocation) u.getLocation()
                : null;
            GoodsType w = bestProduction(wl, colonistType);
            if (w == null || w != t) couldWork.add(u.getType());
        }
        if (newColonist > 0) {
            b = colourButton(cac, Integer.toString(newColonist),
                null, cGood,
                stpl("report.colony.arriving.description")
                    .addName("%colony%", colony.getName())
                    .add("%unit%", colonistType.getNameKey())
                    .addAmount("%turns%", newColonist));
            reportPanel.add(b);
        } else if (newColonist < 0) {
            b = colourButton(cac, Integer.toString(-newColonist),
                null, (newColonist >= -3) ? cAlarm : cWarn,
                stpl("report.colony.starving.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%turns%", -newColonist));
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        BuildableType build = colony.getCurrentlyBuilding();
        int fields = 1 + teachers.size();
        String layout = (fields > 1) ? "split " + fields : null;
        String qac = BUILDQUEUE + colony.getId();
        if (build == null) {
            b = colourButton(qac, Messages.message("nothing"),
                null, cAlarm,
                stpl("report.colony.making.noconstruction.description")
                    .addName("%colony%", colony.getName()));
            b.setFont(b.getFont().deriveFont(Font.BOLD));
        } else {
            int turns = colony.getTurnsToComplete(build);
            String name = Messages.message(build.getNameKey());
            if (turns == FreeColObject.UNDEFINED) {
                b = colourButton(qac, name, null, cAlarm,
                    stpl("report.colony.making.noconstruction.description")
                        .addName("%colony%", colony.getName()));
            } else if (turns >= 0) {
                turns++;
                name += " " + Integer.toString(turns);
                b = colourButton(qac, name, null, cGood,
                    stpl("report.colony.making.constructing.description")
                        .addName("%colony%", colony.getName())
                        .add("%buildable%", build.getNameKey())
                        .addAmount("%turns%", turns));;
            } else if (turns < 0) {
                turns = -turns;
                name += " " + Integer.toString(turns);
                b = colourButton(qac, name, null, cAlarm,
                    stpl("report.colony.making.block.description")
                        .addName("%colony%", colony.getName())
                        .add("%buildable%", build.getNameKey())
                        .addAmount("%turns%", turns));
            }
        }
        reportPanel.add(b, layout);
        layout = null;
        Collections.sort(teachers, teacherComparator);
        for (Unit u : teachers) {
            int left = u.getNeededTurnsOfTraining()
                - u.getTurnsOfTraining();
            JLabel teach;
            if (left <= 0) {
                b = colourButton(cac, Integer.toString(0),
                    lib.getUnitImageIcon(u.getType(), Role.DEFAULT,
                        true, 0.333), cAlarm,
                    stpl("report.colony.making.noteach.description")
                        .addName("%colony%", colony.getName())
                        .addStringTemplate("%teacher%", u.getLabel()));
            } else {
                b = colourButton(cac, Integer.toString(left),
                    lib.getUnitImageIcon(u.getType(), Role.DEFAULT,
                        true, 0.333), Color.BLACK,
                    stpl("report.colony.making.educating.description")
                        .addName("%colony%", colony.getName())
                        .addStringTemplate("%teacher%", u.getLabel())
                        .addAmount("%turns%", left));
            }
            reportPanel.add(b);
        }
        if (fields <= 0) reportPanel.add(new JLabel(""));
        if (!improve.isEmpty()) {
            addUnits(improve, couldWork, colony, grow);
        } else {
            reportPanel.add(new JLabel(""));
        }
        if (grow < 0) {
            b = colourButton(cac, Integer.toString(-grow), null, cAlarm,
                stpl("report.colony.shrinking.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", -grow));
            reportPanel.add(b);
        } else if (grow > 0) {
            b = colourButton(cac, Integer.toString(grow), null, cGood,
                stpl("report.colony.growing.description")
                    .addName("%colony%", colony.getName())
                    .addAmount("%amount%", grow));
            reportPanel.add(b);
        } else {
            reportPanel.add(new JLabel(""));
        }
        if (!want.isEmpty()) {
            grow = Math.min(grow, colony.getNetProductionOf(foodType)
                / Settlement.FOOD_PER_COLONIST);
            addUnits(want, couldWork, colony, grow);
        } else {
            reportPanel.add(new JLabel(""));
        }
    }
