moved module support to separate trait and expanded it