diff --git modules/system/system.module modules/system/system.module
index 12f3118..6a61336 100644
--- modules/system/system.module
+++ modules/system/system.module
@@ -2718,7 +2718,7 @@ function system_admin_compact_mode() {
  */
 function system_admin_compact_page($mode = 'off') {
   global $user;
-  user_save($user, array('admin_compact_mode' => ($mode == 'on')));
+  user_save($user, array('data' => array('admin_compact_mode' => ($mode == 'on'))));
   drupal_goto();
 }
 
diff --git modules/user/user.module modules/user/user.module
index 51e4db5..fc2b795 100644
--- modules/user/user.module
+++ modules/user/user.module
@@ -375,7 +375,10 @@ function user_save($account, $edit = array(), $category = 'account') {
     // Prepopulate $edit['data'] with the current value of $account->data.
     // Modules can add to or remove from this array in hook_user_presave().
     if (!empty($account->data)) {
-      $edit['data'] = !empty($edit['data']) ? array_merge($edit['data'], $account->data) : $account->data;
+      if (!is_array($account->data)) {
+        $account->data = unserialize($account->data);
+      }
+      $edit['data'] = !empty($edit['data']) ? array_merge($account->data, $edit['data']) : $account->data;
     }
     user_module_invoke('presave', $edit, $account, $category);
 
