Figured this out. You need a second variable for the profile2_load_by_user($obj_user) function. What you currently get back is an array of profiles, e.g 'candidate' => Profile object, 'person' => Profile object, 'student' => Profile object You need to specify the profile in the call and then you just get a profile object back. Then you can save the profile as it is an Profile object. e.g. profile2_load_by_user($obj_user,'candidate'); Hope this helps