if returning the entire object is good for all scenarios, perhaps we can fix factory too in future :)