Когда программа ведёт себя неожиданно, хочется сразу переписать большой фрагмент. Полезнее сначала собрать воспроизводимый пример и проверить предположения.

Если формулировке не хватает важного условия, подскажите, что стоит уточнить.