diff --git a/src/plugins/qmljseditor/qmljshighlighter.cpp b/src/plugins/qmljseditor/qmljshighlighter.cpp
index a4dc4f05c094ab971fb7b7d9d53033e18ca56b91..3ef4a8ace3d36e476a48c9f8a2914b19218c30d3 100644
--- a/src/plugins/qmljseditor/qmljshighlighter.cpp
+++ b/src/plugins/qmljseditor/qmljshighlighter.cpp
@@ -147,11 +147,26 @@ void Highlighter::highlightBlock(const QString &text)
 
                 if (index + 1 < tokens.size()) {
                     const Token &nextToken = tokens.at(index + 1);
+
+                    bool maybeBinding = (index == 0 || checkStartOfBinding(tokens.at(index - 1)));
+                    bool maybeOnBinding = false;
+                    if (index > 0) {
+                        const Token &previousToken = tokens.at(index - 1);
+                        if (text.midRef(previousToken.offset, previousToken.length) == QLatin1String("on")) {
+                            maybeOnBinding = true;
+                            maybeBinding = false;
+                        }
+                    }
+
                     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 (index == 0 || checkStartOfBinding(tokens.at(index - 1))) {
+                    } else if (maybeBinding || maybeOnBinding) {
+                        Token::Kind expectedTerminator = Token::Colon;
+                        if (maybeOnBinding)
+                            expectedTerminator = Token::LeftBrace;
+
                         const int start = index;
 
                         ++index; // skip the identifier.
@@ -161,7 +176,7 @@ void Highlighter::highlightBlock(const QString &text)
                             index += 2;
                         }
 
-                        if (index < tokens.size() && tokens.at(index).is(Token::Colon)) {
+                        if (index < tokens.size() && tokens.at(index).is(expectedTerminator)) {
                             // it's a binding.
                             for (int i = start; i < index; ++i) {
                                 const Token &tok = tokens.at(i);