diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index 226b27a86109ce90512243a2358810b480489d3b..a2d766effc0ba48bf7d21abe4d6ee9738f316503 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -1539,6 +1539,7 @@ void CPPEditor::indentBlock(QTextDocument *doc, QTextBlock block, QChar typedCha
         codeFormatter.setIndentDeclarationMembers(true);
     }
 
+    codeFormatter.updateStateUntil(block);
     const int depth = codeFormatter.indentFor(block);
     ts.indentLine(block, depth);
 }
diff --git a/src/plugins/cpptools/cppcodeformatter.cpp b/src/plugins/cpptools/cppcodeformatter.cpp
index 97db194e70a40f06bd0f1307fb0603b037ccb0d8..0eb40bf4e91b38de286baffeb4d4d11c5b1df4f8 100644
--- a/src/plugins/cpptools/cppcodeformatter.cpp
+++ b/src/plugins/cpptools/cppcodeformatter.cpp
@@ -446,12 +446,12 @@ int CodeFormatter::indentFor(const QTextBlock &block)
 {
 //    qDebug() << "indenting for" << block.blockNumber() + 1;
 
-    requireStatesUntil(block);
+    restoreBlockState(block.previous());
     correctIndentation(block);
     return m_indentDepth;
 }
 
-void CodeFormatter::requireStatesUntil(const QTextBlock &endBlock)
+void CodeFormatter::updateStateUntil(const QTextBlock &endBlock)
 {
     QStack<State> previousState = initialState();
     QTextBlock it = endBlock.document()->firstBlock();
@@ -473,7 +473,6 @@ void CodeFormatter::requireStatesUntil(const QTextBlock &endBlock)
         //qDebug() << "recalc line" << it.blockNumber() + 1;
         recalculateStateAfter(it);
     }
-    restoreBlockState(endBlock.previous());
 }
 
 CodeFormatter::State CodeFormatter::state(int belowTop) const
diff --git a/src/plugins/cpptools/cppcodeformatter.h b/src/plugins/cpptools/cppcodeformatter.h
index 16375892af972caed66e679e0740903a7d4877ea..2475603d4d0254627871191c076f7185fda2b945 100644
--- a/src/plugins/cpptools/cppcodeformatter.h
+++ b/src/plugins/cpptools/cppcodeformatter.h
@@ -28,6 +28,7 @@ public:
     CodeFormatter();
     virtual ~CodeFormatter();
 
+    void updateStateUntil(const QTextBlock &block);
     int indentFor(const QTextBlock &block);
 
     void setTabSize(int tabSize);
@@ -138,7 +139,6 @@ protected:
     bool isBracelessState(int type) const;
 
 private:
-    void requireStatesUntil(const QTextBlock &block);
     void recalculateStateAfter(const QTextBlock &block);
     void storeBlockState(const QTextBlock &block);
     void restoreBlockState(const QTextBlock &block);
diff --git a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
index 7c49cc4c236d7e49460e8ed71d5506d3e6a1d876..3960de86f39e1fb573f9ae5d1742529c93a0f387 100644
--- a/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
+++ b/tests/auto/cplusplus/codeformatter/tst_codeformatter.cpp
@@ -89,6 +89,8 @@ void checkIndent(QList<Line> data, int style = 0)
         formatter.setIndentDeclarationBraces(true);
     }
 
+    formatter.updateStateUntil(document.lastBlock());
+
     int i = 0;
     foreach (const Line &l, data) {
         if (l.expectedIndent != -1) {