tried to minimize interdependencies