diff --git a/docs/newgrf-additions-nml.html b/docs/newgrf-additions-nml.html
index 9818ff6ba9..0c5c923dea 100644
--- a/docs/newgrf-additions-nml.html
+++ b/docs/newgrf-additions-nml.html
@@ -83,6 +83,8 @@
The default graphics chain for the primary vehicle may check the cargo states of the other ship parts if required.
Additional ship parts may be refitted individually.
This requires the multi_part_ships feature.
+ +From version 3 of the multi_part_ships feature, spritegroup loading/loaded cargo thresholds refer to the entire ship, not just the first vehicle.
Added callback: refit_part_name
diff --git a/docs/newgrf-additions.html b/docs/newgrf-additions.html
index a58adc28ef..19865ccc89 100644
--- a/docs/newgrf-additions.html
+++ b/docs/newgrf-additions.html
@@ -975,6 +975,7 @@
Additional ship parts may be refitted individually.
This is indicated by the feature name: multi_part_ships, version 1
+From version 3 of the multi_part_ships feature, Action 2 loadtypes/loadingtypes cargo thresholds refer to the entire ship, not just the first vehicle.
Callback EC008002 - Ship part name for refit window
This callback is called on the primary vehicle to get the name of each part of the ship (e.g. the name of each cargo hold) in the refit window.
This is not called for ships of only one part.
diff --git a/src/newgrf_engine.cpp b/src/newgrf_engine.cpp
index f1d50d553a..2c6b9cad5d 100644
--- a/src/newgrf_engine.cpp
+++ b/src/newgrf_engine.cpp
@@ -1151,8 +1151,18 @@ static uint32_t VehicleGetVariable(Vehicle *v, const VehicleScopeResolver *objec
uint totalsets = in_motion ? (uint)group->loaded.size() : (uint)group->loading.size();
if (totalsets == 0) return nullptr;
+ if (totalsets == 1) return in_motion ? group->loaded[0] : group->loading[0];
- uint set = (v->cargo.StoredCount() * totalsets) / std::max