diff --git a/lib/utils/pyexec.c b/lib/utils/pyexec.c
index aac211894c0c2c1e49550e263fed370db09bc4de..5824e14035b1a5235eb452d55fb5698a4c6bee21 100644
--- a/lib/utils/pyexec.c
+++ b/lib/utils/pyexec.c
@@ -148,7 +148,7 @@ STATIC int pyexec_raw_repl_process_char(int c);
 STATIC int pyexec_friendly_repl_process_char(int c);
 
 void pyexec_event_repl_init(void) {
-    MP_STATE_VM(repl_line) = vstr_new_size(32);
+    MP_STATE_VM(repl_line) = vstr_new(32);
     repl.cont_line = false;
     readline_init(MP_STATE_VM(repl_line), ">>> ");
     if (pyexec_mode_kind == PYEXEC_MODE_RAW_REPL) {
diff --git a/py/misc.h b/py/misc.h
index 3ed227a3525e88899d7d38983bf287ade35103cc..e60665e591e4fb8950253ac7ab8dc7223bf17c85 100644
--- a/py/misc.h
+++ b/py/misc.h
@@ -151,8 +151,7 @@ void vstr_init_fixed_buf(vstr_t *vstr, size_t alloc, char *buf);
 struct _mp_print_t;
 void vstr_init_print(vstr_t *vstr, size_t alloc, struct _mp_print_t *print);
 void vstr_clear(vstr_t *vstr);
-vstr_t *vstr_new(void);
-vstr_t *vstr_new_size(size_t alloc);
+vstr_t *vstr_new(size_t alloc);
 void vstr_free(vstr_t *vstr);
 static inline void vstr_reset(vstr_t *vstr) { vstr->len = 0; }
 static inline char *vstr_str(vstr_t *vstr) { return vstr->buf; }
diff --git a/py/objstringio.c b/py/objstringio.c
index be1a7d89cb90302e58f9b27521c70133a7aedaf1..212d8e314f247b04b5392b57fb5ee99de8c78379 100644
--- a/py/objstringio.c
+++ b/py/objstringio.c
@@ -150,7 +150,7 @@ STATIC MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(stringio___exit___obj, 4, 4, stringio
 STATIC mp_obj_stringio_t *stringio_new(const mp_obj_type_t *type) {
     mp_obj_stringio_t *o = m_new_obj(mp_obj_stringio_t);
     o->base.type = type;
-    o->vstr = vstr_new();
+    o->vstr = vstr_new(16);
     o->pos = 0;
     return o;
 }
diff --git a/py/vstr.c b/py/vstr.c
index 5096475f10414b93bfe678629b6c0b8caa82e4a9..6a91552b5a6bc9f2c86d36c66962273dc20737a9 100644
--- a/py/vstr.c
+++ b/py/vstr.c
@@ -74,20 +74,8 @@ void vstr_clear(vstr_t *vstr) {
     vstr->buf = NULL;
 }
 
-vstr_t *vstr_new(void) {
+vstr_t *vstr_new(size_t alloc) {
     vstr_t *vstr = m_new_obj(vstr_t);
-    if (vstr == NULL) {
-        return NULL;
-    }
-    vstr_init(vstr, 16);
-    return vstr;
-}
-
-vstr_t *vstr_new_size(size_t alloc) {
-    vstr_t *vstr = m_new_obj(vstr_t);
-    if (vstr == NULL) {
-        return NULL;
-    }
     vstr_init(vstr, alloc);
     return vstr;
 }
diff --git a/teensy/main.c b/teensy/main.c
index 890ee81493b6c183290c09b32ba5a5d05aa44f4c..ba7207fe833c81dbf6154b81fcc50a770a1400ac 100644
--- a/teensy/main.c
+++ b/teensy/main.c
@@ -317,7 +317,7 @@ soft_reset:
     pyexec_frozen_module("main.py");
 #else
     {
-        vstr_t *vstr = vstr_new();
+        vstr_t *vstr = vstr_new(16);
         vstr_add_str(vstr, "/");
         if (pyb_config_main == MP_OBJ_NULL) {
             vstr_add_str(vstr, "main.py");
diff --git a/unix/coverage.c b/unix/coverage.c
index c84a653f7566615cd2c416d12a0c089583a0853e..6a1b43fdce4b2198e6f96691c73f856ce7471f7a 100644
--- a/unix/coverage.c
+++ b/unix/coverage.c
@@ -34,7 +34,7 @@ STATIC mp_obj_t extra_coverage(void) {
     // vstr
     {
         mp_printf(&mp_plat_print, "# vstr\n");
-        vstr_t *vstr = vstr_new_size(16);
+        vstr_t *vstr = vstr_new(16);
         vstr_hint_size(vstr, 32);
         vstr_add_str(vstr, "ts");
         vstr_ins_byte(vstr, 1, 'e');