Index: plugin.php
===================================================================
--- plugin.php	(revision 23992)
+++ plugin.php	(working copy)
@@ -183,6 +183,7 @@
 	$plugin_file = WP_PLUGIN_DIR . '/' . $plugin;
 	$dir = dirname($plugin_file);
 	$plugin_files = array($plugin);
+	$plugin_basedir = plugin_basename( $dir );
 	if ( is_dir($dir) && $dir != WP_PLUGIN_DIR ) {
 		$plugins_dir = @ opendir( $dir );
 		if ( $plugins_dir ) {
@@ -195,18 +196,27 @@
 						while (($subfile = readdir( $plugins_subdir ) ) !== false ) {
 							if ( substr($subfile, 0, 1) == '.' )
 								continue;
-							$plugin_files[] = plugin_basename("$dir/$file/$subfile");
+							$plugin_files[] = "$plugin_basedir/$file/$subfile";
 						}
 						@closedir( $plugins_subdir );
 					}
 				} else {
-					if ( plugin_basename("$dir/$file") != $plugin )
-						$plugin_files[] = plugin_basename("$dir/$file");
+					if ( "$plugin_basedir/$file" != $plugin )
+						$plugin_files[] = "$plugin_basedir/$file";
 				}
 			}
 			@closedir( $plugins_dir );
 		}
 	}
+	sort( $plugin_files );
+	$plugin_root_files = array();
+	foreach ( $plugin_files as $key => $value ) {
+		if ( ! preg_match( '_' . $plugin_basedir . '/.+/_', $value ) ) {
+			$plugin_root_files[] = $value;
+			unset( $plugin_files[ $key ] );
+		}
+	}
+	$plugin_files = $plugin_root_files + $plugin_files;
 
 	return $plugin_files;
 }
