switch to unqie_ptrs for correctness (must check completion first before instantiating objects)