diff --git a/server/src/main/java/io/atomix/copycat/server/state/ClusterState.java b/server/src/main/java/io/atomix/copycat/server/state/ClusterState.java
index <HASH>..<HASH> 100644
--- a/server/src/main/java/io/atomix/copycat/server/state/ClusterState.java
+++ b/server/src/main/java/io/atomix/copycat/server/state/ClusterState.java
@@ -344,9 +344,12 @@ final class ClusterState implements Cluster, AutoCloseable {
             } else if (type == Member.Type.ACTIVE) {
               context.transition(CopycatServer.State.FOLLOWER);
               joinFuture.complete(null);
-            } else if (type == Member.Type.PASSIVE) {
+            } else if (type == Member.Type.PASSIVE || type == Member.Type.PROMOTABLE) {
               context.transition(CopycatServer.State.PASSIVE);
               joinFuture.complete(null);
+            } else if (type == Member.Type.RESERVE) {
+              context.transition(CopycatServer.State.RESERVE);
+              joinFuture.complete(null);
             } else {
               joinFuture.completeExceptionally(new IllegalStateException("unknown member type: " + type));
             }
Ensure server transitions to RESERVE upon join.