 +      /* TRANS: "Territory of <username> (<nation + team>)" */
 +      astr_add_line(&str, _("Territory of %s (%s)"), username, nation);
 +    } else if (NULL != owner) {
-+      const struct player_diplstate *ds = *pplayer->diplstates;
-+
-+      if (ds[player_index(owner)].type == DS_CEASEFIRE) {
-+	int turns = ds[player_index(owner)].turns_left;
-+
-+        /* TRANS: "Territory of <username> (<nation + team>)
-+         * (<number> turn cease-fire)" */
++      struct player_diplstate *ds = player_diplstate_get(pplayer,
++                                                         owner);
++
++      if (ds->type == DS_CEASEFIRE) {
++        int turns = ds->turns_left;
++
 +        astr_add_line(&str,
++                      /* TRANS: "Territory of <username> (<nation + team>)
++                       * (<number> turn cease-fire)" */
 +                      PL_("Territory of %s (%s) (%d turn cease-fire)",
 +                          "Territory of %s (%s) (%d turn cease-fire)",
 +                          turns),
 +                      username, nation, turns);
 +      } else {
-+	int type = ds[player_index(owner)].type;
++        int type = ds->type;
 +
 +        /* TRANS: "Territory of <username>
 +         * (<nation + team> | <diplomatic state>)" */

+                      utype_name_translation(ptype), username, nation);
+      }
+    } else if (NULL != owner) {
+      const struct player_diplstate *ds = *pplayer->diplstates;
+
+      if (ds[player_index(owner)].type == DS_CEASEFIRE) {
+	int turns = ds[player_index(owner)].turns_left;
+
+        /* TRANS:  "Unit: <unit type> | <username> (<nation + team>,
+         * <number> turn cease-fire)" */

+         * <diplomatic state>)" */
+        astr_add_line(&str, _("Unit: %s | %s (%s, %s)"),
+                      utype_name_translation(ptype), username, nation,
+                      diplo_city_adjectives[ds->type]);
+      }
+    }
+
+    if (unit_owner(punit) == pplayer) {
+      /* Show bribe cost for own units. */
+      astr_add_line(&str, _("Bribe cost: %d"), unit_bribe_cost(punit));
+    } else {
+      /* We can only give an (lower) boundary for units of other players. */
+      astr_add_line(&str, _("Estimated bribe cost: > %d"),
+                    unit_bribe_cost(punit));
+    }
+
+    if ((NULL == pplayer || owner == pplayer)
+        && unit_list_size(ptile->units) >= 2) {
+      /* TRANS: "5 more" units on this tile */
+      astr_add(&str, _("  (%d more)"), unit_list_size(ptile->units) - 1);
+    }
+  }
+
+  astr_break_lines(&str, LINE_BREAK);
+  return astr_str(&str);
+}
+
