trying to work more with smart pointers, refactored a few things