diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index b9bbbdbc383f94a1e5442be9b55aa9b2798c56a7..95d4d7ced98ea4774f95c69103e5b00c53ed50f4 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1147,8 +1147,9 @@ GitClient::StatusResult GitClient::gitStatus(const QString &workingDirectory,
         }
         return StatusFailed;
     }
-    // Unchanged?
-    if (outputText.contains("nothing to commit"))
+    // Unchanged (output text depending on whether -u was passed)
+    if (outputText.contains("nothing to commit")
+        || outputText.contains("nothing added to commit but untracked files present"))
         return StatusUnchanged;
     return StatusChanged;
 }
diff --git a/src/plugins/mercurial/mercurialclient.cpp b/src/plugins/mercurial/mercurialclient.cpp
index eda48fe909e89c578b0fd278ab961df099e4d372..c798e538822a7b861355910c1b62cfe92d84009d 100644
--- a/src/plugins/mercurial/mercurialclient.cpp
+++ b/src/plugins/mercurial/mercurialclient.cpp
@@ -121,6 +121,7 @@ bool MercurialClient::executeHgSynchronously(const QString  &workingDir,
     QProcess hgProcess;
     if (!workingDir.isEmpty())
         hgProcess.setWorkingDirectory(workingDir);
+    MercurialJobRunner::setProcessEnvironment(hgProcess);
 
     const MercurialSettings &settings = MercurialPlugin::instance()->settings();
     const QString binary = settings.binary();
diff --git a/src/plugins/mercurial/mercurialjobrunner.cpp b/src/plugins/mercurial/mercurialjobrunner.cpp
index 17e2ea4f111812c0cd430f67a6572f79cd6cbaf6..54f343c122ddb04a90bd7e453efb0a5dbe7e80aa 100644
--- a/src/plugins/mercurial/mercurialjobrunner.cpp
+++ b/src/plugins/mercurial/mercurialjobrunner.cpp
@@ -37,6 +37,7 @@
 #include <utils/synchronousprocess.h>
 
 #include <QtCore/QProcess>
+#include <QtCore/QProcessEnvironment>
 #include <QtCore/QString>
 #include <QtCore/QDebug>
 
@@ -161,6 +162,16 @@ QString MercurialJobRunner::msgTimeout(int timeoutSeconds)
     return tr("Timed out after %1s waiting for mercurial process to finish.").arg(timeoutSeconds);
 }
 
+// Set environment for a hg process to run in locale "C". Note that there appears
+// to be a bug in hg that causes special characters to be garbled when running
+// in a different language, which seems to be independent from the encoding.
+void MercurialJobRunner::setProcessEnvironment(QProcess &p)
+{
+    QProcessEnvironment env = QProcessEnvironment::systemEnvironment();
+    env.insert(QLatin1String("LANG"), QString(QLatin1Char('C')));
+    p.setProcessEnvironment(env);
+}
+
 void MercurialJobRunner::task(const QSharedPointer<HgTask> &job)
 {
     HgTask *taskData = job.data();
@@ -193,7 +204,7 @@ void MercurialJobRunner::task(const QSharedPointer<HgTask> &job)
 
     QProcess hgProcess;
     hgProcess.setWorkingDirectory(taskData->repositoryRoot());
-
+    MercurialJobRunner::setProcessEnvironment(hgProcess);
 
     hgProcess.start(binary, args);
 
diff --git a/src/plugins/mercurial/mercurialjobrunner.h b/src/plugins/mercurial/mercurialjobrunner.h
index 8d124e2457e083b13ba2f548bc1b38dff4d76811..df6f1f79d632b214cdc74e0d9694f6131eff4410 100644
--- a/src/plugins/mercurial/mercurialjobrunner.h
+++ b/src/plugins/mercurial/mercurialjobrunner.h
@@ -39,6 +39,10 @@
 #include <QtCore/QVariant>
 #include <QtCore/QString>
 
+QT_BEGIN_NAMESPACE
+class QProcess;
+QT_END_NAMESPACE
+
 namespace VCSBase {
 class VCSBaseEditor;
 }
@@ -95,6 +99,9 @@ public:
     static QString msgStartFailed(const QString &binary, const QString &why);
     static QString msgTimeout(int timeoutSeconds);
 
+    // Set environment for a hg process to run in locale "C"
+    static void setProcessEnvironment(QProcess &p);
+
 protected:
     void run();