diff --git a/src/plugins/glsleditor/GLSLEditor.mimetypes.xml b/src/plugins/glsleditor/GLSLEditor.mimetypes.xml
index d9fa822b01e1f3ccb698f7ca7b2ce1ea82806a1e..5d63307c03d4a08579552b31d1fa7df6cea9973b 100644
--- a/src/plugins/glsleditor/GLSLEditor.mimetypes.xml
+++ b/src/plugins/glsleditor/GLSLEditor.mimetypes.xml
@@ -1,14 +1,26 @@
 <?xml version="1.0"?>
 <mime-info xmlns='http://www.freedesktop.org/standards/shared-mime-info'>
+
     <mime-type type="application/x-glsl">
         <alias type="text/x-glsl"/>
         <sub-class-of type="text/plain"/>
-        <comment>GLSL file</comment>
+        <comment>GLSL Shader file</comment>
         <glob pattern="*.glsl"/>
         <glob pattern="*.shader"/>
+    </mime-type>
+
+    <mime-type type="text/x-glsl-frag">
+        <sub-class-of type="text/x-glsl"/>
+        <comment>GLSL Fragment Shader file</comment>
         <glob pattern="*.frag"/>
-        <glob pattern="*.vert"/>
         <glob pattern="*.fsh"/>
+    </mime-type>
+
+    <mime-type type="text/x-glsl-vert">
+        <sub-class-of type="text/x-glsl"/>
+        <comment>GLSL Fragment Shader file</comment>
+        <glob pattern="*.vert"/>
         <glob pattern="*.vsh"/>
     </mime-type>
+
 </mime-info>
diff --git a/src/plugins/glsleditor/glsleditor.cpp b/src/plugins/glsleditor/glsleditor.cpp
index 7d8fcc51ae3b4f5c6a3b498c4bac9123a82be0c8..bd782cca0be24408bee59173e71ffc4f7f3cbf5b 100644
--- a/src/plugins/glsleditor/glsleditor.cpp
+++ b/src/plugins/glsleditor/glsleditor.cpp
@@ -276,8 +276,10 @@ void GLSLTextEditor::updateDocumentNow()
     Semantic sem;
     Scope *globalScope = engine.newNamespace();
     sem.translationUnit(plugin->shaderInit()->ast, globalScope, plugin->shaderInit()->engine);
-    sem.translationUnit(plugin->vertexShaderInit()->ast, globalScope, plugin->vertexShaderInit()->engine);
-    sem.translationUnit(plugin->fragmentShaderInit()->ast, globalScope, plugin->fragmentShaderInit()->engine);
+    if (isVertexShader())
+        sem.translationUnit(plugin->vertexShaderInit()->ast, globalScope, plugin->vertexShaderInit()->engine);
+    if (isFragmentShader())
+        sem.translationUnit(plugin->fragmentShaderInit()->ast, globalScope, plugin->fragmentShaderInit()->engine);
     sem.translationUnit(ast, globalScope, &engine);
 
     QTextCharFormat errorFormat;
@@ -314,3 +316,13 @@ void GLSLTextEditor::updateDocumentNow()
     // refresh the identifiers.
     m_identifiers = engine.identifiers();
 }
+
+bool GLSLTextEditor::isVertexShader() const
+{
+    return mimeType() == QLatin1String("text/x-glsl-vert");
+}
+
+bool GLSLTextEditor::isFragmentShader() const
+{
+    return mimeType() == QLatin1String("text/x-glsl-frag");
+}
diff --git a/src/plugins/glsleditor/glsleditor.h b/src/plugins/glsleditor/glsleditor.h
index f1847802eee26f164f7d1eb1ecfdec6cf11681d1..9f126199bb01bf16f3d570803fb080afa6c6be3d 100644
--- a/src/plugins/glsleditor/glsleditor.h
+++ b/src/plugins/glsleditor/glsleditor.h
@@ -65,6 +65,9 @@ public:
 
     QSet<QString> identifiers() const;
 
+    bool isVertexShader() const;
+    bool isFragmentShader() const;
+
 public slots:
     virtual void setFontSettings(const TextEditor::FontSettings &);