applied oo module pattern