diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb
index 6ce1ceac6..4dd706cbb 100644
--- a/app/controllers/users_controller.rb
+++ b/app/controllers/users_controller.rb
@@ -503,15 +503,18 @@ class UsersController < ApplicationController
   def pick_avatar
     user = fetch_user_from_params
     guardian.ensure_can_edit!(user)
+
     upload_id = params[:upload_id]
 
     user.uploaded_avatar_id = upload_id
 
     # ensure we associate the custom avatar properly
-    if upload_id && !user.user_avatar.contains_upload?(upload_id)
+    if upload_id && user.user_avatar.custom_upload_id != upload_id
       user.user_avatar.custom_upload_id = upload_id
     end
+
     user.save!
+    user.user_avatar.save!
 
     render json: success_json
   end
diff --git a/spec/controllers/users_controller_spec.rb b/spec/controllers/users_controller_spec.rb
index 2735ef441..5388bb1f0 100644
--- a/spec/controllers/users_controller_spec.rb
+++ b/spec/controllers/users_controller_spec.rb
@@ -1323,10 +1323,12 @@ describe UsersController do
       it 'it successful' do
         xhr :put, :pick_avatar, username: user.username, upload_id: 111
         expect(user.reload.uploaded_avatar_id).to eq(111)
+        expect(user.user_avatar.reload.custom_upload_id).to eq(111)
         expect(response).to be_success
 
         xhr :put, :pick_avatar, username: user.username
         expect(user.reload.uploaded_avatar_id).to eq(nil)
+        expect(user.user_avatar.reload.custom_upload_id).to eq(111)
         expect(response).to be_success
       end