diff --git a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
index d72f327ea79431ccd8cb36ae6572b9ed46024a13..16e963da33095d9d36029048006aab0dfcdf0a50 100644
--- a/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
+++ b/src/plugins/qmldesigner/designercore/model/qmlstate.cpp
@@ -53,41 +53,32 @@ QmlModelState::QmlModelState(const ModelNode &modelNode)
 
 QmlPropertyChanges QmlModelState::propertyChanges(const ModelNode &node)
 {
-    //### exception if not valid
-
-    if (isBaseState())
-        return  QmlPropertyChanges();
-
-    addChangeSetIfNotExists(node);
-    foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
-        //### exception if not valid QmlModelStateOperation
-        if (QmlPropertyChanges::isValidQmlPropertyChanges(childNode)
-                && QmlPropertyChanges(childNode).target().isValid()
-                && QmlPropertyChanges(childNode).target() == node)
-            return QmlPropertyChanges(childNode); //### exception if not valid(childNode);
+    if (!isBaseState()) {
+        addChangeSetIfNotExists(node);
+        foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
+            //### exception if not valid QmlModelStateOperation
+            if (QmlPropertyChanges::isValidQmlPropertyChanges(childNode)
+                    && QmlPropertyChanges(childNode).target().isValid()
+                    && QmlPropertyChanges(childNode).target() == node)
+                return QmlPropertyChanges(childNode); //### exception if not valid(childNode);
+        }
     }
+
     return QmlPropertyChanges(); //not found
 }
 
 QList<QmlModelStateOperation> QmlModelState::stateOperations(const ModelNode &node) const
 {
     QList<QmlModelStateOperation> returnList;
-    //### exception if not valid
-
-    if (isBaseState())
-        return returnList;
 
-    if (!modelNode().hasProperty("changes"))
-        return returnList;
-
-    Q_ASSERT(modelNode().property("changes").isNodeListProperty());
-
-    foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
-        if (QmlModelStateOperation::isValidQmlModelStateOperation(childNode)) {
-            QmlModelStateOperation stateOperation(childNode);
-            ModelNode targetNode = stateOperation.target();
-            if (targetNode.isValid() && targetNode == node)
-                returnList.append(stateOperation); //### exception if not valid(childNode);
+    if (!isBaseState() &&  modelNode().hasNodeListProperty("changes")) {
+        foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
+            if (QmlModelStateOperation::isValidQmlModelStateOperation(childNode)) {
+                QmlModelStateOperation stateOperation(childNode);
+                ModelNode targetNode = stateOperation.target();
+                if (targetNode.isValid() && targetNode == node)
+                    returnList.append(stateOperation); //### exception if not valid(childNode);
+            }
         }
     }
 
@@ -96,50 +87,39 @@ QList<QmlModelStateOperation> QmlModelState::stateOperations(const ModelNode &no
 
 QList<QmlPropertyChanges> QmlModelState::propertyChanges() const
 {
-    //### exception if not valid
     QList<QmlPropertyChanges> returnList;
 
-    if (isBaseState())
-        return returnList;
-
-    if (!modelNode().hasProperty("changes"))
-        return returnList;
-
-    Q_ASSERT(modelNode().property("changes").isNodeListProperty());
-
-    foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
-        //### exception if not valid QmlModelStateOperation
-        if (QmlPropertyChanges(childNode).isValid())
-            returnList.append(QmlPropertyChanges(childNode));
+    if (!isBaseState() &&  modelNode().hasNodeListProperty("changes")) {
+        foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
+            //### exception if not valid QmlModelStateOperation
+            if (QmlPropertyChanges::isValidQmlPropertyChanges(childNode))
+                returnList.append(QmlPropertyChanges(childNode));
+        }
     }
+
     return returnList;
 }
 
 
 bool QmlModelState::hasPropertyChanges(const ModelNode &node) const
 {
-    //### exception if not valid
-
-    if (isBaseState())
-        return false;
-
-    foreach (const QmlPropertyChanges &changeSet, propertyChanges()) {
-        if (changeSet.target().isValid() && changeSet.target() == node)
-            return true;
+    if (!isBaseState() &&  modelNode().hasNodeListProperty("changes")) {
+        foreach (const QmlPropertyChanges &changeSet, propertyChanges()) {
+            if (changeSet.target().isValid() && changeSet.target() == node)
+                return true;
+        }
     }
+
     return false;
 }
 
 bool QmlModelState::hasStateOperation(const ModelNode &node) const
 {
-    //### exception if not valid
-
-    if (isBaseState())
-        return false;
-
-    foreach (const  QmlModelStateOperation &stateOperation, stateOperations()) {
-        if (stateOperation.target() == node)
-            return true;
+    if (!isBaseState()) {
+        foreach (const  QmlModelStateOperation &stateOperation, stateOperations()) {
+            if (stateOperation.target() == node)
+                return true;
+        }
     }
     return false;
 }
@@ -149,19 +129,14 @@ QList<QmlModelStateOperation> QmlModelState::stateOperations() const
     //### exception if not valid
     QList<QmlModelStateOperation> returnList;
 
-    if (isBaseState())
-        return returnList;
-
-    if (!modelNode().hasProperty("changes"))
-        return returnList;
-
-    Q_ASSERT(modelNode().property("changes").isNodeListProperty());
-
-    foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
-        //### exception if not valid QmlModelStateOperation
-        if (QmlModelStateOperation(childNode).isValid())
-            returnList.append(QmlModelStateOperation(childNode));
+    if (!isBaseState() &&  modelNode().hasNodeListProperty("changes")) {
+        foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
+            //### exception if not valid QmlModelStateOperation
+            if (QmlModelStateOperation::isValidQmlModelStateOperation(childNode))
+                returnList.append(QmlModelStateOperation(childNode));
+        }
     }
+
     return returnList;
 }
 
@@ -173,24 +148,21 @@ QList<QmlModelStateOperation> QmlModelState::stateOperations() const
 
 void QmlModelState::addChangeSetIfNotExists(const ModelNode &node)
 {
-    //### exception if not valid
-
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
 
-    if (hasPropertyChanges(node))
-        return; //changeSet already there
-
-    ModelNode newChangeSet;
-    if (view()->majorQtQuickVersion() > 1)
-        newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 2, 0);
-    else
-        newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 1, 0);
+    if (!hasPropertyChanges(node)) {
+        ModelNode newChangeSet;
+        if (view()->majorQtQuickVersion() > 1)
+            newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 2, 0);
+        else
+            newChangeSet = modelNode().view()->createModelNode("QtQuick.PropertyChanges", 1, 0);
 
-    modelNode().nodeListProperty("changes").reparentHere(newChangeSet);
+        modelNode().nodeListProperty("changes").reparentHere(newChangeSet);
 
-    QmlPropertyChanges(newChangeSet).setTarget(node);
-    Q_ASSERT(QmlPropertyChanges(newChangeSet).isValid());
+        QmlPropertyChanges(newChangeSet).setTarget(node);
+        Q_ASSERT(QmlPropertyChanges::isValidQmlPropertyChanges(newChangeSet));
+    }
 }
 
 void QmlModelState::removePropertyChanges(const ModelNode &node)
@@ -200,12 +172,11 @@ void QmlModelState::removePropertyChanges(const ModelNode &node)
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
 
-    if (isBaseState())
-        return;
-
-     QmlPropertyChanges theChangeSet(propertyChanges(node));
-     if (theChangeSet.isValid())
-         theChangeSet.modelNode().destroy();
+    if (!isBaseState()) {
+        QmlPropertyChanges changeSet(propertyChanges(node));
+        if (changeSet.isValid())
+            changeSet.modelNode().destroy();
+    }
 }
 
 
@@ -227,11 +198,11 @@ QList<QmlObjectNode> QmlModelState::allAffectedNodes() const
     QList<QmlObjectNode> returnList;
 
     foreach (const ModelNode &childNode, modelNode().nodeListProperty("changes").toModelNodeList()) {
-        //### exception if not valid QmlModelStateOperation
-        if (QmlModelStateOperation(childNode).isValid() &&
+        if (QmlModelStateOperation::isValidQmlModelStateOperation(childNode) &&
             !returnList.contains(QmlModelStateOperation(childNode).target()))
             returnList.append(QmlModelStateOperation(childNode).target());
     }
+
     return returnList;
 }
 
@@ -290,8 +261,7 @@ QmlModelState QmlModelState::duplicate(const QString &name) const
     if (!isValid())
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
 
-    QmlItemNode parentNode(modelNode().parentProperty().parentModelNode());
-    if (!parentNode.isValid())
+    if (!QmlItemNode::isValidQmlItemNode(modelNode().parentProperty().parentModelNode()))
         throw new InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
 
 //    QmlModelState newState(stateGroup().addState(name));