diff --git a/src/shared/cplusplus/Parser.cpp b/src/shared/cplusplus/Parser.cpp
index 1a6d5011fb417dcd39b52429f36351cafc69aa32..d0a7b05bcbec271a88b938d21f5453af839a9dbf 100644
--- a/src/shared/cplusplus/Parser.cpp
+++ b/src/shared/cplusplus/Parser.cpp
@@ -56,7 +56,7 @@
 #include <cstdlib>
 #include <cstring>
 #include <cassert>
-
+#include <QDebug>
 CPLUSPLUS_BEGIN_NAMESPACE
 
 Parser::Parser(TranslationUnit *unit)
@@ -2189,6 +2189,15 @@ bool Parser::parseForStatement(StatementAST *&node)
         if (parseTypeSpecifier(ast->type_specifiers))
             parseDeclarator(ast->declarator);
 
+        if ((ast->type_specifiers || ast->declarator) && !peekAtObjCContextKeyword(Token_in)) {
+            // woops, probably parsed too much: "in" got parsed as a declarator. Let's redo it:
+            ast->type_specifiers = 0;
+            ast->declarator = 0;
+
+            rewind(startOfTypeSpecifier);
+            parseDeclarator(ast->declarator);
+        }
+
         if (! ast->type_specifiers || ! ast->declarator) {
             ast->type_specifiers = 0;
             ast->declarator = 0;
@@ -4635,17 +4644,24 @@ bool Parser::parseObjCTypeQualifiers(unsigned &type_qualifier)
     return true;
 }
 
-bool Parser::parseObjCContextKeyword(int kind, unsigned &in_token)
+bool Parser::peekAtObjCContextKeyword(int kind)
 {
     if (LA() != T_IDENTIFIER)
         return false;
 
     Identifier *id = tok().identifier;
     const int k = classifyObjectiveCTypeQualifiers(id->chars(), id->size());
-    if (k != kind)
+    return k == kind;
+}
+
+bool Parser::parseObjCContextKeyword(int kind, unsigned &in_token)
+{
+    if (peekAtObjCContextKeyword(kind)) {
+        in_token = consumeToken();
+        return true;
+    } else {
         return false;
-    in_token = consumeToken();
-    return true;
+    }
 }
 
 CPLUSPLUS_END_NAMESPACE
diff --git a/src/shared/cplusplus/Parser.h b/src/shared/cplusplus/Parser.h
index 2fc12384f249e2501630861345f6c0cbc6001afe..ec40707613da10f481d046789bbd0a94f75e41c6 100644
--- a/src/shared/cplusplus/Parser.h
+++ b/src/shared/cplusplus/Parser.h
@@ -244,6 +244,7 @@ public:
     bool parseObjCSelector(unsigned &selector_token);
     bool parseObjCKeywordDeclaration(ObjCSelectorArgumentAST *&argument, ObjCMessageArgumentDeclarationAST *&node);
     bool parseObjCTypeQualifiers(unsigned &type_qualifier);
+    bool peekAtObjCContextKeyword(int kind);
     bool parseObjCContextKeyword(int kind, unsigned &in_token);
 
     bool lookAtObjCSelector() const;