cleanup
defer requiring user to solve circular dependency