From: "Enrico Weigelt, metux IT consult" <enrico.weig...@gr13.net>

---
 .../freecol/client/control/InGameController.java   |  10 +-
 .../client/gui/dialog/DifficultyDialog.java        |   2 +-
 .../client/gui/dialog/GameOptionsDialog.java       |   2 +-
 .../gui/dialog/MapGeneratorOptionsDialog.java      |   2 +-
 src/net/sf/freecol/common/model/Colony.java        |   4 +-
 .../sf/freecol/common/model/LostCityRumour.java    |   2 +-
 src/net/sf/freecol/common/model/Market.java        |   8 +-
 src/net/sf/freecol/common/model/Player.java        |   2 +-
 .../common/networking/ServerListMessage.java       |   2 +-
 .../freecol/server/control/InGameController.java   |  92 ++---
 .../sf/freecol/server/model/ServerBuilding.java    |  16 +-
 src/net/sf/freecol/server/model/ServerColony.java  |  74 ++--
 .../sf/freecol/server/model/ServerColonyTile.java  |   4 +-
 src/net/sf/freecol/server/model/ServerGame.java    |  12 +-
 .../server/model/ServerIndianSettlement.java       |  10 +-
 src/net/sf/freecol/server/model/ServerPlayer.java  | 424 ++++++++++-----------
 src/net/sf/freecol/server/model/ServerUnit.java    |  50 +--
 17 files changed, 358 insertions(+), 358 deletions(-)

diff --git a/src/net/sf/freecol/client/control/InGameController.java 
b/src/net/sf/freecol/client/control/InGameController.java
index 9fa126560c0..de616004cb9 100644
--- a/src/net/sf/freecol/client/control/InGameController.java
+++ b/src/net/sf/freecol/client/control/InGameController.java
@@ -3876,9 +3876,9 @@ public final class InGameController extends 
FreeColClientHolder {
                 .getAccelerator());
         player.addModelMessage(new 
ModelMessage(ModelMessage.MessageType.TUTORIAL,
                                "buildColony.tutorial", player)
-            .addName("%colonyKey%", key)
-            .add("%colonyMenuItem%", "buildColonyAction.name")
-            .add("%ordersMenuItem%", "menuBar.orders"));
+            .<ModelMessage>addName("%colonyKey%", key)
+            .<ModelMessage>add("%colonyMenuItem%", "buildColonyAction.name")
+            .<ModelMessage>add("%ordersMenuItem%", "menuBar.orders"));
         displayModelMessages(false);
         return true;
     }
@@ -4141,8 +4141,8 @@ public final class InGameController extends 
FreeColClientHolder {
         if (currTurn.isFirstSeasonTurn()) {
             player.addModelMessage(new ModelMessage(MessageType.WARNING,
                                                     "twoTurnsPerYear", player)
-                .addStringTemplate("%year%", currTurn.getLabel())
-                .addAmount("%amount%", currTurn.getSeasonNumber()));
+                .<ModelMessage>addStringTemplate("%year%", currTurn.getLabel())
+                .<ModelMessage>addAmount("%amount%", 
currTurn.getSeasonNumber()));
         }
         player.clearNationCache();
         return true;
diff --git a/src/net/sf/freecol/client/gui/dialog/DifficultyDialog.java 
b/src/net/sf/freecol/client/gui/dialog/DifficultyDialog.java
index 3e8d25ee036..16ae809a026 100644
--- a/src/net/sf/freecol/client/gui/dialog/DifficultyDialog.java
+++ b/src/net/sf/freecol/client/gui/dialog/DifficultyDialog.java
@@ -103,7 +103,7 @@ public final class DifficultyDialog extends OptionsDialog
             this.panel.add(loadButton);
             this.panel.add(saveButton);
         }
-        initialize(frame, choices());
+        initialize(frame, this.<OptionGroup>choices());
     }
 
 
diff --git a/src/net/sf/freecol/client/gui/dialog/GameOptionsDialog.java 
b/src/net/sf/freecol/client/gui/dialog/GameOptionsDialog.java
index c650ece52c4..a097f1369c3 100644
--- a/src/net/sf/freecol/client/gui/dialog/GameOptionsDialog.java
+++ b/src/net/sf/freecol/client/gui/dialog/GameOptionsDialog.java
@@ -63,7 +63,7 @@ public final class GameOptionsDialog extends OptionsDialog {
             }
         }
 
-        initialize(frame, choices());
+        initialize(frame, this.<OptionGroup>choices());
     }
 
 
diff --git 
a/src/net/sf/freecol/client/gui/dialog/MapGeneratorOptionsDialog.java 
b/src/net/sf/freecol/client/gui/dialog/MapGeneratorOptionsDialog.java
index 1f21e36515c..d5ac216092f 100644
--- a/src/net/sf/freecol/client/gui/dialog/MapGeneratorOptionsDialog.java
+++ b/src/net/sf/freecol/client/gui/dialog/MapGeneratorOptionsDialog.java
@@ -108,7 +108,7 @@ public final class MapGeneratorOptionsDialog extends 
OptionsDialog {
                 panel.add(scrollPane);
             }
         }
-        initialize(frame, choices());
+        initialize(frame, this.<OptionGroup>choices());
     }
 
     /**
diff --git a/src/net/sf/freecol/common/model/Colony.java 
b/src/net/sf/freecol/common/model/Colony.java
index 83491089da1..ab20c99ea80 100644
--- a/src/net/sf/freecol/common/model/Colony.java
+++ b/src/net/sf/freecol/common/model/Colony.java
@@ -1595,8 +1595,8 @@ public class Colony extends Settlement implements 
Nameable, TradeLocation {
         GoodsType bells = getSpecification().getGoodsType("model.goods.bells");
         return (msgId == null) ? null
                 : new ModelMessage(msgType, msgId, this, bells)
-                .addName("%colony%", getName())
-                .addAmount("%number%", number);
+                .<ModelMessage>addName("%colony%", getName())
+                .<ModelMessage>addAmount("%number%", number);
     }
 
     /**
diff --git a/src/net/sf/freecol/common/model/LostCityRumour.java 
b/src/net/sf/freecol/common/model/LostCityRumour.java
index 48ef7947e20..9c22b6f2054 100644
--- a/src/net/sf/freecol/common/model/LostCityRumour.java
+++ b/src/net/sf/freecol/common/model/LostCityRumour.java
@@ -282,7 +282,7 @@ public class LostCityRumour extends TileItem {
             ? new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
                                
RumourType.NOTHING.getAlternateDescriptionKey("mayans"),
                                player)
-                .addAmount("%years%",
+                .<ModelMessage>addAmount("%years%",
                     MAYAN_PROPHESY_YEAR - game.getTurn().getYear())
             : new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
                                NameCache.getRumourNothingKey(random),
diff --git a/src/net/sf/freecol/common/model/Market.java 
b/src/net/sf/freecol/common/model/Market.java
index d9c7e8d92b3..87f10f1bc46 100644
--- a/src/net/sf/freecol/common/model/Market.java
+++ b/src/net/sf/freecol/common/model/Market.java
@@ -399,10 +399,10 @@ public final class Market extends FreeColGameObject 
implements Ownable {
                                    ? "model.market.priceIncrease"
                                    : "model.market.priceDecrease"),
                                this, goodsType)
-                .addStringTemplate("%market%", owner.getMarketName())
-                .addNamed("%goods%", goodsType)
-                .addAmount("%buy%", newPrice)
-                .addAmount("%sell%", data.getPaidForSale());
+                .<ModelMessage>addStringTemplate("%market%", 
owner.getMarketName())
+                .<ModelMessage>addNamed("%goods%", goodsType)
+                .<ModelMessage>addAmount("%buy%", newPrice)
+                .<ModelMessage>addAmount("%sell%", data.getPaidForSale());
     }
 
     /**
diff --git a/src/net/sf/freecol/common/model/Player.java 
b/src/net/sf/freecol/common/model/Player.java
index 8de2ccc2d03..4e63f0f2b91 100644
--- a/src/net/sf/freecol/common/model/Player.java
+++ b/src/net/sf/freecol/common/model/Player.java
@@ -2703,7 +2703,7 @@ public class Player extends FreeColGameObject implements 
Nameable {
             : "west";
         addModelMessage(new ModelMessage(ModelMessage.MessageType.TUTORIAL,
                                          "model.player.startGame", this)
-            .addTagged("%direction%", sailTag));
+            .<ModelMessage>addTagged("%direction%", sailTag));
     }
 
     /**
diff --git a/src/net/sf/freecol/common/networking/ServerListMessage.java 
b/src/net/sf/freecol/common/networking/ServerListMessage.java
index 84fe010a70d..1a3d7b2a726 100644
--- a/src/net/sf/freecol/common/networking/ServerListMessage.java
+++ b/src/net/sf/freecol/common/networking/ServerListMessage.java
@@ -102,7 +102,7 @@ public class ServerListMessage extends DOMMessage {
     @Override
     public Element toXMLElement() {
         return new DOMMessage(TAG)
-            .addMessages(transform(this.servers, alwaysTrue(),
+            .<DOMMessage>addMessages(transform(this.servers, alwaysTrue(),
                                    si -> new RegisterServerMessage(si)))
             .toXMLElement();
     }
diff --git a/src/net/sf/freecol/server/control/InGameController.java 
b/src/net/sf/freecol/server/control/InGameController.java
index f9b360ad11e..8a015b5d744 100644
--- a/src/net/sf/freecol/server/control/InGameController.java
+++ b/src/net/sf/freecol/server/control/InGameController.java
@@ -321,8 +321,8 @@ public final class InGameController extends Controller {
             cs.addGlobalMessage(game, null,
                 new ModelMessage(MessageType.DEFAULT,
                                  "model.disaster.strikes", owner)
-                    .addName("%colony%", colony.getName())
-                    .addName("%disaster%", disaster));
+                    .<ModelMessage>addName("%colony%", colony.getName())
+                    .<ModelMessage>addName("%disaster%", disaster));
             for (ModelMessage message : messages) {
                 cs.addGlobalMessage(game, null, message);
             }
@@ -581,7 +581,7 @@ public final class InGameController extends Controller {
         cs.addMessage(independent,
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              "giveIndependence.announce", independent)
-                .addStringTemplate("%ref%", serverPlayer.getNationLabel()));
+                .<ModelMessage>addStringTemplate("%ref%", 
serverPlayer.getNationLabel()));
 
         // Who surrenders?
         final Predicate<Unit> surrenderPred = u -> //-vis(both)
@@ -599,7 +599,7 @@ public final class InGameController extends Controller {
             cs.addMessage(independent,
                 new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                  "giveIndependence.unitsAcquired", independent)
-                    .addStringTemplate("%units%",
+                    .<ModelMessage>addStringTemplate("%units%",
                          unitTemplate(", ", surrenderUnits)));
             independent.invalidateCanSeeTiles();//+vis(independent)
             serverPlayer.invalidateCanSeeTiles();//+vis(serverPlayer)
@@ -611,8 +611,8 @@ public final class InGameController extends Controller {
         cs.addGlobalMessage(game, independent,
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              "giveIndependence.otherAnnounce", independent)
-                .addStringTemplate("%nation%", independent.getNationLabel())
-                .addStringTemplate("%ref%", serverPlayer.getNationLabel()));
+                .<ModelMessage>addStringTemplate("%nation%", 
independent.getNationLabel())
+                .<ModelMessage>addStringTemplate("%ref%", 
serverPlayer.getNationLabel()));
         cs.add(See.only(independent), independent);
 
         // Reveal the map on independence.
@@ -819,7 +819,7 @@ public final class InGameController extends Controller {
             cs.addHistory(serverPlayer,
                 new HistoryEvent(getGame().getTurn(),
                     HistoryEvent.HistoryEventType.ABANDON_COLONY, serverPlayer)
-                    .addName("%colony%", settlement.getName()));
+                    .<HistoryEvent>addName("%colony%", settlement.getName()));
         }
 
         // Comprehensive dispose.
@@ -958,7 +958,7 @@ public final class InGameController extends Controller {
 
             cs.addHistory(serverPlayer, new HistoryEvent(game.getTurn(),
                     HistoryEvent.HistoryEventType.FOUND_COLONY, serverPlayer)
-                .addName("%colony%", settlement.getName()));
+                .<HistoryEvent>addName("%colony%", settlement.getName()));
 
             // Remove equipment from founder in case role confuses
             // placement.
@@ -972,10 +972,10 @@ public final class InGameController extends Controller {
                 cs.addMessage(sp,
                     new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                      "buildColony.others", settlement)
-                        .addStringTemplate("%nation%", nation)
-                        .addStringTemplate("%colony%",
+                        .<ModelMessage>addStringTemplate("%nation%", nation)
+                        .<ModelMessage>addStringTemplate("%colony%",
                             settlement.getLocationLabelFor(sp))
-                        .addStringTemplate("%region%",
+                        .<ModelMessage>addStringTemplate("%region%",
                             tile.getRegion().getLabel()));
             }
         } else {
@@ -1086,8 +1086,8 @@ public final class InGameController extends Controller {
         cs.addMessage(serverPlayer,
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              messageId, serverPlayer, unit)
-                .addAmount("%amount%", fullAmount)
-                .addAmount("%cashInAmount%", cashInAmount));
+                .<ModelMessage>addAmount("%amount%", fullAmount)
+                .<ModelMessage>addAmount("%cashInAmount%", cashInAmount));
         messageId = (serverPlayer.isRebel()
                      || serverPlayer.getPlayerType() == PlayerType.INDEPENDENT)
             ? "cashInTreasureTrain.otherIndependent"
@@ -1095,8 +1095,8 @@ public final class InGameController extends Controller {
         cs.addGlobalMessage(game, serverPlayer,
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              messageId, serverPlayer)
-                .addAmount("%amount%", fullAmount)
-                .addStringTemplate("%nation%", serverPlayer.getNationLabel()));
+                .<ModelMessage>addAmount("%amount%", fullAmount)
+                .<ModelMessage>addStringTemplate("%nation%", 
serverPlayer.getNationLabel()));
 
         // Dispose of the unit, only visible to the owner.
         cs.add(See.only(serverPlayer), (FreeColGameObject)unit.getLocation());
@@ -1392,7 +1392,7 @@ public final class InGameController extends Controller {
                 new ModelMessage(MessageType.UNIT_LOST,
                                  "declareIndependence.unitsSeized",
                                  serverPlayer)
-                    .addStringTemplate("%units%", seized));
+                    .<ModelMessage>addStringTemplate("%units%", seized));
         }
         serverPlayer.csLoseLocation(europe, cs);
 
@@ -1407,8 +1407,8 @@ public final class InGameController extends Controller {
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              "declareIndependence.interventionForce",
                              serverPlayer)
-                .add("%nation%", otherKey)
-                .addAmount("%number%",
+                .<ModelMessage>add("%nation%", otherKey)
+                .<ModelMessage>addAmount("%number%",
                     spec.getInteger(GameOptions.INTERVENTION_BELLS)));
         serverPlayer.csChangeStance(Stance.WAR, refPlayer, true, cs);
 
@@ -1441,10 +1441,10 @@ public final class InGameController extends Controller {
                     new ModelMessage(MessageType.UNIT_IMPROVED,
                                      
"declareIndependence.continentalArmyMuster",
                                      serverPlayer, colony)
-                        .addName("%colony%", colony.getName())
-                        .addAmount("%number%", n)
-                        .addNamed("%oldUnit%", fromType)
-                        .addNamed("%unit%", toType));
+                        .<ModelMessage>addName("%colony%", colony.getName())
+                        .<ModelMessage>addAmount("%number%", n)
+                        .<ModelMessage>addNamed("%oldUnit%", fromType)
+                        .<ModelMessage>addNamed("%unit%", toType));
                 limit -= n;
             }
         }
@@ -1464,8 +1464,8 @@ public final class InGameController extends Controller {
             cs.addMessage(serverPlayer,
                 new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                  "declareIndependence.nativeSupport", good)
-                    .addStringTemplate("%nation%", good.getNationLabel())
-                    .add("%ruler%", serverPlayer.getRulerNameKey()));
+                    .<ModelMessage>addStringTemplate("%nation%", 
good.getNationLabel())
+                    .<ModelMessage>add("%ruler%", 
serverPlayer.getRulerNameKey()));
             int delta;
             switch (good.getStance(serverPlayer)) {
             case ALLIANCE: case PEACE: default:
@@ -1507,7 +1507,7 @@ public final class InGameController extends Controller {
                 cs.addMessage(serverPlayer,
                     new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                      "declareIndependence.nativeHostile", bad)
-                        .addStringTemplate("%nation%", bad.getNationLabel()));
+                        .<ModelMessage>addStringTemplate("%nation%", 
bad.getNationLabel()));
                 if (delta != 0) bad.csModifyTension(serverPlayer, delta, cs);
                 Player.makeContact(bad, refPlayer);
                 bad.csModifyTension(refPlayer,
@@ -1532,9 +1532,9 @@ public final class InGameController extends Controller {
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              "declareIndependence.announce",
                              serverPlayer)
-                .addStringTemplate("%oldNation%", oldNation)
-                .addStringTemplate("%newNation%", 
serverPlayer.getNationLabel())
-                .add("%ruler%", serverPlayer.getRulerNameKey()));
+                .<ModelMessage>addStringTemplate("%oldNation%", oldNation)
+                .<ModelMessage>addStringTemplate("%newNation%", 
serverPlayer.getNationLabel())
+                .<ModelMessage>add("%ruler%", serverPlayer.getRulerNameKey()));
         cs.add(See.only(serverPlayer), serverPlayer);
         serverPlayer.invalidateCanSeeTiles();//+vis(serverPlayer)
 
@@ -1629,10 +1629,10 @@ public final class InGameController extends Controller {
         ModelMessage m = new ModelMessage(MessageType.GIFT_GOODS,
                                           "deliverGift.goods",
                                           settlement, goods.getType())
-            .addStringTemplate("%player%", serverPlayer.getNationLabel())
-            .addNamed("%type%", goods)
-            .addAmount("%amount%", goods.getAmount())
-            .addName("%settlement%", settlement.getName());
+            .<ModelMessage>addStringTemplate("%player%", 
serverPlayer.getNationLabel())
+            .<ModelMessage>addNamed("%type%", goods)
+            .<ModelMessage>addAmount("%amount%", goods.getAmount())
+            .<ModelMessage>addName("%settlement%", settlement.getName());
         cs.addMessage(serverPlayer, m);
         ServerPlayer receiver = (ServerPlayer) settlement.getOwner();
         if (receiver.isConnected() && settlement instanceof Colony) {
@@ -1701,7 +1701,7 @@ public final class InGameController extends Controller {
             m = new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                  "scoutSettlement.tributeAgree",
                                  unit, is)
-                .addAmount("%amount%", gold);
+                .<ModelMessage>addAmount("%amount%", gold);
         } else {
             m = new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                  "scoutSettlement.tributeDisagree",
@@ -1759,15 +1759,15 @@ public final class InGameController extends Controller {
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              "indianSettlement.mission.noDenounce",
                              serverPlayer, unit)
-                .addStringTemplate("%nation%", owner.getNationLabel()));
+                .<ModelMessage>addStringTemplate("%nation%", 
owner.getNationLabel()));
         cs.addMessage(enemy,
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              "indianSettlement.mission.enemyDenounce",
                              enemy, is)
-                .addStringTemplate("%enemy%", serverPlayer.getNationLabel())
-                .addStringTemplate("%settlement%",
+                .<ModelMessage>addStringTemplate("%enemy%", 
serverPlayer.getNationLabel())
+                .<ModelMessage>addStringTemplate("%settlement%",
                     is.getLocationLabelFor(enemy))
-                .addStringTemplate("%nation%", owner.getNationLabel()));
+                .<ModelMessage>addStringTemplate("%nation%", 
owner.getNationLabel()));
         cs.add(See.perhaps().always(serverPlayer),
                (FreeColGameObject)unit.getLocation());
         cs.addRemove(See.perhaps().always(serverPlayer),
@@ -2287,7 +2287,7 @@ public final class InGameController extends Controller {
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                              "indianSettlement.mission." + tension.getKey(),
                              serverPlayer, unit)
-                .addStringTemplate("%nation%", nation));
+                .<ModelMessage>addStringTemplate("%nation%", nation));
 
         // Others can see missionary disappear and settlement acquire
         // mission.
@@ -2391,9 +2391,9 @@ public final class InGameController extends Controller {
                 new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                  "missionarySettlement.inciteGoldFail",
                                  serverPlayer, is)
-                    .addStringTemplate("%player%",
+                    .<ModelMessage>addStringTemplate("%player%",
                         enemyPlayer.getNationLabel())
-                    .addAmount("%amount%", goldToPay));
+                    .<ModelMessage>addAmount("%amount%", goldToPay));
             cs.addAttribute(See.only(serverPlayer), "gold", "0");
             unit.setMovesLeft(0);
             cs.addPartial(See.only(serverPlayer), unit, "movesLeft");
@@ -2413,8 +2413,8 @@ public final class InGameController extends Controller {
                 new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                  "missionarySettlement.inciteSuccess",
                                  nativePlayer)
-                .addStringTemplate("%native%", nativePlayer.getNationLabel())
-                    .addStringTemplate("%enemy%", enemy.getNationLabel()));
+                .<ModelMessage>addStringTemplate("%native%", 
nativePlayer.getNationLabel())
+                    .<ModelMessage>addStringTemplate("%enemy%", 
enemy.getNationLabel()));
             cs.addPartial(See.only(serverPlayer), serverPlayer, "gold");
             unit.setMovesLeft(0);
             cs.addPartial(See.only(serverPlayer), unit, "movesLeft");
@@ -2903,10 +2903,10 @@ public final class InGameController extends Controller {
         ModelMessage m = new ModelMessage(MessageType.GIFT_GOODS,
                                           "deliverGift.goods",
                                           colony, goods.getType())
-            .addStringTemplate("%player%", serverPlayer.getNationLabel())
-            .addNamed("%type%", goods)
-            .addAmount("%amount%", goods.getAmount())
-            .addName("%settlement%", colony.getName());
+            .<ModelMessage>addStringTemplate("%player%", 
serverPlayer.getNationLabel())
+            .<ModelMessage>addNamed("%type%", goods)
+            .<ModelMessage>addAmount("%amount%", goods.getAmount())
+            .<ModelMessage>addName("%settlement%", colony.getName());
         cs.addMessage(otherPlayer, m);
         cs.add(See.only(otherPlayer), colony);
         logger.info("Gift delivered by unit: " + unit.getId()
diff --git a/src/net/sf/freecol/server/model/ServerBuilding.java 
b/src/net/sf/freecol/server/model/ServerBuilding.java
index f9b2419a8fb..61e3024950e 100644
--- a/src/net/sf/freecol/server/model/ServerBuilding.java
+++ b/src/net/sf/freecol/server/model/ServerBuilding.java
@@ -154,9 +154,9 @@ public class ServerBuilding extends Building implements 
ServerModelObject {
                 new ModelMessage(ModelMessage.MessageType.UNIT_IMPROVED,
                                  "model.building.unitEducated",
                                  getColony(), this)
-                    .addStringTemplate("%oldName%", oldName)
-                    .addStringTemplate("%unit%", newName)
-                    .addName("%colony%", getColony().getName()));
+                    .<ModelMessage>addStringTemplate("%oldName%", oldName)
+                    .<ModelMessage>addStringTemplate("%unit%", newName)
+                    .<ModelMessage>addName("%colony%", getColony().getName()));
         }
         student.setTurnsOfTraining(0);
         student.setMovesLeft(0);
@@ -184,8 +184,8 @@ public class ServerBuilding extends Building implements 
ServerModelObject {
             cs.addMessage(owner,
                 new ModelMessage(ModelMessage.MessageType.WARNING,
                                  "model.building.noStudent", colony, teacher)
-                    .addStringTemplate("%teacher%", teacher.getLabel())
-                    .addName("%colony%", colony.getName()));
+                    .<ModelMessage>addStringTemplate("%teacher%", 
teacher.getLabel())
+                    .<ModelMessage>addName("%colony%", colony.getName()));
             return false;
         }
         teacher.setStudent(student);
@@ -225,9 +225,9 @@ public class ServerBuilding extends Building implements 
ServerModelObject {
                     new ModelMessage(ModelMessage.MessageType.MISSING_GOODS,
                                      "model.building.notEnoughInput",
                                      this, gt)
-                        .addNamed("%inputGoods%", gt)
-                        .addNamed("%building%", this)
-                        .addName("%colony%", getColony().getName()));
+                        .<ModelMessage>addNamed("%inputGoods%", gt)
+                        .<ModelMessage>addNamed("%building%", this)
+                        .<ModelMessage>addName("%colony%", 
getColony().getName()));
             }
         }
     }
diff --git a/src/net/sf/freecol/server/model/ServerColony.java 
b/src/net/sf/freecol/server/model/ServerColony.java
index a62d29c62dc..b3019e17e54 100644
--- a/src/net/sf/freecol/server/model/ServerColony.java
+++ b/src/net/sf/freecol/server/model/ServerColony.java
@@ -165,15 +165,15 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                           new ModelMessage(MessageType.UNIT_ADDED,
                                            "model.colony.newColonist",
                                            this, unit)
-                              .addName("%colony%", getName()));
+                              .<ModelMessage>addName("%colony%", getName()));
         } else {
             unit.setName(owner.getNameForUnit(type, random));
             cs.addMessage(owner,
                           new ModelMessage(MessageType.UNIT_ADDED,
                                            "model.colony.unitReady",
                                            this, unit)
-                              .addName("%colony%", getName())
-                              .addStringTemplate("%unit%", unit.getLabel()));
+                              .<ModelMessage>addName("%colony%", getName())
+                              .<ModelMessage>addStringTemplate("%unit%", 
unit.getLabel()));
         }
 
         logger.info("New unit in " + getName() + ": " + type.getSuffix());
@@ -239,8 +239,8 @@ public class ServerColony extends Colony implements 
ServerModelObject {
             cs.addMessage(owner,
                 new ModelMessage(MessageType.BUILDING_COMPLETED,
                                  "model.colony.buildingReady", this)
-                    .addName("%colony%", getName())
-                    .addNamed("%building%", type));
+                    .<ModelMessage>addName("%colony%", getName())
+                    .<ModelMessage>addNamed("%building%", type));
             if (owner.isAI()) {
                 firePropertyChange(REARRANGE_COLONY, true, false);
             }
@@ -282,7 +282,7 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                     cs.addMessage(owner,
                         new ModelMessage(MessageType.WARNING,
                                          "model.colony.cannotBuild", this)
-                            .addName("%colony%", getName()));
+                            .<ModelMessage>addName("%colony%", getName()));
                 }
                 return null;
 
@@ -291,8 +291,8 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                     new ModelMessage(MessageType.WARNING,
                                      "model.colony.buildNeedPop",
                                      this)
-                        .addName("%colony%", getName())
-                        .addNamed("%building%", buildable));
+                        .<ModelMessage>addName("%colony%", getName())
+                        .<ModelMessage>addNamed("%building%", buildable));
                 break;
             default: // Are there other warnings to send?
                 logger.warning("Unexpected build failure at " + getName()
@@ -329,9 +329,9 @@ public class ServerColony extends Colony implements 
ServerModelObject {
             new ModelMessage(MessageType.WARNING,
                              "model.colony.workersEvicted",
                              this, this)
-                .addName("%colony%", getName())
-                .addStringTemplate("%location%", tile.getLocationLabel())
-                .addStringTemplate("%enemyUnit%", enemyUnit.getLabel()));
+                .<ModelMessage>addName("%colony%", getName())
+                .<ModelMessage>addStringTemplate("%location%", 
tile.getLocationLabel())
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
enemyUnit.getLabel()));
         cs.add(See.only(serverPlayer), ct);
         cs.add(See.perhaps(), getTile()); // Colony size might have changed
     }
@@ -489,8 +489,8 @@ public class ServerColony extends Colony implements 
ServerModelObject {
             cs.addMessage(newOwner,
                 new ModelMessage(MessageType.UNIT_ADDED,
                                 "model.colony.newConvert", brave)
-                    .addStringTemplate("%nation%", nation)
-                    .addName("%colony%", getName()));
+                    .<ModelMessage>addStringTemplate("%nation%", nation)
+                    .<ModelMessage>addName("%colony%", getName()));
             newOwner.invalidateCanSeeTiles();//+vis(other)
             logger.fine("Convert at " + getName() + " for " + getName());
         }
@@ -591,10 +591,10 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                             new ModelMessage(MessageType.MISSING_GOODS,
                                              
"model.colony.buildableNeedsGoods",
                                              this, build)
-                                .addName("%colony%", getName())
-                                .addNamed("%buildable%", build)
-                                .addAmount("%amount%", needed.getAmount())
-                                .addNamed("%goodsType%", needed.getType()));
+                                .<ModelMessage>addName("%colony%", getName())
+                                .<ModelMessage>addNamed("%buildable%", build)
+                                .<ModelMessage>addAmount("%amount%", 
needed.getAmount())
+                                .<ModelMessage>addNamed("%goodsType%", 
needed.getType()));
                     }
                 }
             } else {
@@ -655,13 +655,13 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                             new ModelMessage(MessageType.UNIT_LOST,
                                              "model.colony.colonistStarved",
                                              this)
-                                .addName("%colony%", getName()));
+                                .<ModelMessage>addName("%colony%", getName()));
                     } else { // Its dead, Jim.
                         cs.addMessage(owner,
                             new ModelMessage(MessageType.UNIT_LOST,
                                              "model.colony.colonyStarved",
                                              this)
-                                .addName("%colony%", getName()));
+                                .<ModelMessage>addName("%colony%", getName()));
                         owner.csDisposeSettlement(this, cs);
                         return;
                     }
@@ -672,8 +672,8 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                             new ModelMessage(MessageType.WARNING,
                                              "model.colony.famineFeared",
                                              this)
-                                .addName("%colony%", getName())
-                                .addAmount("%number%", turns));
+                                .<ModelMessage>addName("%colony%", getName())
+                                .<ModelMessage>addAmount("%number%", turns));
                         lb.add(" famine in ", turns,
                                " food=", stored, " production=", net);
                     }
@@ -740,8 +740,8 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                 cs.addMessage(owner,
                     new ModelMessage(MessageType.GOODS_MOVEMENT,
                                      "model.colony.customs.sale", this)
-                        .addName("%colony%", getName())
-                        .addName("%data%", lb2.toString()));
+                        .<ModelMessage>addName("%colony%", getName())
+                        .<ModelMessage>addName("%data%", lb2.toString()));
                 cs.addPartial(See.only(owner), owner, "gold");
                 lb.add(lb2.toString());
             }
@@ -766,9 +766,9 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                     new ModelMessage(MessageType.WAREHOUSE_CAPACITY,
                                      "model.colony.warehouseEmpty",
                                      this, type)
-                        .addNamed("%goods%", type)
-                        .addAmount("%level%", low)
-                        .addName("%colony%", getName()));
+                        .<ModelMessage>addNamed("%goods%", type)
+                        .<ModelMessage>addAmount("%level%", low)
+                        .<ModelMessage>addName("%colony%", getName()));
                 continue;
             }
             if (type.limitIgnored()) continue;
@@ -791,10 +791,10 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                 cs.addMessage(owner,
                     new ModelMessage(MessageType.WAREHOUSE_CAPACITY,
                                      messageId, this, type)
-                        .addNamed("%goods%", type)
-                        .addAmount("%waste%", waste)
-                        .addAmount("%level%", high)
-                        .addName("%colony%", getName()));
+                        .<ModelMessage>addNamed("%goods%", type)
+                        .<ModelMessage>addAmount("%waste%", waste)
+                        .<ModelMessage>addAmount("%level%", high)
+                        .<ModelMessage>addName("%colony%", getName()));
             }
 
             // No problem this turn, but what about the next?
@@ -808,9 +808,9 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                         new ModelMessage(MessageType.WAREHOUSE_CAPACITY,
                                          "model.colony.warehouseSoonFull",
                                          this, type)
-                            .addNamed("%goods%", goods)
-                            .addName("%colony%", getName())
-                            .addAmount("%amount%", loss));
+                            .<ModelMessage>addNamed("%goods%", goods)
+                            .<ModelMessage>addName("%colony%", getName())
+                            .<ModelMessage>addAmount("%amount%", loss));
                 }
             }
         }
@@ -841,7 +841,7 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                 cs.addMessage(owner,
                     new ModelMessage(MessageType.BUILDING_COMPLETED,
                         "model.colony.notBuildingAnything", this)
-                        .addName("%colony%", getName()));
+                        .<ModelMessage>addName("%colony%", getName()));
             }
         }
 
@@ -854,9 +854,9 @@ public class ServerColony extends Colony implements 
ServerModelObject {
                                      ? "model.colony.soLIncrease"
                                      : "model.colony.soLDecrease"),
                                  this, spec.getGoodsType("model.goods.bells"))
-                    .addAmount("%oldSoL%", oldSonsOfLiberty)
-                    .addAmount("%newSoL%", sonsOfLiberty)
-                    .addName("%colony%", getName()));
+                    .<ModelMessage>addAmount("%oldSoL%", oldSonsOfLiberty)
+                    .<ModelMessage>addAmount("%newSoL%", sonsOfLiberty)
+                    .<ModelMessage>addName("%colony%", getName()));
 
             ModelMessage govMgtMessage = checkForGovMgtChangeMessage();
             if (govMgtMessage != null) {
diff --git a/src/net/sf/freecol/server/model/ServerColonyTile.java 
b/src/net/sf/freecol/server/model/ServerColonyTile.java
index 92f57b19dbe..147f0082048 100644
--- a/src/net/sf/freecol/server/model/ServerColonyTile.java
+++ b/src/net/sf/freecol/server/model/ServerColonyTile.java
@@ -121,8 +121,8 @@ public class ServerColonyTile extends ColonyTile implements 
ServerModelObject {
                         new ModelMessage(ModelMessage.MessageType.WARNING,
                                          "model.colonyTile.resourceExhausted",
                                          colony)
-                            .addNamed("%resource%", resource)
-                            .addName("%colony%", colony.getName()));
+                            .<ModelMessage>addNamed("%resource%", resource)
+                            .<ModelMessage>addName("%colony%", 
colony.getName()));
                     cs.add(See.perhaps(), workTile);
                     break;
                 }
diff --git a/src/net/sf/freecol/server/model/ServerGame.java 
b/src/net/sf/freecol/server/model/ServerGame.java
index d2aed2cd7b0..7fcd45f8cd1 100644
--- a/src/net/sf/freecol/server/model/ServerGame.java
+++ b/src/net/sf/freecol/server/model/ServerGame.java
@@ -429,13 +429,13 @@ public class ServerGame extends Game implements 
ServerModelObject {
         cs.addGlobalMessage(this, null,
             new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                              "model.game.spanishSuccession", strongAI)
-                .addStringTemplate("%loserNation%", loser)
-                .addStringTemplate("%nation%", winner));
+                .<ModelMessage>addStringTemplate("%loserNation%", loser)
+                .<ModelMessage>addStringTemplate("%nation%", winner));
         cs.addGlobalHistory(this,
             new HistoryEvent(getTurn(),
                 HistoryEvent.HistoryEventType.SPANISH_SUCCESSION, null)
-                   .addStringTemplate("%loserNation%", loser)
-                   .addStringTemplate("%nation%", winner));
+                   .<HistoryEvent>addStringTemplate("%loserNation%", loser)
+                   .<HistoryEvent>addStringTemplate("%nation%", winner));
         setSpanishSuccession(true);
         cs.addPartial(See.all(), this, "spanishSuccession");
         tiles.removeAll(updated);
@@ -596,9 +596,9 @@ public class ServerGame extends Game implements 
ServerModelObject {
                         new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                          Stance.WAR.getOtherStanceChangeKey(),
                                          source)
-                            .addStringTemplate("%attacker%",
+                            .<ModelMessage>addStringTemplate("%attacker%",
                                 source.getNationLabel())
-                            .addStringTemplate("%defender%",
+                            .<ModelMessage>addStringTemplate("%defender%",
                                 victim.getNationLabel()));
                 } else {
                     logger.warning("Incite trade failure: " + victim);
diff --git a/src/net/sf/freecol/server/model/ServerIndianSettlement.java 
b/src/net/sf/freecol/server/model/ServerIndianSettlement.java
index 42c984dc826..65570d4e19f 100644
--- a/src/net/sf/freecol/server/model/ServerIndianSettlement.java
+++ b/src/net/sf/freecol/server/model/ServerIndianSettlement.java
@@ -442,14 +442,14 @@ public class ServerIndianSettlement extends 
IndianSettlement
                     new ModelMessage(ModelMessage.MessageType.UNIT_LOST,
                                      
"model.indianSettlement.mission.destroyed",
                                      this)
-                        .addStringTemplate("%settlement%",
+                        .<ModelMessage>addStringTemplate("%settlement%",
                             getLocationLabelFor(missionaryOwner)));
             } else {
                 cs.addMessage(missionaryOwner,
                     new 
ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                                      
"model.indianSettlement.mission.denounced",
                                      this)
-                        .addStringTemplate("%settlement%",
+                        .<ModelMessage>addStringTemplate("%settlement%",
                             getLocationLabelFor(missionaryOwner)));
             }
         }
@@ -503,9 +503,9 @@ public class ServerIndianSettlement extends IndianSettlement
         cs.addMessage(enemy,
             new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                              key, this)
-                .addStringTemplate("%nation%", getOwner().getNationLabel())
-                .addStringTemplate("%enemy%", enemy.getNationLabel())
-                .addName("%settlement%", getName()));
+                .<ModelMessage>addStringTemplate("%nation%", 
getOwner().getNationLabel())
+                .<ModelMessage>addStringTemplate("%enemy%", 
enemy.getNationLabel())
+                .<ModelMessage>addName("%settlement%", getName()));
     }
 
 
diff --git a/src/net/sf/freecol/server/model/ServerPlayer.java 
b/src/net/sf/freecol/server/model/ServerPlayer.java
index ad493e61ae8..424276deac7 100644
--- a/src/net/sf/freecol/server/model/ServerPlayer.java
+++ b/src/net/sf/freecol/server/model/ServerPlayer.java
@@ -716,12 +716,12 @@ public class ServerPlayer extends Player implements 
ServerModelObject {
             : "model.player.dead.native";
         cs.addGlobalMessage(getGame(), null,
             new ModelMessage(MessageType.FOREIGN_DIPLOMACY, key, this)
-                .addStringTemplate("%nation%", getNationLabel()));
+                .<ModelMessage>addStringTemplate("%nation%", 
getNationLabel()));
         Game game = getGame();
         cs.addGlobalHistory(game,
             new HistoryEvent(game.getTurn(),
                              HistoryEvent.HistoryEventType.NATION_DESTROYED, 
null)
-                .addStringTemplate("%nation%", getNationLabel()));
+                .<HistoryEvent>addStringTemplate("%nation%", 
getNationLabel()));
         csKill(cs);
     }
 
@@ -1323,7 +1323,7 @@ public class ServerPlayer extends Player implements 
ServerModelObject {
             }
             cs.addHistory(this, new HistoryEvent(getGame().getTurn(),
                     HistoryEvent.getEventTypeFromStance(stance), otherPlayer)
-                .addStringTemplate("%nation%", otherPlayer.getNationLabel()));
+                .<HistoryEvent>addStringTemplate("%nation%", 
otherPlayer.getNationLabel()));
             logger.info("Stance modification " + getName()
                 + " " + old + " -> " + stance + " wrt " + 
otherPlayer.getName());
             this.addStanceChange(other);
@@ -1331,7 +1331,7 @@ public class ServerPlayer extends Player implements 
ServerModelObject {
                 cs.addMessage(other,
                     new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                      stance.getStanceChangeKey(), this)
-                        .addStringTemplate("%nation%", getNationLabel()));
+                        .<ModelMessage>addStringTemplate("%nation%", 
getNationLabel()));
             }
             cs.addStance(See.only(this), this, stance, otherPlayer);
             cs.addStance(See.only(other), this, stance, otherPlayer);
@@ -1345,7 +1345,7 @@ public class ServerPlayer extends Player implements 
ServerModelObject {
             }
             cs.addHistory(otherPlayer, new HistoryEvent(getGame().getTurn(),
                     HistoryEvent.getEventTypeFromStance(stance), this)
-                .addStringTemplate("%nation%", this.getNationLabel()));
+                .<HistoryEvent>addStringTemplate("%nation%", 
this.getNationLabel()));
             logger.info("Stance modification " + otherPlayer.getName()
                 + " " + old + " -> " + stance
                 + " wrt " + getName() + " (symmetric)");
@@ -1354,7 +1354,7 @@ public class ServerPlayer extends Player implements 
ServerModelObject {
                 cs.addMessage(this,
                     new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                      stance.getStanceChangeKey(), otherPlayer)
-                        .addStringTemplate("%nation%",
+                        .<ModelMessage>addStringTemplate("%nation%",
                             otherPlayer.getNationLabel()));
             }
             cs.addStance(See.only(this), otherPlayer, stance, this);
@@ -1466,8 +1466,8 @@ public class ServerPlayer extends Player implements 
ServerModelObject {
                         new ModelMessage(MessageType.DEFAULT,
                                          "model.player.disaster.strikes",
                                          colony)
-                            .addName("%colony%", colony.getName())
-                            .addName("%disaster%", disaster));
+                            .<ModelMessage>addName("%colony%", 
colony.getName())
+                            .<ModelMessage>addName("%disaster%", disaster));
                     for (ModelMessage message : messages) {
                         cs.addMessage(this, message);
                     }
@@ -1549,7 +1549,7 @@ outer:  for (Effect effect : effects) {
                         cs.addPartial(See.only(this), this, "gold");
                         mm = new ModelMessage(MessageType.DEFAULT,
                                               effect.getId(), this)
-                            .addAmount("%amount%", plunder);
+                            .<ModelMessage>addAmount("%amount%", plunder);
                         break;
                     case Effect.LOSS_OF_BUILDING:
                         Building building = getBuildingForEffect(colony, 
effect, random);
@@ -1557,7 +1557,7 @@ outer:  for (Effect effect : effects) {
                             // Add message before damaging building
                             mm = new ModelMessage(MessageType.DEFAULT,
                                                   effect.getId(), colony)
-                                .addNamed("%building%", building.getType());
+                                .<ModelMessage>addNamed("%building%", 
building.getType());
                             csDamageBuilding(building, cs);
                             colonyDirty = true;
                         }
@@ -1571,7 +1571,7 @@ outer:  for (Effect effect : effects) {
                             colony.removeGoods(goods);
                             mm = new ModelMessage(MessageType.DEFAULT,
                                                   effect.getId(), colony)
-                                .addStringTemplate("%goods%", 
goods.getLabel(true));
+                                .<ModelMessage>addStringTemplate("%goods%", 
goods.getLabel(true));
                             colonyDirty = true;
                         }
                         break;
@@ -1584,7 +1584,7 @@ outer:  for (Effect effect : effects) {
                                     mm = new ModelMessage(MessageType.DEFAULT,
                                         
"model.player.disaster.effect.colonyDestroyed",
                                         this)
-                                        .addName("%colony%", colony.getName());
+                                        .<ModelMessage>addName("%colony%", 
colony.getName());
                                     messages.add(mm);
                                     csDisposeSettlement(colony, cs);
                                     colonyDirty = false;
@@ -1592,7 +1592,7 @@ outer:  for (Effect effect : effects) {
                                 }
                                 mm = new ModelMessage(MessageType.DEFAULT,
                                                       effect.getId(), colony)
-                                    .addStringTemplate("%unit%",
+                                    .<ModelMessage>addStringTemplate("%unit%",
                                         unit.getLabel());
                                 cs.addRemove(See.only(this), null, unit);
                                 unit.dispose();//-vis: Safe, entirely within 
colony
@@ -1609,14 +1609,14 @@ outer:  for (Effect effect : effects) {
                                     mm = new ModelMessage(MessageType.DEFAULT,
                                                           effect.getId(),
                                                           colony)
-                                        .addStringTemplate("%unit%",
+                                        
.<ModelMessage>addStringTemplate("%unit%",
                                             unit.getLabel());
                                     csSinkShip(unit, null, cs);
                                 } else {
                                     mm = new ModelMessage(MessageType.DEFAULT,
                                                           effect.getId(),
                                                           colony)
-                                        .addStringTemplate("%unit%",
+                                        
.<ModelMessage>addStringTemplate("%unit%",
                                             unit.getLabel());
                                     csDamageShip(unit, repairLocation, cs);
                                 }
@@ -1911,7 +1911,7 @@ outer:  for (Effect effect : effects) {
         addFather(father);
         addHistory(new HistoryEvent(turn,
                 HistoryEvent.HistoryEventType.FOUNDING_FATHER, this)
-                    .addNamed("%father%", father));
+                    .<HistoryEvent>addNamed("%father%", father));
         // FIXME: We do not want to have to update the whole player
         // just to get the FF into the client, but for now if there
         // are modifiers that is the only way to do it.
@@ -1920,8 +1920,8 @@ outer:  for (Effect effect : effects) {
             new ModelMessage(ModelMessage.MessageType.SONS_OF_LIBERTY,
                              "model.player.foundingFatherJoinedCongress",
                              this)
-                      .addNamed("%foundingFather%", father)
-                      .add("%description%", father.getDescriptionKey()));
+                      .<ModelMessage>addNamed("%foundingFather%", father)
+                      .<ModelMessage>add("%description%", 
father.getDescriptionKey()));
 
         List<AbstractUnit> units = father.getUnits();
         if (units != null && !units.isEmpty() && europe != null) {
@@ -2159,8 +2159,8 @@ outer:  for (Effect effect : effects) {
                 new ModelMessage(ModelMessage.MessageType.UNIT_ADDED,
                                  "model.player.autoRecruit",
                                  this, unit)
-                    .addNamed("%europe%", europe)
-                    .addStringTemplate("%unit%", unit.getLabel()));
+                    .<ModelMessage>addNamed("%europe%", europe)
+                    .<ModelMessage>addStringTemplate("%unit%", 
unit.getLabel()));
             break;
         default:
             throw new IllegalArgumentException("Bogus migration type");
@@ -2213,8 +2213,8 @@ outer:  for (Effect effect : effects) {
                 cs.addMessage(defenderPlayer,
                     new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                      "combat.raid.ours", colony)
-                        .addName("%colony%", colony.getName())
-                        .addStringTemplate("%nation%", attackerNation));
+                        .<ModelMessage>addName("%colony%", colony.getName())
+                        .<ModelMessage>addStringTemplate("%nation%", 
attackerNation));
             }
         } else if (isBombard) {
             attackerSettlement = (Settlement)attacker;
@@ -2691,8 +2691,8 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(player,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.automaticDefence", unit)
-                .addStringTemplate("%unit%", unit.getLabel())
-                .addName("%colony%", settlement.getName()));
+                .<ModelMessage>addStringTemplate("%unit%", unit.getLabel())
+                .<ModelMessage>addName("%colony%", settlement.getName()));
     }
 
     /**
@@ -2713,8 +2713,8 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.burnMissions", attacker, is)
-                .addStringTemplate("%nation%", attackerNation)
-                .addStringTemplate("%enemyNation%", nativeNation));
+                .<ModelMessage>addStringTemplate("%nation%", attackerNation)
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
nativeNation));
 
         // Burn down the missions
         boolean here = is.hasMissionary(attackerPlayer);
@@ -2761,27 +2761,27 @@ outer:  for (Effect effect : effects) {
         cs.addHistory(attackerPlayer,
             new HistoryEvent(game.getTurn(),
                 HistoryEvent.HistoryEventType.CONQUER_COLONY, attackerPlayer)
-                .addStringTemplate("%nation%", colonyNation)
-                .addName("%colony%", colony.getName()));
+                .<HistoryEvent>addStringTemplate("%nation%", colonyNation)
+                .<HistoryEvent>addName("%colony%", colony.getName()));
         cs.addHistory(colonyPlayer,
             new HistoryEvent(game.getTurn(),
                 HistoryEvent.HistoryEventType.COLONY_CONQUERED, attackerPlayer)
-                      .addStringTemplate("%nation%", attackerNation)
-                      .addName("%colony%", colony.getName()));
+                      .<HistoryEvent>addStringTemplate("%nation%", 
attackerNation)
+                      .<HistoryEvent>addName("%colony%", colony.getName()));
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.colonyCaptured.enemy", colony)
-                .addName("%colony%", colony.getName())
-                .addStringTemplate("%unit%", attacker.getLabel())
-                .addStringTemplate("%enemyNation%", colonyNation)
-                .addAmount("%amount%", plunder));
+                .<ModelMessage>addName("%colony%", colony.getName())
+                .<ModelMessage>addStringTemplate("%unit%", attacker.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", colonyNation)
+                .<ModelMessage>addAmount("%amount%", plunder));
         cs.addMessage(colonyPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                             "combat.colonyCaptured.ours", tile)
-                .addName("%colony%", colony.getName())
-                .addStringTemplate("%enemyUnit%", attacker.getLabel())
-                .addStringTemplate("%enemyNation%", attackerNation)
-                .addAmount("%amount%", plunder));
+                .<ModelMessage>addName("%colony%", colony.getName())
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
attacker.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation)
+                .<ModelMessage>addAmount("%amount%", plunder));
         colonyPlayer.csLoseLocation(colony, cs);
 
         // Allocate some plunder
@@ -2839,9 +2839,9 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(attackerPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  "combat.newConvertFromAttack", convert)
-                    .addStringTemplate("%unit%", attacker.getLabel())
-                    .addStringTemplate("%enemyNation%", convertNation)
-                    .addStringTemplate("%enemyUnit%", convert.getLabel()));
+                    .<ModelMessage>addStringTemplate("%unit%", 
attacker.getLabel())
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
convertNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
convert.getLabel()));
             attackerPlayer.invalidateCanSeeTiles();//+vis(attackerPlayer)
         }
     }
@@ -2887,8 +2887,8 @@ outer:  for (Effect effect : effects) {
                               new 
ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                                "combat.equipmentCaptured",
                                                winnerPlayer)
-                                  .addStringTemplate("%nation%", winnerNation)
-                                  .addNamed("%equipment%", goodsType));
+                                  .<ModelMessage>addStringTemplate("%nation%", 
winnerNation)
+                                  .<ModelMessage>addNamed("%equipment%", 
goodsType));
 
                 // CHEAT: Immediately transferring the captured goods
                 // back to a potentially remote settlement is pretty
@@ -2944,21 +2944,21 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(winnerPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  key, loser)
-                    .addDefaultId("combat.unitCaptured.enemy")
-                    .addStringTemplate("%location%", winnerLocation)
-                    .addStringTemplate("%unit%", winner.getLabel())
-                    .addStringTemplate("%enemyNation%", loserNation)
-                    .addStringTemplate("%enemyUnit%", loserLabel));
+                    .<ModelMessage>addDefaultId("combat.unitCaptured.enemy")
+                    .<ModelMessage>addStringTemplate("%location%", 
winnerLocation)
+                    .<ModelMessage>addStringTemplate("%unit%", 
winner.getLabel())
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
loserNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
loserLabel));
         }
         key = "combat.unitCaptured.ours." + loser.getType().getSuffix();
         cs.addMessage(loserPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              key, oldTile)
-                .addDefaultId("combat.unitCaptured.ours")
-                .addStringTemplate("%location%", loserLocation)
-                .addStringTemplate("%unit%", loserLabel)
-                .addStringTemplate("%enemyNation%", winnerNation)
-                .addStringTemplate("%enemyUnit%", winner.getLabel()));
+                .<ModelMessage>addDefaultId("combat.unitCaptured.ours")
+                .<ModelMessage>addStringTemplate("%location%", loserLocation)
+                .<ModelMessage>addStringTemplate("%unit%", loserLabel)
+                .<ModelMessage>addStringTemplate("%enemyNation%", winnerNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
winner.getLabel()));
         winnerPlayer.invalidateCanSeeTiles();//+vis(winnerPlayer)
         loserPlayer.invalidateCanSeeTiles();//+vis(loserPlayer)
     }
@@ -2988,9 +2988,9 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(shipPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  "combat.shipsDamaged", shipPlayer)
-                    .addStringTemplate("%ships%", t)
-                    .addAmount("%number%", units.size())
-                    .addStringTemplate("%repairLocation%",
+                    .<ModelMessage>addStringTemplate("%ships%", t)
+                    .<ModelMessage>addAmount("%number%", units.size())
+                    .<ModelMessage>addStringTemplate("%repairLocation%",
                         repairLocation.getLocationLabelFor(shipPlayer)));
         }
     }
@@ -3014,20 +3014,20 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipDamaged.enemy", attacker)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     shipLocation.getLocationLabelFor(attackerPlayer))
-                .addStringTemplate("%unit%", attacker.getLabel())
-                .addStringTemplate("%enemyNation%", shipNation)
-                .addStringTemplate("%enemyUnit%", ship.getLabel()));
+                .<ModelMessage>addStringTemplate("%unit%", attacker.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", shipNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
ship.getLabel()));
         cs.addMessage(shipPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipDamaged.ours", ship)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     shipLocation.getLocationLabelFor(shipPlayer))
-                .addStringTemplate("%unit%", ship.getLabel())
-                .addStringTemplate("%enemyUnit%", attacker.getLabel())
-                .addStringTemplate("%enemyNation%", attackerNation)
-                .addStringTemplate("%repairLocation%", repairLoc));
+                .<ModelMessage>addStringTemplate("%unit%", ship.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
attacker.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation)
+                .<ModelMessage>addStringTemplate("%repairLocation%", 
repairLoc));
 
         csDamageShip(ship, repair, cs);
     }
@@ -3052,21 +3052,21 @@ outer:  for (Effect effect : effects) {
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipDamagedByBombardment.enemy",
                              settlement)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     settlement.getLocationLabelFor(attackerPlayer))
-                .addNamed("%building%", building)
-                .addStringTemplate("%enemyNation%", shipNation)
-                .addStringTemplate("%enemyUnit%", ship.getLabel()));
+                .<ModelMessage>addNamed("%building%", building)
+                .<ModelMessage>addStringTemplate("%enemyNation%", shipNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
ship.getLabel()));
         cs.addMessage(shipPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipDamagedByBombardment.ours", ship)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     settlement.getLocationLabelFor(shipPlayer))
-                .addStringTemplate("%unit%", ship.getLabel())
-                .addNamed("%building%", building)
-                .addStringTemplate("%enemyNation%",
+                .<ModelMessage>addStringTemplate("%unit%", ship.getLabel())
+                .<ModelMessage>addNamed("%building%", building)
+                .<ModelMessage>addStringTemplate("%enemyNation%",
                     attackerPlayer.getNationLabel())
-                .addStringTemplate("%repairLocation%", repairLoc));
+                .<ModelMessage>addStringTemplate("%repairLocation%", 
repairLoc));
 
         csDamageShip(ship, repair, cs);
     }
@@ -3137,22 +3137,22 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(winnerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              key, winner)
-                .addDefaultId("combat.unitDemoted.enemy")
-                .addStringTemplate("%location%", winnerLocation)
-                .addStringTemplate("%unit%", winner.getLabel())
-                .addStringTemplate("%enemyNation%", loserNation)
-                .addStringTemplate("%oldName%", loserLabel)
-                .addStringTemplate("%enemyUnit%", loser.getLabel()));
+                .<ModelMessage>addDefaultId("combat.unitDemoted.enemy")
+                .<ModelMessage>addStringTemplate("%location%", winnerLocation)
+                .<ModelMessage>addStringTemplate("%unit%", winner.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", loserNation)
+                .<ModelMessage>addStringTemplate("%oldName%", loserLabel)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
loser.getLabel()));
         key = "combat.unitDemoted.ours." + suffix;
         cs.addMessage(loserPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              key, loser)
-                .addDefaultId("combat.unitDemoted.ours")
-                .addStringTemplate("%location%", loserLocation)
-                .addStringTemplate("%oldName%", loserLabel)
-                .addStringTemplate("%unit%", loser.getLabel())
-                .addStringTemplate("%enemyNation%", winnerNation)
-                .addStringTemplate("%enemyUnit%", winner.getLabel()));
+                .<ModelMessage>addDefaultId("combat.unitDemoted.ours")
+                .<ModelMessage>addStringTemplate("%location%", loserLocation)
+                .<ModelMessage>addStringTemplate("%oldName%", loserLabel)
+                .<ModelMessage>addStringTemplate("%unit%", loser.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", winnerNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
winner.getLabel()));
     }
 
     /**
@@ -3176,21 +3176,21 @@ outer:  for (Effect effect : effects) {
         cs.addHistory(colonyPlayer,
             new HistoryEvent(game.getTurn(),
                 HistoryEvent.HistoryEventType.COLONY_DESTROYED, attackerPlayer)
-                .addStringTemplate("%nation%", attackerNation)
-                .addName("%colony%", colony.getName()));
+                .<HistoryEvent>addStringTemplate("%nation%", attackerNation)
+                .<HistoryEvent>addName("%colony%", colony.getName()));
         cs.addMessage(colonyPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.colonyBurned.ours", colony.getTile())
-                .addName("%colony%", colony.getName())
-                .addStringTemplate("%enemyNation%", attackerNation)
-                .addStringTemplate("%enemyUnit%", attacker.getLabel())
-                .addAmount("%amount%", plunder));
+                .<ModelMessage>addName("%colony%", colony.getName())
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
attacker.getLabel())
+                .<ModelMessage>addAmount("%amount%", plunder));
         cs.addGlobalMessage(game, colonyPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.colonyBurned.other", colonyPlayer)
-                .addName("%colony%", colony.getName())
-                .addStringTemplate("%nation%", colonyNation)
-                .addStringTemplate("%attackerNation%", attackerNation));
+                .<ModelMessage>addName("%colony%", colony.getName())
+                .<ModelMessage>addStringTemplate("%nation%", colonyNation)
+                .<ModelMessage>addStringTemplate("%attackerNation%", 
attackerNation));
         colonyPlayer.csLoseLocation(colony, cs);
 
         // Allocate some plunder.
@@ -3250,8 +3250,8 @@ outer:  for (Effect effect : effects) {
         int score = spec.getInteger(GameOptions.DESTROY_SETTLEMENT_SCORE);
         HistoryEvent h = new HistoryEvent(game.getTurn(),
             HistoryEvent.HistoryEventType.DESTROY_SETTLEMENT, this)
-                .addStringTemplate("%nation%", nativeNation)
-                .addName("%settlement%", settlementName);
+                .<HistoryEvent>addStringTemplate("%nation%", nativeNation)
+                .<HistoryEvent>addName("%settlement%", settlementName);
         h.setScore(score);
         cs.addHistory(attackerPlayer, h);
 
@@ -3259,22 +3259,22 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.destroySettlement.enemy", attacker)
-                .addName("%settlement%", settlementName)
-                .addStringTemplate("%unit%", attacker.getLabel())
-                .addStringTemplate("%nativeNation%", nativeNation)
-                .addAmount("%amount%", plunder));
+                .<ModelMessage>addName("%settlement%", settlementName)
+                .<ModelMessage>addStringTemplate("%unit%", attacker.getLabel())
+                .<ModelMessage>addStringTemplate("%nativeNation%", 
nativeNation)
+                .<ModelMessage>addAmount("%amount%", plunder));
         if (capital) {
             cs.addMessage(attackerPlayer,
                 new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                                  "combat.destroySettlement.enemy.capital",
                                  attacker)
-                    .addStringTemplate("%nation%", nativeNation));
+                    .<ModelMessage>addStringTemplate("%nation%", 
nativeNation));
         }
         if (nativePlayer.checkForDeath() == IS_DEAD) {
             h = new HistoryEvent(game.getTurn(),
                 HistoryEvent.HistoryEventType.DESTROY_NATION, this)
-                    .addStringTemplate("%nation%", attackerNation)
-                    .addStringTemplate("%nativeNation%", nativeNation);
+                    .<HistoryEvent>addStringTemplate("%nation%", 
attackerNation)
+                    .<HistoryEvent>addStringTemplate("%nativeNation%", 
nativeNation);
             h.setScore(SCORE_NATION_DESTROYED);
             cs.addGlobalHistory(game, h);
         }
@@ -3366,19 +3366,19 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipEvaded.enemy", attacker)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     attackerLocation.getLocationLabelFor(attackerPlayer))
-                .addStringTemplate("%unit%", attacker.getLabel())
-                .addStringTemplate("%enemyNation%", defenderNation)
-                .addStringTemplate("%enemyUnit%", defender.getLabel()));
+                .<ModelMessage>addStringTemplate("%unit%", attacker.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
defenderNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
defender.getLabel()));
         cs.addMessage(defenderPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipEvaded.ours", defender)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     defenderLocation.getLocationLabelFor(defenderPlayer))
-                .addStringTemplate("%unit%", defender.getLabel())
-                .addStringTemplate("%enemyNation%", attackerNation)
-                .addStringTemplate("%enemyUnit%", attacker.getLabel()));
+                .<ModelMessage>addStringTemplate("%unit%", defender.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
attacker.getLabel()));
     }
 
     /**
@@ -3398,19 +3398,19 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipEvadedBombardment.enemy", settlement)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     settlement.getLocationLabelFor(attackerPlayer))
-                .addNamed("%building%", building)
-                .addStringTemplate("%enemyNation%", defenderNation)
-                .addStringTemplate("%enemyUnit%", defender.getLabel()));
+                .<ModelMessage>addNamed("%building%", building)
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
defenderNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
defender.getLabel()));
         cs.addMessage(defenderPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipEvadedBombardment.ours", defender)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     settlement.getLocationLabelFor(defenderPlayer))
-                .addStringTemplate("%unit%", defender.getLabel())
-                .addNamed("%building%", building)
-                .addStringTemplate("%enemyNation%",
+                .<ModelMessage>addStringTemplate("%unit%", defender.getLabel())
+                .<ModelMessage>addNamed("%building%", building)
+                .<ModelMessage>addStringTemplate("%enemyNation%",
                     attackerPlayer.getNationLabel()));
     }
 
@@ -3463,20 +3463,20 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.unitDemotedToUnarmed.enemy", attacker)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                      settlement.getLocationLabelFor(attackerPlayer))
-                .addStringTemplate("%unit%", attacker.getLabel())
-                .addStringTemplate("%oldName%", defenderLabel)
-                .addStringTemplate("%enemyNation%", defenderNation)
-                .addStringTemplate("%enemyUnit%", defender.getLabel()));
+                .<ModelMessage>addStringTemplate("%unit%", attacker.getLabel())
+                .<ModelMessage>addStringTemplate("%oldName%", defenderLabel)
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
defenderNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
defender.getLabel()));
         cs.addMessage(defenderPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.unitLoseAutoEquip", defender)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     settlement.getLocationLabelFor(defenderPlayer))
-                .addStringTemplate("%unit%", defender.getLabel())
-                .addStringTemplate("%enemyNation%", attackerNation)
-                .addStringTemplate("%enemyUnit%", attacker.getLabel()));
+                .<ModelMessage>addStringTemplate("%unit%", defender.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
attacker.getLabel()));
     }
 
     /**
@@ -3515,41 +3515,41 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(winnerPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  "combat.unitDemotedToUnarmed.enemy", winner)
-                    .addStringTemplate("%location%", winnerLocation)
-                    .addStringTemplate("%unit%", winner.getLabel())
-                    .addStringTemplate("%oldName%", loserLabel)
-                    .addStringTemplate("%enemyNation%", loserNation)
-                    .addStringTemplate("%enemyUnit%", loser.getLabel()));
+                    .<ModelMessage>addStringTemplate("%location%", 
winnerLocation)
+                    .<ModelMessage>addStringTemplate("%unit%", 
winner.getLabel())
+                    .<ModelMessage>addStringTemplate("%oldName%", loserLabel)
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
loserNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
loser.getLabel()));
             cs.addMessage(loserPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  "combat.unitDemotedToUnarmed.ours", loser)
-                    .addStringTemplate("%location%", loserLocation)
-                    .addStringTemplate("%oldName%", loserLabel)
-                    .addStringTemplate("%unit%", loser.getLabel())
-                    .addStringTemplate("%enemyNation%", winnerNation)
-                    .addStringTemplate("%enemyUnit%", winner.getLabel()));
+                    .<ModelMessage>addStringTemplate("%location%", 
loserLocation)
+                    .<ModelMessage>addStringTemplate("%oldName%", loserLabel)
+                    .<ModelMessage>addStringTemplate("%unit%", 
loser.getLabel())
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
winnerNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
winner.getLabel()));
             loser.setState(Unit.UnitState.ACTIVE);
         } else {
             key = "combat.unitDemoted.enemy." + loser.getType().getSuffix();
             cs.addMessage(winnerPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  key, winner)
-                    .addDefaultId("combat.unitDemoted.enemy")
-                    .addStringTemplate("%location%", winnerLocation)
-                    .addStringTemplate("%unit%", winner.getLabel())
-                    .addStringTemplate("%oldName%", loserLabel)
-                    .addStringTemplate("%enemyNation%", loserNation)
-                    .addStringTemplate("%enemyUnit%", loser.getLabel()));
+                    .<ModelMessage>addDefaultId("combat.unitDemoted.enemy")
+                    .<ModelMessage>addStringTemplate("%location%", 
winnerLocation)
+                    .<ModelMessage>addStringTemplate("%unit%", 
winner.getLabel())
+                    .<ModelMessage>addStringTemplate("%oldName%", loserLabel)
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
loserNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
loser.getLabel()));
             key = "combat.unitDemoted.ours." + loser.getType().getSuffix();
             cs.addMessage(loserPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  key, loser)
-                    .addDefaultId("combat.unitDemoted.ours")
-                    .addStringTemplate("%location%", loserLocation)
-                    .addStringTemplate("%oldName%", loserLabel)
-                    .addStringTemplate("%unit%", loser.getLabel())
-                    .addStringTemplate("%enemyNation%", winnerNation)
-                    .addStringTemplate("%enemyUnit%", winner.getLabel()));
+                    .<ModelMessage>addDefaultId("combat.unitDemoted.ours")
+                    .<ModelMessage>addStringTemplate("%location%", 
loserLocation)
+                    .<ModelMessage>addStringTemplate("%oldName%", loserLabel)
+                    .<ModelMessage>addStringTemplate("%unit%", 
loser.getLabel())
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
winnerNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
winner.getLabel()));
         }
     }
 
@@ -3570,8 +3570,8 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(this,
                 new ModelMessage(ModelMessage.MessageType.GOODS_MOVEMENT,
                     "combat.tradeRouteSuspended", this)
-                    .addName("%route%", tr.getName())
-                    .addStringTemplate("%stop%", loc.getLocationLabel()));
+                    .<ModelMessage>addName("%route%", tr.getName())
+                    .<ModelMessage>addStringTemplate("%stop%", 
loc.getLocationLabel()));
             cs.add(See.only(this), tr);
         }
     }
@@ -3606,10 +3606,10 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(colonyPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  "combat.raid.building", colony)
-                    .addName("%colony%", colony.getName())
-                    .addNamed("%building%", building)
-                    .addStringTemplate("%enemyNation%", attackerNation)
-                    .addStringTemplate("%enemyUnit%", attacker.getLabel()));
+                    .<ModelMessage>addName("%colony%", colony.getName())
+                    .<ModelMessage>addNamed("%building%", building)
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
attacker.getLabel()));
         } else if (pillage < buildingList.size() + shipList.size()) {
             Unit ship = shipList.get(pillage - buildingList.size());
             if (ship.getRepairLocation() == null) {
@@ -3627,11 +3627,11 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(colonyPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  "combat.raid.goods", colony, goods)
-                    .addName("%colony%", colony.getName())
-                    .addAmount("%amount%", goods.getAmount())
-                    .addNamed("%goods%", goods.getType())
-                    .addStringTemplate("%enemyNation%", attackerNation)
-                    .addStringTemplate("%enemyUnit%", attacker.getLabel()));
+                    .<ModelMessage>addName("%colony%", colony.getName())
+                    .<ModelMessage>addAmount("%amount%", goods.getAmount())
+                    .<ModelMessage>addNamed("%goods%", goods.getType())
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
attacker.getLabel()));
 
         } else {
             int plunder = Math.max(1, colony.getPlunder(attacker, random) / 5);
@@ -3641,17 +3641,17 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(colonyPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  "combat.raid.plunder", colony)
-                    .addAmount("%amount%", plunder)
-                    .addName("%colony%", colony.getName())
-                    .addStringTemplate("%enemyNation%", attackerNation)
-                    .addStringTemplate("%enemyUnit%", attacker.getLabel()));
+                    .<ModelMessage>addAmount("%amount%", plunder)
+                    .<ModelMessage>addName("%colony%", colony.getName())
+                    .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation)
+                    .<ModelMessage>addStringTemplate("%enemyUnit%", 
attacker.getLabel()));
         }
         cs.addGlobalMessage(getGame(), colonyPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.raid.other", colonyPlayer)
-                .addName("%colony%", colony.getName())
-                .addStringTemplate("%colonyNation%", colonyNation)
-                .addStringTemplate("%nation%", attackerNation));
+                .<ModelMessage>addName("%colony%", colony.getName())
+                .<ModelMessage>addStringTemplate("%colonyNation%", 
colonyNation)
+                .<ModelMessage>addStringTemplate("%nation%", attackerNation));
     }
 
     /**
@@ -3720,8 +3720,8 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(winnerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.unitPromoted", winner)
-                .addStringTemplate("%oldName%", winnerLabel)
-                .addStringTemplate("%unit%", winner.getLabel()));
+                .<ModelMessage>addStringTemplate("%oldName%", winnerLabel)
+                .<ModelMessage>addStringTemplate("%unit%", winner.getLabel()));
     }
 
     /**
@@ -3747,8 +3747,8 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(shipPlayer,
                 new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                                  "combat.shipsSunk", shipPlayer)
-                    .addStringTemplate("%ships%", t)
-                    .addAmount("%number%", units.size()));
+                    .<ModelMessage>addStringTemplate("%ships%", t)
+                    .<ModelMessage>addAmount("%number%", units.size()));
         }
     }
 
@@ -3770,19 +3770,19 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipSunk.enemy", attackerUnit)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     shipLocation.getLocationLabelFor(attackerPlayer))
-                .addStringTemplate("%unit%", attackerUnit.getLabel())
-                .addStringTemplate("%enemyUnit%", ship.getLabel())
-                .addStringTemplate("%enemyNation%", shipNation));
+                .<ModelMessage>addStringTemplate("%unit%", 
attackerUnit.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
ship.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", shipNation));
         cs.addMessage(shipPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipSunk.ours", ship.getTile())
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     shipLocation.getLocationLabelFor(shipPlayer))
-                .addStringTemplate("%unit%", ship.getLabel())
-                .addStringTemplate("%enemyUnit%", attackerUnit.getLabel())
-                .addStringTemplate("%enemyNation%", attackerNation));
+                .<ModelMessage>addStringTemplate("%unit%", ship.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
attackerUnit.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", 
attackerNation));
 
         csSinkShip(ship, attackerPlayer, cs);
     }
@@ -3804,19 +3804,19 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(attackerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipSunkByBombardment.enemy", settlement)
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     settlement.getLocationLabelFor(attackerPlayer))
-                .addNamed("%building%", building)
-                .addStringTemplate("%enemyUnit%", ship.getLabel())
-                .addStringTemplate("%enemyNation%", shipNation));
+                .<ModelMessage>addNamed("%building%", building)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
ship.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", shipNation));
         cs.addMessage(shipPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              "combat.shipSunkByBombardment", ship.getTile())
-                .addStringTemplate("%location%",
+                .<ModelMessage>addStringTemplate("%location%",
                     settlement.getLocationLabelFor(shipPlayer))
-                .addStringTemplate("%unit%", ship.getLabel())
-                .addNamed("%building%", building)
-                .addStringTemplate("%enemyNation%",
+                .<ModelMessage>addStringTemplate("%unit%", ship.getLabel())
+                .<ModelMessage>addNamed("%building%", building)
+                .<ModelMessage>addStringTemplate("%enemyNation%",
                     attackerPlayer.getNationLabel()));
 
         csSinkShip(ship, attackerPlayer, cs);
@@ -3869,27 +3869,27 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(winnerPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              key, winner)
-                .addDefaultId("combat.unitSlaughtered.enemy")
-                .addStringTemplate("%location%", winnerLocation)
-                .addStringTemplate("%unit%", winner.getLabel())
-                .addStringTemplate("%enemyNation%", loserNation)
-                .addStringTemplate("%enemyUnit%", loser.getLabel()));
+                .<ModelMessage>addDefaultId("combat.unitSlaughtered.enemy")
+                .<ModelMessage>addStringTemplate("%location%", winnerLocation)
+                .<ModelMessage>addStringTemplate("%unit%", winner.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", loserNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
loser.getLabel()));
         key = "combat.unitSlaughtered.ours." + loser.getType().getSuffix();
         cs.addMessage(loserPlayer,
             new ModelMessage(ModelMessage.MessageType.COMBAT_RESULT,
                              key, loser.getTile())
-                .addDefaultId("combat.unitSlaughtered.ours")
-                .addStringTemplate("%location%", loserLocation)
-                .addStringTemplate("%unit%", loser.getLabel())
-                .addStringTemplate("%enemyNation%", winnerNation)
-                .addStringTemplate("%enemyUnit%", winner.getLabel()));
+                .<ModelMessage>addDefaultId("combat.unitSlaughtered.ours")
+                .<ModelMessage>addStringTemplate("%location%", loserLocation)
+                .<ModelMessage>addStringTemplate("%unit%", loser.getLabel())
+                .<ModelMessage>addStringTemplate("%enemyNation%", winnerNation)
+                .<ModelMessage>addStringTemplate("%enemyUnit%", 
winner.getLabel()));
         if (loserPlayer.isIndian() && loserPlayer.checkForDeath() == IS_DEAD) {
             StringTemplate nativeNation = loserPlayer.getNationLabel();
             cs.addGlobalHistory(getGame(),
                 new HistoryEvent(getGame().getTurn(),
                     HistoryEvent.HistoryEventType.DESTROY_NATION, winnerPlayer)
-                .addStringTemplate("%nation%", winnerPlayer.getNationLabel())
-                .addStringTemplate("%nativeNation%", nativeNation));
+                .<HistoryEvent>addStringTemplate("%nation%", 
winnerPlayer.getNationLabel())
+                .<HistoryEvent>addStringTemplate("%nativeNation%", 
nativeNation));
         }
 
         // Destroy unit.  Note See.only visibility used to handle the
@@ -3991,9 +3991,9 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(this,
                 new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                                  messageId, this)
-                    .addName("%colony%", colony.getName())
-                    .addAmount("%amount%", amount)
-                    .addNamed("%goods%", goodsType));
+                    .<ModelMessage>addName("%colony%", colony.getName())
+                    .<ModelMessage>addAmount("%amount%", amount)
+                    .<ModelMessage>addNamed("%goods%", goodsType));
             cs.addAttribute(See.only(this), "flush", Boolean.TRUE.toString());
             logger.info("Goods party at " + colony.getName()
                 + " with: " + goods + " arrears: " + arrears);
@@ -4017,7 +4017,7 @@ outer:  for (Effect effect : effects) {
         cs.addMessage(this,
             new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                              "model.player.ignoredTax", this)
-                .addAmount("%amount%", tax));
+                .<ModelMessage>addAmount("%amount%", tax));
     }
 
     /**
@@ -4102,7 +4102,7 @@ outer:  for (Effect effect : effects) {
             cs.addMessage(this,
                 new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                                  "model.player.mercenariesArrived", this)
-                    .addStringTemplate("%location%",
+                    .<ModelMessage>addStringTemplate("%location%",
                         dst.up().getLocationLabelFor(this)));
             modifyGold(-price);
             cs.addPartial(See.only(this), this, "gold");
@@ -4134,12 +4134,12 @@ outer:  for (Effect effect : effects) {
             } else {
                 cs.addHistory(other, new HistoryEvent(turn,
                         HistoryEvent.HistoryEventType.MEET_NATION, other)
-                    .addStringTemplate("%nation%", getNationLabel()));
+                    .<HistoryEvent>addStringTemplate("%nation%", 
getNationLabel()));
             }
         } else { // (serverPlayer.isEuropean)
             cs.addHistory(this, new HistoryEvent(turn,
                     HistoryEvent.HistoryEventType.MEET_NATION, other)
-                .addStringTemplate("%nation%", other.getNationLabel()));
+                .<HistoryEvent>addStringTemplate("%nation%", 
other.getNationLabel()));
         }
 
         logger.finest("First contact between " + this.getId()
@@ -4393,8 +4393,8 @@ outer:  for (Effect effect : effects) {
                     : "model.player.soLDecrease";
                 cs.addMessage(this,
                     new ModelMessage(MessageType.SONS_OF_LIBERTY, key, this)
-                        .addAmount("%oldSoL%", oldSoL)
-                        .addAmount("%newSoL%", newSoL));
+                        .<ModelMessage>addAmount("%oldSoL%", oldSoL)
+                        .<ModelMessage>addAmount("%newSoL%", newSoL));
             }
             oldSoL = newSoL; // Remember SoL for check changes at next turn.
         }
@@ -4500,8 +4500,8 @@ outer:  for (Effect effect : effects) {
                     cs.addMessage(sp,
                         new ModelMessage(MessageType.FOREIGN_DIPLOMACY,
                                          sta.getOtherStanceChangeKey(), this)
-                            .addStringTemplate("%attacker%", getNationLabel())
-                            .addStringTemplate("%defender%", 
s.getNationLabel()));
+                            .<ModelMessage>addStringTemplate("%attacker%", 
getNationLabel())
+                            .<ModelMessage>addStringTemplate("%defender%", 
s.getNationLabel()));
                 }
             }
         }
diff --git a/src/net/sf/freecol/server/model/ServerUnit.java 
b/src/net/sf/freecol/server/model/ServerUnit.java
index 7a56b218120..b9608ee579d 100644
--- a/src/net/sf/freecol/server/model/ServerUnit.java
+++ b/src/net/sf/freecol/server/model/ServerUnit.java
@@ -284,8 +284,8 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
             cs.addMessage(owner,
                 new ModelMessage(ModelMessage.MessageType.WARNING,
                                  messageId, this)
-                    .addStringTemplate("%unit%", getLabel())
-                    .addStringTemplate("%location%", locName));
+                    .<ModelMessage>addStringTemplate("%unit%", getLabel())
+                    .<ModelMessage>addStringTemplate("%location%", locName));
         }
 
         // Cancel other co-located improvements of the same type
@@ -345,8 +345,8 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
                 new ModelMessage(ModelMessage.MessageType.UNIT_REPAIRED,
                                  "model.unit.unitRepaired",
                                  this, (FreeColGameObject)loc)
-                    .addStringTemplate("%unit%", getLabel())
-                    .addStringTemplate("%repairLocation%",
+                    .<ModelMessage>addStringTemplate("%unit%", getLabel())
+                    .<ModelMessage>addStringTemplate("%repairLocation%",
                         loc.getLocationLabelFor(owner)));
             setState(UnitState.ACTIVE);
         }
@@ -425,7 +425,7 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
             new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
                              RumourType.BURIAL_GROUND.getDescriptionKey(),
                              serverPlayer, this)
-                .addStringTemplate("%nation%", indianPlayer.getNationLabel()));
+                .<ModelMessage>addStringTemplate("%nation%", 
indianPlayer.getNationLabel()));
     }
 
     /**
@@ -534,8 +534,8 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
             cs.addMessage(serverPlayer,
                 new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
                                  key, serverPlayer, this)
-                    .addStringTemplate("%unit%", oldName)
-                    .addNamed("%type%", getType()));
+                    .<ModelMessage>addStringTemplate("%unit%", oldName)
+                    .<ModelMessage>addNamed("%type%", getType()));
             break;
         case TRIBAL_CHIEF:
             int chiefAmount = randomInt(logger, "Chief base amount",
@@ -547,7 +547,7 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
             cs.addMessage(serverPlayer,
                 new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
                                  key, serverPlayer, this)
-                    .addAmount("%money%", chiefAmount));
+                    .<ModelMessage>addAmount("%money%", chiefAmount));
             serverPlayer.invalidateCanSeeTiles();//+vis(serverPlayer)
             break;
         case COLONIST:
@@ -574,14 +574,14 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
                 cs.addMessage(serverPlayer,
                     new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
                                      key, serverPlayer, newUnit)
-                        .addName("%city%", cityName)
-                        .addAmount("%money%", treasureAmount));
+                        .<ModelMessage>addName("%city%", cityName)
+                        .<ModelMessage>addAmount("%money%", treasureAmount));
                 cs.addGlobalHistory(game,
                     new HistoryEvent(game.getTurn(),
                         HistoryEvent.HistoryEventType.CITY_OF_GOLD, 
serverPlayer)
-                    .addStringTemplate("%nation%", 
serverPlayer.getNationLabel())
-                    .addName("%city%", cityName)
-                    .addAmount("%treasure%", treasureAmount));
+                    .<HistoryEvent>addStringTemplate("%nation%", 
serverPlayer.getNationLabel())
+                    .<HistoryEvent>addName("%city%", cityName)
+                    .<HistoryEvent>addAmount("%treasure%", treasureAmount));
                 break;
             }
             // Fall through, found all the cities of gold.
@@ -604,7 +604,7 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
                 new ModelMessage(ModelMessage.MessageType.LOST_CITY_RUMOUR,
                                  key, serverPlayer,
                                  ((newUnit != null) ? newUnit : this))
-                    .addAmount("%money%", ruinsAmount));
+                    .<ModelMessage>addAmount("%money%", ruinsAmount));
             break;
         case FOUNTAIN_OF_YOUTH:
             ServerEurope europe = (ServerEurope)serverPlayer.getEurope();
@@ -833,8 +833,8 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
                             new 
ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                                              
"model.unit.nativeSettlementContact",
                                              this, is)
-                                .addStringTemplate("%nation%", nation)
-                                .addName("%settlement%", is.getName()));
+                                .<ModelMessage>addStringTemplate("%nation%", 
nation)
+                                .<ModelMessage>addName("%settlement%", 
is.getName()));
                         logger.finest("First contact between "
                             + contactPlayer.getId()
                             + " and " + is + " at " + newTile);
@@ -867,11 +867,11 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
             cs.addMessage(serverPlayer,
                 new ModelMessage(ModelMessage.MessageType.FOREIGN_DIPLOMACY,
                                  "model.unit.slowed", this, slowedBy)
-                    .addStringTemplate("%unit%",
+                    .<ModelMessage>addStringTemplate("%unit%",
                         getLabel(UnitLabelType.NATIONAL))
-                    .addStringTemplate("%enemyUnit%",
+                    .<ModelMessage>addStringTemplate("%enemyUnit%",
                         slowedBy.getLabel(UnitLabelType.PLAIN))
-                    .addStringTemplate("%enemyNation%", enemy));
+                    .<ModelMessage>addStringTemplate("%enemyNation%", enemy));
         }
 
         // Check for region discovery
@@ -913,8 +913,8 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
                 cs.addMessage(owner,
                     new ModelMessage(ModelMessage.MessageType.UNIT_LOST,
                                      "model.unit.attrition", this)
-                        .addStringTemplate("%unit%", getLabel())
-                        .addStringTemplate("%location%",
+                        .<ModelMessage>addStringTemplate("%unit%", getLabel())
+                        .<ModelMessage>addStringTemplate("%location%",
                             loc.getLocationLabelFor(owner)));
                 cs.add(See.perhaps(), (Tile)loc);
                 cs.addRemove(See.perhaps().always(owner), loc,
@@ -947,9 +947,9 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
                 cs.addMessage(owner,
                     new ModelMessage(ModelMessage.MessageType.UNIT_IMPROVED,
                                      "model.unit.experience", getColony(), 
this)
-                        .addStringTemplate("%oldName%", oldName)
-                        .addStringTemplate("%unit%", getLabel())
-                        .addName("%colony%", getColony().getName()));
+                        .<ModelMessage>addStringTemplate("%oldName%", oldName)
+                        .<ModelMessage>addStringTemplate("%unit%", getLabel())
+                        .<ModelMessage>addName("%colony%", 
getColony().getName()));
                 lb.add(" experience upgrade to ", getType());
                 unitDirty = true;
             }
@@ -1022,7 +1022,7 @@ public class ServerUnit extends Unit implements 
ServerModelObject {
                             new ModelMessage(ModelMessage.MessageType.DEFAULT,
                                              "model.unit.arriveInEurope",
                                              europe, this)
-                                .addNamed("%europe%", europe));
+                                .<ModelMessage>addNamed("%europe%", europe));
                     }
                     setState(UnitState.ACTIVE);
                     setLocation(europe);//-vis: safe/Europe
-- 
2.11.0.rc0.7.gbe5a750


------------------------------------------------------------------------------
Check out the vibrant tech community on one of the world's most
engaging tech sites, SlashDot.org! http://sdm.link/slashdot
_______________________________________________
Freecol-developers mailing list
Freecol-developers@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/freecol-developers

Reply via email to