diff --git a/mingw-w64-crt/misc/_create_locale.c b/mingw-w64-crt/misc/_create_locale.c
index 00947b3..3cdeb1a 100644
--- a/mingw-w64-crt/misc/_create_locale.c
+++ b/mingw-w64-crt/misc/_create_locale.c
@@ -4,30 +4,17 @@
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
 
-#include <windows.h>
 #include <locale.h>
-#include <msvcrt.h>
 
-static _locale_t __cdecl init_func(int category, const char *locale);
-_locale_t (__cdecl *__MINGW_IMP_SYMBOL(_create_locale))(int, const char *) = init_func;
-
-static _locale_t __cdecl null_func(int category, const char *locale)
+static _locale_t __cdecl emu__create_locale(int category, const char *locale)
 {
   (void)category;
   (void)locale;
   return NULL;
 }
 
-static _locale_t __cdecl init_func(int category, const char *locale)
-{
-    HMODULE msvcrt = __mingw_get_msvcrt_handle();
-    _locale_t (__cdecl *func)(int, const char *) = NULL;
-
-    if (msvcrt)
-        func = (void*)GetProcAddress(msvcrt, "_create_locale");
-
-    if (!func)
-        func = null_func;
-
-    return (__MINGW_IMP_SYMBOL(_create_locale) = func)(category, locale);
-}
+#define RETT _locale_t
+#define FUNC _create_locale
+#define ARGS int category, const char * locale
+#define CALL category, locale
+#include "msvcrt_or_emu_glue.h"
diff --git a/mingw-w64-crt/misc/_free_locale.c b/mingw-w64-crt/misc/_free_locale.c
index d94e227..cd7c363 100644
--- a/mingw-w64-crt/misc/_free_locale.c
+++ b/mingw-w64-crt/misc/_free_locale.c
@@ -4,28 +4,15 @@
  * No warranty is given; refer to the file DISCLAIMER.PD within this package.
  */
 
-#include <windows.h>
 #include <locale.h>
-#include <msvcrt.h>
 
-static void __cdecl init_func(_locale_t locale);
-void (__cdecl *__MINGW_IMP_SYMBOL(_free_locale))(_locale_t) = init_func;
-
-static void __cdecl stub_func(_locale_t locale)
+static void __cdecl emu__free_locale(_locale_t locale)
 {
   (void)locale;
 }
 
-static void __cdecl init_func(_locale_t locale)
-{
-    HMODULE msvcrt = __mingw_get_msvcrt_handle();
-    void (__cdecl *func)(_locale_t) = NULL;
-
-    if (msvcrt)
-        func = (void*)GetProcAddress(msvcrt, "_free_locale");
-
-    if (!func)
-        func = stub_func;
-
-    (__MINGW_IMP_SYMBOL(_free_locale) = func)(locale);
-}
+#define RETT void
+#define FUNC _free_locale
+#define ARGS _locale_t locale
+#define CALL locale
+#include "msvcrt_or_emu_glue.h"
diff --git a/mingw-w64-crt/misc/_get_current_locale.c b/mingw-w64-crt/misc/_get_current_locale.c
index f5ccc4a..97dfba6 100644
--- a/mingw-w64-crt/misc/_get_current_locale.c
+++ b/mingw-w64-crt/misc/_get_current_locale.c
@@ -1,26 +1,18 @@
-#include <windows.h>
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
 #include <locale.h>
-#include <msvcrt.h>
 
-static _locale_t __cdecl init_func(void);
-_locale_t (__cdecl *__MINGW_IMP_SYMBOL(_get_current_locale))(void) = init_func;
-
-static _locale_t __cdecl null_func(void)
+static _locale_t __cdecl emu__get_current_locale(void)
 {
   return NULL;
 }
 
-static _locale_t __cdecl init_func(void)
-{
-    HMODULE msvcrt = __mingw_get_msvcrt_handle();
-    _locale_t (__cdecl *func)(void) = NULL;
-
-    if (msvcrt) {
-        func = (void*)GetProcAddress(msvcrt, "_get_current_locale");
-    }
-
-    if (!func)
-        func = null_func;
-
-    return (__MINGW_IMP_SYMBOL(_get_current_locale) = func)();
-}
+#define RETT _locale_t
+#define FUNC _get_current_locale
+#define ARGS void
+#define CALL
+#include "msvcrt_or_emu_glue.h"
diff --git a/mingw-w64-crt/misc/output_format.c b/mingw-w64-crt/misc/output_format.c
index d55da8b..cad3b3a 100644
--- a/mingw-w64-crt/misc/output_format.c
+++ b/mingw-w64-crt/misc/output_format.c
@@ -1,77 +1,32 @@
-#define _get_output_format __dummy__get_output_format
-#define _set_output_format __dummy__set_output_format
+/**
+ * This file has no copyright assigned and is placed in the Public Domain.
+ * This file is part of the mingw-w64 runtime package.
+ * No warranty is given; refer to the file DISCLAIMER.PD within this package.
+ */
+
+#include <stdio.h>
 #include <windows.h>
 
-#undef _get_output_format
-#undef _set_output_format
-
 static unsigned int last_value = 0;
-typedef unsigned int (*f_get_output_format)(void);
-typedef unsigned int (*f_set_output_format)(unsigned int);
 
-static unsigned int fake_get_output_format(void)
+static unsigned int emu__get_output_format(void)
 {
     return last_value;
 }
 
-static unsigned int fake_set_output_format(unsigned int value)
+static unsigned int emu__set_output_format(unsigned int value)
 {
     return InterlockedExchange((LONG*)&last_value, value);
 }
 
+#define RETT unsigned int
+#define FUNC _get_output_format
+#define ARGS void
+#define CALL
+#include "msvcrt_or_emu_glue.h"
 
-#ifndef __LIBMSVCRT_OS__
-
-unsigned int __attribute__ ((alias ("fake_set_output_format"))) _set_output_format(unsigned int);
-f_set_output_format __MINGW_IMP_SYMBOL(_set_output_format) = _set_output_format;
-
-
-unsigned int __attribute__ ((alias ("fake_get_output_format"))) _get_output_format(void);
-f_get_output_format __MINGW_IMP_SYMBOL(_get_output_format) = _get_output_format;
-
-#else
-
-#include <msvcrt.h>
-
-static unsigned int init_set_output_format(unsigned int);
-f_set_output_format __MINGW_IMP_SYMBOL(_set_output_format) = init_set_output_format;
-
-unsigned int _set_output_format(unsigned int format);
-unsigned int _set_output_format(unsigned int format)
-{
-    return __MINGW_IMP_SYMBOL(_set_output_format)(format);
-}
-
-static unsigned int init_set_output_format(unsigned int format)
-{
-  f_set_output_format sof;
-
-  sof = (void*) GetProcAddress (__mingw_get_msvcrt_handle(), "_set_output_format");
-  if(!sof)
-      sof = fake_set_output_format;
-
-  return (__MINGW_IMP_SYMBOL(_set_output_format) = sof)(format);
-}
-
-
-static unsigned int init_get_output_format(void);
-f_get_output_format __MINGW_IMP_SYMBOL(_get_output_format) = init_get_output_format;
-
-unsigned int _get_output_format(void);
-unsigned int _get_output_format(void)
-{
-    return __MINGW_IMP_SYMBOL(_get_output_format)();
-}
-
-static unsigned int init_get_output_format(void)
-{
-  f_get_output_format gof;
-
-  gof = (void*) GetProcAddress (__mingw_get_msvcrt_handle(), "_get_output_format");
-  if(!gof)
-      gof = fake_get_output_format;
-
-  return (__MINGW_IMP_SYMBOL(_get_output_format) = gof)();
-}
-
-#endif
+#define RETT unsigned int
+#define FUNC _set_output_format
+#define ARGS unsigned int format
+#define CALL format
+#include "msvcrt_or_emu_glue.h"
diff --git a/mingw-w64-crt/misc/wassert.c b/mingw-w64-crt/misc/wassert.c
index b43ddaf..6902394 100644
--- a/mingw-w64-crt/misc/wassert.c
+++ b/mingw-w64-crt/misc/wassert.c
@@ -9,7 +9,7 @@
 
 /* _wassert is not available on XP, so forward it to _assert if needed */
 __MINGW_ATTRIB_NORETURN
-static void __cdecl mingw_wassert(const wchar_t *_Message, const wchar_t *_File, unsigned _Line)
+static void __cdecl emu__wassert(const wchar_t *_Message, const wchar_t *_File, unsigned _Line)
 {
     char *message = NULL, *file = NULL;
     size_t len;
@@ -27,34 +27,11 @@
     }
 
     _assert(message, file, _Line);
-
-    free(message);
-    free(file);
 }
 
-#ifndef __LIBMSVCRT_OS__
-
-void __cdecl __attribute__ ((alias ("mingw_wassert"))) _wassert(const wchar_t *, const wchar_t *, unsigned);
-void (__cdecl *__MINGW_IMP_SYMBOL(_wassert))(const wchar_t*, const wchar_t*, unsigned) = _wassert;
-
-#else
-
-#include <windows.h>
-#include "msvcrt.h"
-
-static void __cdecl init_wassert(const wchar_t *message, const wchar_t *file, unsigned line);
-
-void (__cdecl *__MINGW_IMP_SYMBOL(_wassert))(const wchar_t*, const wchar_t*,unsigned) = init_wassert;
-
-static void __cdecl init_wassert(const wchar_t *message, const wchar_t *file, unsigned line)
-{
-    void *func;
-
-    func = (void*)GetProcAddress(__mingw_get_msvcrt_handle(), "_wassert");
-    if(!func)
-        func = mingw_wassert;
-
-    return (__MINGW_IMP_SYMBOL(_wassert) = func)(message, file, line);
-}
-
-#endif
+#define NORETURN
+#define RETT void
+#define FUNC _wassert
+#define ARGS const wchar_t * message, const wchar_t * file, unsigned line
+#define CALL message, file, line
+#include "msvcrt_or_emu_glue.h"
diff --git a/mingw-w64-crt/stdio/_vscprintf.c b/mingw-w64-crt/stdio/_vscprintf.c
index 557b517..1926ad4 100644
--- a/mingw-w64-crt/stdio/_vscprintf.c
+++ b/mingw-w64-crt/stdio/_vscprintf.c
@@ -11,7 +11,7 @@
 #include <errno.h>
 
 /* emulation of _vscprintf() via _vsnprintf() */
-static int __cdecl emu_vscprintf(const char * __restrict__ format, va_list arglist)
+static int __cdecl emu__vscprintf(const char * __restrict__ format, va_list arglist)
 {
     char *buffer, *new_buffer;
     size_t size;
@@ -52,36 +52,8 @@
     return ret;
 }
 
-#ifndef __LIBMSVCRT_OS__
-
-int __attribute__ ((alias ("emu_vscprintf"))) __cdecl _vscprintf (const char * __restrict__, va_list);
-int (__cdecl *__MINGW_IMP_SYMBOL(_vscprintf))(const char * __restrict__, va_list) = _vscprintf;
-
-#else
-
-#include <msvcrt.h>
-
-static int __cdecl init_vscprintf(const char * __restrict__ format, va_list arglist);
-
-int (__cdecl *__MINGW_IMP_SYMBOL(_vscprintf))(const char * __restrict__, va_list) = init_vscprintf;
-
-static int __cdecl init_vscprintf(const char * __restrict__ format, va_list arglist)
-{
-    HMODULE msvcrt = __mingw_get_msvcrt_handle();
-    int (__cdecl *func)(const char * __restrict__, va_list) = NULL;
-
-    if (msvcrt)
-        func = (int (__cdecl *)(const char * __restrict__, va_list))GetProcAddress(msvcrt, "_vscprintf");
-
-    if (!func)
-        func = emu_vscprintf;
-
-    return (__MINGW_IMP_SYMBOL(_vscprintf) = func)(format, arglist);
-}
-
-int __cdecl _vscprintf(const char * __restrict__ format, va_list arglist)
-{
-    return __MINGW_IMP_SYMBOL(_vscprintf)(format, arglist);
-}
-
-#endif
+#define RETT int
+#define FUNC _vscprintf
+#define ARGS const char * restrict format, va_list arglist
+#define CALL format, arglist
+#include "msvcrt_or_emu_glue.h"
diff --git a/mingw-w64-crt/stdio/_vscwprintf.c b/mingw-w64-crt/stdio/_vscwprintf.c
index 192a460..635074b 100644
--- a/mingw-w64-crt/stdio/_vscwprintf.c
+++ b/mingw-w64-crt/stdio/_vscwprintf.c
@@ -11,7 +11,7 @@
 #include <errno.h>
 
 /* emulation of _vscwprintf() via _vsnwprintf() */
-static int __cdecl emu_vscwprintf(const wchar_t * __restrict__ format, va_list arglist)
+static int __cdecl emu__vscwprintf(const wchar_t * __restrict__ format, va_list arglist)
 {
     wchar_t *buffer, *new_buffer;
     size_t size;
@@ -52,36 +52,8 @@
     return ret;
 }
 
-#ifndef __LIBMSVCRT_OS__
-
-int __attribute__ ((alias ("emu_vscwprintf"))) __cdecl _vscwprintf(const wchar_t * __restrict__, va_list);
-int (__cdecl *__MINGW_IMP_SYMBOL(_vscwprintf))(const wchar_t * __restrict__, va_list) = _vscwprintf;
-
-#else
-
-#include <msvcrt.h>
-
-static int __cdecl init_vscwprintf(const wchar_t * __restrict__ format, va_list arglist);
-
-int (__cdecl *__MINGW_IMP_SYMBOL(_vscwprintf))(const wchar_t * __restrict__, va_list) = init_vscwprintf;
-
-static int __cdecl init_vscwprintf(const wchar_t * __restrict__ format, va_list arglist)
-{
-    HMODULE msvcrt = __mingw_get_msvcrt_handle();
-    int (__cdecl *func)(const wchar_t * __restrict__, va_list) = NULL;
-
-    if (msvcrt)
-        func = (int (__cdecl *)(const wchar_t * __restrict__, va_list))GetProcAddress(msvcrt, "_vscwprintf");
-
-    if (!func)
-        func = emu_vscwprintf;
-
-    return (__MINGW_IMP_SYMBOL(_vscwprintf) = func)(format, arglist);
-}
-
-int __cdecl _vscwprintf(const wchar_t * __restrict__ format, va_list arglist)
-{
-    return __MINGW_IMP_SYMBOL(_vscwprintf)(format, arglist);
-}
-
-#endif
+#define RETT int
+#define FUNC _vscwprintf
+#define ARGS const wchar_t * restrict format, va_list arglist
+#define CALL format, arglist
+#include "msvcrt_or_emu_glue.h"
