diff --git a/resources/user_resource.inc b/resources/user_resource.inc
index e84eb3d..bc62bd0 100644
--- a/resources/user_resource.inc
+++ b/resources/user_resource.inc
@@ -281,10 +281,11 @@ function _user_resource_update($uid, $account) {
 
   // If a profile category was passed in, use it. Otherwise default
   // to 'account' (for saving core user data.)
-  $category = 'account';
+  $category = '';
   if (isset($account['category'])) {
     $category = $account['category'];
     unset($account['category']);
+    $form_state['values']['_category'] = $category;
   }
 
   // Drop any passed in values into the $account var. Anything
@@ -294,7 +295,6 @@ function _user_resource_update($uid, $account) {
   }
 
   $form_state['values']['op'] = 'Save';
-  $form_state['values']['_category'] = $category;
   $form_state['values']['_account'] = (object)$account;
   if (isset($account['pass'])) {
     $form_state['values']['pass'] = array(
@@ -303,11 +303,26 @@ function _user_resource_update($uid, $account) {
     );
   }
 
-  $ret = drupal_execute('user_profile_form', $form_state, $user, $category);
-
-  // Error if needed.
-  if ($errors = form_get_errors()) {
-    return services_error(implode(" ", $errors), 406, array('form_errors' => $errors));
+  // If no category was specified, update all categories.
+  if (empty($category)) {
+    // taken/adapted from _user_categories in user.module
+    // Only variables can be passed by reference workaround.
+    $null = NULL;
+    foreach (module_implements('user') as $module) {
+      $hook_user_impl = $module .'_user';
+      // $null and $account need to be passed by reference.
+      if (function_exists($hook_user_impl) && ($categories_data = $hook_user_impl('categories', $null, $account, ''))) {
+        foreach ($categories_data as $category_data) {
+          $category_list[] = $category_data['name'];
+        }
+      }
+    }
+    foreach($category_list as $category_name) {
+      _services_submit_user_data($user, $form_state, $category_name);
+    }
+  }
+  else {
+    _services_submit_user_data($user, $form_state, $category);
   }
 
   services_remove_user_data($account);
@@ -316,6 +331,21 @@ function _user_resource_update($uid, $account) {
 }
 
 /**
+ * submit user profile data for a single category
+ */
+
+function _services_submit_user_data($user, $form_state, $category) {
+  $ret = drupal_execute('user_profile_form', $form_state, $user, $category);
+
+  // Error if needed.
+  if ($errors = form_get_errors()) {
+    services_error(implode(" ", $errors), 406, array('form_errors' => $errors));
+  }
+  return $ret;
+}
+
+
+/**
  * Delete a user.
  *
  * @param $uid
