diff --git a/paper-server/patches/sources/net/minecraft/nbt/CompoundTag.java.patch b/paper-server/patches/sources/net/minecraft/nbt/CompoundTag.java.patch
index 35fd23eed5..1cb8cb2d7b 100644
--- a/paper-server/patches/sources/net/minecraft/nbt/CompoundTag.java.patch
+++ b/paper-server/patches/sources/net/minecraft/nbt/CompoundTag.java.patch
@@ -18,19 +18,42 @@
      }
  
      @Override
-@@ -234,7 +234,11 @@
+@@ -232,14 +232,34 @@
+     }
+ 
      public void putUUID(String key, UUID value) {
++        // Paper start - Support old UUID format
++        if (this.contains(key + "Most", net.minecraft.nbt.Tag.TAG_ANY_NUMERIC) && this.contains(key + "Least", net.minecraft.nbt.Tag.TAG_ANY_NUMERIC)) {
++            this.tags.remove(key + "Most");
++            this.tags.remove(key + "Least");
++        }
++        // Paper end - Support old UUID format
          this.tags.put(key, NbtUtils.createUUID(value));
      }
-+
  
++
 +    /**
 +     * You must use {@link #hasUUID(String)} before or else it <b>will</b> throw an NPE.
 +     */
      public UUID getUUID(String key) {
++        // Paper start - Support old UUID format
++        if (!contains(key, 11) && this.contains(key + "Most", net.minecraft.nbt.Tag.TAG_ANY_NUMERIC) && this.contains(key + "Least", net.minecraft.nbt.Tag.TAG_ANY_NUMERIC)) {
++            return new UUID(this.getLong(key + "Most"), this.getLong(key + "Least"));
++        }
++        // Paper end - Support old UUID format
          return NbtUtils.loadUUID(this.get(key));
      }
-@@ -477,8 +481,16 @@
+ 
+     public boolean hasUUID(String key) {
++        // Paper start - Support old UUID format
++        if (this.contains(key + "Most", net.minecraft.nbt.Tag.TAG_ANY_NUMERIC) && this.contains(key + "Least", net.minecraft.nbt.Tag.TAG_ANY_NUMERIC)) {
++            return true;
++        }
++        // Paper end - Support old UUID format
+         Tag tag = this.get(key);
+         return tag != null && tag.getType() == IntArrayTag.TYPE && ((IntArrayTag)tag).getAsIntArray().length == 4;
+     }
+@@ -477,8 +497,16 @@
  
      @Override
      public CompoundTag copy() {
diff --git a/paper-server/patches/sources/net/minecraft/world/item/component/ResolvableProfile.java.patch b/paper-server/patches/sources/net/minecraft/world/item/component/ResolvableProfile.java.patch
index c505c77d38..c0d2bc1d79 100644
--- a/paper-server/patches/sources/net/minecraft/world/item/component/ResolvableProfile.java.patch
+++ b/paper-server/patches/sources/net/minecraft/world/item/component/ResolvableProfile.java.patch
@@ -1,6 +1,18 @@
 --- a/net/minecraft/world/item/component/ResolvableProfile.java
 +++ b/net/minecraft/world/item/component/ResolvableProfile.java
-@@ -49,7 +49,7 @@
+@@ -20,9 +20,10 @@
+         instance -> instance.group(
+                     ExtraCodecs.PLAYER_NAME.optionalFieldOf("name").forGetter(ResolvableProfile::name),
+                     UUIDUtil.CODEC.optionalFieldOf("id").forGetter(ResolvableProfile::id),
++                    UUIDUtil.STRING_CODEC.lenientOptionalFieldOf("Id").forGetter($ -> Optional.empty()), // Paper
+                     ExtraCodecs.PROPERTY_MAP.optionalFieldOf("properties", new PropertyMap()).forGetter(ResolvableProfile::properties)
+                 )
+-                .apply(instance, ResolvableProfile::new)
++                .apply(instance, (s, uuid, uuid2, propertyMap) -> new ResolvableProfile(s, uuid2.or(() -> uuid), propertyMap)) // Paper
+     );
+     public static final Codec<ResolvableProfile> CODEC = Codec.withAlternative(
+         FULL_CODEC, ExtraCodecs.PLAYER_NAME, name -> new ResolvableProfile(Optional.of(name), Optional.empty(), new PropertyMap())
+@@ -49,7 +50,7 @@
          if (this.isResolved()) {
              return CompletableFuture.completedFuture(this);
          } else {