after discussion with Dave, reverting back to using struct instead of shared_ptr for efficiency sake