diff --git includes/updater.inc includes/updater.inc
index b49d5d2..0092fb9 100644
--- includes/updater.inc
+++ includes/updater.inc
@@ -164,7 +164,9 @@ class Updater {
    *   The name of the project.
    */
   public static function getProjectName($directory) {
-    return basename($directory);
+    $info_file = self::findInfoFile($directory);
+    $info = drupal_parse_info_file($info_file);
+    return !empty($info['project']) ? $info['project'] : basename($directory);
   }
 
   /**
diff --git modules/field/field.crud.inc modules/field/field.crud.inc
index eda3218..27b1638 100644
--- modules/system/system.updater.inc
+++ modules/system/system.updater.inc
@@ -26,12 +26,16 @@ class ModuleUpdater extends Updater implements DrupalUpdaterInterface {
    */
   public function getInstallDirectory() {
     if ($relative_path = drupal_get_path('module', $this->name)) {
-      $relative_path = dirname($relative_path);
+      $path = DRUPAL_ROOT . '/' . $relative_path;
+      $project_name = $this->getProjectName($path);
+      do {
+        $path = dirname($path);
+      } while ($this->getProjectName($path) == $project_name);
     }
     else {
-      $relative_path = 'sites/all/modules';
+      $path = DRUPAL_ROOT . '/' . 'sites/all/modules';
     }
-    return DRUPAL_ROOT . '/' . $relative_path;
+    return $path;
   }
 
   public function isInstalled() {
