diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index 59c68c2f5b30851f4cdc66e9a70a6c9101446a73..b16d5e87804ced34699c27da6000377c06a0d43e 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -1256,6 +1256,11 @@ Symbol *CPPEditor::findDefinition(Symbol *symbol)
     return 0;
 }
 
+SemanticInfo CPPEditor::semanticInfo() const
+{
+    return m_lastSemanticInfo;
+}
+
 bool CPPEditor::isElectricCharacter(const QChar &ch) const
 {
     if (ch == QLatin1Char('{') ||
@@ -1616,6 +1621,14 @@ void CPPEditor::semanticRehighlight()
 
 void CPPEditor::updateSemanticInfo(const SemanticInfo &semanticInfo)
 {
+    if (semanticInfo.revision != document()->revision()) {
+        // got outdated semantic info
+        semanticRehighlight();
+        return;
+    }
+
+    m_lastSemanticInfo = semanticInfo;
+
     int line = 0, column = 0;
     convertPosition(position(), &line, &column);
 
diff --git a/src/plugins/cppeditor/cppeditor.h b/src/plugins/cppeditor/cppeditor.h
index 8fa991fc8ffadac10f4741337b807c2a0afe7ea4..988896977988c96b0523cd97ccc3d5a5af0b986f 100644
--- a/src/plugins/cppeditor/cppeditor.h
+++ b/src/plugins/cppeditor/cppeditor.h
@@ -181,11 +181,12 @@ public:
 
     CPPEditor(QWidget *parent);
     ~CPPEditor();
-
     void unCommentSelection();
 
     void indentInsertedText(const QTextCursor &tc);
 
+    SemanticInfo semanticInfo() const;
+
 public Q_SLOTS:
     virtual void setFontSettings(const TextEditor::FontSettings &);
     virtual void setDisplaySettings(const TextEditor::DisplaySettings &);
@@ -302,6 +303,7 @@ private:
     bool m_inRename;
 
     SemanticHighlighter *m_semanticHighlighter;
+    SemanticInfo m_lastSemanticInfo;
 };