diff --git a/board/nx823/flash.c b/board/nx823/flash.c
index 194d841e4ea85fa819468e7db65707b1009e7278..336e70412be0219acbef3ba5f694188efb5f6029 100644
--- a/board/nx823/flash.c
+++ b/board/nx823/flash.c
@@ -27,8 +27,9 @@
 #include <common.h>
 #include <mpc8xx.h>
 
+DECLARE_GLOBAL_DATA_PTR;
+
 flash_info_t	flash_info[CONFIG_SYS_MAX_FLASH_BANKS]; /* info for FLASH chips	*/
-extern u_long  *my_sernum;		/* from nx823.c */
 
 /*-----------------------------------------------------------------------
  * Protection Flags:
@@ -346,7 +347,7 @@ int write_buff (flash_info_t *info, uchar *src, ulong addr, ulong cnt)
 	if (addr >= CONFIG_SYS_FLASH_SN_SECTOR && addr < CONFIG_SYS_FLASH_SN_BASE)
 	{
 		u_long dest = CONFIG_SYS_FLASH_SN_BASE;
-		u_short *sn = (u_short *)my_sernum;
+		u_short *sn = (u_short *)gd->bd->bi_sernum;
 
 		printf("(saving sernum)");
 		for (i=0; i<4; i++)
diff --git a/board/nx823/nx823.c b/board/nx823/nx823.c
index df9aaab7a7a702d61eed85705b4fae324eb583e0..6ec29dc8575db08dc90bb55268b0cab6887962e5 100644
--- a/board/nx823/nx823.c
+++ b/board/nx823/nx823.c
@@ -360,39 +360,30 @@ static long int dram_size (long int mamr_value, long int *base,
 	return (get_ram_size (base, maxsize));
 }
 
-u_long *my_sernum;
-
 int misc_init_r (void)
 {
+	int i;
 	char tmp[50];
-	u_char *e = gd->bd->bi_enetaddr;
+	uchar ethaddr[6];
+	bd_t *bd = gd->bd;
+	ulong my_sernum = bd->bi_sernum;
 
-	/* save serial numbre from flash (uniquely programmed) */
-	my_sernum = malloc (8);
-	memcpy (my_sernum, gd->bd->bi_sernum, 8);
+	/* load unique serial number */
+	for (i = 0; i < 8; ++i)
+		bd->bi_sernum[i] = *(u_char *) (CONFIG_SYS_FLASH_SN_BASE + i);
 
 	/* save env variables according to sernum */
 	sprintf (tmp, "%08lx%08lx", my_sernum[0], my_sernum[1]);
 	setenv ("serial#", tmp);
 
-	sprintf (tmp, "%02x:%02x:%02x:%02x:%02x:%02x", e[0], e[1], e[2], e[3],
-		 e[4], e[5]);
-	setenv ("ethaddr", tmp);
-	return (0);
-}
-
-void load_sernum_ethaddr (void)
-{
-	int i;
-	bd_t *bd = gd->bd;
-
-	for (i = 0; i < 8; i++) {
-		bd->bi_sernum[i] = *(u_char *) (CONFIG_SYS_FLASH_SN_BASE + i);
+	if (!eth_getenv_enetaddr("ethaddr", ethaddr)) {
+		ethaddr[0] = 0x10;
+		ethaddr[1] = 0x20;
+		ethaddr[2] = 0x30;
+		ethaddr[3] = bd->bi_sernum[1] << 4 | bd->bi_sernum[2];
+		ethaddr[4] = bd->bi_sernum[5];
+		ethaddr[5] = bd->bi_sernum[6];
 	}
-	bd->bi_enetaddr[0] = 0x10;
-	bd->bi_enetaddr[1] = 0x20;
-	bd->bi_enetaddr[2] = 0x30;
-	bd->bi_enetaddr[3] = bd->bi_sernum[1] << 4 | bd->bi_sernum[2];
-	bd->bi_enetaddr[4] = bd->bi_sernum[5];
-	bd->bi_enetaddr[5] = bd->bi_sernum[6];
+
+	return 0;
 }
diff --git a/lib_ppc/board.c b/lib_ppc/board.c
index f69c5f4f1f4f6dfc65f4cdea78387cfdb39d4bc3..b1612ff01c1b0313fa4075665ea548c3440aa7bc 100644
--- a/lib_ppc/board.c
+++ b/lib_ppc/board.c
@@ -899,10 +899,6 @@ void board_init_r (gd_t *id, ulong dest_addr)
 		bd->bi_ethspeed = 0xFFFF;
 #endif
 
-#ifdef CONFIG_NX823
-	load_sernum_ethaddr ();
-#endif
-
 #ifdef CONFIG_HAS_ETH1
 	/* handle the 2nd ethernet address */