diff --git a/.travis.yml b/.travis.yml
index 5d9a383c168b1e56efc116f402d49dd6b3594b50..c598783f44039ebd8ff00291f33e9005b585d5bc 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -35,8 +35,6 @@ script:
   - make -C unix CC=gcc-4.7 coverage
   - (cd tests && MICROPY_CPYTHON3=python3.4 MICROPY_MICROPYTHON=../unix/micropython_coverage ./run-tests)
   - (cd tests && MICROPY_CPYTHON3=python3.4 MICROPY_MICROPYTHON=../unix/micropython_coverage ./run-tests --emit native)
-  # TODO the output of this extra coverage test is not checked
-  - unix/micropython_coverage --coverage
 
 after_success:
   - (cd unix && coveralls --root .. --build-root . --gcov $(which gcov-4.7) --gcov-options '\-o build-coverage/' --include py --include extmod)
diff --git a/tests/unix/extra_coverage.py b/tests/unix/extra_coverage.py
new file mode 100644
index 0000000000000000000000000000000000000000..8f330f1da2a99c420bbb1dd75b02d1135b19e4de
--- /dev/null
+++ b/tests/unix/extra_coverage.py
@@ -0,0 +1,8 @@
+try:
+    extra_coverage
+except NameError:
+    print("SKIP")
+    import sys
+    sys.exit()
+
+extra_coverage()
diff --git a/tests/unix/extra_coverage.py.exp b/tests/unix/extra_coverage.py.exp
new file mode 100644
index 0000000000000000000000000000000000000000..565b0dd04078f6f83b3ca6b4d45433b10d69c056
--- /dev/null
+++ b/tests/unix/extra_coverage.py.exp
@@ -0,0 +1,7 @@
+ame__
+
+__name__        path            argv            version
+version_info    implementation  platform        byteorder
+maxsize         exit            stdin           stdout
+stderr          exc_info        print_exception
+ementation
diff --git a/unix/coverage.c b/unix/coverage.c
index 48dbfd5c7c1563c30f70efeb3cdf058b4be7f4f4..bc66ec3f11a1d6bd5dbef333323b9882d7540352 100644
--- a/unix/coverage.c
+++ b/unix/coverage.c
@@ -7,13 +7,11 @@
 #if defined(MICROPY_UNIX_COVERAGE)
 
 // function to run extra tests for things that can't be checked by scripts
-void run_extra_coverage_tests(void);
-
-void run_extra_coverage_tests(void) {
+STATIC mp_obj_t extra_coverage(void) {
     // repl autocomplete
     {
         const char *str;
-        mp_uint_t len = mp_repl_autocomplete("__", 2, &mp_plat_print, &str);
+        mp_uint_t len = mp_repl_autocomplete("__n", 3, &mp_plat_print, &str);
         printf("%.*s\n", (int)len, str);
 
         mp_store_global(MP_QSTR_sys, mp_import_name(MP_QSTR_sys, mp_const_none, MP_OBJ_NEW_SMALL_INT(0)));
@@ -21,6 +19,9 @@ void run_extra_coverage_tests(void) {
         len = mp_repl_autocomplete("sys.impl", 8, &mp_plat_print, &str);
         printf("%.*s\n", (int)len, str);
     }
+
+    return mp_const_none;
 }
+MP_DEFINE_CONST_FUN_OBJ_0(extra_coverage_obj, extra_coverage);
 
 #endif
diff --git a/unix/main.c b/unix/main.c
index abea15728676763078dea181903348dfd35445b8..9794f608365c0ea0343e5a7995efcc261b4700a4 100644
--- a/unix/main.c
+++ b/unix/main.c
@@ -356,6 +356,13 @@ int main(int argc, char **argv) {
 
     mp_obj_list_init(mp_sys_argv, 0);
 
+    #if defined(MICROPY_UNIX_COVERAGE)
+    {
+        MP_DECLARE_CONST_FUN_OBJ(extra_coverage_obj);
+        mp_store_global(QSTR_FROM_STR_STATIC("extra_coverage"), (mp_obj_t)&extra_coverage_obj);
+    }
+    #endif
+
     // Here is some example code to create a class and instance of that class.
     // First is the Python, then the C code.
     //
@@ -434,12 +441,6 @@ int main(int argc, char **argv) {
                     MP_STATE_VM(mp_optimise_value) = 0;
                     for (char *p = argv[a] + 1; *p && *p == 'O'; p++, MP_STATE_VM(mp_optimise_value)++);
                 }
-            #if defined(MICROPY_UNIX_COVERAGE)
-            } else if (strcmp(argv[a], "--coverage") == 0) {
-                void run_extra_coverage_tests(void);
-                run_extra_coverage_tests();
-                ret = 0;
-            #endif
             } else {
                 return usage(argv);
             }