Index: modules/aggregator/aggregator.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/aggregator/aggregator.module,v
retrieving revision 1.374
diff -u -p -r1.374 aggregator.module
--- modules/aggregator/aggregator.module	15 Jan 2008 08:06:32 -0000	1.374
+++ modules/aggregator/aggregator.module	15 Feb 2008 16:30:53 -0000
@@ -277,7 +277,10 @@ function _aggregator_has_categories() {
  * Implementation of hook_perm().
  */
 function aggregator_perm() {
-  return array('administer news feeds', 'access news feeds');
+  return array(
+    'administer news feeds' => t('Add, edit or delete news feeds that are aggregated to your site.'),
+    'access news feeds' => t('View aggregated news feed items.'),
+  );
 }
 
 /**
Index: modules/block/block.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/block/block.module,v
retrieving revision 1.299
diff -u -p -r1.299 block.module
--- modules/block/block.module	3 Feb 2008 19:12:57 -0000	1.299
+++ modules/block/block.module	15 Feb 2008 16:30:53 -0000
@@ -110,7 +110,10 @@ function block_theme() {
  * Implementation of hook_perm().
  */
 function block_perm() {
-  return array('administer blocks', 'use PHP for block visibility');
+  return array(
+    'administer blocks' => t('Select which blocks are displayed, and arrange them on the page.'),
+    'use PHP for block visibility' => t('Enter PHP code in the field for block visibility settings. %warning', array('%warning' => t('Warning: Give to trusted roles only; this permission has security implications.'))),
+  );
 }
 
 /**
Index: modules/blog/blog.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blog/blog.module,v
retrieving revision 1.298
diff -u -p -r1.298 blog.module
--- modules/blog/blog.module	6 Feb 2008 19:38:27 -0000	1.298
+++ modules/blog/blog.module	15 Feb 2008 16:30:53 -0000
@@ -23,7 +23,7 @@ function blog_node_info() {
  * Implementation of hook_perm().
  */
 function blog_perm() {
-  return array('create blog entries', 'delete own blog entries', 'delete any blog entry', 'edit own blog entries', 'edit any blog entry');
+  return node_list_permissions('blog');
 }
 
 /**
@@ -33,11 +33,11 @@ function blog_access($op, $node, $accoun
   switch ($op) {
     case 'create':
       // Anonymous users cannot post even if they have the permission.
-      return user_access('create blog entries', $account) && $account->uid;
+      return user_access('create blog content', $account) && $account->uid;
     case 'update':
-      return user_access('edit any blog entry', $account) || (user_access('edit own blog entries', $account) && ($node->uid == $account->uid));
+      return user_access('edit any blog content', $account) || (user_access('edit own blog content', $account) && ($node->uid == $account->uid));
     case 'delete':
-      return user_access('delete any blog entry', $account) || (user_access('delete own blog entries', $account) && ($node->uid == $account->uid));
+      return user_access('delete any blog content', $account) || (user_access('delete own blog content', $account) && ($node->uid == $account->uid));
   }
 }
 
@@ -45,7 +45,7 @@ function blog_access($op, $node, $accoun
  * Implementation of hook_user().
  */
 function blog_user($type, &$edit, &$user) {
-  if ($type == 'view' && user_access('create blog entries', $user)) {
+  if ($type == 'view' && user_access('create blog content', $user)) {
     $user->content['summary']['blog'] =  array(
       '#type' => 'user_profile_item',
       '#title' => t('Blog'),
@@ -145,7 +145,7 @@ function blog_menu() {
     'page callback' => 'blog_page_user',
     'page arguments' => array(1),
     'access callback' => 'user_access',
-    'access arguments' => array('create blog entries', 1),
+    'access arguments' => array('create blog content', 1),
     'file' => 'blog.pages.inc',
   );
   $items['blog/%user/feed'] = array(
Index: modules/blogapi/blogapi.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/blogapi/blogapi.module,v
retrieving revision 1.116
diff -u -p -r1.116 blogapi.module
--- modules/blogapi/blogapi.module	12 Feb 2008 13:54:43 -0000	1.116
+++ modules/blogapi/blogapi.module	15 Feb 2008 16:30:54 -0000
@@ -24,7 +24,9 @@ function blogapi_help($path, $arg) {
  * Implementation of hook_perm().
  */
 function blogapi_perm() {
-  return array('administer content with blog api');
+  return array(
+    'administer content with blog api' => t('Manage website content from external tools.'),
+  );
 }
 
 /**
Index: modules/book/book.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/book/book.module,v
retrieving revision 1.456
diff -u -p -r1.456 book.module
--- modules/book/book.module	14 Feb 2008 18:32:14 -0000	1.456
+++ modules/book/book.module	15 Feb 2008 16:30:54 -0000
@@ -40,7 +40,12 @@ function book_theme() {
  * Implementation of hook_perm().
  */
 function book_perm() {
-  return array('add content to books', 'administer book outlines', 'create new books', 'access printer-friendly version');
+  return array(
+    'add content to books' => t('Add new content and child pages to books.'),
+    'administer book outlines' => t('Manage books through the administration panel.'),
+    'create new books' => t('Add new top-level books.'),
+    'access printer-friendly version' => t('View a book page and all of its sub-pages as a single document for ease of printing. Can be performance heavy.'),
+  );
 }
 
 /**
Index: modules/comment/comment.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/comment/comment.module,v
retrieving revision 1.618
diff -u -p -r1.618 comment.module
--- modules/comment/comment.module	6 Feb 2008 19:38:27 -0000	1.618
+++ modules/comment/comment.module	15 Feb 2008 16:30:56 -0000
@@ -271,7 +271,12 @@ function comment_node_type($op, $info) {
  * Implementation of hook_perm().
  */
 function comment_perm() {
-  return array('access comments', 'post comments', 'administer comments', 'post comments without approval');
+  return array(
+    'access comments' => t('View comments attached to content.'),
+    'post comments' => t('Add comments to content (approval required).'),
+    'post comments without approval' => t('Add comments to content (no approval required).'),
+    'administer comments' => t('Manage and approve comments, and configure comment administration settings.'),
+  );
 }
 
 /**
Index: modules/contact/contact.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/contact/contact.module,v
retrieving revision 1.103
diff -u -p -r1.103 contact.module
--- modules/contact/contact.module	16 Jan 2008 12:46:52 -0000	1.103
+++ modules/contact/contact.module	15 Feb 2008 16:30:56 -0000
@@ -36,8 +36,12 @@ function contact_help($path, $arg) {
  * Implementation of hook_perm
  */
 function contact_perm() {
-  return array('access site-wide contact form', 'administer site-wide contact form');
+  return array(
+    'access site-wide contact form' => t('Send feedback to administrators via e-mail using the site-wide contact form.'),
+    'administer site-wide contact form' => t('Configure site-wide contact form administration settings.'),
+  );
 }
+
 /**
  * Implementation of hook_menu().
  */
Index: modules/filter/filter.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v
retrieving revision 1.204
diff -u -p -r1.204 filter.module
--- modules/filter/filter.module	21 Jan 2008 15:08:24 -0000	1.204
+++ modules/filter/filter.module	15 Feb 2008 16:30:56 -0000
@@ -150,7 +150,9 @@ function filter_admin_format_title($form
  * Implementation of hook_perm().
  */
 function filter_perm() {
-  return array('administer filters');
+  return array(
+    'administer filters' => t('Manage input formats and filters, and select which roles may use them. %warning', array('%warning' => t('Warning: Give to trusted roles only; this permission has security implications.'))),
+  );
 }
 
 /**
Index: modules/forum/forum.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/forum/forum.module,v
retrieving revision 1.450
diff -u -p -r1.450 forum.module
--- modules/forum/forum.module	8 Feb 2008 03:10:32 -0000	1.450
+++ modules/forum/forum.module	15 Feb 2008 16:30:56 -0000
@@ -307,11 +307,11 @@ function forum_node_info() {
 function forum_access($op, $node, $account) {
   switch ($op) {
     case 'create':
-      return user_access('create forum topics', $account);
+      return user_access('create forum content', $account);
     case 'update':
-      return user_access('edit any forum topic', $account) || (user_access('edit own forum topics', $account) && ($account->uid == $node->uid));
+      return user_access('edit any forum content', $account) || (user_access('edit own forum content', $account) && ($account->uid == $node->uid));
     case 'delete':
-      return user_access('delete any forum topic', $account) || (user_access('delete own forum topics', $account) && ($account->uid == $node->uid));
+      return user_access('delete any forum content', $account) || (user_access('delete own forum content', $account) && ($account->uid == $node->uid));
   }
 }
 
@@ -319,7 +319,11 @@ function forum_access($op, $node, $accou
  * Implementation of hook_perm().
  */
 function forum_perm() {
-  return array('create forum topics', 'delete own forum topics', 'delete any forum topic', 'edit own forum topics', 'edit any forum topic', 'administer forums');
+  $perms = array(
+    'administer forums' => t('Manage forums and configure forum administration settings.'),
+  );
+  $perms += node_list_permissions('forum');
+  return $perms;
 }
 
 /**
Index: modules/locale/locale.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v
retrieving revision 1.213
diff -u -p -r1.213 locale.module
--- modules/locale/locale.module	6 Feb 2008 19:38:27 -0000	1.213
+++ modules/locale/locale.module	15 Feb 2008 16:30:56 -0000
@@ -186,7 +186,10 @@ function locale_inc_callback() {
  * Implementation of hook_perm().
  */
 function locale_perm() {
-  return array('administer languages', 'translate interface');
+  return array(
+    'administer languages' => t('Manage the languages in which the website content and interface text may be displayed.'),
+    'translate interface' => t('Translate the text of the website interface.'),
+  );
 }
 
 /**
Index: modules/menu/menu.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.module,v
retrieving revision 1.158
diff -u -p -r1.158 menu.module
--- modules/menu/menu.module	12 Feb 2008 13:43:21 -0000	1.158
+++ modules/menu/menu.module	15 Feb 2008 16:30:57 -0000
@@ -37,7 +37,9 @@ function menu_help($path, $arg) {
  * Implementation of hook_perm().
  */
 function menu_perm() {
-  return array('administer menu');
+  return array(
+    'administer menu' => t('Manage menus and menu items.'),
+  );
 }
 
 /**
Index: modules/node/node.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/node/node.module,v
retrieving revision 1.947
diff -u -p -r1.947 node.module
--- modules/node/node.module	3 Feb 2008 19:41:47 -0000	1.947
+++ modules/node/node.module	15 Feb 2008 16:30:58 -0000
@@ -1120,16 +1120,18 @@ function theme_node_log_message($log) {
  * Implementation of hook_perm().
  */
 function node_perm() {
-  $perms = array('administer content types', 'administer nodes', 'access content', 'view revisions', 'revert revisions', 'delete revisions');
+  $perms = array(
+    'administer content types' => t('Manage content types and content type administration settings.'),
+    'administer nodes' => t('Manage all website content, and bypass any content-related access control. %warning', array('%warning' => t('Warning: Give to trusted roles only; this permission has security implications.'))),
+    'access content' => t('View published content.'),
+    'view revisions' => t('View content revisions.'),
+    'revert revisions' => t('Replace content with an older revision.'),
+    'delete revisions' => t('Delete content revisions.'),
+  );
 
   foreach (node_get_types() as $type) {
     if ($type->module == 'node') {
-      $name = check_plain($type->type);
-      $perms[] = 'create '. $name .' content';
-      $perms[] = 'delete own '. $name .' content';
-      $perms[] = 'delete any '. $name .' content';
-      $perms[] = 'edit own '. $name .' content';
-      $perms[] = 'edit any '. $name .' content';
+      $perms += node_list_permissions($type);
     }
   }
 
@@ -2731,3 +2733,25 @@ function node_unpublish_by_keyword_actio
     }
   }
 }
+
+/**
+ * Helper function to generate standard node permission list for a given type.
+ *
+ * @param $type
+ *   The machine-readable name of the node type. 
+ * @return array
+ *   An array of permission names and descriptions.
+ */
+function node_list_permissions($type) {
+  $info = node_get_types('type', $type);
+  $type = check_plain($info->type);
+
+  // Build standard list of node permissions for this type.
+  $perms["create $type content"] = t('Create new %type_name content.', array('%type_name' => $info->name));
+  $perms["delete any $type content"] = t('Delete any %type_name content, regardless of its author.', array('%type_name' => $info->name));
+  $perms["delete own $type content"] = t('Delete %type_name content created by the user.', array('%type_name' => $info->name));
+  $perms["edit own $type content"] = t('Edit %type_name content created by the user.', array('%type_name' => $info->name));
+  $perms["edit any $type content"] = t('Edit any %type_name content, regardless of its author.', array('%type_name' => $info->name));
+
+  return $perms;
+}
Index: modules/path/path.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.module,v
retrieving revision 1.138
diff -u -p -r1.138 path.module
--- modules/path/path.module	3 Feb 2008 19:20:35 -0000	1.138
+++ modules/path/path.module	15 Feb 2008 16:30:58 -0000
@@ -206,7 +206,10 @@ function path_form_alter(&$form, $form_s
  * Implementation of hook_perm().
  */
 function path_perm() {
-  return array('create url aliases', 'administer url aliases');
+  return array(
+    'create url aliases' => t('Manage URL aliases on content.'),
+    'administer url aliases' => t('Manage URL aliases across the entire website.'),
+  );
 }
 
 /**
Index: modules/poll/poll.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/poll/poll.module,v
retrieving revision 1.263
diff -u -p -r1.263 poll.module
--- modules/poll/poll.module	15 Jan 2008 07:57:46 -0000	1.263
+++ modules/poll/poll.module	15 Feb 2008 16:30:58 -0000
@@ -54,7 +54,14 @@ function poll_theme() {
  * Implementation of hook_perm().
  */
 function poll_perm() {
-  return array('create poll content', 'delete own poll content', 'delete any poll content', 'edit any poll content', 'edit own poll content', 'vote on polls', 'cancel own vote', 'inspect all votes');
+  $perms = node_list_permissions('poll');
+  $perms += array(
+    'vote on polls' => t('Cast votes on polls.'),
+    'cancel own vote' => t('Change own votes.'),
+    'inspect all votes' => t('View voting results.'),
+  );
+
+  return $perms;
 }
 
 /**
Index: modules/search/search.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/search/search.module,v
retrieving revision 1.250
diff -u -p -r1.250 search.module
--- modules/search/search.module	8 Jan 2008 10:35:42 -0000	1.250
+++ modules/search/search.module	15 Feb 2008 16:30:59 -0000
@@ -141,7 +141,11 @@ function search_theme() {
  * Implementation of hook_perm().
  */
 function search_perm() {
-  return array('search content', 'use advanced search', 'administer search');
+  return array(
+    'search content' => t('Search website content.'),
+    'use advanced search' => t('Limit search results with additional criteria, such as specific content types. Could have performance implications.'),
+    'administer search' => t('Configure search administration settings.'),
+  );
 }
 
 /**
Index: modules/statistics/statistics.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/statistics/statistics.module,v
retrieving revision 1.272
diff -u -p -r1.272 statistics.module
--- modules/statistics/statistics.module	4 Jan 2008 09:31:48 -0000	1.272
+++ modules/statistics/statistics.module	15 Feb 2008 16:30:59 -0000
@@ -69,7 +69,10 @@ function statistics_exit() {
  * Implementation of hook_perm().
  */
 function statistics_perm() {
-  return array('access statistics', 'view post access counter');
+  return array(
+    'access statistics' => t('View content access statistics.'),
+    'view post access counter' => t('View the total number of times a piece of content has been accessed.'),
+  );
 }
 
 /**
Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.63
diff -u -p -r1.63 system.admin.inc
--- modules/system/system.admin.inc	4 Feb 2008 12:35:48 -0000	1.63
+++ modules/system/system.admin.inc	15 Feb 2008 16:31:00 -0000
@@ -82,18 +82,6 @@ function system_admin_menu_block_page() 
 }
 
 /**
- * Menu callback; Sets whether the admin menu is in compact mode or not.
- *
- * @param $mode
- *   Valid values are 'on' and 'off'.
- */
-function system_admin_compact_page($mode = 'off') {
-  global $user;
-  user_save($user, array('admin_compact_mode' => ($mode == 'on')));
-  drupal_goto('admin');
-}
-
-/**
  * Menu callback; prints a listing of admin tasks for each installed module.
  */
 function system_admin_by_module() {
@@ -1899,14 +1887,7 @@ function theme_admin_page($blocks) {
   }
 
   $output = '<div class="admin clear-block">';
-  $output .= '<div class="compact-link">';
-  if (system_admin_compact_mode()) {
-    $output .= l(t('Show descriptions'), 'admin/compact/off', array('title' => t('Expand layout to include descriptions.')));
-  }
-  else {
-    $output .= l(t('Hide descriptions'), 'admin/compact/on', array('title' => t('Compress layout by hiding descriptions.')));
-  }
-  $output .= '</div>';
+  $output .= theme('system_compact_link');
 
   foreach ($container as $id => $data) {
     $output .= '<div class="'. $id .' clear-block">';
Index: modules/system/system.install
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.install,v
retrieving revision 1.238
diff -u -p -r1.238 system.install
--- modules/system/system.install	30 Jan 2008 20:30:35 -0000	1.238
+++ modules/system/system.install	15 Feb 2008 16:31:01 -0000
@@ -2471,3 +2471,42 @@ function system_update_6047() {
  * @} End of "defgroup updates-5.x-to-6.x"
  * The next series of updates should start at 7000.
  */
+
+/**
+ * @defgroup updates-6.x-to-7.x System updates from 6.x to 7.x
+ * @{
+ */
+
+/**
+ * Rename blog and forum permissions to be consistent with other content types.
+ */
+function system_update_7000() {
+  $ret = array();
+  $result = db_query("SELECT rid, perm FROM {permission} ORDER BY rid");
+  while ($role = db_fetch_object($result)) {
+    $renamed_permission = preg_replace('/(?<=^|,\ )create\ blog\ entries(?=,|$)/', 'create blog content', $role->perm);
+    $renamed_permission = preg_replace('/(?<=^|,\ )edit\ own\ blog\ entries(?=,|$)/', 'edit own blog content', $role->perm);
+    $renamed_permission = preg_replace('/(?<=^|,\ )edit\ any\ blog\ entry(?=,|$)/', 'edit any blog content', $role->perm);
+    $renamed_permission = preg_replace('/(?<=^|,\ )delete\ own\ blog\ entries(?=,|$)/', 'delete own blog content', $role->perm);
+    $renamed_permission = preg_replace('/(?<=^|,\ )delete\ any\ blog\ entry(?=,|$)/', 'delete any blog content', $role->perm);
+
+    $renamed_permission = preg_replace('/(?<=^|,\ )create\ forum\ topics(?=,|$)/', 'create forum content', $role->perm);
+    $renamed_permission = preg_replace('/(?<=^|,\ )delete\ any\ forum\ topic(?=,|$)/', 'delete any forum content', $role->perm);
+    $renamed_permission = preg_replace('/(?<=^|,\ )delete\ own\ forum\ topics(?=,|$)/', 'delete own forum content', $role->perm);
+    $renamed_permission = preg_replace('/(?<=^|,\ )edit\ any\ forum\ topic(?=,|$)/', 'edit any forum content', $role->perm);
+    $renamed_permission = preg_replace('/(?<=^|,\ )edit\ own\ forum\ topics(?=,|$)/', 'edit own forum content', $role->perm);
+
+    if ($renamed_permission != $role->perm) {
+      $ret[] = update_sql("UPDATE {permission} SET perm = '$renamed_permission' WHERE rid = $role->rid");
+    }
+  }
+
+  return $ret;
+}
+
+/**
+ * @} End of "defgroup updates-6.x-to-7.x"
+ * The next series of updates should start at 8000.
+ */
+
+
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.590
diff -u -p -r1.590 system.module
--- modules/system/system.module	14 Feb 2008 18:34:21 -0000	1.590
+++ modules/system/system.module	15 Feb 2008 16:31:02 -0000
@@ -148,6 +148,7 @@ function system_theme() {
     'system_powered_by' => array(
       'arguments' => array('image_path' => NULL),
     ),
+    'system_compact_link' => array(),
   ));
 }
 
@@ -155,7 +156,14 @@ function system_theme() {
  * Implementation of hook_perm().
  */
 function system_perm() {
-  return array('administer site configuration', 'access administration pages', 'administer actions', 'access site reports', 'select different theme', 'administer files');
+  return array(
+    'administer site configuration' => t('Configure site-wide settings such as module or theme administration settings.'),
+    'access administration pages' => t('View the administration panel and browse the help system.'),
+    'administer actions' => t('Manage the actions defined for your site.'),
+    'access site reports' => t('View reports from system logs and other status information.'),
+    'select different theme' => t('Select a theme other than the default theme set by the site administrator.'),
+    'administer files' => t('Manage user-uploaded files.'),
+  );
 }
 
 /**
@@ -1159,6 +1167,18 @@ function system_admin_compact_mode() {
 }
 
 /**
+ * Menu callback; Sets whether the admin menu is in compact mode or not.
+ *
+ * @param $mode
+ *   Valid values are 'on' and 'off'.
+ */
+function system_admin_compact_page($mode = 'off') {
+  global $user;
+  user_save($user, array('admin_compact_mode' => ($mode == 'on')));
+  drupal_goto(drupal_get_destination());
+}
+
+/**
  * Generate a list of tasks offered by a specified module.
  *
  * @param $module
@@ -1875,3 +1895,21 @@ function theme_system_powered_by($image_
   $image = theme('image', $image_path, t('Powered by Drupal, an open source content management system'), t('Powered by Drupal, an open source content management system'));
   return l($image, 'http://drupal.org', array('html' => TRUE, 'absolute' => TRUE, 'external' => TRUE));
 }
+
+/**
+ * Display the link to show or hide inline help descriptions.
+ *
+ * @ingroup themeable
+ */
+function theme_system_compact_link() {
+  $output = '<div class="compact-link">';
+  if (system_admin_compact_mode()) {
+    $output .= l(t('Show descriptions'), 'admin/compact/off', array('title' => t('Expand layout to include descriptions.'), 'query' => drupal_get_destination()));
+  }
+  else {
+    $output .= l(t('Hide descriptions'), 'admin/compact/on', array('title' => t('Compress layout by hiding descriptions.'), 'query' => drupal_get_destination()));
+  }
+  $output .= '</div>';
+
+  return $output;
+}
Index: modules/taxonomy/taxonomy.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/taxonomy/taxonomy.module,v
retrieving revision 1.414
diff -u -p -r1.414 taxonomy.module
--- modules/taxonomy/taxonomy.module	27 Jan 2008 17:55:15 -0000	1.414
+++ modules/taxonomy/taxonomy.module	15 Feb 2008 16:31:02 -0000
@@ -10,7 +10,9 @@
  * Implementation of hook_perm().
  */
 function taxonomy_perm() {
-  return array('administer taxonomy');
+  return array(
+    'administer taxonomy' => t('Manage taxonomy vocabularies and terms.'),
+  );
 }
 
 /**
Index: modules/translation/translation.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/translation/translation.module,v
retrieving revision 1.23
diff -u -p -r1.23 translation.module
--- modules/translation/translation.module	28 Jan 2008 11:38:58 -0000	1.23
+++ modules/translation/translation.module	15 Feb 2008 16:31:03 -0000
@@ -86,7 +86,9 @@ function _translation_tab_access($node) 
  * Implementation of hook_perm().
  */
 function translation_perm() {
-  return array('translate content');
+  return array(
+    'translate content' => t('Translate website content.'),
+  );
 }
 
 /**
Index: modules/upload/upload.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/upload/upload.module,v
retrieving revision 1.198
diff -u -p -r1.198 upload.module
--- modules/upload/upload.module	12 Feb 2008 13:49:01 -0000	1.198
+++ modules/upload/upload.module	15 Feb 2008 16:31:03 -0000
@@ -43,7 +43,10 @@ function upload_theme() {
  * Implementation of hook_perm().
  */
 function upload_perm() {
-  return array('upload files', 'view uploaded files');
+  return array(
+    'upload files' => t('Attach images and other files to content.'), 
+    'view uploaded files' => t('View and download files attached to content.'),
+  );
 }
 
 /**
Index: modules/user/user.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.admin.inc,v
retrieving revision 1.18
diff -u -p -r1.18 user.admin.inc
--- modules/user/user.admin.inc	16 Jan 2008 22:54:41 -0000	1.18
+++ modules/user/user.admin.inc	15 Feb 2008 16:31:03 -0000
@@ -516,15 +516,25 @@ function user_admin_perm($form_state, $r
 
   // Render role/permission overview:
   $options = array();
+  $hide_descriptions = !system_admin_compact_mode();
   foreach (module_list(FALSE, FALSE, TRUE) as $module) {
     if ($permissions = module_invoke($module, 'perm')) {
       $form['permission'][] = array(
         '#value' => $module,
       );
-      asort($permissions);
-      foreach ($permissions as $perm) {
+      ksort($permissions);
+      foreach ($permissions as $perm => $description) {
+        // Account for permissions lacking a description.
+        if (is_int($perm)) {
+          $perm = $description;
+          $description = NULL;
+        }
         $options[$perm] = '';
-        $form['permission'][$perm] = array('#value' => t($perm));
+        $form['permission'][$perm] = array(
+          '#type' => 'item',
+          '#value' => t($perm),
+          '#description' => $hide_descriptions ? $description : NULL,
+        );
         foreach ($role_names as $rid => $name) {
           // Builds arrays for checked boxes for each role
           if (strpos($role_permissions[$rid], $perm .',') !== FALSE) {
@@ -582,7 +592,11 @@ function theme_user_admin_perm($form) {
         $row[] = array('data' => t('@module module', array('@module' => drupal_render($form['permission'][$key]))), 'class' => 'module', 'id' => 'module-'. $form['permission'][$key]['#value'], 'colspan' => count($form['role_names']) + 1);
       }
       else {
-        $row[] = array('data' => drupal_render($form['permission'][$key]), 'class' => 'permission');
+        // Permission row.
+        $row[] = array(
+          'data' => drupal_render($form['permission'][$key]),
+          'class' => 'permission',
+        );
         foreach (element_children($form['checkboxes']) as $rid) {
           if (is_array($form['checkboxes'][$rid])) {
             $row[] = array('data' => drupal_render($form['checkboxes'][$rid][$key]), 'class' => 'checkbox', 'title' => $roles[$rid] .' : '. t($key));
@@ -598,7 +612,8 @@ function theme_user_admin_perm($form) {
       $header[] = array('data' => drupal_render($form['role_names'][$rid]), 'class' => 'checkbox');
     }
   }
-  $output = theme('table', $header, $rows, array('id' => 'permissions'));
+  $output = theme('system_compact_link');
+  $output .= theme('table', $header, $rows, array('id' => 'permissions'));
   $output .= drupal_render($form);
   return $output;
 }
Index: modules/user/user.css
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.css,v
retrieving revision 1.7
diff -u -p -r1.7 user.css
--- modules/user/user.css	21 Jun 2007 04:38:41 -0000	1.7
+++ modules/user/user.css	15 Feb 2008 16:31:03 -0000
@@ -6,6 +6,9 @@
 #permissions td.permission {
   padding-left: 1.5em; /* LTR */
 }
+#permissions tr.odd .form-item, tr.even .form-item {
+  white-space: normal;
+}
 #access-rules .access-type, #access-rules .rule-type {
   margin-right: 1em; /* LTR */
   float: left; /* LTR */
Index: modules/user/user.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/user/user.module,v
retrieving revision 1.893
diff -u -p -r1.893 user.module
--- modules/user/user.module	6 Feb 2008 19:38:28 -0000	1.893
+++ modules/user/user.module	15 Feb 2008 16:31:04 -0000
@@ -541,7 +541,12 @@ function user_fields() {
  * Implementation of hook_perm().
  */
 function user_perm() {
-  return array('administer permissions', 'administer users', 'access user profiles', 'change own username');
+   return array(
+     'administer permissions' => t('Manage the permissions assigned to user roles. %warning', array('%warning' => t('Warning: Give to trusted roles only; this permission has security implications.'))),
+     'administer users' => t('Manage or block users, and manage their role assignments.'),  
+     'access user profiles' => t('View profiles of users on the site, which may contain personal information.'), 
+     'change own username' => t('Select a different username.'),
+   );
 }
 
 /**
