diff --git a/src/mswindows.c b/src/mswindows.c
index c9923b3..6058b45 100644
--- a/src/mswindows.c
+++ b/src/mswindows.c
@@ -652,3 +652,108 @@ set_windows_fd_as_blocking_socket (int fd)
     }
 	return;
 }
+
+int 
+wc_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 
+wc_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 wc_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 wc_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 wc_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 wc_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);
+}
+
+FILE *wc_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);
+}
+
+size_t wc_mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count)
+{
+  if (!wcstr) {
+    return MultiByteToWideChar(65001, 0, mbstr, count, NULL, 0);
+  } else {
+    return MultiByteToWideChar(65001, 0, mbstr, count, wcstr, count * sizeof(wchar_t));
+  }
+}
+
+size_t wc_wcstombs(char  *mbstr, const wchar_t *wcstr, size_t count)
+{
+  return WideCharToMultiByte(65001, 0, wcstr, count, mbstr, count*sizeof(wchar_t),NULL,NULL);
+}
diff --git a/src/mswindows.h b/src/mswindows.h
index e614d84..0f36873 100644
--- a/src/mswindows.h
+++ b/src/mswindows.h
@@ -121,4 +121,29 @@ char *ws_mypath (void);
 void windows_main (char **);
 void set_windows_fd_as_blocking_socket (int);
 
+#include <fcntl.h>
+#include <utime.h>
+
+#define fopen(x, y) wc_fopen(x, y)
+#define utime(x, y) wc_utime(x, y)
+#define stat(x, y)  wc_stat(x, y)
+#define lstat(x, y) wc_stat(x, y)
+#define mkdir(x, y) wc_mkdir(x)
+#define rename(x, y) wc_rename(x, y)
+#define unlink(x) wc_unlink(x)
+#define open wc_open
+
+#define mbstowcs wc_mbstowcs
+#define mbtowc(x,y)  wc_mbstowcs(x,y,1)
+#define wcstombs wc_wcstombs
+#define wctomb(x,y)  wc_wcstombs(x,y,1)
+size_t wc_mbstowcs(wchar_t *wcstr, const char *mbstr, size_t count);
+size_t wc_wcstombs(char  *mbstr, const wchar_t *wcstr, size_t count);
+
+int wc_mkdir (const char *dirname);
+int wc_rename (const char *oldname, const char *newname);
+int wc_unlink( const char *filename );
+int wc_open (const char *filename, int oflag, ...);
+FILE *wc_fopen (const char *filename, const char *mode);
+
 #endif /* MSWINDOWS_H */
