diff --git a/pycardium/modules/fat_file.c b/pycardium/modules/fat_file.c
index b030466fa407de2da598fbb1f8d1e15754e21378..ce89e32e8061d81fae9cb6159552dc434a6bf3b7 100644
--- a/pycardium/modules/fat_file.c
+++ b/pycardium/modules/fat_file.c
@@ -11,24 +11,7 @@
 #include "py/mperrno.h"
 
 #include "epicardium.h"
-
-#include <strings.h>
-
-bool filename_restricted(const char *fname)
-{
-	// files that cannot be opened in write modes
-	const char *const forbidden_files[] = {
-		"cardio.bin", "menu.py", "main.py", "cardio.cfg"
-	};
-	for (int i = 0;
-	     i < sizeof(forbidden_files) / sizeof(forbidden_files[0]);
-	     i++) {
-		if (strcasecmp(fname, forbidden_files[i]) == 0) {
-			return true;
-		}
-	}
-	return false;
-}
+#include "os.h"
 
 extern const mp_obj_type_t mp_type_textio;
 #if MICROPY_PY_IO_FILEIO
@@ -167,8 +150,8 @@ STATIC mp_obj_t file_open(const mp_obj_type_t *type, mp_arg_val_t *args)
 
 	const char *fname = mp_obj_str_get_str(args[0].u_obj);
 
-	if (potentially_critical_access && filename_restricted(fname)) {
-		mp_raise_OSError(-EPERM);
+	if (potentially_critical_access && pycrd_filename_restricted(fname)) {
+		mp_raise_OSError(-EACCES);
 	}
 
 	int res = epic_file_open(fname, modeString);
diff --git a/pycardium/modules/os.c b/pycardium/modules/os.c
index a693420b18979e8e1b835c85c71a943dd3c1ac9c..0bbfc05cf22512f358a838a74fa16ac29e954bd8 100644
--- a/pycardium/modules/os.c
+++ b/pycardium/modules/os.c
@@ -4,6 +4,27 @@
 #include "py/runtime.h"
 
 #include <string.h>
+#include <strings.h>
+
+#include <stdbool.h>
+
+#include "os.h"
+
+bool pycrd_filename_restricted(const char *fname)
+{
+	// files that cannot be opened in write modes
+	const char *const forbidden_files[] = {
+		"card10.bin", "menu.py", "main.py", "card10.cfg"
+	};
+	for (int i = 0;
+	     i < sizeof(forbidden_files) / sizeof(forbidden_files[0]);
+	     i++) {
+		if (strcasecmp(fname, forbidden_files[i]) == 0) {
+			return true;
+		}
+	}
+	return false;
+}
 
 static mp_obj_t mp_os_exit(size_t n_args, const mp_obj_t *args)
 {
@@ -89,7 +110,10 @@ static MP_DEFINE_CONST_FUN_OBJ_1(listdir_obj, mp_os_listdir);
 static mp_obj_t mp_os_unlink(mp_obj_t py_path)
 {
 	const char *path = mp_obj_str_get_str(py_path);
-	int rc           = epic_file_unlink(path);
+	if (pycrd_filename_restricted(path)) {
+		mp_raise_OSError(-EACCES);
+	}
+	int rc = epic_file_unlink(path);
 
 	if (rc < 0) {
 		mp_raise_OSError(-rc);
@@ -114,7 +138,11 @@ static mp_obj_t mp_os_rename(mp_obj_t py_oldp, mp_obj_t py_newp)
 {
 	const char *oldp = mp_obj_str_get_str(py_oldp);
 	const char *newp = mp_obj_str_get_str(py_newp);
-	int rc           = epic_file_rename(oldp, newp);
+	if (pycrd_filename_restricted(oldp) ||
+	    pycrd_filename_restricted(newp)) {
+		mp_raise_OSError(-EACCES);
+	}
+	int rc = epic_file_rename(oldp, newp);
 
 	if (rc < 0) {
 		mp_raise_OSError(-rc);
@@ -141,7 +169,7 @@ static mp_obj_t mp_os_urandom(mp_obj_t size_in)
 	vstr_t vstr;
 
 	vstr_init_len(&vstr, size);
-	epic_trng_read((uint8_t*)vstr.buf, size);
+	epic_trng_read((uint8_t *)vstr.buf, size);
 
 	return mp_obj_new_str_from_vstr(&mp_type_bytes, &vstr);
 }
diff --git a/pycardium/modules/os.h b/pycardium/modules/os.h
new file mode 100644
index 0000000000000000000000000000000000000000..ac9c728997d8f24baaf993c2bfaf1fc00312db6a
--- /dev/null
+++ b/pycardium/modules/os.h
@@ -0,0 +1,6 @@
+#ifndef PYCARDIUM_MODULES_OS_H_INCLUDED
+#define PYCARDIUM_MODULES_OS_H_INCLUDED
+
+bool pycrd_filename_restricted(const char *fname);
+
+#endif//PYCARDIUM_MODULES_OS_H_INCLUDED