diff --git a/py/builtin.c b/py/builtin.c
index 67b0e46a66135c915165d4301a92d9f511356cb6..145bc65b14c10ced19e973e80532e4e75590ca9a 100644
--- a/py/builtin.c
+++ b/py/builtin.c
@@ -231,7 +231,7 @@ STATIC mp_obj_t mp_builtin_max(uint n_args, const mp_obj_t *args) {
         mp_obj_t max_obj = NULL;
         mp_obj_t item;
         while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) {
-            if (max_obj == NULL || mp_obj_less(max_obj, item)) {
+            if (max_obj == NULL || mp_binary_op(MP_BINARY_OP_LESS, max_obj, item)) {
                 max_obj = item;
             }
         }
@@ -243,7 +243,7 @@ STATIC mp_obj_t mp_builtin_max(uint n_args, const mp_obj_t *args) {
         // given many args
         mp_obj_t max_obj = args[0];
         for (int i = 1; i < n_args; i++) {
-            if (mp_obj_less(max_obj, args[i])) {
+            if (mp_binary_op(MP_BINARY_OP_LESS, max_obj, args[i])) {
                 max_obj = args[i];
             }
         }
@@ -260,7 +260,7 @@ STATIC mp_obj_t mp_builtin_min(uint n_args, const mp_obj_t *args) {
         mp_obj_t min_obj = NULL;
         mp_obj_t item;
         while ((item = mp_iternext(iterable)) != MP_OBJ_NULL) {
-            if (min_obj == NULL || mp_obj_less(item, min_obj)) {
+            if (min_obj == NULL || mp_binary_op(MP_BINARY_OP_LESS, item, min_obj)) {
                 min_obj = item;
             }
         }
@@ -272,7 +272,7 @@ STATIC mp_obj_t mp_builtin_min(uint n_args, const mp_obj_t *args) {
         // given many args
         mp_obj_t min_obj = args[0];
         for (int i = 1; i < n_args; i++) {
-            if (mp_obj_less(args[i], min_obj)) {
+            if (mp_binary_op(MP_BINARY_OP_LESS, args[i], min_obj)) {
                 min_obj = args[i];
             }
         }
diff --git a/py/obj.c b/py/obj.c
index bf3e1d50e17b340a74bbe63e7f19ffe261f41d85..e177782a8b1ef32076432382787e0277b33ef625 100644
--- a/py/obj.c
+++ b/py/obj.c
@@ -178,17 +178,6 @@ bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2) {
     }
 }
 
-bool mp_obj_less(mp_obj_t o1, mp_obj_t o2) {
-    if (MP_OBJ_IS_SMALL_INT(o1) && MP_OBJ_IS_SMALL_INT(o2)) {
-        mp_small_int_t i1 = MP_OBJ_SMALL_INT_VALUE(o1);
-        mp_small_int_t i2 = MP_OBJ_SMALL_INT_VALUE(o2);
-        return i1 < i2;
-    } else {
-        assert(0);
-        return false;
-    }
-}
-
 machine_int_t mp_obj_get_int(mp_obj_t arg) {
     if (arg == mp_const_false) {
         return 0;
diff --git a/py/obj.h b/py/obj.h
index fe3c14d11624415e171cde9c1572c102af608100..82b7bdadd82665e3b949433c31293efba7a51805 100644
--- a/py/obj.h
+++ b/py/obj.h
@@ -357,7 +357,6 @@ int mp_obj_is_true(mp_obj_t arg);
 bool mp_obj_is_callable(mp_obj_t o_in);
 machine_int_t mp_obj_hash(mp_obj_t o_in);
 bool mp_obj_equal(mp_obj_t o1, mp_obj_t o2);
-bool mp_obj_less(mp_obj_t o1, mp_obj_t o2);
 
 machine_int_t mp_obj_get_int(mp_obj_t arg);
 bool mp_obj_get_int_maybe(mp_obj_t arg, machine_int_t *value);