structured like a python package