overriding improvements; lots of refactoring