diff --git a/src/plugins/debugger/debuggerengine.cpp b/src/plugins/debugger/debuggerengine.cpp
index 0e2bf0f9c11b053c9fda9ee491c8e3d9ba236f25..13cd1c8cfc562cac1e37cc52cd09f0db1e9a0672 100644
--- a/src/plugins/debugger/debuggerengine.cpp
+++ b/src/plugins/debugger/debuggerengine.cpp
@@ -110,7 +110,8 @@ DebuggerStartParameters::DebuggerStartParameters()
     useTerminal(false),
     breakAtMain(false),
     toolChainType(ToolChain::UNKNOWN),
-    startMode(NoStartMode)
+    startMode(NoStartMode),
+    executableUid(0)
 {}
 
 void DebuggerStartParameters::clear()
diff --git a/src/plugins/debugger/debuggerengine.h b/src/plugins/debugger/debuggerengine.h
index d3ea88511275c836be8d48aa0a3c7cebdfca84b1..a4c0a7c3e5aa5394355cf710e0b40643f19169aa 100644
--- a/src/plugins/debugger/debuggerengine.h
+++ b/src/plugins/debugger/debuggerengine.h
@@ -99,6 +99,9 @@ public:
     QString dumperLibrary;
     QStringList dumperLibraryLocations;
     DebuggerStartMode startMode;
+
+    // for SymbianOS debugging
+    quint32 executableUid;
 };
 
 DEBUGGER_EXPORT QDebug operator<<(QDebug str, const DebuggerStartParameters &);
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp
index 824c883407e37fc7336f1394727c89d37e1fea47..649a2feec3164ce351f01a9dedee709ea69b273f 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.cpp
@@ -252,6 +252,27 @@ QString S60DeployConfiguration::localExecutableFileName() const
     return QDir::toNativeSeparators(localExecutable);
 }
 
+quint32 S60DeployConfiguration::executableUid() const
+{
+    quint32 uid = 0;
+    QString executablePath(localExecutableFileName());
+    if (!executablePath.isEmpty()) {
+        QFile file(executablePath);
+        if (file.open(QIODevice::ReadOnly)) {
+            // executable's UID is 4 bytes starting at 8.
+            const QByteArray data = file.read(12);
+            if (data.size() == 12) {
+                const unsigned char *d = reinterpret_cast<const unsigned char*>(data.data() + 8);
+                uid = *d++;
+                uid += *d++ << 8;
+                uid += *d++ << 16;
+                uid += *d++ << 24;
+            }
+        }
+    }
+    return uid;
+}
+
 bool S60DeployConfiguration::runSmartInstaller() const
 {
     DeployConfiguration *dc = target()->activeDeployConfiguration();
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h
index 1885cbe38d59c97b45ccb1c6fe234987a475d1d5..b109ba8e7e6ba32cf1910bd6aed0dea92c6df575 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60deployconfiguration.h
@@ -77,6 +77,7 @@ public:
     QStringList packageTemplateFileNames() const;
     QString appPackageTemplateFileName() const;
     QString localExecutableFileName() const;
+    quint32 executableUid() const;
 
     QVariantMap toMap() const;
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index bf268838da7803823a5ab58bf3061d36a941801c..5060d799762ebdc3324856e7698e70a2d7a0e2ee 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -593,6 +593,9 @@ S60DeviceDebugRunControl::S60DeviceDebugRunControl(S60DeviceRunConfiguration *rc
     m_startParams->startMode = Debugger::StartInternal;
     m_startParams->toolChainType = rc->toolChainType();
     m_startParams->executable = debugFileName;
+    m_startParams->executableUid = activeDeployConf->executableUid();
+
+    QTC_ASSERT(m_startParams->executableUid, return);
 
     // Prefer the '*.sym' file over the '.exe', which should exist at the same
     // location in debug builds