diff --git a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
index 00895244cef6894158930d642499322b0007bef7..bfc53ae98e13587f8738480f9eb876d95a66ad53 100644
--- a/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
+++ b/src/plugins/qt4projectmanager/qt-s60/qt-s60.pri
@@ -8,14 +8,16 @@ SUPPORT_QT_S60 = $$(QTCREATOR_WITH_S60)
         $$PWD/winscwtoolchain.cpp \
         $$PWD/gccetoolchain.cpp \
         $$PWD/s60emulatorrunconfiguration.cpp \
-        $$PWD/s60devicerunconfiguration.cpp
+        $$PWD/s60devicerunconfiguration.cpp \
+        $$PWD/serialdevicelister.cpp
     HEADERS += $$PWD/s60devices.h \
         $$PWD/s60devicespreferencepane.h \
         $$PWD/s60manager.h \
         $$PWD/winscwtoolchain.h \
         $$PWD/gccetoolchain.h \
         $$PWD/s60emulatorrunconfiguration.h \
-        $$PWD/s60devicerunconfiguration.h
+        $$PWD/s60devicerunconfiguration.h \
+        $$PWD/serialdevicelister.h
     FORMS += $$PWD/s60devicespreferencepane.ui
     OTHER_FILES += $$PWD/qt-s60-todo.txt
 
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
index 6caec355e164cd9e54d382f0b68b6c51a2ea0a01..e03349e5a2b1edc6d962a7addb165357df1234c2 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.cpp
@@ -34,6 +34,7 @@
 #include "profilereader.h"
 #include "s60manager.h"
 #include "s60devices.h"
+#include "serialdevicelister.h"
 
 #include <coreplugin/icore.h>
 #include <coreplugin/messagemanager.h>
@@ -264,11 +265,20 @@ S60DeviceRunConfigurationWidget::S60DeviceRunConfigurationWidget(S60DeviceRunCon
     m_sisxFileLabel = new QLabel(m_runConfiguration->basePackageFilePath() + ".sisx");
     formLayout->addRow(tr("Install File:"), m_sisxFileLabel);
 
-    QComboBox *serialPorts = new QComboBox;
-    serialPorts->addItems(QStringList() << "COM1" << "COM2" << "COM3" << "COM4" << "COM5" << "COM6" << "COM7" << "COM8" << "COM9");
-    serialPorts->setCurrentIndex(m_runConfiguration->serialPortName().mid(3).toInt()-1);
-    connect(serialPorts, SIGNAL(activated(QString)), this, SLOT(setSerialPort(QString)));
-    formLayout->addRow(tr("Device on Serial Port:"), serialPorts);
+    QString runConfigurationPortName = m_runConfiguration->serialPortName();
+    QList<SerialDeviceLister::SerialDevice> serialDevices = SerialDeviceLister().serialDevices();
+    m_serialPorts = new QComboBox;
+    for (int i = 0; i < serialDevices.size(); ++i) {
+        const SerialDeviceLister::SerialDevice &device = serialDevices.at(i);
+        m_serialPorts->addItem(device.friendlyName, device.portName);
+        if (device.portName == runConfigurationPortName)
+            m_serialPorts->setCurrentIndex(i);
+    }
+    QString selectedPortName = m_serialPorts->itemData(m_serialPorts->currentIndex()).toString();
+    if (m_serialPorts->count() > 0 && runConfigurationPortName != selectedPortName)
+        m_runConfiguration->setSerialPortName(selectedPortName);
+    connect(m_serialPorts, SIGNAL(activated(int)), this, SLOT(setSerialPort(int)));
+    formLayout->addRow(tr("Device on Serial Port:"), m_serialPorts);
 
     QWidget *signatureWidget = new QWidget();
     QVBoxLayout *layout = new QVBoxLayout();
@@ -331,9 +341,9 @@ void S60DeviceRunConfigurationWidget::updateTargetInformation()
     m_sisxFileLabel->setText(m_runConfiguration->basePackageFilePath() + ".sisx");
 }
 
-void S60DeviceRunConfigurationWidget::setSerialPort(const QString &portName)
+void S60DeviceRunConfigurationWidget::setSerialPort(int index)
 {
-    m_runConfiguration->setSerialPortName(portName.trimmed());
+    m_runConfiguration->setSerialPortName(m_serialPorts->itemData(index).toString());
 }
 
 void S60DeviceRunConfigurationWidget::selfSignToggled(bool toggle)
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
index f68d8a3d610c8cbf01794f08a0c59ef3a7efe306..3e4d7572a085aa072e27c49d9009f39abff8cf82 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt-s60/s60devicerunconfiguration.h
@@ -38,6 +38,7 @@
 #include <QtGui/QWidget>
 #include <QtGui/QLabel>
 #include <QtGui/QLineEdit>
+#include <QtGui/QComboBox>
 
 namespace Qt4ProjectManager {
 namespace Internal {
@@ -100,7 +101,7 @@ public:
 private slots:
     void nameEdited(const QString &text);
     void updateTargetInformation();
-    void setSerialPort(const QString &portName);
+    void setSerialPort(int index);
     void selfSignToggled(bool toggle);
     void customSignatureToggled(bool toggle);
     void signaturePathChanged(const QString &path);
@@ -108,6 +109,7 @@ private slots:
 
 private:
     S60DeviceRunConfiguration *m_runConfiguration;
+    QComboBox *m_serialPorts;
     QLineEdit *m_nameLineEdit;
     QLabel *m_sisxFileLabel;
 };
diff --git a/src/plugins/qt4projectmanager/qt-s60/serialdevicelister.cpp b/src/plugins/qt4projectmanager/qt-s60/serialdevicelister.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..948b7241e098ef0f90572fb90789cfdd99e6943b
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-s60/serialdevicelister.cpp
@@ -0,0 +1,63 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#include "serialdevicelister.h"
+
+#include <QtCore/QSettings>
+#include <QtCore/QStringList>
+#include <QtDebug>
+
+using namespace Qt4ProjectManager::Internal;
+
+namespace {
+    const char * const REGKEY_CURRENT_CONTROL_SET = "HKEY_LOCAL_MACHINE\\SYSTEM\\CurrentControlSet";
+    const char * const USBSER = "Services/usbser/Enum";
+}
+
+SerialDeviceLister::SerialDeviceLister()
+{
+}
+
+QList<SerialDeviceLister::SerialDevice> SerialDeviceLister::serialDevices() const
+{
+    QList<SerialDeviceLister::SerialDevice> devices;
+    QSettings registry(REGKEY_CURRENT_CONTROL_SET, QSettings::NativeFormat);
+    int count = registry.value(QString::fromLatin1("%1/Count").arg(USBSER)).toInt();
+    for (int i = 0; i < count; ++i) {
+        QString driver = registry.value(QString::fromLatin1("%1/%2").arg(USBSER).arg(i)).toString();
+        if (driver.contains("JAVACOMM")) {
+            driver.replace('\\', '/');
+            SerialDeviceLister::SerialDevice device;
+            device.friendlyName = registry.value(QString::fromLatin1("Enum/%1/FriendlyName").arg(driver)).toString();
+            device.portName = registry.value(QString::fromLatin1("Enum/%1/Device Parameters/PortName").arg(driver)).toString();
+            devices.append(device);
+        }
+    }
+    return devices;
+}
diff --git a/src/plugins/qt4projectmanager/qt-s60/serialdevicelister.h b/src/plugins/qt4projectmanager/qt-s60/serialdevicelister.h
new file mode 100644
index 0000000000000000000000000000000000000000..c314dd19758b4c4c26024010ef2229ea227ca7ca
--- /dev/null
+++ b/src/plugins/qt4projectmanager/qt-s60/serialdevicelister.h
@@ -0,0 +1,57 @@
+/**************************************************************************
+**
+** This file is part of Qt Creator
+**
+** Copyright (c) 2009 Nokia Corporation and/or its subsidiary(-ies).
+**
+** Contact: Nokia Corporation (qt-info@nokia.com)
+**
+** Commercial Usage
+**
+** Licensees holding valid Qt Commercial licenses may use this file in
+** accordance with the Qt Commercial License Agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and Nokia.
+**
+** GNU Lesser General Public License Usage
+**
+** Alternatively, this file may be used under the terms of the GNU Lesser
+** General Public License version 2.1 as published by the Free Software
+** Foundation and appearing in the file LICENSE.LGPL included in the
+** packaging of this file.  Please review the following information to
+** ensure the GNU Lesser General Public License version 2.1 requirements
+** will be met: http://www.gnu.org/licenses/old-licenses/lgpl-2.1.html.
+**
+** If you are unsure which license is appropriate for your use, please
+** contact the sales department at http://www.qtsoftware.com/contact.
+**
+**************************************************************************/
+
+#ifndef SERIALDEVICELISTER_H
+#define SERIALDEVICELISTER_H
+
+#include <QtCore/QObject>
+#include <QtCore/QString>
+#include <QtCore/QList>
+
+namespace Qt4ProjectManager {
+namespace Internal {
+
+class SerialDeviceLister : public QObject
+{
+    Q_OBJECT
+public:
+
+    struct SerialDevice {
+        QString portName;
+        QString friendlyName;
+    };
+
+    SerialDeviceLister();
+    QList<SerialDevice> serialDevices() const;
+};
+
+} // Internal
+} // Qt4ProjectManager
+
+#endif // SERIALDEVICELISTER_H