diff --git a/py/objrange.c b/py/objrange.c
index 64d9245..45f8358 100644
--- a/py/objrange.c
+++ b/py/objrange.c
@@ -5,38 +5,7 @@
 #include "mpconfig.h"
 #include "qstr.h"
 #include "obj.h"
-
-/******************************************************************************/
-/* range                                                                      */
-
-typedef struct _mp_obj_range_t {
-    mp_obj_base_t base;
-    // TODO make these values generic objects or something
-    machine_int_t start;
-    machine_int_t stop;
-    machine_int_t step;
-} mp_obj_range_t;
-
-STATIC mp_obj_t range_getiter(mp_obj_t o_in) {
-    mp_obj_range_t *o = o_in;
-    return mp_obj_new_range_iterator(o->start, o->stop, o->step);
-}
-
-STATIC const mp_obj_type_t range_type = {
-    { &mp_type_type} ,
-    .name = MP_QSTR_range,
-    .getiter = range_getiter,
-};
-
-// range is a class and instances are immutable sequence objects
-mp_obj_t mp_obj_new_range(int start, int stop, int step) {
-    mp_obj_range_t *o = m_new_obj(mp_obj_range_t);
-    o->base.type = &range_type;
-    o->start = start;
-    o->stop = stop;
-    o->step = step;
-    return o;
-}
+#include "runtime.h"
 
 /******************************************************************************/
 /* range iterator                                                             */
@@ -75,3 +44,47 @@
     o->step = step;
     return o;
 }
+
+/******************************************************************************/
+/* range                                                                      */
+
+typedef struct _mp_obj_range_t {
+    mp_obj_base_t base;
+    // TODO make these values generic objects or something
+    machine_int_t start;
+    machine_int_t stop;
+    machine_int_t step;
+} mp_obj_range_t;
+
+STATIC mp_obj_t range_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) {
+    mp_check_nargs(n_args, 1, 3, n_kw, false);
+
+    mp_obj_range_t *o = m_new_obj(mp_obj_range_t);
+    o->base.type = &mp_type_range;
+    o->start = 0;
+    o->step = 1;
+
+    if (n_args == 1) {
+        o->stop = mp_obj_get_int(args[0]);
+    } else {
+        o->start = mp_obj_get_int(args[0]);
+        o->stop = mp_obj_get_int(args[1]);
+        if (n_args == 3) {
+            o->step = mp_obj_get_int(args[2]);
+        }
+    }
+
+    return o;
+}
+
+STATIC mp_obj_t range_getiter(mp_obj_t o_in) {
+    mp_obj_range_t *o = o_in;
+    return mp_obj_new_range_iterator(o->start, o->stop, o->step);
+}
+
+const mp_obj_type_t mp_type_range = {
+    { &mp_type_type },
+    .name = MP_QSTR_range,
+    .make_new = range_make_new,
+    .getiter = range_getiter,
+};
