diff --git a/core/modules/system/src/Form/ModulesUninstallForm.php b/core/modules/system/src/Form/ModulesUninstallForm.php
index 153e2ca..ba826ad 100644
--- a/core/modules/system/src/Form/ModulesUninstallForm.php
+++ b/core/modules/system/src/Form/ModulesUninstallForm.php
@@ -84,7 +84,7 @@ public function buildForm(array $form, FormStateInterface $form_state) {
     // Get a list of all available modules.
     $modules = system_rebuild_module_data();
     $uninstallable = array_filter($modules, function ($module) use ($modules) {
-      return empty($modules[$module->getName()]->info['required']) && drupal_get_installed_schema_version($module->getName()) > SCHEMA_UNINSTALLED;
+      return empty($modules[$module->getName()]->info['required']) && $module->status;
     });
 
     // Include system.admin.inc so we can use the sort callbacks.
diff --git a/core/modules/system/src/Tests/Module/UninstallTest.php b/core/modules/system/src/Tests/Module/UninstallTest.php
index c7eb051..e28368d 100644
--- a/core/modules/system/src/Tests/Module/UninstallTest.php
+++ b/core/modules/system/src/Tests/Module/UninstallTest.php
@@ -8,6 +8,7 @@
 namespace Drupal\system\Tests\Module;
 
 use Drupal\Core\Cache\Cache;
+use Drupal\Core\Entity\EntityMalformedException;
 use Drupal\Component\Utility\SafeMarkup;
 use Drupal\simpletest\WebTestBase;
 
@@ -112,4 +113,28 @@ function testUninstallPage() {
     $this->assertUrl('admin/modules/uninstall');
     $this->assertTitle(t('Uninstall') . ' | Drupal');
   }
+  
+  /**
+   * Tests that a module which fails to install is still shown on the uninstall
+   * page.
+   */
+  public function testFailedInstallStatus() {
+    $account = $this->drupalCreateUser(array('administer modules'));
+    $this->drupalLogin($account);
+    
+    $module = 'module_installer_config_test';
+    $message = format_string('Exception thrown when installing module %name with an invalid configuration file.', array('%name' => $module));
+    try {
+      $this->container->get('module_installer')->install(array($module));
+      $this->fail($message);
+    }
+    catch (EntityMalformedException $e) {
+      $this->pass($message);
+    }
+    
+    // Even though the module failed to install properly, its configuration
+    // status is "enabled" and should still be available to uninstall.
+    $this->drupalGet('admin/modules/uninstall');
+    $this->assertText('Module installer config test', 'Enabled module is available to uninstall.');
+  }
 }
diff --git a/core/modules/system/tests/modules/module_installer_config_test/config/install/module_installer_config_test.type.missing_id.yml b/core/modules/system/tests/modules/module_installer_config_test/config/install/module_installer_config_test.type.missing_id.yml
new file mode 100644
index 0000000..d5b4115
--- /dev/null
+++ b/core/modules/system/tests/modules/module_installer_config_test/config/install/module_installer_config_test.type.missing_id.yml
@@ -0,0 +1,4 @@
+# This should be 'id' and during install, you will get an
+# EntityMalformedException complaining about the missing key.
+ids: missing_id
+name: 'This entity does not have an ID'
diff --git a/core/modules/system/tests/modules/module_installer_config_test/config/schema/module_installer_config_test.schema.yml b/core/modules/system/tests/modules/module_installer_config_test/config/schema/module_installer_config_test.schema.yml
new file mode 100644
index 0000000..7674b13
--- /dev/null
+++ b/core/modules/system/tests/modules/module_installer_config_test/config/schema/module_installer_config_test.schema.yml
@@ -0,0 +1,9 @@
+module_installer_config_test.type.*:
+  type: config_entity
+  label: 'Test entity type'
+  mapping:
+    id:
+      type: string
+    name:
+      type: label
+      label: 'Name'
diff --git a/core/modules/system/tests/modules/module_installer_config_test/module_installer_config_test.info.yml b/core/modules/system/tests/modules/module_installer_config_test/module_installer_config_test.info.yml
new file mode 100644
index 0000000..4c600b6
--- /dev/null
+++ b/core/modules/system/tests/modules/module_installer_config_test/module_installer_config_test.info.yml
@@ -0,0 +1,6 @@
+name: 'Module installer config test'
+description: 'Support module for tests that require a failed module install.'
+type: module
+package: Testing
+core: 8.x
+version: VERSION
diff --git a/core/modules/system/tests/modules/module_installer_config_test/src/Entity/TestConfigType.php b/core/modules/system/tests/modules/module_installer_config_test/src/Entity/TestConfigType.php
new file mode 100644
index 0000000..135fbd3
--- /dev/null
+++ b/core/modules/system/tests/modules/module_installer_config_test/src/Entity/TestConfigType.php
@@ -0,0 +1,31 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\module_installer_config_test\Entity\TestConfigType.
+ */
+
+namespace Drupal\module_installer_config_test\Entity;
+
+use Drupal\Core\Config\Entity\ConfigEntityBase;
+
+/**
+ * Defines a configuration-based entity type used for testing.
+ *
+ * @ConfigEntityType(
+ *   id = "test_config_type",
+ *   label = @Translation("Test entity type"),
+ *   handlers = {
+ *     "list_builder" = "Drupal\Core\Entity\EntityListBuilder"
+ *   },
+ *   admin_permission = "administer modules",
+ *   config_prefix = "type",
+ *   entity_keys = {
+ *     "id" = "id",
+ *     "label" = "name"
+ *   }
+ * )
+ */
+class TestConfigType extends ConfigEntityBase {
+  
+}
