diff --git a/core/includes/install.inc b/core/includes/install.inc
index f080533..9563466 100644
--- a/core/includes/install.inc
+++ b/core/includes/install.inc
@@ -1006,7 +1006,11 @@ function drupal_requirements_severity(&$requirements) {
 function drupal_check_module($module) {
   module_load_install($module);
   // Check requirements
-  $requirements = \Drupal::moduleHandler()->invoke($module, 'requirements', array('install'));
+  $requirements = NULL;
+  $function = $module . '_requirements';
+  if (function_exists($function)) {
+    $requirements = $function('install');
+  }
   if (is_array($requirements) && drupal_requirements_severity($requirements) == REQUIREMENT_ERROR) {
     // Print any error messages
     foreach ($requirements as $requirement) {
diff --git a/core/lib/Drupal/Core/Extension/ModuleHandler.php b/core/lib/Drupal/Core/Extension/ModuleHandler.php
index 08a3ec5..704fad2 100644
--- a/core/lib/Drupal/Core/Extension/ModuleHandler.php
+++ b/core/lib/Drupal/Core/Extension/ModuleHandler.php
@@ -329,6 +329,9 @@ public function resetImplementations() {
    * {@inheritdoc}
    */
   public function implementsHook($module, $hook) {
+    if (!isset($this->moduleList[$module]) && $module != \Drupal::config('system.theme')->get('default')) {
+      return FALSE;
+    }
     $function = $module . '_' . $hook;
     if (function_exists($function)) {
       return TRUE;
diff --git a/core/modules/system/lib/Drupal/system/Tests/Extension/ModuleHandlerTest.php b/core/modules/system/lib/Drupal/system/Tests/Extension/ModuleHandlerTest.php
new file mode 100644
index 0000000..449e5e6
--- /dev/null
+++ b/core/modules/system/lib/Drupal/system/Tests/Extension/ModuleHandlerTest.php
@@ -0,0 +1,52 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Tests\Extension\ModuleHandlerTest.
+ */
+
+namespace Drupal\system\Tests\Extension;
+
+use Drupal\simpletest\DrupalUnitTestBase;
+
+/**
+ * Tests module hook functionality.
+ */
+class ModuleHandlerTest extends DrupalUnitTestBase {
+
+  public static function getInfo() {
+    return array(
+      'name' => 'Module handler',
+      'description' => 'Tests module hook functionality.',
+      'group' => 'Extension',
+    );
+  }
+
+  /**
+   * Tests that hooks are only invoked in enabled modules.
+   */
+  function testImplementsHook() {
+    $name = 'module_test';
+    $path = drupal_get_path('module', 'module_test');
+
+    $this->assertFalse($this->moduleHandler()->moduleExists($name));
+
+    include_once DRUPAL_ROOT . "/$path/$name.module";
+    $this->assertTrue(function_exists("{$name}_permission"));
+
+    $this->assertFalse($this->moduleHandler()->implementsHook($name, 'permission'));
+
+    $this->moduleHandler()->addModule($name, $path);
+    $this->assertTrue($this->moduleHandler()->implementsHook($name, 'permission'));
+  }
+
+  /**
+   * Returns the module handler service.
+   *
+   * @return \Drupal\Core\Extension\ModuleHandlerInterface
+   */
+  protected function moduleHandler() {
+    return $this->container->get('module_handler');
+  }
+
+}
