diff --git a/src/plugins/qnx/blackberrydeployconfiguration.cpp b/src/plugins/qnx/blackberrydeployconfiguration.cpp
index 4f6e6a7a09bf144c57910b9b79d83a9e6cb0e494..d849bbaec36949de5787c7da34b595d9baaa0ef2 100644
--- a/src/plugins/qnx/blackberrydeployconfiguration.cpp
+++ b/src/plugins/qnx/blackberrydeployconfiguration.cpp
@@ -45,7 +45,8 @@ using namespace Qnx;
 using namespace Qnx::Internal;
 
 namespace {
-const char DEPLOYMENT_INFO_SETTING[] = "QNX.BlackBerry.DeploymentInfo";
+const char DEPLOYMENT_INFO_SETTING[] = "Qnx.BlackBerry.DeploymentInfo";
+const char DEPLOYMENT_INFO_KEY[]     = "Qnx.BlackBerry.DeployInformation";
 }
 
 BlackBerryDeployConfiguration::BlackBerryDeployConfiguration(ProjectExplorer::Target *parent)
@@ -109,6 +110,23 @@ QString BlackBerryDeployConfiguration::deviceName() const
     return device->displayName();
 }
 
+QVariantMap BlackBerryDeployConfiguration::toMap() const
+{
+    QVariantMap map(ProjectExplorer::DeployConfiguration::toMap());
+    map.insert(QLatin1String(DEPLOYMENT_INFO_KEY), deploymentInfo()->toMap());
+    return map;
+}
+
+bool BlackBerryDeployConfiguration::fromMap(const QVariantMap &map)
+{
+    if (!ProjectExplorer::DeployConfiguration::fromMap(map))
+        return false;
+
+    QVariantMap deployInfoMap = map.value(QLatin1String(DEPLOYMENT_INFO_KEY)).toMap();
+    deploymentInfo()->fromMap(deployInfoMap);
+    return true;
+}
+
 ProjectExplorer::DeployConfigurationWidget *BlackBerryDeployConfiguration::configurationWidget() const
 {
     return new BlackBerryDeployConfigurationWidget;
diff --git a/src/plugins/qnx/blackberrydeployconfiguration.h b/src/plugins/qnx/blackberrydeployconfiguration.h
index 1e9c772dbb6506770bb6363649702d47d987ae45..725374dcb638cb8c89ef536512250c78331c3166 100644
--- a/src/plugins/qnx/blackberrydeployconfiguration.h
+++ b/src/plugins/qnx/blackberrydeployconfiguration.h
@@ -62,9 +62,13 @@ public:
     QString password() const;
     QString deviceName() const;
 
+    QVariantMap toMap() const;
+
 protected:
     BlackBerryDeployConfiguration(ProjectExplorer::Target *parent, BlackBerryDeployConfiguration *source);
 
+    bool fromMap(const QVariantMap &map);
+
 private:
     void ctor();
 };
diff --git a/src/plugins/qnx/blackberrydeployinformation.cpp b/src/plugins/qnx/blackberrydeployinformation.cpp
index 0706bf555ed89ef19a72d7865a7d22cf7a7395c1..c65fc7c5353485e6f9912555040a6976ee7f274d 100644
--- a/src/plugins/qnx/blackberrydeployinformation.cpp
+++ b/src/plugins/qnx/blackberrydeployinformation.cpp
@@ -41,11 +41,21 @@
 using namespace Qnx;
 using namespace Qnx::Internal;
 
+namespace {
+const char COUNT_KEY[]      = "Qnx.BlackBerry.DeployInformationCount";
+const char DEPLOYINFO_KEY[] = "Qnx.BlackBerry.DeployInformation.%1";
+
+const char ENABLED_KEY[]        = "Qnx.BlackBerry.DeployInformation.Enabled";
+const char APPDESCRIPTOR_KEY[]  = "Qnx.BlackBerry.DeployInformation.AppDescriptor";
+const char PACKAGE_KEY[]        = "Qnx.BlackBerry.DeployInformation.Package";
+const char PROFILE_KEY[]        = "Qnx.BlackBerry.DeployInformation.ProFile";
+}
+
 BlackBerryDeployInformation::BlackBerryDeployInformation(Qt4ProjectManager::Qt4Project *project)
     : QAbstractTableModel(project)
     , m_project(project)
 {
-    connect(m_project, SIGNAL(proFilesEvaluated()), this, SLOT(initModel()));
+    connect(m_project, SIGNAL(proFilesEvaluated()), this, SLOT(updateModel()));
 }
 
 int BlackBerryDeployInformation::rowCount(const QModelIndex &parent) const
@@ -152,8 +162,78 @@ QList<BarPackageDeployInformation> BlackBerryDeployInformation::enabledPackages(
     return result;
 }
 
+QVariantMap BlackBerryDeployInformation::toMap() const
+{
+    QVariantMap outerMap;
+    outerMap[QLatin1String(COUNT_KEY)] = m_deployInformation.size();
+
+    for (int i = 0; i < m_deployInformation.size(); ++i) {
+        const BarPackageDeployInformation &deployInfo = m_deployInformation[i];
+
+        QVariantMap deployInfoMap;
+        deployInfoMap[QLatin1String(ENABLED_KEY)] = deployInfo.enabled;
+        deployInfoMap[QLatin1String(APPDESCRIPTOR_KEY)] = deployInfo.appDescriptorPath;
+        deployInfoMap[QLatin1String(PACKAGE_KEY)] = deployInfo.packagePath;
+        deployInfoMap[QLatin1String(PROFILE_KEY)] = deployInfo.proFilePath;
+
+        outerMap[QString::fromLatin1(DEPLOYINFO_KEY).arg(i)] = deployInfoMap;
+    }
+
+    return outerMap;
+}
+
+void BlackBerryDeployInformation::fromMap(const QVariantMap &map)
+{
+    beginResetModel();
+    m_deployInformation.clear();
+
+    int count = map.value(QLatin1String(COUNT_KEY)).toInt();
+    for (int i = 0; i < count; ++i) {
+        QVariantMap innerMap = map.value(QString::fromLatin1(DEPLOYINFO_KEY).arg(i)).toMap();
+
+        const bool enabled = innerMap.value(QLatin1String(ENABLED_KEY)).toBool();
+        const QString appDescriptorPath = innerMap.value(QLatin1String(APPDESCRIPTOR_KEY)).toString();
+        const QString packagePath = innerMap.value(QLatin1String(PACKAGE_KEY)).toString();
+        const QString proFilePath = innerMap.value(QLatin1String(PROFILE_KEY)).toString();
+
+        m_deployInformation << BarPackageDeployInformation(enabled, appDescriptorPath, packagePath, proFilePath);
+    }
+
+    endResetModel();
+}
+
+void BlackBerryDeployInformation::updateModel()
+{
+    if (m_deployInformation.isEmpty()) {
+        initModel();
+        return;
+    }
+
+    beginResetModel();
+    QList<BarPackageDeployInformation> keep;
+    QList<Qt4ProjectManager::Qt4ProFileNode *> appNodes = m_project->applicationProFiles();
+    foreach (Qt4ProjectManager::Qt4ProFileNode *node, appNodes) {
+        bool nodeFound = false;
+        for (int i = 0; i < m_deployInformation.size(); ++i) {
+            if (m_deployInformation[i].proFilePath == node->path()) {
+                keep << m_deployInformation[i];
+                nodeFound = true;
+                break;
+            }
+        }
+
+        if (!nodeFound)
+            keep << deployInformationFromNode(node);
+    }
+    m_deployInformation = keep;
+    endResetModel();
+}
+
 void BlackBerryDeployInformation::initModel()
 {
+    if (!m_deployInformation.isEmpty())
+        return;
+
     ProjectExplorer::Target *target = m_project->activeTarget();
     if (!target
             || !target->activeDeployConfiguration()
@@ -172,23 +252,28 @@ void BlackBerryDeployInformation::initModel()
     if (!rootNode || rootNode->parseInProgress()) // Can be null right after project creation by wizard.
         return;
 
-    disconnect(m_project, SIGNAL(proFilesEvaluated()), this, SLOT(initModel()));
+    disconnect(m_project, SIGNAL(proFilesEvaluated()), this, SLOT(updateModel()));
+
     beginResetModel();
     m_deployInformation.clear();
 
     QList<Qt4ProjectManager::Qt4ProFileNode *> appNodes = m_project->applicationProFiles();
-    foreach (Qt4ProjectManager::Qt4ProFileNode *node, appNodes) {
-        Qt4ProjectManager::TargetInformation ti = node->targetInformation();
+    foreach (Qt4ProjectManager::Qt4ProFileNode *node, appNodes)
+        m_deployInformation << deployInformationFromNode(node);
 
-        QFileInfo fi(node->path());
-        const QString appDescriptorPath = QDir::toNativeSeparators(fi.absolutePath() + QLatin1String("/bar-descriptor.xml"));
-        QString barPackagePath;
-        if (!ti.buildDir.isEmpty())
-            barPackagePath = QDir::toNativeSeparators(ti.buildDir + QLatin1Char('/') + ti.target + QLatin1String(".bar"));
+    endResetModel();
+    connect(m_project, SIGNAL(proFilesEvaluated()), this, SLOT(updateModel()));
+}
 
-        m_deployInformation << BarPackageDeployInformation(true, appDescriptorPath, barPackagePath, node->path());
-    }
+BarPackageDeployInformation BlackBerryDeployInformation::deployInformationFromNode(Qt4ProjectManager::Qt4ProFileNode *node) const
+{
+    Qt4ProjectManager::TargetInformation ti = node->targetInformation();
 
-    endResetModel();
-    connect(m_project, SIGNAL(proFilesEvaluated()), SLOT(initModel()));
+    QFileInfo fi(node->path());
+    const QString appDescriptorPath = QDir::toNativeSeparators(fi.absolutePath() + QLatin1String("/bar-descriptor.xml"));
+    QString barPackagePath;
+    if (!ti.buildDir.isEmpty())
+        barPackagePath = QDir::toNativeSeparators(ti.buildDir + QLatin1Char('/') + ti.target + QLatin1String(".bar"));
+
+    return BarPackageDeployInformation(true, appDescriptorPath, barPackagePath, node->path());
 }
diff --git a/src/plugins/qnx/blackberrydeployinformation.h b/src/plugins/qnx/blackberrydeployinformation.h
index 36d6e80ac954934fad84084d676f2603743d9bcc..3bf53e9dc4972002ef7081c1f7fb55e3aa28b8a8 100644
--- a/src/plugins/qnx/blackberrydeployinformation.h
+++ b/src/plugins/qnx/blackberrydeployinformation.h
@@ -34,6 +34,7 @@
 #include <QAbstractTableModel>
 
 namespace Qt4ProjectManager {
+class Qt4ProFileNode;
 class Qt4Project;
 }
 
@@ -74,8 +75,11 @@ public:
 
     QList<BarPackageDeployInformation> enabledPackages() const;
 
+    QVariantMap toMap() const;
+    void fromMap(const QVariantMap &map);
+
 private slots:
-    void initModel();
+    void updateModel();
 
 private:
     enum Columns {
@@ -85,6 +89,9 @@ private:
         ColumnCount // Always have last
     };
 
+    void initModel();
+    BarPackageDeployInformation deployInformationFromNode(Qt4ProjectManager::Qt4ProFileNode *node) const;
+
     Qt4ProjectManager::Qt4Project *m_project;
 
     QList<BarPackageDeployInformation> m_deployInformation;