Added abstract generic base class