diff --git a/metropolis/pkg/gpt/BUILD.bazel b/metropolis/pkg/gpt/BUILD.bazel
index 25b6b7b..bc844b7 100644
--- a/metropolis/pkg/gpt/BUILD.bazel
+++ b/metropolis/pkg/gpt/BUILD.bazel
@@ -9,7 +9,10 @@
     ],
     importpath = "source.monogon.dev/metropolis/pkg/gpt",
     visibility = ["//visibility:public"],
-    deps = ["@com_github_google_uuid//:uuid"],
+    deps = [
+        "//metropolis/pkg/msguid",
+        "@com_github_google_uuid//:uuid",
+    ],
 )
 
 go_test(
diff --git a/metropolis/pkg/gpt/gpt.go b/metropolis/pkg/gpt/gpt.go
index 5660237..81c50f7 100644
--- a/metropolis/pkg/gpt/gpt.go
+++ b/metropolis/pkg/gpt/gpt.go
@@ -16,6 +16,8 @@
 	"unicode/utf16"
 
 	"github.com/google/uuid"
+
+	"source.monogon.dev/metropolis/pkg/msguid"
 )
 
 var gptSignature = [8]byte{'E', 'F', 'I', ' ', 'P', 'A', 'R', 'T'}
@@ -179,7 +181,7 @@
 
 // WithAlignment allows aligning the partition start block to a non-default
 // value. By default, these are aligned to 1MiB.
-//  Only use this flag if you are certain you need it, it can cause quite severe
+// Only use this flag if you are certain you need it, it can cause quite severe
 // performance degradation under certain conditions.
 func WithAlignment(alignmenet int64) AddOption {
 	return func(options *addOptions) {
@@ -439,8 +441,8 @@
 			p.ID = uuid.New()
 		}
 		rawP := partition{
-			Type:       mangleUUID(p.Type),
-			ID:         mangleUUID(p.ID),
+			Type:       msguid.From(p.Type),
+			ID:         msguid.From(p.ID),
 			FirstBlock: p.FirstBlock,
 			LastBlock:  p.LastBlock,
 			Attributes: uint64(p.Attributes),
@@ -455,7 +457,7 @@
 		Signature:  gptSignature,
 		Revision:   gptRevision,
 		HeaderSize: uint32(binary.Size(&header{})),
-		ID:         mangleUUID(gpt.ID),
+		ID:         msguid.From(gpt.ID),
 
 		PartitionEntryCount: uint32(slotCount),
 		PartitionEntrySize:  uint32(partSize),
@@ -669,7 +671,7 @@
 		return nil, errors.New("GPT partition entry table checksum mismatch")
 	}
 	var g Table
-	g.ID = unmangleUUID(hdr.ID)
+	g.ID = msguid.To(hdr.ID)
 	g.BlockSize = blockSize
 	g.BlockCount = blockCount
 	for i := uint32(0); i < hdr.PartitionEntryCount; i++ {
@@ -685,8 +687,8 @@
 			continue
 		}
 		g.Partitions = append(g.Partitions, &Partition{
-			ID:         unmangleUUID(part.ID),
-			Type:       unmangleUUID(part.Type),
+			ID:         msguid.To(part.ID),
+			Type:       msguid.To(part.Type),
 			Name:       strings.TrimRight(string(utf16.Decode(part.Name[:])), "\x00"),
 			FirstBlock: part.FirstBlock,
 			LastBlock:  part.LastBlock,
@@ -705,23 +707,3 @@
 	g.Partitions = g.Partitions[:maxValidPartition+1]
 	return &g, nil
 }
-
-var mixedEndianTranspose = []int{3, 2, 1, 0, 5, 4, 7, 6, 8, 9, 10, 11, 12, 13, 14, 15}
-
-// mangleUUID encodes a normal UUID into a "mixed-endian" UUID. This just means
-// shuffling the bytes around in a specific way. Thank Microsoft for this
-// idiosyncrasy.
-func mangleUUID(u uuid.UUID) (o [16]byte) {
-	for dest, from := range mixedEndianTranspose {
-		o[dest] = u[from]
-	}
-	return
-}
-
-// unmangleUUID does the reverse transformation of mangleUUID
-func unmangleUUID(i [16]byte) (o uuid.UUID) {
-	for from, dest := range mixedEndianTranspose {
-		o[dest] = i[from]
-	}
-	return
-}
diff --git a/metropolis/pkg/gpt/gpt_test.go b/metropolis/pkg/gpt/gpt_test.go
index df2970b..924d4f7 100644
--- a/metropolis/pkg/gpt/gpt_test.go
+++ b/metropolis/pkg/gpt/gpt_test.go
@@ -10,19 +10,6 @@
 	"github.com/google/uuid"
 )
 
-func TestUUIDTranspose(t *testing.T) {
-	testUUID := uuid.MustParse("00112233-4455-6677-c899-aabbccddeeff")
-	mixedEndianUUID := mangleUUID(testUUID)
-	expectedMixedEndianUUID := [16]byte{0x33, 0x22, 0x11, 0x00, 0x55, 0x44, 0x77, 0x66, 0xc8, 0x99, 0xaa, 0xbb, 0xcc, 0xdd, 0xee, 0xff}
-	if mixedEndianUUID != expectedMixedEndianUUID {
-		t.Errorf("mangleUUID(%s) = %x, expected %x", testUUID, mixedEndianUUID, expectedMixedEndianUUID)
-	}
-	roundTrippedUUID := unmangleUUID(mixedEndianUUID)
-	if testUUID != roundTrippedUUID {
-		t.Errorf("unmangleUUID(mangleUUID(%s)) = %s, expected input", testUUID, roundTrippedUUID)
-	}
-}
-
 func TestFreeSpaces(t *testing.T) {
 	cases := []struct {
 		name            string
