Feature/add base abstract class for implementation specific classes