public List<Modifier> getProductionModifiers(GoodsType goodsType, 
                                                 UnitType unitType) {
        if (goodsType == null) {
            throw new IllegalArgumentException("Null GoodsType.");
        }
        List<Modifier> result = new ArrayList<Modifier>();
        final Colony colony = getColony();
        final Player owner = colony.getOwner();
        final TileType tileType = getWorkTile().getType();
        final String id = goodsType.getId();
        final Turn turn = getGame().getTurn();
        if (isColonyCenterTile()) {
            if (tileType.isPrimaryGoodsType(goodsType)
                || tileType.isSecondaryGoodsType(goodsType)) {
                result.addAll(workTile.getProductionModifiers(goodsType, null));
                result.addAll(colony.getModifierSet(id, null, turn));
                result.add(colony.getProductionModifier(goodsType));
                if (owner != null) {
                    result.addAll(owner.getModifierSet(id, null, turn));
                }
            }
        } else {
            result.addAll(workTile.getProductionModifiers(goodsType, unitType));
            if (FeatureContainer.applyModifiers(0f, turn, result) > 0) {
                result.addAll(colony.getModifierSet(id, null, turn));
                if (unitType != null) {
                    result.add(colony.getProductionModifier(goodsType));
                    result.addAll(unitType.getModifierSet(id, tileType, turn));
                    if (owner != null) {
                        result.addAll(owner.getModifierSet(id, null, turn));
                    }
                } else {
                    if (owner != null) {
                        result.addAll(owner.getModifierSet(id, tileType, turn));
                    }
                }
            }
        }
        return result;
    }