diff --git a/pycardium/main.c b/pycardium/main.c
index 2943b12655103682d163474da8bafe0e54bad772..7aa126186b81699a1d714e44bf8716581c90dc71 100644
--- a/pycardium/main.c
+++ b/pycardium/main.c
@@ -50,44 +50,41 @@ int main(void)
 	mp_stack_set_top(&__StackTop);
 	mp_stack_set_limit((mp_int_t)&__StackLimit);
 
-	while (1) {
-		gc_init(&__HeapBase + 1024 * 10, &__HeapLimit);
-
-		mp_init();
-
-		readline_init0();
-		interrupt_init0();
-
-		/* request by badge.team */
-		mp_obj_list_init(mp_sys_path, 0);
-		mp_obj_list_append(mp_sys_path, MP_ROM_QSTR(MP_QSTR_));
-		mp_obj_list_append(
-			mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_lib)
-		);
-		mp_obj_list_append(
-			mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_apps)
-		);
-
-		if (cnt > 0) {
-			pyexec_file_if_exists(script_name);
-		}
+	gc_init(&__HeapBase + 1024 * 10, &__HeapLimit);
+
+	mp_init();
+
+	readline_init0();
+	interrupt_init0();
+
+	/* request by badge.team */
+	mp_obj_list_init(mp_sys_path, 0);
+	mp_obj_list_append(mp_sys_path, MP_ROM_QSTR(MP_QSTR_));
+	mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_lib));
+	mp_obj_list_append(mp_sys_path, MP_OBJ_NEW_QSTR(MP_QSTR__slash_apps));
+
+	if (cnt > 0) {
+		pyexec_file_if_exists(script_name);
 
-		epic_uart_write_str(header, sizeof(header));
-
-		for (;;) {
-			if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {
-				if (pyexec_raw_repl() != 0) {
-					break;
-				}
-			} else {
-				if (pyexec_friendly_repl() != 0) {
-					break;
-				}
+		/* Drop to REPL by reloading Pycardium */
+		epic_exec("");
+	}
+
+	for (;;) {
+		if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {
+			if (pyexec_raw_repl() != 0) {
+				break;
+			}
+		} else {
+			if (pyexec_friendly_repl() != 0) {
+				break;
 			}
 		}
-
-		mp_deinit();
 	}
+
+	mp_deinit();
+
+	epic_exit(0);
 }
 
 void HardFault_Handler(void)