get rid of shared_ptr and virtual functions
make test work