diff --git a/src/plugins/coreplugin/vcsmanager.cpp b/src/plugins/coreplugin/vcsmanager.cpp
index 5bac775e3993fd18a6a798175acd2b7b3f3686a4..d9fd8318366d0aab3bf4c627aa9f368190eb5f2e 100644
--- a/src/plugins/coreplugin/vcsmanager.cpp
+++ b/src/plugins/coreplugin/vcsmanager.cpp
@@ -33,6 +33,7 @@
 #include "filemanager.h"
 
 #include <extensionsystem/pluginmanager.h>
+#include <utils/qtcassert.h>
 
 #include <QtCore/QString>
 #include <QtCore/QList>
@@ -133,10 +134,17 @@ IVersionControl* VCSManager::findVersionControlForDirectory(const QString &direc
     return 0;
 }
 
-bool VCSManager::showDeleteDialog(const QString &fileName)
+bool VCSManager::promptToDelete(const QString &fileName)
 {
-    IVersionControl *vc = findVersionControlForDirectory(QFileInfo(fileName).absolutePath());
-    if (!vc || !vc->supportsOperation(IVersionControl::DeleteOperation))
+    if (IVersionControl *vc = findVersionControlForDirectory(QFileInfo(fileName).absolutePath()))
+        return promptToDelete(vc, fileName);
+    return true;
+}
+
+bool VCSManager::promptToDelete(IVersionControl *vc, const QString &fileName)
+{
+    QTC_ASSERT(vc, return true)
+    if (!vc->supportsOperation(IVersionControl::DeleteOperation))
         return true;
     const QString title = QCoreApplication::translate("VCSManager", "Version Control");
     const QString msg = QCoreApplication::translate("VCSManager",
diff --git a/src/plugins/coreplugin/vcsmanager.h b/src/plugins/coreplugin/vcsmanager.h
index df8932c2b3884516ec83dd87aaa4f66577ee3cac..62c28c6dcccbc1c9e86aec4c857402d874c6c4e9 100644
--- a/src/plugins/coreplugin/vcsmanager.h
+++ b/src/plugins/coreplugin/vcsmanager.h
@@ -72,7 +72,8 @@ public:
     // Shows a confirmation dialog, whether the file should also be deleted
     // from revision control Calls sccDelete on the file. Returns false
     // if a failure occurs
-    bool showDeleteDialog(const QString &fileName);
+    bool promptToDelete(const QString &fileName);
+    bool promptToDelete(IVersionControl *versionControl, const QString &fileName);
 
     friend CORE_EXPORT QDebug operator<<(QDebug in, const VCSManager &);
 
diff --git a/src/plugins/cvs/cvsplugin.cpp b/src/plugins/cvs/cvsplugin.cpp
index 929bd41b608ed7cf9ea7ad1a3f50b9db336bb96c..06a94e38824ffe0312b773922c293444524d7f8d 100644
--- a/src/plugins/cvs/cvsplugin.cpp
+++ b/src/plugins/cvs/cvsplugin.cpp
@@ -261,14 +261,14 @@ bool CVSPlugin::initialize(const QStringList & /*arguments */, QString *errorMes
     connect(m_addAction, SIGNAL(triggered()), this, SLOT(addCurrentFile()));
     cvsMenu->addAction(command);
 
-    m_deleteAction = new Utils::ParameterAction(tr("Delete"), tr("Delete \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
+    m_deleteAction = new Utils::ParameterAction(tr("Delete..."), tr("Delete \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this);
     command = ami->registerAction(m_deleteAction, CMD_ID_DELETE_FILE,
         globalcontext);
     command->setAttribute(Core::Command::CA_UpdateText);
-    connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(deleteCurrentFile()));
+    connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(promptToDeleteCurrentFile()));
     cvsMenu->addAction(command);
 
-    m_revertAction = new Utils::ParameterAction(tr("Revert"), tr("Revert \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
+    m_revertAction = new Utils::ParameterAction(tr("Revert..."), tr("Revert \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this);
     command = ami->registerAction(m_revertAction, CMD_ID_REVERT,
         globalcontext);
     command->setAttribute(Core::Command::CA_UpdateText);
@@ -524,14 +524,6 @@ void CVSPlugin::addCurrentFile()
     vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile());
 }
 
-void CVSPlugin::deleteCurrentFile()
-{
-    const VCSBase::VCSBasePluginState state = currentState();
-    QTC_ASSERT(state.hasFile(), return)
-    if (!Core::ICore::instance()->vcsManager()->showDeleteDialog(state.currentFile()))
-        QMessageBox::warning(0, QLatin1String("CVS remove"), tr("The file '%1' could not be deleted.").arg(state.currentFile()), QMessageBox::Ok);
-}
-
 void CVSPlugin::revertCurrentFile()
 {
     const VCSBase::VCSBasePluginState state = currentState();
diff --git a/src/plugins/cvs/cvsplugin.h b/src/plugins/cvs/cvsplugin.h
index 74eb3055cc153953d37749eb3d872fe8ac89450b..33cda600febe8ea4c765bba4b00c0eaad359767e 100644
--- a/src/plugins/cvs/cvsplugin.h
+++ b/src/plugins/cvs/cvsplugin.h
@@ -99,7 +99,6 @@ public:
 
 private slots:
     void addCurrentFile();
-    void deleteCurrentFile();
     void revertCurrentFile();
     void diffProject();
     void diffCurrentFile();
diff --git a/src/plugins/mercurial/constants.h b/src/plugins/mercurial/constants.h
index aa6b1fc333415c12a26bb3ab912136af637d2200..070d2c784c45f08294b79395c3006e85773da1b7 100644
--- a/src/plugins/mercurial/constants.h
+++ b/src/plugins/mercurial/constants.h
@@ -85,6 +85,8 @@ const char * const COMMITMIMETYPE = "application/vnd.nokia.text.scs_mercurial_co
 
 //menu items
 //File menu actions
+const char * const ADD = "Mercurial.AddSingleFile";
+const char * const DELETE = "Mercurial.DeleteSingleFile";
 const char * const ANNOTATE = "Mercurial.Annotate";
 const char * const DIFF = "Mercurial.DiffSingleFile";
 const char * const LOG = "Mercurial.LogSingleFile";
diff --git a/src/plugins/mercurial/mercurialcontrol.cpp b/src/plugins/mercurial/mercurialcontrol.cpp
index 2bfca86258a302aa0379e001082da2b20db01686..44c6ee04a04a33ff8356fa1e032a19abfd63c00e 100644
--- a/src/plugins/mercurial/mercurialcontrol.cpp
+++ b/src/plugins/mercurial/mercurialcontrol.cpp
@@ -38,8 +38,7 @@
 using namespace Mercurial::Internal;
 
 MercurialControl::MercurialControl(MercurialClient *client)
-        :   mercurialClient(client),
-            mercurialEnabled(true)
+        :   mercurialClient(client)
 {
 }
 
diff --git a/src/plugins/mercurial/mercurialcontrol.h b/src/plugins/mercurial/mercurialcontrol.h
index 2c11637aa5a2a8c49c977fbaad8219a55e9926fa..df3b99ef64cca071c80eed250f8fd0c1d68ca3de 100644
--- a/src/plugins/mercurial/mercurialcontrol.h
+++ b/src/plugins/mercurial/mercurialcontrol.h
@@ -66,7 +66,6 @@ public slots:
 
 private:
     MercurialClient *mercurialClient;
-    bool mercurialEnabled;
 };
 
 } //namespace Internal
diff --git a/src/plugins/mercurial/mercurialplugin.cpp b/src/plugins/mercurial/mercurialplugin.cpp
index a0cc33095332e69c3eaee14874df166370c898bc..009d44375c69300a3d268e113567b3bcb1e3e830 100644
--- a/src/plugins/mercurial/mercurialplugin.cpp
+++ b/src/plugins/mercurial/mercurialplugin.cpp
@@ -41,6 +41,7 @@
 
 #include <coreplugin/actionmanager/actionmanager.h>
 #include <coreplugin/basemode.h>
+#include <coreplugin/vcsmanager.h>
 #include <coreplugin/coreconstants.h>
 #include <coreplugin/icore.h>
 #include <coreplugin/modemanager.h>
@@ -124,6 +125,8 @@ MercurialPlugin::MercurialPlugin() :
         optionsPage(0),
         m_client(0),
         changeLog(0),
+        m_addAction(0),
+        m_deleteAction(0),
         m_menuAction(0)
 {
     m_instance = this;
@@ -225,38 +228,59 @@ void MercurialPlugin::createFileActions(const QList<int> &context)
 {
     Core::Command *command;
 
-    annotateFile = new Utils::ParameterAction(tr("Annotate Current File"), tr("Annotate \"%1\""), Utils::ParameterAction::AlwaysEnabled, this);
+    annotateFile = new Utils::ParameterAction(tr("Annotate Current File"), tr("Annotate \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
     command = actionManager->registerAction(annotateFile, QLatin1String(Constants::ANNOTATE), context);
     command->setAttribute(Core::Command::CA_UpdateText);
     connect(annotateFile, SIGNAL(triggered()), this, SLOT(annotateCurrentFile()));
     mercurialContainer->addAction(command);
 
-    diffFile = new Utils::ParameterAction(tr("Diff Current File"), tr("Diff \"%1\""), Utils::ParameterAction::AlwaysEnabled, this);
+    diffFile = new Utils::ParameterAction(tr("Diff Current File"), tr("Diff \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
     command = actionManager->registerAction(diffFile, QLatin1String(Constants::DIFF), context);
     command->setAttribute(Core::Command::CA_UpdateText);
     command->setDefaultKeySequence(QKeySequence(tr("Alt+H,Alt+D")));
     connect(diffFile, SIGNAL(triggered()), this, SLOT(diffCurrentFile()));
     mercurialContainer->addAction(command);
 
-    logFile = new Utils::ParameterAction(tr("Log Current File"), tr("Log \"%1\""), Utils::ParameterAction::AlwaysEnabled, this);
+    logFile = new Utils::ParameterAction(tr("Log Current File"), tr("Log \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
     command = actionManager->registerAction(logFile, QLatin1String(Constants::LOG), context);
     command->setAttribute(Core::Command::CA_UpdateText);
     command->setDefaultKeySequence(QKeySequence(tr("Alt+H,Alt+L")));
     connect(logFile, SIGNAL(triggered()), this, SLOT(logCurrentFile()));
     mercurialContainer->addAction(command);
 
-    revertFile = new Utils::ParameterAction(tr("Revert Current File"), tr("Revert \"%1\""), Utils::ParameterAction::AlwaysEnabled, this);
-    command = actionManager->registerAction(revertFile, QLatin1String(Constants::REVERT), context);
-    command->setAttribute(Core::Command::CA_UpdateText);
-    connect(revertFile, SIGNAL(triggered()), this, SLOT(revertCurrentFile()));
-    mercurialContainer->addAction(command);
-
-    statusFile = new Utils::ParameterAction(tr("Status Current File"), tr("Status \"%1\""), Utils::ParameterAction::AlwaysEnabled, this);
+    statusFile = new Utils::ParameterAction(tr("Status Current File"), tr("Status \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
     command = actionManager->registerAction(statusFile, QLatin1String(Constants::STATUS), context);
     command->setAttribute(Core::Command::CA_UpdateText);
     command->setDefaultKeySequence(QKeySequence(tr("Alt+H,Alt+S")));
     connect(statusFile, SIGNAL(triggered()), this, SLOT(statusCurrentFile()));
     mercurialContainer->addAction(command);
+
+    createSeparator(context, QLatin1String("FileDirSeperator1"));
+
+    m_addAction = new Utils::ParameterAction(tr("Add"), tr("Add \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
+    command = actionManager->registerAction(m_addAction, QLatin1String(Constants::ADD), context);
+    command->setAttribute(Core::Command::CA_UpdateText);
+    connect(m_addAction, SIGNAL(triggered()), this, SLOT(addCurrentFile()));
+    mercurialContainer->addAction(command);
+
+    m_deleteAction = new Utils::ParameterAction(tr("Delete..."), tr("Delete \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this);
+    command = actionManager->registerAction(m_deleteAction, QLatin1String(Constants::DELETE), context);
+    command->setAttribute(Core::Command::CA_UpdateText);
+    connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(promptToDeleteCurrentFile()));
+    mercurialContainer->addAction(command);
+
+    revertFile = new Utils::ParameterAction(tr("Revert Current File..."), tr("Revert \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this);
+    command = actionManager->registerAction(revertFile, QLatin1String(Constants::REVERT), context);
+    command->setAttribute(Core::Command::CA_UpdateText);
+    connect(revertFile, SIGNAL(triggered()), this, SLOT(revertCurrentFile()));
+    mercurialContainer->addAction(command);
+}
+
+void MercurialPlugin::addCurrentFile()
+{
+    const VCSBase::VCSBasePluginState state = currentState();
+    QTC_ASSERT(state.hasFile(), return)
+    m_client->add(state.currentFileTopLevel(), state.relativeCurrentFile());
 }
 
 void MercurialPlugin::annotateCurrentFile()
@@ -655,19 +679,15 @@ void MercurialPlugin::updateActions(VCSBase::VCSBasePlugin::ActionState as)
         return;
 
     const QString filename = currentState().currentFileName();
-    const bool fileEnabled = !filename.isEmpty();
     const bool repoEnabled = currentState().hasTopLevel();
 
     annotateFile->setParameter(filename);
-    annotateFile->setEnabled(fileEnabled);
     diffFile->setParameter(filename);
-    diffFile->setEnabled(fileEnabled);
     logFile->setParameter(filename);
-    logFile->setEnabled(fileEnabled);
+    m_addAction->setParameter(filename);
+    m_deleteAction->setParameter(filename);
     revertFile->setParameter(filename);
-    revertFile->setEnabled(fileEnabled);
     statusFile->setParameter(filename);
-    statusFile->setEnabled(fileEnabled);
 
     foreach (QAction *repoAction, m_repositoryActionList)
         repoAction->setEnabled(repoEnabled);
diff --git a/src/plugins/mercurial/mercurialplugin.h b/src/plugins/mercurial/mercurialplugin.h
index 6b6e9f50717a1b61525afff367d0c58343cf1dad..0a441965ab51a9c141c686bd5e664fe9a823902b 100644
--- a/src/plugins/mercurial/mercurialplugin.h
+++ b/src/plugins/mercurial/mercurialplugin.h
@@ -88,6 +88,7 @@ public:
 
 private slots:
     // File menu action Slots
+    void addCurrentFile();
     void annotateCurrentFile();
     void diffCurrentFile();
     void logCurrentFile();
@@ -156,6 +157,8 @@ private:
     QTemporaryFile *changeLog;
 
     //Menu Items (file actions)
+    Utils::ParameterAction *m_addAction;
+    Utils::ParameterAction *m_deleteAction;
     Utils::ParameterAction *annotateFile;
     Utils::ParameterAction *diffFile;
     Utils::ParameterAction *logFile;
diff --git a/src/plugins/perforce/perforceplugin.cpp b/src/plugins/perforce/perforceplugin.cpp
index d2a37da631fe4eec38549e500ff2bc7fc29c295a..d22690bd409309ecabf073d7ef03ef2cb08d5ada 100644
--- a/src/plugins/perforce/perforceplugin.cpp
+++ b/src/plugins/perforce/perforceplugin.cpp
@@ -276,11 +276,11 @@ bool PerforcePlugin::initialize(const QStringList & /* arguments */, QString * e
     connect(m_addAction, SIGNAL(triggered()), this, SLOT(addCurrentFile()));
     mperforce->addAction(command);
 
-    m_deleteAction = new Utils::ParameterAction(tr("Delete"), tr("Delete \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
+    m_deleteAction = new Utils::ParameterAction(tr("Delete..."), tr("Delete \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this);
     command = am->registerAction(m_deleteAction, CMD_ID_DELETE_FILE, globalcontext);
     command->setAttribute(Core::Command::CA_UpdateText);
     command->setDefaultText(tr("Delete File"));
-    connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(deleteCurrentFile()));
+    connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(promptToDeleteCurrentFile()));
     mperforce->addAction(command);
 
     m_revertFileAction = new Utils::ParameterAction(tr("Revert"), tr("Revert \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
@@ -451,13 +451,6 @@ void PerforcePlugin::addCurrentFile()
     vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile());
 }
 
-void PerforcePlugin::deleteCurrentFile()
-{
-    const VCSBase::VCSBasePluginState state = currentState();
-    QTC_ASSERT(state.hasFile(), return)
-    vcsDelete(state.currentFileTopLevel(), state.relativeCurrentFile());
-}
-
 void PerforcePlugin::revertCurrentFile()
 {
     const VCSBase::VCSBasePluginState state = currentState();
diff --git a/src/plugins/perforce/perforceplugin.h b/src/plugins/perforce/perforceplugin.h
index 8f7c3819e495bb7e15cabc096eda8e06e9eebfb1..5c70ddd8b86887684d02e53e2d31e32ad8927b06 100644
--- a/src/plugins/perforce/perforceplugin.h
+++ b/src/plugins/perforce/perforceplugin.h
@@ -106,7 +106,6 @@ public slots:
 private slots:
     void openCurrentFile();
     void addCurrentFile();
-    void deleteCurrentFile();
     void revertCurrentFile();
     void printOpenedFileList();
     void diffCurrentFile();
diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp
index 292c6b2f28f46aa58d45183c694e2b94728b91cd..cd84597b172369e2a723b78f28d04e4d7601f5c8 100644
--- a/src/plugins/projectexplorer/projectexplorer.cpp
+++ b/src/plugins/projectexplorer/projectexplorer.cpp
@@ -1946,7 +1946,7 @@ void ProjectExplorerPlugin::removeFile()
         }
 
         // remove from version control
-        core->vcsManager()->showDeleteDialog(filePath);
+        core->vcsManager()->promptToDelete(filePath);
 
         // remove from file system
         if (deleteFile) {
diff --git a/src/plugins/subversion/subversionplugin.cpp b/src/plugins/subversion/subversionplugin.cpp
index e83d3262c08045e726f0df100111f97bc2f5b447..aef5560eff16124110c06f1424266db6d310dcc0 100644
--- a/src/plugins/subversion/subversionplugin.cpp
+++ b/src/plugins/subversion/subversionplugin.cpp
@@ -292,14 +292,14 @@ bool SubversionPlugin::initialize(const QStringList & /*arguments */, QString *e
     connect(m_addAction, SIGNAL(triggered()), this, SLOT(addCurrentFile()));
     subversionMenu->addAction(command);
 
-    m_deleteAction = new Utils::ParameterAction(tr("Delete"), tr("Delete \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
+    m_deleteAction = new Utils::ParameterAction(tr("Delete..."), tr("Delete \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this);
     command = ami->registerAction(m_deleteAction, CMD_ID_DELETE_FILE,
         globalcontext);
     command->setAttribute(Core::Command::CA_UpdateText);
-    connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(deleteCurrentFile()));
+    connect(m_deleteAction, SIGNAL(triggered()), this, SLOT(promptToDeleteCurrentFile()));
     subversionMenu->addAction(command);
 
-    m_revertAction = new Utils::ParameterAction(tr("Revert"), tr("Revert \"%1\""), Utils::ParameterAction::EnabledWithParameter, this);
+    m_revertAction = new Utils::ParameterAction(tr("Revert..."), tr("Revert \"%1\"..."), Utils::ParameterAction::EnabledWithParameter, this);
     command = ami->registerAction(m_revertAction, CMD_ID_REVERT,
         globalcontext);
     command->setAttribute(Core::Command::CA_UpdateText);
@@ -556,13 +556,6 @@ void SubversionPlugin::addCurrentFile()
     vcsAdd(state.currentFileTopLevel(), state.relativeCurrentFile());
 }
 
-void SubversionPlugin::deleteCurrentFile()
-{
-    const VCSBase::VCSBasePluginState state = currentState();
-    QTC_ASSERT(state.hasFile(), return)
-    vcsDelete(state.currentFileTopLevel(), state.relativeCurrentFile());
-}
-
 void SubversionPlugin::revertCurrentFile()
 {
     const VCSBase::VCSBasePluginState state = currentState();
diff --git a/src/plugins/subversion/subversionplugin.h b/src/plugins/subversion/subversionplugin.h
index d8ca80810bada019dc2c10aa50bb6c4c90b0d19c..97fda4b06ddd98719948c432d7dc3e3c4435be77 100644
--- a/src/plugins/subversion/subversionplugin.h
+++ b/src/plugins/subversion/subversionplugin.h
@@ -98,7 +98,6 @@ public:
 
 private slots:
     void addCurrentFile();
-    void deleteCurrentFile();
     void revertCurrentFile();
     void diffProject();
     void diffCurrentFile();
diff --git a/src/plugins/vcsbase/vcsbaseplugin.cpp b/src/plugins/vcsbase/vcsbaseplugin.cpp
index 07b719414d3e887e654a6d8ae759a8a781a44cd7..b672fba110a3b45bc44bfda73464d66ae985d773 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.cpp
+++ b/src/plugins/vcsbase/vcsbaseplugin.cpp
@@ -46,6 +46,7 @@
 #include <QtCore/QSharedData>
 
 #include <QtGui/QAction>
+#include <QtGui/QMessageBox>
 
 enum { debug = 0 };
 
@@ -446,6 +447,15 @@ bool VCSBasePlugin::enableMenuAction(ActionState as, QAction *menuAction)
     return true;
 }
 
+void VCSBasePlugin::promptToDeleteCurrentFile()
+{
+    const VCSBasePluginState state = currentState();
+    QTC_ASSERT(state.hasFile(), return)
+    const bool rc = Core::ICore::instance()->vcsManager()->promptToDelete(versionControl(), state.currentFile());
+    if (!rc)
+        QMessageBox::warning(0, tr("Version Control"), tr("The file '%1' could not be deleted.").arg(state.currentFile()), QMessageBox::Ok);
+}
+
 } // namespace VCSBase
 
 #include "vcsbaseplugin.moc"
diff --git a/src/plugins/vcsbase/vcsbaseplugin.h b/src/plugins/vcsbase/vcsbaseplugin.h
index 70f3e8f20aa8e870dad77f46cb8197fd4c0fa472..c5760032aa1f0eaee212940c9b6d04878349a6ce 100644
--- a/src/plugins/vcsbase/vcsbaseplugin.h
+++ b/src/plugins/vcsbase/vcsbaseplugin.h
@@ -149,6 +149,11 @@ public:
     const VCSBasePluginState &currentState() const;
     Core::IVersionControl *versionControl() const;
 
+public slots:
+    // Convenience slot for "Delete current file" action. Prompts to
+    // delete the file via VCSManager.
+    void promptToDeleteCurrentFile();
+
 protected:
     enum ActionState { NoVCSEnabled, OtherVCSEnabled, VCSEnabled };