diff --git a/modules/blog.module b/modules/blog.module
index 6ce8ffd32638041729eef36a722e20dcdd82770e..bed0e311cc1c7b1f5d50fdf25a3a554a66f0ec57 100644
--- a/modules/blog.module
+++ b/modules/blog.module
@@ -42,7 +42,7 @@ function blog_access($op, $node) {
  */
 function blog_user($type, &$edit, &$user) {
   if ($type == 'view' && user_access('edit own blog', $user)) {
-    return array(t('History') => form_item(t('Blog'), l(t('view recent blog entries'), "blog/$user->uid", array('title' => t("Read %username's latest blog entries.", array('%username' => $user->name))))));
+    return array(t('History') => array('blog' => form_item(t('Blog'), l(t('view recent blog entries'), "blog/$user->uid", array('title' => t("Read %username's latest blog entries.", array('%username' => $user->name)))))));
   }
 }
 
diff --git a/modules/blog/blog.module b/modules/blog/blog.module
index 6ce8ffd32638041729eef36a722e20dcdd82770e..bed0e311cc1c7b1f5d50fdf25a3a554a66f0ec57 100644
--- a/modules/blog/blog.module
+++ b/modules/blog/blog.module
@@ -42,7 +42,7 @@ function blog_access($op, $node) {
  */
 function blog_user($type, &$edit, &$user) {
   if ($type == 'view' && user_access('edit own blog', $user)) {
-    return array(t('History') => form_item(t('Blog'), l(t('view recent blog entries'), "blog/$user->uid", array('title' => t("Read %username's latest blog entries.", array('%username' => $user->name))))));
+    return array(t('History') => array('blog' => form_item(t('Blog'), l(t('view recent blog entries'), "blog/$user->uid", array('title' => t("Read %username's latest blog entries.", array('%username' => $user->name)))))));
   }
 }
 
diff --git a/modules/profile.module b/modules/profile.module
index 60b0159c8cd6c52fadaa6831420770ff488ec037..a7c4b5b80cf3c7fde515895be8d4f46dcc9d3bac 100644
--- a/modules/profile.module
+++ b/modules/profile.module
@@ -297,7 +297,7 @@ function profile_view_profile($user) {
     if ($value = profile_view_field($user, $field)) {
       $description = ($field->visibility == PROFILE_PRIVATE) ? t('The content of this field is private and only visible to yourself.') : '';
       $title = ($field->type != 'checkbox') ? check_plain($field->title) : '';
-      $fields[$field->category] .= form_item($title, $value, $description);
+      $fields[$field->category][$field->name] = form_item($title, $value, $description);
     }
   }
 
diff --git a/modules/profile/profile.module b/modules/profile/profile.module
index 60b0159c8cd6c52fadaa6831420770ff488ec037..a7c4b5b80cf3c7fde515895be8d4f46dcc9d3bac 100644
--- a/modules/profile/profile.module
+++ b/modules/profile/profile.module
@@ -297,7 +297,7 @@ function profile_view_profile($user) {
     if ($value = profile_view_field($user, $field)) {
       $description = ($field->visibility == PROFILE_PRIVATE) ? t('The content of this field is private and only visible to yourself.') : '';
       $title = ($field->type != 'checkbox') ? check_plain($field->title) : '';
-      $fields[$field->category] .= form_item($title, $value, $description);
+      $fields[$field->category][$field->name] = form_item($title, $value, $description);
     }
   }
 
diff --git a/modules/user.module b/modules/user.module
index 1637928d4a18af8e3145a8a5817321b9b6cd3ecd..147c4821e0ed69c98db7ca7803e3c65b97029596 100644
--- a/modules/user.module
+++ b/modules/user.module
@@ -467,7 +467,7 @@ function user_search($op = 'search', $keys = null) {
  */
 function user_user($type, &$edit, &$user, $category = NULL) {
   if ($type == 'view') {
-    return array(t('History') => form_item(t('Member for'), format_interval(time() - $user->created)));
+    return array(t('History') => array('history'=> form_item(t('Member for'), format_interval(time() - $user->created))));
   }
 
   if ($type == 'form' && $category == 'account') {
@@ -618,10 +618,21 @@ function theme_user_picture($account) {
   }
 }
 
+/**
+ * Theme a user page
+ * @param $account the user object
+ * @param $fields an mulidimensional array for the fields, in the form of
+ *                array('category1'=> array('name1' => field1, 'name2' => field2),
+ *                      'category2'=> array('name3' => field3, 'name4' => field4, 'name5' => field5),
+ *                      .. etc);
+ *
+ * @ingroup themeable
+ */
 function theme_user_profile($account, $fields) {
   $output = "<div class=\"profile\">\n";
   $output .= theme('user_picture', $account);
   foreach ($fields as $category => $value) {
+    $value = implode('', $value);
     $output .= theme('box', $category, $value);
   }
   $output .= "</div>\n";
@@ -1281,11 +1292,10 @@ function user_view($uid = 0) {
     foreach (module_list() as $module) {
       if ($data = module_invoke($module, 'user', 'view', '', $account)) {
         foreach ($data as $category => $content) {
-          $fields[$category] .= $content;
+          $fields[$category] = $content;
         }
       }
     }
-
     drupal_set_title($account->name);
     return theme('user_profile', $account, $fields);
   }
diff --git a/modules/user/user.module b/modules/user/user.module
index 1637928d4a18af8e3145a8a5817321b9b6cd3ecd..147c4821e0ed69c98db7ca7803e3c65b97029596 100644
--- a/modules/user/user.module
+++ b/modules/user/user.module
@@ -467,7 +467,7 @@ function user_search($op = 'search', $keys = null) {
  */
 function user_user($type, &$edit, &$user, $category = NULL) {
   if ($type == 'view') {
-    return array(t('History') => form_item(t('Member for'), format_interval(time() - $user->created)));
+    return array(t('History') => array('history'=> form_item(t('Member for'), format_interval(time() - $user->created))));
   }
 
   if ($type == 'form' && $category == 'account') {
@@ -618,10 +618,21 @@ function theme_user_picture($account) {
   }
 }
 
+/**
+ * Theme a user page
+ * @param $account the user object
+ * @param $fields an mulidimensional array for the fields, in the form of
+ *                array('category1'=> array('name1' => field1, 'name2' => field2),
+ *                      'category2'=> array('name3' => field3, 'name4' => field4, 'name5' => field5),
+ *                      .. etc);
+ *
+ * @ingroup themeable
+ */
 function theme_user_profile($account, $fields) {
   $output = "<div class=\"profile\">\n";
   $output .= theme('user_picture', $account);
   foreach ($fields as $category => $value) {
+    $value = implode('', $value);
     $output .= theme('box', $category, $value);
   }
   $output .= "</div>\n";
@@ -1281,11 +1292,10 @@ function user_view($uid = 0) {
     foreach (module_list() as $module) {
       if ($data = module_invoke($module, 'user', 'view', '', $account)) {
         foreach ($data as $category => $content) {
-          $fields[$category] .= $content;
+          $fields[$category] = $content;
         }
       }
     }
-
     drupal_set_title($account->name);
     return theme('user_profile', $account, $fields);
   }