use unique_ptr... we don't need a shared pointer here