Added abstract bases and templates