Another thing that bugs me here is that the name StepIterator complete relies on the fact that the passed filter is a ops.TextPositionFilter. With another filter the semantics of "step" and "walkable" would no longer apply.
So could we somehow enforce that, to close that hole?
Was proposing to make gui.StepIterator.createIterator actually a method of OdtDocument and StepIterator itself an internal class.
But as I understood you want to use the class also outside, so there needs to be an interface declared for it.