diff --git a/src/plugins/cppeditor/cppeditor.cpp b/src/plugins/cppeditor/cppeditor.cpp
index 5295a0135076fb6a156bebe9bcf5a5fc44cda844..4be02ac067a86954a8d3ffcf2b99e662347b9320 100644
--- a/src/plugins/cppeditor/cppeditor.cpp
+++ b/src/plugins/cppeditor/cppeditor.cpp
@@ -805,7 +805,7 @@ void CPPEditor::renameInPlace()
     for (int i = 0; i < m_renameSelections.size(); ++i) {
         QTextEdit::ExtraSelection s = m_renameSelections.at(i);
         if (c.position() >= s.cursor.anchor()
-                && c.position() < s.cursor.position()) {
+                && c.position() <= s.cursor.position()) {
             m_currentRenameSelection = i;
             m_renameSelections[i].format.setBackground(QColor(255, 200, 200));
             setExtraSelections(CodeSemanticsSelection, m_renameSelections);
@@ -1471,17 +1471,25 @@ void CPPEditor::keyPressEvent(QKeyEvent *e)
         return;
     case Qt::Key_Home: {
         QTextCursor c = textCursor();
-        c.setPosition(currentRenameSelection.cursor.anchor(), moveMode);
-        setTextCursor(c);
-        e->accept();
-        return;
+        if (c.position() > currentRenameSelection.cursor.anchor()
+               && c.position() <= currentRenameSelection.cursor.position()) {
+            c.setPosition(currentRenameSelection.cursor.anchor(), moveMode);
+            setTextCursor(c);
+            e->accept();
+            return;
+        }
+        break;
     }
     case Qt::Key_End: {
         QTextCursor c = textCursor();
-        c.setPosition(currentRenameSelection.cursor.position(), moveMode);
-        setTextCursor(c);
-        e->accept();
-        return;
+        if (c.position() >= currentRenameSelection.cursor.anchor()
+               && c.position() < currentRenameSelection.cursor.position()) {
+            c.setPosition(currentRenameSelection.cursor.position(), moveMode);
+            setTextCursor(c);
+            e->accept();
+            return;
+        }
+        break;
     }
     case Qt::Key_Backspace: {
         QTextCursor c = textCursor();