All subclasses of CellModifier can show up in a data block XOR a cell block. So there is a lot of logic to decide the behavior based on the block. This complicates things. I think it would be better to split by CellModifierCell and CellModifierData (or better names), and eliminate a lot of this logic.