diff --git a/py/objstr.c b/py/objstr.c
index fb170f83c9d896ea70b38aca532b02e504262073..35bb8e749cd8ceb1dbea3de47d295e0bc38155b9 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -370,7 +370,8 @@ STATIC mp_obj_t bytes_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
         }
 #endif
         mp_uint_t index_val = mp_get_index(type, self_len, index, false);
-        if (type == &mp_type_bytes) {
+        // If we have unicode enabled the type will always be bytes, so take the short cut.
+        if (MICROPY_PY_BUILTINS_STR_UNICODE || type == &mp_type_bytes) {
             return MP_OBJ_NEW_SMALL_INT(self_data[index_val]);
         } else {
             return mp_obj_new_str((char*)&self_data[index_val], 1, true);