Extracted an interface from Ball. Made some other minor changes.