diff --git a/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp b/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp
index dc175078f41bd0a0684830c72d8f710563d27519..5fef38fd6a64705b0877c5a8bc29a600ec7ad3aa 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp
+++ b/src/plugins/qmldesigner/components/stateseditor/stateseditormodel.cpp
@@ -31,6 +31,7 @@
 #include "stateseditorview.h"
 
 #include <QtCore/QDebug>
+#include <QMessageBox>
 
 enum {
     debug = false
@@ -118,10 +119,14 @@ void StatesEditorModel::renameState(int i, const QString &newName)
     Q_ASSERT(i > 0 && i < m_stateNames.count());
 
     if (m_stateNames[i] != newName) {
-        m_stateNames.replace(i, newName);
-        m_statesView->renameState(i,newName);
+        if (m_stateNames.contains(newName) || newName.isEmpty()) {
+            QMessageBox::warning(0, tr("Invalid state name"), newName.isEmpty()?tr("The empty string as a name is reserved for the base state."):tr("Name already used in another state"));
+        } else {
+            m_stateNames.replace(i, newName);
+            m_statesView->renameState(i,newName);
 
-        emit dataChanged(createIndex(i, 0), createIndex(i, 0));
+            emit dataChanged(createIndex(i, 0), createIndex(i, 0));
+        }
     }
 }
 
diff --git a/src/plugins/qmldesigner/components/stateseditor/stateslist.qml b/src/plugins/qmldesigner/components/stateseditor/stateslist.qml
index ca6585b2aac6720219a6031c278ae1ad094a08b3..af892cb491602fdfeebf8513dbfcb1fd2ea76c1d 100644
--- a/src/plugins/qmldesigner/components/stateseditor/stateslist.qml
+++ b/src/plugins/qmldesigner/components/stateseditor/stateslist.qml
@@ -360,9 +360,10 @@ Rectangle {
                     border.color:"#4f4f4f"
                     radius:4
                     function unFocus() {
-                        if (visible)
+                        if (visible) {
+                            visible=false;
                             statesEditorModel.renameState(index,stateNameInput.text);
-                        visible=false;
+                        }
                     }
 
                     // There is no QFontMetrics equivalent in QML
@@ -399,8 +400,10 @@ Rectangle {
                                     x = -cM;
                             }
                             onAccepted: {
-                                statesEditorModel.renameState(index,text);
-                                stateNameEditor.visible=false;
+                                if (stateNameEditor.visible) {
+                                    stateNameEditor.visible=false;
+                                    statesEditorModel.renameState(index,text);
+                                }
                             }
                         }
                     }