Split domain logic away into block iterator