diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
index 493bb9e2f735230049af73f991025a10e02a443b..60a16eeb882c9e4d5e7bbc0c5f57787538f47fba 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentcontroller.cpp
@@ -507,8 +507,7 @@ void DesignDocumentController::deleteSelected()
 
 void DesignDocumentController::copySelected()
 {
-    QScopedPointer<Model> model(Model::create("QtQuick.Rectangle", 1, 0));
-    model->setMetaInfo(m_d->model->metaInfo());
+    QScopedPointer<Model> model(Model::create("QtQuick.Rectangle", 1, 0, model()));
     model->setFileUrl(m_d->model->fileUrl());
     model->changeImports(m_d->model->imports(), QList<Import>());
 
@@ -603,8 +602,7 @@ static void scatterItem(ModelNode pastedNode, const ModelNode targetNode, int of
 
 void DesignDocumentController::paste()
 {
-    QScopedPointer<Model> model(Model::create("empty"));
-    model->setMetaInfo(m_d->model->metaInfo());
+    QScopedPointer<Model> model(Model::create("empty", 1, 0, model()));
     model->setFileUrl(m_d->model->fileUrl());
     model->changeImports(m_d->model->imports(), QList<Import>());
 
diff --git a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp
index 82154c890798ca06e6e440f559ede1c145ac92e0..0fb87afda864c903e009a2dd4701e8bd47165e58 100644
--- a/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp
+++ b/src/plugins/qmldesigner/components/integration/designdocumentcontrollerview.cpp
@@ -155,8 +155,7 @@ void DesignDocumentControllerView::fromClipboard()
 
 QString DesignDocumentControllerView::toText() const
 {
-    QScopedPointer<Model> outputModel(Model::create("QtQuick.Rectangle", 1, 0));
-    outputModel->setMetaInfo(model()->metaInfo());
+    QScopedPointer<Model> outputModel(Model::create("QtQuick.Rectangle", 1, 0, model()));
     QPlainTextEdit textEdit;
 
     QString imports;
@@ -187,8 +186,7 @@ QString DesignDocumentControllerView::toText() const
 
 void DesignDocumentControllerView::fromText(QString text)
 {
-    QScopedPointer<Model> inputModel(Model::create("QtQuick.Rectangle", 1, 0));
-    inputModel->setMetaInfo(model()->metaInfo());
+    QScopedPointer<Model> inputModel(Model::create("QtQuick.Rectangle", 1, 0, model()));
     inputModel->setFileUrl(model()->fileUrl());
     QPlainTextEdit textEdit;
     QString imports;
diff --git a/src/plugins/qmldesigner/designercore/include/model.h b/src/plugins/qmldesigner/designercore/include/model.h
index 2445a7389d89172affceee4a826595f3eb11e360..3e28205dbee0418ce25f4e2852eb27b81d68132c 100644
--- a/src/plugins/qmldesigner/designercore/include/model.h
+++ b/src/plugins/qmldesigner/designercore/include/model.h
@@ -84,7 +84,7 @@ public:
 
     virtual ~Model();
 
-    static Model *create(QString type, int major = 4, int minor = 7);
+    static Model *create(QString type, int major = 4, int minor = 7, Model *metaInfoPropxyModel = 0);
 
     Model *masterModel() const;
     void setMasterModel(Model *model);
@@ -96,7 +96,6 @@ public:
     MetaInfo metaInfo();
     NodeMetaInfo metaInfo(const QString &typeName, int majorVersion = -1, int minorVersion = -1);
     bool hasNodeMetaInfo(const QString &typeName, int majorVersion = -1, int minorVersion = -1);
-    void setMetaInfo(const MetaInfo &metaInfo);
 
     void attachView(AbstractView *view);
     void detachView(AbstractView *view, ViewNotification emitDetachNotify = NotifyView);
@@ -109,6 +108,8 @@ public:
 
     RewriterView *rewriterView() const;
 
+    Model *metaInfoProxyModel();
+
 protected:
     Model();
 
diff --git a/src/plugins/qmldesigner/designercore/model/model.cpp b/src/plugins/qmldesigner/designercore/model/model.cpp
index a5652fa76a648646a40955e042329689530a2fb3..f63d67170c6d12d11a40a21b5b38b7a71f791213 100644
--- a/src/plugins/qmldesigner/designercore/model/model.cpp
+++ b/src/plugins/qmldesigner/designercore/model/model.cpp
@@ -121,10 +121,11 @@ void ModelPrivate::detachAllViews()
     }
 }
 
-Model *ModelPrivate::create(QString type, int major, int minor)
+Model *ModelPrivate::create(QString type, int major, int minor, Model *metaInfoPropxyModel)
 {
     Model *model = new Model;
 
+    model->m_d->m_metaInfoProxyModel = metaInfoPropxyModel;
     model->m_d->rootNode()->setType(type);
     model->m_d->rootNode()->setMajorVersion(major);
     model->m_d->rootNode()->setMinorVersion(minor);
@@ -1628,9 +1629,9 @@ Model::~Model()
 }
 
 
-Model *Model::create(QString type, int major, int minor)
+Model *Model::create(QString type, int major, int minor, Model *metaInfoPropxyModel)
 {
-    return Internal::ModelPrivate::create(type, major, minor);
+    return Internal::ModelPrivate::create(type, major, minor, metaInfoPropxyModel);
 }
 
 
@@ -1686,6 +1687,18 @@ RewriterView *Model::rewriterView() const
     return m_d->rewriterView();
 }
 
+/*!
+ \brief Returns the model that is used for metainfo
+ \return Return itself if not other metaInfoProxyModel does exist
+*/
+Model *Model::metaInfoProxyModel()
+{
+    if (m_d->m_metaInfoProxyModel)
+        return m_d->m_metaInfoProxyModel->metaInfoProxyModel();
+    else
+        return this;
+}
+
 #if 0
 /*!
  \brief Creates a new empty model
@@ -1746,15 +1759,6 @@ NodeMetaInfo Model::metaInfo(const QString &typeName, int majorVersion, int mino
     return NodeMetaInfo(this, typeName, majorVersion, minorVersion);
 }
 
-/*!
-  \brief Sets a specific Metainfo on this Model
-  */
-void Model::setMetaInfo(const MetaInfo &metaInfo)
-{
-    Internal::WriteLocker locker(m_d);
-    m_d->setMetaInfo(metaInfo);
-}
-
 /*!
   \brief Returns list of QML types available within the model.
   */
diff --git a/src/plugins/qmldesigner/designercore/model/model_p.h b/src/plugins/qmldesigner/designercore/model/model_p.h
index 2f15c18082f47dff510d75c38775bddc63fa887a..fbd9df9e71d5573acecb1ae7a10ef10741f0ec6e 100644
--- a/src/plugins/qmldesigner/designercore/model/model_p.h
+++ b/src/plugins/qmldesigner/designercore/model/model_p.h
@@ -97,7 +97,7 @@ public:
      ModelPrivate(Model *model);
     ~ModelPrivate();
 
-    static Model *create(QString type, int major, int minor);
+    static Model *create(QString type, int major, int minor, Model *metaInfoPropxyModel);
 
     QUrl fileUrl() const;
     void setFileUrl(const QUrl &url);
@@ -240,6 +240,8 @@ private:
     QWeakPointer<Model> m_masterModel;
     QWeakPointer<RewriterView> m_rewriterView;
     QWeakPointer<NodeInstanceView> m_nodeInstanceView;
+    QWeakPointer<Model> m_metaInfoProxyModel;
+
     bool m_writeLock;
     qint32 m_internalIdCounter;
 };
diff --git a/src/plugins/qmldesigner/designercore/model/modelnode.cpp b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
index d00769284281a81d21f798554b462b8137da165e..d738810418fc5bb24792a43921abddf2b58ea27a 100644
--- a/src/plugins/qmldesigner/designercore/model/modelnode.cpp
+++ b/src/plugins/qmldesigner/designercore/model/modelnode.cpp
@@ -740,7 +740,7 @@ const NodeMetaInfo ModelNode::metaInfo() const
         throw InvalidModelNodeException(__LINE__, __FUNCTION__, __FILE__);
     }
 
-    return NodeMetaInfo(model(), type(), majorVersion(), minorVersion());
+    return NodeMetaInfo(model()->metaInfoProxyModel(), type(), majorVersion(), minorVersion());
 }
 
 /*! \brief has a node the selection of the model
diff --git a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
index 8f3920b4ec07b8919f12024be19122afdd6ca803..4d58ca087431a08c3e750079f4110efc8426bf30 100644
--- a/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
+++ b/src/plugins/qmldesigner/designercore/model/texttomodelmerger.cpp
@@ -43,6 +43,7 @@
 #include "texttomodelmerger.h"
 #include "rewriterview.h"
 #include "variantproperty.h"
+#include "nodemetainfo.h"
 
 #include <languageutils/componentversion.h>
 #include <qmljs/qmljsevaluate.h>
@@ -727,6 +728,8 @@ void TextToModelMerger::syncNode(ModelNode &modelNode,
     int majorVersion;
     int minorVersion;
     context->lookup(astObjectType, typeName, majorVersion, minorVersion, defaultPropertyName);
+    if (defaultPropertyName.isEmpty()) //fallback and use the meta system of the model
+        defaultPropertyName = modelNode.metaInfo().defaultPropertyName();
 
     if (typeName.isEmpty()) {
         qWarning() << "Skipping node with unknown type" << flatten(astObjectType);