diff --git a/ratis-common/src/main/java/org/apache/ratis/protocol/ClientId.java b/ratis-common/src/main/java/org/apache/ratis/protocol/ClientId.java
index 82ae426..4de6157 100644
--- a/ratis-common/src/main/java/org/apache/ratis/protocol/ClientId.java
+++ b/ratis-common/src/main/java/org/apache/ratis/protocol/ClientId.java
@@ -28,8 +28,8 @@
 public final class ClientId extends RaftId {
   private static final Factory<ClientId> FACTORY = new Factory<ClientId>() {
     @Override
-    ClientId newInstance(UUID uuid, ByteString bytes) {
-      return bytes == null? new ClientId(uuid): new ClientId(uuid, bytes);
+    ClientId newInstance(UUID uuid) {
+      return new ClientId(uuid);
     }
   };
 
@@ -49,10 +49,6 @@
     return FACTORY.valueOf(uuid);
   }
 
-  private ClientId(UUID uuid, ByteString bytes) {
-    super(uuid, bytes);
-  }
-
   private ClientId(UUID uuid) {
     super(uuid);
   }
diff --git a/ratis-common/src/main/java/org/apache/ratis/protocol/RaftGroupId.java b/ratis-common/src/main/java/org/apache/ratis/protocol/RaftGroupId.java
index 968b9e5..9caedf7 100644
--- a/ratis-common/src/main/java/org/apache/ratis/protocol/RaftGroupId.java
+++ b/ratis-common/src/main/java/org/apache/ratis/protocol/RaftGroupId.java
@@ -29,8 +29,8 @@
 public final class RaftGroupId extends RaftId {
   private static final Factory<RaftGroupId> FACTORY = new Factory<RaftGroupId>() {
     @Override
-    RaftGroupId newInstance(UUID uuid, ByteString bytes) {
-      return bytes == null? new RaftGroupId(uuid) : new RaftGroupId(uuid, bytes);
+    RaftGroupId newInstance(UUID uuid) {
+      return new RaftGroupId(uuid);
     }
   };
 
@@ -54,10 +54,6 @@
     super(id);
   }
 
-  private RaftGroupId(UUID uuid, ByteString bytes) {
-    super(uuid, bytes);
-  }
-
   @Override
   String createUuidString(UUID uuid) {
     return "group-" + super.createUuidString(uuid);
diff --git a/ratis-common/src/main/java/org/apache/ratis/protocol/RaftId.java b/ratis-common/src/main/java/org/apache/ratis/protocol/RaftId.java
index 161bd83..9c2a83f 100644
--- a/ratis-common/src/main/java/org/apache/ratis/protocol/RaftId.java
+++ b/ratis-common/src/main/java/org/apache/ratis/protocol/RaftId.java
@@ -57,30 +57,26 @@
         .weakValues()
         .build();
 
-    abstract ID newInstance(UUID uuid, ByteString bytes);
+    abstract ID newInstance(UUID uuid);
 
-    private ID valueOf(UUID uuid, ByteString bytes) {
+    final ID valueOf(UUID uuid) {
       try {
-        return cache.get(uuid, () -> newInstance(uuid, bytes));
+        return cache.get(uuid, () -> newInstance(uuid));
       } catch (ExecutionException e) {
         throw new IllegalStateException("Failed to valueOf(" + uuid + ")", e);
       }
     }
 
-    final ID valueOf(UUID uuid) {
-      return valueOf(uuid, null);
-    }
-
     final ID valueOf(ByteString bytes) {
-      return bytes != null? valueOf(toUuid(bytes), bytes): emptyId();
+      return bytes != null? valueOf(toUuid(bytes)): emptyId();
     }
 
     ID emptyId() {
-      return valueOf(ZERO_UUID, ZERO_UUID_BYTESTRING);
+      return valueOf(ZERO_UUID);
     }
 
     ID randomId() {
-      return valueOf(UUID.randomUUID(), null);
+      return valueOf(UUID.randomUUID());
     }
   }
 
@@ -88,23 +84,14 @@
   private final Supplier<ByteString> uuidBytes;
   private final Supplier<String> uuidString;
 
-  private RaftId(UUID uuid, Supplier<ByteString> uuidBytes) {
-    this.uuid = Preconditions.assertNotNull(uuid, "uuid");
-    this.uuidBytes = uuidBytes;
-    this.uuidString = JavaUtils.memoize(() -> createUuidString(uuid));
-  }
-
   RaftId(UUID uuid) {
-    this(uuid, JavaUtils.memoize(() -> toByteString(uuid)));
-    Preconditions.assertTrue(!uuid.equals(ZERO_UUID),
+    this.uuid = Preconditions.assertNotNull(uuid, "uuid");
+    this.uuidBytes = JavaUtils.memoize(() -> toByteString(uuid));
+    this.uuidString = JavaUtils.memoize(() -> createUuidString(uuid));
+    Preconditions.assertTrue(ZERO_UUID == uuid || !uuid.equals(ZERO_UUID),
         () -> "Failed to create " + JavaUtils.getClassSimpleName(getClass()) + ": UUID " + ZERO_UUID + " is reserved.");
   }
 
-  RaftId(UUID uuid, ByteString bytes) {
-    this(uuid, () -> bytes);
-    Preconditions.assertTrue(toUuid(bytes).equals(uuid));
-  }
-
   /** @return the last 12 hex digits. */
   String createUuidString(UUID id) {
     final String s = id.toString().toUpperCase();
diff --git a/ratis-common/src/main/java/org/apache/ratis/protocol/RaftPeerId.java b/ratis-common/src/main/java/org/apache/ratis/protocol/RaftPeerId.java
index 7458d93..8098039 100644
--- a/ratis-common/src/main/java/org/apache/ratis/protocol/RaftPeerId.java
+++ b/ratis-common/src/main/java/org/apache/ratis/protocol/RaftPeerId.java
@@ -40,7 +40,12 @@
   private static final Map<String, RaftPeerId> STRING_MAP = new ConcurrentHashMap<>();
 
   public static RaftPeerId valueOf(ByteString id) {
-    return BYTE_STRING_MAP.computeIfAbsent(id, RaftPeerId::new);
+    final RaftPeerId cached = BYTE_STRING_MAP.get(id);
+    if (cached != null) {
+      return cached;
+    }
+    ByteString cloned = ByteString.copyFrom(id.asReadOnlyByteBuffer());
+    return BYTE_STRING_MAP.computeIfAbsent(cloned, RaftPeerId::new);
   }
 
   public static RaftPeerId valueOf(String id) {
