diff --git a/py/argcheck.c b/py/argcheck.c
index bb26bd3aead5f728dfffc6251105448966268be6..8343d7b279dc958fa0c25ab194aa63bb472e287d 100644
--- a/py/argcheck.c
+++ b/py/argcheck.c
@@ -109,3 +109,10 @@ void mp_arg_parse_all_kw_array(uint n_pos, uint n_kw, const mp_obj_t *args, uint
     mp_map_init_fixed_table(&kw_args, n_kw, args + n_pos);
     mp_arg_parse_all(n_pos, args, &kw_args, n_allowed, allowed, out_vals);
 }
+
+#if MICROPY_CPYTHON_COMPAT
+NORETURN void mp_arg_error_unimpl_kw(void) {
+    nlr_raise(mp_obj_new_exception_msg(&mp_type_NotImplementedError,
+        "keyword argument(s) not yet implemented - use normal args instead"));
+}
+#endif
diff --git a/py/objenumerate.c b/py/objenumerate.c
index 611b9b52e1faef8cfe864dcc517b3d5ffd47f895..7d9ea9915a006998a7568a7d04f52862b89d52e2 100644
--- a/py/objenumerate.c
+++ b/py/objenumerate.c
@@ -48,6 +48,7 @@ STATIC const mp_arg_t enumerate_make_new_args[] = {
 #define ENUMERATE_MAKE_NEW_NUM_ARGS ARRAY_SIZE(enumerate_make_new_args)
 
 STATIC mp_obj_t enumerate_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) {
+#if MICROPY_CPYTHON_COMPAT
     // parse args
     mp_arg_val_t vals[ENUMERATE_MAKE_NEW_NUM_ARGS];
     mp_arg_parse_all_kw_array(n_args, n_kw, args, ENUMERATE_MAKE_NEW_NUM_ARGS, enumerate_make_new_args, vals);
@@ -57,6 +58,12 @@ STATIC mp_obj_t enumerate_make_new(mp_obj_t type_in, uint n_args, uint n_kw, con
     o->base.type = &mp_type_enumerate;
     o->iter = mp_getiter(vals[0].u_obj);
     o->cur = vals[1].u_int;
+#else
+    mp_obj_enumerate_t *o = m_new_obj(mp_obj_enumerate_t);
+    o->base.type = &mp_type_enumerate;
+    o->iter = mp_getiter(args[0]);
+    o->cur = n_args > 1 ? mp_obj_get_int(args[1]) : 0;
+#endif
 
     return o;
 }
diff --git a/py/objstr.c b/py/objstr.c
index 52520139a6739bb4a5dfd55f1afe1a31737cf9e4..f2f8063d0bb681928a32319b981f0f271e1b37a2 100644
--- a/py/objstr.c
+++ b/py/objstr.c
@@ -108,6 +108,12 @@ STATIC void str_print(void (*print)(void *env, const char *fmt, ...), void *env,
 }
 
 STATIC mp_obj_t str_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const mp_obj_t *args) {
+#if MICROPY_CPYTHON_COMPAT
+    if (n_kw != 0) {
+        mp_arg_error_unimpl_kw();
+    }
+#endif
+
     switch (n_args) {
         case 0:
             return MP_OBJ_NEW_QSTR(MP_QSTR_);
@@ -146,6 +152,12 @@ STATIC mp_obj_t bytes_make_new(mp_obj_t type_in, uint n_args, uint n_kw, const m
         return mp_const_empty_bytes;
     }
 
+#if MICROPY_CPYTHON_COMPAT
+    if (n_kw != 0) {
+        mp_arg_error_unimpl_kw();
+    }
+#endif
+
     if (MP_OBJ_IS_STR(args[0])) {
         if (n_args < 2 || n_args > 3) {
             goto wrong_args;
diff --git a/py/runtime.h b/py/runtime.h
index 719481264fc06b526245704fc2430dd86a812713..910a48544692db426392aea6dd094dbf1dca16ea 100644
--- a/py/runtime.h
+++ b/py/runtime.h
@@ -57,6 +57,7 @@ void mp_deinit(void);
 void mp_arg_check_num(uint n_args, uint n_kw, uint n_args_min, uint n_args_max, bool takes_kw);
 void mp_arg_parse_all(uint n_pos, const mp_obj_t *pos, mp_map_t *kws, uint n_allowed, const mp_arg_t *allowed, mp_arg_val_t *out_vals);
 void mp_arg_parse_all_kw_array(uint n_pos, uint n_kw, const mp_obj_t *args, uint n_allowed, const mp_arg_t *allowed, mp_arg_val_t *out_vals);
+NORETURN void mp_arg_error_unimpl_kw(void);
 
 mp_obj_dict_t *mp_locals_get(void);
 void mp_locals_set(mp_obj_dict_t *d);