--- /dev/null
+ aften/aften.c | 23 ++++++++++-
+ aften/unicode_support.c | 98 +++++++++++++++++++++++++++++++++++++++++++++++
+ aften/unicode_support.h | 21 ++++++++++
+ libaften/a52.h | 2 +-
+ 4 files changed, 140 insertions(+), 4 deletions(-)
+
+diff --git a/aften/aften.c b/aften/aften.c
+index 143bb1c..a93da2f 100644
+--- a/aften/aften.c
++++ b/aften/aften.c
+@@ -38,6 +38,7 @@
+ #include "pcm.h"
+ #include "helptext.h"
+ #include "opts.h"
++#include "unicode_support.h"
+
+ static const int acmod_to_ch[8] = { 2, 1, 2, 3, 3, 4, 4, 5 };
+
+@@ -82,7 +83,7 @@ print_simd_in_use(FILE *out, AftenSimdInstructions *simd_instructions)
+ }
+
+ int
+-main(int argc, char **argv)
++aften_main(int argc, char **argv)
+ {
+ void (*aften_remap)(void *samples, int n, int ch,
+ A52SampleFormat fmt, int acmod) = NULL;
+@@ -137,7 +138,7 @@ main(int argc, char **argv)
+ #endif
+ ifp[i] = stdin;
+ } else {
+- ifp[i] = fopen(opts.infile[i], "rb");
++ ifp[i] = fopen_utf8(opts.infile[i], "rb");
+ if (!ifp[i]) {
+ fprintf(stderr, "error opening input file: %s\n", opts.infile[i]);
+ goto error_end;
+@@ -235,7 +236,7 @@ main(int argc, char **argv)
+ #endif
+ ofp = stdout;
+ } else {
+- ofp = fopen(opts.outfile, "wb");
++ ofp = fopen_utf8(opts.outfile, "wb");
+ if (!ofp) {
+ fprintf(stderr, "error opening output file: %s\n", opts.outfile);
+ goto error_end;
+@@ -327,6 +328,7 @@ main(int argc, char **argv)
+ "bw: %2.1f | bitrate: %4.1f kbps ",
+ percent, (qual / (frame_cnt+1)),
+ (bw / (frame_cnt+1)), kbps);
++ fflush(stderr);
+ }
+ t0 = t1;
+ last_update_clock = current_clock;
+@@ -335,6 +337,7 @@ main(int argc, char **argv)
+ fprintf(stderr, "frame: %7d | q: %4d | bw: %2d | bitrate: %3d kbps\n",
+ frame_cnt, s.status.quality, s.status.bwcode,
+ s.status.bit_rate);
++ fflush(stderr);
+ }
+ }
+ fwrite(frame, 1, fs, ofp);
+@@ -352,11 +355,13 @@ main(int argc, char **argv)
+ if (s.verbose == 1) {
+ fprintf(stderr, "\rprogress: 100%% | q: %4.1f | bw: %2.1f | bitrate: %4.1f kbps\n\n",
+ (qual / frame_cnt), (bw / frame_cnt), kbps);
++ fflush(stderr);
+ } else if (s.verbose == 2) {
+ fprintf(stderr, "\n");
+ fprintf(stderr, "average quality: %4.1f\n", (qual / frame_cnt));
+ fprintf(stderr, "average bandwidth: %2.1f\n", (bw / frame_cnt));
+ fprintf(stderr, "average bitrate: %4.1f kbps\n\n", kbps);
++ fflush(stderr);
+ }
+ }
+ goto end;
+@@ -382,3 +387,15 @@ end:
+
+ return ret_val;
+ }
++
++int wmain(int argc, wchar_t **argv_utf16)
++{
++ int result = 0;
++ char **argv_utf8 = NULL;
++
++ init_commandline_arguments_utf8(argc, &argv_utf8, argv_utf16);
++ result = aften_main(argc, argv_utf8);
++ free_commandline_arguments_utf8(argc, &argv_utf8);
++
++ return result;
++}
+diff --git a/aften/unicode_support.c b/aften/unicode_support.c
+new file mode 100644
+index 0000000..21ecd5c
+--- /dev/null
++++ b/aften/unicode_support.c
+@@ -0,0 +1,98 @@
++#include "unicode_support.h"
++
++#include <stdio.h>
++#include <windows.h>
++
++char *utf16_to_utf8(const wchar_t *input)
++{
++ char *Buffer;
++ int BuffSize, Result;
++
++ BuffSize = WideCharToMultiByte(CP_UTF8, 0, input, -1, NULL, 0, NULL, NULL);
++ Buffer = (char*) malloc(sizeof(char) * BuffSize);
++
++ if(!Buffer)
++ {
++ fprintf(stderr, "Error in utf16_to_utf8: Memory allocation failed!\n");
++ return NULL;
++ }
++
++ Result = WideCharToMultiByte(CP_UTF8, 0, input, -1, Buffer, BuffSize, NULL, NULL);
++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL;
++}
++
++wchar_t *utf8_to_utf16(const char *input)
++{
++ wchar_t *Buffer;
++ int BuffSize, Result;
++
++ BuffSize = MultiByteToWideChar(CP_UTF8, 0, input, -1, NULL, 0);
++ Buffer = (wchar_t*) malloc(sizeof(wchar_t) * BuffSize);
++
++ if(!Buffer)
++ {
++ fprintf(stderr, "Error in utf8_to_utf16: Memory allocation failed!\n");
++ return NULL;
++ }
++
++ Result = MultiByteToWideChar(CP_UTF8, 0, input, -1, Buffer, BuffSize);
++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL;
++}
++
++void init_commandline_arguments_utf8(int argc, char ***argv_utf8, wchar_t **argv_utf16)
++{
++ int i = 0;
++
++ *argv_utf8 = (char**) malloc(argc * sizeof(char*));
++ if(!(*argv_utf8))
++ {
++ fprintf(stderr, "Error in init_commandline_arguments_utf8: Memory allocation failed!\n");
++ exit(-1);
++ }
++
++ for(i = 0; i < argc; i++)
++ {
++ (*argv_utf8)[i] = utf16_to_utf8(argv_utf16[i]);
++ if(!(*argv_utf8)[i])
++ {
++ fprintf(stderr, "Error in init_commandline_arguments_utf8: Memory allocation failed!\n");
++ exit(-1);
++ }
++ }
++}
++
++void free_commandline_arguments_utf8(int argc, char ***argv_utf8)
++{
++ int i = 0;
++
++ if(*argv_utf8 != NULL)
++ {
++ for(i = 0; i < argc; i++)
++ {
++ if((*argv_utf8)[i] != NULL)
++ {
++ free((*argv_utf8)[i]);
++ (*argv_utf8)[i] = NULL;
++ }
++ }
++ free(*argv_utf8);
++ *argv_utf8 = NULL;
++ }
++}
++
++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8)
++{
++ FILE *ret = NULL;
++ wchar_t *filename_utf16 = utf8_to_utf16(filename_utf8);
++ wchar_t *mode_utf16 = utf8_to_utf16(mode_utf8);
++
++ if(filename_utf16 && mode_utf16)
++ {
++ ret = _wfopen(filename_utf16, mode_utf16);
++ }
++
++ if(filename_utf16) free(filename_utf16);
++ if(mode_utf16) free(mode_utf16);
++
++ return ret;
++}
+diff --git a/aften/unicode_support.h b/aften/unicode_support.h
+new file mode 100644
+index 0000000..cc13fd9
+--- /dev/null
++++ b/aften/unicode_support.h
+@@ -0,0 +1,21 @@
++#ifndef UNICODE_SUPPORT_H_INCLUDED
++#define UNICODE_SUPPORT_H_INCLUDED
++
++#include <ctype.h>
++#include <stdio.h>
++#include <stdlib.h>
++
++#ifdef __cplusplus
++extern "C" {
++#endif
++
++char *utf16_to_utf8(const wchar_t *input);
++wchar_t *utf8_to_utf16(const char *input);
++void init_commandline_arguments_utf8(int argc, char ***argv_utf8, wchar_t **argv_utf16);
++void free_commandline_arguments_utf8(int argc, char ***argv_utf8);
++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8);
++
++#ifdef __cplusplus
++}
++#endif
++#endif
+\ No newline at end of file
+diff --git a/libaften/a52.h b/libaften/a52.h
+index 9a6812b..85c6fa5 100644
+--- a/libaften/a52.h
++++ b/libaften/a52.h
+@@ -32,7 +32,7 @@
+ #include "a52tab.h"
+ #include "aften-types.h"
+
+-#define AFTEN_VERSION "git"
++#define AFTEN_VERSION "0.0.8+"
+
+ #define A52_MAX_CHANNELS 6
+