diff --git a/src/app/main.cpp b/src/app/main.cpp
index f11e81764d1568d1f19823e122eeadacaa047d0b..2efc04f14519bde7f49c1e46b068c60de9b59a8c 100644
--- a/src/app/main.cpp
+++ b/src/app/main.cpp
@@ -98,12 +98,12 @@ static void displayError(const QString &t) // No console on Windows.
 
 static void displayHelpText(const QString &t)
 {
-    qWarning(t.toUtf8().constData());
+    qWarning("%s", qPrintable(t));
 }
 
 static void displayError(const QString &t)
 {
-    qCritical(t.toUtf8().constData());
+    qCritical("%s", qPrintable(t));
 }
 
 #endif
diff --git a/src/plugins/cmakeprojectmanager/cmakestep.cpp b/src/plugins/cmakeprojectmanager/cmakestep.cpp
index 88572968040caea7f0e29c9bc8d6b388853fee55..13963273287384406c71e0567df104d9fae80eb8 100644
--- a/src/plugins/cmakeprojectmanager/cmakestep.cpp
+++ b/src/plugins/cmakeprojectmanager/cmakestep.cpp
@@ -99,7 +99,7 @@ QString CMakeBuildStepConfigWidget::displayName() const
     return "CMake";
 }
 
-void CMakeBuildStepConfigWidget::init(const QString &buildConfiguration)
+void CMakeBuildStepConfigWidget::init(const QString & /*buildConfiguration */)
 {
     // TODO
 }
@@ -121,12 +121,12 @@ ProjectExplorer::BuildStep *CMakeBuildStepFactory::create(ProjectExplorer::Proje
     return new CMakeStep(pro);
 }
 
-QStringList CMakeBuildStepFactory::canCreateForProject(ProjectExplorer::Project *pro) const
+QStringList CMakeBuildStepFactory::canCreateForProject(ProjectExplorer::Project * /* pro */) const
 {
     return QStringList();
 }
 
-QString CMakeBuildStepFactory::displayNameForName(const QString &name) const
+QString CMakeBuildStepFactory::displayNameForName(const QString & /* name */) const
 {
     return "CMake";
 }
diff --git a/src/plugins/cmakeprojectmanager/makestep.cpp b/src/plugins/cmakeprojectmanager/makestep.cpp
index 1c7e7f055f5dc3d7030e6e02f9b5a727e3e36916..abd77cd10aadb36f196a81e1f5dcb350ca18507b 100644
--- a/src/plugins/cmakeprojectmanager/makestep.cpp
+++ b/src/plugins/cmakeprojectmanager/makestep.cpp
@@ -93,7 +93,7 @@ QString MakeBuildStepConfigWidget::displayName() const
     return "Make";
 }
 
-void MakeBuildStepConfigWidget::init(const QString &buildConfiguration)
+void MakeBuildStepConfigWidget::init(const QString & /* buildConfiguration */)
 {
     // TODO
 }
@@ -115,12 +115,12 @@ ProjectExplorer::BuildStep *MakeBuildStepFactory::create(ProjectExplorer::Projec
     return new MakeStep(pro);
 }
 
-QStringList MakeBuildStepFactory::canCreateForProject(ProjectExplorer::Project *pro) const
+QStringList MakeBuildStepFactory::canCreateForProject(ProjectExplorer::Project * /* pro */) const
 {
     return QStringList();
 }
 
-QString MakeBuildStepFactory::displayNameForName(const QString &name) const
+QString MakeBuildStepFactory::displayNameForName(const QString & /* name */) const
 {
     return "Make";
 }
diff --git a/src/plugins/coreplugin/inavigationwidgetfactory.cpp b/src/plugins/coreplugin/inavigationwidgetfactory.cpp
index 885277434d7843f7f25ff5d90b687e4201f8124b..f2ac6d8d5395f971f91bd2aec655e6a9062a9d8a 100644
--- a/src/plugins/coreplugin/inavigationwidgetfactory.cpp
+++ b/src/plugins/coreplugin/inavigationwidgetfactory.cpp
@@ -49,12 +49,12 @@ QKeySequence INavigationWidgetFactory::activationSequence()
 }
 
 
-void INavigationWidgetFactory::saveSettings(int position, QWidget *widget)
+void INavigationWidgetFactory::saveSettings(int /* position */, QWidget * /* widget */)
 {
 
 }
 
-void INavigationWidgetFactory::restoreSettings(int position, QWidget *widget)
+void INavigationWidgetFactory::restoreSettings(int /* position */, QWidget * /* widget */)
 {
 
 }
diff --git a/src/plugins/designer/cpp/formclasswizardparameters.cpp b/src/plugins/designer/cpp/formclasswizardparameters.cpp
index 19fdd7f3527bfa62d9cf40aa0af0063eade9fc53..2441cddc3a052a0c598094fe6d793cb1a69abd50 100644
--- a/src/plugins/designer/cpp/formclasswizardparameters.cpp
+++ b/src/plugins/designer/cpp/formclasswizardparameters.cpp
@@ -62,8 +62,15 @@ bool FormClassWizardParameters::generateCpp(QString *header, QString *source, in
         return false;
     }
 
+    // Build the ui class (Ui::Foo) name relative to the namespace (which is the same):
+    const QString colonColon = QLatin1String("::");
+    const int lastSeparator = uiClassName.lastIndexOf(colonColon);
+    if (lastSeparator != -1)
+        uiClassName.remove(0, lastSeparator + colonColon.size());
+    uiClassName.insert(0, QLatin1String(uiNamespaceC) + colonColon);
+
     // Do we have namespaces?
-    QStringList namespaceList = className.split(QLatin1String("::"));
+    QStringList namespaceList = className.split(colonColon);
     if (namespaceList.empty()) // Paranoia!
         return false;
 
@@ -94,18 +101,21 @@ bool FormClassWizardParameters::generateCpp(QString *header, QString *source, in
         }
     }
 
+    const QString namespaceIndent = Core::Utils::writeOpeningNameSpaces(namespaceList, indent, headerStr);
+
     // Forward-declare the UI class
     if (embedding == PointerAggregatedUiClass) {
-          headerStr << "\nnamespace " <<  uiNamespaceC << " {\n"
-            << indent << "class " << uiClassName << ";\n}\n";
+          headerStr << '\n'
+                  << namespaceIndent << "namespace " <<  uiNamespaceC << " {\n"
+                  << namespaceIndent << indent << "class " << FormTemplateWizardPagePage::stripNamespaces(uiClassName) << ";\n"
+                  << namespaceIndent << "}\n";
     }
 
-    const QString namespaceIndent = Core::Utils::writeOpeningNameSpaces(namespaceList, indent, headerStr);
     // Class declaration
     headerStr << '\n' << namespaceIndent << "class " << unqualifiedClassName
               << " : public " << formBaseClass;
     if (embedding == InheritedUiClass) {
-        headerStr << ", private " << uiNamespaceC << "::" <<  uiClassName;
+        headerStr << ", private " << uiClassName;
     }
     headerStr << " {\n" << namespaceIndent << indent << "Q_OBJECT\n"
               << namespaceIndent << indent << "Q_DISABLE_COPY(" << unqualifiedClassName << ")\n"
@@ -120,7 +130,7 @@ bool FormClassWizardParameters::generateCpp(QString *header, QString *source, in
     // Member variable
     if (embedding != InheritedUiClass) {
         headerStr << '\n' << namespaceIndent << "private:\n"
-                  << namespaceIndent << indent << uiNamespaceC << "::" <<  uiClassName << ' ';
+                  << namespaceIndent << indent << uiClassName << ' ';
         if (embedding == PointerAggregatedUiClass)
             headerStr << '*';
         headerStr << uiMemberC << ";\n";
@@ -140,7 +150,7 @@ bool FormClassWizardParameters::generateCpp(QString *header, QString *source, in
     sourceStr << '\n' << namespaceIndent << unqualifiedClassName << "::" << unqualifiedClassName << "(QWidget *parent) :\n"
                << namespaceIndent << indent << formBaseClass << "(parent)";
     if (embedding == PointerAggregatedUiClass)
-        sourceStr << ",\n"  << namespaceIndent << indent <<  uiMemberC << "(new " <<  uiNamespaceC << "::" <<  uiClassName << ")\n";
+        sourceStr << ",\n"  << namespaceIndent << indent <<  uiMemberC << "(new " << uiClassName << ")\n";
     sourceStr <<  namespaceIndent << "{\n" <<  namespaceIndent << indent;
     if (embedding != InheritedUiClass)
         sourceStr << uiMemberC << (embedding == PointerAggregatedUiClass ? "->" : ".");
diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 3113ebf3f862676cf251704ab5c5ca750566547b..83dafdc1b668cdfcbb335ea1599446464f1c0ddf 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -379,6 +379,23 @@ bool GitClient::synchronousCheckout(const QString &workingDirectory,
     return true;
 }
 
+bool GitClient::synchronousStash(const QString &workingDirectory, QString *errorMessage)
+{
+    if (Git::Constants::debug)
+        qDebug() << Q_FUNC_INFO << workingDirectory;
+    QByteArray outputText;
+    QByteArray errorText;
+    QStringList arguments;
+    arguments << QLatin1String("stash");
+    const bool rc = synchronousGit(workingDirectory, arguments, &outputText, &errorText);
+    if (!rc) {
+        *errorMessage = tr("Unable stash in %1: %2").arg(workingDirectory, QString::fromLocal8Bit(errorText));
+        return false;
+    }
+    return true;
+}
+
+
 void GitClient::executeGit(const QString &workingDirectory, const QStringList &arguments,
                            VCSBase::VCSBaseEditor* editor,
                            bool outputToWindow)
@@ -467,6 +484,60 @@ bool GitClient::synchronousGit(const QString &workingDirectory,
     return process.exitCode() == 0;
 }
 
+static inline int
+        askWithDetailedText(QWidget *parent,
+                            const QString &title, const QString &msg,
+                            const QString &inf,
+                            QMessageBox::StandardButton defaultButton,
+                            QMessageBox::StandardButtons buttons = QMessageBox::Yes|QMessageBox::No)
+{
+    QMessageBox msgBox(QMessageBox::Question, title, msg, buttons, parent);
+    msgBox.setDetailedText(inf);
+    msgBox.setDefaultButton(defaultButton);
+    return msgBox.exec();
+}
+
+// Convenience that pops up an msg box.
+GitClient::StashResult GitClient::ensureStash(const QString &workingDirectory)
+{
+    QString errorMessage;
+    const StashResult sr = ensureStash(workingDirectory, &errorMessage);
+    if (sr == StashFailed) {
+        m_plugin->outputWindow()->append(errorMessage);
+        m_plugin->outputWindow()->popup();
+    }
+    return sr;
+}
+
+// Ensure that changed files are stashed before a pull or similar
+GitClient::StashResult GitClient::ensureStash(const QString &workingDirectory, QString *errorMessage)
+{
+    QString statusOutput;
+    switch (gitStatus(workingDirectory, false, &statusOutput, errorMessage)) {
+        case StatusChanged:
+        break;
+        case StatusUnchanged:
+        return StashUnchanged;
+        case StatusFailed:
+        return StashFailed;
+    }
+
+    const int answer = askWithDetailedText(m_core->mainWindow(), tr("Changes"),
+                             tr("You have modified files. Would you like to stash your changes?"),
+                             statusOutput, QMessageBox::Yes, QMessageBox::Yes|QMessageBox::No|QMessageBox::Cancel);
+    switch (answer) {
+        case QMessageBox::Cancel:
+            return StashCanceled;
+        case QMessageBox::Yes:
+            if (!synchronousStash(workingDirectory, errorMessage))
+                return StashFailed;
+            break;
+        case QMessageBox::No: // At your own risk, so.
+            return NotStashed;
+        }
+
+    return Stashed;
+ }
 
 // Trim a git status file spec: "modified:    foo .cpp" -> "modified: foo .cpp"
 static inline QString trimFileSpecification(QString fileSpec)
@@ -476,7 +547,7 @@ static inline QString trimFileSpecification(QString fileSpec)
         // Collapse the sequence of spaces
         const int filePos = colonIndex + 2;
         int nonBlankPos = filePos;
-        for ( ; fileSpec.at(nonBlankPos).isSpace(); nonBlankPos++);
+        for ( ; fileSpec.at(nonBlankPos).isSpace(); nonBlankPos++) ;
         if (nonBlankPos > filePos)
             fileSpec.remove(filePos, nonBlankPos - filePos);
     }
@@ -703,18 +774,6 @@ bool GitClient::addAndCommit(const QString &repositoryDirectory,
     return rc;
 }
 
-static inline bool askWithInformativeText(QWidget *parent,
-                                          const QString &title,
-                                          const QString &msg,
-                                          const QString &inf,
-                                          bool defaultValue)
-{
-    QMessageBox msgBox(QMessageBox::Question, title, msg, QMessageBox::Yes|QMessageBox::No, parent);
-    msgBox.setInformativeText(inf);
-    msgBox.setDefaultButton(defaultValue ? QMessageBox::Yes : QMessageBox::No);
-    return msgBox.exec() == QMessageBox::Yes;
-}
-
 /* Revert: This function can be called with a file list (to revert single
  * files)  or a single directory (revert all). Qt Creator currently has only
  * 'revert single' in its VCS menus, but the code is prepared to deal with
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index 2ae6c3f583ad02534c409f6f2546fe5f8130973e..af45bbb9a36b6ed174b4516bfec605b9d8d4bcdc 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -92,6 +92,7 @@ public:
     bool synchronousReset(const QString &workingDirectory, const QStringList &files);
     bool synchronousReset(const QString &workingDirectory, const QStringList &files, QString *errorMessage);
     bool synchronousCheckout(const QString &workingDirectory, const QStringList &files, QString *errorMessage);
+    bool synchronousStash(const QString &workingDirectory, QString *errorMessage);
     void pull(const QString &workingDirectory);
     void push(const QString &workingDirectory);
 
@@ -105,6 +106,11 @@ public:
 
     QString readConfigValue(const QString &workingDirectory, const QString &configVar);
 
+    enum StashResult { StashUnchanged, StashCanceled, StashFailed,
+                       Stashed, NotStashed /* User did not want it */ };
+    StashResult ensureStash(const QString &workingDirectory, QString *errorMessage);
+    StashResult ensureStash(const QString &workingDirectory);
+
     bool getCommitData(const QString &workingDirectory,
                        QString *commitTemplate,
                        CommitData *d,
@@ -118,7 +124,7 @@ public:
 
     enum StatusResult { StatusChanged, StatusUnchanged, StatusFailed };
     StatusResult gitStatus(const QString &workingDirectory,
-                           bool untracked,
+                           bool untracked = false,
                            QString *output = 0,
                            QString *errorMessage = 0);
 
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index dc18fe088ed3372c36b8651ede95bae3490655dd..85af681d2091494da5798766d7778a355a589012 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -703,8 +703,17 @@ bool GitPlugin::editorAboutToClose(Core::IEditor *iEditor)
 void GitPlugin::pull()
 {
     const QString workingDirectory = getWorkingDirectory();
-    if (!workingDirectory.isEmpty())
-        m_gitClient->pull(workingDirectory);
+    if (workingDirectory.isEmpty())
+        return;
+
+    switch (m_gitClient->ensureStash(workingDirectory)) {
+        case GitClient::StashUnchanged:
+        case GitClient::Stashed:
+        case GitClient::NotStashed:
+            m_gitClient->pull(workingDirectory);
+        default:
+        break;
+    }
 }
 
 void GitPlugin::push()
diff --git a/src/plugins/git/gitplugin.h b/src/plugins/git/gitplugin.h
index 5e15a52a87a7a69939a64650a471a3f85e68dc0f..39287e1939a253c20c607c9625999b40b1e2fec1 100644
--- a/src/plugins/git/gitplugin.h
+++ b/src/plugins/git/gitplugin.h
@@ -97,6 +97,7 @@ public:
 
     GitOutputWindow             *outputWindow() const;
 
+
     GitSettings  settings() const;
     void setSettings(const GitSettings &s);
 
diff --git a/src/plugins/perforce/perforceeditor.cpp b/src/plugins/perforce/perforceeditor.cpp
index 5a0b1d2340eb9d7bf22de0a575ce85e06dac58c4..d54ce10de5ffd59156d133e205d5a61796f9933b 100644
--- a/src/plugins/perforce/perforceeditor.cpp
+++ b/src/plugins/perforce/perforceeditor.cpp
@@ -151,7 +151,7 @@ QString PerforceEditor::fileNameFromDiffSpecification(const QTextBlock &inBlock)
             // Ask plugin to map back
             const QString fileName = m_plugin->fileNameFromPerforceName(diffFileName.trimmed(), &errorMessage);
             if (fileName.isEmpty())
-                qWarning(errorMessage.toUtf8().constData());
+                qWarning("%s", qPrintable(errorMessage));
             return fileName;
         }
     }
diff --git a/src/plugins/qt4projectmanager/directorywatcher.cpp b/src/plugins/qt4projectmanager/directorywatcher.cpp
index 3434b0284d4469824a70ce60ae7bcad6d2f9b829..e2e0828219fe934125cfaabcb406ccac437759b3 100644
--- a/src/plugins/qt4projectmanager/directorywatcher.cpp
+++ b/src/plugins/qt4projectmanager/directorywatcher.cpp
@@ -207,7 +207,8 @@ int FileWatcher::m_objectCount = 0;
 QHash<QString,int> FileWatcher::m_fileCount;
 QFileSystemWatcher *FileWatcher::m_watcher = 0;
 
-FileWatcher::FileWatcher(QObject *parent)
+FileWatcher::FileWatcher(QObject *parent) :
+    QObject(parent)
 {
     if (!m_watcher)
         m_watcher = new QFileSystemWatcher();