diff --git a/docs/user/supported_devices.rst b/docs/user/supported_devices.rst
index 88b3f7cbf8422d0fc201718186c2bb27a70bdef5..a885d74f819c5401f6682d8d338287247259ec0f 100644
--- a/docs/user/supported_devices.rst
+++ b/docs/user/supported_devices.rst
@@ -274,6 +274,10 @@ lantiq-xway
   - FRITZ!Box 7330 [#avmflash]_ [#lan_as_wan]_
   - FRITZ!Box 7330 SL [#avmflash]_ [#lan_as_wan]_
 
+* NETGEAR
+
+  - DGN3500B [#lan_as_wan]_
+
 mpc85xx-generic
 ---------------
 
diff --git a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
index 7fce90149c142a1742446eb556c8676a62ff91e7..2a5bc2c7913a2fb56ccf396b78fd47df8171dc6b 100755
--- a/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
+++ b/package/gluon-core/luasrc/lib/gluon/upgrade/010-primary-mac
@@ -8,6 +8,7 @@ if sysconfig.primary_mac then
 end
 
 
+local json = require 'jsonc'
 local platform = require 'gluon.platform'
 local util = require 'gluon.util'
 
@@ -30,6 +31,15 @@ local function phy(index)
 	return sysfs('/sys/class/ieee80211/phy%d/macaddress', index)
 end
 
+local function board(iface)
+	return function()
+		local data = json.load('/etc/board.json')
+		if data and data.network and data.network[iface] then
+			return data.network[iface].macaddr
+		end
+	end
+end
+
 
 -- Entries are matched in the order they are listed
 local primary_addrs = {
@@ -111,6 +121,11 @@ local primary_addrs = {
 			'dir-860l-b1',
 		}},
 	}},
+	{board('lan'), {
+		{'lantiq', 'xway', {
+			'netgear,dgn3500b',
+		}},
+	}},
 	-- phy0 default
 	{phy(0), {
 		{}, -- matches everything
diff --git a/targets/lantiq-xway b/targets/lantiq-xway
index 7810df9f4446f7c8e12cc98f8b162b202b538908..e4b6874aebda37ab34e19fdc33d993bf371ae47e 100644
--- a/targets/lantiq-xway
+++ b/targets/lantiq-xway
@@ -6,3 +6,7 @@ device('avm-fritz-box-7320', 'avm_fritz7320', {
 	factory = false,
 	aliases = {'avm-fritz-box-7330', 'avm-fritz-box-7330-sl'},
 })
+
+device('netgear-dgn3500b', 'netgear_dgn3500b', {
+	factory_ext = '.img',
+})