diff --git a/src/plugins/projectexplorer/environmenteditmodel.cpp b/src/plugins/projectexplorer/environmenteditmodel.cpp
index e1e52ab2e77305970ffe2ebfcffb37de95b70979..e59012669fd11ccbd26825063dc941f001f2819c 100644
--- a/src/plugins/projectexplorer/environmenteditmodel.cpp
+++ b/src/plugins/projectexplorer/environmenteditmodel.cpp
@@ -178,6 +178,14 @@ int EnvironmentModel::findInChangesInsertPosition(const QString &name) const
     return m_items.size();
 }
 
+QModelIndex EnvironmentModel::index(const QString &name)
+{
+    int row = findInResult(name);
+    if (row == -1)
+        return QModelIndex();
+    return index(row, 0);
+}
+
 int EnvironmentModel::findInResult(const QString &name) const
 {
     Environment::const_iterator it;
@@ -230,6 +238,7 @@ bool EnvironmentModel::setData(const QModelIndex &index, const QVariant &value,
                 removeVariable(old.name);
             old.name = newName;
             addVariable(old);
+            emit renamedVariable(newName);
             return true;
         } else if (index.column() == 1) {
             const QString &name = indexToVariable(index);
@@ -364,6 +373,9 @@ EnvironmentWidget::EnvironmentWidget(QWidget *parent, QWidget *additionalDetails
     connect(m_model, SIGNAL(userChangesChanged()),
             this, SIGNAL(userChangesChanged()));
 
+    connect(m_model, SIGNAL(renamedVariable(QString)),
+            this, SLOT(renamedVariable(QString)));
+
     QVBoxLayout *vbox = new QVBoxLayout(this);
     vbox->setContentsMargins(0, 0, 0, 0);
 
@@ -439,6 +451,13 @@ EnvironmentWidget::~EnvironmentWidget()
     m_model = 0;
 }
 
+void EnvironmentWidget::renamedVariable(const QString& name)
+{
+    QModelIndex idx = m_model->index(name);
+    m_environmentTreeView->setCurrentIndex(idx);
+    m_environmentTreeView->setFocus();
+}
+
 void EnvironmentWidget::setBaseEnvironment(const ProjectExplorer::Environment &env)
 {
     m_model->setBaseEnvironment(env);
diff --git a/src/plugins/projectexplorer/environmenteditmodel.h b/src/plugins/projectexplorer/environmenteditmodel.h
index a8415768b3f1931e9ade80301fadcbbc1ffadba0..38b487c16678bc793c76fc5fd27152c4c6f6136d 100644
--- a/src/plugins/projectexplorer/environmenteditmodel.h
+++ b/src/plugins/projectexplorer/environmenteditmodel.h
@@ -75,18 +75,27 @@ public:
     bool isInBaseEnvironment(const QString &name);
     QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const;
     QString indexToVariable(const QModelIndex &index) const;
+    QModelIndex index(const QString &name);
     bool changes(const QString &key) const;
-
     QList<EnvironmentItem> userChanges() const;
     void setUserChanges(QList<EnvironmentItem> list);
+
 signals:
     void userChangesChanged();
+    /// Strictly speaking this is a hack to work around
+    /// the problem that we don't emit the right signals
+    /// on editing a variable
+    /// Don't try to fix that with out consulting me
+    /// In short it's impossible to emit the right signals
+    /// and to ensure that the model is in a consistent
+    /// state at each signal emission
+    void renamedVariable(const QString &newName);
 private:
     void updateResultEnvironment();
     int findInChanges(const QString &name) const;
-    int findInResult(const QString &name) const;
     int findInChangesInsertPosition(const QString &name) const;
     int findInResultInsertPosition(const QString &name) const;
+    int findInResult(const QString &name) const;
 
     ProjectExplorer::Environment m_baseEnvironment;
     ProjectExplorer::Environment m_resultEnvironment;
@@ -119,6 +128,7 @@ private slots:
     void unsetEnvironmentButtonClicked();
     void environmentCurrentIndexChanged(const QModelIndex &current, const QModelIndex &previous);
     void updateSummaryText();
+    void renamedVariable(const QString &name);
 
 private:
     EnvironmentModel *m_model;
diff --git a/src/plugins/qt4projectmanager/qtversionmanager.h b/src/plugins/qt4projectmanager/qtversionmanager.h
index 5300ad9e0ac11b7fbfbc7e4667fce911d61fdae6..ec49b3d792938367bb9c4dd3dc55c7b7740b67cb 100644
--- a/src/plugins/qt4projectmanager/qtversionmanager.h
+++ b/src/plugins/qt4projectmanager/qtversionmanager.h
@@ -210,7 +210,8 @@ public:
     void removeVersion(QtVersion *version);
 
     // Static Methods
-    static QPair<QtVersion::QmakeBuildConfigs, QStringList> scanMakeFile(const QString &directory, QtVersion::QmakeBuildConfigs defaultBuildConfig);
+    static QPair<QtVersion::QmakeBuildConfigs, QStringList> scanMakeFile(const QString &directory,
+                                                                         QtVersion::QmakeBuildConfigs defaultBuildConfig);
     static QString findQMakeBinaryFromMakefile(const QString &directory);
 signals:
     void defaultQtVersionChanged();
@@ -225,8 +226,12 @@ private:
     static QString findQMakeLine(const QString &directory);
     static QString trimLine(const QString line);
     static QStringList splitLine(const QString &line);
-    static void parseParts(const QStringList &parts, QList<QMakeAssignment> *assignments, QList<QMakeAssignment> *afterAssignments, QStringList *additionalArguments);
-    static QtVersion::QmakeBuildConfigs qmakeBuildConfigFromCmdArgs(QList<QMakeAssignment> *assignments, QtVersion::QmakeBuildConfigs defaultBuildConfig);
+    static void parseParts(const QStringList &parts,
+                           QList<QMakeAssignment> *assignments,
+                           QList<QMakeAssignment> *afterAssignments,
+                           QStringList *additionalArguments);
+    static QtVersion::QmakeBuildConfigs qmakeBuildConfigFromCmdArgs(QList<QMakeAssignment> *assignments,
+                                                                    QtVersion::QmakeBuildConfigs defaultBuildConfig);
     // Used by QtOptionsPage
     void setNewQtVersions(QList<QtVersion *> newVersions, int newDefaultVersion);
     // Used by QtVersion