Further moving out of common functionality into superclasses