Index: src/engine.cpp =================================================================== --- src/engine.cpp (revision 27818) +++ src/engine.cpp (working copy) @@ -1099,7 +1099,7 @@ * @param engine index of the engine to check. * @return true if the engine is refittable. */ -bool IsEngineRefittable(EngineID engine) +bool IsEngineRefittable(EngineID engine, const Vehicle *v) { const Engine *e = Engine::GetIfValid(engine); @@ -1113,7 +1113,10 @@ /* Are there suffixes? * Note: This does not mean the suffixes are actually available for every consist at any time. */ - if (HasBit(ei->callback_mask, CBM_VEHICLE_CARGO_SUFFIX)) return true; + if (HasBit(ei->callback_mask, CBM_VEHICLE_CARGO_SUFFIX)) { + uint16 cb = GetVehicleCallback(CBID_VEHICLE_CARGO_SUFFIX, 0, 0, engine, v); + if (cb < 0x400 && !(e->GetGRF()->grf_version < 8 && cb == 0xFF)) return true; + } /* Is there any cargo except the default cargo? */ CargoID default_cargo = e->GetDefaultCargoType(); Index: src/engine_func.h =================================================================== --- src/engine_func.h (revision 27818) +++ src/engine_func.h (working copy) @@ -25,7 +25,7 @@ extern const uint8 _engine_offsets[4]; bool IsEngineBuildable(EngineID engine, VehicleType type, CompanyID company); -bool IsEngineRefittable(EngineID engine); +bool IsEngineRefittable(EngineID engine, const Vehicle *v = NULL); void GetArticulatedVehicleCargoesAndRefits(EngineID engine, CargoArray *cargoes, uint32 *refits); void SetYearEngineAgingStops(); void StartupOneEngine(Engine *e, Date aging_date); Index: src/vehicle_gui.cpp =================================================================== --- src/vehicle_gui.cpp (revision 27818) +++ src/vehicle_gui.cpp (working copy) @@ -2410,7 +2410,7 @@ if (!v->IsStoppedInDepot()) return false; do { - if (IsEngineRefittable(v->engine_type)) return true; + if (IsEngineRefittable(v->engine_type, v)) return true; } while (v->IsGroundVehicle() && (v = v->Next()) != NULL); return false;