diff --git a/modules/user/user.module b/modules/user/user.module
index 47ac642..afdd987 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -584,11 +584,6 @@ function user_save($account, $edit = array(), $category = 'account') {
       // Make sure $account is properly initialized.
       $account->roles[DRUPAL_AUTHENTICATED_RID] = 'authenticated user';
 
-      field_attach_insert('user', $account);
-      $edit = (array) $account;
-      user_module_invoke('insert', $edit, $account, $category);
-      module_invoke_all('entity_insert', $account, 'user');
-
       // Save user roles.
       if (count($account->roles) > 1) {
         $query = db_insert('users_roles')->fields(array('uid', 'rid'));
@@ -602,6 +597,11 @@ function user_save($account, $edit = array(), $category = 'account') {
         }
         $query->execute();
       }
+
+      field_attach_insert('user', $account);
+      $edit = (array) $account;
+      user_module_invoke('insert', $edit, $account, $category);
+      module_invoke_all('entity_insert', $account, 'user');
     }
     // Clear internal properties.
     unset($account->is_new);
