Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.267
diff -u -p -r1.267 system.admin.inc
--- modules/system/system.admin.inc	13 Apr 2010 15:23:03 -0000	1.267
+++ modules/system/system.admin.inc	20 Apr 2010 19:04:36 -0000
@@ -874,10 +874,10 @@ function system_modules($form, $form_sta
           $extra['disabled'] = TRUE;
         }
         elseif ($files[$requires]->status) {
-          $extra['requires'][$requires] = t('@module (<span class="admin-enabled">enabled</span>)', array('@module' => $requires_name));
+          $extra['requires'][$requires] = t('<a href="#@fragment">@module</a> (<span class="admin-enabled">enabled</span>)', array('@module' => $requires_name, '@fragment' => 'module-row-' . $requires));
         }
         else {
-          $extra['requires'][$requires] = t('@module (<span class="admin-disabled">disabled</span>)', array('@module' => $requires_name));
+          $extra['requires'][$requires] = t('<a href="#@fragment">@module</a> (<span class="admin-disabled">disabled</span>)', array('@module' => $requires_name, '@fragment' => 'module-row-' . $requires));
         }
       }
     }
@@ -923,11 +923,11 @@ function system_modules($form, $form_sta
       // Hidden modules are unset already.
       if (isset($files[$required_by])) {
         if ($files[$required_by]->status == 1) {
-          $extra['required_by'][] = t('@module (<span class="admin-enabled">enabled</span>)', array('@module' => $files[$required_by]->info['name']));
+          $extra['required_by'][] = t('<a href="#@fragment">@module</a> (<span class="admin-enabled">enabled</span>)', array('@module' => $files[$required_by]->info['name'], '@fragment' => 'module-row-' . $required_by));
           $extra['disabled'] = TRUE;
         }
         else {
-          $extra['required_by'][] = t('@module (<span class="admin-disabled">disabled</span>)', array('@module' => $files[$required_by]->info['name']));
+          $extra['required_by'][] = t('<a href="#@fragment">@module</a> (<span class="admin-disabled">disabled</span>)', array('@module' => $files[$required_by]->info['name'], '@fragment' => 'module-row-' . $required_by));
         }
       }
     }
@@ -950,6 +950,8 @@ function system_modules($form, $form_sta
     );
   }
 
+  drupal_add_js(drupal_get_path('module', 'system') . '/system.js');
+
   $form['actions'] = array('#type' => 'container', '#attributes' => array('class' => array('form-actions')));
   $form['actions']['submit'] = array(
     '#type' => 'submit',
@@ -2508,6 +2510,7 @@ function theme_system_modules_fieldset($
   foreach (element_children($form) as $key) {
     // Stick it into $module for easier accessing.
     $module = $form[$key];
+    $name = $key;
     $row = array();
     unset($module['enable']['#title']);
     $row[] = array('class' => array('checkbox'), 'data' => drupal_render($module['enable']));
@@ -2530,7 +2533,7 @@ function theme_system_modules_fieldset($
     foreach (array('help', 'permissions', 'configure') as $key) {
       $row[] = array('data' => drupal_render($module['links'][$key]), 'class' => array($key));
     }
-    $rows[] = $row;
+    $rows[] = array('data' => $row, 'id' => 'module-row-' . $name);
   }
 
   return theme('table', array('header' => $form['#header'], 'rows' => $rows));
Index: modules/system/system.js
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.js,v
retrieving revision 1.40
diff -u -p -r1.40 system.js
--- modules/system/system.js	30 Jan 2010 00:29:10 -0000	1.40
+++ modules/system/system.js	20 Apr 2010 19:04:36 -0000
@@ -222,4 +222,22 @@ Drupal.behaviors.machineReadableValue = 
   }
 };
 
+/**
+ * Adjust the internal links on the modules page to account for stick table
+ * headers and/or the toolbar.
+ */
+Drupal.behaviors.systemModuleRequirementsLinks = {
+  attach: function (context, settings) {
+    $('#system-modules div.admin-requirements a').once('module-requirements').click(function() {
+      var row = $($(this).attr('href'));
+      window.scrollTo(window.scrollX, $(row).offset().top - eval(Drupal.settings.tableHeaderOffset)() - $('#system-modules .sticky-header').height());
+      row.addClass('selected');
+      setTimeout(function() {
+        row.removeClass('selected');
+      }, 1000);
+      return false;
+    });
+  }
+};
+
 })(jQuery);
