=== modified file 'includes/form.inc'
--- includes/form.inc	
+++ includes/form.inc	
@@ -271,7 +271,16 @@ function _form_builder($form_id, $form) 
         }
       }
       if (!isset($form['#value'])) {
-        $form['#value'] = $form['#default_value'];
+        if ($form['#type'] == 'checkboxes') {
+          $value = array();
+          foreach ($form['#default_value'] as $key) {
+            $value[$key] = 1;
+          }
+          $form['#value'] = $value;
+        }
+        else {
+          $form['#value'] = $form['#default_value'];
+        }
       }
     }
     if (isset($form['#form_submitted'])) {
@@ -667,7 +676,7 @@ function expand_checkboxes($element) {
     }
     foreach ($element['#options'] as $key => $choice) {
       if (!isset($element[$key])) {
-        $element[$key] = array('#type' => 'checkbox', '#processed' => TRUE, '#title' => $choice, '#default_value' => in_array($key, $value), '#attributes' => $element['#attributes']);
+        $element[$key] = array('#type' => 'checkbox', '#processed' => TRUE, '#title' => $choice, '#default_value' => isset($value[$key]), '#attributes' => $element['#attributes']);
       }
     }
   }
=== modified file 'modules/user.module'
--- modules/user.module	
+++ modules/user.module	
@@ -132,7 +132,7 @@ function user_save($account, $array = ar
     if (is_array($array['roles'])) {
       db_query('DELETE FROM {users_roles} WHERE uid = %d', $account->uid);
 
-      foreach (array_keys($array['roles']) as $rid) {
+      foreach (array_keys(array_filter($array['roles'])) as $rid) {
         db_query('INSERT INTO {users_roles} (uid, rid) VALUES (%d, %d)', $account->uid, $rid);
       }
     }
