diff --git a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
index acaf8c3f3130089855bb581e95f7ab102ffec11d..8a3e1450583bd01c305c04299111888d0c9359de 100644
--- a/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
+++ b/src/plugins/qmldesigner/designercore/metainfo/nodemetainfo.cpp
@@ -339,7 +339,7 @@ public:
     Model *model() const
     { return m_model; }
 
-    QString packageName() const;
+    QString cppPackageName() const;
 
     QString componentSource() const;
     QString componentFileName() const;
@@ -674,6 +674,14 @@ QString NodeMetaInfoPrivate::propertyEnumScope(const QString &propertyName) cons
     return QString();
 }
 
+static QString getUnqualifiedName(const QString &name)
+{
+    const QStringList nameComponents = name.split('.');
+    if (nameComponents.size() < 2)
+        return QString();
+    return nameComponents.last();
+}
+
 bool NodeMetaInfoPrivate::cleverCheckType(const QString &otherType) const
 {
     if (otherType == qualfiedTypeName())
@@ -689,8 +697,8 @@ bool NodeMetaInfoPrivate::cleverCheckType(const QString &otherType) const
         package = split.first();
         typeName = split.at(1);
     }
-    if (packageName() == package)
-        return QString(package + '.' + typeName) == qualfiedTypeName();
+    if (cppPackageName() == package)
+        return QString(package + '.' + typeName) == cppPackageName() + '.' + getUnqualifiedName(qualfiedTypeName());
 
     const CppComponentValue *qmlObjectValue = getCppComponentValue();
     if (!qmlObjectValue)
@@ -753,7 +761,7 @@ QStringList NodeMetaInfoPrivate::keysForEnum(const QString &enumName) const
     return qmlObjectValue->getEnum(enumName).keys();
 }
 
-QString NodeMetaInfoPrivate::packageName() const
+QString NodeMetaInfoPrivate::cppPackageName() const
 {
     if (!isComponent()) {
         if (const CppComponentValue *qmlObject = getCppComponentValue())
diff --git a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
index 7c9bfa52f98a5293eb82a06a2dfb403f5f4ee405..c4a814fa82827fdd0cb2b9dd5950ebade26a789e 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlchangeset.cpp
@@ -57,7 +57,7 @@ bool QmlPropertyChanges::isValid() const
 
 bool QmlModelStateOperation::isValid() const
 {
-    return QmlModelNodeFacade::isValid() && modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarativeStateOperation", -1, -1);
+    return QmlModelNodeFacade::isValid() &&  modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarative1StateOperation", -1, -1);
 }
 
 void QmlPropertyChanges::removeProperty(const QString &name)
diff --git a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
index 64a9f4edbdddafa53516f2e7f1ac4520b4e83216..ecc8b394ab280f846724c46297afd887a9487854 100644
--- a/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
+++ b/tests/auto/qml/qmldesigner/coretests/tst_testcore.cpp
@@ -1259,6 +1259,7 @@ void tst_TestCore::testBasicStates()
     QCOMPARE(state1.propertyChanges().count(), 2);
     QCOMPARE(state2.propertyChanges().count(), 2);
 
+    QVERIFY(state1.propertyChanges().first().modelNode().metaInfo().isSubclassOf("<cpp>.QDeclarative1StateOperation", -1, -1));
     QVERIFY(!state1.hasPropertyChanges(rootModelNode));
 
     QVERIFY(state1.propertyChanges(rect1).isValid());