diff --git a/src/plugins/projectexplorer/buildmanager.cpp b/src/plugins/projectexplorer/buildmanager.cpp
index 257f99a07e59b7c44130ec9890e7442cee4f3a06..a912b9c07e57ca043d7181c8cc15f3260a9215c2 100644
--- a/src/plugins/projectexplorer/buildmanager.cpp
+++ b/src/plugins/projectexplorer/buildmanager.cpp
@@ -413,8 +413,11 @@ bool BuildManager::buildQueueAppend(QList<BuildStep *> steps)
 void BuildManager::buildProjects(const QList<BuildConfiguration *> &configurations)
 {
     QList<BuildStep *> steps;
-    foreach(BuildConfiguration *bc, configurations)
+    foreach(BuildConfiguration *bc, configurations) {
         steps.append(bc->steps(BuildStep::Build));
+        // TODO: Verify that this is indeed what we want.
+        steps.append(bc->steps(BuildStep::Deploy));
+    }
 
     bool success = buildQueueAppend(steps);
     if (!success) {
diff --git a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
index 5d0b8e52268f2d533e7ae8cb49a7717dff700875..ff1138134fc7aea95163b8ea1adb858ed844c300 100644
--- a/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
+++ b/src/plugins/projectexplorer/buildsettingspropertiespage.cpp
@@ -250,6 +250,7 @@ void BuildSettingsWidget::updateBuildSettings()
     addSubWidget(generalConfigWidget->displayName(), generalConfigWidget);
 
     addSubWidget(tr("Build Steps"), new BuildStepsPage(m_target, BuildStep::Build));
+    addSubWidget(tr("Deploy Steps"), new BuildStepsPage(m_target, BuildStep::Deploy));
     addSubWidget(tr("Clean Steps"), new BuildStepsPage(m_target, BuildStep::Clean));
 
     QList<BuildConfigWidget *> subConfigWidgets = m_target->project()->subConfigWidgets();
diff --git a/src/plugins/projectexplorer/buildstep.h b/src/plugins/projectexplorer/buildstep.h
index 571710828ab84e8fefc7619bd5529bc8a11027e9..790646184f3073d6ed9e3cb5defccad8ddb4bde0 100644
--- a/src/plugins/projectexplorer/buildstep.h
+++ b/src/plugins/projectexplorer/buildstep.h
@@ -75,6 +75,7 @@ public:
     enum Type {
         Build = 0,
         Clean,
+        Deploy,
         LastStepType
     };
     Q_ENUMS(Type)
diff --git a/src/plugins/projectexplorer/buildstepspage.cpp b/src/plugins/projectexplorer/buildstepspage.cpp
index 54b9be9563b922c595dfc3dffa2de11adcabfb12..7b2bd3d8dd83b0ca4ae18ba69349000f7360ecce 100644
--- a/src/plugins/projectexplorer/buildstepspage.cpp
+++ b/src/plugins/projectexplorer/buildstepspage.cpp
@@ -83,10 +83,16 @@ void BuildStepsPage::updateSummary()
 
 QString BuildStepsPage::displayName() const
 {
-    if (m_type == BuildStep::Build)
+    switch(m_type) {
+    case BuildStep::Build:
         return tr("Build Steps");
-    else
+    case BuildStep::Deploy:
+        return tr("Deploy Steps");
+    case BuildStep::Clean:
         return tr("Clean Steps");
+    default:
+        return tr("Unknown Steps");
+    }
 }
 
 void BuildStepsPage::init(BuildConfiguration *bc)
@@ -295,7 +301,19 @@ void BuildStepsPage::setupUi()
     QHBoxLayout *hboxLayout = new QHBoxLayout();
     hboxLayout->setContentsMargins(0, 4, 0, 0);
     m_addButton = new QPushButton(this);
-    m_addButton->setText(m_type == BuildStep::Clean ? tr("Add Clean Step") :  tr("Add Build Step"));
+    switch (m_type) {
+    case BuildStep::Clean:
+        m_addButton->setText(tr("Add Clean Step"));
+        break;
+    case BuildStep::Build:
+        m_addButton->setText(tr("Add Build Step"));
+        break;
+    case BuildStep::Deploy:
+        m_addButton->setText(tr("Add Deploy Step"));
+        break;
+    default:
+        m_addButton->setText(tr("Add Step"));
+    }
     m_addButton->setMenu(new QMenu(this));
     hboxLayout->addWidget(m_addButton);
 
diff --git a/src/plugins/projectexplorer/userfileaccessor.cpp b/src/plugins/projectexplorer/userfileaccessor.cpp
index 4c86df6043a28d6133a45f751b1afda809c26811..e3a56fae9d4b2c9fe4fa9a481d52f5610a85b103 100644
--- a/src/plugins/projectexplorer/userfileaccessor.cpp
+++ b/src/plugins/projectexplorer/userfileaccessor.cpp
@@ -148,6 +148,23 @@ public:
     QVariantMap update(Project *project, const QVariantMap &map);
 };
 
+// Version 4 reflects the introduction of deploy steps
+class Version4Handler : public UserFileVersionHandler
+{
+public:
+    int userFileVersion() const
+    {
+        return 4;
+    }
+
+    QString displayUserFileVersion() const
+    {
+        return QLatin1String("2.2pre1");
+    }
+
+    QVariantMap update(Project *project, const QVariantMap &map);
+};
+
 //
 // Helper functions:
 //
@@ -218,6 +235,7 @@ UserFileAccessor::UserFileAccessor() :
     addVersionHandler(new Version1Handler);
     addVersionHandler(new Version2Handler);
     addVersionHandler(new Version3Handler);
+    addVersionHandler(new Version4Handler);
 }
 
 UserFileAccessor::~UserFileAccessor()
@@ -1010,3 +1028,78 @@ QVariantMap Version3Handler::update(Project *, const QVariantMap &map)
     }
     return result;
 }
+
+
+// -------------------------------------------------------------------------
+// Version4Handler
+// -------------------------------------------------------------------------
+
+// Move packaging steps from build steps into deploy steps
+QVariantMap Version4Handler::update(Project *, const QVariantMap &map)
+{
+    QVariantMap result;
+    QMapIterator<QString, QVariant> it(map);
+    while (it.hasNext()) {
+        it.next();
+        const QString &globalKey = it.key();
+        // check for target info
+        if (!globalKey.startsWith(QLatin1String("ProjectExplorer.Project.Target."))) {
+            result.insert(globalKey, it.value());
+            continue;
+        }
+        const QVariantMap &originalTarget = it.value().toMap();
+        // check for symbian and maemo device target
+        if (originalTarget.value(QLatin1String("ProjectExplorer.ProjectConfiguration.Id"))
+                != QLatin1String("Qt4ProjectManager.Target.S60DeviceTarget")
+            && originalTarget.value(QLatin1String("ProjectExplorer.ProjectConfiguration.Id"))
+                != QLatin1String("Qt4ProjectManager.Target.MaemoDeviceTarget"))
+        {
+            result.insert(globalKey, originalTarget);
+            continue;
+        }
+
+        QVariantMap newTarget;
+        QMapIterator<QString, QVariant> targetIt(originalTarget);
+        while (targetIt.hasNext()) {
+            targetIt.next();
+            const QString &targetKey = targetIt.key();
+            if (!targetKey.startsWith(QLatin1String("ProjectExplorer.Target.BuildConfiguration."))) {
+                newTarget.insert(targetKey, targetIt.value());
+                continue;
+            }
+
+            bool movedBs = false;
+            const QVariantMap &originalBc = targetIt.value().toMap();
+            QVariantMap newBc;
+            QMapIterator<QString, QVariant> bcIt(originalBc);
+            while(bcIt.hasNext()) {
+                bcIt.next();
+                const QString &bcKey = bcIt.key();
+                if (!bcKey.startsWith(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStep."))) {
+                    newBc.insert(bcKey, bcIt.value());
+                    continue;
+                }
+
+                const QVariantMap &buildStep = bcIt.value().toMap();
+                if ((buildStep.value(QLatin1String("ProjectExplorer.ProjectConfiguration.Id")).toString() ==
+                        QLatin1String("Qt4ProjectManager.S60SignBuildStep"))
+                    || (buildStep.value(QLatin1String("ProjectExplorer.ProjectConfiguration.Id")).toString() ==
+                        QLatin1String("Qt4ProjectManager.MaemoPackageCreationStep"))) {
+                    movedBs = true;
+                    newBc.insert(QLatin1String("ProjectExplorer.BuildConfiguration.DeployStep.0"), buildStep);
+                } else {
+                    newBc.insert(bcKey, buildStep);
+                }
+            }
+            if (movedBs) {
+                // adjust counts:
+                newBc.insert(QLatin1String("ProjectExplorer.BuildConfiguration.DeployStepsCount"), 1);
+                newBc.insert(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStepsCount"),
+                        newBc.value(QLatin1String("ProjectExplorer.BuildConfiguration.BuildStepsCount")).toInt() - 1);
+            }
+            newTarget.insert(targetKey, newBc);
+        }
+        result.insert(globalKey, newTarget);
+    }
+    return result;
+}
diff --git a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationfactory.cpp b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationfactory.cpp
index 38c7df3cb7535f0cf8fc451234403c1ebead8194..157e92fa86a4187379c274e34b8bce929875164c 100644
--- a/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationfactory.cpp
+++ b/src/plugins/qt4projectmanager/qt-maemo/maemopackagecreationfactory.cpp
@@ -105,22 +105,25 @@ BuildStep *MaemoPackageCreationFactory::restore(BuildConfiguration *parent,
 }
 
 bool MaemoPackageCreationFactory::canClone(BuildConfiguration *parent,
-                                           BuildStep::Type type, BuildStep *product) const
+                                           ProjectExplorer::BuildStep::Type type,
+                                           BuildStep *product) const
 {
     return canCreateInternally(parent, type, product->id());
 }
 
 BuildStep *MaemoPackageCreationFactory::clone(BuildConfiguration *parent,
-                                              BuildStep::Type type, BuildStep *product)
+                                              ProjectExplorer::BuildStep::Type type,
+                                              BuildStep *product)
 {
     Q_ASSERT(canClone(parent, type, product));
     return new MaemoPackageCreationStep(parent, static_cast<MaemoPackageCreationStep *>(product));
 }
 
 bool MaemoPackageCreationFactory::canCreateInternally(BuildConfiguration *parent,
-                                                      BuildStep::Type type, const QString &id) const
+                                                      ProjectExplorer::BuildStep::Type type,
+                                                      const QString &id) const
 {
-    return type == ProjectExplorer::BuildStep::Build
+    return type == ProjectExplorer::BuildStep::Deploy
         && id == MaemoPackageCreationStep::CreatePackageId
         && parent->target()->id() == Constants::MAEMO_DEVICE_TARGET_ID;
 }
diff --git a/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp b/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
index 095376112abc00e7d251f5f042cd0d400c7c31a2..1f99763b6b65ec7eaa43a2a74b27d8356d2ccd28 100644
--- a/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
+++ b/src/plugins/qt4projectmanager/qt-s60/s60createpackagestep.cpp
@@ -185,7 +185,7 @@ S60CreatePackageStepFactory::~S60CreatePackageStepFactory()
 
 bool S60CreatePackageStepFactory::canCreate(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type, const QString &id) const
 {
-    if (type != ProjectExplorer::BuildStep::Build)
+    if (type != ProjectExplorer::BuildStep::Deploy)
         return false;
     if (parent->target()->id() != Constants::S60_DEVICE_TARGET_ID)
         return false;
@@ -230,7 +230,7 @@ ProjectExplorer::BuildStep *S60CreatePackageStepFactory::restore(ProjectExplorer
 
 QStringList S60CreatePackageStepFactory::availableCreationIds(ProjectExplorer::BuildConfiguration *parent, ProjectExplorer::BuildStep::Type type) const
 {
-    if (type != ProjectExplorer::BuildStep::Build)
+    if (type != ProjectExplorer::BuildStep::Deploy)
         return QStringList();
     if (parent->target()->id() == Constants::S60_DEVICE_TARGET_ID)
         return QStringList() << QLatin1String(SIGN_BS_ID);
diff --git a/src/plugins/qt4projectmanager/qt4target.cpp b/src/plugins/qt4projectmanager/qt4target.cpp
index 990d62111bf9890656fe7e6e6bd3a92409f03b27..198e2e7eff276786aa2d4e955f6df9dccb1a9074 100644
--- a/src/plugins/qt4projectmanager/qt4target.cpp
+++ b/src/plugins/qt4projectmanager/qt4target.cpp
@@ -283,9 +283,9 @@ Qt4BuildConfiguration *Qt4Target::addQt4BuildConfiguration(QString displayName,
 
     if (id() == Constants::S60_DEVICE_TARGET_ID) {
         S60CreatePackageStep *packageStep = new S60CreatePackageStep(bc);
-        bc->insertStep(ProjectExplorer::BuildStep::Build, 2, packageStep);
+        bc->insertStep(ProjectExplorer::BuildStep::Deploy, 2, packageStep);
     } else if (id() == Constants::MAEMO_DEVICE_TARGET_ID) {
-        bc->insertStep(ProjectExplorer::BuildStep::Build, 2, new MaemoPackageCreationStep(bc));
+        bc->insertStep(ProjectExplorer::BuildStep::Deploy, 2, new MaemoPackageCreationStep(bc));
     }
 
     MakeStep* cleanStep = new MakeStep(bc);