diff --git a/src/linguist/lupdate/main.cpp b/src/linguist/lupdate/main.cpp
index 0ef299be3a777d959973ce6cb20b243b122b17d1..1eac99be85a56f4ae5ce746f276f0f71612325bf 100644
--- a/src/linguist/lupdate/main.cpp
+++ b/src/linguist/lupdate/main.cpp
@@ -361,7 +361,12 @@ static void processProject(
         QStringList subProFiles;
         QDir proDir(proPath);
         foreach (const QString &subdir, visitor.values(QLatin1String("SUBDIRS"))) {
-            QString subPro = QDir::cleanPath(proDir.absoluteFilePath(subdir));
+            QString realdir = visitor.value(subdir + QLatin1String(".subdir"));
+            if (realdir.isEmpty())
+                realdir = visitor.value(subdir + QLatin1String(".file"));
+            if (realdir.isEmpty())
+                realdir = subdir;
+            QString subPro = QDir::cleanPath(proDir.absoluteFilePath(realdir));
             QFileInfo subInfo(subPro);
             if (subInfo.isDir())
                 subProFiles << (subPro + QLatin1Char('/')
diff --git a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro
index f75a4627661aa32c1592a5e158c9e12bdc73483c..13f921703f96b779e2522a98ebec5d6af425f4e9 100644
--- a/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro
+++ b/tests/auto/linguist/lupdate/testdata/good/proparsingsubs/project.pro
@@ -1,2 +1,3 @@
 TEMPLATE = subdirs
-SUBDIRS = win mac unix common
+comm.subdir = common
+SUBDIRS = win mac unix comm