diff --git a/py/builtinimport.c b/py/builtinimport.c
index 1717c50..3fd517e 100644
--- a/py/builtinimport.c
+++ b/py/builtinimport.c
@@ -61,15 +61,13 @@
 }
 
 STATIC mp_import_stat_t stat_dir_or_file(vstr_t *path) {
-    vstr_null_terminate(path);
     //printf("stat %s\n", vstr_str(path));
-    mp_import_stat_t stat = mp_import_stat(vstr_str(path));
+    mp_import_stat_t stat = mp_import_stat(vstr_null_terminated_str(path));
     if (stat == MP_IMPORT_STAT_DIR) {
         return stat;
     }
     vstr_add_str(path, ".py");
-    vstr_null_terminate(path);
-    stat = mp_import_stat(vstr_str(path));
+    stat = mp_import_stat(vstr_null_terminated_str(path));
     if (stat == MP_IMPORT_STAT_FILE) {
         return stat;
     }
@@ -136,9 +134,9 @@
 
 STATIC void do_load(mp_obj_t module_obj, vstr_t *file) {
     // create the lexer
-    vstr_null_terminate(file);
-    mp_lexer_t *lex = mp_lexer_new_from_file(vstr_str(file));
-    do_load_from_lexer(module_obj, lex, vstr_str(file));
+    char *file_str = vstr_null_terminated_str(file);
+    mp_lexer_t *lex = mp_lexer_new_from_file(file_str);
+    do_load_from_lexer(module_obj, lex, file_str);
 }
 
 mp_obj_t mp_builtin___import__(mp_uint_t n_args, const mp_obj_t *args) {
@@ -329,8 +327,7 @@
                     mp_store_attr(module_obj, MP_QSTR___path__, mp_obj_new_str(vstr_str(&path), vstr_len(&path), false));
                     vstr_add_char(&path, PATH_SEP_CHAR);
                     vstr_add_str(&path, "__init__.py");
-                    vstr_null_terminate(&path);
-                    if (mp_import_stat(vstr_str(&path)) != MP_IMPORT_STAT_FILE) {
+                    if (mp_import_stat(vstr_null_terminated_str(&path)) != MP_IMPORT_STAT_FILE) {
                         vstr_cut_tail_bytes(&path, sizeof("/__init__.py") - 1); // cut off /__init__.py
                         mp_warning("%s is imported as namespace package", vstr_str(&path));
                     } else {
diff --git a/py/misc.h b/py/misc.h
index 202fad8..1d40e34 100644
--- a/py/misc.h
+++ b/py/misc.h
@@ -145,7 +145,7 @@
 void vstr_hint_size(vstr_t *vstr, size_t size);
 char *vstr_extend(vstr_t *vstr, size_t size);
 char *vstr_add_len(vstr_t *vstr, size_t len);
-void vstr_null_terminate(vstr_t *vstr);
+char *vstr_null_terminated_str(vstr_t *vstr);
 void vstr_add_byte(vstr_t *vstr, byte v);
 void vstr_add_char(vstr_t *vstr, unichar chr);
 void vstr_add_str(vstr_t *vstr, const char *str);
diff --git a/py/objstr.c b/py/objstr.c
index 1540e62..43de047 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -856,7 +856,6 @@
             while (str < top && *str != '}' && *str != '!' && *str != ':') {
                 vstr_add_char(field_name, *str++);
             }
-            vstr_null_terminate(field_name);
         }
 
         // conversion ::=  "r" | "s"
@@ -887,7 +886,6 @@
                 while (str < top && *str != '}') {
                     vstr_add_char(format_spec, *str++);
                 }
-                vstr_null_terminate(format_spec);
             }
         }
         if (str >= top) {
@@ -911,7 +909,7 @@
 
         if (field_name) {
             int index = 0;
-            const char *field = vstr_str(field_name);
+            const char *field = vstr_null_terminated_str(field_name);
             const char *lookup = NULL;
             if (MP_LIKELY(unichar_isdigit(*field))) {
                 if (arg_i > 0) {
@@ -999,7 +997,7 @@
             // precision   ::=  integer
             // type        ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
 
-            const char *s = vstr_str(format_spec);
+            const char *s = vstr_null_terminated_str(format_spec);
             if (isalignment(*s)) {
                 align = *s++;
             } else if (*s && isalignment(s[1])) {
diff --git a/py/vstr.c b/py/vstr.c
index ccd54d5..953e8ed 100644
--- a/py/vstr.c
+++ b/py/vstr.c
@@ -172,11 +172,12 @@
 }
 
 // Doesn't increase len, just makes sure there is a null byte at the end
-void vstr_null_terminate(vstr_t *vstr) {
+char *vstr_null_terminated_str(vstr_t *vstr) {
     if (vstr->had_error || !vstr_ensure_extra(vstr, 1)) {
-        return;
+        return NULL;
     }
     vstr->buf[vstr->len] = '\0';
+    return vstr->buf;
 }
 
 void vstr_add_byte(vstr_t *vstr, byte b) {
