circular dependencies are tricky