make it as a module and allow inheritance