public ReportHighScoresPanel(FreeColClient freeColClient, GUI gui,
                                 String prefix) {
        super(freeColClient, gui, Messages.message("reportHighScoresAction.name"));
        // Display Panel
        reportPanel.removeAll();

        List<HighScore> highScores = getController().getHighScores();

        reportPanel.setLayout(new MigLayout("wrap 3, gapx 30", "[][][align right]", ""));

        if (prefix != null) {
            reportPanel.add(new JLabel(Messages.message(prefix)),
                "span, wrap 10");
        }

        for (HighScore highScore : highScores) {
            JLabel scoreValue = new JLabel(String.valueOf(highScore.getScore()));
            scoreValue.setFont(smallHeaderFont);
            reportPanel.add(scoreValue);

            String messageID = null;
            if (highScore.getIndependenceTurn() > 0) {
                messageID = "report.highScores.president";
            } else {
                messageID = "report.highScores.governor";
            }
            String country = highScore.getNewLandName();
            JLabel headline = localizedLabel(Messages.message(StringTemplate.template(messageID)
                                                              .addName("%name%", highScore.getPlayerName())
                                                              .addName("%nation%", country)));
            headline.setFont(smallHeaderFont);
            reportPanel.add(headline, "span, wrap 10");

            reportPanel.add(new JLabel(Messages.message("report.highScores.turn")), "skip");
            int retirementTurn = highScore.getRetirementTurn();
            String retirementTurnStr = (retirementTurn <= 0)
                ? Messages.message("N/A")
                : Messages.message(Turn.getLabel(retirementTurn));
            reportPanel.add(new JLabel(retirementTurnStr));

            reportPanel.add(new JLabel(Messages.message("report.highScores.score")), "skip");
            reportPanel.add(new JLabel(String.valueOf(highScore.getScore())));

            reportPanel.add(new JLabel(Messages.message("report.highScores.difficulty")), "skip");
            reportPanel.add(new JLabel(Messages.message(highScore.getDifficulty())));

            reportPanel.add(new JLabel(Messages.message("report.highScores.independence")), "skip");
            int independenceTurn = highScore.getIndependenceTurn();
            String independence = (independenceTurn <= 0)
                ? Messages.message("no")
                : Messages.message(Turn.getLabel(independenceTurn));
            reportPanel.add(new JLabel(independence));

            reportPanel.add(new JLabel(Messages.message("report.highScores.nation")), "skip");
            if (highScore.getIndependenceTurn() > 0) {
                reportPanel.add(new JLabel(highScore.getNationName()));
            } else {
                reportPanel.add(new JLabel(Messages.message(highScore.getOldNationNameKey())));
            }

            reportPanel.add(new JLabel(Messages.message("report.highScores.nationType")), "skip");
            reportPanel.add(new JLabel(Messages.message(highScore.getNationTypeID() + ".name")));

            reportPanel.add(new JLabel(Messages.message("report.highScores.units")), "skip");
            reportPanel.add(new JLabel(String.valueOf(highScore.getUnits())));

            reportPanel.add(new JLabel(Messages.message("report.highScores.colonies")), "skip");
            reportPanel.add(new JLabel(String.valueOf(highScore.getColonies())));

            reportPanel.add(new JLabel(Messages.message("report.highScores.retired")), "skip");
            DateFormat format = DateFormat.getDateTimeInstance(DateFormat.MEDIUM, DateFormat.SHORT);
            reportPanel.add(new JLabel(format.format(highScore.getDate())), "wrap 20");
        }

        reportPanel.doLayout();
    }