diff --git a/src/core/security/security_context.c b/src/core/security/security_context.c
index 174d991..c56692a 100644
--- a/src/core/security/security_context.c
+++ b/src/core/security/security_context.c
@@ -322,29 +322,19 @@
 grpc_security_status grpc_ssl_channel_security_context_create(
     grpc_credentials *request_metadata_creds, const grpc_ssl_config *config,
     const char *secure_peer_name, grpc_channel_security_context **ctx) {
-  size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions();
-  const unsigned char **alpn_protocol_strings =
-      gpr_malloc(sizeof(const char *) * num_alpn_protocols);
-  unsigned char *alpn_protocol_string_lengths =
-      gpr_malloc(sizeof(unsigned char) * num_alpn_protocols);
+  const char *alpn_protocol_string = GRPC_CHTTP2_ALPN_VERSION;
+  unsigned char alpn_protocol_string_len =
+      (unsigned char)strlen(alpn_protocol_string);
   tsi_result result = TSI_OK;
   grpc_ssl_channel_security_context *c;
-  size_t i;
-
-  for (i = 0; i < num_alpn_protocols; i++) {
-    alpn_protocol_strings[i] =
-        (const unsigned char *)grpc_chttp2_get_alpn_version_index(i);
-    alpn_protocol_string_lengths[i] =
-        strlen(grpc_chttp2_get_alpn_version_index(i));
-  }
 
   if (config == NULL || secure_peer_name == NULL ||
       config->pem_root_certs == NULL) {
     gpr_log(GPR_ERROR, "An ssl channel needs a secure name and root certs.");
-    goto error;
+    return GRPC_SECURITY_ERROR;
   }
   if (!check_request_metadata_creds(request_metadata_creds)) {
-    goto error;
+    return GRPC_SECURITY_ERROR;
   }
 
   c = gpr_malloc(sizeof(grpc_ssl_channel_security_context));
@@ -361,48 +351,31 @@
       config->pem_private_key, config->pem_private_key_size,
       config->pem_cert_chain, config->pem_cert_chain_size,
       config->pem_root_certs, config->pem_root_certs_size,
-      GRPC_SSL_CIPHER_SUITES, alpn_protocol_strings,
-      alpn_protocol_string_lengths, 1, &c->handshaker_factory);
+      GRPC_SSL_CIPHER_SUITES, (const unsigned char **)&alpn_protocol_string,
+      &alpn_protocol_string_len, 1, &c->handshaker_factory);
   if (result != TSI_OK) {
     gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
             tsi_result_to_string(result));
     ssl_channel_destroy(&c->base.base);
     *ctx = NULL;
-    goto error;
+    return GRPC_SECURITY_ERROR;
   }
   *ctx = &c->base;
-  gpr_free(alpn_protocol_strings);
-  gpr_free(alpn_protocol_string_lengths);
   return GRPC_SECURITY_OK;
-
-error:
-  gpr_free(alpn_protocol_strings);
-  gpr_free(alpn_protocol_string_lengths);
-  return GRPC_SECURITY_ERROR;
 }
 
 grpc_security_status grpc_ssl_server_security_context_create(
     const grpc_ssl_config *config, grpc_security_context **ctx) {
-  size_t num_alpn_protocols = grpc_chttp2_num_alpn_versions();
-  const unsigned char **alpn_protocol_strings =
-      gpr_malloc(sizeof(const char *) * num_alpn_protocols);
-  unsigned char *alpn_protocol_string_lengths =
-      gpr_malloc(sizeof(unsigned char) * num_alpn_protocols);
+  const char *alpn_protocol_string = GRPC_CHTTP2_ALPN_VERSION;
+  unsigned char alpn_protocol_string_len =
+      (unsigned char)strlen(alpn_protocol_string);
   tsi_result result = TSI_OK;
   grpc_ssl_server_security_context *c;
-  size_t i;
-
-  for (i = 0; i < num_alpn_protocols; i++) {
-    alpn_protocol_strings[i] =
-        (const unsigned char *)grpc_chttp2_get_alpn_version_index(i);
-    alpn_protocol_string_lengths[i] =
-        strlen(grpc_chttp2_get_alpn_version_index(i));
-  }
 
   if (config == NULL || config->pem_private_key == NULL ||
       config->pem_cert_chain == NULL) {
     gpr_log(GPR_ERROR, "An SSL server needs a key and a cert.");
-    goto error;
+    return GRPC_SECURITY_ERROR;
   }
   c = gpr_malloc(sizeof(grpc_ssl_server_security_context));
   memset(c, 0, sizeof(grpc_ssl_server_security_context));
@@ -415,24 +388,17 @@
       (const unsigned char **)&config->pem_cert_chain,
       (const gpr_uint32 *)&config->pem_cert_chain_size, 1,
       config->pem_root_certs, config->pem_root_certs_size,
-      GRPC_SSL_CIPHER_SUITES, alpn_protocol_strings,
-      alpn_protocol_string_lengths, 1, &c->handshaker_factory);
+      GRPC_SSL_CIPHER_SUITES, (const unsigned char **)&alpn_protocol_string,
+      &alpn_protocol_string_len, 1, &c->handshaker_factory);
   if (result != TSI_OK) {
     gpr_log(GPR_ERROR, "Handshaker factory creation failed with %s.",
             tsi_result_to_string(result));
     ssl_server_destroy(&c->base);
     *ctx = NULL;
-    goto error;
+    return GRPC_SECURITY_ERROR;
   }
   *ctx = &c->base;
-  gpr_free(alpn_protocol_strings);
-  gpr_free(alpn_protocol_string_lengths);
   return GRPC_SECURITY_OK;
-
-error:
-  gpr_free(alpn_protocol_strings);
-  gpr_free(alpn_protocol_string_lengths);
-  return GRPC_SECURITY_ERROR;
 }
 
 
diff --git a/src/core/transport/chttp2/alpn.c b/src/core/transport/chttp2/alpn.c
index 8107406..cd9cf67 100644
--- a/src/core/transport/chttp2/alpn.c
+++ b/src/core/transport/chttp2/alpn.c
@@ -32,25 +32,14 @@
  */
 
 #include "src/core/transport/chttp2/alpn.h"
-#include <grpc/support/log.h>
-#include <grpc/support/useful.h>
 
-/* in order of preference */
-static const char *const supported_versions[] = {"h2-16", "h2-15", "h2-14"};
+static const char *const supported_versions[] = {GRPC_CHTTP2_ALPN_VERSION,
+                                                 "h2-15", "h2-14"};
 
 int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size) {
   size_t i;
-  for (i = 0; i < GPR_ARRAY_SIZE(supported_versions); i++) {
+  for (i = 0; i < sizeof(supported_versions) / sizeof(const char *); i++) {
     if (!strncmp(version, supported_versions[i], size)) return 1;
   }
   return 0;
 }
-
-size_t grpc_chttp2_num_alpn_versions() {
-  return GPR_ARRAY_SIZE(supported_versions);
-}
-
-const char *grpc_chttp2_get_alpn_version_index(size_t i) {
-  GPR_ASSERT(i < GPR_ARRAY_SIZE(supported_versions));
-  return supported_versions[i];
-}
diff --git a/src/core/transport/chttp2/alpn.h b/src/core/transport/chttp2/alpn.h
index de4da8f..1353a18 100644
--- a/src/core/transport/chttp2/alpn.h
+++ b/src/core/transport/chttp2/alpn.h
@@ -36,14 +36,9 @@
 
 #include <string.h>
 
+#define GRPC_CHTTP2_ALPN_VERSION "h2-15"
+
 /* Retuns 1 if the version is supported, 0 otherwise. */
 int grpc_chttp2_is_alpn_version_supported(const char *version, size_t size);
 
-/* Returns the number of protocol versions to advertise */
-size_t grpc_chttp2_num_alpn_versions();
-
-/* Returns the protocol version at index i (0 <= i <
- * grpc_chttp2_num_alpn_versions()) */
-const char *grpc_chttp2_get_alpn_version_index(size_t i);
-
 #endif /* __GRPC_INTERNAL_TRANSPORT_CHTTP2_ALPN_H_ */
diff --git a/test/core/transport/chttp2/alpn_test.c b/test/core/transport/chttp2/alpn_test.c
index 7a70b0c..65b7af8 100644
--- a/test/core/transport/chttp2/alpn_test.c
+++ b/test/core/transport/chttp2/alpn_test.c
@@ -37,7 +37,8 @@
 #include "test/core/util/test_config.h"
 
 static void test_alpn_success(void) {
-  GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("h2-16", 5));
+  const char *version = GRPC_CHTTP2_ALPN_VERSION;
+  GPR_ASSERT(grpc_chttp2_is_alpn_version_supported(version, strlen(version)));
   GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("h2-15", 5));
   GPR_ASSERT(grpc_chttp2_is_alpn_version_supported("h2-14", 5));
 }
