diff --git a/py/vm.c b/py/vm.c
index 710fd125356ce1caf56709f55ef597fd426f697b..60ed641a8595155bf016961e6e7734ca7c8620b5 100644
--- a/py/vm.c
+++ b/py/vm.c
@@ -415,8 +415,8 @@ unwind_jump:
                         // if TOS is None, just pops it and continues
                         // if TOS is an integer, does something else
                         // else error
-                        if (mp_obj_is_exception_instance(TOP())) {
-                            nlr_jump(TOP());
+                        if (mp_obj_is_exception_type(TOP())) {
+                            nlr_jump(sp[-1]);
                         }
                         if (TOP() == mp_const_none) {
                             sp--;
@@ -716,7 +716,7 @@ unwind_return:
                 // push(traceback, exc-val, exc-type)
                 PUSH(mp_const_none);
                 PUSH(nlr.ret_val);
-                PUSH(nlr.ret_val); // TODO should be type(nlr.ret_val), I think...
+                PUSH(mp_obj_get_type(nlr.ret_val));
 
             } else {
                 // propagate exception to higher level