updated with module inheritence