#160 Improve code by replacing concrete base classes with interfaces