diff --git a/t/picotls.c b/t/picotls.c
index b85109c..ca07a90 100644
--- a/t/picotls.c
+++ b/t/picotls.c
@@ -1544,7 +1544,9 @@
     subtest("block", test_quicblock);
 }
 
-static const uint8_t tls12_client_hello[] = {
+static int test_legacy_ch_callback_called = 0;
+
+static const uint8_t legacy_ch_tls12[] = {
     0x16, 0x03, 0x01, 0x00, 0xd2, 0x01, 0x00, 0x00, 0xce, 0x03, 0x03, 0xd1, 0x01, 0x0e, 0x39, 0xea, 0x22, 0x28, 0x89, 0x99,
     0x42, 0xec, 0x70, 0xfa, 0xb3, 0x47, 0x01, 0xce, 0x61, 0x8d, 0xee, 0x0e, 0x3e, 0xf7, 0xe9, 0x4f, 0x0a, 0x8e, 0x94, 0x28,
     0xe5, 0xe3, 0xd3, 0x00, 0x00, 0x5c, 0xc0, 0x30, 0xc0, 0x2c, 0xc0, 0x28, 0xc0, 0x24, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x9f,
@@ -1556,34 +1558,60 @@
     0x69, 0x00, 0x0b, 0x00, 0x02, 0x01, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x17, 0x00, 0x18, 0x00,
     0x23, 0x00, 0x00, 0x00, 0x0d, 0x00, 0x1c, 0x00, 0x1a, 0x06, 0x01, 0x06, 0x03, 0xef, 0xef, 0x05, 0x01, 0x05, 0x03, 0x04,
     0x01, 0x04, 0x03, 0xee, 0xee, 0xed, 0xed, 0x03, 0x01, 0x03, 0x03, 0x02, 0x01, 0x02, 0x03};
-static int test_tls12_on_client_hello_called = 0;
 
-static int test_tls12_on_client_hello(ptls_on_client_hello_t *self, ptls_t *tls, ptls_on_client_hello_parameters_t *params)
+static int test_legacy_ch_tls12_callback(ptls_on_client_hello_t *self, ptls_t *tls, ptls_on_client_hello_parameters_t *params)
 {
-    test_tls12_on_client_hello_called = 1;
+    test_legacy_ch_callback_called = 1;
     ok(params->incompatible_version);
-    ok(sizeof(tls12_client_hello) - 5 == params->raw_message.len);
-    ok(memcmp(tls12_client_hello + 5, params->raw_message.base, params->raw_message.len) == 0);
+    ok(sizeof(legacy_ch_tls12) - 5 == params->raw_message.len);
+    ok(memcmp(legacy_ch_tls12 + 5, params->raw_message.base, params->raw_message.len) == 0);
     ok(params->server_name.len == sizeof("i-need_sni") - 1);
     ok(memcmp(params->server_name.base, "i_need_sni", sizeof("i-need_sni") - 1) == 0);
     return 0;
 }
 
+static const uint8_t legacy_ch_tls11[] = {
+    0x16, 0x03, 0x01, 0x00, 0x71, 0x01, 0x00, 0x00, 0x6d, 0x03, 0x02, 0xa5, 0xac, 0xfc, 0xef, 0x36, 0xa0, 0x4e, 0x1b, 0xa1,
+    0x9d, 0x01, 0x98, 0x3e, 0xae, 0x07, 0x2e, 0x23, 0xdc, 0xce, 0x62, 0xc8, 0xb6, 0x7e, 0xd0, 0x5c, 0x2e, 0xeb, 0x63, 0x26,
+    0x74, 0xe7, 0x61, 0x00, 0x00, 0x2e, 0xc0, 0x14, 0xc0, 0x0a, 0x00, 0x39, 0xff, 0x85, 0x00, 0x88, 0x00, 0x81, 0x00, 0x35,
+    0x00, 0x84, 0xc0, 0x13, 0xc0, 0x09, 0x00, 0x33, 0x00, 0x45, 0x00, 0x2f, 0x00, 0x41, 0xc0, 0x11, 0xc0, 0x07, 0x00, 0x05,
+    0x00, 0x04, 0xc0, 0x12, 0xc0, 0x08, 0x00, 0x16, 0x00, 0x0a, 0x00, 0xff, 0x01, 0x00, 0x00, 0x16, 0x00, 0x0b, 0x00, 0x02,
+    0x01, 0x00, 0x00, 0x0a, 0x00, 0x08, 0x00, 0x06, 0x00, 0x1d, 0x00, 0x17, 0x00, 0x18, 0x00, 0x23, 0x00, 0x00};
+
+static int test_legacy_ch_tls11_callback(ptls_on_client_hello_t *self, ptls_t *tls, ptls_on_client_hello_parameters_t *params)
+{
+    test_legacy_ch_callback_called = 1;
+    ok(params->incompatible_version);
+    ok(sizeof(legacy_ch_tls11) - 5 == params->raw_message.len);
+    ok(memcmp(legacy_ch_tls11 + 5, params->raw_message.base, params->raw_message.len) == 0);
+    ok(params->server_name.len == 0);
+    ok(params->server_name.base == NULL);
+    return 0;
+}
+
 static void test_tls12_hello(void)
 {
-    ptls_on_client_hello_t on_client_hello = {test_tls12_on_client_hello}, *orig = ctx->on_client_hello;
+    ptls_on_client_hello_t on_client_hello = {test_legacy_ch_tls12_callback}, *orig = ctx->on_client_hello;
     ctx->on_client_hello = &on_client_hello;
 
-    test_tls12_on_client_hello_called = 0;
-
-    ptls_t *tls = ptls_new(ctx, 1);
     ptls_buffer_t sendbuf;
     ptls_buffer_init(&sendbuf, "", 0);
-    size_t len = sizeof(tls12_client_hello);
-    int ret = ptls_handshake(tls, &sendbuf, tls12_client_hello, &len, NULL);
-    ok(ret == PTLS_ALERT_PROTOCOL_VERSION);
 
-    ok(test_tls12_on_client_hello_called);
+    test_legacy_ch_callback_called = 0;
+    ptls_t *tls = ptls_new(ctx, 1);
+    size_t len = sizeof(legacy_ch_tls12);
+    int ret = ptls_handshake(tls, &sendbuf, legacy_ch_tls12, &len, NULL);
+    ptls_free(tls);
+    ok(ret == PTLS_ALERT_PROTOCOL_VERSION);
+    ok(test_legacy_ch_callback_called);
+
+    on_client_hello.cb = test_legacy_ch_tls11_callback;
+    test_legacy_ch_callback_called = 0;
+    tls = ptls_new(ctx, 1);
+    len = sizeof(legacy_ch_tls11);
+    ret = ptls_handshake(tls, &sendbuf, legacy_ch_tls11, &len, NULL);
+    ptls_free(tls);
+    ok(ret == PTLS_ALERT_PROTOCOL_VERSION);
 
     ctx->on_client_hello = orig;
 }
