diff --git a/py/emitnative.c b/py/emitnative.c
index 34df2e034cce2b3b9a1f8b1bb9b336824f22d2d2..974b8fc7b5bf75e67cd964891e4730ad8bbc0c52 100644
--- a/py/emitnative.c
+++ b/py/emitnative.c
@@ -167,7 +167,6 @@
 STATIC byte mp_f_n_args[MP_F_NUMBER_OF] = {
     [MP_F_CONVERT_OBJ_TO_NATIVE] = 2,
     [MP_F_CONVERT_NATIVE_TO_OBJ] = 2,
-    [MP_F_LOAD_CONST_STR] = 1,
     [MP_F_LOAD_CONST_BYTES] = 1,
     [MP_F_LOAD_NAME] = 1,
     [MP_F_LOAD_GLOBAL] = 1,
@@ -1311,10 +1310,10 @@ STATIC void emit_native_load_const_str(emit_t *emit, qstr qst, bool bytes) {
     {
         if (bytes) {
             emit_call_with_imm_arg(emit, MP_F_LOAD_CONST_BYTES, qst, REG_ARG_1);
+            emit_post_push_reg(emit, VTYPE_PYOBJ, REG_RET);
         } else {
-            emit_call_with_imm_arg(emit, MP_F_LOAD_CONST_STR, qst, REG_ARG_1);
+            emit_post_push_imm(emit, VTYPE_PYOBJ, (mp_uint_t)MP_OBJ_NEW_QSTR(qst));
         }
-        emit_post_push_reg(emit, VTYPE_PYOBJ, REG_RET);
     }
 }
 
diff --git a/py/nativeglue.c b/py/nativeglue.c
index d0896eedd3ceef53fef6d8a067213e0de1c5716f..4252bb88cdc10fe2df31906d5323baee88c251f7 100644
--- a/py/nativeglue.c
+++ b/py/nativeglue.c
@@ -92,7 +92,6 @@ void mp_native_raise(mp_obj_t o) {
 void *const mp_fun_table[MP_F_NUMBER_OF] = {
     mp_convert_obj_to_native,
     mp_convert_native_to_obj,
-    mp_load_const_str,
     mp_load_const_bytes,
     mp_load_name,
     mp_load_global,
diff --git a/py/runtime.c b/py/runtime.c
index 4959617eff6b12275c90e3b73a923ea173dd30ce..5fcfa6f905dded9b458d1e27b439827a54f87ac6 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -104,11 +104,6 @@ void mp_deinit(void) {
 #endif
 }
 
-mp_obj_t mp_load_const_str(qstr qst) {
-    DEBUG_OP_printf("load '%s'\n", qstr_str(qst));
-    return MP_OBJ_NEW_QSTR(qst);
-}
-
 mp_obj_t mp_load_const_bytes(qstr qst) {
     DEBUG_OP_printf("load b'%s'\n", qstr_str(qst));
     mp_uint_t len;
diff --git a/py/runtime.h b/py/runtime.h
index d171f1582c63d02721d847880c700ae2fda74fb6..419b1d059b8299fa1359d8944f96600f4d3a2372 100644
--- a/py/runtime.h
+++ b/py/runtime.h
@@ -90,7 +90,6 @@ mp_obj_t mp_binary_op(mp_uint_t op, mp_obj_t lhs, mp_obj_t rhs);
 
 mp_obj_t mp_load_const_int(qstr qst);
 mp_obj_t mp_load_const_dec(qstr qst);
-mp_obj_t mp_load_const_str(qstr qst);
 mp_obj_t mp_load_const_bytes(qstr qst);
 
 mp_obj_t mp_call_function_0(mp_obj_t fun);
diff --git a/py/runtime0.h b/py/runtime0.h
index cdcb6e3dca2398b7080d54223fa150de6f7a3eb8..de637fb469e33a4ec7970402fe05379fe5be60d4 100644
--- a/py/runtime0.h
+++ b/py/runtime0.h
@@ -109,7 +109,6 @@ typedef enum {
 typedef enum {
     MP_F_CONVERT_OBJ_TO_NATIVE = 0,
     MP_F_CONVERT_NATIVE_TO_OBJ,
-    MP_F_LOAD_CONST_STR,
     MP_F_LOAD_CONST_BYTES,
     MP_F_LOAD_NAME,
     MP_F_LOAD_GLOBAL,
diff --git a/py/vm.c b/py/vm.c
index d6ff15356e7c7210fde70e5c7cc75077c5b7d76c..3423e9e5c5abfc167f5c475eaa694e17a9f91585 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -213,7 +213,7 @@ dispatch_loop:
 
                 ENTRY(MP_BC_LOAD_CONST_STRING): {
                     DECODE_QSTR;
-                    PUSH(mp_load_const_str(qst));
+                    PUSH(MP_OBJ_NEW_QSTR(qst));
                     DISPATCH();
                 }