diff --git a/core/modules/simpletest/simpletest.module b/core/modules/simpletest/simpletest.module
index cbc946c..d77e61c 100644
--- a/core/modules/simpletest/simpletest.module
+++ b/core/modules/simpletest/simpletest.module
@@ -159,6 +159,7 @@ function simpletest_run_tests($test_list, $reporter = 'drupal') {
  * Batch operation callback.
  */
 function _simpletest_batch_operation($test_list_init, $test_id, &$context) {
+  simpletest_register_disabled_modules();
   // Get working values.
   if (!isset($context['sandbox']['max'])) {
     // First iteration: initialize working values.
@@ -291,6 +292,9 @@ function simpletest_log_read($test_id, $prefix, $test_class, $during_test = FALS
  * a static variable. In order to list tests provided by disabled modules
  * hook_registry_files_alter() is used to forcefully add them to the registry.
  *
+ * PSR-0 classes are found by searching the designated directory for each module
+ * for files matching the PSR-0 standard.
+ *
  * @return
  *   An array of tests keyed with the groups specified in each of the tests
  *   getInfo() method and then keyed by the test class. An example of the array
@@ -310,6 +314,10 @@ function simpletest_log_read($test_id, $prefix, $test_class, $during_test = FALS
 function simpletest_test_get_all() {
   $groups = &drupal_static(__FUNCTION__);
 
+  // Make sure that namespaces for disabled modules are registered so that the
+  // checks below will find them.
+  simpletest_register_disabled_modules();
+
   if (!$groups) {
     // Load test information from cache if available, otherwise retrieve the
     // information from each tests getInfo() method.
@@ -320,6 +328,31 @@ function simpletest_test_get_all() {
       // Select all clases in files ending with .test.
       $classes = db_query("SELECT name FROM {registry} WHERE type = :type AND filename LIKE :name", array(':type' => 'class', ':name' => '%.test'))->fetchCol();
 
+      // Select all PSR-0 classes in the test folder of all available modules.
+      // @todo: can profiles/themes have tests as well?
+      $module_list = db_query("SELECT name, filename FROM {system} WHERE type = 'module'")->fetchAllKeyed();
+
+      foreach ($module_list as $name => $filename) {
+        // Build directory in which the test files would reside.
+        $tests_dir = DRUPAL_ROOT . '/' . dirname($filename) . '/lib/Drupal/' . $name . '/Test';
+        // Scan it for test files if it exists.
+        if (is_dir($tests_dir)) {
+          $files = file_scan_directory($tests_dir, '/.*\.php/');
+          if (!empty($files)) {
+            $basedir = DRUPAL_ROOT . '/' . dirname($filename) . '/lib/';
+            foreach ($files as $file) {
+              // Convert the file name into the namespaced class name.
+              $replacements = array(
+                '/' => '\\',
+                $basedir => '',
+                '.php' => '',
+              );
+              $classes[] = strtr($file->uri, $replacements);
+            }
+          }
+        }
+      }
+
       // Check that each class has a getInfo() method and store the information
       // in an array keyed with the group specified in the test information.
       $groups = array();
@@ -356,6 +389,19 @@ function simpletest_test_get_all() {
 }
 
 /**
+ * Registers namespaces for disabled modules.
+ */
+function simpletest_register_disabled_modules() {
+  // Get the cached test modules list and register a test namespace for each.
+  $disabled_modules = db_query("SELECT name, filename FROM {system} WHERE type = 'module' AND status = 0")->fetchAllKeyed();
+  if ($disabled_modules) {
+    foreach ($disabled_modules as $name => $filename) {
+      drupal_classloader_register($name, dirname($filename));
+    }
+  }
+}
+
+/**
  * Implements hook_registry_files_alter().
  *
  * Add the test files for disabled modules so that we get a list containing
diff --git a/core/modules/simpletest/simpletest.pages.inc b/core/modules/simpletest/simpletest.pages.inc
index 8ac1ee2..430d3e9 100644
--- a/core/modules/simpletest/simpletest.pages.inc
+++ b/core/modules/simpletest/simpletest.pages.inc
@@ -183,6 +183,7 @@ function theme_simpletest_test_table($variables) {
 function simpletest_test_form_submit($form, &$form_state) {
   // Get list of tests.
   $tests_list = array();
+  simpletest_register_disabled_modules();
   foreach ($form_state['values'] as $class_name => $value) {
     // Since class_exists() will likely trigger an autoload lookup,
     // we do the fast check first.
@@ -233,6 +234,8 @@ function simpletest_result_form($form, &$form_state, $test_id) {
     '#debug' => 0,
   );
 
+  simpletest_register_disabled_modules();
+
   // Cycle through each test group.
   $header = array(t('Message'), t('Group'), t('Filename'), t('Line'), t('Function'), array('colspan' => 2, 'data' => t('Status')));
   $form['result']['results'] = array();
diff --git a/core/modules/tracker/tracker.test b/core/modules/tracker/lib/Drupal/tracker/Test/TrackerTest.php
similarity index 98%
rename from core/modules/tracker/tracker.test
rename to core/modules/tracker/lib/Drupal/tracker/Test/TrackerTest.php
index c6d4a29..302e4a3 100644
--- a/core/modules/tracker/tracker.test
+++ b/core/modules/tracker/lib/Drupal/tracker/Test/TrackerTest.php
@@ -2,9 +2,13 @@
 
 /**
  * @file
- * Tests for tracker.module.
+ * Definition of Drupal\tracker\Test\TrackerTests
  */
 
+namespace Drupal\tracker\Test;
+
+use DrupalWebTestCase;
+
 /**
  * Defines a base class for testing tracker.module.
  */
diff --git a/core/modules/tracker/tracker.info b/core/modules/tracker/tracker.info
index a765504..b39eb3f 100644
--- a/core/modules/tracker/tracker.info
+++ b/core/modules/tracker/tracker.info
@@ -4,4 +4,3 @@ dependencies[] = comment
 package = Core
 version = VERSION
 core = 8.x
-files[] = tracker.test
diff --git a/core/scripts/run-tests.sh b/core/scripts/run-tests.sh
index 5bf95fb..a733c09 100755
--- a/core/scripts/run-tests.sh
+++ b/core/scripts/run-tests.sh
@@ -363,6 +363,8 @@ function simpletest_script_run_one_test($test_id, $test_class) {
     // Bootstrap Drupal.
     drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
 
+    simpletest_register_disabled_modules();
+
     $test = new $test_class($test_id);
     $test->run();
     $info = $test->getInfo();
@@ -396,7 +398,7 @@ function simpletest_script_command($test_id, $test_class) {
   if ($args['color']) {
     $command .= ' --color';
   }
-  $command .= " --php " . escapeshellarg($php) . " --test-id $test_id --execute-test $test_class";
+  $command .= " --php " . escapeshellarg($php) . " --test-id $test_id --execute-test \"$test_class\"";
   return $command;
 }
 
