I tend to think by now that the first approach I presented earlier is illusory and too complicated. The second should work out just fine, even with row span. As I said this would result in the loss of look-ahead, but this goes in the exact same direction as handling different available IPD would. I think I'll try to extend the current algorithm and the LMs so they keep track of how much BPD (min/opt/max) they build up on lists so they can stop returning elements when one page/part is completely filled (combined min BPD >= available BPD). This should minimize the number of discarded elements because of recalculations. I'll start with the helpers for keeping track of accumulated BPD. In the meantime I hope there's enough time so you guys can comment on this. I'm especially keen of reading Luca's thoughts on the topic.