bye-bye templates and shared_ptr :(