diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
index 0099d1d88547fa3687822be72fccaa227e661583..27294c4d2d29caf45ae66a445824850251163418 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/250-cellular
@@ -53,6 +53,7 @@ elseif platform.match('ath79', 'nand', {
 	setup_ncm_qmi('/dev/ttyACM0', 'ncm', 15)
 elseif platform.match('ipq40xx', 'generic', {
 	'glinet,gl-ap1300',
+	'zte,mf289f',
 }) then
 	setup_ncm_qmi('/dev/cdc-wdm0', 'qmi', 15)
 elseif platform.match('ramips', 'mt7621', {
diff --git a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
index ba4b5b489250b860b1235493a26ea6cc8c807932..bc9a8bef749a68cf285ef3766a46f2651b01ad3e 100644
--- a/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
+++ b/package/gluon-core/luasrc/usr/lib/lua/gluon/platform.lua
@@ -80,6 +80,7 @@ function M.is_cellular_device()
 		return true
 	elseif M.match('ipq40xx', 'generic', {
 		'glinet,gl-ap1300',
+		'zte,mf289f',
 	}) then
 		return true
 	elseif M.match('ramips', 'mt7621', {
diff --git a/targets/ipq40xx-generic b/targets/ipq40xx-generic
index b6a49ca7fcc165de062b584a4c90db18f819ac16..068f538be97299f7df8c3f7f03ea8beaaa4b264c 100644
--- a/targets/ipq40xx-generic
+++ b/targets/ipq40xx-generic
@@ -120,6 +120,14 @@ device('plasma-cloud-pa2200', 'plasmacloud_pa2200', {
 })
 
 
+-- ZTE
+
+device('zte-mf289f', 'zte_mf289f', {
+	broken = true,	-- case must be opened to install
+	factory = false,
+})
+
+
 -- ZyXEL
 
 device('zyxel-nbg6617', 'zyxel_nbg6617')