diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
index eb7115d7a5bcec591bdcb3588b3c76024683311d..6a22d4b8494b5c4d621b05aad6726bea3d6f2ee6 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.cpp
@@ -95,6 +95,14 @@ ProjectExplorer::Environment CMakeBuildConfiguration::baseEnvironment() const
     return env;
 }
 
+QString CMakeBuildConfiguration::baseEnvironmentText() const
+{
+    if (useSystemEnvironment())
+        return tr("System Environment");
+    else
+        return tr("Clear Environment");
+}
+
 ProjectExplorer::Environment CMakeBuildConfiguration::environment() const
 {
     ProjectExplorer::Environment env = baseEnvironment();
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
index bdd9765bd6e07e90f9fba7dd5265db1e3906d5c8..5e424334c452f0893e38ecaad3bf6e9031ded3f4 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakebuildconfiguration.h
@@ -51,6 +51,7 @@ public:
 
     ProjectExplorer::Environment environment() const;
     ProjectExplorer::Environment baseEnvironment() const;
+    QString baseEnvironmentText() const;
     void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff);
     QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const;
     bool useSystemEnvironment() const;
diff --git a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp
index 581573377742a7c2690d11a61d939884fd57aa07..ce0c808532540be400acf3f7a6a7f5cdfdab6f81 100644
--- a/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakebuildenvironmentwidget.cpp
@@ -80,6 +80,7 @@ void CMakeBuildEnvironmentWidget::init(ProjectExplorer::BuildConfiguration *bc)
 
     m_clearSystemEnvironmentCheckBox->setChecked(!m_buildConfiguration->useSystemEnvironment());
     m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment());
+    m_buildEnvironmentWidget->setBaseEnvironmentText(m_buildConfiguration->baseEnvironmentText());
     m_buildEnvironmentWidget->setUserChanges(m_buildConfiguration->userEnvironmentChanges());
     m_buildEnvironmentWidget->updateButtons();
 }
@@ -93,9 +94,11 @@ void CMakeBuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool che
 {
     m_buildConfiguration->setUseSystemEnvironment(!checked);
     m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment());
+    m_buildEnvironmentWidget->setBaseEnvironmentText(m_buildConfiguration->baseEnvironmentText());
 }
 
 void CMakeBuildEnvironmentWidget::environmentChanged()
 {
     m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment());
+    m_buildEnvironmentWidget->setBaseEnvironmentText(m_buildConfiguration->baseEnvironmentText());
 }
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
index 0933ae548c1baa869b7a9900a82c24162b75c13d..c68f6b3015c91720ece8e47369bdb1727bc5dfc3 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.cpp
@@ -195,6 +195,18 @@ ProjectExplorer::Environment CMakeRunConfiguration::baseEnvironment() const
     return env;
 }
 
+QString CMakeRunConfiguration::baseEnvironmentText() const
+{
+    if (m_baseEnvironmentBase == CMakeRunConfiguration::CleanEnvironmentBase) {
+        return tr("Clean Environment");
+    } else  if (m_baseEnvironmentBase == CMakeRunConfiguration::SystemEnvironmentBase) {
+        return tr("System Environment");
+    } else  if (m_baseEnvironmentBase == CMakeRunConfiguration::BuildEnvironmentBase) {
+        return tr("Build Environment");
+    }
+    return QString();
+}
+
 void CMakeRunConfiguration::setBaseEnvironmentBase(BaseEnvironmentBase env)
 {
     if (m_baseEnvironmentBase == env)
@@ -301,6 +313,7 @@ CMakeRunConfigurationWidget::CMakeRunConfigurationWidget(CMakeRunConfiguration *
 
     m_environmentWidget = new ProjectExplorer::EnvironmentWidget(this, baseEnvironmentWidget);
     m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(m_cmakeRunConfiguration->baseEnvironmentText());
     m_environmentWidget->setUserChanges(m_cmakeRunConfiguration->userEnvironmentChanges());
 
     vbx->addWidget(m_environmentWidget);
@@ -358,6 +371,7 @@ void CMakeRunConfigurationWidget::baseEnvironmentComboBoxChanged(int index)
     m_cmakeRunConfiguration->setBaseEnvironmentBase(CMakeRunConfiguration::BaseEnvironmentBase(index));
 
     m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(m_cmakeRunConfiguration->baseEnvironmentText());
     m_ignoreChange = false;
 }
 
@@ -368,6 +382,7 @@ void CMakeRunConfigurationWidget::baseEnvironmentChanged()
 
     m_baseEnvironmentComboBox->setCurrentIndex(m_cmakeRunConfiguration->baseEnvironmentBase());
     m_environmentWidget->setBaseEnvironment(m_cmakeRunConfiguration->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(m_cmakeRunConfiguration->baseEnvironmentText());
 }
 
 void CMakeRunConfigurationWidget::userEnvironmentChangesChanged()
diff --git a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
index 1e087239f72584d502241c4cf2a4a465e469ee0c..3e646490abb86dfcaaf596ddac0208464e27e951 100644
--- a/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
+++ b/src/plugins/cmakeprojectmanager/cmakerunconfiguration.h
@@ -90,6 +90,8 @@ private:
     void setBaseEnvironmentBase(BaseEnvironmentBase env);
     BaseEnvironmentBase baseEnvironmentBase() const;
     ProjectExplorer::Environment baseEnvironment() const;
+    QString baseEnvironmentText() const;
+
     void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff);
     QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const;
 
diff --git a/src/plugins/coreplugin/actionmanager/command.cpp b/src/plugins/coreplugin/actionmanager/command.cpp
index 653009203b78866386d24fed6c1eab8c60f6c7c2..4c7b2c3f303bbbc11152ac8edf7acd64e123ac1d 100644
--- a/src/plugins/coreplugin/actionmanager/command.cpp
+++ b/src/plugins/coreplugin/actionmanager/command.cpp
@@ -37,6 +37,7 @@
 
 #include <QtGui/QAction>
 #include <QtGui/QShortcut>
+#include <QtGui/QMainWindow>
 
 /*!
     \class Core::Command
@@ -424,8 +425,11 @@ QKeySequence Action::keySequence() const
 
 OverrideableAction::OverrideableAction(int id)
     : Action(id), m_currentAction(0), m_active(false),
-    m_contextInitialized(false)
+    m_contextInitialized(false),
+    m_dummyShortcutEater(this)
 {
+    Core::ICore::instance()->mainWindow()->addAction(&m_dummyShortcutEater);
+    m_dummyShortcutEater.setEnabled(false);
 }
 
 void OverrideableAction::setAction(QAction *action)
@@ -465,9 +469,11 @@ bool OverrideableAction::setCurrentContext(const QList<int> &context)
         m_active = true;
         return true;
     }
+    // no active/delegate action, "visible" action is not enabled/visible
     if (hasAttribute(CA_Hide))
         m_action->setVisible(false);
     m_action->setEnabled(false);
+    m_dummyShortcutEater.setEnabled(false);
     m_active = false;
     return false;
 }
@@ -521,6 +527,9 @@ void OverrideableAction::actionChanged()
 
     m_action->setEnabled(m_currentAction->isEnabled());
     m_action->setVisible(m_currentAction->isVisible());
+
+    m_dummyShortcutEater.setShortcuts(m_action->shortcuts());
+    m_dummyShortcutEater.setEnabled(!m_action->isEnabled());
 }
 
 bool OverrideableAction::isActive() const
diff --git a/src/plugins/coreplugin/actionmanager/command_p.h b/src/plugins/coreplugin/actionmanager/command_p.h
index 176866dfeeb7a3ffc48621f5c8188a591e661922..1c89fd7b7fb0af5bcd0a9107c2918f58da4a7941 100644
--- a/src/plugins/coreplugin/actionmanager/command_p.h
+++ b/src/plugins/coreplugin/actionmanager/command_p.h
@@ -153,6 +153,7 @@ private:
     QMap<int, QPointer<QAction> > m_contextActionMap;
     bool m_active;
     bool m_contextInitialized;
+    QAction m_dummyShortcutEater;
 };
 
 } // namespace Internal
diff --git a/src/plugins/coreplugin/editmode.cpp b/src/plugins/coreplugin/editmode.cpp
index a02c434cd6d286a6ce1871fb630cb32a5f512c04..8a6fef9569edf16c791d077a73da8d28c22f7e6d 100644
--- a/src/plugins/coreplugin/editmode.cpp
+++ b/src/plugins/coreplugin/editmode.cpp
@@ -68,7 +68,7 @@ EditMode::EditMode(EditorManager *editorManager) :
     MiniSplitter *splitter = new MiniSplitter;
     splitter->setOrientation(Qt::Vertical);
     splitter->insertWidget(0, rightPaneSplitter);
-    splitter->insertWidget(1, new Core::OutputPanePlaceHolder(this));
+    splitter->insertWidget(1, new Core::OutputPanePlaceHolder(this, splitter));
     splitter->setStretchFactor(0, 3);
     splitter->setStretchFactor(1, 0);
 
diff --git a/src/plugins/coreplugin/outputpane.cpp b/src/plugins/coreplugin/outputpane.cpp
index 40ade6d492dd8a0c9c930ef50fd260d42a092449..6f1541b7db5b5be5f2af2ce725b5332a25855cf3 100644
--- a/src/plugins/coreplugin/outputpane.cpp
+++ b/src/plugins/coreplugin/outputpane.cpp
@@ -43,6 +43,7 @@
 #include <extensionsystem/pluginmanager.h>
 
 #include <utils/styledbar.h>
+#include <utils/qtcassert.h>
 
 #include <QtCore/QDebug>
 
@@ -51,6 +52,7 @@
 #include <QtGui/QComboBox>
 #include <QtGui/QFocusEvent>
 #include <QtGui/QHBoxLayout>
+#include <QtGui/QSplitter>
 #include <QtGui/QMenu>
 #include <QtGui/QPainter>
 #include <QtGui/QToolButton>
@@ -61,9 +63,10 @@ using namespace Core::Internal;
 
 OutputPanePlaceHolder *OutputPanePlaceHolder::m_current = 0;
 
-OutputPanePlaceHolder::OutputPanePlaceHolder(Core::IMode *mode, QWidget *parent)
+OutputPanePlaceHolder::OutputPanePlaceHolder(Core::IMode *mode, QSplitter* parent)
    : QWidget(parent), m_mode(mode), m_closeable(true)
 {
+    m_splitter = parent;
     setVisible(false);
     setLayout(new QVBoxLayout);
     QSizePolicy sp;
@@ -111,6 +114,40 @@ void OutputPanePlaceHolder::currentModeChanged(Core::IMode *mode)
     }
 }
 
+void OutputPanePlaceHolder::maximizeOrMinimize(bool maximize)
+{
+    if (!m_splitter)
+        return;
+    int idx = m_splitter->indexOf(this);
+    if (idx < 0)
+        return;
+
+    QList<int> sizes = m_splitter->sizes();
+
+    if (maximize) {
+        int sum;
+        foreach(int s, sizes)
+            sum += s;
+        for (int i = 0; i < sizes.count(); ++i) {
+            sizes[i] = 32;
+        }
+        sizes[idx] = sum - (sizes.count()-1) * 32;
+    } else {
+        int target = sizeHint().height();
+        int space = sizes[idx] - target;
+        if (space > 0) {
+            for (int i = 0; i < sizes.count(); ++i) {
+                sizes[i] += space / (sizes.count()-1);
+            }
+            sizes[idx] = target;
+        }
+    }
+
+    m_splitter->setSizes(sizes);
+
+}
+
+
 ////
 // OutputPaneManager
 ////
@@ -138,6 +175,8 @@ void OutputPaneManager::updateStatusButtons(bool visible)
     int idx = m_widgetComboBox->itemData(m_widgetComboBox->currentIndex()).toInt();
     if (m_buttons.value(idx))
         m_buttons.value(idx)->setChecked(visible);
+    m_minMaxButton->setVisible(OutputPanePlaceHolder::m_current
+                               && OutputPanePlaceHolder::m_current->canMaximizeOrMinimize());
 }
 
 OutputPaneManager::OutputPaneManager(QWidget *parent) :
@@ -145,6 +184,8 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
     m_widgetComboBox(new QComboBox),
     m_clearButton(new QToolButton),
     m_closeButton(new QToolButton),
+    m_minMaxAction(0),
+    m_minMaxButton(new QToolButton),
     m_nextAction(0),
     m_prevAction(0),
     m_lastIndex(-1),
@@ -168,6 +209,10 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
     m_prevAction->setText(tr("Previous Item"));
     connect(m_prevAction, SIGNAL(triggered()), this, SLOT(slotPrev()));
 
+    m_minMaxAction = new QAction(this);
+    m_minMaxAction->setText(tr("Minimize/Maximize Output Pane"));
+    m_minMaxButton->setArrowType(Qt::UpArrow);
+
     m_closeButton->setIcon(QIcon(":/core/images/closebutton.png"));
     connect(m_closeButton, SIGNAL(clicked()), this, SLOT(slotHide()));
 
@@ -185,6 +230,7 @@ OutputPaneManager::OutputPaneManager(QWidget *parent) :
     m_nextToolButton = new QToolButton;
     toolLayout->addWidget(m_nextToolButton);
     toolLayout->addWidget(m_opToolBarWidgets);
+    toolLayout->addWidget(m_minMaxButton);
     toolLayout->addWidget(m_closeButton);
     mainlayout->addWidget(m_toolBar);
     mainlayout->addWidget(m_outputWidgetPane, 10);
@@ -248,6 +294,12 @@ void OutputPaneManager::init()
     cmd->setDefaultKeySequence(QKeySequence("F6"));
     mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
 
+    cmd = am->registerAction(m_minMaxAction, "Coreplugin.OutputPane.minmax", globalcontext);
+    cmd->setDefaultKeySequence(QKeySequence("Ctrl+9"));
+    mpanes->addAction(cmd, "Coreplugin.OutputPane.ActionsGroup");
+    m_minMaxButton->setDefaultAction(cmd->action());
+    connect(m_minMaxAction, SIGNAL(triggered()), this, SLOT(slotMinMax()));
+
     QAction *sep = new QAction(this);
     sep->setSeparator(true);
     cmd = am->registerAction(sep, QLatin1String("Coreplugin.OutputPane.Sep"), globalcontext);
@@ -353,6 +405,18 @@ void OutputPaneManager::shortcutTriggered()
     }
 }
 
+
+void OutputPaneManager::slotMinMax()
+{
+    QTC_ASSERT(OutputPanePlaceHolder::m_current, return);
+
+    if (!OutputPanePlaceHolder::m_current->isVisible()) // easier than disabling/enabling the action
+        return;
+    bool maximize = m_minMaxButton->arrowType() == Qt::UpArrow;
+    OutputPanePlaceHolder::m_current->maximizeOrMinimize(maximize);
+    m_minMaxButton->setArrowType(maximize ? Qt::DownArrow : Qt::UpArrow);
+}
+
 void OutputPaneManager::buttonTriggered()
 {
     QPushButton *button = qobject_cast<QPushButton *>(sender());
diff --git a/src/plugins/coreplugin/outputpane.h b/src/plugins/coreplugin/outputpane.h
index 1132ee970af86dc491c15669efa3a41c4b53253f..b1e8c2772ac034877224688a0646034d2f6b6fee 100644
--- a/src/plugins/coreplugin/outputpane.h
+++ b/src/plugins/coreplugin/outputpane.h
@@ -42,6 +42,7 @@ class QComboBox;
 class QToolButton;
 class QStackedWidget;
 class QMenu;
+class QSplitter;
 QT_END_NAMESPACE
 
 namespace Core {
@@ -60,16 +61,19 @@ class CORE_EXPORT OutputPanePlaceHolder : public QWidget
     friend class Core::Internal::OutputPaneManager; // needs to set m_visible and thus access m_current
     Q_OBJECT
 public:
-    OutputPanePlaceHolder(Core::IMode *mode, QWidget *parent = 0);
+    OutputPanePlaceHolder(Core::IMode *mode, QSplitter *parent = 0);
     ~OutputPanePlaceHolder();
     void setCloseable(bool b);
     bool closeable();
     static OutputPanePlaceHolder *getCurrent() { return m_current; }
+    inline bool canMaximizeOrMinimize() const { return m_splitter != 0; }
+    void maximizeOrMinimize(bool maximize);
 
 private slots:
     void currentModeChanged(Core::IMode *);
 private:
     Core::IMode *m_mode;
+    QSplitter *m_splitter;
     bool m_closeable;
     static OutputPanePlaceHolder* m_current;
 };
@@ -93,6 +97,7 @@ public slots:
     void slotNext();
     void slotPrev();
     void shortcutTriggered();
+    void slotMinMax();
 
 protected:
     void focusInEvent(QFocusEvent *e);
@@ -122,6 +127,9 @@ private:
     QToolButton *m_clearButton;
     QToolButton *m_closeButton;
 
+    QAction *m_minMaxAction;
+    QToolButton *m_minMaxButton;
+
     QAction *m_nextAction;
     QAction *m_prevAction;
     QToolButton *m_prevToolButton;
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index 711b557f0382c5ea43d0df8bfe7c62a3f2902c32..bcc861b577764af1eaea6e20e44cab71c2cad1c3 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -79,11 +79,6 @@ static inline QString msgLogParsingFailed()
     return CVSPlugin::tr("Parsing of the log output failed");
 }
 
-// Timeout for normal output commands
-enum { cvsShortTimeOut = 10000 };
-// Timeout for submit, update
-enum { cvsLongTimeOut = 120000 };
-
 static const char * const CMD_ID_CVS_MENU    = "CVS.Menu";
 static const char * const CMD_ID_ADD                = "CVS.Add";
 static const char * const CMD_ID_DELETE_FILE        = "CVS.Delete";
@@ -434,7 +429,7 @@ void CVSPlugin::cvsDiff(const QString &workingDir, const QStringList &files)
 
     // CVS returns the diff exit code (1 if files differ), which is
     // undistinguishable from a "file not found" error, unfortunately.
-    const CVSResponse response = runCVS(workingDir, args, cvsShortTimeOut, false, codec);
+    const CVSResponse response = runCVS(workingDir, args, m_settings.timeOutMS(), false, codec);
     switch (response.result) {
     case CVSResponse::NonNullExitCode:
     case CVSResponse::Ok:
@@ -518,7 +513,7 @@ void CVSPlugin::revertCurrentFile()
     QTC_ASSERT(state.hasFile(), return)
     QStringList args;
     args << QLatin1String("diff") << state.relativeCurrentFile();
-    const CVSResponse diffResponse = runCVS(state.currentFileTopLevel(), args, cvsShortTimeOut, false);
+    const CVSResponse diffResponse = runCVS(state.currentFileTopLevel(), args, m_settings.timeOutMS(), false);
     switch (diffResponse.result) {
     case CVSResponse::Ok:
         return; // Not modified, diff exit code 0
@@ -539,7 +534,7 @@ void CVSPlugin::revertCurrentFile()
     // revert
     args.clear();
     args << QLatin1String("update") << QLatin1String("-C") << state.relativeCurrentFile();
-    const CVSResponse revertResponse = runCVS(state.currentFileTopLevel(), args, cvsShortTimeOut, true);
+    const CVSResponse revertResponse = runCVS(state.currentFileTopLevel(), args, m_settings.timeOutMS(), true);
     if (revertResponse.result == CVSResponse::Ok) {
         fcb.setModifiedReload(true);
         cvsVersionControl()->emitFilesChanged(QStringList(state.currentFile()));
@@ -589,7 +584,7 @@ void CVSPlugin::startCommit(const QString &workingDir, const QStringList &files)
     // We need the "Examining <subdir>" stderr output to tell
     // where we are, so, have stdout/stderr channels merged.
     QStringList args = QStringList(QLatin1String("status"));
-    const CVSResponse response = runCVS(workingDir, args, cvsShortTimeOut, false, 0, true);
+    const CVSResponse response = runCVS(workingDir, args, m_settings.timeOutMS(), false, 0, true);
     if (response.result != CVSResponse::Ok)
         return;
     // Get list of added/modified/deleted files and purge out undesired ones
@@ -638,7 +633,7 @@ bool CVSPlugin::commit(const QString &messageFile,
     QStringList args = QStringList(QLatin1String("commit"));
     args << QLatin1String("-F") << messageFile;
     args.append(fileList);
-    const CVSResponse response = runCVS(m_commitRepository, args, cvsLongTimeOut, true);
+    const CVSResponse response = runCVS(m_commitRepository, args, m_settings.longTimeOutMS(), true);
     return response.result == CVSResponse::Ok ;
 }
 
@@ -658,7 +653,7 @@ void CVSPlugin::filelog(const QString &workingDir, const QStringList &files)
     QStringList args;
     args << QLatin1String("log");
     args.append(files);
-    const CVSResponse response = runCVS(workingDir, args, cvsShortTimeOut, false, codec);
+    const CVSResponse response = runCVS(workingDir, args, m_settings.timeOutMS(), false, codec);
     if (response.result != CVSResponse::Ok)
         return;
 
@@ -683,7 +678,7 @@ void CVSPlugin::updateProject()
    QStringList args(QLatin1String("update"));
    args.push_back(QLatin1String("-dR"));
    args.append(state.relativeCurrentProject());
-   const CVSResponse response = runCVS(state.currentProjectTopLevel(), args, cvsLongTimeOut, true);
+   const CVSResponse response = runCVS(state.currentProjectTopLevel(), args, m_settings.longTimeOutMS(), true);
    if (response.result == CVSResponse::Ok)
        cvsVersionControl()->emitRepositoryChanged(state.currentProjectTopLevel());
 }
@@ -703,7 +698,7 @@ void CVSPlugin::annotate(const QString &workingDir, const QString &file)
     const QString source = VCSBase::VCSBaseEditor::getSource(workingDir, file);
     QStringList args;
     args << QLatin1String("annotate") << file;
-    const CVSResponse response = runCVS(workingDir, args, cvsShortTimeOut, false, codec);
+    const CVSResponse response = runCVS(workingDir, args, m_settings.timeOutMS(), false, codec);
     if (response.result != CVSResponse::Ok)
         return;
 
@@ -729,7 +724,7 @@ void CVSPlugin::projectStatus()
     QTC_ASSERT(state.hasProject(), return)
     QStringList args;
     args << QLatin1String("status") << state.relativeCurrentProject();
-    const CVSResponse response = runCVS(state.currentProjectTopLevel(), args, cvsShortTimeOut, false);
+    const CVSResponse response = runCVS(state.currentProjectTopLevel(), args, m_settings.timeOutMS(), false);
     if (response.result == CVSResponse::Ok)
         showOutputInEditor(tr("Project status"), response.stdOut, VCSBase::RegularCommandOutput, state.currentProjectTopLevel(), 0);
 }
@@ -787,7 +782,7 @@ bool CVSPlugin::describe(const QString &toplevel, const QString &file, const
     // Run log to obtain commit id and details
     QStringList args;
     args << QLatin1String("log") << (QLatin1String("-r") + changeNr) << file;
-    const CVSResponse logResponse = runCVS(toplevel, args, cvsShortTimeOut, false);
+    const CVSResponse logResponse = runCVS(toplevel, args, m_settings.timeOutMS(), false);
     if (logResponse.result != CVSResponse::Ok) {
         *errorMessage = logResponse.message;
         return false;
@@ -808,7 +803,7 @@ bool CVSPlugin::describe(const QString &toplevel, const QString &file, const
         args.clear();
         args << QLatin1String("log") << QLatin1String("-d") << (dateS  + QLatin1Char('<') + nextDayS);
 
-        const CVSResponse repoLogResponse = runCVS(toplevel, args, cvsLongTimeOut, false);
+        const CVSResponse repoLogResponse = runCVS(toplevel, args, m_settings.longTimeOutMS(), false);
         if (repoLogResponse.result != CVSResponse::Ok) {
             *errorMessage = repoLogResponse.message;
             return false;
@@ -844,7 +839,7 @@ bool CVSPlugin::describe(const QString &repositoryPath,
         // Run log
         QStringList args(QLatin1String("log"));
         args << (QLatin1String("-r") + it->revisions.front().revision) << it->file;
-        const CVSResponse logResponse = runCVS(repositoryPath, args, cvsShortTimeOut, false);
+        const CVSResponse logResponse = runCVS(repositoryPath, args, m_settings.timeOutMS(), false);
         if (logResponse.result != CVSResponse::Ok) {
             *errorMessage =  logResponse.message;
             return false;
@@ -860,7 +855,7 @@ bool CVSPlugin::describe(const QString &repositoryPath,
             args << m_settings.cvsDiffOptions << QLatin1String("-r") << previousRev
                     << QLatin1String("-r") << it->revisions.front().revision
                     << it->file;
-            const CVSResponse diffResponse = runCVS(repositoryPath, args, cvsShortTimeOut, false, codec);
+            const CVSResponse diffResponse = runCVS(repositoryPath, args, m_settings.timeOutMS(), false, codec);
             switch (diffResponse.result) {
             case CVSResponse::Ok:
             case CVSResponse::NonNullExitCode: // Diff exit code != 0
@@ -1037,7 +1032,7 @@ bool CVSPlugin::vcsAdd(const QString &workingDir, const QString &rawFileName)
 {
     QStringList args;
     args << QLatin1String("add") << rawFileName;
-    const CVSResponse response = runCVS(workingDir, args, cvsShortTimeOut, true);
+    const CVSResponse response = runCVS(workingDir, args, m_settings.timeOutMS(), true);
     return response.result == CVSResponse::Ok;
 }
 
@@ -1045,7 +1040,7 @@ bool CVSPlugin::vcsDelete(const QString &workingDir, const QString &rawFileName)
 {
     QStringList args;
     args << QLatin1String("remove") << QLatin1String("-f") << rawFileName;
-    const CVSResponse response = runCVS(workingDir, args, cvsShortTimeOut, true);
+    const CVSResponse response = runCVS(workingDir, args, m_settings.timeOutMS(), true);
     return response.result == CVSResponse::Ok;
 }
 
diff --git a/src/plugins/cvs/cvssettings.cpp b/src/plugins/cvs/cvssettings.cpp
index 4169a1638e0bdb2b048233a2c3cdd38c9164014f..f5dea5094932fd80684f0edc8bb9082233136a9d 100644
--- a/src/plugins/cvs/cvssettings.cpp
+++ b/src/plugins/cvs/cvssettings.cpp
@@ -39,6 +39,9 @@ static const char *promptToSubmitKeyC = "PromptForSubmit";
 static const char *diffOptionsKeyC = "DiffOptions";
 static const char *describeByCommitIdKeyC = "DescribeByCommitId";
 static const char *defaultDiffOptions = "-du";
+static const char *timeOutKeyC = "TimeOut";
+
+enum { defaultTimeOutS = 30 };
 
 static QString defaultCommand()
 {
@@ -56,6 +59,7 @@ namespace CVS {
 CVSSettings::CVSSettings() :
     cvsCommand(defaultCommand()),
     cvsDiffOptions(QLatin1String(defaultDiffOptions)),
+    timeOutS(defaultTimeOutS),
     promptToSubmit(true),
     describeByCommitId(true)
 {
@@ -69,6 +73,7 @@ void CVSSettings::fromSettings(QSettings *settings)
     cvsRoot = settings->value(QLatin1String(rootC), QString()).toString();
     cvsDiffOptions = settings->value(QLatin1String(diffOptionsKeyC), QLatin1String(defaultDiffOptions)).toString();
     describeByCommitId = settings->value(QLatin1String(describeByCommitIdKeyC), true).toBool();
+    timeOutS = settings->value(QLatin1String(timeOutKeyC), defaultTimeOutS).toInt();
     settings->endGroup();
 }
 
@@ -78,7 +83,8 @@ void CVSSettings::toSettings(QSettings *settings) const
     settings->setValue(QLatin1String(commandKeyC), cvsCommand);
     settings->setValue(QLatin1String(promptToSubmitKeyC), promptToSubmit);
     settings->setValue(QLatin1String(rootC), cvsRoot);
-    settings->setValue(QLatin1String(diffOptionsKeyC), cvsDiffOptions);
+    settings->setValue(QLatin1String(diffOptionsKeyC), cvsDiffOptions);    
+    settings->setValue(QLatin1String(timeOutKeyC), timeOutS);
     settings->setValue(QLatin1String(describeByCommitIdKeyC), describeByCommitId);
     settings->endGroup();
 }
@@ -89,6 +95,7 @@ bool CVSSettings::equals(const CVSSettings &s) const
         && describeByCommitId == s.describeByCommitId
         && cvsCommand         == s.cvsCommand
         && cvsRoot            == s.cvsRoot
+        && timeOutS           == s.timeOutS
         && cvsDiffOptions     == s.cvsDiffOptions;
 }
 
diff --git a/src/plugins/cvs/cvssettings.h b/src/plugins/cvs/cvssettings.h
index 6f71c4a84c0ac86cf7f9bd7911fa994e826ca91d..6959b40377f455f76939c83f7f36e49c14c55101 100644
--- a/src/plugins/cvs/cvssettings.h
+++ b/src/plugins/cvs/cvssettings.h
@@ -46,6 +46,9 @@ struct CVSSettings
     void fromSettings(QSettings *);
     void toSettings(QSettings *) const;
 
+    inline int timeOutMS() const     { return timeOutS * 10000;  }
+    inline int longTimeOutMS() const { return timeOutS * 100000; }
+
     // Add common options to the command line
     QStringList addOptions(const QStringList &args) const;
 
@@ -54,6 +57,7 @@ struct CVSSettings
     QString cvsCommand;
     QString cvsRoot;
     QString cvsDiffOptions;
+    int timeOutS;
     bool promptToSubmit;
     bool describeByCommitId;
 };
diff --git a/src/plugins/cvs/settingspage.cpp b/src/plugins/cvs/settingspage.cpp
index 3d29a88325b676b9f29e1182edc5aa9113b924e4..ba48750d8f1b98d0158634f11792fff0242469c3 100644
--- a/src/plugins/cvs/settingspage.cpp
+++ b/src/plugins/cvs/settingspage.cpp
@@ -57,6 +57,7 @@ CVSSettings SettingsPageWidget::settings() const
     rc.cvsCommand = m_ui.commandPathChooser->path();
     rc.cvsRoot = m_ui.rootLineEdit->text();
     rc.cvsDiffOptions = m_ui.diffOptionsLineEdit->text();
+    rc.timeOutS = m_ui.timeOutSpinBox->value();
     rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
     rc.describeByCommitId = m_ui.describeByCommitIdCheckBox->isChecked();
     return rc;
@@ -67,6 +68,7 @@ void SettingsPageWidget::setSettings(const CVSSettings &s)
     m_ui.commandPathChooser->setPath(s.cvsCommand);
     m_ui.rootLineEdit->setText(s.cvsRoot);
     m_ui.diffOptionsLineEdit->setText(s.cvsDiffOptions);
+    m_ui.timeOutSpinBox->setValue(s.timeOutS);
     m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit);
     m_ui.describeByCommitIdCheckBox->setChecked(s.describeByCommitId);
 }
diff --git a/src/plugins/cvs/settingspage.ui b/src/plugins/cvs/settingspage.ui
index df835685f18d386631a6226be1aceb637a94031b..601e9d28fcf6ee0b3aafacd0c90ea3f3e30f027a 100644
--- a/src/plugins/cvs/settingspage.ui
+++ b/src/plugins/cvs/settingspage.ui
@@ -2,6 +2,14 @@
 <ui version="4.0">
  <class>CVS::Internal::SettingsPage</class>
  <widget class="QWidget" name="CVS::Internal::SettingsPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>447</width>
+    <height>281</height>
+   </rect>
+  </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QGroupBox" name="miscGroupBox">
@@ -38,24 +46,24 @@
       <string>Miscellaneous</string>
      </property>
      <layout class="QFormLayout" name="formLayout">
-      <item row="0" column="0">
+      <item row="1" column="0">
        <widget class="QLabel" name="diffOptionsLabel">
         <property name="text">
          <string>Diff Options:</string>
         </property>
        </widget>
       </item>
-      <item row="0" column="1">
+      <item row="1" column="1">
        <widget class="QLineEdit" name="diffOptionsLineEdit"/>
       </item>
-      <item row="1" column="0" colspan="2">
+      <item row="2" column="0" colspan="2">
        <widget class="QCheckBox" name="promptToSubmitCheckBox">
         <property name="text">
          <string>Prompt on submit</string>
         </property>
        </widget>
       </item>
-      <item row="2" column="0" colspan="2">
+      <item row="3" column="0" colspan="2">
        <widget class="QCheckBox" name="describeByCommitIdCheckBox">
         <property name="toolTip">
          <string>When checked, all files touched by a commit will be displayed when clicking on a revision number in the annotation view (retrieved via commit id). Otherwise, only the respective file will be displayed.</string>
@@ -65,6 +73,26 @@
         </property>
        </widget>
       </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="timeOutLabel">
+        <property name="text">
+         <string>Timeout:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="timeOutSpinBox">
+        <property name="suffix">
+         <string>s</string>
+        </property>
+        <property name="minimum">
+         <number>1</number>
+        </property>
+        <property name="maximum">
+         <number>360</number>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/debugger/debuggerplugin.cpp b/src/plugins/debugger/debuggerplugin.cpp
index 0d269658bcdb6e765faac30a2576f7d74a3b763d..1e91222a06b545fddb73668e0c0694139fd70656 100644
--- a/src/plugins/debugger/debuggerplugin.cpp
+++ b/src/plugins/debugger/debuggerplugin.cpp
@@ -895,7 +895,7 @@ bool DebuggerPlugin::initialize(const QStringList &arguments, QString *errorMess
 
     MiniSplitter *splitter = new MiniSplitter;
     splitter->addWidget(m_manager->mainWindow());
-    splitter->addWidget(new OutputPanePlaceHolder(m_debugMode));
+    splitter->addWidget(new OutputPanePlaceHolder(m_debugMode, splitter));
     splitter->setStretchFactor(0, 10);
     splitter->setStretchFactor(1, 0);
     splitter->setOrientation(Qt::Vertical);
diff --git a/src/plugins/debugger/gdb/gdbengine.cpp b/src/plugins/debugger/gdb/gdbengine.cpp
index 147e7f74e585227ad3b38168ace2b8a5298e4b14..b7c8c006050393bf5968b2024ffc147ff6a32d6d 100644
--- a/src/plugins/debugger/gdb/gdbengine.cpp
+++ b/src/plugins/debugger/gdb/gdbengine.cpp
@@ -4420,9 +4420,11 @@ bool GdbEngine::startGdb(const QStringList &args, const QString &gdb, const QStr
 
     postCommand(_("show version"), CB(handleShowVersion));
 
-    postCommand(_("python execfile('%1dumper.py')").arg(dumperSourcePath),
+    postCommand(_("-interpreter-exec console \"python execfile('%1dumper.py')\"")
+            .arg(dumperSourcePath),
         NonCriticalResponse);
-    postCommand(_("python execfile('%1gdbmacros.py')").arg(dumperSourcePath),
+    postCommand(_("-interpreter-exec console \"python execfile('%1gdbmacros.py')\"")
+            .arg(dumperSourcePath),
         NonCriticalResponse);
 
     postCommand(_("-interpreter-exec console \"help bb\""),
diff --git a/src/plugins/git/settingspage.ui b/src/plugins/git/settingspage.ui
index a6b27926c1e594d6af110c27ea0904df5f19c032..4432b6a4458dbef2f909a9d3d9c1226eacdb3588 100644
--- a/src/plugins/git/settingspage.ui
+++ b/src/plugins/git/settingspage.ui
@@ -91,12 +91,15 @@
       <item row="1" column="0">
        <widget class="QLabel" name="timeoutLabel">
         <property name="text">
-         <string>Timeout (seconds):</string>
+         <string>Timeout:</string>
         </property>
        </widget>
       </item>
       <item row="1" column="1">
        <widget class="QSpinBox" name="timeoutSpinBox">
+        <property name="suffix">
+         <string>s</string>
+        </property>
         <property name="minimum">
          <number>10</number>
         </property>
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index f3def714224fd0bd24846132c8a4129268af01ca..b95e69596ada777239273ea14478c2ed024571ef 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -68,9 +68,6 @@
 #include <QtGui/QMenu>
 #include <QtGui/QMessageBox>
 
-enum { p4Timeout = 20000 };
-enum { longTimeoutFactor = 4 };
-
 static const VCSBase::VCSBaseEditorParameters editorParameters[] = {
 {
     VCSBase::RegularCommandOutput,
@@ -895,7 +892,7 @@ PerforceResponse PerforcePlugin::synchronousProcess(const QString &workingDir,
     VCSBase::VCSBaseOutputWindow *outputWindow = VCSBase::VCSBaseOutputWindow::instance();
     // Run, connect stderr to the output window
     Utils::SynchronousProcess process;
-    const int timeOut = (flags & LongTimeOut) ? longTimeoutFactor * p4Timeout : p4Timeout;
+    const int timeOut = (flags & LongTimeOut) ? m_settings.longTimeOutMS() : m_settings.timeOutMS();
     process.setTimeout(timeOut);
     process.setStdOutCodec(outputCodec);
     if (flags & OverrideDiffEnvironment)
@@ -983,7 +980,7 @@ PerforceResponse PerforcePlugin::fullySynchronousProcess(const QString &workingD
         process.closeWriteChannel();
     }
 
-    const int timeOut = (flags & LongTimeOut) ? longTimeoutFactor * p4Timeout : p4Timeout;
+    const int timeOut = (flags & LongTimeOut) ? m_settings.longTimeOutMS() : m_settings.timeOutMS();
     if (!process.waitForFinished(timeOut)) {
         PerforceChecker::ensureProcessStopped(process);
         response.error = true;
diff --git a/src/plugins/perforce/perforcesettings.cpp b/src/plugins/perforce/perforcesettings.cpp
index 949857d4a379c7398f9a13ac672b62a862ab7d2c..f50fbe72dc84552161eb68e9bc1bb68cb0323f6b 100644
--- a/src/plugins/perforce/perforcesettings.cpp
+++ b/src/plugins/perforce/perforcesettings.cpp
@@ -46,6 +46,9 @@ static const char *portKeyC = "Port";
 static const char *clientKeyC = "Client";
 static const char *userKeyC = "User";
 static const char *promptToSubmitKeyC = "PromptForSubmit";
+static const char *timeOutKeyC = "TimeOut";
+
+enum { defaultTimeOutS = 30 };
 
 static QString defaultCommand()
 {
@@ -62,6 +65,7 @@ namespace Internal {
 
 Settings::Settings() :
     defaultEnv(true),
+    timeOutS(defaultTimeOutS),
     promptToSubmit(true)
 {
 }
@@ -71,7 +75,7 @@ bool Settings::equals(const Settings &rhs) const
     return defaultEnv == rhs.defaultEnv
             && p4Command == rhs.p4Command && p4Port == rhs.p4Port
             && p4Client == rhs.p4Client && p4User == rhs.p4User
-            && promptToSubmit == rhs.promptToSubmit;
+            && timeOutS == rhs.timeOutS && promptToSubmit == rhs.promptToSubmit;
 };
 
 QStringList Settings::commonP4Arguments() const
@@ -105,6 +109,7 @@ void PerforceSettings::fromSettings(QSettings *settings)
     m_settings.p4Port = settings->value(QLatin1String(portKeyC), QString()).toString();
     m_settings.p4Client = settings->value(QLatin1String(clientKeyC), QString()).toString();
     m_settings.p4User = settings->value(QLatin1String(userKeyC), QString()).toString();
+    m_settings.timeOutS = settings->value(QLatin1String(timeOutKeyC), defaultTimeOutS).toInt();
     m_settings.promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
     settings->endGroup();
 }
@@ -117,6 +122,7 @@ void PerforceSettings::toSettings(QSettings *settings) const
     settings->setValue(QLatin1String(portKeyC), m_settings.p4Port);
     settings->setValue(QLatin1String(clientKeyC), m_settings.p4Client);
     settings->setValue(QLatin1String(userKeyC), m_settings.p4User);
+    settings->setValue(QLatin1String(timeOutKeyC), m_settings.timeOutS);
     settings->setValue(QLatin1String(promptToSubmitKeyC), m_settings.promptToSubmit);
     settings->endGroup();
 }
diff --git a/src/plugins/perforce/perforcesettings.h b/src/plugins/perforce/perforcesettings.h
index 8b6e3897cd27634ced76c9b3b1b5f861ee9ec326..3df1378e28225bfebf843fe39a4991deef08d78d 100644
--- a/src/plugins/perforce/perforcesettings.h
+++ b/src/plugins/perforce/perforcesettings.h
@@ -58,6 +58,7 @@ struct Settings {
     QString p4User;
     QString errorString;
     bool defaultEnv;
+    int timeOutS;
     bool promptToSubmit;
 };
 
@@ -92,6 +93,10 @@ public:
     void setSettings(const Settings &s);
     Settings settings() const;
 
+    inline int timeOutS()      const { return m_settings.timeOutS;  }
+    inline int timeOutMS()     const { return m_settings.timeOutS * 10000;  }
+    inline int longTimeOutMS() const { return m_settings.timeOutS * 100000; }
+
     QString topLevel() const;
     QString topLevelSymLinkTarget() const;
 
diff --git a/src/plugins/perforce/settingspage.cpp b/src/plugins/perforce/settingspage.cpp
index ede4c7012f60cd51063d85ab4cfc70e07e45d27e..456a049805a06474f8752deb92dfc1401a42d501 100644
--- a/src/plugins/perforce/settingspage.cpp
+++ b/src/plugins/perforce/settingspage.cpp
@@ -81,6 +81,7 @@ Settings SettingsPageWidget::settings() const
     settings.p4Port = m_ui.portLineEdit->text();
     settings.p4User = m_ui.userLineEdit->text();
     settings.p4Client=  m_ui.clientLineEdit->text();
+    settings.timeOutS = m_ui.timeOutSpinBox->value();
     settings.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
     return settings;
 }
@@ -92,6 +93,7 @@ void SettingsPageWidget::setSettings(const PerforceSettings &s)
     m_ui.portLineEdit->setText(s.p4Port());
     m_ui.clientLineEdit->setText(s.p4Client());
     m_ui.userLineEdit->setText(s.p4User());
+    m_ui.timeOutSpinBox->setValue(s.timeOutS());
     m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit());
 }
 
diff --git a/src/plugins/perforce/settingspage.ui b/src/plugins/perforce/settingspage.ui
index 1b6c6b3a7d752e74410955796d82da774bd8e440..a81afdc3e766877a7dd36c898a3e93aa1ddae482 100644
--- a/src/plugins/perforce/settingspage.ui
+++ b/src/plugins/perforce/settingspage.ui
@@ -2,6 +2,14 @@
 <ui version="4.0">
  <class>Perforce::Internal::SettingsPage</class>
  <widget class="QWidget" name="Perforce::Internal::SettingsPage">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>437</width>
+    <height>407</height>
+   </rect>
+  </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
     <widget class="QGroupBox" name="configGroupBox">
@@ -82,13 +90,33 @@
       <string>Miscellaneous</string>
      </property>
      <layout class="QFormLayout" name="formLayout_2">
-      <item row="0" column="0" colspan="2">
+      <item row="1" column="0" colspan="2">
        <widget class="QCheckBox" name="promptToSubmitCheckBox">
         <property name="text">
          <string>Prompt on submit</string>
         </property>
        </widget>
       </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="timeOutLabel">
+        <property name="text">
+         <string>Timeout:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="timeOutSpinBox">
+        <property name="suffix">
+         <string>s</string>
+        </property>
+        <property name="minimum">
+         <number>1</number>
+        </property>
+        <property name="maximum">
+         <number>360</number>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
index 6415981dd0a271a005f93cbd7269f279c12166b0..14dcca1ad6260161e36c10b202caa117623e9470 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.cpp
@@ -130,6 +130,7 @@ CustomExecutableConfigurationWidget::CustomExecutableConfigurationWidget(CustomE
 
     m_environmentWidget = new EnvironmentWidget(this, baseEnvironmentWidget);
     m_environmentWidget->setBaseEnvironment(rc->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(rc->baseEnvironmentText());
     m_environmentWidget->setUserChanges(rc->userEnvironmentChanges());
     vbox->addWidget(m_environmentWidget);
 
@@ -168,6 +169,7 @@ void CustomExecutableConfigurationWidget::baseEnvironmentSelected(int index)
     m_runConfiguration->setBaseEnvironmentBase(CustomExecutableRunConfiguration::BaseEnvironmentBase(index));
 
     m_environmentWidget->setBaseEnvironment(m_runConfiguration->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(m_runConfiguration->baseEnvironmentText());
     m_ignoreChange = false;
 }
 
@@ -180,6 +182,7 @@ void CustomExecutableConfigurationWidget::baseEnvironmentChanged()
             m_runConfiguration->baseEnvironmentBase());
     m_baseEnvironmentComboBox->setCurrentIndex(index);
     m_environmentWidget->setBaseEnvironment(m_runConfiguration->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(m_runConfiguration->baseEnvironmentText());
 }
 
 void CustomExecutableConfigurationWidget::userEnvironmentChangesChanged()
@@ -358,6 +361,18 @@ QStringList CustomExecutableRunConfiguration::commandLineArguments() const
     return m_cmdArguments;
 }
 
+QString CustomExecutableRunConfiguration::baseEnvironmentText() const
+{
+    if (m_baseEnvironmentBase == CustomExecutableRunConfiguration::CleanEnvironmentBase) {
+        return tr("Clean Environment");
+    } else  if (m_baseEnvironmentBase == CustomExecutableRunConfiguration::SystemEnvironmentBase) {
+        return tr("System Environment");
+    } else  if (m_baseEnvironmentBase == CustomExecutableRunConfiguration::BuildEnvironmentBase) {
+        return tr("Build Environment");
+    }
+    return QString::null;
+}
+
 ProjectExplorer::Environment CustomExecutableRunConfiguration::baseEnvironment() const
 {
     ProjectExplorer::Environment env;
diff --git a/src/plugins/projectexplorer/customexecutablerunconfiguration.h b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
index 096a8a98278266ad7fd3744a27a9085c833f51c9..f6df16ae878b3a62e073b9fa7c1508dfcb7ed8d6 100644
--- a/src/plugins/projectexplorer/customexecutablerunconfiguration.h
+++ b/src/plugins/projectexplorer/customexecutablerunconfiguration.h
@@ -112,6 +112,7 @@ private:
     void setBaseEnvironmentBase(BaseEnvironmentBase env);
     BaseEnvironmentBase baseEnvironmentBase() const;
     ProjectExplorer::Environment baseEnvironment() const;
+    QString baseEnvironmentText() const;
     void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff);
     QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const;
 
diff --git a/src/plugins/projectexplorer/debugginghelper.cpp b/src/plugins/projectexplorer/debugginghelper.cpp
index a075877d19d2614afd0448be671ed3b9bd9cf391..87822143d94fc94b5e7eeec44fd429f8861327ad 100644
--- a/src/plugins/projectexplorer/debugginghelper.cpp
+++ b/src/plugins/projectexplorer/debugginghelper.cpp
@@ -269,4 +269,3 @@ QStringList DebuggingHelperLibrary::possibleQMakeCommands()
     return result;
 #endif
 }
-
diff --git a/src/plugins/projectexplorer/environmenteditmodel.cpp b/src/plugins/projectexplorer/environmenteditmodel.cpp
index e59012669fd11ccbd26825063dc941f001f2819c..5fb6e59e3e8c276e86333abc15e01e85711e4d7c 100644
--- a/src/plugins/projectexplorer/environmenteditmodel.cpp
+++ b/src/plugins/projectexplorer/environmenteditmodel.cpp
@@ -463,6 +463,12 @@ void EnvironmentWidget::setBaseEnvironment(const ProjectExplorer::Environment &e
     m_model->setBaseEnvironment(env);
 }
 
+void EnvironmentWidget::setBaseEnvironmentText(const QString &text)
+{
+    m_baseEnvironmentText = text;
+    updateSummaryText();
+}
+
 QList<EnvironmentItem> EnvironmentWidget::userChanges() const
 {
     return m_model->userChanges();
@@ -479,17 +485,20 @@ void EnvironmentWidget::updateSummaryText()
     QString text;
     const QList<EnvironmentItem> &list = m_model->userChanges();
     foreach (const EnvironmentItem &item, list) {
-        if (!text.isEmpty())
+        if (item.name != EnvironmentModel::tr("<VARIABLE>")) {
             text.append("<br>");
-	if (item.name != EnvironmentModel::tr("<VARIABLE>")) {
             if (item.unset)
                 text.append(tr("Unset <b>%1</b>").arg(item.name));
             else
                 text.append(tr("Set <b>%1</b> to <b>%2</b>").arg(item.name, item.value));
         }
     }
+
     if (text.isEmpty())
-        text = tr("Summary: No changes to Environment");
+        text.prepend(tr("Using <b>%1</b>").arg(m_baseEnvironmentText));
+    else
+        text.prepend(tr("Using <b>%1</b> and").arg(m_baseEnvironmentText));
+
     m_detailsContainer->setSummaryText(text);
 }
 
diff --git a/src/plugins/projectexplorer/environmenteditmodel.h b/src/plugins/projectexplorer/environmenteditmodel.h
index 38b487c16678bc793c76fc5fd27152c4c6f6136d..f5625f697ab1994ddc0d597aa123d69a0d6cd839 100644
--- a/src/plugins/projectexplorer/environmenteditmodel.h
+++ b/src/plugins/projectexplorer/environmenteditmodel.h
@@ -109,6 +109,7 @@ public:
     EnvironmentWidget(QWidget *parent, QWidget *additionalDetailsWidget = 0);
     ~EnvironmentWidget();
 
+    void setBaseEnvironmentText(const QString &text);
     void setBaseEnvironment(const ProjectExplorer::Environment &env);
 
     QList<EnvironmentItem> userChanges() const;
@@ -132,6 +133,7 @@ private slots:
 
 private:
     EnvironmentModel *m_model;
+    QString m_baseEnvironmentText;
     Utils::DetailsWidget *m_detailsContainer;
     QTreeView *m_environmentTreeView;
     QPushButton *m_editButton;
diff --git a/src/plugins/qmlinspector/qmlinspectormode.cpp b/src/plugins/qmlinspector/qmlinspectormode.cpp
index 636c488defb45c1a0814038106dfa63a3f204742..69da5c2a054db15f37202036b0e37ba8246aaa1f 100644
--- a/src/plugins/qmlinspector/qmlinspectormode.cpp
+++ b/src/plugins/qmlinspector/qmlinspectormode.cpp
@@ -396,7 +396,7 @@ QWidget *QmlInspectorMode::createModeWindow()
     // right-side window with editor, output etc.
     Core::MiniSplitter *mainWindowSplitter = new Core::MiniSplitter;
     mainWindowSplitter->addWidget(createMainView());
-    mainWindowSplitter->addWidget(new Core::OutputPanePlaceHolder(this));
+    mainWindowSplitter->addWidget(new Core::OutputPanePlaceHolder(this, mainWindowSplitter));
     mainWindowSplitter->setStretchFactor(0, 10);
     mainWindowSplitter->setStretchFactor(1, 0);
     mainWindowSplitter->setOrientation(Qt::Vertical);
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
index a6e92fe3417273d1b182074cec797708459a11fc..c4e113448a5f30144b052f97f08ea933a9548dab 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.cpp
@@ -114,6 +114,15 @@ Qt4Project *Qt4BuildConfiguration::qt4Project() const
     return static_cast<Qt4Project *>(project());
 }
 
+QString Qt4BuildConfiguration::baseEnvironmentText() const
+{
+    if (useSystemEnvironment())
+        return tr("System Environment");
+    else
+        return tr("Clean Environment");
+    return QString::null;
+}
+
 ProjectExplorer::Environment Qt4BuildConfiguration::baseEnvironment() const
 {
     Environment env = useSystemEnvironment() ? Environment::systemEnvironment() : Environment();
diff --git a/src/plugins/qt4projectmanager/qt4buildconfiguration.h b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
index 189b8a5558496b73cc00865a2d13ff366c0762ca..45febf077f08137b24c1c7a8a3b2ac365101fbb7 100644
--- a/src/plugins/qt4projectmanager/qt4buildconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4buildconfiguration.h
@@ -60,6 +60,7 @@ public:
 
     ProjectExplorer::Environment environment() const;
     ProjectExplorer::Environment baseEnvironment() const;
+    QString baseEnvironmentText() const;
     void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff);
     QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const;
     bool useSystemEnvironment() const;
diff --git a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp
index 59cef31c51798fe711a437c716bc122cceacf84d..fe022ea55d726c7aa333a8d589c3022f4904a811 100644
--- a/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp
+++ b/src/plugins/qt4projectmanager/qt4buildenvironmentwidget.cpp
@@ -82,6 +82,7 @@ void Qt4BuildEnvironmentWidget::init(ProjectExplorer::BuildConfiguration *bc)
 
     m_clearSystemEnvironmentCheckBox->setChecked(!m_buildConfiguration->useSystemEnvironment());
     m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment());
+    m_buildEnvironmentWidget->setBaseEnvironmentText(m_buildConfiguration->baseEnvironmentText());
     m_buildEnvironmentWidget->setUserChanges(m_buildConfiguration->userEnvironmentChanges());
     m_buildEnvironmentWidget->updateButtons();
 }
@@ -95,9 +96,11 @@ void Qt4BuildEnvironmentWidget::clearSystemEnvironmentCheckBoxClicked(bool check
 {
     m_buildConfiguration->setUseSystemEnvironment(!checked);
     m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment());
+    m_buildEnvironmentWidget->setBaseEnvironmentText(m_buildConfiguration->baseEnvironmentText());
 }
 
 void Qt4BuildEnvironmentWidget::environmentChanged()
 {
     m_buildEnvironmentWidget->setBaseEnvironment(m_buildConfiguration->baseEnvironment());
+    m_buildEnvironmentWidget->setBaseEnvironmentText(m_buildConfiguration->baseEnvironmentText());
 }
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
index d5eb28df2ef89afb3b3e3a7443a2e9b70a98954d..6a9f13fef28f28b872ba75ca59482204ef36cec0 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.cpp
@@ -213,6 +213,7 @@ Qt4RunConfigurationWidget::Qt4RunConfigurationWidget(Qt4RunConfiguration *qt4Run
 
     m_environmentWidget = new ProjectExplorer::EnvironmentWidget(this, baseEnvironmentWidget);
     m_environmentWidget->setBaseEnvironment(m_qt4RunConfiguration->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(m_qt4RunConfiguration->baseEnvironmentText());
     m_environmentWidget->setUserChanges(m_qt4RunConfiguration->userEnvironmentChanges());
     m_environmentWidget->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
     vboxTopLayout->addWidget(m_environmentWidget);
@@ -271,6 +272,7 @@ void Qt4RunConfigurationWidget::baseEnvironmentSelected(int index)
     m_qt4RunConfiguration->setBaseEnvironmentBase(Qt4RunConfiguration::BaseEnvironmentBase(index));
 
     m_environmentWidget->setBaseEnvironment(m_qt4RunConfiguration->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(m_qt4RunConfiguration->baseEnvironmentText());
     m_ignoreChange = false;
 }
 
@@ -281,6 +283,7 @@ void Qt4RunConfigurationWidget::baseEnvironmentChanged()
 
     m_baseEnvironmentComboBox->setCurrentIndex(m_qt4RunConfiguration->baseEnvironmentBase());
     m_environmentWidget->setBaseEnvironment(m_qt4RunConfiguration->baseEnvironment());
+    m_environmentWidget->setBaseEnvironmentText(m_qt4RunConfiguration->baseEnvironmentText());
 }
 
 void Qt4RunConfigurationWidget::userEnvironmentChangesChanged(const QList<ProjectExplorer::EnvironmentItem> &userChanges)
@@ -480,6 +483,17 @@ QStringList Qt4RunConfiguration::commandLineArguments() const
     return m_commandLineArguments;
 }
 
+QString Qt4RunConfiguration::baseEnvironmentText() const
+{
+    if (m_baseEnvironmentBase == Qt4RunConfiguration::CleanEnvironmentBase)
+        return tr("Clean Environment");
+    else  if (m_baseEnvironmentBase == Qt4RunConfiguration::SystemEnvironmentBase)
+        return tr("System Environment");
+    else  if (m_baseEnvironmentBase == Qt4RunConfiguration::BuildEnvironmentBase)
+        return tr("Build Environment");
+    return QString::null;
+}
+
 ProjectExplorer::Environment Qt4RunConfiguration::baseEnvironment() const
 {
     ProjectExplorer::Environment env;
diff --git a/src/plugins/qt4projectmanager/qt4runconfiguration.h b/src/plugins/qt4projectmanager/qt4runconfiguration.h
index f0622e4b77f7d163707523c4ecac7aa38564c9f7..ca3c4630d2d4c52a6ee7484e11015d950d4a4e84 100644
--- a/src/plugins/qt4projectmanager/qt4runconfiguration.h
+++ b/src/plugins/qt4projectmanager/qt4runconfiguration.h
@@ -123,6 +123,7 @@ private:
     BaseEnvironmentBase baseEnvironmentBase() const;
 
     ProjectExplorer::Environment baseEnvironment() const;
+    QString baseEnvironmentText() const;
     void setUserEnvironmentChanges(const QList<ProjectExplorer::EnvironmentItem> &diff);
     QList<ProjectExplorer::EnvironmentItem> userEnvironmentChanges() const;
 
diff --git a/src/plugins/subversion/settingspage.cpp b/src/plugins/subversion/settingspage.cpp
index e1aabc22c85ba9bcfa6a712f542df11c71c4fa63..42da8395b316924c8ac0e7e1b5dec6a645682f4a 100644
--- a/src/plugins/subversion/settingspage.cpp
+++ b/src/plugins/subversion/settingspage.cpp
@@ -58,6 +58,7 @@ SubversionSettings SettingsPageWidget::settings() const
     rc.useAuthentication = m_ui.userGroupBox->isChecked();
     rc.user =  m_ui.usernameLineEdit->text();
     rc.password = m_ui.passwordLineEdit->text();
+    rc.timeOutS = m_ui.timeOutSpinBox->value();
     if (rc.user.isEmpty())
         rc.useAuthentication = false;
     rc.promptToSubmit = m_ui.promptToSubmitCheckBox->isChecked();
@@ -70,6 +71,7 @@ void SettingsPageWidget::setSettings(const SubversionSettings &s)
     m_ui.usernameLineEdit->setText(s.user);
     m_ui.passwordLineEdit->setText(s.password);
     m_ui.userGroupBox->setChecked(s.useAuthentication);
+    m_ui.timeOutSpinBox->setValue(s.timeOutS);
     m_ui.promptToSubmitCheckBox->setChecked(s.promptToSubmit);
 }
 
diff --git a/src/plugins/subversion/settingspage.ui b/src/plugins/subversion/settingspage.ui
index e7f4b177b36991aa3ee092e40d69e0adb32094b5..efbe0cce8666014fb938d958248303e1cbe02664 100644
--- a/src/plugins/subversion/settingspage.ui
+++ b/src/plugins/subversion/settingspage.ui
@@ -6,7 +6,7 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>473</width>
+    <width>496</width>
     <height>295</height>
    </rect>
   </property>
@@ -72,13 +72,33 @@
       <string>Miscellaneous</string>
      </property>
      <layout class="QFormLayout" name="formLayout_2">
-      <item row="0" column="0" colspan="2">
+      <item row="1" column="0" colspan="2">
        <widget class="QCheckBox" name="promptToSubmitCheckBox">
         <property name="text">
          <string>Prompt on submit</string>
         </property>
        </widget>
       </item>
+      <item row="0" column="0">
+       <widget class="QLabel" name="timeOutLabel">
+        <property name="text">
+         <string>Timeout:</string>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="1">
+       <widget class="QSpinBox" name="timeOutSpinBox">
+        <property name="suffix">
+         <string>s</string>
+        </property>
+        <property name="minimum">
+         <number>1</number>
+        </property>
+        <property name="maximum">
+         <number>360</number>
+        </property>
+       </widget>
+      </item>
      </layout>
     </widget>
    </item>
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index cdf46123512cfb37e35b28a2e4d17d440f3bc9ea..545c5cf16ac0926814d98da2f453f7284ae29f2d 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -71,11 +71,6 @@
 
 using namespace Subversion::Internal;
 
-// Timeout for normal output commands
-enum { subversionShortTimeOut = 10000 };
-// Timeout for submit, update
-enum { subversionLongTimeOut = 120000 };
-
 static const char * const CMD_ID_SUBVERSION_MENU    = "Subversion.Menu";
 static const char * const CMD_ID_ADD                = "Subversion.Add";
 static const char * const CMD_ID_DELETE_FILE        = "Subversion.Delete";
@@ -470,7 +465,7 @@ void SubversionPlugin::svnDiff(const QString &workingDir, const QStringList &fil
     QStringList args(QLatin1String("diff"));
     args << files;
 
-    const SubversionResponse response = runSvn(workingDir, args, subversionShortTimeOut, false, codec);
+    const SubversionResponse response = runSvn(workingDir, args, m_settings.timeOutMS(), false, codec);
     if (response.error)
         return;
 
@@ -551,7 +546,7 @@ void SubversionPlugin::revertCurrentFile()
     QStringList args(QLatin1String("diff"));
     args.push_back(state.relativeCurrentFile());
 
-    const SubversionResponse diffResponse = runSvn(state.currentFileTopLevel(), args, subversionShortTimeOut, false);
+    const SubversionResponse diffResponse = runSvn(state.currentFileTopLevel(), args, m_settings.timeOutMS(), false);
     if (diffResponse.error)
         return;
 
@@ -568,7 +563,7 @@ void SubversionPlugin::revertCurrentFile()
     args.clear();
     args << QLatin1String("revert") << state.relativeCurrentFile();
 
-    const SubversionResponse revertResponse = runSvn(state.currentFileTopLevel(), args, subversionShortTimeOut, true);
+    const SubversionResponse revertResponse = runSvn(state.currentFileTopLevel(), args, m_settings.timeOutMS(), true);
     if (!revertResponse.error) {
         fcb.setModifiedReload(true);
         subVersionControl()->emitFilesChanged(QStringList(state.currentFile()));
@@ -618,7 +613,7 @@ void SubversionPlugin::startCommit(const QString &workingDir, const QStringList
     QStringList args(QLatin1String("status"));
     args += files;
 
-    const SubversionResponse response = runSvn(workingDir, args, subversionShortTimeOut, false);
+    const SubversionResponse response = runSvn(workingDir, args, m_settings.timeOutMS(), false);
     if (response.error)
         return;
 
@@ -659,7 +654,7 @@ bool SubversionPlugin::commit(const QString &messageFile,
     QStringList args = QStringList(QLatin1String("commit"));
     args << QLatin1String(nonInteractiveOptionC) << QLatin1String("--file") << messageFile;
     args.append(subVersionFileList);
-    const SubversionResponse response = runSvn(m_commitRepository, args, subversionLongTimeOut, true);
+    const SubversionResponse response = runSvn(m_commitRepository, args, m_settings.longTimeOutMS(), true);
     return !response.error ;
 }
 
@@ -678,7 +673,7 @@ void SubversionPlugin::filelog(const QString &workingDir, const QStringList &fil
     foreach(const QString &file, files)
         args.append(QDir::toNativeSeparators(file));
 
-    const SubversionResponse response = runSvn(workingDir, args, subversionShortTimeOut, false, codec);
+    const SubversionResponse response = runSvn(workingDir, args, m_settings.timeOutMS(), false, codec);
     if (response.error)
         return;
 
@@ -705,7 +700,7 @@ void SubversionPlugin::updateProject()
     QStringList args(QLatin1String("update"));
     args.push_back(QLatin1String(nonInteractiveOptionC));
     args.append(state.relativeCurrentProject());
-    const SubversionResponse response = runSvn(state.currentProjectTopLevel(), args, subversionLongTimeOut, true);
+    const SubversionResponse response = runSvn(state.currentProjectTopLevel(), args, m_settings.longTimeOutMS(), true);
     if (!response.error)
         subVersionControl()->emitRepositoryChanged(state.currentProjectTopLevel());
 }
@@ -725,7 +720,7 @@ void SubversionPlugin::annotate(const QString &workingDir, const QString &file)
     args.push_back(QLatin1String("-v"));
     args.append(QDir::toNativeSeparators(file));
 
-    const SubversionResponse response = runSvn(workingDir, args, subversionShortTimeOut, false, codec);
+    const SubversionResponse response = runSvn(workingDir, args, m_settings.timeOutMS(), false, codec);
     if (response.error)
         return;
 
@@ -753,7 +748,7 @@ void SubversionPlugin::projectStatus()
     QTC_ASSERT(state.hasProject(), return);
     QStringList args(QLatin1String("status"));
     args += state.relativeCurrentProject();
-    runSvn(state.currentProjectTopLevel(), args, subversionShortTimeOut, true);
+    runSvn(state.currentProjectTopLevel(), args, m_settings.timeOutMS(), true);
 }
 
 void SubversionPlugin::describe(const QString &source, const QString &changeNr)
@@ -776,7 +771,7 @@ void SubversionPlugin::describe(const QString &source, const QString &changeNr)
     QStringList args(QLatin1String("log"));
     args.push_back(QLatin1String("-r"));
     args.push_back(changeNr);
-    const SubversionResponse logResponse = runSvn(topLevel, args, subversionShortTimeOut, false);
+    const SubversionResponse logResponse = runSvn(topLevel, args, m_settings.timeOutMS(), false);
     if (logResponse.error)
         return;
     description = logResponse.stdOut;
@@ -790,7 +785,7 @@ void SubversionPlugin::describe(const QString &source, const QString &changeNr)
     args.push_back(diffArg);
 
     QTextCodec *codec = VCSBase::VCSBaseEditor::getCodec(source);
-    const SubversionResponse response = runSvn(topLevel, args, subversionShortTimeOut, false, codec);
+    const SubversionResponse response = runSvn(topLevel, args, m_settings.timeOutMS(), false, codec);
     if (response.error)
         return;
     description += response.stdOut;
@@ -963,7 +958,7 @@ bool SubversionPlugin::vcsAdd(const QString &workingDir, const QString &rawFileN
     QStringList args(QLatin1String("add"));
     args.push_back(file);
 
-    const SubversionResponse response = runSvn(workingDir, args, subversionShortTimeOut, true);
+    const SubversionResponse response = runSvn(workingDir, args, m_settings.timeOutMS(), true);
     return !response.error;
 }
 
@@ -974,7 +969,7 @@ bool SubversionPlugin::vcsDelete(const QString &workingDir, const QString &rawFi
     QStringList args(QLatin1String("delete"));
     args.push_back(file);
 
-    const SubversionResponse response = runSvn(workingDir, args, subversionShortTimeOut, true);
+    const SubversionResponse response = runSvn(workingDir, args, m_settings.timeOutMS(), true);
     return !response.error;
 }
 
diff --git a/src/plugins/subversion/subversionsettings.cpp b/src/plugins/subversion/subversionsettings.cpp
index 91d18c59e85e1ba90ab1c96183c7cfa7bb9aac5e..6ebc07c1e32bcd89bfbe95c9897cdb023a5b184b 100644
--- a/src/plugins/subversion/subversionsettings.cpp
+++ b/src/plugins/subversion/subversionsettings.cpp
@@ -41,6 +41,9 @@ static const char *authenticationKeyC = "Authentication";
 static const char *userNameOptionC = "--username";
 static const char *passwordOptionC = "--password";
 static const char *promptToSubmitKeyC = "PromptForSubmit";
+static const char *timeOutKeyC = "TimeOut";
+
+enum { defaultTimeOutS = 30 };
 
 static QString defaultCommand()
 {
@@ -57,6 +60,7 @@ using namespace Subversion::Internal;
 SubversionSettings::SubversionSettings() :
     svnCommand(defaultCommand()),
     useAuthentication(false),
+    timeOutS(defaultTimeOutS),
     promptToSubmit(true)
 {
 }
@@ -68,6 +72,7 @@ void SubversionSettings::fromSettings(QSettings *settings)
     useAuthentication = settings->value(QLatin1String(authenticationKeyC), QVariant(false)).toBool();
     user = settings->value(QLatin1String(userKeyC), QString()).toString();
     password =  settings->value(QLatin1String(passwordKeyC), QString()).toString();
+    timeOutS = settings->value(QLatin1String(timeOutKeyC), defaultTimeOutS).toInt();
     promptToSubmit = settings->value(QLatin1String(promptToSubmitKeyC), true).toBool();
     settings->endGroup();
 }
@@ -80,6 +85,7 @@ void SubversionSettings::toSettings(QSettings *settings) const
     settings->setValue(QLatin1String(userKeyC), user);
     settings->setValue(QLatin1String(passwordKeyC), password);
     settings->setValue(QLatin1String(promptToSubmitKeyC), promptToSubmit);
+    settings->setValue(QLatin1String(timeOutKeyC), timeOutS);
     settings->endGroup();
 }
 
@@ -89,7 +95,8 @@ bool SubversionSettings::equals(const SubversionSettings &s) const
         && useAuthentication == s.useAuthentication
         && user              == s.user
         && password          == s.password
-        && promptToSubmit   == s.promptToSubmit;
+        && timeOutS          == s.timeOutS
+        && promptToSubmit    == s.promptToSubmit;
 }
 
 QStringList SubversionSettings::addOptions(const QStringList &args) const
diff --git a/src/plugins/subversion/subversionsettings.h b/src/plugins/subversion/subversionsettings.h
index 78d44190e59e25766ba4573918eed32d17ca31e9..cec86f83cfb7d23eeea48030d90cae41f171dcf8 100644
--- a/src/plugins/subversion/subversionsettings.h
+++ b/src/plugins/subversion/subversionsettings.h
@@ -47,6 +47,9 @@ struct SubversionSettings
     void fromSettings(QSettings *);
     void toSettings(QSettings *) const;
 
+    inline int timeOutMS() const     { return timeOutS * 10000;  }
+    inline int longTimeOutMS() const { return timeOutS * 100000; }
+
     // Add authentication and (maybe future) options to the
     // command line
     QStringList addOptions(const QStringList &args) const;
@@ -59,6 +62,7 @@ struct SubversionSettings
     bool useAuthentication;
     QString user;
     QString password;
+    int timeOutS;
     bool promptToSubmit;
 };
 
diff --git a/src/plugins/texteditor/basetextdocument.cpp b/src/plugins/texteditor/basetextdocument.cpp
index ba6e835f3eb9080e31d03b494af2c7d30883f990..d3a2696195fb4a6e4d3a41b1904cbc2d159cb925 100644
--- a/src/plugins/texteditor/basetextdocument.cpp
+++ b/src/plugins/texteditor/basetextdocument.cpp
@@ -324,7 +324,7 @@ void BaseTextDocument::cleanWhitespace(QTextCursor& cursor, bool cleanIndentatio
 
     while (block.isValid() && block != end) {
 
-        if (inEntireDocument || block.revision() > documentLayout->lastSaveRevision) {
+        if (inEntireDocument || block.revision() != documentLayout->lastSaveRevision) {
 
             QString blockText = block.text();
             if (int trailing = m_tabSettings.trailingWhitespaces(blockText)) {