diff --git a/py/objstr.c b/py/objstr.c
index 7de42b6..b9ca8a8 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -214,25 +214,6 @@
 STATIC mp_obj_t str_binary_op(int op, mp_obj_t lhs_in, mp_obj_t rhs_in) {
     GET_STR_DATA_LEN(lhs_in, lhs_data, lhs_len);
     switch (op) {
-        case MP_BINARY_OP_SUBSCR: {
-#if MICROPY_ENABLE_SLICE
-            if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_slice)) {
-                machine_uint_t start, stop;
-                if (!m_seq_get_fast_slice_indexes(lhs_len, rhs_in, &start, &stop)) {
-                    assert(0);
-                }
-                return mp_obj_new_str(lhs_data + start, stop - start, false);
-            }
-#endif
-            mp_obj_type_t *type = mp_obj_get_type(lhs_in);
-            uint index = mp_get_index(type, lhs_len, rhs_in, false);
-            if (type == &mp_type_bytes) {
-                return MP_OBJ_NEW_SMALL_INT((mp_small_int_t)lhs_data[index]);
-            } else {
-                return mp_obj_new_str(lhs_data + index, 1, true);
-            }
-        }
-
         case MP_BINARY_OP_ADD:
         case MP_BINARY_OP_INPLACE_ADD:
             if (MP_OBJ_IS_STR(rhs_in)) {
@@ -307,6 +288,31 @@
     return MP_OBJ_NULL; // op not supported
 }
 
+STATIC mp_obj_t str_subscr(mp_obj_t self_in, mp_obj_t index, mp_obj_t value) {
+    GET_STR_DATA_LEN(self_in, self_data, self_len);
+    if (value == MP_OBJ_SENTINEL) {
+        // load
+#if MICROPY_ENABLE_SLICE
+        if (MP_OBJ_IS_TYPE(index, &mp_type_slice)) {
+            machine_uint_t start, stop;
+            if (!m_seq_get_fast_slice_indexes(self_len, index, &start, &stop)) {
+                assert(0);
+            }
+            return mp_obj_new_str(self_data + start, stop - start, false);
+        }
+#endif
+        mp_obj_type_t *type = mp_obj_get_type(self_in);
+        uint index_val = mp_get_index(type, self_len, index, false);
+        if (type == &mp_type_bytes) {
+            return MP_OBJ_NEW_SMALL_INT((mp_small_int_t)self_data[index_val]);
+        } else {
+            return mp_obj_new_str(self_data + index_val, 1, true);
+        }
+    } else {
+        return MP_OBJ_NOT_SUPPORTED;
+    }
+}
+
 STATIC mp_obj_t str_join(mp_obj_t self_in, mp_obj_t arg) {
     assert(MP_OBJ_IS_STR(self_in));
 
@@ -1380,6 +1386,7 @@
     .print = str_print,
     .make_new = str_make_new,
     .binary_op = str_binary_op,
+    .subscr = str_subscr,
     .getiter = mp_obj_new_str_iterator,
     .buffer_p = { .get_buffer = str_get_buffer },
     .locals_dict = (mp_obj_t)&str_locals_dict,
@@ -1392,6 +1399,7 @@
     .print = str_print,
     .make_new = bytes_make_new,
     .binary_op = str_binary_op,
+    .subscr = str_subscr,
     .getiter = mp_obj_new_bytes_iterator,
     .buffer_p = { .get_buffer = str_get_buffer },
     .locals_dict = (mp_obj_t)&str_locals_dict,
