Continue the re-factoring into an abstract class