diff --git a/mongodb_session/mongodb_session.module b/mongodb_session/mongodb_session.module
index aaaee70..e0d53f7 100644
--- a/mongodb_session/mongodb_session.module
+++ b/mongodb_session/mongodb_session.module
@@ -14,6 +14,42 @@
   unset($groups['Session']);
 }
 
+
+/**
+ * Implements hook_user_update().
+ */
+function mongodb_session_user_update($edit, $account) {
+  // Update field values for changed values of the user.
+  $roles = _mongodb_session_get_roles($account);
+  // If mongodb_field_storage is enabled it will take care of creating
+  // initial user entry just add roles to it.
+  if (module_exists('mongodb_field_storage')) {
+    $save = array(
+      '$set' => array('roles' => $roles)
+    );
+  }
+  else {
+    $save = array(
+      '$set' => (array) $account + array(
+        '_bundle' => 'user',
+        'roles' => $roles,
+      ),
+    );
+    foreach (array('uid', 'created', 'access', 'login', 'status', 'picture') as $key) {
+      $save['$set'][$key] = (int) $save['$set'][$key];
+    }
+  }
+  mongodb_collection('fields_current', 'user')->update(array('_id' => (int) $account->uid), $save, array('upsert' => TRUE));
+  return $roles;
+}
+
+/**
+ * Implements hook_user_insert().
+ */
+function mongodb_session_user_insert($edit, $account) {
+  return mongodb_session_user_update($edit, $account);
+}
+
 /**
  * Implements hook_user_login().
  */
@@ -23,7 +59,7 @@
       'login' => (int) $account->login,
     ),
   );
-  mongodb_collection('fields_current', 'user')->update(array('_id' => (int) $account->uid), $save, array('w' => 0);
+  mongodb_collection('fields_current', 'user')->update(array('_id' => (int) $account->uid), $save, array('w' => 0));
 }
 
 function _mongodb_session_get_roles($account) {