diff --git a/src/plugins/qmljseditor/qmljshighlighter.cpp b/src/plugins/qmljseditor/qmljshighlighter.cpp
index ab77bb73fe6b2348b7e7a6c4b8d86220a516badb..d7bbd128621543ea2070a102426fd7ff8d4edc9c 100644
--- a/src/plugins/qmljseditor/qmljshighlighter.cpp
+++ b/src/plugins/qmljseditor/qmljshighlighter.cpp
@@ -138,9 +138,12 @@ void Highlighter::highlightBlock(const QString &text)
                 break;
 
             case Token::Identifier: {
+                if (!m_qmlEnabled)
+                    break;
+
                 const QStringRef spell = text.midRef(token.offset, token.length);
 
-                if (m_qmlEnabled && maybeQmlKeyword(spell)) {
+                if (maybeQmlKeyword(spell)) {
                     // check the previous token
                     if (index == 0 || tokens.at(index - 1).isNot(Token::Dot)) {
                         if (index + 1 == tokens.size() || tokens.at(index + 1).isNot(Token::Colon)) {
@@ -148,7 +151,7 @@ void Highlighter::highlightBlock(const QString &text)
                             break;
                         }
                     }
-                } else if (m_qmlEnabled && index > 0 && maybeQmlBuiltinType(spell)) {
+                } else if (index > 0 && maybeQmlBuiltinType(spell)) {
                     const Token &previousToken = tokens.at(index - 1);
                     if (previousToken.is(Token::Identifier) && text.at(previousToken.offset) == QLatin1Char('p')
                         && text.midRef(previousToken.offset, previousToken.length) == QLatin1String("property")) {
@@ -157,9 +160,10 @@ void Highlighter::highlightBlock(const QString &text)
                     }
                 }
 
-                if (index + 1 < tokens.size()) {
-                    const Token &nextToken = tokens.at(index + 1);
+                if (!spell.isEmpty() && spell.at(0).isUpper())
+                    setFormat(token.offset, token.length, m_formats[TypeFormat]);
 
+                if (index + 1 < tokens.size()) {
                     bool maybeBinding = (index == 0 || checkStartOfBinding(tokens.at(index - 1)));
                     bool maybeOnBinding = false;
                     if (index > 0) {
@@ -170,11 +174,7 @@ void Highlighter::highlightBlock(const QString &text)
                         }
                     }
 
-                    if (text.at(token.offset).isUpper()
-                        && (nextToken.is(Token::LeftBrace)
-                            || text.midRef(nextToken.offset, nextToken.length) == QLatin1String("on"))) {
-                        setFormat(token.offset, token.length, m_formats[TypeFormat]);
-                    } else if (maybeBinding || maybeOnBinding) {
+                    if (maybeBinding || maybeOnBinding) {
                         Token::Kind expectedTerminator = Token::Colon;
                         if (maybeOnBinding)
                             expectedTerminator = Token::LeftBrace;
@@ -192,7 +192,14 @@ void Highlighter::highlightBlock(const QString &text)
                             // it's a binding.
                             for (int i = start; i <= index; ++i) {
                                 const Token &tok = tokens.at(i);
-                                setFormat(tok.offset, tok.length, m_formats[FieldFormat]);
+                                if (tok.kind == Token::Dot)
+                                    continue;
+                                const QStringRef tokSpell = text.midRef(tok.offset, tok.length);
+                                if (!tokSpell.isEmpty() && tokSpell.at(0).isUpper()) {
+                                    setFormat(tok.offset, tok.length, m_formats[TypeFormat]);
+                                } else {
+                                    setFormat(tok.offset, tok.length, m_formats[FieldFormat]);
+                                }
                             }
                             break;
                         } else {