diff --git a/docs/features/wlan-configuration.rst b/docs/features/wlan-configuration.rst
index ff280eba04fb5daf343634208348fe850714ed95..1c1e3e54b17e275e1f91f57d57d58db50dddc857 100644
--- a/docs/features/wlan-configuration.rst
+++ b/docs/features/wlan-configuration.rst
@@ -24,3 +24,11 @@ existing configuration will also be set for the new configuration.
 This allows upgrades to change from IBSS to 11s and vice-versa while retaining the
 "wireless meshing is enabled/disabled" property configured by the user regardless
 of the used mode.
+
+During upgrades the wifi channel of the 2.4GHz and 5GHz radio will be restored to the channel
+configured in the site.conf. If you need to preserve a user defined wifi channel during upgrades
+you can configure this via the uci section ``gluon-core.wireless``::
+
+  uci set gluon-core.@wireless[0].preserve_channels='1'
+
+Keep in mind that nodes running wifi interfaces on custom channels can't mesh with default nodes anymore!
diff --git a/package/gluon-core/files/etc/config/gluon-core b/package/gluon-core/files/etc/config/gluon-core
new file mode 100644
index 0000000000000000000000000000000000000000..9787ccc9fbec92f896cb4d6b0604b792a198f6c2
--- /dev/null
+++ b/package/gluon-core/files/etc/config/gluon-core
@@ -0,0 +1 @@
+config wireless
diff --git a/package/gluon-core/files/lib/gluon/upgrade/200-wireless b/package/gluon-core/files/lib/gluon/upgrade/200-wireless
index b9495d896ce6be7425edb2a5970092ef4222e61a..2ada9b3cc51c914e450032618a021fdde2c63f4a 100755
--- a/package/gluon-core/files/lib/gluon/upgrade/200-wireless
+++ b/package/gluon-core/files/lib/gluon/upgrade/200-wireless
@@ -10,11 +10,21 @@ if not sysconfig.gluon_version then
   uci:delete_all('wireless', 'wifi-iface')
 end
 
+local function get_channel(radio, config)
+  if uci:get_first('gluon-core', 'wireless', 'preserve_channels') then
+    return uci:get('wireless', radio, 'channel') or config.channel
+  else
+    return config.channel
+  end
+end
+
 local function configure_radio(radio, index, config)
   if config then
+    local channel = get_channel(radio, config)
+
     uci:delete('wireless', radio, 'disabled')
 
-    uci:set('wireless', radio, 'channel', config.channel)
+    uci:set('wireless', radio, 'channel', channel)
     uci:set('wireless', radio, 'htmode', 'HT20')
     uci:set('wireless', radio, 'country', site.regdom)
   end