Updated some classes to work with smart pointers but they are not totally flushed out yet