diff --git a/board/kup/common/kup.h b/board/kup/common/kup.h
index 70d7f01e68f7cbabd77d5e057eb7ccaaa3908dfb..b73628310472014b84a16be833d9dff653bff35f 100644
--- a/board/kup/common/kup.h
+++ b/board/kup/common/kup.h
@@ -41,4 +41,6 @@
 
 extern void poweron_key (void);
 
+extern void load_sernum_ethaddr(void);
+
 #endif	/* __KUP_H */
diff --git a/board/kup/kup4k/kup4k.c b/board/kup/kup4k/kup4k.c
index df3ffb4d71cec2e2b62f464c8cc1034c673e1369..98f5f5a30a5142df6a4718f6b742056e4c968176 100644
--- a/board/kup/kup4k/kup4k.c
+++ b/board/kup/kup4k/kup4k.c
@@ -250,6 +250,7 @@ int misc_init_r (void)
 	immap->im_ioport.iop_papar &= ~0x80;
 	immap->im_ioport.iop_padat |= 0x80;	/* turn it off */
 #endif
+	load_sernum_ethaddr();
 	setenv("hw","4k");
 	poweron_key();
 	return (0);
diff --git a/board/kup/kup4x/kup4x.c b/board/kup/kup4x/kup4x.c
index c5b742dd7289438951efb8a5cd81e15f9328fe95..65a222b5ef1c4f5f9f49a8f383593fffed43e7f2 100644
--- a/board/kup/kup4x/kup4x.c
+++ b/board/kup/kup4x/kup4x.c
@@ -295,7 +295,6 @@ static long int dram_size (long int mamr_value, long int *base,
 int misc_init_r (void)
 {
 	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
-
 #ifdef CONFIG_IDE_LED
 	/* Configure PA8 as output port */
 	immap->im_ioport.iop_padir |= 0x80;
@@ -306,6 +305,7 @@ int misc_init_r (void)
 #ifdef KUP4X_USB
 	usb_init_kup4x ();
 #endif
+	load_sernum_ethaddr();
 	setenv ("hw", "4x");
 	poweron_key ();
 	return (0);
diff --git a/board/m501sk/m501sk.c b/board/m501sk/m501sk.c
index 65a8b2989f84a2113f067b67d2fbaf2825224c95..dc5b786c00b623f6e4a90056526f88de1331e1c0 100644
--- a/board/m501sk/m501sk.c
+++ b/board/m501sk/m501sk.c
@@ -105,11 +105,6 @@ uchar m501sk_gpio_clear(M501SK_PIO io)
 	return status;
 }
 
-void load_sernum_ethaddr(void)
-{
-	return;
-}
-
 /*
  * Miscelaneous platform dependent initialisations
  */
diff --git a/board/pcs440ep/pcs440ep.c b/board/pcs440ep/pcs440ep.c
index 5fd3291e4a9c92c305a80454f26b4edae301ab15..27272142c17548ced2c65ed3d64baacb67604c2c 100644
--- a/board/pcs440ep/pcs440ep.c
+++ b/board/pcs440ep/pcs440ep.c
@@ -182,14 +182,21 @@ int board_early_init_f(void)
 }
 
 #define EEPROM_LEN	256
-void load_sernum_ethaddr (void)
+static void load_ethaddr(void)
 {
+	int	ok_ethaddr, ok_eth1addr;
 	int	ret;
 	char	buf[EEPROM_LEN];
 	char	mac[32];
 	char	*use_eeprom;
 	u16	checksumcrc16 = 0;
 
+	/* If the env is sane, then nothing for us to do */
+	ok_ethaddr = eth_getenv_enetaddr("ethaddr", buf);
+	ok_eth1addr = eth_getenv_enetaddr("eth1addr", buf);
+	if (ok_ethaddr && ok_eth1addr)
+		return;
+
 	/* read the MACs from EEprom */
 	status_led_set (0, STATUS_LED_ON);
 	status_led_set (1, STATUS_LED_ON);
@@ -207,22 +214,10 @@ void load_sernum_ethaddr (void)
 			printf("%s: EEPROM Checksum not OK\n", __FUNCTION__);
 		} else {
 			/* get the MACs */
-			sprintf (mac, "%02x:%02x:%02x:%02x:%02x:%02x",
-				buf[3],
-				buf[4],
-				buf[5],
-				buf[6],
-				buf[7],
-				buf[8]);
-			setenv ("ethaddr", (char *) mac);
-			sprintf (mac, "%02x:%02x:%02x:%02x:%02x:%02x",
-				buf[9],
-				buf[10],
-				buf[11],
-				buf[12],
-				buf[13],
-				buf[14]);
-			setenv ("eth1addr", (char *) mac);
+			if (!ok_ethaddr)
+				eth_setenv_enetaddr("ethaddr", &buf[3]);
+			if (!ok_eth1addr)
+				eth_setenv_enetaddr("eth1addr", &buf[9]);
 			return;
 		}
 	}
@@ -446,6 +441,8 @@ int misc_init_r (void)
 	uint pbcr;
 	int size_val = 0;
 
+	load_ethaddr();
+
 	/* Re-do sizing to get full correct info */
 	mtdcr(ebccfga, pb0cr);
 	pbcr = mfdcr(ebccfgd);
diff --git a/board/tqc/tqm8xx/tqm8xx.c b/board/tqc/tqm8xx/tqm8xx.c
index e065d69dd4685ba72d27119b3332eb7df8d7e158..f92c598dd847069e492c7434963f14bf3bb388e6 100644
--- a/board/tqc/tqm8xx/tqm8xx.c
+++ b/board/tqc/tqm8xx/tqm8xx.c
@@ -449,11 +449,14 @@ int board_early_init_r (void)
 
 
 #ifdef CONFIG_MISC_INIT_R
+extern void load_sernum_ethaddr(void);
 int misc_init_r (void)
 {
 	volatile immap_t *immap = (immap_t *) CONFIG_SYS_IMMR;
 	volatile memctl8xx_t *memctl = &immap->im_memctl;
 
+	load_sernum_ethaddr();
+
 #ifdef	CONFIG_SYS_OR_TIMING_FLASH_AT_50MHZ
 	int scy, trlx, flash_or_timing, clk_diff;
 
diff --git a/include/common.h b/include/common.h
index 22ab80bf2607d27a21f0d9c7b1f540dcc01b16aa..952ddfffab2bd6810aa0b4f1a823fe1760fa9b5a 100644
--- a/include/common.h
+++ b/include/common.h
@@ -364,8 +364,6 @@ void  display_mem_map(void);
 void  perform_soft_reset(void);
 #endif
 
-void	load_sernum_ethaddr (void);
-
 /* $(BOARD)/$(BOARD).c */
 int board_early_init_f (void);
 int board_late_init (void);
diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index dc5be3bd0f81b8c1c090ebb3cfa67348b5c58333..10a4d37e297ab0d61c4dd2a88ee73f20ebff3665 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -943,12 +943,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
 	}
 #endif
 
-#if defined(CONFIG_TQM8xxL) || defined(CONFIG_TQM8260) || \
-    defined(CONFIG_TQM8272) || \
-    defined(CONFIG_CCM) || defined(CONFIG_KUP4K) || \
-    defined(CONFIG_KUP4X) || defined(CONFIG_PCS440EP)
-	load_sernum_ethaddr ();
-#endif
 	/* IP Address */
 	bd->bi_ip_addr = getenv_IPaddr ("ipaddr");