moved ivars to allow cleaner subclasses