diff --git a/src/core/uuid.c b/src/core/uuid.c
index 27a249d..d4deda3 100644
--- a/src/core/uuid.c
+++ b/src/core/uuid.c
@@ -21,7 +21,7 @@ FILE_LICENCE ( GPL2_OR_LATER );
 
 #include <stdint.h>
 #include <stdio.h>
-#include <byteswap.h>
+#include <ctype.h>
 #include <ipxe/uuid.h>
 
 /** @file
@@ -39,13 +39,18 @@ FILE_LICENCE ( GPL2_OR_LATER );
 char * uuid_ntoa ( const union uuid *uuid ) {
 	static char buf[37]; /* "00000000-0000-0000-0000-000000000000" */
 
-	sprintf ( buf, "%08x-%04x-%04x-%04x-%02x%02x%02x%02x%02x%02x",
-		  be32_to_cpu ( uuid->canonical.a ),
-		  be16_to_cpu ( uuid->canonical.b ),
-		  be16_to_cpu ( uuid->canonical.c ),
-		  be16_to_cpu ( uuid->canonical.d ),
+	sprintf ( buf, "%02x%02x%02x%02x-%02x%02x-%02x%02x-%02x%02x-%02x%02x%02x%02x%02x%02x",
+		  uuid->canonical.a[3], uuid->canonical.a[2],
+		  uuid->canonical.a[1], uuid->canonical.a[0],
+		  uuid->canonical.b[1], uuid->canonical.b[0],
+		  uuid->canonical.c[1], uuid->canonical.c[0],
+		  uuid->canonical.d[1], uuid->canonical.d[0], 
 		  uuid->canonical.e[0], uuid->canonical.e[1],
 		  uuid->canonical.e[2], uuid->canonical.e[3],
 		  uuid->canonical.e[4], uuid->canonical.e[5] );
+	int i=0;
+	do
+	    buf[i]=toupper(buf[i]);
+	while (buf[i++]);
 	return buf;
 }
diff --git a/src/include/ipxe/uuid.h b/src/include/ipxe/uuid.h
index 5de56b9..88a0a15 100644
--- a/src/include/ipxe/uuid.h
+++ b/src/include/ipxe/uuid.h
@@ -15,13 +15,13 @@ union uuid {
 	/** Canonical form (00000000-0000-0000-0000-000000000000) */
 	struct {
 		/** 8 hex digits, big-endian */
-		uint32_t a;
+		uint8_t a[4];
 		/** 2 hex digits, big-endian */
-		uint16_t b;
+		uint8_t b[2];
 		/** 2 hex digits, big-endian */
-		uint16_t c;
+		uint8_t c[2];
 		/** 2 hex digits, big-endian */
-		uint16_t d;
+		uint8_t d[2];
 		/** 12 hex digits, big-endian */
 		uint8_t e[6];
 	} canonical;
