This method should just be split and transferred to the subclasses.