diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 720e0d5..049e9b0 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -571,28 +571,32 @@ void GitPlugin::diffCurrentFile()
 {
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return)
-    m_gitClient->diff(state.currentFileTopLevel(), QStringList(), state.relativeCurrentFile());
+    if (ensureFileSaved(state.currentFile()))
+        m_gitClient->diff(state.currentFileTopLevel(), QStringList(), state.relativeCurrentFile());
 }

 void GitPlugin::diffCurrentProject()
 {
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasProject(), return)
-    m_gitClient->diff(state.currentProjectTopLevel(), QStringList(), state.relativeCurrentProject());
+    if (ensureAllFilesSaved())
+        m_gitClient->diff(state.currentProjectTopLevel(), QStringList(), state.relativeCurrentProject());
 }

 void GitPlugin::diffRepository()
 {
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasTopLevel(), return)
-    m_gitClient->diff(state.topLevel(), QStringList(), QStringList());
+    if (ensureAllFilesSaved())
+        m_gitClient->diff(state.topLevel(), QStringList(), QStringList());
 }

 void GitPlugin::logFile()
 {
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return)
-    m_gitClient->log(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()), true);
+    if (ensureFileSaved(state.currentFile()))
+        m_gitClient->log(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()), true);
 }

 void GitPlugin::blameFile()
@@ -600,7 +604,8 @@ void GitPlugin::blameFile()
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return)
     const int lineNumber = VCSBase::VCSBaseEditorWidget::lineNumberOfCurrentEditor(state.currentFile());
-    m_gitClient->blame(state.currentFileTopLevel(), QStringList(), state.relativeCurrentFile(), QString(), lineNumber);
+    if (ensureFileSaved(state.currentFile()))
+        m_gitClient->blame(state.currentFileTopLevel(), QStringList(), state.relativeCurrentFile(), QString(), lineNumber);
 }

 void GitPlugin::logProject()
@@ -642,14 +647,16 @@ void GitPlugin::stageFile()
 {
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return)
-    m_gitClient->addFile(state.currentFileTopLevel(), state.relativeCurrentFile());
+    if (ensureFileSaved(state.currentFile()))
+        m_gitClient->addFile(state.currentFileTopLevel(), state.relativeCurrentFile());
 }

 void GitPlugin::unstageFile()
 {
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasFile(), return)
-    m_gitClient->synchronousReset(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()));
+    if (ensureFileSaved(state.currentFile()))
+        m_gitClient->synchronousReset(state.currentFileTopLevel(), QStringList(state.relativeCurrentFile()));
 }

 void GitPlugin::startAmendCommit()
@@ -810,6 +817,8 @@ void GitPlugin::pull()
 {
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasTopLevel(), return)
+    if (!ensureAllFilesSaved())
+        return;

     switch (m_gitClient->ensureStash(state.topLevel())) {
         case GitClient::StashUnchanged:
@@ -898,23 +907,6 @@ void GitPlugin::cleanRepository(const QString &directory)
     dialog.exec();
 }

-// If the file is modified in an editor, make sure it is saved.
-static bool ensureFileSaved(const QString &fileName)
-{
-    const QList<Core::IEditor*> editors = Core::EditorManager::instance()->editorsForFileName(fileName);
-    if (editors.isEmpty())
-        return true;
-    Core::IFile *file = editors.front()->file();
-    if (!file || !file->isModified())
-        return true;
-    Core::FileManager *fm = Core::ICore::instance()->fileManager();
-    bool canceled;
-    QList<Core::IFile *> files;
-    files << file;
-    fm->saveModifiedFiles(files, &canceled);
-    return !canceled;
-}
-
 void GitPlugin::applyCurrentFilePatch()
 {
     const VCSBase::VCSBasePluginState state = currentState();
@@ -971,6 +963,8 @@ void GitPlugin::stash()
     // Simple stash without prompt, reset repo.
     const VCSBase::VCSBasePluginState state = currentState();
     QTC_ASSERT(state.hasTopLevel(), return)
+    if (!ensureAllFilesSaved())
+        return;
     const QString id = m_gitClient->synchronousStash(state.topLevel(), QString(), 0);
     if (!id.isEmpty() && m_stashDialog)
         m_stashDialog->refresh(state.topLevel(), true);
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index cb240bf..dd879fb 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -609,26 +609,35 @@ bool VCSBasePlugin::enableMenuAction(ActionState as, QAction *menuAction) const
     return true;
 }

+// If the file is modified in an editor, make sure it is saved.
+bool VCSBasePlugin::ensureFileSaved(const QString &fileName)
+{
+    const QList<Core::IEditor*> editors = Core::EditorManager::instance()->editorsForFileName(fileName);
+    if (editors.isEmpty())
+        return true;
+    Core::IFile *file = editors.front()->file();
+    if (!file || !file->isModified())
+        return true;
+    Core::FileManager *fm = Core::ICore::instance()->fileManager();
+    bool canceled;
+    QList<Core::IFile *> files;
+    files << file;
+    fm->saveModifiedFiles(files, &canceled);
+    return !canceled;
+}
+
+
 bool VCSBasePlugin::ensureAllFilesSaved() const
 {
     QList<Core::IFile *> filesToSave = Core::ICore::instance()->fileManager()->modifiedFiles();
     if (!filesToSave.isEmpty()) {
-        if (false) { // TODO Always save optiont
-            Core::ICore::instance()->fileManager()->saveModifiedFilesSilently(filesToSave);
-        } else {
-            bool cancelled = false;
-            bool alwaysSave = false;
+        bool cancelled = false;

-            Core::FileManager *fm = Core::ICore::instance()->fileManager();
-            fm->saveModifiedFiles(filesToSave, &cancelled, QString(),
-                                  tr("Always save files before commit"), &alwaysSave);
+        Core::FileManager *fm = Core::ICore::instance()->fileManager();
+        fm->saveModifiedFiles(filesToSave, &cancelled, QString());

-            if (cancelled)
-                return false;
-            if (alwaysSave) {
-                // TODO store
-            }
-        }
+        if (cancelled)
+            return false;
     }
     return true;
 }
diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h
index c4c6e50..2ef94ff 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.h
+++ b/src/plugins/vcsbase/vcsbaseplugin.h
@@ -218,6 +218,11 @@ protected:
     // Returns whether actions should be set up further.
     bool enableMenuAction(ActionState as, QAction *in) const;

+    // A helper to ask the user to save the file
+    // returnes false if the user canceled the dialog
+    // can return true on either savin everything or if the
+    // user didn't want to save all
+    bool ensureFileSaved(const QString &fileName);
     // A helper to ask the user to save all files
     // returnes false if the user canceled the dialog
     // can return true on either savin everything or if the
