diff --git a/modules/system/system.admin.inc b/modules/system/system.admin.inc
index 24f0b888d99748ec64227e621e92668394d08bc2..b7537b7a8dfad3082fc1776ae7c845a7144d8dcf 100644
--- a/modules/system/system.admin.inc
+++ b/modules/system/system.admin.inc
@@ -199,8 +199,16 @@ function system_settings_overview() {
  * @see system_themes_form_submit()
  */
 function system_themes_form() {
-
+  // Get current list of themes.
   $themes = system_get_theme_data();
+
+  // Remove hidden themes from the display list.
+  foreach ($themes as $theme_key => $theme) {
+    if (!empty($theme->info['hidden'])) {
+      unset($themes[$theme_key]);
+    }
+  }
+
   uasort($themes, 'system_sort_modules_by_info_name');
 
   $status = array();
diff --git a/modules/update/update.compare.inc b/modules/update/update.compare.inc
index 996855aa746b10b78c2ef06df770861308b9160d..e5f4caee7f148ca17d694fe7be9d675f64651238 100644
--- a/modules/update/update.compare.inc
+++ b/modules/update/update.compare.inc
@@ -62,7 +62,7 @@ function update_get_projects() {
  * modules or themes are being processed (there is a setting to control if
  * disabled code should be included in the Available updates report or not),
  * those are only processed after $projects has been populated with
- * information about the enabled code. 'Hidden' modules are always
+ * information about the enabled code. 'Hidden' modules and themes are always
  * ignored. This function also records the latest change time on the .info
  * files for each module or theme, which is important data which is used when
  * deciding if the cached available update data should be invalidated.
@@ -90,7 +90,7 @@ function _update_process_info_list(&$projects, $list, $project_type, $status) {
       continue;
     }
 
-    // Skip if it's a hidden module.
+    // Skip if it's a hidden module or theme.
     if (!empty($file->info['hidden'])) {
       continue;
     }
diff --git a/themes/tests/README.txt b/themes/tests/README.txt
new file mode 100644
index 0000000000000000000000000000000000000000..e64480fa61b1b5fb15a8b5014e88aa47171b7e5a
--- /dev/null
+++ b/themes/tests/README.txt
@@ -0,0 +1,5 @@
+// $Id$
+
+The themes in this subdirectory are all used by the Drupal core testing
+framework. They are not functioning themes that could be used on a real site
+and are hidden in the administrative user interface.