diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index a9fd9f0d50775edd71ca6372db38bf857b845678..7bc832ffa6abf9c25d1e9eb54b3b47d23a1919dc 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -1822,11 +1822,12 @@ bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node)
                     QtPropertyDeclarationBoolItemAST *bItem = new (_pool) QtPropertyDeclarationBoolItemAST;
                     bItem->item_name_token = consumeToken();
                     ExpressionAST *expr = 0;
-                    if (parseBoolLiteral(expr))
+                    if (parseBoolLiteral(expr)) {
                         bItem->bool_value = expr->asBoolLiteral();
-                    else
+                        item = bItem;
+                    } else {
                         _translationUnit->error(cursor(), "expected `true' or `false' before `%s'", tok().spell());
-                    item = bItem;
+                    }
                     break;
                 }
 
@@ -1840,16 +1841,20 @@ bool Parser::parseQtPropertyDeclaration(DeclarationAST *&node)
 
                 default:
                     _translationUnit->error(cursor(), "expected `)' before `%s'", tok().spell());
-                    return true;
+                    // skip the token
+                    consumeToken();
                 }
                 if (item) {
                     *iter = new (_pool) QtPropertyDeclarationItemListAST;
                     (*iter)->value = item;
                     iter = &(*iter)->next;
                 }
+            } else if (!LA()) {
+                break;
             } else {
                 _translationUnit->error(cursor(), "expected `)' before `%s'", tok().spell());
-                break;
+                // skip the token
+                consumeToken();
             }
         }
     }