diff --git a/unused_modules.info b/unused_modules.info
index 1ccfeadfd7c15a23cc2b72ebfcabe81b5baa9e0b..be5a741a2f7335e8102b54fcd6d5f7bb99a9e37d 100644
--- a/unused_modules.info
+++ b/unused_modules.info
@@ -2,4 +2,5 @@ name = Unused Modules
 description = List modules and projects that are unused and safe to delete.
 package = Development
 configure = admin/config/development/unused_modules
-core = 7.x
\ No newline at end of file
+dependencies[] = drupal_static
+core = 6.x
\ No newline at end of file
diff --git a/unused_modules.module b/unused_modules.module
index 49a9e8b9fcb09d1ac21e54187ba84214e6767c72..b15824e82c5566936146b4ec59f15eec6b5a0bec 100644
--- a/unused_modules.module
+++ b/unused_modules.module
@@ -104,7 +104,8 @@ function unused_modules_show_projects($op = 'all') {
     return t("Hurray, no orphaned projects!");
   }
 
-  return theme('table', array('header' => $header, 'rows' => $rows));
+  // @drupal-6 backport: pass $header and $rows directly to theme_table.
+  return theme('table', $header, $rows);
 }
 
 /**
@@ -151,7 +152,8 @@ function unused_modules_show_modules($op) {
     return t("Hurray, no orphaned modules!");
   }
 
-  return theme('table', array('header' => $header, 'rows' => $rows));
+  // @drupal-6 backport: pass $header and $rows directly to theme_table.
+  return theme('table', $header, $rows);
 }
 
 /**
@@ -211,17 +213,19 @@ function _unused_modules_get_modules_by_project() {
  * Returns an array of available modules.
  */
 function _unused_modules_get_available_modules() {
+  // @drupal-6 backport: needs dependency module 'drupal_static'.
   $available_modules = &drupal_static(__FUNCTION__);
 
   if (!isset($available_modules)) {
     // Get all modules available.
-    $available_modules = drupal_system_listing("/\.module$/", "modules", 'name', 0);
+    // @drupal-6 backport: little different regex for .module selector.
+    $available_modules = drupal_system_listing('\.module$', 'modules', 'name', 0);
     // Sort for readability.
     ksort($available_modules);
-    // Remove core modules.
-    _unused_modules_remove_core_modules($available_modules);
     // Add module info.
     _unused_modules_add_module_info($available_modules);
+    // Remove core modules.
+    _unused_modules_remove_core_modules($available_modules);
     // Add information from .info file.
     _unused_modules_add_info_file_information($available_modules);
     // Add project info.
@@ -258,8 +262,11 @@ function _unused_modules_get_enabled_modules() {
  */
 function _unused_modules_add_module_info(&$modules) {
   foreach ($modules as &$module) {
+    // @drupal-6 backport: use module filename for uri.
+    $module->uri = $module->filename;
+
     // Set module_path.
-    $module->module_path = str_replace("/" . $module->filename, "", $module->uri);
+    $module->module_path = str_replace("/" . $module->basename, "", $module->uri);
   }
 }
 
@@ -276,27 +283,43 @@ function _unused_modules_add_project_path(&$modules) {
     $modules_grouped_by_project[$module->project][$module->name] = $module;
   }
 
-  // Determine common basepath by picking the shortest path of all project
-  // modules.
+  // Add project_path to module.
   foreach ($modules_grouped_by_project as $project) {
-    $project_paths = array();
+
+    // Determine common basepath by looking for needle "/<project>/" in uri.
+    // As a fallback use the shortest path method.
     foreach ($project as $module) {
-      $project_paths[] = $module->module_path;
+      if ($module->error !== TRUE) {
+        $needle = "/" . $module->project . "/";
+        $before_needle = TRUE;
+        $project_path = strstr($module->uri, $needle, $before_needle) . "/" . $module->project;
+
+        $module->project_path = $project_path;
+      }
     }
 
-    // Get length of each module path in a project.
-    $lengths = array_map('strlen', $project_paths);
-    // Sort by value (lowest number first)
-    asort($lengths);
-    // Get lowest key.
-    reset($lengths);
-    $key = key($lengths);
-    // Shortest path.
-    $shortest_path = $project_paths[$key];
-
-    // Add the project_path to each module.
-    foreach ($project as $module) {
-      $module->project_path = $shortest_path;
+    // Fallback: determine common basepath by picking the shortest path of all
+    // project modules.
+    if (!isset($module->project_path)) {
+      $project_paths = array();
+      foreach ($project as $module) {
+        $project_paths[] = $module->module_path;
+      }
+
+      // Get length of each module path in a project.
+      $lengths = array_map('strlen', $project_paths);
+      // Sort by value (lowest number first)
+      asort($lengths);
+      // Get lowest key.
+      reset($lengths);
+      $key = key($lengths);
+      // Shortest path.
+      $shortest_path = $project_paths[$key];
+
+      // Add the project_path to each module.
+      foreach ($project as $module) {
+        $module->project_path = $shortest_path;
+      }
     }
 
     unset($project_paths);