prefer semantic abstraction even when it creates duplication