diff --git a/package/base-files/files/lib/functions/uci-defaults-new.sh b/package/base-files/files/lib/functions/uci-defaults-new.sh
deleted file mode 100755
index de3f180cbb75b9d7f44ed716c518107421f367a1..0000000000000000000000000000000000000000
--- a/package/base-files/files/lib/functions/uci-defaults-new.sh
+++ /dev/null
@@ -1,576 +0,0 @@
-#!/bin/ash
-
-CFG=/etc/board.json
-
-. /lib/functions.sh
-. /usr/share/libubox/jshn.sh
-
-json_select_array() {
-	local _json_no_warning=1
-
-	json_select "$1"
-	[ $? = 0 ] && return
-
-	json_add_array "$1"
-	json_close_array
-
-	json_select "$1"
-}
-
-json_select_object() {
-	local _json_no_warning=1
-
-	json_select "$1"
-	[ $? = 0 ] && return
-
-	json_add_object "$1"
-	json_close_object
-
-	json_select "$1"
-}
-
-_ucidef_set_interface() {
-	local name="$1"
-	local iface="$2"
-	local proto="$3"
-
-	json_select_object "$name"
-	json_add_string ifname "$iface"
-
-	if ! json_is_a protocol string; then
-		case "$proto" in
-			static|dhcp|none|pppoe) : ;;
-			*)
-				case "$name" in
-					lan) proto="static" ;;
-					wan) proto="dhcp" ;;
-					*) proto="none" ;;
-				esac
-			;;
-		esac
-
-		json_add_string protocol "$proto"
-	fi
-
-	json_select ..
-}
-
-ucidef_set_board_id() {
-	json_select_object model
-	json_add_string id "$1"
-	json_select ..
-}
-
-ucidef_set_model_name() {
-	json_select_object model
-	json_add_string name "$1"
-	json_select ..
-}
-
-ucidef_set_interface_lan() {
-	json_select_object network
-	_ucidef_set_interface lan "$@"
-	json_select ..
-}
-
-ucidef_set_interface_wan() {
-	json_select_object network
-	_ucidef_set_interface wan "$@"
-	json_select ..
-}
-
-ucidef_set_interfaces_lan_wan() {
-	local lan_if="$1"
-	local wan_if="$2"
-
-	json_select_object network
-	_ucidef_set_interface lan "$lan_if"
-	_ucidef_set_interface wan "$wan_if"
-	json_select ..
-}
-
-_ucidef_add_switch_port() {
-	# inherited: $num $device $need_tag $role $index $prev_role
-	# inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
-
-	n_ports=$((n_ports + 1))
-
-	json_select_array ports
-		json_add_object
-			json_add_int num "$num"
-			[ -n "$device"   ] && json_add_string  device   "$device"
-			[ -n "$need_tag" ] && json_add_boolean need_tag "$need_tag"
-			[ -n "$role"     ] && json_add_string  role     "$role"
-			[ -n "$index"    ] && json_add_int     index    "$index"
-		json_close_object
-	json_select ..
-
-	# record pointer to cpu entry for lookup in _ucidef_finish_switch_roles()
-	[ -n "$device" ] && {
-		export "cpu$n_cpu=$n_ports"
-		n_cpu=$((n_cpu + 1))
-	}
-
-	# create/append object to role list
-	[ -n "$role" ] && {
-		json_select_array roles
-
-		if [ "$role" != "$prev_role" ]; then
-			json_add_object
-				json_add_string role "$role"
-				json_add_string ports "$num"
-			json_close_object
-
-			prev_role="$role"
-			n_vlan=$((n_vlan + 1))
-		else
-			json_select_object "$n_vlan"
-				json_get_var port ports
-				json_add_string ports "$port $num"
-			json_select ..
-		fi
-
-		json_select ..
-	}
-}
-
-_ucidef_finish_switch_roles() {
-	# inherited: $name $n_cpu $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
-	local index role roles num device need_tag port ports
-
-	json_select switch
-		json_select "$name"
-			json_get_keys roles roles
-		json_select ..
-	json_select ..
-
-	for index in $roles; do
-		eval "port=\$cpu$(((index - 1) % n_cpu))"
-
-		json_select switch
-			json_select "$name"
-				json_select ports
-					json_select "$port"
-						json_get_vars num device need_tag
-					json_select ..
-				json_select ..
-
-				if [ $n_vlan -gt $n_cpu -o ${need_tag:-0} -eq 1 ]; then
-					num="${num}t"
-					device="${device}.${index}"
-				fi
-
-				json_select roles
-					json_select "$index"
-						json_get_vars role ports
-						json_add_string ports "$ports $num"
-						json_add_string device "$device"
-					json_select ..
-				json_select ..
-			json_select ..
-		json_select ..
-
-		json_select_object network
-			local devices
-
-			json_select_object "$role"
-				# attach previous interfaces (for multi-switch devices)
-				json_get_var devices ifname
-				if ! list_contains devices "$device"; then
-					devices="${devices:+$devices }$device"
-				fi
-			json_select ..
-
-			_ucidef_set_interface "$role" "$devices"
-		json_select ..
-	done
-}
-
-ucidef_add_switch() {
-	local name="$1"; shift
-	local port num role device index need_tag prev_role
-	local cpu0 cpu1 cpu2 cpu3 cpu4 cpu5
-	local n_cpu=0 n_vlan=0 n_ports=0
-
-	json_select_object switch
-		json_select_object "$name"
-			json_add_boolean enable 1
-			json_add_boolean reset 1
-
-			for port in "$@"; do
-				case "$port" in
-					[0-9]*@*)
-						num="${port%%@*}"
-						device="${port##*@}"
-						need_tag=0
-						[ "${num%t}" != "$num" ] && {
-							num="${num%t}"
-							need_tag=1
-						}
-					;;
-					[0-9]*:*:[0-9]*)
-						num="${port%%:*}"
-						index="${port##*:}"
-						role="${port#[0-9]*:}"; role="${role%:*}"
-					;;
-					[0-9]*:*)
-						num="${port%%:*}"
-						role="${port##*:}"
-					;;
-				esac
-
-				if [ -n "$num" ] && [ -n "$device$role" ]; then
-					_ucidef_add_switch_port
-				fi
-
-				unset num device role index need_tag
-			done
-		json_select ..
-	json_select ..
-
-	_ucidef_finish_switch_roles
-}
-
-ucidef_add_switch_attr() {
-	local name="$1"
-	local key="$2"
-	local val="$3"
-
-	json_select_object switch
-		json_select_object "$name"
-
-		case "$val" in
-			true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
-			[0-9]) json_add_int "$key" "$val" ;;
-			*) json_add_string "$key" "$val" ;;
-		esac
-
-		json_select ..
-	json_select ..
-}
-
-ucidef_add_switch_port_attr() {
-	local name="$1"
-	local port="$2"
-	local key="$3"
-	local val="$4"
-	local ports i num
-
-	json_select_object switch
-	json_select_object "$name"
-
-	json_get_keys ports ports
-	json_select_array ports
-
-	for i in $ports; do
-		json_select "$i"
-		json_get_var num num
-
-		if [ -n "$num" ] && [ $num -eq $port ]; then
-			json_select_object attr
-
-			case "$val" in
-				true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
-				[0-9]) json_add_int "$key" "$val" ;;
-				*) json_add_string "$key" "$val" ;;
-			esac
-
-			json_select ..
-		fi
-
-		json_select ..
-	done
-
-	json_select ..
-	json_select ..
-	json_select ..
-}
-
-ucidef_set_interface_macaddr() {
-	local network="$1"
-	local macaddr="$2"
-
-	json_select_object network
-
-	json_select "$network"
-	[ $? -eq 0 ] || {
-		json_select ..
-		return
-	}
-
-	json_add_string macaddr "$macaddr"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_add_atm_bridge() {
-	local vpi="$1"
-	local vci="$2"
-	local encaps="$3"
-	local payload="$4"
-
-	json_select_object dsl
-		json_select_object atmbridge
-			json_add_int vpi "$vpi"
-			json_add_int vci "$vci"
-			json_add_string encaps "$encaps"
-			json_add_string payload "$payload"
-		json_select ..
-	json_select ..
-}
-
-ucidef_add_adsl_modem() {
-	local annex="$1"
-	local firmware="$2"
-
-	json_select_object dsl
-		json_select_object modem
-			json_add_string type "adsl"
-			json_add_string annex "$annex"
-			json_add_string firmware "$firmware"
-		json_select ..
-	json_select ..
-}
-
-ucidef_add_vdsl_modem() {
-	local annex="$1"
-	local firmware="$2"
-	local tone="$3"
-	local xfer_mode="$4"
-
-	json_select_object dsl
-		json_select_object modem
-			json_add_string type "vdsl"
-			json_add_string annex "$annex"
-			json_add_string firmware "$firmware"
-			json_add_string tone "$tone"
-			json_add_string xfer_mode "$xfer_mode"
-		json_select ..
-	json_select ..
-}
-
-ucidef_set_led_netdev() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-	local dev="$4"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string name "$name"
-	json_add_string type netdev
-	json_add_string sysfs "$sysfs"
-	json_add_string device "$dev"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_led_usbdev() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-	local dev="$4"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string name "$name"
-	json_add_string type usb
-	json_add_string sysfs "$sysfs"
-	json_add_string device "$dev"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_led_wlan() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-	local trigger="$4"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string name "$name"
-	json_add_string type trigger
-	json_add_string sysfs "$sysfs"
-	json_add_string trigger "$trigger"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_led_switch() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-	local trigger="$4"
-	local port_mask="$5"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string name "$name"
-	json_add_string type switch
-	json_add_string sysfs "$sysfs"
-	json_add_string trigger "$trigger"
-	json_add_string port_mask "$port_mask"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_led_default() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-	local default="$4"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string name "$name"
-	json_add_string sysfs "$sysfs"
-	json_add_string default "$default"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_led_gpio() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-	local gpio="$4"
-	local inverted="$5"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string type gpio
-	json_add_string name "$name"
-	json_add_string sysfs "$sysfs"
-	json_add_string trigger "$trigger"
-	json_add_int gpio "$gpio"
-	json_add_boolean inverted "$inverted"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_led_ide() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string name "$name"
-	json_add_string sysfs "$sysfs"
-	json_add_string trigger ide-disk
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_led_timer() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-	local delayon="$4"
-	local delayoff="$5"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string type timer
-	json_add_string name "$name"
-	json_add_string sysfs "$sysfs"
-	json_add_int delayon "$delayon"
-	json_add_int delayoff "$delayoff"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_led_rssi() {
-	local cfg="led_$1"
-	local name="$2"
-	local sysfs="$3"
-	local iface="$4"
-	local minq="$5"
-	local maxq="$6"
-	local offset="$7"
-	local factor="$8"
-
-	json_select_object led
-
-	json_select_object "$1"
-	json_add_string type rssi
-	json_add_string name "$name"
-	json_add_string iface "$iface"
-	json_add_string sysfs "$sysfs"
-	json_add_string minq "$minq"
-	json_add_string maxq "$maxq"
-	json_add_string offset "$offset"
-	json_add_string factor "$factor"
-	json_select ..
-
-	json_select ..
-}
-
-ucidef_set_rssimon() {
-	local dev="$1"
-	local refresh="$2"
-	local threshold="$3"
-
-	json_select_object rssimon
-
-	json_select_object "$dev"
-	[ -n "$refresh" ] && json_add_int refresh "$refresh"
-	[ -n "$threshold" ] && json_add_int threshold "$threshold"
-	json_select ..
-
-	json_select ..
-
-}
-
-ucidef_add_gpio_switch() {
-	local cfg="$1"
-	local name="$2"
-	local pin="$3"
-	local default="${4:-0}"
-
-	json_select_object gpioswitch
-		json_select_object "$cfg"
-			json_add_string name "$name"
-			json_add_int pin "$pin"
-			json_add_int default "$default"
-		json_select ..
-	json_select ..
-}
-
-board_config_update() {
-	json_init
-	[ -f ${CFG} ] && json_load "$(cat ${CFG})"
-
-	# auto-initialize model id and name if applicable
-	if ! json_is_a model object; then
-		json_select_object model
-			[ -f "/tmp/sysinfo/board_name" ] && \
-				json_add_string id "$(cat /tmp/sysinfo/board_name)"
-			[ -f "/tmp/sysinfo/model" ] && \
-				json_add_string name "$(cat /tmp/sysinfo/model)"
-		json_select ..
-	fi
-}
-
-board_config_flush() {
-	json_dump -i > /tmp/.board.json
-	mv /tmp/.board.json ${CFG}
-}
diff --git a/package/base-files/files/lib/functions/uci-defaults.sh b/package/base-files/files/lib/functions/uci-defaults.sh
old mode 100644
new mode 100755
index 2658d439ac04c7ecd45bc28112fb88b1c6dd38b5..de3f180cbb75b9d7f44ed716c518107421f367a1
--- a/package/base-files/files/lib/functions/uci-defaults.sh
+++ b/package/base-files/files/lib/functions/uci-defaults.sh
@@ -1,345 +1,576 @@
-#!/bin/sh
-# Copyright (C) 2011 OpenWrt.org
+#!/bin/ash
 
-UCIDEF_LEDS_CHANGED=0
-UCIDEF_GPIO_SWITCHES_CHANGED=0
+CFG=/etc/board.json
 
-ucidef_set_led_netdev() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local dev=$4
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='netdev'
-set system.$cfg.dev='$dev'
-set system.$cfg.mode='link tx rx'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+. /lib/functions.sh
+. /usr/share/libubox/jshn.sh
+
+json_select_array() {
+	local _json_no_warning=1
+
+	json_select "$1"
+	[ $? = 0 ] && return
+
+	json_add_array "$1"
+	json_close_array
+
+	json_select "$1"
 }
 
-ucidef_set_led_usbdev() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local dev=$4
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='usbdev'
-set system.$cfg.dev='$dev'
-set system.$cfg.interval='50'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+json_select_object() {
+	local _json_no_warning=1
+
+	json_select "$1"
+	[ $? = 0 ] && return
+
+	json_add_object "$1"
+	json_close_object
+
+	json_select "$1"
 }
 
-ucidef_set_led_wlan() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local trigger=$4
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='$trigger'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+_ucidef_set_interface() {
+	local name="$1"
+	local iface="$2"
+	local proto="$3"
+
+	json_select_object "$name"
+	json_add_string ifname "$iface"
+
+	if ! json_is_a protocol string; then
+		case "$proto" in
+			static|dhcp|none|pppoe) : ;;
+			*)
+				case "$name" in
+					lan) proto="static" ;;
+					wan) proto="dhcp" ;;
+					*) proto="none" ;;
+				esac
+			;;
+		esac
+
+		json_add_string protocol "$proto"
+	fi
+
+	json_select ..
 }
 
-ucidef_set_led_switch() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local trigger=$4
-	local port_mask=$5
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='$trigger'
-set system.$cfg.port_mask='$port_mask'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+ucidef_set_board_id() {
+	json_select_object model
+	json_add_string id "$1"
+	json_select ..
 }
 
-ucidef_set_led_default() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local default=$4
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.default='$default'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+ucidef_set_model_name() {
+	json_select_object model
+	json_add_string name "$1"
+	json_select ..
 }
 
-ucidef_set_led_rssi() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local iface=$4
-	local minq=$5
-	local maxq=$6
-	local offset=$7
-	local factor=$8
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='rssi'
-set system.$cfg.iface='rssid_$iface'
-set system.$cfg.minq='$minq'
-set system.$cfg.maxq='$maxq'
-set system.$cfg.offset='$offset'
-set system.$cfg.factor='$factor'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+ucidef_set_interface_lan() {
+	json_select_object network
+	_ucidef_set_interface lan "$@"
+	json_select ..
 }
 
-ucidef_set_led_timer() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local delayon=$4
-	local delayoff=$5
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='timer'
-set system.$cfg.delayon='$delayon'
-set system.$cfg.delayoff='$delayoff'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+ucidef_set_interface_wan() {
+	json_select_object network
+	_ucidef_set_interface wan "$@"
+	json_select ..
 }
 
-ucidef_set_led_mmc() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local trigger=$4
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='$trigger'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+ucidef_set_interfaces_lan_wan() {
+	local lan_if="$1"
+	local wan_if="$2"
+
+	json_select_object network
+	_ucidef_set_interface lan "$lan_if"
+	_ucidef_set_interface wan "$wan_if"
+	json_select ..
 }
 
-ucidef_set_led_trigger_gpio() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-	local gpio=$4
-	local inverted=$5
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='gpio'
-set system.$cfg.gpio='$gpio'
-set system.$cfg.inverted='$inverted'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+_ucidef_add_switch_port() {
+	# inherited: $num $device $need_tag $role $index $prev_role
+	# inherited: $n_cpu $n_ports $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
+
+	n_ports=$((n_ports + 1))
+
+	json_select_array ports
+		json_add_object
+			json_add_int num "$num"
+			[ -n "$device"   ] && json_add_string  device   "$device"
+			[ -n "$need_tag" ] && json_add_boolean need_tag "$need_tag"
+			[ -n "$role"     ] && json_add_string  role     "$role"
+			[ -n "$index"    ] && json_add_int     index    "$index"
+		json_close_object
+	json_select ..
+
+	# record pointer to cpu entry for lookup in _ucidef_finish_switch_roles()
+	[ -n "$device" ] && {
+		export "cpu$n_cpu=$n_ports"
+		n_cpu=$((n_cpu + 1))
+	}
+
+	# create/append object to role list
+	[ -n "$role" ] && {
+		json_select_array roles
+
+		if [ "$role" != "$prev_role" ]; then
+			json_add_object
+				json_add_string role "$role"
+				json_add_string ports "$num"
+			json_close_object
+
+			prev_role="$role"
+			n_vlan=$((n_vlan + 1))
+		else
+			json_select_object "$n_vlan"
+				json_get_var port ports
+				json_add_string ports "$port $num"
+			json_select ..
+		fi
+
+		json_select ..
+	}
 }
 
-ucidef_set_led_ide_disk() {
-	local cfg="led_$1"
-	local name=$2
-	local sysfs=$3
-
-	uci -q get system.$cfg && return 0
-
-	uci batch <<EOF
-set system.$cfg='led'
-set system.$cfg.name='$name'
-set system.$cfg.sysfs='$sysfs'
-set system.$cfg.trigger='ide-disk'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+_ucidef_finish_switch_roles() {
+	# inherited: $name $n_cpu $n_vlan $cpu0 $cpu1 $cpu2 $cpu3 $cpu4 $cpu5
+	local index role roles num device need_tag port ports
+
+	json_select switch
+		json_select "$name"
+			json_get_keys roles roles
+		json_select ..
+	json_select ..
+
+	for index in $roles; do
+		eval "port=\$cpu$(((index - 1) % n_cpu))"
+
+		json_select switch
+			json_select "$name"
+				json_select ports
+					json_select "$port"
+						json_get_vars num device need_tag
+					json_select ..
+				json_select ..
+
+				if [ $n_vlan -gt $n_cpu -o ${need_tag:-0} -eq 1 ]; then
+					num="${num}t"
+					device="${device}.${index}"
+				fi
+
+				json_select roles
+					json_select "$index"
+						json_get_vars role ports
+						json_add_string ports "$ports $num"
+						json_add_string device "$device"
+					json_select ..
+				json_select ..
+			json_select ..
+		json_select ..
+
+		json_select_object network
+			local devices
+
+			json_select_object "$role"
+				# attach previous interfaces (for multi-switch devices)
+				json_get_var devices ifname
+				if ! list_contains devices "$device"; then
+					devices="${devices:+$devices }$device"
+				fi
+			json_select ..
+
+			_ucidef_set_interface "$role" "$devices"
+		json_select ..
+	done
 }
 
-ucidef_set_rssimon() {
-	local dev="$1"
-	local refresh="$2"
-	local threshold="$3"
+ucidef_add_switch() {
+	local name="$1"; shift
+	local port num role device index need_tag prev_role
+	local cpu0 cpu1 cpu2 cpu3 cpu4 cpu5
+	local n_cpu=0 n_vlan=0 n_ports=0
+
+	json_select_object switch
+		json_select_object "$name"
+			json_add_boolean enable 1
+			json_add_boolean reset 1
+
+			for port in "$@"; do
+				case "$port" in
+					[0-9]*@*)
+						num="${port%%@*}"
+						device="${port##*@}"
+						need_tag=0
+						[ "${num%t}" != "$num" ] && {
+							num="${num%t}"
+							need_tag=1
+						}
+					;;
+					[0-9]*:*:[0-9]*)
+						num="${port%%:*}"
+						index="${port##*:}"
+						role="${port#[0-9]*:}"; role="${role%:*}"
+					;;
+					[0-9]*:*)
+						num="${port%%:*}"
+						role="${port##*:}"
+					;;
+				esac
+
+				if [ -n "$num" ] && [ -n "$device$role" ]; then
+					_ucidef_add_switch_port
+				fi
+
+				unset num device role index need_tag
+			done
+		json_select ..
+	json_select ..
+
+	_ucidef_finish_switch_roles
+}
+
+ucidef_add_switch_attr() {
+	local name="$1"
+	local key="$2"
+	local val="$3"
 
-	local cfg="rssid_$dev"
+	json_select_object switch
+		json_select_object "$name"
 
-	uci -q get system.$cfg && return 0
+		case "$val" in
+			true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
+			[0-9]) json_add_int "$key" "$val" ;;
+			*) json_add_string "$key" "$val" ;;
+		esac
 
-	uci batch <<EOF
-set system.$cfg='rssid'
-set system.$cfg.dev='$dev'
-set system.$cfg.refresh='$refresh'
-set system.$cfg.threshold='$threshold'
-EOF
-	UCIDEF_LEDS_CHANGED=1
+		json_select ..
+	json_select ..
 }
 
-ucidef_commit_leds()
-{
-	[ "$UCIDEF_LEDS_CHANGED" = "1" ] && uci commit system
+ucidef_add_switch_port_attr() {
+	local name="$1"
+	local port="$2"
+	local key="$3"
+	local val="$4"
+	local ports i num
+
+	json_select_object switch
+	json_select_object "$name"
+
+	json_get_keys ports ports
+	json_select_array ports
+
+	for i in $ports; do
+		json_select "$i"
+		json_get_var num num
+
+		if [ -n "$num" ] && [ $num -eq $port ]; then
+			json_select_object attr
+
+			case "$val" in
+				true|false) [ "$val" != "true" ]; json_add_boolean "$key" $? ;;
+				[0-9]) json_add_int "$key" "$val" ;;
+				*) json_add_string "$key" "$val" ;;
+			esac
+
+			json_select ..
+		fi
+
+		json_select ..
+	done
+
+	json_select ..
+	json_select ..
+	json_select ..
 }
 
-ucidef_set_gpio_switch() {
-	local cfg="gpio_switch_$1"
+ucidef_set_interface_macaddr() {
+	local network="$1"
+	local macaddr="$2"
+
+	json_select_object network
+
+	json_select "$network"
+	[ $? -eq 0 ] || {
+		json_select ..
+		return
+	}
+
+	json_add_string macaddr "$macaddr"
+	json_select ..
+
+	json_select ..
+}
+
+ucidef_add_atm_bridge() {
+	local vpi="$1"
+	local vci="$2"
+	local encaps="$3"
+	local payload="$4"
+
+	json_select_object dsl
+		json_select_object atmbridge
+			json_add_int vpi "$vpi"
+			json_add_int vci "$vci"
+			json_add_string encaps "$encaps"
+			json_add_string payload "$payload"
+		json_select ..
+	json_select ..
+}
+
+ucidef_add_adsl_modem() {
+	local annex="$1"
+	local firmware="$2"
+
+	json_select_object dsl
+		json_select_object modem
+			json_add_string type "adsl"
+			json_add_string annex "$annex"
+			json_add_string firmware "$firmware"
+		json_select ..
+	json_select ..
+}
+
+ucidef_add_vdsl_modem() {
+	local annex="$1"
+	local firmware="$2"
+	local tone="$3"
+	local xfer_mode="$4"
+
+	json_select_object dsl
+		json_select_object modem
+			json_add_string type "vdsl"
+			json_add_string annex "$annex"
+			json_add_string firmware "$firmware"
+			json_add_string tone "$tone"
+			json_add_string xfer_mode "$xfer_mode"
+		json_select ..
+	json_select ..
+}
+
+ucidef_set_led_netdev() {
+	local cfg="led_$1"
 	local name="$2"
-	local gpio_pin="$3"
-	# use "0" as default value
-	local default="${4:-0}"
+	local sysfs="$3"
+	local dev="$4"
+
+	json_select_object led
 
-	uci -q get "system.$cfg" && return 0
+	json_select_object "$1"
+	json_add_string name "$name"
+	json_add_string type netdev
+	json_add_string sysfs "$sysfs"
+	json_add_string device "$dev"
+	json_select ..
 
-	uci batch <<EOF
-set system.$cfg='gpio_switch'
-set system.$cfg.name='$name'
-set system.$cfg.gpio_pin='$gpio_pin'
-set system.$cfg.value='$default'
-EOF
-	UCIDEF_GPIO_SWITCHES_CHANGED=1
+	json_select ..
 }
 
-ucidef_commit_gpio_switches()
-{
-	[ "$UCIDEF_GPIO_SWITCHES_CHANGED" = "1" ] && uci commit system
+ucidef_set_led_usbdev() {
+	local cfg="led_$1"
+	local name="$2"
+	local sysfs="$3"
+	local dev="$4"
+
+	json_select_object led
+
+	json_select_object "$1"
+	json_add_string name "$name"
+	json_add_string type usb
+	json_add_string sysfs "$sysfs"
+	json_add_string device "$dev"
+	json_select ..
+
+	json_select ..
 }
 
-ucidef_set_interface_loopback() {
-	uci batch <<EOF
-set network.loopback='interface'
-set network.loopback.ifname='lo'
-set network.loopback.proto='static'
-set network.loopback.ipaddr='127.0.0.1'
-set network.loopback.netmask='255.0.0.0'
-set network.globals='globals'
-set network.globals.ula_prefix='auto'
-EOF
+ucidef_set_led_wlan() {
+	local cfg="led_$1"
+	local name="$2"
+	local sysfs="$3"
+	local trigger="$4"
+
+	json_select_object led
+
+	json_select_object "$1"
+	json_add_string name "$name"
+	json_add_string type trigger
+	json_add_string sysfs "$sysfs"
+	json_add_string trigger "$trigger"
+	json_select ..
+
+	json_select ..
 }
 
-ucidef_set_interface_raw() {
-	local cfg=$1
-	local ifname=$2
-	local proto=${3:-"none"}
+ucidef_set_led_switch() {
+	local cfg="led_$1"
+	local name="$2"
+	local sysfs="$3"
+	local trigger="$4"
+	local port_mask="$5"
+
+	json_select_object led
+
+	json_select_object "$1"
+	json_add_string name "$name"
+	json_add_string type switch
+	json_add_string sysfs "$sysfs"
+	json_add_string trigger "$trigger"
+	json_add_string port_mask "$port_mask"
+	json_select ..
 
-	uci batch <<EOF
-set network.$cfg='interface'
-set network.$cfg.ifname='$ifname'
-set network.$cfg.proto='$proto'
-EOF
+	json_select ..
 }
 
-ucidef_set_interface_lan() {
-	local ifname=$1
-
-	uci batch <<EOF
-set network.lan='interface'
-set network.lan.ifname='$ifname'
-set network.lan.force_link=1
-set network.lan.type='bridge'
-set network.lan.proto='static'
-set network.lan.ipaddr='192.168.1.1'
-set network.lan.netmask='255.255.255.0'
-set network.lan.ip6assign='60'
-EOF
+ucidef_set_led_default() {
+	local cfg="led_$1"
+	local name="$2"
+	local sysfs="$3"
+	local default="$4"
+
+	json_select_object led
+
+	json_select_object "$1"
+	json_add_string name "$name"
+	json_add_string sysfs "$sysfs"
+	json_add_string default "$default"
+	json_select ..
+
+	json_select ..
 }
 
-ucidef_set_interface_wan() {
-	local ifname=$1
-
-	uci batch <<EOF
-set network.wan='interface'
-set network.wan.ifname='$ifname'
-set network.wan.proto='dhcp'
-set network.wan6='interface'
-set network.wan6.ifname='$ifname'
-set network.wan6.proto='dhcpv6'
-EOF
+ucidef_set_led_gpio() {
+	local cfg="led_$1"
+	local name="$2"
+	local sysfs="$3"
+	local gpio="$4"
+	local inverted="$5"
+
+	json_select_object led
+
+	json_select_object "$1"
+	json_add_string type gpio
+	json_add_string name "$name"
+	json_add_string sysfs "$sysfs"
+	json_add_string trigger "$trigger"
+	json_add_int gpio "$gpio"
+	json_add_boolean inverted "$inverted"
+	json_select ..
+
+	json_select ..
 }
 
-ucidef_set_interfaces_lan_wan() {
-	local lan_ifname=$1
-	local wan_ifname=$2
+ucidef_set_led_ide() {
+	local cfg="led_$1"
+	local name="$2"
+	local sysfs="$3"
+
+	json_select_object led
 
-	ucidef_set_interface_lan "$lan_ifname"
-	ucidef_set_interface_wan "$wan_ifname"
+	json_select_object "$1"
+	json_add_string name "$name"
+	json_add_string sysfs "$sysfs"
+	json_add_string trigger ide-disk
+	json_select ..
+
+	json_select ..
 }
 
-ucidef_set_interface_macaddr() {
-	local ifname=$1
-	local mac=$2
+ucidef_set_led_timer() {
+	local cfg="led_$1"
+	local name="$2"
+	local sysfs="$3"
+	local delayon="$4"
+	local delayoff="$5"
+
+	json_select_object led
 
-	uci batch <<EOF
-set network.$ifname.macaddr='$mac'
-EOF
+	json_select_object "$1"
+	json_add_string type timer
+	json_add_string name "$name"
+	json_add_string sysfs "$sysfs"
+	json_add_int delayon "$delayon"
+	json_add_int delayoff "$delayoff"
+	json_select ..
+
+	json_select ..
 }
 
-ucidef_add_switch() {
-	local name=$1
-	local reset=$2
-	local enable=$3
-	uci batch <<EOF
-add network switch
-set network.@switch[-1].name='$name'
-set network.@switch[-1].reset='$reset'
-set network.@switch[-1].enable_vlan='$enable'
-EOF
+ucidef_set_led_rssi() {
+	local cfg="led_$1"
+	local name="$2"
+	local sysfs="$3"
+	local iface="$4"
+	local minq="$5"
+	local maxq="$6"
+	local offset="$7"
+	local factor="$8"
+
+	json_select_object led
+
+	json_select_object "$1"
+	json_add_string type rssi
+	json_add_string name "$name"
+	json_add_string iface "$iface"
+	json_add_string sysfs "$sysfs"
+	json_add_string minq "$minq"
+	json_add_string maxq "$maxq"
+	json_add_string offset "$offset"
+	json_add_string factor "$factor"
+	json_select ..
+
+	json_select ..
 }
 
-ucidef_add_switch_vlan() {
-	local device=$1
-	local vlan=$2
-	local ports=$3
-	uci batch <<EOF
-add network switch_vlan
-set network.@switch_vlan[-1].device='$device'
-set network.@switch_vlan[-1].vlan='$vlan'
-set network.@switch_vlan[-1].ports='$ports'
-EOF
+ucidef_set_rssimon() {
+	local dev="$1"
+	local refresh="$2"
+	local threshold="$3"
+
+	json_select_object rssimon
+
+	json_select_object "$dev"
+	[ -n "$refresh" ] && json_add_int refresh "$refresh"
+	[ -n "$threshold" ] && json_add_int threshold "$threshold"
+	json_select ..
+
+	json_select ..
+
 }
 
-ucidef_add_switch_port() {
-	local device=$1
-	local port=$2
-	uci batch <<EOF
-add network switch_port
-set network.@switch_port[-1].device='$device'
-set network.@switch_port[-1].port='$port'
-EOF
+ucidef_add_gpio_switch() {
+	local cfg="$1"
+	local name="$2"
+	local pin="$3"
+	local default="${4:-0}"
+
+	json_select_object gpioswitch
+		json_select_object "$cfg"
+			json_add_string name "$name"
+			json_add_int pin "$pin"
+			json_add_int default "$default"
+		json_select ..
+	json_select ..
 }
 
+board_config_update() {
+	json_init
+	[ -f ${CFG} ] && json_load "$(cat ${CFG})"
+
+	# auto-initialize model id and name if applicable
+	if ! json_is_a model object; then
+		json_select_object model
+			[ -f "/tmp/sysinfo/board_name" ] && \
+				json_add_string id "$(cat /tmp/sysinfo/board_name)"
+			[ -f "/tmp/sysinfo/model" ] && \
+				json_add_string name "$(cat /tmp/sysinfo/model)"
+		json_select ..
+	fi
+}
+
+board_config_flush() {
+	json_dump -i > /tmp/.board.json
+	mv /tmp/.board.json ${CFG}
+}
diff --git a/target/linux/ar7/base-files/etc/board.d/02_network b/target/linux/ar7/base-files/etc/board.d/02_network
index 0d79f8e7d441a52ec3c5d35c963e65b10596313b..c1c2dc42fe7abb7802a14a28c02d5c6fe8d3ff6e 100755
--- a/target/linux/ar7/base-files/etc/board.d/02_network
+++ b/target/linux/ar7/base-files/etc/board.d/02_network
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/ar71xx/base-files/etc/board.d/01_leds b/target/linux/ar71xx/base-files/etc/board.d/01_leds
index 892b56738defd35a29380a7b440f1e48a451fab3..33f83776a46beaf2c529ef426c5abbc33d76def0 100755
--- a/target/linux/ar71xx/base-files/etc/board.d/01_leds
+++ b/target/linux/ar71xx/base-files/etc/board.d/01_leds
@@ -3,7 +3,7 @@
 # Copyright (C) 2011 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/ar71xx.sh
 
 board_config_update
diff --git a/target/linux/ar71xx/base-files/etc/board.d/02_network b/target/linux/ar71xx/base-files/etc/board.d/02_network
index 3dc1ec4422dbf5664f1211b12d3a32a025aceefd..0e77e933c37cc4d1a99de3baf454f0569eb55c00 100755
--- a/target/linux/ar71xx/base-files/etc/board.d/02_network
+++ b/target/linux/ar71xx/base-files/etc/board.d/02_network
@@ -4,7 +4,7 @@
 #
 
 . /lib/functions/system.sh
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/ar71xx.sh
 
 board_config_update
diff --git a/target/linux/ar71xx/base-files/etc/board.d/03_gpio_switches b/target/linux/ar71xx/base-files/etc/board.d/03_gpio_switches
index 9a1be1a8fa676114162fe79ce502788b7af5d729..8abcfc0db05276fe622ee71c8852c11592e85ee1 100755
--- a/target/linux/ar71xx/base-files/etc/board.d/03_gpio_switches
+++ b/target/linux/ar71xx/base-files/etc/board.d/03_gpio_switches
@@ -3,7 +3,7 @@
 # Copyright (C) 2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/ar71xx.sh
 
 board_config_update
diff --git a/target/linux/arc770/base-files/etc/board.d/02_network b/target/linux/arc770/base-files/etc/board.d/02_network
index cd5ad2d05be7b412bac03cff85753df9cd2805a4..dabc539fc84b55cd801929810f94a83b7b8a96af 100755
--- a/target/linux/arc770/base-files/etc/board.d/02_network
+++ b/target/linux/arc770/base-files/etc/board.d/02_network
@@ -4,7 +4,7 @@
 #
 
 . /lib/arc.sh
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/at91/base-files/etc/board.d/02_network b/target/linux/at91/base-files/etc/board.d/02_network
index fc3e112f02b1156e9f36004bb48ed9bc811f039b..52709f6061c1a42259a287d855a8610dd34c8423 100755
--- a/target/linux/at91/base-files/etc/board.d/02_network
+++ b/target/linux/at91/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2014-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/at91.sh
 
 board_config_update
diff --git a/target/linux/ath25/base-files/etc/board.d/01_leds b/target/linux/ath25/base-files/etc/board.d/01_leds
index e28dcda23d43ebf30fa3da54e7abf3356558a7ac..e6ab4a76b11d83e0edee01226f69dfab3628af93 100755
--- a/target/linux/ath25/base-files/etc/board.d/01_leds
+++ b/target/linux/ath25/base-files/etc/board.d/01_leds
@@ -2,7 +2,7 @@
 # Copyright 2012-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/ath25/base-files/etc/board.d/02_network b/target/linux/ath25/base-files/etc/board.d/02_network
index b2781bf4cb5bee55b6761fabd975fd5d2f2cc629..b2977f7b94a61f3dd322f8af1194cecfb65af848 100755
--- a/target/linux/ath25/base-files/etc/board.d/02_network
+++ b/target/linux/ath25/base-files/etc/board.d/02_network
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/bcm53xx/base-files/etc/board.d/02_network b/target/linux/bcm53xx/base-files/etc/board.d/02_network
index 4402861b04bf37509240cfa4ac2220381f13085f..c748e144cb62cb0775fab1fedf1fe983c8e0124b 100755
--- a/target/linux/bcm53xx/base-files/etc/board.d/02_network
+++ b/target/linux/bcm53xx/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2011 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/brcm2708/base-files/etc/board.d/02_network b/target/linux/brcm2708/base-files/etc/board.d/02_network
index a05c3d5956c900432030bafe3e0ac5dfc1262e30..c47e8f0e23c80a1ccce45092d2fa0ddc1ebbb4a5 100755
--- a/target/linux/brcm2708/base-files/etc/board.d/02_network
+++ b/target/linux/brcm2708/base-files/etc/board.d/02_network
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Copyright (C) 2014-2015 OpenWrt.org
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/brcm2708.sh
 . /lib/functions.sh
 . /lib/functions/system.sh
diff --git a/target/linux/brcm47xx/base-files/etc/board.d/01_detect b/target/linux/brcm47xx/base-files/etc/board.d/01_detect
index 2623b57bce4f7f45442fecdb93809ca331859e20..841aafac35612c72cb173288413c14fbc8d5c59a 100755
--- a/target/linux/brcm47xx/base-files/etc/board.d/01_detect
+++ b/target/linux/brcm47xx/base-files/etc/board.d/01_detect
@@ -2,7 +2,7 @@
 # Copyright (C) 2006-2015 OpenWrt.org
 
 . /lib/functions/system.sh
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 detect_by_vlanports() {
 	local vlan0ports="$(nvram get vlan0ports)"
diff --git a/target/linux/brcm63xx/base-files/etc/board.d/01_leds b/target/linux/brcm63xx/base-files/etc/board.d/01_leds
index 4955efdf279d9d8d25f976e5cd30ce1b79b8dd71..2697a56e8ea82b32cf3e9754f80a466d8642a097 100755
--- a/target/linux/brcm63xx/base-files/etc/board.d/01_leds
+++ b/target/linux/brcm63xx/base-files/etc/board.d/01_leds
@@ -3,7 +3,7 @@
 # Copyright (C) 2013-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/brcm63xx.sh
 
 board_config_update
diff --git a/target/linux/brcm63xx/base-files/etc/board.d/02_network b/target/linux/brcm63xx/base-files/etc/board.d/02_network
index 2098d988a37d3e1c9215ae7e9fe9b00ab0a0f4e0..c01aba81b85fc37d96601ce66e8e2bf6310cbbf1 100755
--- a/target/linux/brcm63xx/base-files/etc/board.d/02_network
+++ b/target/linux/brcm63xx/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2012-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/brcm63xx.sh
 
 board_config_update
diff --git a/target/linux/imx6/base-files/etc/board.d/02_network b/target/linux/imx6/base-files/etc/board.d/02_network
index d4aac5acc56ea892d0ad4f267bcb38ea9c7939e5..cf11f627840bc2b76578c90a650dd6121cfbc57c 100755
--- a/target/linux/imx6/base-files/etc/board.d/02_network
+++ b/target/linux/imx6/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2013-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/imx6.sh
 
 board=$(imx6_board_name)
diff --git a/target/linux/ipq806x/base-files/etc/board.d/01_leds b/target/linux/ipq806x/base-files/etc/board.d/01_leds
index b2356c072ad8cd4f6260bb510001aaa199b5d4fe..07b5b069888f12679ad2a744e2cc051e410df881 100755
--- a/target/linux/ipq806x/base-files/etc/board.d/01_leds
+++ b/target/linux/ipq806x/base-files/etc/board.d/01_leds
@@ -3,7 +3,7 @@
 # Copyright (C) 2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/ipq806x.sh
 
 board_config_update
diff --git a/target/linux/ipq806x/base-files/etc/board.d/02_network b/target/linux/ipq806x/base-files/etc/board.d/02_network
index b0542302acce043af07c41a95f4ae33cdf5187c2..1302a559f1f7e741079347b3050aba90aba14bcf 100755
--- a/target/linux/ipq806x/base-files/etc/board.d/02_network
+++ b/target/linux/ipq806x/base-files/etc/board.d/02_network
@@ -4,7 +4,7 @@
 # Copyright (c) 2011-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/ipq806x.sh
 
 board_config_update
diff --git a/target/linux/kirkwood/base-files/etc/board.d/01_leds b/target/linux/kirkwood/base-files/etc/board.d/01_leds
index 9e84d8bb202e1d545ea23cdc1413dfa3722b3dbc..ce1309966eb4701b297f4b2ac6804db43a9ec268 100755
--- a/target/linux/kirkwood/base-files/etc/board.d/01_leds
+++ b/target/linux/kirkwood/base-files/etc/board.d/01_leds
@@ -3,7 +3,7 @@
 # Copyright (C) 2012-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/kirkwood.sh
 
 board_config_update
diff --git a/target/linux/kirkwood/base-files/etc/board.d/02_network b/target/linux/kirkwood/base-files/etc/board.d/02_network
index 355418b229a5164e81c7f6701bea0a603fbfee17..bf966e1117ee0e67a1ff5ae097b080c9d8c6886e 100755
--- a/target/linux/kirkwood/base-files/etc/board.d/02_network
+++ b/target/linux/kirkwood/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2012-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/kirkwood.sh
 
 board_config_update
diff --git a/target/linux/lantiq/base-files/etc/board.d/01_leds b/target/linux/lantiq/base-files/etc/board.d/01_leds
index 74d74c4462550d7d6dc02fca3fc8d4c88498ba29..b5801cac991cb19c132856bed64ca73635e4b5f8 100755
--- a/target/linux/lantiq/base-files/etc/board.d/01_leds
+++ b/target/linux/lantiq/base-files/etc/board.d/01_leds
@@ -4,7 +4,7 @@
 # based on ar71xx
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/functions/lantiq.sh
 
 board_config_update
diff --git a/target/linux/lantiq/base-files/etc/board.d/02_network b/target/linux/lantiq/base-files/etc/board.d/02_network
index 08a143f0b106f5f65ef6995e95d99fb0777e614c..8fc0835bdb458e133379b33581b740b6ae14ac33 100755
--- a/target/linux/lantiq/base-files/etc/board.d/02_network
+++ b/target/linux/lantiq/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2011-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/functions/system.sh
 . /lib/functions/lantiq.sh
 
diff --git a/target/linux/malta/base-files/etc/board.d/00_model b/target/linux/malta/base-files/etc/board.d/00_model
index 54f4d9a7d0a2f2c9d666779019fdab46c61049d7..7a834058f3cbd05d2ca68ac8e90ccefe579b6b1c 100755
--- a/target/linux/malta/base-files/etc/board.d/00_model
+++ b/target/linux/malta/base-files/etc/board.d/00_model
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Copyright (C) 2015 OpenWrt.org
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/malta/base-files/etc/board.d/02_network b/target/linux/malta/base-files/etc/board.d/02_network
index fc9056fa99f384df7ec67a31d753ecba63c7f0c9..8f0110893805cbf74b9842e733004322dbab0698 100755
--- a/target/linux/malta/base-files/etc/board.d/02_network
+++ b/target/linux/malta/base-files/etc/board.d/02_network
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/mcs814x/base-files/etc/board.d/01_leds b/target/linux/mcs814x/base-files/etc/board.d/01_leds
index 3b1de4ae9b30adb3f67da88b24b1e8dc703f6530..efcf8093ae3774c9b726370ed1892f5d89cfeaca 100755
--- a/target/linux/mcs814x/base-files/etc/board.d/01_leds
+++ b/target/linux/mcs814x/base-files/etc/board.d/01_leds
@@ -3,7 +3,7 @@
 # Copyright (C) 2012-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/mcs814x.sh
 
 board_config_update
diff --git a/target/linux/mcs814x/base-files/etc/board.d/02_network b/target/linux/mcs814x/base-files/etc/board.d/02_network
index a447923f427a1526360e0eeb8906636aabd4b4a2..d3f2e653f8655f8a7fe9209510394636e22eb501 100755
--- a/target/linux/mcs814x/base-files/etc/board.d/02_network
+++ b/target/linux/mcs814x/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 ucidef_set_interface_lan "eth0"
diff --git a/target/linux/mpc85xx/base-files/etc/board.d/02_network b/target/linux/mpc85xx/base-files/etc/board.d/02_network
index ddb67a699afca40597977d13f95d9ac82ed5a2cb..4c7206c14a0bd0ea6163043896eb8c12c5b1f1ed 100755
--- a/target/linux/mpc85xx/base-files/etc/board.d/02_network
+++ b/target/linux/mpc85xx/base-files/etc/board.d/02_network
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Copyright (C) 2014-2015 OpenWrt.org
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/mpc85xx.sh
 . /lib/functions.sh
 . /lib/functions/system.sh
diff --git a/target/linux/mvebu/base-files/etc/board.d/01_leds b/target/linux/mvebu/base-files/etc/board.d/01_leds
index eb245d85ae924fb9e812504790273b534a89d2e9..71dd3476e668b24c985cbfa148b11ff71ef890f5 100755
--- a/target/linux/mvebu/base-files/etc/board.d/01_leds
+++ b/target/linux/mvebu/base-files/etc/board.d/01_leds
@@ -3,7 +3,7 @@
 # Copyright (C) 2014-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/mvebu.sh
 
 board_config_update
diff --git a/target/linux/mvebu/base-files/etc/board.d/02_network b/target/linux/mvebu/base-files/etc/board.d/02_network
index ef30a2214de717656a22908b1fdf7470b8694df0..289a4b0c017a596babbaa490447365996064c437 100755
--- a/target/linux/mvebu/base-files/etc/board.d/02_network
+++ b/target/linux/mvebu/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2014-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/mvebu.sh
 
 board_config_update
diff --git a/target/linux/mxs/base-files/etc/board.d/02_network b/target/linux/mxs/base-files/etc/board.d/02_network
index 102839dba3a116a2cd69e55dfa75c9eec5c2e289..b31deb7cb6929b2ea5ee5415989a8a9e4274ed10 100755
--- a/target/linux/mxs/base-files/etc/board.d/02_network
+++ b/target/linux/mxs/base-files/etc/board.d/02_network
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Copyright (C) 2013-2015 OpenWrt.org
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/mxs.sh
 
 board_config_update
diff --git a/target/linux/netlogic/base-files/etc/board.d/02_network b/target/linux/netlogic/base-files/etc/board.d/02_network
index e6acda67fbc19b9a428f709c403eddcc94f06643..fca8d9662a23a9ab9ef62122a6fb86c3f803b1fb 100755
--- a/target/linux/netlogic/base-files/etc/board.d/02_network
+++ b/target/linux/netlogic/base-files/etc/board.d/02_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2014-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/netlogic.sh
 
 board_config_update
diff --git a/target/linux/octeon/base-files/etc/board.d/01_network b/target/linux/octeon/base-files/etc/board.d/01_network
index f07bdf8ca67cf068181612f0157f80e556db6ccb..3c1e843b6c9163078db325e7df5f2b583b79ceeb 100755
--- a/target/linux/octeon/base-files/etc/board.d/01_network
+++ b/target/linux/octeon/base-files/etc/board.d/01_network
@@ -3,7 +3,7 @@
 # Copyright (C) 2014-2015 OpenWrt.org
 #
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/functions/octeon.sh
 
 board_config_update
diff --git a/target/linux/orion/base-files/etc/board.d/02_network b/target/linux/orion/base-files/etc/board.d/02_network
index 96cd083c4581180931349b616055038e3d01c839..ab74bf371325f2c015d6614076535bc7bd10917f 100755
--- a/target/linux/orion/base-files/etc/board.d/02_network
+++ b/target/linux/orion/base-files/etc/board.d/02_network
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/oxnas/base-files/etc/board.d/01_leds b/target/linux/oxnas/base-files/etc/board.d/01_leds
index 17e37cd91ca9bab635440ab833c9bc7fceea4167..52da9456809a98e6ab9c0ae9c9af458cbdfafa42 100755
--- a/target/linux/oxnas/base-files/etc/board.d/01_leds
+++ b/target/linux/oxnas/base-files/etc/board.d/01_leds
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/oxnas.sh
 
 board=$(oxnas_board_name)
diff --git a/target/linux/oxnas/base-files/etc/board.d/02_network b/target/linux/oxnas/base-files/etc/board.d/02_network
index 3a1058402ef2d71bac9d8b2edc0d5ef238a6eee4..227cfba0a602de786ba07fc7e03cf0933879bf1a 100755
--- a/target/linux/oxnas/base-files/etc/board.d/02_network
+++ b/target/linux/oxnas/base-files/etc/board.d/02_network
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/functions/system.sh
 
 board_config_update
diff --git a/target/linux/ramips/base-files/etc/board.d/01_leds b/target/linux/ramips/base-files/etc/board.d/01_leds
index 40a524405dfbd7f6f88f1f4df54dac75aece7eb5..c3a81a45136f7962fa01870b3c22e9f5c7e172f3 100755
--- a/target/linux/ramips/base-files/etc/board.d/01_leds
+++ b/target/linux/ramips/base-files/etc/board.d/01_leds
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/ramips.sh
 
 set_usb_led() {
diff --git a/target/linux/ramips/base-files/etc/board.d/02_network b/target/linux/ramips/base-files/etc/board.d/02_network
index dce6002e127d2de9f6211a551d18ceb6e593bc13..a55c9eb24f8da908201fb149395441942a1bcb0c 100755
--- a/target/linux/ramips/base-files/etc/board.d/02_network
+++ b/target/linux/ramips/base-files/etc/board.d/02_network
@@ -2,7 +2,7 @@
 
 . /lib/functions.sh
 . /lib/ramips.sh
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 . /lib/functions/system.sh
 
 ramips_setup_rt3x5x_vlans()
diff --git a/target/linux/realview/base-files/etc/board.d/00_model b/target/linux/realview/base-files/etc/board.d/00_model
index b7dc5074cdca8ef487524410b7cc25d091a4a268..9318d8e9b1e5f07ed4cb04724d80b24cc33dddbb 100755
--- a/target/linux/realview/base-files/etc/board.d/00_model
+++ b/target/linux/realview/base-files/etc/board.d/00_model
@@ -1,7 +1,7 @@
 #!/bin/sh
 # Copyright (C) 2015 OpenWrt.org
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 
diff --git a/target/linux/realview/base-files/etc/board.d/02_network b/target/linux/realview/base-files/etc/board.d/02_network
index 0ac93ac8e027f6e9a9b20b7adb0eaf3d6af56a3f..df7abe2e367e46822b7179040387d2d062ca76d3 100755
--- a/target/linux/realview/base-files/etc/board.d/02_network
+++ b/target/linux/realview/base-files/etc/board.d/02_network
@@ -1,6 +1,6 @@
 #!/bin/sh
 
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update
 ucidef_set_interface_lan "eth0" "dhcp"
diff --git a/target/linux/sunxi/base-files/etc/board.d/02_network b/target/linux/sunxi/base-files/etc/board.d/02_network
index 59af55c7a1d8c26a7fdadcc823e6d7499f76bc80..74fa2a0e6d3a39ab5220ec1425c1afeeeed5e920 100755
--- a/target/linux/sunxi/base-files/etc/board.d/02_network
+++ b/target/linux/sunxi/base-files/etc/board.d/02_network
@@ -4,7 +4,7 @@
 #
 
 . /lib/sunxi.sh
-. /lib/functions/uci-defaults-new.sh
+. /lib/functions/uci-defaults.sh
 
 board_config_update