diff --git a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
index ec64d6c9f0422973841d41cf09be8740c3f4f8b3..deee6f9401aca2c3a4eb9079ccea43175bad7c6f 100644
--- a/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
+++ b/src/plugins/qmldesigner/components/componentcore/modelnodeoperations.cpp
@@ -56,7 +56,7 @@ static inline QList<QmlItemNode> siblingsForNode(const QmlItemNode &itemNode)
 {
     QList<QmlItemNode> siblingList;
 
-    if (itemNode.isValid() && itemNode.modelNode().parentProperty().isValid()) {
+    if (itemNode.isValid() && itemNode.modelNode().hasParentProperty()) {
         QList<ModelNode> modelNodes = itemNode.modelNode().parentProperty().parentModelNode().allDirectSubModelNodes();
         foreach (const ModelNode &node, modelNodes) {
             QmlItemNode childItemNode = node;
diff --git a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
index c4489a59a11f5328a8591f955e0b5b5514132250..9a75898651deef00cd29251748e1db10f228e999 100644
--- a/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
+++ b/src/plugins/qmldesigner/components/formeditor/formeditorview.cpp
@@ -236,7 +236,7 @@ void FormEditorView::propertiesAboutToBeRemoved(const QList<AbstractProperty>& p
 
 static inline bool hasNodeSourceParent(const ModelNode &node)
 {
-    if (node.parentProperty().isValid() && node.parentProperty().parentModelNode().isValid()) {
+    if (node.hasParentProperty() && node.parentProperty().parentModelNode().isValid()) {
         ModelNode parent = node.parentProperty().parentModelNode();
         if (parent.nodeSourceType() != ModelNode::NodeWithoutSource)
             return true;
diff --git a/src/plugins/qmldesigner/components/integration/designdocument.cpp b/src/plugins/qmldesigner/components/integration/designdocument.cpp
index ac6a19d11beb68165062e41a7eaf3f928d7f68b7..a83631abf78f9cc6747d3d7ac45f4c640c3d4110 100644
--- a/src/plugins/qmldesigner/components/integration/designdocument.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocument.cpp
@@ -488,7 +488,7 @@ void DesignDocument::paste()
             targetNode = view.selectedModelNodes().first();
 
         //In case we copy and paste a selection we paste in the parent item
-        if ((view.selectedModelNodes().count() == selectedNodes.count()) && targetNode.isValid() && targetNode.parentProperty().isValid())
+        if ((view.selectedModelNodes().count() == selectedNodes.count()) && targetNode.isValid() && targetNode.hasParentProperty())
             targetNode = targetNode.parentProperty().parentModelNode();
 
         if (!targetNode.isValid())
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index e19324e5a80a3c16ab73d6b0d4260eaac6a1c5d4..7925ee468e77c97a35a9de59939ef4ace14c44b5 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -38,6 +38,7 @@
 #include "invalidargumentexception.h"
 #include "invalididexception.h"
 #include "invalidmodelnodeexception.h"
+#include "invalidpropertyexception.h"
 #include "model_p.h"
 #include "variantproperty.h"
 #include "bindingproperty.h"
@@ -277,8 +278,11 @@ NodeAbstractProperty ModelNode::parentProperty() const
         Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid");
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
     }
-    if (m_internalNode->parentProperty().isNull())
-        return NodeAbstractProperty();
+
+    if (m_internalNode->parentProperty().isNull()) {
+        Q_ASSERT_X(m_internalNode->parentProperty(), Q_FUNC_INFO, "parentProperty is invalid");
+        throw InvalidPropertyException(__LINE__, __FUNCTION__, __FILE__, "parent");
+    }
 
     return NodeAbstractProperty(m_internalNode->parentProperty()->name(), m_internalNode->parentProperty()->propertyOwner(), m_model.data(), view());
 }
diff --git a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
index 3741d4fa904deab19cbe3a8c3eb230674b9803ee..b243571237833a7f388cf211bd6961f559a28dec 100644
--- a/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
+++ b/src/plugins/qmldesigner/designercore/model/nodeabstractproperty.cpp
@@ -65,7 +65,7 @@ void NodeAbstractProperty::reparentHere(const ModelNode &modelNode)
 
 void NodeAbstractProperty::reparentHere(const ModelNode &modelNode,  bool isNodeList)
 {
-    if (modelNode.parentProperty() == *this)
+    if (modelNode.hasParentProperty() && modelNode.parentProperty() == *this)
         return;
     Internal::WriteLocker locker(model());
     if (!isValid())
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index 8948278ec291963ed155abaf075c9fdd815a6fcc..48a56838eb325fe5e5222f0a25d090918903acfd 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -901,7 +901,7 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
         }
     }
 
-    bool isImplicitComponent = modelNode.parentProperty().isValid() && propertyIsComponentType(modelNode.parentProperty(), typeName, modelNode.model());
+    bool isImplicitComponent = modelNode.hasParentProperty() && propertyIsComponentType(modelNode.parentProperty(), typeName, modelNode.model());
 
 
     if (modelNode.type() != typeName //If there is no valid parentProperty                                                                                                      //the node has just been created. The type is correct then.
@@ -1656,7 +1656,7 @@ void ModelAmender::typeDiffers(bool isRootNode,
                                QmlJS::AST::UiObjectMember *astNode,
                                ReadingContext *context)
 {
-    const bool propertyTakesComponent = propertyIsComponentType(modelNode.parentProperty(), typeName, modelNode.model());
+    const bool propertyTakesComponent = modelNode.hasParentProperty() && propertyIsComponentType(modelNode.parentProperty(), typeName, modelNode.model());
 
     if (isRootNode) {
         modelNode.view()->changeRootNodeType(typeName, majorVersion, minorVersion);