diff --git a/src/unit/unit.cpp b/src/unit/unit.cpp index 055bd5d4c..e7f1eb206 100644 --- a/src/unit/unit.cpp +++ b/src/unit/unit.cpp @@ -1095,13 +1095,18 @@ void CUnit::AddInContainer(CUnit &host) // keep sorted by size int mySize = Type->BoardSize; NextContained = host.UnitInside; - while (NextContained->Type->BoardSize > mySize && NextContained->PrevContained != NextContained) { - NextContained = NextContained->PrevContained; + bool becomeFirst = true; + while (NextContained->Type->BoardSize > mySize) { + becomeFirst = false; + NextContained = NextContained->NextContained; + if (NextContained == host.UnitInside) { + break; + } } PrevContained = NextContained->PrevContained; NextContained->PrevContained->NextContained = this; NextContained->PrevContained = this; - if (NextContained->Type->BoardSize <= mySize) { + if (becomeFirst) { host.UnitInside = this; } }