diff --git a/src/gui/text/qfontdatabase.cpp b/src/gui/text/qfontdatabase.cpp
index 06438103ad6e02f3cf7fdb9a33cd486b622ec253..86a0bf106635b6a236e276e2cb9317fdfcf77275 100644
--- a/src/gui/text/qfontdatabase.cpp
+++ b/src/gui/text/qfontdatabase.cpp
@@ -596,7 +596,7 @@ struct QtFontDesc
 
 static int match(int script, const QFontDef &request,
                  const QString &family_name, const QString &foundry_name, int force_encoding_id,
-                 QtFontDesc *desc, const QList<int> &blacklisted);
+                 QtFontDesc *desc, const QList<int> &blacklisted, bool fallback);
 
 static void initFontDef(const QtFontDesc &desc, const QFontDef &request, QFontDef *fontDef, bool multi)
 {
@@ -1079,7 +1079,7 @@ static bool matchFamilyName(const QString &familyName, QtFontFamily *f)
 */
 static int match(int script, const QFontDef &request,
                  const QString &family_name, const QString &foundry_name, int force_encoding_id,
-                 QtFontDesc *desc, const QList<int> &blacklistedFamilies)
+                 QtFontDesc *desc, const QList<int> &blacklistedFamilies, bool fallback = false)
 {
     Q_UNUSED(force_encoding_id);
     int result = -1;
@@ -1132,7 +1132,7 @@ static int match(int script, const QFontDef &request,
             load(test.family->name, script);
 
         // Check if family is supported in the script we want
-        if (script != QChar::Script_Common && !(test.family->writingSystems[writingSystem] & QtFontFamily::Supported))
+        if (!fallback && script != QChar::Script_Common && !(test.family->writingSystems[writingSystem] & QtFontFamily::Supported))
             continue;
 
         // as we know the script is supported, we can be sure
@@ -2450,7 +2450,7 @@ bool QFontDatabase::supportsThreadedFontRendering()
 */
 QFontEngine *
 QFontDatabase::findFont(int script, const QFontPrivate *fp,
-                        const QFontDef &request, bool multi)
+                        const QFontDef &request, bool multi, bool fallback)
 {
     QMutexLocker locker(fontDatabaseMutex());
 
@@ -2478,7 +2478,7 @@ QFontDatabase::findFont(int script, const QFontPrivate *fp,
 
     QtFontDesc desc;
     QList<int> blackListed;
-    int index = match(script, request, family_name, foundry_name, force_encoding_id, &desc, blackListed);
+    int index = match(script, request, family_name, foundry_name, force_encoding_id, &desc, blackListed, fallback);
     if (index >= 0) {
         engine = loadEngine(script, request, desc.family, desc.foundry, desc.style, desc.size);
         if (!engine)
diff --git a/src/gui/text/qfontdatabase.h b/src/gui/text/qfontdatabase.h
index 9986ef6c60674d8aea94389d732ef451ff4783b7..833e5747071bf99378419a076fc78021ba472884 100644
--- a/src/gui/text/qfontdatabase.h
+++ b/src/gui/text/qfontdatabase.h
@@ -160,7 +160,7 @@ private:
     static void createDatabase();
     static void parseFontName(const QString &name, QString &foundry, QString &family);
     static QString resolveFontFamilyAlias(const QString &family);
-    static QFontEngine *findFont(int script, const QFontPrivate *fp, const QFontDef &request, bool multi = false);
+    static QFontEngine *findFont(int script, const QFontPrivate *fp, const QFontDef &request, bool multi = false, bool fallback = false);
     static void load(const QFontPrivate *d, int script);
 
     friend struct QFontDef;
diff --git a/src/gui/text/qfontengine_qpa.cpp b/src/gui/text/qfontengine_qpa.cpp
index f9ed3c38c1689096fec3b6c8a7bfe3b6eca4a005..a115d2a9012a9a5dd685665543daa5bd6b6fa665 100644
--- a/src/gui/text/qfontengine_qpa.cpp
+++ b/src/gui/text/qfontengine_qpa.cpp
@@ -663,7 +663,7 @@ void QFontEngineMultiQPA::loadEngine(int at)
     request.family = fallbackFamilies.at(at-1);
     engines[at] = QFontDatabase::findFont(script,
                                           /*fontprivate = */0,
-                                          request, /*multi = */false);
+                                          request, /*multi = */false, true);
     Q_ASSERT(engines[at]);
     engines[at]->ref.ref();
     engines[at]->fontDef = request;
diff --git a/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro b/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro
index 6975c4088b935e5d92151197e7e1929f50d1943f..831ed1f572f341d0d4a8594ba6c65ac14c1061ea 100644
--- a/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro
+++ b/tests/auto/gui/text/qfontdatabase/qfontdatabase.pro
@@ -9,3 +9,8 @@ wince* {
     additionalFiles.path = .
     DEPLOYMENT += additionalFiles
 }
+
+android {
+    RESOURCES += testdata.qrc
+}
+
diff --git a/tests/auto/gui/text/qfontdatabase/testdata.qrc b/tests/auto/gui/text/qfontdatabase/testdata.qrc
new file mode 100644
index 0000000000000000000000000000000000000000..8a8670bf1731ecd10f45fbb0d37bff620b55c011
--- /dev/null
+++ b/tests/auto/gui/text/qfontdatabase/testdata.qrc
@@ -0,0 +1,5 @@
+<RCC>
+    <qresource prefix="/">
+        <file>LED_REAL.TTF</file>
+    </qresource>
+</RCC>
diff --git a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
index 28db0ba291152650c60f7e440fef6b0e0c4e66a4..2ae12ec246589c337a02467ca36cc577cfa3b0bd 100644
--- a/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
+++ b/tests/auto/gui/text/qfontdatabase/tst_qfontdatabase.cpp
@@ -44,6 +44,8 @@
 #include <qfontdatabase.h>
 #include <qfontinfo.h>
 #include <qfontmetrics.h>
+#include <qtextlayout.h>
+#include <private/qrawfont_p.h>
 #include <qpa/qplatformfontdatabase.h>
 
 class tst_QFontDatabase : public QObject
@@ -77,6 +79,7 @@ private slots:
     void addAppFont();
 
     void aliases();
+    void fallbackFonts();
 
 private:
     const QString m_testFont;
@@ -285,5 +288,26 @@ void tst_QFontDatabase::aliases()
     QVERIFY(db.hasFamily(alias));
 }
 
+void tst_QFontDatabase::fallbackFonts()
+{
+    QTextLayout layout;
+    QString s;
+    s.append(QChar(0x31));
+    s.append(QChar(0x05D0));
+    layout.setText(s);
+    layout.beginLayout();
+    layout.createLine();
+    layout.endLayout();
+
+    QList<QGlyphRun> runs = layout.glyphRuns(0, 1);
+    foreach (QGlyphRun run, runs) {
+        QRawFont rawFont = run.rawFont();
+        QVERIFY(rawFont.isValid());
+
+        QCOMPARE(run.glyphIndexes().size(), 1);
+        QVERIFY(run.glyphIndexes().at(0) != 0);
+    }
+}
+
 QTEST_MAIN(tst_QFontDatabase)
 #include "tst_qfontdatabase.moc"