Used shared pointers over unique pointers