diff --git a/app/services/user_updater.rb b/app/services/user_updater.rb
index 7130c2d19..40801d664 100644
--- a/app/services/user_updater.rb
+++ b/app/services/user_updater.rb
@@ -1,27 +1,33 @@
 class UserUpdater
+
+  CATEGORY_IDS = {
+    watched_category_ids: :watching,
+    tracked_category_ids: :tracking,
+    muted_category_ids: :muted
+  }
+
+  USER_ATTR =   [
+      :email_digests,
+      :email_always,
+      :email_direct,
+      :email_private_messages,
+      :external_links_in_new_tab,
+      :enable_quoting,
+      :dynamic_favicon,
+      :watch_new_topics
+  ]
+
   def initialize(actor, user)
     @user = user
     @guardian = Guardian.new(actor)
   end
 
   def update(attributes = {})
-    user.website = format_url(attributes[:website]) || user.website
+    user.website = format_url(attributes.fetch(:website) { user.website })
 
-    user.bio_raw = attributes[:bio_raw] || user.bio_raw
-    user.name = attributes[:name] || user.name
-    user.digest_after_days = attributes[:digest_after_days] || user.digest_after_days
-
-    if ids = attributes[:watched_category_ids]
-      CategoryUser.batch_set(user, :watching, ids)
-    end
-
-    if ids = attributes[:tracked_category_ids]
-      CategoryUser.batch_set(user, :tracking, ids)
-    end
-
-    if ids = attributes[:muted_category_ids]
-      CategoryUser.batch_set(user, :muted, ids)
-    end
+    user.bio_raw = attributes.fetch(:bio_raw) { user.bio_raw }
+    user.name = attributes.fetch(:name) { user.name }
+    user.digest_after_days = attributes.fetch(:digest_after_days) { user.digest_after_days }
 
     if attributes[:auto_track_topics_after_msecs]
       user.auto_track_topics_after_msecs = attributes[:auto_track_topics_after_msecs].to_i
@@ -32,19 +38,16 @@ class UserUpdater
     end
 
     if guardian.can_grant_title?(user)
-      user.title = attributes[:title] || user.title
+      user.title = attributes.fetch(:title) { user.title }
     end
 
-    [
-      :email_digests,
-      :email_always,
-      :email_direct,
-      :email_private_messages,
-      :external_links_in_new_tab,
-      :enable_quoting,
-      :dynamic_favicon,
-      :watch_new_topics
-    ].each do |attribute|
+    CATEGORY_IDS.each do |attribute, level|
+      if ids = attributes[attribute]
+        CategoryUser.batch_set(user, level, ids)
+      end
+    end
+
+    USER_ATTR.each do |attribute|
       if attributes[attribute].present?
         user.send("#{attribute.to_s}=", attributes[attribute] == 'true')
       end