diff --git a/docs/user/site.rst b/docs/user/site.rst
index 113514519374d4544526af1b39d54be73885bd75..a5b31745374ba5028a6e1e8e79a886a288167e44 100644
--- a/docs/user/site.rst
+++ b/docs/user/site.rst
@@ -130,6 +130,9 @@ fastd_mesh_vpn
 mesh_on_wan : optional
     Enables the mesh on the WAN port (``true`` or ``false``).
 
+mesh_on_lan : optional
+    Enables the mesh on the LAN port (``true`` or ``false``).
+
 autoupdater : package
     Configuration for the autoupdater feature of Gluon.
     ::
diff --git a/package/gluon-luci-portconfig/files/usr/lib/lua/luci/model/cbi/admin/portconfig.lua b/package/gluon-luci-portconfig/files/usr/lib/lua/luci/model/cbi/admin/portconfig.lua
index ccade674f5f0d22826d9fd64b29f18428a7db966..8166539ce6178be042fa99085bea9dfac6082468 100644
--- a/package/gluon-luci-portconfig/files/usr/lib/lua/luci/model/cbi/admin/portconfig.lua
+++ b/package/gluon-luci-portconfig/files/usr/lib/lua/luci/model/cbi/admin/portconfig.lua
@@ -13,6 +13,7 @@ $Id$
 ]]--
 
 local uci = luci.model.uci.cursor()
+local sysconfig = require 'gluon.sysconfig'
 
 local wan = uci:get_all("network", "wan")
 local wan6 = uci:get_all("network", "wan6")
@@ -86,6 +87,13 @@ o = s:option(Flag, "mesh_wan", translate("Enable meshing on the WAN interface"))
 o.default = uci:get_bool("network", "mesh_wan", "auto") and o.enabled or o.disabled
 o.rmempty = false
 
+if sysconfig.lan_ifname then
+  o = s:option(Flag, "mesh_lan", translate("Enable meshing on the LAN interface"))
+  o.default = uci:get_bool("network", "mesh_lan", "auto") and o.enabled or o.disabled
+  o.rmempty = false
+end
+
+
 function f.handle(self, state, data)
   if state == FORM_VALID then
     uci:set("network", "wan", "proto", data.ipv4)
@@ -110,6 +118,16 @@ function f.handle(self, state, data)
 
     uci:set("network", "mesh_wan", "auto", data.mesh_wan)
 
+    if sysconfig.lan_ifname then
+      uci:set("network", "mesh_lan", "auto", data.mesh_lan)
+
+      if data.mesh_lan == '1' then
+        uci:set("network", "client", "ifname", "bat0")
+      else
+        uci:set("network", "client", "ifname", sysconfig.lan_ifname .. " bat0")
+      end
+    end
+
     uci:save("network")
     uci:commit("network")
 
diff --git a/package/gluon-luci-portconfig/i18n/de.po b/package/gluon-luci-portconfig/i18n/de.po
index 6cc06e20764a082665b8ac94e74d6c2ea8568fe7..2197fdbece998be16a0bc8c9c133e539e626f876 100644
--- a/package/gluon-luci-portconfig/i18n/de.po
+++ b/package/gluon-luci-portconfig/i18n/de.po
@@ -19,6 +19,9 @@ msgstr "Automatisch (RA/DHCPv6)"
 msgid "Enable meshing on the WAN interface"
 msgstr "Mesh auf dem WAN-Port aktivieren"
 
+msgid "Enable meshing on the LAN interface"
+msgstr "Mesh auf dem LAN-Port aktivieren"
+
 msgid "Static"
 msgstr "Statisch"
 
diff --git a/package/gluon-luci-portconfig/i18n/gluon-luci-portconfig.pot b/package/gluon-luci-portconfig/i18n/gluon-luci-portconfig.pot
index 1800f8d0f2adf4bf4c878ddba09d9b9f5f418202..31ac71d3b42b9c49e6bd281efa6565499e6cf2c3 100644
--- a/package/gluon-luci-portconfig/i18n/gluon-luci-portconfig.pot
+++ b/package/gluon-luci-portconfig/i18n/gluon-luci-portconfig.pot
@@ -10,6 +10,9 @@ msgstr ""
 msgid "Enable meshing on the WAN interface"
 msgstr ""
 
+msgid "Enable meshing on the LAN interface"
+msgstr ""
+
 msgid "Static"
 msgstr ""
 
diff --git a/package/gluon-mesh-batman-adv-core/check_site.lua b/package/gluon-mesh-batman-adv-core/check_site.lua
index baed26cb15a1cf3d04a784af6600307ea049cfa9..e76ca9e9c87609cbf72cf182762698d5c8f0b19f 100644
--- a/package/gluon-mesh-batman-adv-core/check_site.lua
+++ b/package/gluon-mesh-batman-adv-core/check_site.lua
@@ -13,3 +13,4 @@ for _, config in ipairs({'wifi24', 'wifi5'}) do
 end
 
 need_boolean('mesh_on_wan', false)
+need_boolean('mesh_on_lan', false)
diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh
index c9638c4b4075cc915519b1631b2bc4f433530833..a51b20e235788d905a5fdeec203daddb2a1ae86a 100755
--- a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh
+++ b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/310-gluon-mesh-batman-adv-core-mesh
@@ -2,6 +2,7 @@
 
 local sysconfig = require 'gluon.sysconfig'
 local sysctl = require 'gluon.sysctl'
+local site = require 'gluon.site_config'
 local uci = require('luci.model.uci').cursor()
 
 
@@ -20,7 +21,7 @@ uci:commit('batman-adv')
 if not uci:get('network', 'client') then
   local ifname
 
-  if sysconfig.lan_ifname then
+  if sysconfig.lan_ifname and not site.mesh_on_lan then
     ifname = sysconfig.lan_ifname .. ' bat0'
   else
     ifname = 'bat0'
diff --git a/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan
new file mode 100755
index 0000000000000000000000000000000000000000..f9cbde031faeb495b4c04f7eb02ab91171420891
--- /dev/null
+++ b/package/gluon-mesh-batman-adv-core/files/lib/gluon/upgrade/340-gluon-mesh-batman-adv-core-mesh-on-lan
@@ -0,0 +1,23 @@
+#!/usr/bin/lua
+
+local site = require 'gluon.site_config'
+local uci = require 'luci.model.uci'
+local util = require 'gluon.util'
+local sysconfig = require 'gluon.sysconfig'
+
+local c = uci.cursor()
+
+if sysconfig.lan_ifname then
+  if not c:get('network', 'mesh_lan') then
+    c:section('network', 'interface', 'mesh_lan',
+              { ifname  = sysconfig.lan_ifname
+              , proto   = 'batadv'
+              , mesh    = 'bat0'
+              , macaddr = util.generate_mac(1, 1)
+              , auto    = site.mesh_on_lan and 1 or 0
+              })
+  end
+end
+
+c:save('network')
+c:commit('network')