diff --git a/src/plugins/git/Git.mimetypes.xml b/src/plugins/git/Git.mimetypes.xml
new file mode 100644
index 0000000000000000000000000000000000000000..c40c30181a93a02c3b19eccfc5cbe9b66874a9f1
--- /dev/null
+++ b/src/plugins/git/Git.mimetypes.xml
@@ -0,0 +1,9 @@
+<?xml version="1.0"?>
+<mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+    <mime-type type="text/vnd.qtcreator.git.commit">
+        <sub-class-of type="text/plain"/>
+        <comment>Git Commit File</comment>
+        <glob pattern="COMMIT_MSG"/>
+        <glob pattern="COMMIT_EDITMSG"/>
+    </mime-type>
+</mime-info>
diff --git a/src/plugins/git/git.pro b/src/plugins/git/git.pro
index 066342764375e88023cdbf460712d0b76a0cbf33..0366c953e11efcfefeec23c98b5d86ddcf25350a 100644
--- a/src/plugins/git/git.pro
+++ b/src/plugins/git/git.pro
@@ -62,4 +62,6 @@ include(gitorious/gitorious.pri)
 RESOURCES += \
     git.qrc
 
+OTHER_FILES += Git.mimetypes.xml
+
 include(gerrit/gerrit.pri)
diff --git a/src/plugins/git/git.qbs b/src/plugins/git/git.qbs
index 80acf97b6edfba28cfd355f4deff4797b77e5f75..2f8110f8f28301408657cd56f424d9a2ef96c7b7 100644
--- a/src/plugins/git/git.qbs
+++ b/src/plugins/git/git.qbs
@@ -14,6 +14,7 @@ QtcPlugin {
     Depends { name: "Locator" }
 
     files: [
+        "Git.mimetypes.xml",
         "annotationhighlighter.cpp",
         "annotationhighlighter.h",
         "branchadddialog.cpp",
diff --git a/src/plugins/git/git.qrc b/src/plugins/git/git.qrc
index ae2b2b647076805856ebe7a973a6534b238e94c7..3371b45cd8fc7ea88abbeb47f89e0e162b435e17 100644
--- a/src/plugins/git/git.qrc
+++ b/src/plugins/git/git.qrc
@@ -2,5 +2,6 @@
     <qresource prefix="/git">
         <file>images/git.png</file>
         <file>images/gitorious.png</file>
+        <file>Git.mimetypes.xml</file>
     </qresource>
 </RCC>
diff --git a/src/plugins/git/gitconstants.h b/src/plugins/git/gitconstants.h
index 872bf3022ce7c9ae44c45d0240b41c869663b805..35cf9619562694e3313a06733e6955fc0caf751d 100644
--- a/src/plugins/git/gitconstants.h
+++ b/src/plugins/git/gitconstants.h
@@ -47,6 +47,9 @@ const char C_GIT_BLAME_EDITOR[] = "Git Annotation Editor";
 const char GIT_DIFF_EDITOR_ID[] = "Git Diff Editor";
 const char GIT_DIFF_EDITOR_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("VCS", "Git Diff Editor");
 const char C_GIT_DIFF_EDITOR[] = "Git Diff Editor";
+const char GIT_COMMIT_TEXT_EDITOR_ID[] = "Git Commit Editor";
+const char GIT_COMMIT_TEXT_EDITOR_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("VCS", "Git Commit Editor");
+const char C_GIT_COMMIT_TEXT_EDITOR[] = "Git Commit Editor";
 
 const char C_GITSUBMITEDITOR[]  = "Git Submit Editor";
 const char GITSUBMITEDITOR_ID[] = "Git Submit Editor";
@@ -54,6 +57,7 @@ const char GITSUBMITEDITOR_DISPLAY_NAME[] = QT_TRANSLATE_NOOP("VCS", "Git Submit
 const char SUBMIT_CURRENT[] = "Git.SubmitCurrentLog";
 const char DIFF_SELECTED[] = "Git.DiffSelectedFilesInLog";
 const char SUBMIT_MIMETYPE[] = "text/vnd.qtcreator.git.submit";
+const char C_GITEDITORID[]  = "Git Editor";
 
 } // namespace Constants
 } // namespace Git
diff --git a/src/plugins/git/giteditor.cpp b/src/plugins/git/giteditor.cpp
index fb6bea95f9a6f37ba0a6359334febc08b9b97143..2c6062799bfb884b4e800536a302d5af943bd294 100644
--- a/src/plugins/git/giteditor.cpp
+++ b/src/plugins/git/giteditor.cpp
@@ -33,9 +33,12 @@
 #include "gitplugin.h"
 #include "gitclient.h"
 #include "gitsettings.h"
+#include "gitsubmiteditorwidget.h"
+#include "gitconstants.h"
 
 #include <utils/qtcassert.h>
 #include <vcsbase/vcsbaseoutputwindow.h>
+#include <texteditor/basetextdocument.h>
 #include <QDebug>
 #include <QFileInfo>
 #include <QRegExp>
@@ -225,6 +228,13 @@ void GitEditor::revertChange()
     GitPlugin::instance()->gitClient()->synchronousRevert(workingDirectory, m_currentChange);
 }
 
+void GitEditor::init()
+{
+    VcsBase::VcsBaseEditorWidget::init();
+    if (editor()->id() == Git::Constants::GIT_COMMIT_TEXT_EDITOR_ID)
+        new GitSubmitHighlighter(baseTextDocument().data());
+}
+
 QString GitEditor::decorateVersion(const QString &revision) const
 {
     const QFileInfo fi(source());
diff --git a/src/plugins/git/giteditor.h b/src/plugins/git/giteditor.h
index 6af13790506d8b6042f80edbd540a1e23593d46a..5010fd8193709f218eff3d664545ca1509555a83 100644
--- a/src/plugins/git/giteditor.h
+++ b/src/plugins/git/giteditor.h
@@ -59,6 +59,7 @@ private slots:
     void revertChange();
 
 private:
+    void init();
     QSet<QString> annotationChanges() const;
     QString changeUnderCursor(const QTextCursor &) const;
     VcsBase::BaseAnnotationHighlighter *createAnnotationHighlighter(const QSet<QString> &changes, const QColor &bg) const;
diff --git a/src/plugins/git/gitplugin.cpp b/src/plugins/git/gitplugin.cpp
index 610a060a7b5f134a5b236976bc904a59b4ed86a2..ea8ca19f4cb6a32deec63adc10675b93421b5ed9 100644
--- a/src/plugins/git/gitplugin.cpp
+++ b/src/plugins/git/gitplugin.cpp
@@ -58,6 +58,7 @@
 #include <coreplugin/infobar.h>
 #include <coreplugin/editormanager/editormanager.h>
 #include <coreplugin/editormanager/ieditor.h>
+#include <coreplugin/mimedatabase.h>
 
 #include <utils/qtcassert.h>
 #include <utils/parameteraction.h>
@@ -81,6 +82,7 @@
 #include <QScopedPointer>
 
 static const unsigned minimumRequiredVersion = 0x010702;
+static const char RC_GIT_MIME_XML[] = ":/git/Git.mimetypes.xml";
 
 static const VcsBase::VcsBaseEditorParameters editorParameters[] = {
 {
@@ -103,7 +105,12 @@ static const VcsBase::VcsBaseEditorParameters editorParameters[] = {
     Git::Constants::GIT_DIFF_EDITOR_ID,
     Git::Constants::GIT_DIFF_EDITOR_DISPLAY_NAME,
     Git::Constants::C_GIT_DIFF_EDITOR,
-    "text/x-patch"}
+    "text/x-patch"},
+{   VcsBase::DiffOutput,
+    Git::Constants::GIT_COMMIT_TEXT_EDITOR_ID,
+    Git::Constants::GIT_COMMIT_TEXT_EDITOR_DISPLAY_NAME,
+    Git::Constants::C_GIT_COMMIT_TEXT_EDITOR,
+    "text/vnd.qtcreator.git.commit"},
 };
 
 // Utility to find a parameter set by type
@@ -263,7 +270,6 @@ ActionCommandPair
 bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
 {
     Q_UNUSED(arguments)
-    Q_UNUSED(errorMessage)
 
     m_settings.readSettings(Core::ICore::settings());
 
@@ -656,6 +662,9 @@ bool GitPlugin::initialize(const QStringList &arguments, QString *errorMessage)
     command = Core::ActionManager::registerAction(m_redoAction, Core::Constants::REDO, submitContext);
 
 
+    if (!Core::ICore::mimeDatabase()->addMimeTypes(QLatin1String(RC_GIT_MIME_XML), errorMessage))
+        return false;
+
     /* "Gerrit" */
     m_gerritPlugin = new Gerrit::Internal::GerritPlugin(this);
     const bool ok = m_gerritPlugin->initialize(remoteRepositoryMenu);
diff --git a/src/plugins/vcsbase/vcsbaseeditor.h b/src/plugins/vcsbase/vcsbaseeditor.h
index 5228d16846c6ca5fe822ff291f6cec4b632238a3..955c194d901287a349aa9fe44a88b7d2fb7e842d 100644
--- a/src/plugins/vcsbase/vcsbaseeditor.h
+++ b/src/plugins/vcsbase/vcsbaseeditor.h
@@ -105,7 +105,7 @@ protected:
     void setLogEntryPattern(const QRegExp &pattern);
 
 public:
-    void init();
+    virtual void init();
 
     ~VcsBaseEditorWidget();