diff --git a/unix/main.c b/unix/main.c
index 6b25988..ffbdbb7 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -85,7 +85,7 @@
     // execute it
     nlr_buf_t nlr;
     if (nlr_push(&nlr) == 0) {
-        rt_call_function_0(module_fun);
+        mp_call_function_0(module_fun);
         nlr_pop();
     } else {
         // uncaught exception
@@ -278,7 +278,7 @@
 #endif
 
     qstr_init();
-    rt_init();
+    mp_init();
 
     char *home = getenv("HOME");
     char *path = getenv("MICROPYPATH");
@@ -292,9 +292,9 @@
             p++;
         }
     }
-    sys_path = mp_obj_new_list(path_num, NULL);
+    mp_sys_path = mp_obj_new_list(path_num, NULL);
     mp_obj_t *path_items;
-    mp_obj_list_get(sys_path, &path_num, &path_items);
+    mp_obj_list_get(mp_sys_path, &path_num, &path_items);
     path_items[0] = MP_OBJ_NEW_QSTR(MP_QSTR_);
     char *p = path;
     for (int i = 1; i < path_num; i++) {
@@ -315,15 +315,15 @@
     }
 
     mp_obj_t m_sys = mp_obj_new_module(MP_QSTR_sys);
-    rt_store_attr(m_sys, MP_QSTR_path, sys_path);
+    mp_store_attr(m_sys, MP_QSTR_path, mp_sys_path);
     mp_obj_t py_argv = mp_obj_new_list(0, NULL);
-    rt_store_attr(m_sys, MP_QSTR_argv, py_argv);
+    mp_store_attr(m_sys, MP_QSTR_argv, py_argv);
 
-    rt_store_name(qstr_from_str("test"), test_obj_new(42));
-    rt_store_name(qstr_from_str("mem_info"), rt_make_function_n(0, mem_info));
-    rt_store_name(qstr_from_str("qstr_info"), rt_make_function_n(0, qstr_info));
+    mp_store_name(qstr_from_str("test"), test_obj_new(42));
+    mp_store_name(qstr_from_str("mem_info"), mp_make_function_n(0, mem_info));
+    mp_store_name(qstr_from_str("qstr_info"), mp_make_function_n(0, qstr_info));
 #if MICROPY_ENABLE_GC
-    rt_store_name(qstr_from_str("gc"), (mp_obj_t)&pyb_gc_obj);
+    mp_store_name(qstr_from_str("gc"), (mp_obj_t)&pyb_gc_obj);
 #endif
 
     file_init();
@@ -344,8 +344,8 @@
     // test_obj.attr = 42
     mp_obj_t test_class_type, test_class_instance;
     test_class_type = mp_obj_new_type(QSTR_FROM_STR_STATIC("TestClass"), mp_const_empty_tuple, mp_obj_new_dict(0));
-    rt_store_name(QSTR_FROM_STR_STATIC("test_obj"), test_class_instance = rt_call_function_0(test_class_type));
-    rt_store_attr(test_class_instance, QSTR_FROM_STR_STATIC("attr"), mp_obj_new_int(42));
+    mp_store_name(QSTR_FROM_STR_STATIC("test_obj"), test_class_instance = mp_call_function_0(test_class_type));
+    mp_store_attr(test_class_instance, QSTR_FROM_STR_STATIC("attr"), mp_obj_new_int(42));
 
     /*
     printf("bytes:\n");
@@ -378,7 +378,7 @@
                 free(basedir);
             }
             for (int i = a; i < argc; i++) {
-                rt_list_append(py_argv, MP_OBJ_NEW_QSTR(qstr_from_str(argv[i])));
+                mp_list_append(py_argv, MP_OBJ_NEW_QSTR(qstr_from_str(argv[i])));
             }
             do_file(argv[a]);
             executed = true;
@@ -390,7 +390,7 @@
         do_repl();
     }
 
-    rt_deinit();
+    mp_deinit();
 
     //printf("total bytes = %d\n", m_get_total_bytes_allocated());
     return 0;
