Index: modules/system/admin.css
===================================================================
--- modules/system/admin.css	(revision 1)
+++ modules/system/admin.css	(working copy)
@@ -51,6 +51,15 @@
   font-size: 0.9em;
   color: #444;
 }
+div.admin-usage {
+  font-size: 0.9em;
+  color: #939;
+}
+div.admin-usage ul {
+  padding: 0 0 0 1em;
+  margin: 0 0 0 1em;
+  line-height: 95%;
+}
 span.admin-disabled {
   color: #800;
 }
Index: modules/system/system.admin.inc
===================================================================
--- modules/system/system.admin.inc	(revision 1)
+++ modules/system/system.admin.inc	(working copy)
@@ -608,6 +608,9 @@
   // Iterate through each of the modules.
   foreach ($files as $filename => $module) {
     $extra = array();
+    if ($usage = module_invoke($filename, 'usage')) {
+      $extra['usage_aspects'] = $usage;
+    }
     $extra['enabled'] = (bool) $module->status;
     // If this module requires other modules, add them to the array.
     foreach ($module->requires as $requires => $v) {
@@ -685,6 +688,7 @@
 function _system_modules_build_row($info, $extra) {
   // Add in the defaults.
   $extra += array(
+    'usage_aspects' => array(),
     'requires' => array(),
     'required_by' => array(),
     'disabled' => FALSE,
@@ -754,6 +758,25 @@
       '#markup' => $extra['help'],
     );
   }
+
+  // Summarize module usage information.
+  if (count($extra['usage_aspects'])) {
+    $usage_verdict = USAGE_UNUSED;
+    foreach($extra['usage_aspects'] as $aspect) {
+      if ($aspect['usage'] === USAGE_USED) {
+        $usage_verdict = USAGE_USED;
+      }
+    }
+    $form['usage'] = array(
+      '#usage_aspects' => $extra['usage_aspects'],
+      '#usage_verdict' => $usage_verdict,
+    );
+  }
+  else {
+    // If there's no usage information, play it safe.
+    $form['usage'] = array('#usage_verdict' => USAGE_USED);
+  }
+
   return $form;
 }
 
@@ -2033,7 +2056,10 @@
     if (isset($module['enable']['#id'])) {
       $label .= ' for="' . $module['enable']['#id'] . '"';
     }
-    $row[] = $label . '><strong>' . drupal_render($module['name']) . '</strong></label>';
+    if ($module['enable']['#default_value'] && $module['usage']['#usage_verdict'] === USAGE_USED) {
+      $label .= ' style="font-weight: bold"';
+    }
+    $row[] = $label . '>' . drupal_render($module['name']) . '</label>';
     $row[] = drupal_render($module['version']);
     $description = '';
     // If we have help, it becomes the first part
@@ -2049,6 +2075,23 @@
     if ($module['#required_by']) {
       $description .= '<div class="admin-requirements">' . t('Required by: !module-list', array('!module-list' => implode(', ', $module['#required_by']))) . '</div>';
     }
+
+    if ($module['enable']['#default_value']) {
+      $description .= '<div class="admin-usage">';
+      $description .= ($module['usage']['#usage_verdict'] === USAGE_USED) ? t('This module is in use') : t('This module is unused');
+      if (isset($module['usage']['#usage_aspects'])) {
+        $description .= ':<ul>';
+        foreach($module['usage']['#usage_aspects'] as $aspect) {
+          $description .= '<li>' . $aspect['description'] . '</li>';
+        }
+        $description .= '</ul>';
+      }
+      else {
+        $description .= '.';
+      }
+      $description .= '</div>';
+    }
+
     $row[] = array('data' => $description, 'class' => 'description');
     $rows[] = $row;
   }
Index: modules/system/system.module
===================================================================
--- modules/system/system.module	(revision 1)
+++ modules/system/system.module	(working copy)
@@ -56,7 +56,14 @@
  */
 define('DRUPAL_USER_TIMEZONE_SELECT', 2);
 
+
 /**
+ * Module Usage Information
+ */
+define('USAGE_UNUSED', 0);
+define('USAGE_USED', 1);
+
+/**
  * Implementation of hook_help().
  */
 function system_help($path, $arg) {
Index: modules/comment/comment.install
===================================================================
--- modules/comment/comment.install	(revision 1)
+++ modules/comment/comment.install	(working copy)
@@ -307,3 +307,26 @@
 
   return $schema;
 }
+
+/**
+ * Implementation of hook_usage().
+*/
+function comment_usage() {
+  $aspects = array();
+
+  // The Comment module is 'in use' if:
+  //    - there are rows in {comment}
+  //        (i.e., comments have actually been submitted, regardless of moderation)
+  //    - or there are rows in {node} for which the comment field is COMMENT_NODE_OPEN
+  //        (i.e., nodes exist upon which comments could be submitted)
+
+  $comments = db_query('SELECT COUNT(*) FROM {comment}')->fetchField();
+  $aspects['comments']['description'] = format_plural($comments,'1 comment','@count comments');
+  $aspects['comments']['usage'] = $comments ? USAGE_USED : USAGE_UNUSED;
+
+  $comments_allowed_on_nodes = db_query('SELECT COUNT(*) FROM {node} WHERE comment = :open', array(':open' => COMMENT_NODE_OPEN))->fetchField();
+  $aspects['comments_allowed_on_nodes']['description'] = format_plural($comments_allowed_on_nodes,'1 commentable node','@count commentable nodes');
+  $aspects['comments_allowed_on_nodes']['usage'] = $comments_allowed_on_nodes ? USAGE_USED : USAGE_UNUSED;
+
+  return $aspects;
+}
