diff --git a/src/utils.c b/src/utils.c
index 2ec9601..6307c88 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -2544,3 +2544,42 @@ test_dir_matches_p()
 
 #endif /* TESTING */
 
+#ifdef WINDOWS 
+/* For UTF-8 in Windows support. Replacement standart fopen() utime() stat() lstat() mkdir() with wide character 
+analogs route. w_fopen() declared in utils.h, w_utime(), w_stat() and w_mkdir - in utils.c */
+
+int 
+w_utime (unsigned char *filename, struct _utimbuf *times)
+{
+  wchar_t *w_filename;
+  int buffer_size = 1024;
+  w_filename = malloc (buffer_size);
+  MultiByteToWideChar(65001, 0, filename, -1, w_filename, buffer_size);
+  int res = _wutime (w_filename, times);
+  free (w_filename);
+  return res;
+}
+
+int 
+w_stat (const char *filename, struct_stat *buffer )
+{
+  wchar_t *w_filename;
+  int buffer_size = 1024; /* I cant push it to work with strlen() */
+  w_filename = malloc (buffer_size);
+  MultiByteToWideChar(65001, 0, filename, -1, w_filename, buffer_size);
+  int res = _wstati64 (w_filename, buffer);
+  free (w_filename);
+  return res;
+}
+
+int w_mkdir(const char *dirname)
+{
+  wchar_t *w_dirname;
+  int buffer_size = 1024;
+  w_dirname = malloc (buffer_size);
+  MultiByteToWideChar(65001, 0, dirname, -1, w_dirname, buffer_size);
+  int res = _wmkdir (w_dirname);
+  free (w_dirname);
+  return res;
+}
+#endif /* WINDOWS */
diff --git a/src/utils.h b/src/utils.h
index 7c6f2ce..dddce60 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -158,4 +158,31 @@ size_t get_max_length (const char *path, int length, int name);
 
 extern unsigned char char_prop[];
 
+#ifdef WINDOWS  
+/* For UTF-8 in Windows support. Replacement standart fopen() utime() stat() lstat() with wide character 
+analogs route. w_fopen() declared in utils.h, w_utime(), w_stat - in utils.c */
+
+#define fopen(x, y) w_fopen(x, y)
+#define utime(x, y) w_utime(x, y)
+#define stat(x, y)  w_stat(x, y)
+#define lstat(x, y) w_stat(x, y)
+#define mkdir(x, y) w_mkdir(x)
+
+static FILE *
+w_fopen (const char *filename, const char *mode)
+{
+  wchar_t *w_filename;
+  wchar_t *w_mode;
+  int buffer_size = 1024;
+  w_filename = malloc (buffer_size);
+  w_mode = malloc (buffer_size);
+  MultiByteToWideChar(65001, 0, filename, -1, w_filename, buffer_size);
+  MultiByteToWideChar(65001, 0, mode, -1, w_mode, buffer_size);
+  FILE *res = _wfopen (w_filename, w_mode);
+  free (w_filename);
+  free (w_mode);
+  return res;
+}
+#endif /* WINDOWS */
+
 #endif /* UTILS_H */
