pushed more items down into the base class for simplicity and readability. Many things are now marked as 'final' which shouldn't be changed during operation.