Add some abstract classes for code reuse