diff --git a/package/base-files/Makefile b/package/base-files/Makefile
index 31c6e984bc8f3e0d344751dba619ee858fd8723f..0160e41f88c3bba97c17084100d1d482a001fe01 100644
--- a/package/base-files/Makefile
+++ b/package/base-files/Makefile
@@ -11,7 +11,7 @@ include $(INCLUDE_DIR)/kernel.mk
 include $(INCLUDE_DIR)/version.mk
 
 PKG_NAME:=base-files
-PKG_RELEASE:=148
+PKG_RELEASE:=149
 
 PKG_FILE_DEPENDS:=$(PLATFORM_DIR)/ $(GENERIC_PLATFORM_DIR)/base-files/
 PKG_BUILD_DEPENDS:=opkg/host
diff --git a/package/base-files/files/lib/functions.sh b/package/base-files/files/lib/functions.sh
index 6cb6df92fd66954cf8b5d5a02ce87784d67eee12..85ebc2aeb16143826ca07c82579d4a4970e1bd70 100755
--- a/package/base-files/files/lib/functions.sh
+++ b/package/base-files/files/lib/functions.sh
@@ -257,7 +257,7 @@ mtd_get_mac_ascii()
 	mac_dirty=$(strings "$part" | sed -n 's/^'"$key"'=//p')
 
 	# "canonicalize" mac
-	[ -n "$mac_dirty" ] && echo ${mac_dirty} | tr [A-F] [a-f]
+	[ -n "$mac_dirty" ] && macaddr_canonicalize "$mac_dirty"
 }
 
 mtd_get_mac_binary() {
@@ -310,6 +310,39 @@ macaddr_2bin()
 	echo -ne \\x${mac//:/\\x}
 }
 
+macaddr_canonicalize()
+{
+	local mac="$1"
+	local canon=""
+
+	[ ${#mac} -gt 17 ] && return
+	[ -n "${mac//[a-fA-F0-9\.: -]/}" ] && return
+
+	for octet in ${mac//[\.:-]/ }; do
+		case "${#octet}" in
+		1)
+			octet="0${octet}"
+			;;
+		2)
+			;;
+		4)
+			octet="${octet:0:2} ${octet:2:2}"
+			;;
+		12)
+			octet="${octet:0:2} ${octet:2:2} ${octet:4:2} ${octet:6:2} ${octet:8:2} ${octet:10:2}"
+			;;
+		*)
+			return
+			;;
+		esac
+		canon=${canon}${canon:+ }${octet}
+	done
+
+	[ ${#canon} -ne 17 ] && return
+
+	printf "%02x:%02x:%02x:%02x:%02x:%02x" 0x${canon// / 0x} 2>/dev/null
+}
+
 strtok() { # <string> { <variable> [<separator>] ... }
 	local tmp
 	local val="$1"