diff --git a/py/builtin.c b/py/builtin.c
index f102aa5885adf3edbba022cb873c600f062c6a25..13463ada6974663636b56cdf4c200d9836944391 100644
--- a/py/builtin.c
+++ b/py/builtin.c
@@ -347,3 +347,15 @@ static mp_obj_t mp_builtin_str(mp_obj_t o_in) {
 }
 
 MP_DEFINE_CONST_FUN_OBJ_1(mp_builtin_str_obj, mp_builtin_str);
+
+// TODO: This should be type, this is just quick CPython compat hack
+static mp_obj_t mp_builtin_bytes(uint n_args, const mp_obj_t *args) {
+    if (!MP_OBJ_IS_QSTR(args[0]) && !MP_OBJ_IS_TYPE(args[0], &str_type)) {
+        assert(0);
+    }
+    // Currently, MicroPython strings are mix between CPython byte and unicode
+    // strings. So, conversion is null so far.
+    return args[0];
+}
+
+MP_DEFINE_CONST_FUN_OBJ_VAR_BETWEEN(mp_builtin_bytes_obj, 1, 3, mp_builtin_bytes);
diff --git a/py/builtin.h b/py/builtin.h
index 050a2161c1c01cd62334c35a93c0bc55dd9afc53..4257de5bdbab87b3447e68b6137d2ee8bc0836a5 100644
--- a/py/builtin.h
+++ b/py/builtin.h
@@ -5,6 +5,7 @@ MP_DECLARE_CONST_FUN_OBJ(mp_builtin___repl_print___obj);
 MP_DECLARE_CONST_FUN_OBJ(mp_builtin_abs_obj);
 MP_DECLARE_CONST_FUN_OBJ(mp_builtin_all_obj);
 MP_DECLARE_CONST_FUN_OBJ(mp_builtin_any_obj);
+MP_DECLARE_CONST_FUN_OBJ(mp_builtin_bytes_obj); // Temporary hack
 MP_DECLARE_CONST_FUN_OBJ(mp_builtin_callable_obj);
 MP_DECLARE_CONST_FUN_OBJ(mp_builtin_chr_obj);
 MP_DECLARE_CONST_FUN_OBJ(mp_builtin_divmod_obj);
diff --git a/py/mpqstrraw.h b/py/mpqstrraw.h
index 10b1fc0d395019bc471cdccd506f92966d694249..9bc01c585118f3d6d58022a73b0522b0e05a9a67 100644
--- a/py/mpqstrraw.h
+++ b/py/mpqstrraw.h
@@ -40,6 +40,7 @@ Q(any)
 Q(array)
 Q(bool)
 Q(bytearray)
+Q(bytes)
 Q(callable)
 Q(chr)
 Q(complex)
diff --git a/py/runtime.c b/py/runtime.c
index d8fc3ff6e40eb39f91ed343d4c34ccb363725d0a..72347aff80e4e1dabe85773c0b304931193c3fca 100644
--- a/py/runtime.c
+++ b/py/runtime.c
@@ -130,6 +130,7 @@ void rt_init(void) {
     mp_map_add_qstr(&map_builtins, MP_QSTR_abs, (mp_obj_t)&mp_builtin_abs_obj);
     mp_map_add_qstr(&map_builtins, MP_QSTR_all, (mp_obj_t)&mp_builtin_all_obj);
     mp_map_add_qstr(&map_builtins, MP_QSTR_any, (mp_obj_t)&mp_builtin_any_obj);
+    mp_map_add_qstr(&map_builtins, MP_QSTR_bytes, (mp_obj_t)&mp_builtin_bytes_obj);
     mp_map_add_qstr(&map_builtins, MP_QSTR_callable, (mp_obj_t)&mp_builtin_callable_obj);
     mp_map_add_qstr(&map_builtins, MP_QSTR_chr, (mp_obj_t)&mp_builtin_chr_obj);
     mp_map_add_qstr(&map_builtins, MP_QSTR_divmod, (mp_obj_t)&mp_builtin_divmod_obj);