diff --git a/src/qml/debugger/qqmlenginedebugservice.cpp b/src/qml/debugger/qqmlenginedebugservice.cpp
index cb533a0459c4f2853f8ad70b91932054fbfe2d18..088f3203d6b4f7cb333d89da923276a23b3da52b 100644
--- a/src/qml/debugger/qqmlenginedebugservice.cpp
+++ b/src/qml/debugger/qqmlenginedebugservice.cpp
@@ -96,8 +96,16 @@ QDataStream &operator>>(QDataStream &ds,
 QDataStream &operator<<(QDataStream &ds,
                         const QQmlEngineDebugService::QQmlObjectProperty &data)
 {
-    ds << (int)data.type << data.name << data.value << data.valueTypeName
-       << data.binding << data.hasNotifySignal;
+    ds << (int)data.type << data.name;
+    // check first whether the data can be saved
+    // (otherwise we assert in QVariant::operator<<)
+    QByteArray buffer;
+    QDataStream fakeStream(&buffer, QIODevice::WriteOnly);
+    if (QMetaType::save(fakeStream, data.value.type(), data.value.constData()))
+        ds << data.value;
+    else
+        ds << QVariant();
+    ds << data.valueTypeName << data.binding << data.hasNotifySignal;
     return ds;
 }
 
diff --git a/tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp b/tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp
index 5bbbe8e1e9c30abd38baa048d4b7f2b1b0d6e758..7c931928d4c714422fb93d20863f87ef9bda2ff0 100644
--- a/tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp
+++ b/tests/auto/qml/debugger/qqmlenginedebugservice/tst_qqmlenginedebugservice.cpp
@@ -36,6 +36,7 @@
 #include <QHostAddress>
 #include <QDebug>
 #include <QThread>
+#include <QModelIndex>
 
 #include <QtQml/qqmlengine.h>
 #include <QtQml/qqmlcontext.h>
@@ -73,6 +74,16 @@ signals:
 };
 QML_DECLARE_TYPE(NonScriptProperty)
 
+class CustomTypes : public QObject
+{
+    Q_OBJECT
+    Q_PROPERTY(QModelIndex modelIndex READ modelIndex)
+public:
+    CustomTypes(QObject *parent = 0) : QObject(parent) {}
+
+    QModelIndex modelIndex() { return QModelIndex(); }
+};
+
 class tst_QQmlEngineDebugService : public QObject
 {
     Q_OBJECT
@@ -125,6 +136,7 @@ private slots:
     void setBindingInStates();
 
     void regression_QTCREATORBUG_7451();
+    void queryObjectWithNonStreamableTypes();
 };
 
 QmlDebugObjectReference tst_QQmlEngineDebugService::findRootObject(
@@ -314,6 +326,12 @@ void tst_QQmlEngineDebugService::initTestCase()
            "}\n"
            ;
 
+    // test non-streamable properties
+    qmlRegisterType<CustomTypes>("Backend", 1, 0, "CustomTypes");
+    qml << "import Backend 1.0\n"
+           "CustomTypes {}"
+           ;
+
     for (int i=0; i<qml.count(); i++) {
         QQmlComponent component(m_engine);
         component.setData(qml[i], QUrl::fromLocalFile(""));
@@ -620,7 +638,7 @@ void tst_QQmlEngineDebugService::queryRootContexts()
     // root context query sends only root object data - it doesn't fill in
     // the children or property info
     QCOMPARE(context.objects.count(), 0);
-    QCOMPARE(context.contexts.count(), 5);
+    QCOMPARE(context.contexts.count(), 6);
     QVERIFY(context.contexts[0].debugId >= 0);
     QCOMPARE(context.contexts[0].name, QString("tst_QQmlDebug_childContext"));
 }
@@ -819,6 +837,26 @@ void tst_QQmlEngineDebugService::regression_QTCREATORBUG_7451()
     }
 }
 
+void tst_QQmlEngineDebugService::queryObjectWithNonStreamableTypes()
+{
+    bool success;
+
+    QmlDebugObjectReference rootObject = findRootObject(4, true);
+
+    QQmlEngineDebugClient *unconnected = new QQmlEngineDebugClient(0);
+    unconnected->queryObject(rootObject, &success);
+    QVERIFY(!success);
+    delete unconnected;
+
+    m_dbg->queryObject(rootObject, &success);
+    QVERIFY(success);
+    QVERIFY(QQmlDebugTest::waitForSignal(m_dbg, SIGNAL(result())));
+
+    QmlDebugObjectReference obj = m_dbg->object();
+
+    QCOMPARE(findProperty(obj.properties, "modelIndex").value, QVariant());
+}
+
 
 void tst_QQmlEngineDebugService::queryExpressionResult()
 {