Try some abstraction, hopefully this works