Abstract module pattern