diff --git a/doc/Changelog.html b/doc/Changelog.html
index d6d754d6..e08b6625 100644
--- a/doc/Changelog.html
+++ b/doc/Changelog.html
@@ -100,6 +100,7 @@ document.write(''+e+'<\/'+'a'+'>');
Updated mpg123 decoder to v1.22.4 (2015-08-12), compiled with GCC 5.1.0
Updated ALAC decoder to refalac v1.47 (2015-02-15), based on reference implementation by Apple
Updated Monkey's Audio binary to v4.16 (2015-03-24), compiled with ICL 15.0 and MSVC 12.0
+Updated WavPack decoder to v4.75.0 (2015-05-25), compiled with ICL 15.0 and MSVC 12.0
Updated GnuPG to v1.4.19 (2015-02-27), compiled with GCC 4.9.2
Fixed potential deadlock in Cue Sheet import dialog when "Browse..." button is clicked
Fixed function to restore the default Temp folder, if custom Temp folder doesn't exist anymore
diff --git a/doc/Changelog.md b/doc/Changelog.md
index 783aa9d3..69b62838 100644
--- a/doc/Changelog.md
+++ b/doc/Changelog.md
@@ -17,6 +17,7 @@
* Updated mpg123 decoder to v1.22.4 (2015-08-12), compiled with GCC 5.1.0
* Updated ALAC decoder to refalac v1.47 (2015-02-15), based on reference implementation by Apple
* Updated Monkey's Audio binary to v4.16 (2015-03-24), compiled with ICL 15.0 and MSVC 12.0
+* Updated WavPack decoder to v4.75.0 (2015-05-25), compiled with ICL 15.0 and MSVC 12.0
* Updated GnuPG to v1.4.19 (2015-02-27), compiled with GCC 4.9.2
* Fixed potential deadlock in Cue Sheet import dialog when "Browse..." button is clicked
* Fixed function to restore the default Temp folder, if custom Temp folder doesn't exist anymore
diff --git a/etc/Patches/WavPack-4.75.0-UTF8+FlushProgress.diff b/etc/Patches/WavPack-4.75.0-UTF8+FlushProgress.diff
new file mode 100644
index 00000000..cdbdacc8
--- /dev/null
+++ b/etc/Patches/WavPack-4.75.0-UTF8+FlushProgress.diff
@@ -0,0 +1,655 @@
+ .gitignore | 6 ++
+ cli/utils.c | 21 +++--
+ cli/win32_unicode_support.c | 197 ++++++++++++++++++++++++++++++++++++++++++++
+ cli/win32_unicode_support.h | 49 +++++++++++
+ cli/wvunpack.c | 71 +++++++++++++---
+ src/open_utils.c | 5 +-
+ 6 files changed, 331 insertions(+), 18 deletions(-)
+
+diff --git a/.gitignore b/.gitignore
+index eb3a2f7..b09320e 100644
+--- a/.gitignore
++++ b/.gitignore
+@@ -1 +1,7 @@
+ /_old_
++/src/Release
++/Backup1
++/Release
++/*.sdf
++/wavpackexe/Release
++/wvunpackexe/Release
+diff --git a/cli/utils.c b/cli/utils.c
+index 8ead3df..9925a8c 100644
+--- a/cli/utils.c
++++ b/cli/utils.c
+@@ -30,6 +30,7 @@
+
+ #include "wavpack.h"
+ #include "utils.h"
++#include "win32_unicode_support.h"
+
+ #ifdef WIN32
+ #define fileno _fileno
+@@ -81,7 +82,7 @@ int copy_timestamp(const char *src_filename, const char *dst_filename)
+ if (strcmp(src_filename, "-") == 0 || strcmp(dst_filename, "-") == 0)
+ return TRUE;
+
+- if (stat(src_filename, &fileinfo))
++ if (stat_utf8(src_filename, &fileinfo))
+ return FALSE; /* stat failed */
+
+ times[0].tv_sec = fileinfo.st_atime;
+@@ -186,7 +187,7 @@ char *filespec_path (char *filespec)
+ globs.gl_pathc > 0)
+ {
+ /* test if the file is a directory */
+- if (stat(globs.gl_pathv[0], &fstats) == 0 && (fstats.st_mode & S_IFDIR)) {
++ if (stat_utf8(globs.gl_pathv[0], &fstats) == 0 && (fstats.st_mode & S_IFDIR)) {
+ filespec[0] = '\0';
+ strcat (filespec, globs.gl_pathv[0]);
+ globfree(&globs);
+@@ -368,6 +369,7 @@ char yna (void)
+ fprintf (stderr, "%c", 7);
+ }
+
++ fflush(stderr);
+ waiting_input = 0;
+
+ return choice;
+@@ -446,6 +448,7 @@ void error_line (char *error, ...)
+ vsprintf (error_msg + 1, error, argptr);
+ va_end (argptr);
+ fputs (error_msg, stderr);
++ fflush(stderr);
+ finish_line ();
+
+ if (debug_logging_mode) {
+@@ -454,7 +457,7 @@ void error_line (char *error, ...)
+
+ if (get_app_path (file_path)) {
+ strcat (file_path, "\\WavPack\\wavpack.log");
+- error_log = fopen (file_path, "a+");
++ error_log = fopen_utf8 (file_path, "a+");
+
+ if (!error_log) {
+ get_app_path (file_path);
+@@ -462,13 +465,13 @@ void error_line (char *error, ...)
+
+ if (CreateDirectory (file_path, NULL)) {
+ strcat (file_path, "\\wavpack.log");
+- error_log = fopen (file_path, "a+");
++ error_log = fopen_utf8 (file_path, "a+");
+ }
+ }
+ }
+
+ if (!error_log)
+- error_log = fopen ("c:\\wavpack.log", "a+");
++ error_log = fopen_utf8 ("c:\\wavpack.log", "a+");
+
+ if (error_log) {
+ fputs (error_msg + 1, error_log);
+@@ -490,6 +493,7 @@ void error_line (char *error, ...)
+ vsprintf (error_msg + 1, error, argptr);
+ va_end (argptr);
+ fputs (error_msg, stderr);
++ fflush(stderr);
+ finish_line ();
+ }
+
+@@ -508,10 +512,11 @@ void debug_line (char *error, ...)
+ vsprintf (error_msg + 1, error, argptr);
+ va_end (argptr);
+ fputs (error_msg, stderr);
++ fflush(stderr);
+ finish_line ();
+
+ if (debug_logging_mode) {
+- FILE *error_log = fopen ("c:\\wavpack.log", "a+");
++ FILE *error_log = fopen_utf8 ("c:\\wavpack.log", "a+");
+
+ if (error_log) {
+ fputs (error_msg + 1, error_log);
+@@ -589,6 +594,8 @@ void finish_line (void)
+ }
+ else
+ fputc ('\n', stderr);
++
++ fflush(stderr);
+ }
+ #else
+ //////////////////////////////////////////////////////////////////////////////
+@@ -599,6 +606,7 @@ void finish_line (void)
+ void finish_line (void)
+ {
+ fprintf (stderr, " \n");
++ fflush(stderr);
+ }
+
+ //////////////////////////////////////////////////////////////////////////////
+@@ -778,6 +786,7 @@ void DoSetConsoleTitle (char *text)
+ void DoSetConsoleTitle (char *text)
+ {
+ fprintf (stderr, "\033]0;%s\007", text);
++ fflush(stderr);
+ }
+
+ #endif
+diff --git a/cli/win32_unicode_support.c b/cli/win32_unicode_support.c
+new file mode 100644
+index 0000000..513cebc
+--- /dev/null
++++ b/cli/win32_unicode_support.c
+@@ -0,0 +1,197 @@
++/* Copyright (c) 2004-2012 LoRd_MuldeR
++ File: unicode_support.c
++
++ This file was originally part of a patch included with LameXP,
++ released under the same license as the original audio tools.
++
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions
++ are met:
++
++ - Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++
++ - Redistributions in binary form must reproduce the above copyright
++ notice, this list of conditions and the following disclaimer in the
++ documentation and/or other materials provided with the distribution.
++
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++*/
++#if defined WIN32 || defined _WIN32 || defined WIN64 || defined _WIN64
++
++#include "win32_unicode_support.h"
++
++#include
++#include
++
++static UINT g_old_output_cp = ((UINT)-1);
++
++char *utf16_to_utf8(const wchar_t *input)
++{
++ char *Buffer;
++ int BuffSize = 0, Result = 0;
++
++ BuffSize = WideCharToMultiByte(CP_UTF8, 0, input, -1, NULL, 0, NULL, NULL);
++ Buffer = (char*) malloc(sizeof(char) * BuffSize);
++ if(Buffer)
++ {
++ Result = WideCharToMultiByte(CP_UTF8, 0, input, -1, Buffer, BuffSize, NULL, NULL);
++ }
++
++ return ((Result > 0) && (Result <= BuffSize)) ? Buffer : NULL;
++}
++
++char *utf16_to_ansi(const wchar_t *input)
++{
++ char *Buffer;
++ int BuffSize = 0, Result = 0;
++
++ BuffSize = WideCharToMultiByte(CP_ACP, 0, input, -1, NULL, 0, NULL, NULL);
++ Buffer = (char*) malloc(sizeof(char) * BuffSize);
++ if(Buffer)
++ {
++ Result = WideCharToMultiByte(CP_ACP, 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 = 0, Result = 0;
++
++ BuffSize = MultiByteToWideChar(CP_UTF8, 0, input, -1, NULL, 0);
++ Buffer = (wchar_t*) malloc(sizeof(wchar_t) * BuffSize);
++ if(Buffer)
++ {
++ 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)
++{
++ int i, nArgs;
++ LPWSTR *szArglist;
++
++ szArglist = CommandLineToArgvW(GetCommandLineW(), &nArgs);
++
++ if(NULL == szArglist)
++ {
++ fprintf(stderr, "\nFATAL: CommandLineToArgvW failed\n\n");
++ exit(-1);
++ }
++
++ *argv = (char**) malloc(sizeof(char*) * nArgs);
++ *argc = nArgs;
++
++ if(NULL == *argv)
++ {
++ fprintf(stderr, "\nFATAL: Malloc failed\n\n");
++ exit(-1);
++ }
++
++ for(i = 0; i < nArgs; i++)
++ {
++ (*argv)[i] = utf16_to_utf8(szArglist[i]);
++ if(NULL == (*argv)[i])
++ {
++ fprintf(stderr, "\nFATAL: utf16_to_utf8 failed\n\n");
++ exit(-1);
++ }
++ }
++
++ LocalFree(szArglist);
++}
++
++void free_commandline_arguments_utf8(int *argc, char ***argv)
++{
++ int i = 0;
++
++ if(*argv != NULL)
++ {
++ for(i = 0; i < *argc; i++)
++ {
++ if((*argv)[i] != NULL)
++ {
++ free((*argv)[i]);
++ (*argv)[i] = NULL;
++ }
++ }
++ free(*argv);
++ *argv = 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;
++}
++
++int stat_utf8(const char *path_utf8, struct _stat *buf)
++{
++ int ret = -1;
++
++ wchar_t *path_utf16 = utf8_to_utf16(path_utf8);
++ if(path_utf16)
++ {
++ ret = _wstat(path_utf16, buf);
++ free(path_utf16);
++ }
++
++ return ret;
++}
++
++int unlink_utf8(const char *path_utf8)
++{
++ int ret = -1;
++
++ wchar_t *path_utf16 = utf8_to_utf16(path_utf8);
++ if(path_utf16)
++ {
++ ret = _wunlink(path_utf16);
++ free(path_utf16);
++ }
++
++ return ret;
++}
++
++void init_console_utf8(void)
++{
++ g_old_output_cp = GetConsoleOutputCP();
++ SetConsoleOutputCP(CP_UTF8);
++}
++
++void uninit_console_utf8(void)
++{
++ if(g_old_output_cp != ((UINT)-1))
++ {
++ SetConsoleOutputCP(g_old_output_cp);
++ }
++}
++
++#endif
+diff --git a/cli/win32_unicode_support.h b/cli/win32_unicode_support.h
+new file mode 100644
+index 0000000..40c2e33
+--- /dev/null
++++ b/cli/win32_unicode_support.h
+@@ -0,0 +1,49 @@
++/* Copyright (c) 2004-2012 LoRd_MuldeR
++ File: unicode_support.h
++
++ This file was originally part of a patch included with LameXP,
++ released under the same license as the original audio tools.
++
++ Redistribution and use in source and binary forms, with or without
++ modification, are permitted provided that the following conditions
++ are met:
++
++ - Redistributions of source code must retain the above copyright
++ notice, this list of conditions and the following disclaimer.
++
++ - Redistributions in binary form must reproduce the above copyright
++ notice, this list of conditions and the following disclaimer in the
++ documentation and/or other materials provided with the distribution.
++
++ THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
++ ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
++ LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
++ A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR
++ CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
++ EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
++ PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
++ PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
++ LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
++ NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
++ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
++*/
++#ifndef UNICODE_SUPPORT_H_INCLUDED
++#define UNICODE_SUPPORT_H_INCLUDED
++
++#include
++#include
++
++#define WIN_UNICODE 1
++
++char *utf16_to_utf8(const wchar_t *input);
++char *utf16_to_ansi(const wchar_t *input);
++wchar_t *utf8_to_utf16(const char *input);
++void init_commandline_arguments_utf8(int *argc, char ***argv);
++void free_commandline_arguments_utf8(int *argc, char ***argv);
++FILE *fopen_utf8(const char *filename_utf8, const char *mode_utf8);
++int stat_utf8(const char *path_utf8, struct _stat *buf);
++int unlink_utf8(const char *path_utf8);
++void init_console_utf8(void);
++void uninit_console_utf8(void);
++
++#endif
+diff --git a/cli/wvunpack.c b/cli/wvunpack.c
+index e12b5c3..255a6a5 100644
+--- a/cli/wvunpack.c
++++ b/cli/wvunpack.c
+@@ -46,6 +46,7 @@
+ #include "wavpack.h"
+ #include "utils.h"
+ #include "md5.h"
++#include "win32_unicode_support.h"
+
+ #ifdef WIN32
+ #define strdup(x) _strdup(x)
+@@ -159,7 +160,7 @@ static void display_progress (double file_progress);
+ // The "main" function for the command-line WavPack decompressor. //
+ //////////////////////////////////////////////////////////////////////////////
+
+-int main (argc, argv) int argc; char **argv;
++static int wvunpack_main (argc, argv) int argc; char **argv;
+ {
+ #ifdef __EMX__ /* OS/2 */
+ _wildcard (&argc, &argv);
+@@ -196,7 +197,7 @@ int main (argc, argv) int argc; char **argv;
+ #endif
+
+ #if defined (WIN32)
+- set_console_title = 1; // on Windows, we default to messing with the console title
++ set_console_title = 0; // on Windows, we default to messing with the console title
+ #endif // on Linux, this is considered uncool to do by default
+
+ // loop through command-line arguments
+@@ -450,9 +451,15 @@ int main (argc, argv) int argc; char **argv;
+ }
+
+ if (strcmp (WavpackGetLibraryVersionString (), PACKAGE_VERSION))
++ {
+ fprintf (stderr, version_warning, WavpackGetLibraryVersionString (), PACKAGE_VERSION);
++ fflush(stderr);
++ }
+ else if (!quiet_mode && !error_count)
++ {
+ fprintf (stderr, sign_on, VERSION_OS, WavpackGetLibraryVersionString ());
++ fflush(stderr);
++ }
+
+ if (!num_files) {
+ printf ("%s", usage);
+@@ -473,7 +480,7 @@ int main (argc, argv) int argc; char **argv;
+ // frontends, but could be used for other purposes.
+
+ if (*infilename == '@') {
+- FILE *list = fopen (infilename+1, "rt");
++ FILE *list = fopen_utf8 (infilename+1, "rt");
+ int di, c;
+
+ for (di = file_index; di < num_files - 1; di++)
+@@ -517,7 +524,7 @@ int main (argc, argv) int argc; char **argv;
+ }
+ #if defined (WIN32)
+ else if (filespec_wild (infilename)) {
+- FILE *list = fopen (infilename+1, "rt");
++ FILE *list = fopen_utf8 (infilename+1, "rt");
+ intptr_t file;
+ int di;
+
+@@ -556,7 +563,7 @@ int main (argc, argv) int argc; char **argv;
+ // be passed on the command-line, but could be used for other purposes.
+
+ if (outfilename && outfilename [0] == '@') {
+- FILE *list = fopen (outfilename+1, "rt");
++ FILE *list = fopen_utf8 (outfilename+1, "rt");
+ int c;
+
+ if (list == NULL) {
+@@ -629,7 +636,10 @@ int main (argc, argv) int argc; char **argv;
+ strcat (outfilename, raw_decode ? ".raw" : ".wav");
+
+ if (num_files > 1 && !quiet_mode)
++ {
+ fprintf (stderr, "\n%s:\n", matches [file_index]);
++ fflush(stderr);
++ }
+
+ result = unpack_file (matches [file_index], verify_only ? NULL : outfilename);
+
+@@ -653,9 +663,15 @@ int main (argc, argv) int argc; char **argv;
+
+ if (num_files > 1) {
+ if (error_count)
++ {
+ fprintf (stderr, "\n **** warning: errors occurred in %d of %d files! ****\n", error_count, num_files);
++ fflush(stderr);
++ }
+ else if (!quiet_mode)
++ {
+ fprintf (stderr, "\n **** %d files successfully processed ****\n", num_files);
++ fflush(stderr);
++ }
+ }
+
+ free (matches);
+@@ -742,7 +758,7 @@ static FILE *open_output_file (char *filename, char **tempfilename)
+ return stdout;
+ }
+
+- testfile = fopen (filename, "rb");
++ testfile = fopen_utf8 (filename, "rb");
+
+ if (testfile) {
+ size_t res = fread (&dummy, 1, 1, testfile);
+@@ -754,6 +770,7 @@ static FILE *open_output_file (char *filename, char **tempfilename)
+
+ if (!overwrite_all) {
+ fprintf (stderr, "overwrite %s (yes/no/all)? ", FN_FIT (filename));
++ fflush(stderr);
+
+ if (set_console_title)
+ DoSetConsoleTitle ("overwrite?");
+@@ -787,7 +804,7 @@ static FILE *open_output_file (char *filename, char **tempfilename)
+ strcat (*tempfilename, ".tmp");
+ }
+
+- testfile = fopen (*tempfilename, "rb");
++ testfile = fopen_utf8 (*tempfilename, "rb");
+
+ if (!testfile)
+ break;
+@@ -801,7 +818,7 @@ static FILE *open_output_file (char *filename, char **tempfilename)
+ }
+ }
+
+- retval = fopen (*tempfilename ? *tempfilename : filename, "w+b");
++ retval = fopen_utf8 (*tempfilename ? *tempfilename : filename, "w+b");
+
+ if (retval == NULL)
+ error_line ("can't create file %s!", *tempfilename ? *tempfilename : filename);
+@@ -960,11 +977,17 @@ static int unpack_file (char *infilename, char *outfilename)
+ }
+ else if (*outfilename == '-') {
+ if (!quiet_mode)
++ {
+ fprintf (stderr, "unpacking %s%s to stdout,", *infilename == '-' ?
+ "stdin" : FN_FIT (infilename), wvc_mode ? " (+.wvc)" : "");
++ fflush(stderr);
++ }
+ }
+ else if (!quiet_mode)
++ {
+ fprintf (stderr, "restoring %s,", FN_FIT (outfilename));
++ fflush(stderr);
++ }
+
+ if (outbuf_k)
+ output_buffer_size = outbuf_k * 1024;
+@@ -983,8 +1006,11 @@ static int unpack_file (char *infilename, char *outfilename)
+ outfile = NULL;
+
+ if (!quiet_mode)
++ {
+ fprintf (stderr, "verifying %s%s,", *infilename == '-' ? "stdin" :
+ FN_FIT (infilename), wvc_mode ? " (+.wvc)" : "");
++ fflush(stderr);
++ }
+ }
+
+ #if defined(WIN32)
+@@ -1071,6 +1097,7 @@ static int unpack_file (char *infilename, char *outfilename)
+ #else
+ fprintf (stderr, "\n");
+ #endif
++ fflush(stderr);
+ DoTruncateFile (outfile);
+ result = SOFT_ERROR;
+ break;
+@@ -1085,8 +1112,11 @@ static int unpack_file (char *infilename, char *outfilename)
+ progress = floor (progress * 100.0 + 0.5);
+
+ if (!quiet_mode)
++ {
+ fprintf (stderr, "%s%3d%% done...",
+ nobs ? " " : "\b\b\b\b\b\b\b\b\b\b\b\b", (int) progress);
++ fflush(stderr);
++ }
+ }
+ }
+
+@@ -1364,9 +1394,10 @@ static int do_tag_extractions (WavpackContext *wpc, char *outfilename)
+ else
+ strcpy (filespec_name (full_filename), tag_filename);
+
+- if (!overwrite_all && (outfile = fopen (full_filename, "r")) != NULL) {
++ if (!overwrite_all && (outfile = fopen_utf8 (full_filename, "r")) != NULL) {
+ DoCloseHandle (outfile);
+ fprintf (stderr, "overwrite %s (yes/no/all)? ", FN_FIT (full_filename));
++ fflush(stderr);
+
+ if (set_console_title)
+ DoSetConsoleTitle ("overwrite?");
+@@ -1385,7 +1416,7 @@ static int do_tag_extractions (WavpackContext *wpc, char *outfilename)
+ // open output file for writing
+
+ if (*full_filename) {
+- if ((outfile = fopen (full_filename, "w")) == NULL) {
++ if ((outfile = fopen_utf8 (full_filename, "w")) == NULL) {
+ error_line ("can't create file %s!", FN_FIT (full_filename));
+ result = SOFT_ERROR;
+ }
+@@ -2074,3 +2105,23 @@ void display_progress (double file_progress)
+ DoSetConsoleTitle (title);
+ }
+ }
++
++//////////////////////////////////////////////////////////////////////////////
++// MAIN
++//////////////////////////////////////////////////////////////////////////////
++
++int main(int argc, char **argv)
++{
++ int ret = -1, argc_utf8 = -1;
++ char **argv_utf8 = NULL;
++
++ init_console_utf8();
++ init_commandline_arguments_utf8(&argc_utf8, &argv_utf8);
++
++ ret = wvunpack_main(argc_utf8, argv_utf8);
++
++ free_commandline_arguments_utf8(&argc_utf8, &argv_utf8);
++ uninit_console_utf8();
++
++ return ret;
++}
+diff --git a/src/open_utils.c b/src/open_utils.c
+index a8c7baa..a77f90f 100644
+--- a/src/open_utils.c
++++ b/src/open_utils.c
+@@ -20,6 +20,7 @@
+ #include
+
+ #include "wavpack_local.h"
++#include "../cli/win32_unicode_support.h"
+
+ // This code provides an interface between the reader callback mechanism that
+ // WavPack uses internally and the standard fstream C library. This allows an
+@@ -137,7 +138,7 @@ WavpackContext *WavpackOpenFileInput (const char *infilename, char *error, int f
+ setmode (fileno (stdin), O_BINARY);
+ #endif
+ }
+- else if ((wv_id = fopen (infilename, file_mode)) == NULL) {
++ else if ((wv_id = fopen_utf8 (infilename, file_mode)) == NULL) {
+ if (error) strcpy (error, (flags & OPEN_EDIT_TAGS) ? "can't open file for editing" : "can't open file");
+ return NULL;
+ }
+@@ -147,7 +148,7 @@ WavpackContext *WavpackOpenFileInput (const char *infilename, char *error, int f
+
+ strcpy (in2filename, infilename);
+ strcat (in2filename, "c");
+- wvc_id = fopen (in2filename, "rb");
++ wvc_id = fopen_utf8 (in2filename, "rb");
+ free (in2filename);
+ }
+ else
diff --git a/etc/Patches/WavPack-4.70.0-UTF8+FlushProgress.diff b/etc/Patches/deprecated/WavPack-4.70.0-UTF8+FlushProgress.diff
similarity index 100%
rename from etc/Patches/WavPack-4.70.0-UTF8+FlushProgress.diff
rename to etc/Patches/deprecated/WavPack-4.70.0-UTF8+FlushProgress.diff
diff --git a/res/tools/wvunpack.exe b/res/tools/wvunpack.exe
index 6031ed9f..e69a8bb9 100644
Binary files a/res/tools/wvunpack.exe and b/res/tools/wvunpack.exe differ
diff --git a/src/Config.h b/src/Config.h
index dbfdabca..bb8b39ed 100644
--- a/src/Config.h
+++ b/src/Config.h
@@ -34,8 +34,8 @@
#define VER_LAMEXP_MINOR_HI 1
#define VER_LAMEXP_MINOR_LO 2
#define VER_LAMEXP_TYPE Beta
-#define VER_LAMEXP_PATCH 5
-#define VER_LAMEXP_BUILD 1796
+#define VER_LAMEXP_PATCH 6
+#define VER_LAMEXP_BUILD 1798
#define VER_LAMEXP_CONFG 1700
///////////////////////////////////////////////////////////////////////////////
diff --git a/src/Tools.h b/src/Tools.h
index 18fb8294..5d340546 100644
--- a/src/Tools.h
+++ b/src/Tools.h
@@ -94,7 +94,7 @@ g_lamexp_tools[] =
{"509df39fdd7033b0f1af831304d0d6c08b74d5a48e2c038857a78b9dfaa4fb83c6b5c7ea202ba2270c0384607f2316ee", CPU_TYPE_ALL_ALL, "wget.exe", 1140, ""},
{"572b9448bf4a338ecb9727951fdfcc5a219cc69896695cc96b9f6b083690e339910e41558968264a38992e45f2be152c", CPU_TYPE_ALL_ALL, "wma2wav.exe", 20111001, ""},
{"53c7ce1de68285b2440e6d36887708d816cc5a16dfb076669b9ad24a84bb9a4f1080c1885259446b58673366d729cf33", CPU_TYPE_ALL_ALL, "wupdate.exe", 20150819, ""},
- {"221efeabe47e9bf65404c4687df156b326b4fd244d910ef937213e6b0169a57350e897140a2e9965822d60aada609f79", CPU_TYPE_ALL_ALL, "wvunpack.exe", 4700, ""},
+ {"cb83e9393e0aceb012611241eb87eca5cc5edb81935a27d902e7435c1314962558044bae8a152e718cc5a56a1280f6b7", CPU_TYPE_ALL_ALL, "wvunpack.exe", 4750, ""},
{NULL, NULL, NULL, NULL, NULL}
};