Added abstract class to reduce repeative code