diff --git a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp
index 7c5248035e6ae779b01e1c9bab8598b5066a5f29..11127a80243f6a97c7d53f6cad68b56b2e1ca25f 100644
--- a/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp
+++ b/src/plugins/qmldesigner/components/propertyeditor/colorwidget.cpp
@@ -195,7 +195,8 @@ void ColorWidget::updateGradientNode()
         if (m_modelNode.hasProperty("gradient")) {
             m_modelNode.removeProperty("gradient");
         }
-        gradientNode = m_modelNode.addChildNode("Qt/Gradient", 4, 6, "gradient");
+        gradientNode =  m_modelNode.view()->createModelNode("Qt/Gradient", 4, 6);
+        m_modelNode.nodeProperty("gradient").reparentHere(gradientNode);
         m_gradientNode = gradientNode;
     }
 
diff --git a/src/plugins/qmldesigner/core/include/modelnode.h b/src/plugins/qmldesigner/core/include/modelnode.h
index 843af5f8592f9ffe3a970bbee4ce8fc177b94d84..59be43c94806f81d06ee281c110eb20e44e80106 100644
--- a/src/plugins/qmldesigner/core/include/modelnode.h
+++ b/src/plugins/qmldesigner/core/include/modelnode.h
@@ -104,7 +104,6 @@ public:
     void setParentProperty(const ModelNode &newParentNode, const QString &propertyName);
     bool hasParentProperty() const;
 
-    ModelNode addChildNode(const QString &nodeTypeString, int majorVersion, int minorVersion, const QString &propertyName, const PropertyListType &propertyList = PropertyListType());
     const QList<ModelNode> allDirectSubModelNodes() const;
     const QList<ModelNode> allSubModelNodes() const;
     bool hasAnySubModelNodes() const;
diff --git a/src/plugins/qmldesigner/core/model/modelnode.cpp b/src/plugins/qmldesigner/core/model/modelnode.cpp
index bd832231b70899de5b83be2aae902c90609d40f3..9025e173f96e30e6994b01fb0c63fcd54b46e731 100644
--- a/src/plugins/qmldesigner/core/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/core/model/modelnode.cpp
@@ -64,7 +64,6 @@ There is always a root model node in every QmlDesigner::Model:
 \code
 QmlDesigner::Model *model = QmlDesigner::Model::create();
 QmlDesigner::ModelNode rootNode = model->rootNode();
-QmlDesigner::ModelNode childNode = rootNode.addChildNode("QLineEdit");
 \endcode
 
 You can add a property to a node:
@@ -321,7 +320,7 @@ ModelNode parentNode4 = node.parentProperty().parentModelNode();
 parentNode4 == parentNode1; -> true
 \endcode
 
-\see parentNode childNodes addChildNode hasChildNodes Model::undo
+\see parentNode childNodes hasChildNodes Model::undo
 
 */
 
@@ -354,7 +353,7 @@ void ModelNode::setParentProperty(const ModelNode &newParentNode, const QString
 
 /*! \brief test if there is a parent for this node
 \return true is this node has a parent
-\see childNodes parentNode setParentNode addChildNode hasChildNodes Model::undo
+\see childNodes parentNode setParentNode hasChildNodes Model::undo
 */
 bool ModelNode::hasParentProperty() const
 {
@@ -574,27 +573,6 @@ void ModelNode::removeProperty(const QString &name)
 }
 
 
-
-/*! \brief creates a new node and add it as child to this node
-\param nodeTypeString type name of the child node
-\param propertyList list of properties
-\return the new created model node
-
-*/
-ModelNode ModelNode::addChildNode(const QString &nodeTypeString, int majorVersion, int minorVersion, const QString &propertyName, const PropertyListType &propertyList)
-{
-    if (!isValid()) {
-        Q_ASSERT_X(isValid(), Q_FUNC_INFO, "model node is invalid");
-        throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
-    }
-
-    ModelNode newNode(view()->createModelNode(nodeTypeString, majorVersion, minorVersion, propertyList));
-
-    newNode.setParentProperty(nodeListProperty(propertyName));
-
-    return newNode;
-}
-
 /*! \brief removes this node from the node tree
 */
 
diff --git a/src/plugins/qmldesigner/core/model/qmlitemnode.cpp b/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
index 0078602983739724614f16701a34e9b21fe27b13..ad384345ade3b166926b6fd13e78195b22909b9a 100644
--- a/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
+++ b/src/plugins/qmldesigner/core/model/qmlitemnode.cpp
@@ -268,7 +268,8 @@ QmlModelState QmlModelStateGroup::addState(const QString &name)
     PropertyListType propertyList;
     propertyList.append(qMakePair(QString("name"), QVariant(name)));
 
-    ModelNode newState(modelNode().addChildNode("Qt/State", 4, 6, "states", propertyList));
+    ModelNode newState = modelNode().view()->createModelNode("Qt/State", 4, 6, propertyList);
+    modelNode().nodeListProperty("states").reparentHere(newState);
 
     return newState;
 }
diff --git a/src/plugins/qmldesigner/core/model/qmlstate.cpp b/src/plugins/qmldesigner/core/model/qmlstate.cpp
index 774fc5ab700cb8113c863d96135f60b638a65108..e7e4d8f4f7534f36179de6fc52e9f882e62645b0 100644
--- a/src/plugins/qmldesigner/core/model/qmlstate.cpp
+++ b/src/plugins/qmldesigner/core/model/qmlstate.cpp
@@ -174,7 +174,9 @@ void QmlModelState::addChangeSetIfNotExists(const ModelNode &node)
         return; //changeSet already there
     }
 
-    ModelNode newChangeSet(modelNode().addChildNode("Qt/PropertyChanges", 4, 6, "changes"));
+    ModelNode newChangeSet = modelNode().view()->createModelNode("Qt/PropertyChanges", 4, 6);
+    modelNode().nodeListProperty("changes").reparentHere(newChangeSet);
+
     QmlPropertyChanges(newChangeSet).setTarget(node);
     Q_ASSERT(QmlPropertyChanges(newChangeSet).isValid());
 }