diff --git a/src/plugins/texteditor/basetexteditor.cpp b/src/plugins/texteditor/basetexteditor.cpp
index 88f5f06989f50ff6f087512436be8b81bb90c2e7..3ad5b89f24f71e823304605dfba4f7ae469a8c17 100644
--- a/src/plugins/texteditor/basetexteditor.cpp
+++ b/src/plugins/texteditor/basetexteditor.cpp
@@ -959,7 +959,7 @@ void BaseTextEditor::setTextCursor(const QTextCursor &cursor)
         slotSelectionChanged();
 }
 
-void BaseTextEditor::gotoLine(int line, int column, bool saveNewPosition)
+void BaseTextEditor::gotoLine(int line, int column)
 {
     const int blockNumber = line - 1;
     const QTextBlock &block = document()->findBlockByNumber(blockNumber);
@@ -977,8 +977,7 @@ void BaseTextEditor::gotoLine(int line, int column, bool saveNewPosition)
         setTextCursor(cursor);
         centerCursor();
     }
-    if (saveNewPosition)
-        saveCurrentCursorPositionForNavigation();
+    saveCurrentCursorPositionForNavigation();
 }
 
 int BaseTextEditor::position(ITextEditor::PositionOperation posOp, int at) const
@@ -1115,9 +1114,11 @@ bool BaseTextEditor::restoreState(const QByteArray &state)
     stream >> hval;
     stream >> lval;
     stream >> cval;
-    gotoLine(lval, cval, false);
+    d->m_lastCursorChangeWasInteresting = false; // avoid adding last position to history
+    gotoLine(lval, cval);
     verticalScrollBar()->setValue(vval);
     horizontalScrollBar()->setValue(hval);
+    saveCurrentCursorPositionForNavigation();
     return true;
 }
 
diff --git a/src/plugins/texteditor/basetexteditor.h b/src/plugins/texteditor/basetexteditor.h
index 0e7029a9b02a2c7b315538ddde8ca69d49f68ae3..8c106181349edbde83d0f8c4a82f6dc9aba51633 100644
--- a/src/plugins/texteditor/basetexteditor.h
+++ b/src/plugins/texteditor/basetexteditor.h
@@ -241,7 +241,7 @@ public:
 
     // ITextEditor
 
-    void gotoLine(int line, int column = 0, bool saveNewPosition = true);
+    void gotoLine(int line, int column = 0);
 
     int position(
         ITextEditor::PositionOperation posOp = ITextEditor::Current