Interim commit
Back out indirection
All virtual functions replaced with template impl