diff --git a/emulator/mksdcard/src/source/mksdcard.c b/emulator/mksdcard/src/source/mksdcard.c
index d0b6d5c..ca23e63 100644
--- a/emulator/mksdcard/src/source/mksdcard.c
+++ b/emulator/mksdcard/src/source/mksdcard.c
@@ -62,6 +62,19 @@
 static Byte  s_fat_head      [ BYTES_PER_SECTOR ];   /* first FAT sector */
 // static Byte  s_zero_sector   [ BYTES_PER_SECTOR ];   /* empty sector */
 
+// For handling Unicode paths
+#ifdef _WIN32
+    #define WIDE_CHAR   wchar_t
+    #define ARGC        wargc
+    #define ARGV        wargv
+    #define STRINGPRINT "%S"
+#else
+    #define WIDE_CHAR   char
+    #define ARGC        argc
+    #define ARGV        argv
+    #define STRINGPRINT "%s"
+#endif
+
 /* this is the date and time when creating the disk */
 static int
 get_serial_id( void )
@@ -220,26 +233,35 @@
 
 int  main( int argc, char**  argv )
 {
-    Wide   disk_size;
-    int    sectors_per_fat;
-    int    sectors_per_disk;
-    char*  end;
-    const char*  label = NULL;
-    FILE*  f = NULL;
+    Wide              disk_size;
+    int               sectors_per_fat;
+    int               sectors_per_disk;
+    WIDE_CHAR*        end;
+    const WIDE_CHAR*  label = NULL;
+    FILE*             f = NULL;
 
-    for ( ; argc > 1 && argv[1][0] == '-'; argc--, argv++ )
+#ifdef _WIN32
+    int          wargc;
+    WIDE_CHAR**  wargv;
+    WIDE_CHAR**  unused_environment;
+    WIDE_CHAR**  unused_startupinfo;
+
+    __wgetmainargs(&wargc, &wargv, &unused_environment, 0, &unused_startupinfo);
+#endif
+
+    for ( ; ARGC > 1 && ARGV[1][0] == '-'; ARGC--, ARGV++ )
     {
-        char*  arg = argv[1] + 1;
+        WIDE_CHAR*  arg = ARGV[1] + 1;
         switch (arg[0]) {
             case 'l':
                 if (arg[1] != 0)
                     arg += 2;
                 else {
-                    argc--;
-                    argv++;
-                    if (argc <= 1)
+                    ARGC--;
+                    ARGV++;
+                    if (ARGC <= 1)
                         usage();
-                    arg = argv[1];
+                    arg = ARGV[1];
                 }
                 label = arg;
                 break;
@@ -249,12 +271,17 @@
         }
     }
 
-    if (argc != 3)
+    if (ARGC != 3)
         usage();
 
-    disk_size = strtoll( argv[1], &end, 10 );
+#ifdef _WIN32
+    disk_size = wcstoll( ARGV[1], &end, 10 );
+#else
+    disk_size = strtoll( ARGV[1], &end, 10 );
+#endif
+
     if (disk_size <= 0 || errno == EINVAL || errno == ERANGE) {
-        fprintf(stderr, "Invalid argument size '%s'\n\n", argv[1]);
+        fprintf(stderr, "Invalid argument size '" STRINGPRINT "'\n\n", ARGV[1]);
         usage();
     }
 
@@ -266,10 +293,10 @@
         disk_size *= 1024*1024*1024;
 
     if (disk_size < 9*1024*1024) {
-        fprintf(stderr, "Invalid argument: size '%s' is too small.\n\n", argv[1]);
+        fprintf(stderr, "Invalid argument: size '" STRINGPRINT "' is too small.\n\n", ARGV[1]);
         usage();
     } else if (disk_size > MAX_DISK_SIZE) {
-        fprintf(stderr, "Invalid argument: size '%s' is too large.\n\n", argv[1]);
+        fprintf(stderr, "Invalid argument: size '" STRINGPRINT "' is too large.\n\n", ARGV[1]);
         usage();
     }
 
@@ -279,9 +306,13 @@
     boot_sector_init( s_boot_sector, s_fsinfo_sector, disk_size, NULL );
     fat_init( s_fat_head );
 
-    f = fopen( argv[2], "wb" );
+#ifdef _WIN32
+    f = _wfopen( ARGV[2], L"wb" );
+#else
+    f = fopen( ARGV[2], "wb" );
+#endif
     if ( !f ) {
-      fprintf(stderr, "Could not create file '%s': %s\n", argv[2], strerror(errno));
+      fprintf(stderr, "Could not create file '" STRINGPRINT "': %s\n", ARGV[2], strerror(errno));
       goto FailWrite;
     }
 
@@ -322,8 +353,12 @@
 FailWrite:
     if (f != NULL) {
       fclose(f);
-      unlink( argv[2] );
-      fprintf(stderr, "File '%s' was not created.\n", argv[2]);
+#ifdef _WIN32
+      _wunlink( ARGV[2] );
+#else
+      unlink( ARGV[2] );
+#endif
+      fprintf(stderr, "File '" STRINGPRINT "' was not created.\n", ARGV[2]);
     }
     return 1;
 }
diff --git a/find_java/src/source/find_java_exe.cpp b/find_java/src/source/find_java_exe.cpp
index 50ca024..a8be377 100644
--- a/find_java/src/source/find_java_exe.cpp
+++ b/find_java/src/source/find_java_exe.cpp
@@ -63,9 +63,9 @@
 
 static void printError(const char *message) {
 
-    CString error;
-    error.setLastWin32Error(message);
-    printf(error.cstr());
+    CString error;
+    error.setLastWin32Error(message);
+    printf(error.cstr());
 }
 
 static void testFindJava(bool isJdk, int minVersion) {
@@ -182,9 +182,9 @@
     }
 
     if (version == 0) {
-        CString s;
-        s.setf("Failed to find Java %d.%d (or newer) on your system. ", JAVA_MAJOR(minVersion),
-            JAVA_MINOR(minVersion));
+        CString s;
+        s.setf("Failed to find Java %d.%d (or newer) on your system. ", JAVA_MAJOR(minVersion),
+            JAVA_MINOR(minVersion));
 
         if (gIsDebug) {
             fprintf(stderr, s.cstr());
@@ -200,8 +200,8 @@
 
     if (doShortPath) {
         if (!javaPath.toShortPath(&javaPath)) {
-            CString s;
-            s.setf("Failed to convert path (%s) to a short DOS path. ", javaPath.cstr());
+            CString s;
+            s.setf("Failed to convert path (%s) to a short DOS path. ", javaPath.cstr());
             fprintf(stderr, s.cstr());
 
             if (shouldPrintError) {
