public Element handle(FreeColServer server, Connection connection) {
        ServerPlayer serverPlayer = server.getPlayer(connection);
        Game game = server.getGame();

        String errors = "";
        for (TradeRoute tradeRoute : tradeRoutes) {
            if (tradeRoute.getId() == null || !hasPrefix(tradeRoute)) {
                errors += "Bogus route: " + tradeRoute.getId() + ". ";
                continue;
            }
            String id = removePrefix(tradeRoute);
            TradeRoute realRoute;
            try {
                realRoute = serverPlayer.getFreeColGameObject(id,
                                                              TradeRoute.class);
            } catch (Exception e) {
                errors += e.getMessage() + ". ";
                continue;
            }
        }
        if (!"".equals(errors)) return DOMMessage.clientError(errors);
        
        List<TradeRoute> newRoutes = new ArrayList<TradeRoute>();
        for (TradeRoute tradeRoute : tradeRoutes) {
            TradeRoute realRoute
                = game.getFreeColGameObject(removePrefix(tradeRoute),
                                            TradeRoute.class);
            realRoute.updateFrom(tradeRoute);
            newRoutes.add(realRoute);
            tradeRoute.dispose();
        }

        // Proceed to set trade routes
        return server.getInGameController()
            .setTradeRoutes(serverPlayer, newRoutes);
    }