diff --git a/src/plugins/git/gitclient.cpp b/src/plugins/git/gitclient.cpp
index 75423545226d48c9da3fe09e537cf4cee8b7d4ec..aeced497c23de91aa8770739bbfd7c1d047345c4 100644
--- a/src/plugins/git/gitclient.cpp
+++ b/src/plugins/git/gitclient.cpp
@@ -1013,15 +1013,14 @@ DiffEditor::DiffEditor *GitClient::createDiffEditor(const char *registerDynamicP
  * (using the file's codec). Makes use of a dynamic property to find an
  * existing instance and to reuse it (in case, say, 'git diff foo' is
  * already open). */
-VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor(const Core::Id &id,
-                                                         QString title,
-                                                         // Source file or directory
-                                                         const QString &source,
-                                                         CodecType codecType,
-                                                         // Dynamic property and value to identify that editor
-                                                         const char *registerDynamicProperty,
-                                                         const QString &dynamicPropertyValue,
-                                                         QWidget *configWidget) const
+VcsBase::VcsBaseEditorWidget *GitClient::createVcsEditor(
+        const Core::Id &id,
+        QString title,
+        const QString &source, // Source file or directory
+        CodecType codecType,
+        const char *registerDynamicProperty, // Dynamic property and value to identify that editor
+        const QString &dynamicPropertyValue,
+        VcsBase::VcsBaseEditorParameterWidget *configWidget) const
 {
     VcsBase::VcsBaseEditorWidget *rc = 0;
     QTC_CHECK(!findExistingVCSEditor(registerDynamicProperty, dynamicPropertyValue));
@@ -1219,14 +1218,10 @@ void GitClient::diff(const QString &workingDirectory,
         }
         vcsEditor->setDiffBaseDirectory(workingDirectory);
 
-        GitFileDiffArgumentsWidget *argWidget = qobject_cast<GitFileDiffArgumentsWidget *>(
-                    vcsEditor->configurationWidget());
-        QStringList userDiffArgs = argWidget->arguments();
-
         QStringList cmdArgs;
         cmdArgs << QLatin1String("diff")
                 << QLatin1String(noColorOption)
-                << userDiffArgs;
+                << vcsEditor->configurationWidget()->arguments();
 
         if (!fileName.isEmpty())
             cmdArgs << QLatin1String("--") << fileName;
@@ -1287,14 +1282,10 @@ void GitClient::diffBranch(const QString &workingDirectory,
         }
         vcsEditor->setDiffBaseDirectory(workingDirectory);
 
-        GitBranchDiffArgumentsWidget *argWidget = qobject_cast<GitBranchDiffArgumentsWidget *>(
-                    vcsEditor->configurationWidget());
-        QStringList userDiffArgs = argWidget->arguments();
-
         QStringList cmdArgs;
         cmdArgs << QLatin1String("diff")
                 << QLatin1String(noColorOption)
-                << userDiffArgs
+                << vcsEditor->configurationWidget()->arguments()
                 << branchName;
 
         executeGit(workingDirectory, cmdArgs, vcsEditor);
@@ -1450,15 +1441,11 @@ void GitClient::show(const QString &source, const QString &id,
             newEditor = vcsEditor->editor();
         }
 
-        GitShowArgumentsWidget *argWidget = qobject_cast<GitShowArgumentsWidget *>(
-                    vcsEditor->configurationWidget());
-        QStringList userArgs = argWidget->arguments();
-
         QStringList arguments;
         arguments << QLatin1String("show")
                   << QLatin1String(noColorOption)
                   << QLatin1String(decorateOption)
-                  << userArgs
+                  << vcsEditor->configurationWidget()->arguments()
                   << id;
 
         vcsEditor->setDiffBaseDirectory(workingDirectory);
@@ -1520,12 +1507,9 @@ void GitClient::blame(const QString &workingDirectory,
         argWidget->setEditor(editor);
     }
 
-    GitBlameArgumentsWidget *argWidget = qobject_cast<GitBlameArgumentsWidget *>(editor->configurationWidget());
-    QStringList userBlameArgs = argWidget->arguments();
-
     QStringList arguments(QLatin1String("blame"));
     arguments << QLatin1String("--root");
-    arguments.append(userBlameArgs);
+    arguments.append(editor->configurationWidget()->arguments());
     arguments << QLatin1String("--") << fileName;
     if (!revision.isEmpty())
         arguments << revision;
diff --git a/src/plugins/git/gitclient.h b/src/plugins/git/gitclient.h
index b5ca2b083e1cf31c8f43892e7108af6453b40c35..969f7983e57bedfdf9bfecce62508f68fcb829e5 100644
--- a/src/plugins/git/gitclient.h
+++ b/src/plugins/git/gitclient.h
@@ -54,6 +54,7 @@ namespace VcsBase {
     class Command;
     class SubmitFileModel;
     class VcsBaseEditorWidget;
+    class VcsBaseEditorParameterWidget;
 }
 
 namespace Utils {
@@ -363,7 +364,7 @@ private:
                                             CodecType codecType,
                                             const char *registerDynamicProperty,
                                             const QString &dynamicPropertyValue,
-                                            QWidget *configWidget) const;
+                                            VcsBase::VcsBaseEditorParameterWidget *configWidget) const;
     DiffEditor::DiffEditor *createDiffEditor(const char *registerDynamicProperty,
                                              const QString &dynamicPropertyValue,
                                              const QString &titlePattern,
diff --git a/src/plugins/vcsbase/vcsbaseeditor.cpp b/src/plugins/vcsbase/vcsbaseeditor.cpp
index 62f862e881f9f7a2a269b87d0936442fd1bd2029..5f6283098169e70243c0422ec59116ab3070b743 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.cpp
+++ b/src/plugins/vcsbase/vcsbaseeditor.cpp
@@ -31,6 +31,7 @@
 #include "diffhighlighter.h"
 #include "baseannotationhighlighter.h"
 #include "vcsbaseplugin.h"
+#include "vcsbaseeditorparameterwidget.h"
 
 #include <coreplugin/icore.h>
 #include <coreplugin/vcsmanager.h>
@@ -566,7 +567,7 @@ public:
     QString m_copyRevisionTextFormat;
     bool m_fileLogAnnotateEnabled;
     TextEditor::BaseTextEditor *m_editor;
-    QWidget *m_configurationWidget;
+    VcsBaseEditorParameterWidget *m_configurationWidget;
     bool m_mouseDragging;
     QList<AbstractTextCursorHandler *> m_textCursorHandlers;
 
@@ -1324,7 +1325,7 @@ QString VcsBaseEditorWidget::getTitleId(const QString &workingDirectory,
     return rc;
 }
 
-bool VcsBaseEditorWidget::setConfigurationWidget(QWidget *w)
+bool VcsBaseEditorWidget::setConfigurationWidget(VcsBaseEditorParameterWidget *w)
 {
     if (!d->m_editor || d->m_configurationWidget)
         return false;
@@ -1335,7 +1336,7 @@ bool VcsBaseEditorWidget::setConfigurationWidget(QWidget *w)
     return true;
 }
 
-QWidget *VcsBaseEditorWidget::configurationWidget() const
+VcsBaseEditorParameterWidget *VcsBaseEditorWidget::configurationWidget() const
 {
     return d->m_configurationWidget;
 }
diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h
index b438b93bbe5a72937a2577f664d2fecfa81fd824..5bbd78b4d4764a835040e698a04a07281475edfc 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.h
+++ b/src/plugins/vcsbase/vcsbaseeditor.h
@@ -54,6 +54,7 @@ class VcsBaseEditorWidgetPrivate;
 
 class DiffHighlighter;
 class BaseAnnotationHighlighter;
+class VcsBaseEditorParameterWidget;
 
 // Documentation inside
 enum EditorContentType
@@ -183,8 +184,8 @@ public:
                               const QStringList &fileNames,
                               const QString &revision = QString());
 
-    bool setConfigurationWidget(QWidget *w);
-    QWidget *configurationWidget() const;
+    bool setConfigurationWidget(VcsBaseEditorParameterWidget *w);
+    VcsBaseEditorParameterWidget *configurationWidget() const;
 
     /* Tagging editors: Sometimes, an editor should be re-used, for example, when showing
      * a diff of the same file with different diff-options. In order to be able to find