not sure why this is an abstract class? It can be either an interface or better just use the implementation