diff --git a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp
index 3069f76073f8462dfff2536464c77030b4440a8d..f28f5c278c69cf12dfed218b26f58bb86b423d94 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp
+++ b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.cpp
@@ -40,6 +40,7 @@ CreateSceneCommand::CreateSceneCommand(const QVector<InstanceContainer> &instanc
                                        const QVector<PropertyBindingContainer> &bindingChangeVector,
                                        const QVector<PropertyValueContainer> &auxiliaryChangeVector,
                                        const QVector<AddImportContainer> &importVector,
+                                       const QVector<MockupTypeContainer> &mockupTypeVector,
                                        const QUrl &fileUrl)
     : m_instanceVector(instanceContainer),
       m_reparentInstanceVector(reparentContainer),
@@ -48,6 +49,7 @@ CreateSceneCommand::CreateSceneCommand(const QVector<InstanceContainer> &instanc
       m_bindingChangeVector(bindingChangeVector),
       m_auxiliaryChangeVector(auxiliaryChangeVector),
       m_importVector(importVector),
+      m_mockupTypeVector(mockupTypeVector),
       m_fileUrl(fileUrl)
 {
 }
@@ -87,6 +89,11 @@ QVector<AddImportContainer> CreateSceneCommand::imports() const
     return m_importVector;
 }
 
+QVector<MockupTypeContainer> CreateSceneCommand::mockupTypes() const
+{
+    return m_mockupTypeVector;
+}
+
 QUrl CreateSceneCommand::fileUrl() const
 {
     return m_fileUrl;
@@ -101,6 +108,7 @@ QDataStream &operator<<(QDataStream &out, const CreateSceneCommand &command)
     out << command.bindingChanges();
     out << command.auxiliaryChanges();
     out << command.imports();
+    out << command.mockupTypes();
     out << command.fileUrl();
 
     return out;
@@ -115,6 +123,7 @@ QDataStream &operator>>(QDataStream &in, CreateSceneCommand &command)
     in >> command.m_bindingChangeVector;
     in >> command.m_auxiliaryChangeVector;
     in >> command.m_importVector;
+    in >> command.m_mockupTypeVector;
     in >> command.m_fileUrl;
 
     return in;
@@ -130,6 +139,7 @@ QDebug operator <<(QDebug debug, const CreateSceneCommand &command)
                     << "bindingChanges: " << command.bindingChanges() << ", "
                     << "auxiliaryChanges: " << command.auxiliaryChanges() << ", "
                     << "imports: " << command.imports() << ", "
+                    << "mockupTypes: " << command.mockupTypes() << ", "
                     << "fileUrl: " << command.fileUrl() << ")";
 }
 
diff --git a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.h b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.h
index dc7130bd69d0f66ef43ed0877d829530fb1f4073..aca2fe9565752a861e43741bbae5bdb13eda80ff 100644
--- a/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.h
+++ b/share/qtcreator/qml/qmlpuppet/commands/createscenecommand.h
@@ -32,6 +32,7 @@
 #include "instancecontainer.h"
 #include "reparentcontainer.h"
 #include "idcontainer.h"
+#include "mockuptypecontainer.h"
 #include "propertyvaluecontainer.h"
 #include "propertybindingcontainer.h"
 #include "addimportcontainer.h"
@@ -51,6 +52,7 @@ public:
                        const QVector<PropertyBindingContainer> &bindingChangeVector,
                        const QVector<PropertyValueContainer> &auxiliaryChangeVector,
                        const QVector<AddImportContainer> &importVector,
+                       const QVector<MockupTypeContainer> &mockupTypeVector,
                        const QUrl &fileUrl);
 
     QVector<InstanceContainer> instances() const;
@@ -60,6 +62,7 @@ public:
     QVector<PropertyBindingContainer> bindingChanges() const;
     QVector<PropertyValueContainer> auxiliaryChanges() const;
     QVector<AddImportContainer> imports() const;
+    QVector<MockupTypeContainer> mockupTypes() const;
     QUrl fileUrl() const;
 
 private:
@@ -70,6 +73,7 @@ private:
     QVector<PropertyBindingContainer> m_bindingChangeVector;
     QVector<PropertyValueContainer> m_auxiliaryChangeVector;
     QVector<AddImportContainer> m_importVector;
+    QVector<MockupTypeContainer> m_mockupTypeVector;
     QUrl m_fileUrl;
 };
 
diff --git a/share/qtcreator/qml/qmlpuppet/container/container.pri b/share/qtcreator/qml/qmlpuppet/container/container.pri
index 51bbb43aeccf7a76fb6cab45ea1353a33c1af868..381e5cf117d1cefa19192723691ef7cb55f7f6a8 100644
--- a/share/qtcreator/qml/qmlpuppet/container/container.pri
+++ b/share/qtcreator/qml/qmlpuppet/container/container.pri
@@ -1,6 +1,7 @@
 INCLUDEPATH += $$PWD/
 
 HEADERS += $$PWD/addimportcontainer.h
+HEADERS += $$PWD/mockuptypecontainer.h
 HEADERS += $$PWD/sharedmemory.h
 HEADERS += $$PWD/imagecontainer.h
 HEADERS += $$PWD/idcontainer.h
@@ -12,6 +13,7 @@ HEADERS += $$PWD/propertybindingcontainer.h
 HEADERS += $$PWD/propertyvaluecontainer.h
 
 SOURCES += $$PWD/addimportcontainer.cpp
+SOURCES += $$PWD/mockuptypecontainer.cpp
 unix:SOURCES += $$PWD/sharedmemory_unix.cpp
 !unix:SOURCES += $$PWD/sharedmemory_qt.cpp
 SOURCES += $$PWD/imagecontainer.cpp
diff --git a/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.cpp b/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..5c6a29950917cf37ebfc0bdc7fb962359d6a7619
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.cpp
@@ -0,0 +1,88 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#include "mockuptypecontainer.h"
+
+#include <QDebug>
+
+namespace QmlDesigner {
+
+QmlDesigner::MockupTypeContainer::MockupTypeContainer()
+{
+
+}
+
+QmlDesigner::MockupTypeContainer::MockupTypeContainer(const QmlDesigner::TypeName &type,
+                                                      const QString &importUri,
+                                                      int majorVersion,
+                                                      int minorVersion, bool isItem)
+    : m_typeName(type)
+    ,m_importUri(importUri)
+    ,m_majorVersion(majorVersion)
+    ,m_minorVersion(minorVersion)
+    ,m_isItem(isItem)
+{
+
+}
+
+QString MockupTypeContainer::importUri() const
+{
+    return m_importUri;
+}
+
+QDataStream &operator<<(QDataStream &out, const MockupTypeContainer &container)
+{
+    out << container.typeName();
+    out << container.importUri();
+    out << container.majorVersion();
+    out << container.minorVersion();
+    out << container.isItem();
+
+    return out;
+}
+
+QDataStream &operator>>(QDataStream &in, MockupTypeContainer &container)
+{
+    in >> container.m_typeName;
+    in >> container.m_importUri;
+    in >> container.m_majorVersion;
+    in >> container.m_minorVersion;
+    in >> container.m_isItem;
+
+    return in;
+}
+
+QDebug operator <<(QDebug debug, const MockupTypeContainer &container)
+{
+    return debug.nospace() << "MockupTypeContainer("
+                           << "typeName: " << container.typeName() << ", "
+                           << "importUri: " << container.importUri() << ", "
+                           << "majorVersion: " << container.majorVersion() << ", "
+                           << "minorVersion: " << container.minorVersion() << ", "
+                           << "isItem: " << container.isItem() << ")";
+}
+
+
+} // namespace QmlDesigner
diff --git a/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.h b/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.h
new file mode 100644
index 0000000000000000000000000000000000000000..19061cfa5f4228e73c92160c42a3946e810fcceb
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/container/mockuptypecontainer.h
@@ -0,0 +1,74 @@
+/****************************************************************************
+**
+** Copyright (C) 2016 The Qt Company Ltd.
+** Contact: https://www.qt.io/licensing/
+**
+** This file is part of Qt Creator.
+**
+** Commercial License Usage
+** Licensees holding valid commercial Qt licenses may use this file in
+** accordance with the commercial license agreement provided with the
+** Software or, alternatively, in accordance with the terms contained in
+** a written agreement between you and The Qt Company. For licensing terms
+** and conditions see https://www.qt.io/terms-conditions. For further
+** information use the contact form at https://www.qt.io/contact-us.
+**
+** GNU General Public License Usage
+** Alternatively, this file may be used under the terms of the GNU
+** General Public License version 3 as published by the Free Software
+** Foundation with exceptions as appearing in the file LICENSE.GPL3-EXCEPT
+** included in the packaging of this file. Please review the following
+** information to ensure the GNU General Public License requirements will
+** be met: https://www.gnu.org/licenses/gpl-3.0.html.
+**
+****************************************************************************/
+
+#pragma once
+
+#include <qmetatype.h>
+#include <QString>
+#include <QDataStream>
+
+#include "nodeinstanceglobal.h"
+
+namespace QmlDesigner {
+
+class MockupTypeContainer
+{
+    friend QDataStream &operator>>(QDataStream &in, MockupTypeContainer &container);
+
+public:
+    MockupTypeContainer();
+    MockupTypeContainer(const TypeName &type, const QString &importUri, int majorVersion, int minorVersion, bool isItem);
+
+    TypeName typeName() const
+    { return m_typeName; }
+
+    QString importUri() const;
+
+    int majorVersion() const
+    { return m_majorVersion; }
+
+    int minorVersion() const
+    { return m_minorVersion; }
+
+    bool isItem() const
+    { return m_isItem; }
+
+private:
+    TypeName m_typeName;
+    QString m_importUri;
+    int m_majorVersion = -1;
+    int m_minorVersion = -1;
+    bool m_isItem = false;
+};
+
+
+QDataStream &operator<<(QDataStream &out, const MockupTypeContainer &container);
+QDataStream &operator>>(QDataStream &in, MockupTypeContainer &container);
+
+QDebug operator <<(QDebug debug, const MockupTypeContainer &container);
+
+} // namespace QmlDesigner
+
+Q_DECLARE_METATYPE(QmlDesigner::MockupTypeContainer)
diff --git a/share/qtcreator/qml/qmlpuppet/mockfiles/GenericBackend.qml b/share/qtcreator/qml/qmlpuppet/mockfiles/GenericBackend.qml
new file mode 100644
index 0000000000000000000000000000000000000000..30083c228f3a9900a4dc2859195f781c4715d98b
--- /dev/null
+++ b/share/qtcreator/qml/qmlpuppet/mockfiles/GenericBackend.qml
@@ -0,0 +1,8 @@
+import QtQuick 2.6
+
+QtObject {
+    property int x
+    property int y
+    property int width
+    property int height
+}
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
index c5fb5fd1b97792e72f9d0d8c4aebeda0d7dfb47b..db3a1dc89ff6418813cece586d4e355cfebb4878 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.cpp
@@ -41,6 +41,10 @@
 
 #include <qmlprivategate.h>
 
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 6, 0))
+#include <private/qquickdesignersupportmetainfo_p.h>
+#endif
+
 #include <createinstancescommand.h>
 #include <changefileurlcommand.h>
 #include <clearscenecommand.h>
@@ -659,6 +663,25 @@ void NodeInstanceServer::setupDummysForContext(QQmlContext *context)
     }
 }
 
+void NodeInstanceServer::setupMockupTypes(const QVector<MockupTypeContainer> &container)
+{
+    for (const MockupTypeContainer &mockupType :  container) {
+#if (QT_VERSION >= QT_VERSION_CHECK(5, 8, 0))
+        QQuickDesignerSupportMetaInfo::registerMockupObject(mockupType.importUri().toUtf8(),
+                                                            mockupType.majorVersion(),
+                                                            mockupType.minorVersion(),
+                                                            mockupType.typeName());
+#else
+        qmlRegisterType(QUrl("qrc:/qtquickplugin/mockfiles/GenericBackend.qml"),
+                        mockupType.importUri().toUtf8(),
+                        mockupType.majorVersion(),
+                        mockupType.minorVersion(),
+                        mockupType.typeName());
+#endif
+
+    }
+}
+
 
 QList<QQmlContext*> NodeInstanceServer::allSubContextsForObject(QObject *object)
 {
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
index 6ac34eecf53166972e550a31fb018ebd0bc09635..c7a0e58b32f0c1f6b02a7bbac01f8a925beb9a8c 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/nodeinstanceserver.h
@@ -54,6 +54,7 @@ class ChildrenChangedCommand;
 class ReparentContainer;
 class ComponentCompletedCommand;
 class AddImportContainer;
+class MockupTypeContainer;
 class IdContainer;
 
 namespace Internal {
@@ -188,6 +189,7 @@ protected:
 
     void setupDummysForContext(QQmlContext *context);
 
+    void setupMockupTypes(const QVector<MockupTypeContainer> &container);
     void setupFileUrl(const QUrl &fileUrl);
     void setupImports(const QVector<AddImportContainer> &container);
     void setupDummyData(const QUrl &fileUrl);
diff --git a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp
index f4ed9d196c4c088264a6a708a9092c85d7772dca..18ce40580f3cc756d3004b7872758554e56cd97e 100644
--- a/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp
+++ b/share/qtcreator/qml/qmlpuppet/qml2puppet/instances/qt5nodeinstanceserver.cpp
@@ -85,6 +85,8 @@ void Qt5NodeInstanceServer::resetAllItems()
 
 void Qt5NodeInstanceServer::setupScene(const CreateSceneCommand &command)
 {
+
+    setupMockupTypes(command.mockupTypes());
     setupFileUrl(command.fileUrl());
     setupImports(command.imports());
     setupDummyData(command.fileUrl());
diff --git a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc
index e9588ab045a52e33a527cc6ed64a75b3cd32e015..e7606e21d8cffb0108db42f6b6034038b1153078 100644
--- a/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc
+++ b/share/qtcreator/qml/qmlpuppet/qmlpuppet.qrc
@@ -4,5 +4,6 @@
         <file>html/welcome.html</file>
         <file>images/webkit.png</file>
         <file>mockfiles/Window.qml</file>
+        <file>mockfiles/GenericBackend.qml</file>
     </qresource>
 </RCC>
diff --git a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
index 00fabfe5aaad25b83b21cb9d0bb6a5318c96c093..e32c95685d66e53eee48d2a968555e15a0f6066d 100644
--- a/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
+++ b/src/plugins/qmldesigner/designercore/instances/nodeinstanceview.cpp
@@ -34,6 +34,7 @@
 #include <model.h>
 #include <modelnode.h>
 #include <metainfo.h>
+#include <rewriterview.h>
 
 #include "abstractproperty.h"
 #include "variantproperty.h"
@@ -840,6 +841,44 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
     foreach (const Import &import, model()->imports())
         importVector.append(AddImportContainer(import.url(), import.file(), import.version(), import.alias(), import.importPaths()));
 
+    QVector<MockupTypeContainer> mockupTypesVector;
+
+    for (const CppTypeData &cppTypeData : model()->rewriterView()->getCppTypes()) {
+        const QString versionString = cppTypeData.versionString;
+        int majorVersion = -1;
+        int minorVersion = -1;
+
+        if (versionString.contains(QStringLiteral("."))) {
+            const QStringList splittedString = versionString.split(QStringLiteral("."));
+            majorVersion = splittedString.first().toInt();
+            minorVersion = splittedString.last().toInt();
+        }
+
+        bool isItem = false;
+
+        if (!cppTypeData.isSingleton) { /* Singletons only appear on the right hand sides of bindings and create just warnings. */
+            const TypeName typeName = cppTypeData.typeName.toUtf8();
+            const QString uri = cppTypeData.importUrl;
+
+            NodeMetaInfo metaInfo = model()->metaInfo(uri.toUtf8() + "." + typeName);
+
+            if (metaInfo.isValid())
+                isItem = metaInfo.isGraphicalItem();
+
+            MockupTypeContainer mockupType(typeName, uri, majorVersion, minorVersion, isItem);
+
+            mockupTypesVector.append(mockupType);
+        } else { /* We need a type for the signleton import */
+            const TypeName typeName = cppTypeData.typeName.toUtf8() + "Mockup";
+            const QString uri = cppTypeData.importUrl;
+
+            MockupTypeContainer mockupType(typeName, uri, majorVersion, minorVersion, isItem);
+
+            mockupTypesVector.append(mockupType);
+        }
+    }
+
+
     return CreateSceneCommand(instanceContainerList,
                               reparentContainerList,
                               idContainerList,
@@ -847,6 +886,7 @@ CreateSceneCommand NodeInstanceView::createCreateSceneCommand()
                               bindingContainerList,
                               auxiliaryContainerVector,
                               importVector,
+                              mockupTypesVector,
                               model()->fileUrl());
 }