Just a re-iteration of some above posts because it's so important. Avoid Public Global Static Objects. Don't use them because its easy. It is going to make life really hard when there is a flat hierarchal structure and anything can access/call anything else. Pass in your managers by reference, it will save you a lot of headache in the long run.
If your code is getting too interdependent or tightly coupled consider using an eventing system. This allows someone higher up on the dependency tree to wire up event handlers and the sub-systems will operate independently of one another. Also take a look at using a component based structure to lighten the hierarchy.