 +  if (punit && !pcity) {
 +    struct player *owner = unit_owner(punit);
 +    struct unit_type *ptype = unit_type(punit);
-+    struct veteran_system *vetsys;
 +
 +    get_full_username(username, sizeof(username), owner);
 +    get_full_nation(nation, sizeof(nation), owner);
 +
-+    if (NULL == pplayer || owner == pplayer) {
++    if (!pplayer || owner == pplayer) {
 +      struct city *pcity = player_city_by_number(owner, punit->homecity);
 +
 +      if (pcity) {

 
       info.label[0] = '\0';
 
@@ -2188,3 +2226,468 @@
 
   unbuffer_shared_vision(pto);
 }

+         * <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);
+}
+
