* @param cs A <code>ChangeSet</code> to update.
     */
    public void csStartTurn(Random random, ChangeSet cs) {
        Game game = getGame();
        if (isEuropean()) {
            csBombardEnemyShips(random, cs);

            csYearlyGoodsAdjust(random, cs);

            FoundingFather father = checkFoundingFather();
            if (father != null) {
                csAddFoundingFather(father, random, cs);
                clearOfferedFathers();
            }

        } else if (isIndian()) {
            // We do not have to worry about Player level stance
            // changes driving Stance, as that is delegated to the AI.
            //
            // However we want to notify of individual settlements
            // that change tension level, but there are complex
            // interactions between settlement and player tensions.
            // The simple way to do it is just to save all old tension
            // levels and check if they have changed after applying
            // all the changes.
            List<IndianSettlement> allSettlements = getIndianSettlements();
            java.util.Map<IndianSettlement,
                java.util.Map<Player, Tension.Level>> oldLevels
                = new HashMap<IndianSettlement,
                java.util.Map<Player, Tension.Level>>();
            for (IndianSettlement settlement : allSettlements) {
                java.util.Map<Player, Tension.Level> oldLevel
                    = new HashMap<Player, Tension.Level>();
                oldLevels.put(settlement, oldLevel);
                for (Player enemy : game.getLiveEuropeanPlayers()) {
                    Tension alarm = settlement.getAlarm(enemy);
                    if (alarm != null) oldLevel.put(enemy, alarm.getLevel());
                }
            }

            // Do the settlement alarms first.
            for (IndianSettlement settlement : allSettlements) {
                java.util.Map<Player, Integer> extra
                    = new HashMap<Player, Integer>();
                for (Player enemy : game.getLiveEuropeanPlayers()) {
                    extra.put(enemy, new Integer(0));
                }

                // Look at the uses of tiles surrounding the settlement.
                int alarmRadius = settlement.getRadius() + ALARM_RADIUS;
                int alarm = 0;
                for (Tile tile: settlement.getTile()
                         .getSurroundingTiles(alarmRadius)) {
                    Colony colony = tile.getColony();
                    if (tile.getFirstUnit() != null) { // Military units
                        Player enemy =  tile.getFirstUnit().getOwner();
                        if (enemy.isEuropean()) {
                            alarm = extra.get(enemy);
                            for (Unit unit : tile.getUnitList()) {
                                if (unit.isOffensiveUnit() && !unit.isNaval()) {
                                    alarm += unit.getType().getOffence();
                                }
                            }
                            extra.put(enemy, alarm);
                        }
                    } else if (colony != null) { // Colonies
                        Player enemy = colony.getOwner();
                        extra.put(enemy, extra.get(enemy).intValue()
                                  + ALARM_TILE_IN_USE
                                  + colony.getUnitCount());
                    } else if (tile.getOwningSettlement() != null) { // Control
                        Player enemy = tile.getOwningSettlement().getOwner();
                        if (enemy != null && enemy.isEuropean()) {
                            extra.put(enemy, extra.get(enemy).intValue()
                                      + ALARM_TILE_IN_USE);
                        }
                    }
                }
                // Missionary helps reducing alarm a bit
                if (settlement.getMissionary() != null) {
                    Unit mission = settlement.getMissionary();
                    int missionAlarm = ALARM_MISSIONARY_PRESENT;
                    if (mission.hasAbility(Ability.EXPERT_MISSIONARY)) {
                        missionAlarm *= 2;
                    }
                    Player enemy = mission.getOwner();
                    extra.put(enemy,
                              extra.get(enemy).intValue() + missionAlarm);
                }
                // Apply modifiers, and commit the total change.
                for (Entry<Player, Integer> entry : extra.entrySet()) {
                    Player player = entry.getKey();
                    int change = entry.getValue().intValue();
                    if (change != 0) {
                        change = (int)player.applyModifier((float)change,
                            "model.modifier.nativeAlarmModifier",
                            null, game.getTurn());
                        ((ServerIndianSettlement)settlement).modifyAlarm(player,
                            change);
                    }
                }
            }

            // Calm down a bit at the whole-tribe level.
            for (Player enemy : game.getLiveEuropeanPlayers()) {
                if (getTension(enemy).getValue() > 0) {
                    int change = -getTension(enemy).getValue()/100 - 4;
                    modifyTension(enemy, change);
                }
            }

            // Now collect the settlements that changed.
            for (IndianSettlement settlement : allSettlements) {
                java.util.Map<Player, Tension.Level> oldLevel
                    = oldLevels.get(settlement);
                for (Entry<Player, Tension.Level> entry : oldLevel.entrySet()) {
                    Player enemy = entry.getKey();
                    Tension.Level newLevel
                        = settlement.getAlarm(enemy).getLevel();
                    if (entry.getValue() != newLevel) {
                        cs.add(See.only(null).perhaps((ServerPlayer) enemy),
                               settlement);
                    }
                }
            }

            // Check for braves converted by missionaries
            List<UnitType> converts = game.getSpecification()
                .getUnitTypesWithAbility("model.ability.convert");
            StringTemplate nation = getNationName();
            for (IndianSettlement settlement : allSettlements) {
                if (settlement.checkForNewMissionaryConvert()) {
                    Unit missionary = settlement.getMissionary();
                    ServerPlayer other = (ServerPlayer) missionary.getOwner();
                    Settlement colony = settlement.getTile()
                        .getNearestSettlement(other, MAX_CONVERT_DISTANCE);
                    if (colony != null && converts.size() > 0) {
                        Unit brave = settlement.getUnitList().get(0);
                        brave.clearEquipment();
                        brave.setOwner(other);
                        brave.setIndianSettlement(null);
                        brave.setNationality(other.getNationID());
                        brave.setType(Utils.getRandomMember(logger,
                                "Choose brave", converts, random));
                        brave.setLocation(colony.getTile());
                        cs.add(See.perhaps(), colony.getTile(), settlement);
                        cs.addMessage(See.only(other),
                            new ModelMessage(ModelMessage.MessageType.UNIT_ADDED,
                                "model.colony.newConvert", brave)
                            .addStringTemplate("%nation%", nation)
                            .addName("%colony%", colony.getName()));
                    }
                }
            }
        }
    }