diff --git a/include/picotls.h b/include/picotls.h
index d4024c7..118549b 100644
--- a/include/picotls.h
+++ b/include/picotls.h
@@ -632,7 +632,6 @@
         const uint8_t *list;
         size_t count;
     } server_certificate_types;
-    unsigned ech_is_inner_ch : 1;
     /**
      * set to 1 if ClientHello is too old (or too new) to be handled by picotls
      */
diff --git a/lib/picotls.c b/lib/picotls.c
index 61a2d41..9b257f9 100644
--- a/lib/picotls.c
+++ b/lib/picotls.c
@@ -3721,12 +3721,12 @@
 }
 
 /* Wrapper function for invoking the on_client_hello callback, taking an exhaustive list of parameters as arguments. The intention
-* is to not miss setting them as we add new parameters to the struct. */
+ * is to not miss setting them as we add new parameters to the struct. */
 static inline int call_on_client_hello_cb(ptls_t *tls, ptls_iovec_t server_name, ptls_iovec_t raw_message, ptls_iovec_t *alpns,
                                           size_t num_alpns, const uint16_t *sig_algos, size_t num_sig_algos,
                                           const uint16_t *cert_comp_algos, size_t num_cert_comp_algos,
                                           const uint16_t *cipher_suites, size_t num_cipher_suites, const uint8_t *server_cert_types,
-                                          size_t num_server_cert_types, int ech, int incompatible_version)
+                                          size_t num_server_cert_types, int incompatible_version)
 {
     if (tls->ctx->on_client_hello == NULL)
         return 0;
@@ -3738,7 +3738,6 @@
                                                 {cert_comp_algos, num_cert_comp_algos},
                                                 {cipher_suites, num_cipher_suites},
                                                 {server_cert_types, num_server_cert_types},
-                                                ech,
                                                 incompatible_version};
     return tls->ctx->on_client_hello->cb(tls->ctx->on_client_hello, tls, &params);
 }
@@ -3762,7 +3761,7 @@
         if (!is_second_flight) {
             int ret;
             if ((ret = call_on_client_hello_cb(tls_cbarg, ch->server_name, raw_message, ch->alpn.list, ch->alpn.count, NULL, 0,
-                                               NULL, 0, NULL, 0, NULL, 0, 0, 1)) != 0)
+                                               NULL, 0, NULL, 0, NULL, 0, 1)) != 0)
                 return ret;
         }
         return PTLS_ALERT_PROTOCOL_VERSION;
@@ -4022,7 +4021,7 @@
     enum { HANDSHAKE_MODE_FULL, HANDSHAKE_MODE_PSK, HANDSHAKE_MODE_PSK_DHE } mode;
     size_t psk_index = SIZE_MAX;
     ptls_iovec_t pubkey = {0}, ecdh_secret = {0};
-    int accept_early_data = 0, accept_ech = 0, is_second_flight = tls->state == PTLS_STATE_SERVER_EXPECT_SECOND_CLIENT_HELLO, ret;
+    int accept_early_data = 0, is_second_flight = tls->state == PTLS_STATE_SERVER_EXPECT_SECOND_CLIENT_HELLO, ret;
 
     ptls_buffer_init(&ech.ch_inner, "", 0);
 
@@ -4100,7 +4099,6 @@
                 if ((ret = check_client_hello_constraints(tls->ctx, ch, is_second_flight ? tls->client_random.inner : NULL, 1,
                                                           message, tls)) != 0)
                     goto Exit;
-                accept_ech = 1;
                 if (!is_second_flight)
                     memcpy(tls->client_random.inner, ch->random_bytes, PTLS_HELLO_RANDOM_SIZE);
             }
@@ -4120,8 +4118,7 @@
         if ((ret = call_on_client_hello_cb(tls, server_name, message, ch->alpn.list, ch->alpn.count, ch->signature_algorithms.list,
                                            ch->signature_algorithms.count, ch->cert_compression_algos.list,
                                            ch->cert_compression_algos.count, ch->client_ciphers.list, ch->client_ciphers.count,
-                                           ch->server_certificate_types.list, ch->server_certificate_types.count, accept_ech, 0)) !=
-            0)
+                                           ch->server_certificate_types.list, ch->server_certificate_types.count, 0)) != 0)
             goto Exit;
         if (!certificate_type_exists(ch->server_certificate_types.list, ch->server_certificate_types.count,
                                      tls->ctx->use_raw_public_keys ? PTLS_CERTIFICATE_TYPE_RAW_PUBLIC_KEY
@@ -4214,7 +4211,7 @@
 
             /* Either send a stateless retry (w. cookies) or a stateful one. When sending the latter, run the state machine. At the
              * moment, stateless retry is disabled when ECH is used (do we need to support it?). */
-            int retry_uses_cookie = properties != NULL && properties->server.retry_uses_cookie && !accept_ech;
+            int retry_uses_cookie = properties != NULL && properties->server.retry_uses_cookie && !ptls_is_ech_handshake(tls);
             if (!retry_uses_cookie) {
                 key_schedule_transform_post_ch1hash(tls->key_schedule);
                 key_schedule_extract(tls->key_schedule, ptls_iovec_init(NULL, 0));
@@ -4224,7 +4221,7 @@
                 tls->key_schedule, key_share.algorithm != NULL ? NULL : negotiated_group,
                 {
                     ptls_buffer_t *sendbuf = emitter->buf;
-                    if (accept_ech) {
+                    if (ptls_is_ech_handshake(tls)) {
                         buffer_push_extension(sendbuf, PTLS_EXTENSION_TYPE_ENCRYPTED_CLIENT_HELLO, {
                             if ((ret = ptls_buffer_reserve(sendbuf, 8)) != 0)
                                 goto Exit;
@@ -4268,14 +4265,12 @@
                     }
                 },
                 {
-                    if (ech_confirm_off != 0) {
-                        assert(accept_ech);
-                        if ((ret = ech_calc_confirmation(
-                                 tls->key_schedule, emitter->buf->base + ech_confirm_off, tls->client_random.inner,
-                                 ECH_CONFIRMATION_HRR,
-                                 ptls_iovec_init(emitter->buf->base + sh_start_off, emitter->buf->off - sh_start_off))) != 0)
-                            goto Exit;
-                    }
+                    if (ech_confirm_off != 0 &&
+                        (ret = ech_calc_confirmation(
+                             tls->key_schedule, emitter->buf->base + ech_confirm_off, tls->client_random.inner,
+                             ECH_CONFIRMATION_HRR,
+                             ptls_iovec_init(emitter->buf->base + sh_start_off, emitter->buf->off - sh_start_off))) != 0)
+                        goto Exit;
                 });
             if (retry_uses_cookie) {
                 if ((ret = push_change_cipher_spec(tls, emitter)) != 0)
@@ -4365,7 +4360,7 @@
             {
                 tls->ctx->random_bytes(emitter->buf->base + emitter->buf->off, PTLS_HELLO_RANDOM_SIZE);
                 /* when accepting CHInner, last 8 byte of SH.random is zero for the handshake transcript */
-                if (accept_ech) {
+                if (ptls_is_ech_handshake(tls)) {
                     ech_confirm_off = emitter->buf->off + PTLS_HELLO_RANDOM_SIZE - 8;
                     memset(emitter->buf->base + ech_confirm_off, 0, 8);
                 }
@@ -4384,14 +4379,11 @@
                 }
             },
             {
-                if (ech_confirm_off != 0) {
-                    assert(accept_ech);
-                    if ((ret = ech_calc_confirmation(
-                             tls->key_schedule, emitter->buf->base + ech_confirm_off, tls->client_random.inner,
-                             ECH_CONFIRMATION_SERVER_HELLO,
-                             ptls_iovec_init(emitter->buf->base + sh_start_off, emitter->buf->off - sh_start_off))) != 0)
-                        goto Exit;
-                }
+                if (ech_confirm_off != 0 && (ret = ech_calc_confirmation(tls->key_schedule, emitter->buf->base + ech_confirm_off,
+                                                                         tls->client_random.inner, ECH_CONFIRMATION_SERVER_HELLO,
+                                                                         ptls_iovec_init(emitter->buf->base + sh_start_off,
+                                                                                         emitter->buf->off - sh_start_off))) != 0)
+                    goto Exit;
             });
     }
 
@@ -4508,11 +4500,6 @@
     }
 
 Exit:
-    /* acceptance of ECH is signalled as the persistence of the ech AEAD context */
-    if (!accept_ech && tls->server.ech.aead != NULL) {
-        ptls_aead_free(tls->server.ech.aead);
-        tls->server.ech.aead = NULL;
-    }
     free(pubkey.base);
     if (ecdh_secret.base != NULL) {
         ptls_clear_memory(ecdh_secret.base, ecdh_secret.len);
