http://oberoncore.ru/blackbox/open_points пункт 13.
Вы правильные исправления сделали, но это другая проблема.
Тексты представляются списками из фрагментов, хранящихся в файлах. Эта схема придумана, чтобы можно было работать с большими текстами при ограниченной памяти. Перемещение по списку - операция небыстрая, но длины списков были небольшими: при открытии файл отбражался в один фрагмент, а при сохранении все фрагменты опять сливались в один. Потом на фрагменты навесили атрибуты и их стало побольше.
А когда добавляли юникод, не придумали ничего лучшего, как ввести дополнительный тип фрагментов для 16-битных символов. Теперь русское слово (в среднем 6 букв) и следующий за ним пробел образуют два фрагмента и занимают в памяти 64 байта. В восточноевропейских языках ситуация не лучше - даже отдельные слова могут разбиваться.
Вольфанг предложил добавлять короткие символы к цепочкам длинных. Это снижает шансы сэкономить место на диске, зато сильно уменьшает фрагментацию. Но он сделал это отдельным модулем UTextModels. Теперь, если сохранить UTextModels.StdModel в документе, он не прочитается там, где нет UTextModels. Поэтому, он сохраняет его как стандарный TextModels.StdModel, но при конвертации опять получаем фрагментацию.