Switched raw pointers to smart pointers Streamlined object model Removed unused classes Added more error handling