diff --git a/data/core/help.cfg b/data/core/help.cfg
index feb7dd834723..4c306f6dcc9d 100644
--- a/data/core/help.cfg
+++ b/data/core/help.cfg
@@ -496,7 +496,9 @@ Terrains come in two types: text='basic' terrain types and text='defense caps' for a particular basic terrain type. In that case, the 'best defense' behavior is overridden -- they can never recieve a higher defense rating than the lowest defense cap value for any mixed terrain type which includes that basic type. For example, the loyalist cavalryman has a defense rating of 30% on forests, and a defense cap for forests. Thus, on forested hills, he has a defense rating of 30% rather than 40%, because the mixed rating cannot exceed the cap.
+Some units have text='defense caps' for a particular basic terrain type. In that case, the 'best defense' behavior is overridden -- they can never recieve a higher defense rating than the lowest defense cap value for any mixed terrain type which includes that basic type. For example, the loyalist cavalryman has a defense rating of 30% on forests, and a defense cap for forests. Thus, on forested hills, he has a defense rating of 30% rather than 40%, because the mixed rating cannot exceed the cap." + _"
+
+If a unit has a defense cap for some terrain, it is always the same as its defense rating on that terrain (it cannot be larger)." + _"
text='Basic Terrain Types'
diff --git a/src/help.cpp b/src/help.cpp
index e377d6ecfe3c..faabb762308c 100644
--- a/src/help.cpp
+++ b/src/help.cpp
@@ -1816,14 +1816,14 @@ class unit_topic_generator: public topic_generator
str.str(clear_stringstream);
const bool has_cap = movement_type.get_defense().capped(terrain);
if (has_cap) {
- str << "color=yellow text='yes'";
+ str << "color=yellow text='" << defense << "%'";
} else {
str << "color=white text='" << utils::unicode_figure_dash << "'";
}
markup = str.str();
str.str(clear_stringstream);
if (has_cap) {
- str << "yes";
+ str << defense << '%';
} else {
str << utils::unicode_figure_dash;
}