in reply to Understanding Chaos
Although OO was invented to prevent it, there is no principle which stops OO code from degenerating into a Big Ball of Mud when sufficiently ill-managed.
It's pretty well documented that when code is both sour and essential, essential is what counts. You have to keep it working because it's a critical node in your business. A ten year history suggests that that is the case.
Spaghetti code is usually untangled by refactoring procedures. I think that wild OO code should be tamed by reducing data structures. Having not seen your code, I have no assurance I'm right.