diff --git a/src/utils.c b/src/utils.c
index 2ec9601..861aacd 100644
--- a/src/utils.c
+++ b/src/utils.c
@@ -2544,3 +2544,87 @@ 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;
+
+  buffer_size = sizeof (wchar_t) * MultiByteToWideChar(65001, 0, filename, -1, w_filename, 0);
+  w_filename = alloca (buffer_size);
+  MultiByteToWideChar(65001, 0, filename, -1, w_filename, buffer_size);
+  return _wutime (w_filename, times);
+}
+
+int 
+w_stat (const char *filename, struct_stat *buffer )
+{
+  wchar_t *w_filename;
+  int buffer_size;
+
+  buffer_size = sizeof (wchar_t) * MultiByteToWideChar(65001, 0, filename, -1, w_filename, 0);
+  w_filename = alloca (buffer_size);
+  MultiByteToWideChar(65001, 0, filename, -1, w_filename, buffer_size);
+  return _wstati64 (w_filename, buffer);
+}
+
+int w_mkdir(const char *dirname)
+{
+  wchar_t *w_dirname;
+  int buffer_size;
+
+  buffer_size = sizeof (wchar_t) * MultiByteToWideChar(65001, 0, dirname, -1, w_dirname, 0);
+  w_dirname = malloc (buffer_size);
+  MultiByteToWideChar(65001, 0, dirname, -1, w_dirname, buffer_size);
+  return _wmkdir (w_dirname);
+}
+
+int w_rename(const char *oldname, const char *newname)
+{
+  wchar_t *w_oldname, *w_newname;
+  int buffer_size;
+
+  buffer_size = sizeof (wchar_t) * max(MultiByteToWideChar(65001, 0, oldname, -1, w_oldname, 0),MultiByteToWideChar(65001, 0, newname, -1, w_newname, 0));
+  w_newname = alloca (buffer_size);
+  w_oldname = alloca (buffer_size);
+  MultiByteToWideChar(65001, 0, oldname, -1, w_oldname, buffer_size);
+  MultiByteToWideChar(65001, 0, newname, -1, w_newname, buffer_size);
+  return _wrename (w_oldname, w_newname);
+}
+
+int w_unlink (const char *filename)
+{
+  wchar_t *w_filename;
+  int buffer_size;
+
+  buffer_size = sizeof (wchar_t) * MultiByteToWideChar(65001, 0, filename, -1, w_filename, 0);
+  w_filename = malloc (buffer_size);
+  MultiByteToWideChar(65001, 0, filename, -1, w_filename, buffer_size);
+  return _wunlink (w_filename);
+}
+
+int w_open (const char *filename, int oflag, ...)
+{
+  wchar_t *w_filename;
+  int buffer_size, pmode;
+
+  buffer_size = sizeof (wchar_t) * MultiByteToWideChar(65001, 0, filename, -1, w_filename, 0);
+  w_filename = malloc (buffer_size);
+  MultiByteToWideChar(65001, 0, filename, -1, w_filename, buffer_size);
+  pmode = 0;
+  if (oflag & O_CREAT)
+  {
+    va_list arg;
+    va_start(arg, oflag);
+    pmode = va_arg (arg, PROMOTED_MODE_T);
+    
+  } 
+  return _wopen (w_filename, oflag, pmode);
+}
+
+
+#endif /* WINDOWS */
diff --git a/src/utils.h b/src/utils.h
index 7c6f2ce..d482ff1 100644
--- a/src/utils.h
+++ b/src/utils.h
@@ -158,4 +158,44 @@ 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)
+#define rename(x, y) w_rename(x, y)
+#define unlink(x) w_unlink(x)
+#define open w_open
+
+int w_stat (const char *filename, struct_stat *buffer);
+int w_mkdir (const char *dirname);
+int w_rename (const char *oldname, const char *newname);
+int w_unlink( const char *filename );
+int w_open (const char *filename, int oflag, ...);
+
+/*
+static FILE *w_fopen (const char *filename, const char *mode);
+int w_utime (unsigned char *filename, struct _utimbuf *times);
+*/
+
+static FILE *
+w_fopen (const char *filename, const char *mode)
+{
+  wchar_t *w_filename, *w_mode;
+  int buffer_size;
+
+  buffer_size = sizeof (wchar_t) * max(MultiByteToWideChar(65001, 0, filename, -1, w_filename, 0),MultiByteToWideChar(65001, 0, mode, -1, w_mode, 0));
+  w_filename = alloca (buffer_size);
+  w_mode = alloca (buffer_size);
+  MultiByteToWideChar(65001, 0, filename, -1, w_filename, buffer_size);
+  MultiByteToWideChar(65001, 0, mode, -1, w_mode, buffer_size);
+  return _wfopen (w_filename, w_mode);
+}
+
+#endif /* WINDOWS */
+
 #endif /* UTILS_H */
