diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index dcc289a..1418863 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -832,10 +832,10 @@ function system_modules($form, $form_state = array()) {
           $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="@anchor">@module</a> (<span class="admin-enabled">enabled</span>)', array('@anchor' => '#module-' . $files[$requires]->name, '@module' => $requires_name));
         }
         else {
-          $extra['requires'][$requires] = t('@module (<span class="admin-disabled">disabled</span>)', array('@module' => $requires_name));
+          $extra['requires'][$requires] = t('<a href="@anchor">@module</a> (<span class="admin-disabled">disabled</span>)', array('@anchor' => '#module-' . $files[$requires]->name, '@module' => $requires_name));
         }
       }
     }
@@ -879,11 +879,11 @@ function system_modules($form, $form_state = array()) {
       // Hidden modules are unset already.
       if (isset($visible_files[$required_by])) {
         if ($files[$required_by]->status == 1 && $module->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="@anchor">@module</a> (<span class="admin-enabled">enabled</span>)', array('@anchor' => '#module-' . $files[$required_by]->name, '@module' => $files[$required_by]->info['name']));
           $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="@anchor">@module</a> (<span class="admin-disabled">disabled</span>)', array('@anchor' => '#module-' . $files[$required_by]->name, '@module' => $files[$required_by]->info['name']));
         }
       }
     }
@@ -2516,7 +2516,10 @@ function theme_system_modules_fieldset($variables) {
     $module = $form[$key];
     $row = array();
     unset($module['enable']['#title']);
-    $row[] = array('class' => array('checkbox'), 'data' => drupal_render($module['enable']));
+    $row[] = array(
+      'class' => array('checkbox'),
+      'data' => l($key, 'admin/modules', array('attributes' => array('name' => 'module-' . $key, 'class' => array('element-invisible')))) . drupal_render($module['enable'])
+    );
     $label = '<label';
     if (isset($module['enable']['#id'])) {
       $label .= ' for="' . $module['enable']['#id'] . '"';
diff --git a/core/modules/system/system.test b/core/modules/system/system.test
index e4dc730..1c4ad5f 100644
--- a/core/modules/system/system.test
+++ b/core/modules/system/system.test
@@ -711,6 +711,55 @@ class ModuleRequiredTestCase extends ModuleTestCase {
   }
 }
 
+/**
+ * Tests the modules administration page.
+ */
+class ModulesAdministrationPageTestCase extends WebTestBase {
+  public static function getInfo() {
+    return array(
+      'name' => 'Modules administration page',
+      'description' => 'Tests the modules administration page',
+      'group' => 'System',
+    );
+  }
+
+  protected $admin_user;
+
+  function setUp() {
+    parent::setUp();
+
+    $this->admin_user = $this->drupalCreateUser(array('administer modules'));
+  }
+
+  /**
+   * Tests linking between modules.
+   */
+  function testLinking() {
+    $this->drupalLogin($this->admin_user);
+    $this->drupalGet('admin/modules');
+
+    // Get the row of the field module.
+    $field_module_row = $this->xpath('//input[@name="modules[Core][field][enable]"]/ancestor::tr');
+    $field_module_row = $field_module_row[0];
+
+    // Get the divs that have the requirements.
+    $requirements_divs = $field_module_row->xpath('descendant::div[contains(@class, "admin-requirements")]');
+    $requires_div = $requirements_divs[0];
+    $required_by_div = $requirements_divs[1];
+
+    // The Field SQL storage module is linked as a dependency.
+    $field_sql_storage_link = $requires_div->xpath('a[@href="#module-field_sql_storage"]');
+    $this->assertEqual($field_sql_storage_link[0][0], 'Field SQL Storage');
+
+    // The target anchor exists.
+    $this->assertFieldByXPath('//a[@name="module-field_sql_storage"]');
+
+    // The Field UI module is linked as 'Required by'.
+    $field_ui_link = $required_by_div->xpath('a[@href="#module-field_ui"]');
+    $this->assertEqual($field_ui_link[0][0], 'Field UI');
+  }
+}
+
 class IPAddressBlockingTestCase extends WebTestBase {
   protected $blocking_user;
 
