diff --git a/programs/ssl/ssl_client2.c b/programs/ssl/ssl_client2.c
index c15a75d..d2f47ff 100644
--- a/programs/ssl/ssl_client2.c
+++ b/programs/ssl/ssl_client2.c
@@ -34,10 +34,6 @@
 #define MAX_REQUEST_SIZE      20000
 #define MAX_REQUEST_SIZE_STR "20000"
 
-
-/* the max record size of TLS 1.3 is 2^14 */
-#define MAX_EARLY_DATA_CHUNK_SIZE 16384
-
 #define DFL_SERVER_NAME         "localhost"
 #define DFL_SERVER_ADDR         NULL
 #define DFL_SERVER_PORT         "4433"
@@ -56,8 +52,7 @@
 #define DFL_KEY_OPAQUE          0
 #define DFL_KEY_PWD             ""
 #define DFL_PSK                 ""
-#define DFL_EARLY_DATA          MBEDTLS_SSL_EARLY_DATA_DISABLED
-#define DFL_EARLY_DATA_FILE     ""
+#define DFL_EARLY_DATA          ""
 #define DFL_PSK_OPAQUE          0
 #define DFL_PSK_IDENTITY        "Client_identity"
 #define DFL_ECJPAKE_PW          NULL
@@ -352,11 +347,9 @@
 
 #if defined(MBEDTLS_SSL_EARLY_DATA)
 #define USAGE_EARLY_DATA \
-    "    early_data=%%d        default: 0 (disabled)\n"      \
-    "                          options: 0 (disabled), 1 (enabled)\n" \
-    "    early_data_file=%%s   The file path to read early data from\n" \
-    "                          default: \"\" (do nothing)\n"            \
-    "                          option: a file path\n"
+    "    early_data=%%s      The file path to read early data from\n" \
+    "                        default: \"\" (do nothing)\n"            \
+    "                        option: a file path\n"
 #else
 #define USAGE_EARLY_DATA ""
 #endif /* MBEDTLS_SSL_EARLY_DATA && MBEDTLS_SSL_PROTO_TLS1_3 */
@@ -551,8 +544,7 @@
     int reproducible;           /* make communication reproducible          */
     int skip_close_notify;      /* skip sending the close_notify alert      */
 #if defined(MBEDTLS_SSL_EARLY_DATA)
-    int early_data;             /* support for early data                   */
-    const char *early_data_file; /* the path of the file to read early data from */
+    const char *early_data;     /* the path of the file to read early data from */
 #endif
     int query_config_mode;      /* whether to read config                   */
     int use_srtp;               /* Support SRTP                             */
@@ -725,29 +717,6 @@
     return ret;
 }
 
-#if defined(MBEDTLS_SSL_EARLY_DATA)
-int ssl_write_early_data(mbedtls_ssl_context *ssl, FILE *fp,
-                         int *early_data_written)
-{
-
-    /* TODO: Will add code of calling mbedtls_ssl_write_early_data()
-     * to write real early data.
-     */
-    unsigned char early_data_buf[MAX_EARLY_DATA_CHUNK_SIZE];
-    unsigned char *p_early_data_start = &early_data_buf[0];
-    unsigned char *p_early_data_end = p_early_data_start +
-                                      MAX_EARLY_DATA_CHUNK_SIZE;
-    ((void) fp);
-    ((void) early_data_buf);
-    ((void) p_early_data_start);
-    ((void) p_early_data_end);
-    ((void) early_data_written);
-
-    return mbedtls_ssl_handshake(ssl);
-
-}
-#endif /* MBEDTLS_SSL_EARLY_DATA */
-
 int main(int argc, char *argv[])
 {
     int ret = 0, len, tail_len, i, written, frags, retry_left;
@@ -773,10 +742,6 @@
     size_t cid_renego_len = 0;
 #endif
 
-#if defined(MBEDTLS_SSL_EARLY_DATA)
-    FILE *early_data_fp = NULL;
-#endif /* MBEDTLS_SSL_EARLY_DATA */
-
 #if defined(MBEDTLS_SSL_ALPN)
     const char *alpn_list[ALPN_LIST_SIZE];
 #endif
@@ -949,7 +914,6 @@
     opt.sig_algs            = DFL_SIG_ALGS;
 #if defined(MBEDTLS_SSL_EARLY_DATA)
     opt.early_data          = DFL_EARLY_DATA;
-    opt.early_data_file     = DFL_EARLY_DATA_FILE;
 #endif
     opt.transport           = DFL_TRANSPORT;
     opt.hs_to_min           = DFL_HS_TO_MIN;
@@ -1233,23 +1197,7 @@
 #if defined(MBEDTLS_SSL_PROTO_TLS1_3)
 #if defined(MBEDTLS_SSL_EARLY_DATA)
         else if (strcmp(p, "early_data") == 0) {
-            switch (atoi(q)) {
-                case 0:
-                    opt.early_data = MBEDTLS_SSL_EARLY_DATA_DISABLED;
-                    break;
-                case 1:
-                    opt.early_data = MBEDTLS_SSL_EARLY_DATA_ENABLED;
-                    break;
-                default: goto usage;
-            }
-        } else if (strcmp(p, "early_data_file") == 0) {
-            opt.early_data_file = q;
-            if ((early_data_fp = fopen(opt.early_data_file, "rb")) == NULL) {
-                mbedtls_printf("failed\n  ! Cannot open '%s' for reading.\n",
-                               opt.early_data_file);
-                ret = MBEDTLS_ERR_SSL_INTERNAL_ERROR;
-                goto exit;
-            }
+            opt.early_data = q;
         }
 #endif /* MBEDTLS_SSL_EARLY_DATA */
 
@@ -2016,7 +1964,17 @@
     }
 
 #if defined(MBEDTLS_SSL_EARLY_DATA)
-    mbedtls_ssl_conf_early_data(&conf, opt.early_data);
+    int early_data_enabled = MBEDTLS_SSL_EARLY_DATA_DISABLED;
+    FILE *early_data_fp = NULL;
+    if (strlen(opt.early_data) > 0) {
+        if ((early_data_fp = fopen(opt.early_data, "rb")) == NULL) {
+            mbedtls_printf("failed\n  ! Cannot open '%s' for reading.\n",
+                           opt.early_data);
+            goto exit;
+        }
+        early_data_enabled = MBEDTLS_SSL_EARLY_DATA_ENABLED;
+    }
+    mbedtls_ssl_conf_early_data(&conf, early_data_enabled);
 #endif /* MBEDTLS_SSL_EARLY_DATA */
 
     if ((ret = mbedtls_ssl_setup(&ssl, &conf)) != 0) {
@@ -3041,14 +2999,7 @@
             goto exit;
         }
 
-#if defined(MBEDTLS_SSL_EARLY_DATA)
-
-        int early_data_written = 0;
-        while ((ret = ssl_write_early_data(&ssl, early_data_fp,
-                                           &early_data_written)) != 0) {
-#else
         while ((ret = mbedtls_ssl_handshake(&ssl)) != 0) {
-#endif
             if (ret != MBEDTLS_ERR_SSL_WANT_READ &&
                 ret != MBEDTLS_ERR_SSL_WANT_WRITE &&
                 ret != MBEDTLS_ERR_SSL_CRYPTO_IN_PROGRESS) {
