diff --git a/py/obj.c b/py/obj.c
index 7b8be58..e7957e2 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -277,12 +277,10 @@
 
 // is_slice determines whether the index is a slice index
 uint mp_get_index(const mp_obj_type_t *type, machine_uint_t len, mp_obj_t index, bool is_slice) {
-    int i;
-    if (MP_OBJ_IS_INT(index)) {
-        i = mp_obj_int_get_checked(index);
-    } else if (MP_OBJ_IS_TYPE(index, &mp_type_bool)) {
-        i = (index == mp_const_true ? 1 : 0);
-    } else {
+    machine_int_t i;
+    if (MP_OBJ_IS_SMALL_INT(index)) {
+        i = MP_OBJ_SMALL_INT_VALUE(index);
+    } else if (!mp_obj_get_int_maybe(index, &i)) {
         nlr_raise(mp_obj_new_exception_msg_varg(&mp_type_TypeError, "%s indices must be integers, not %s", qstr_str(type->name), mp_obj_get_type_str(index)));
     }
 
diff --git a/py/objstr.c b/py/objstr.c
index 39c2420..e55a2ed 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -220,27 +220,24 @@
 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 (mp_obj_is_integer(rhs_in)) {
-                uint index = mp_get_index(mp_obj_get_type(lhs_in), lhs_len, rhs_in, false);
-                if (MP_OBJ_IS_TYPE(lhs_in, &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_SUBSCR: {
 #if MICROPY_ENABLE_SLICE
-            } else if (MP_OBJ_IS_TYPE(rhs_in, &mp_type_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
-            } else {
-                // Message doesn't match CPython, but we don't have so much bytes as they
-                // to spend them on verbose wording
-                nlr_raise(mp_obj_new_exception_msg(&mp_type_TypeError, "index must be int"));
             }
+#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:
