diff -pudN e:\wine-patched\tools\widl/hash.c e:\reactos-sync-clean\tools\widl/hash.c
--- e:\wine-patched\tools\widl/hash.c	2015-02-22 13:23:48 +0100
+++ e:\reactos-sync-clean\tools\widl/hash.c	2013-10-15 20:06:18 +0100
@@ -21,9 +21,7 @@
 #include <stdio.h>
 #include <stdarg.h>
 
-#include "windef.h"
-#include "winbase.h"
-#include "winnls.h"
+#include <nls.h>
 
 #include "widltypes.h"
 #include "hash.h"
@@ -539,10 +537,10 @@ unsigned int lhash_val_of_name_sys( sysk
   case LANG_VIETNAMESE: case LANG_MALTESE:    case LANG_IRISH:
   case LANG_SAMI:       case LANG_UPPER_SORBIAN: case LANG_TSWANA:
   case LANG_XHOSA:      case LANG_ZULU:       case LANG_WELSH:
-  case LANG_BRETON:     case LANG_SCOTTISH_GAELIC: case LANG_NEUTRAL:
+  case LANG_BRETON:     case LANG_NEUTRAL:
 /* some languages not in all windows versions or ReactOS */
-#ifdef LANG_MANX_GAELIC
-  case LANG_MANX_GAELIC:
+#ifdef LANG_GAELIC
+  case LANG_GAELIC:
 #endif
 #ifdef LANG_TAJIK
   case LANG_TAJIK:
diff -pudN e:\wine-patched\tools\widl/header.c e:\reactos-sync-clean\tools\widl/header.c
--- e:\wine-patched\tools\widl/header.c	2015-10-30 18:41:54 +0100
+++ e:\reactos-sync-clean\tools\widl/header.c	2015-11-16 20:04:15 +0100
@@ -1068,7 +1068,7 @@ static void write_inline_wrappers(FILE *
     if (!is_callas(func->attrs)) {
       const var_t *arg;
 
-      fprintf(header, "static FORCEINLINE ");
+      fprintf(header, "FORCEINLINE ");
       write_type_decl_left(header, type_function_get_rettype(func->type));
       fprintf(header, " %s_%s(", name, get_name(func));
       write_args(header, type_get_function_args(func->type), name, 1, FALSE);
@@ -1103,6 +1103,15 @@ static void do_write_c_method_def(FILE *
 
   if (type_iface_get_inherit(iface))
     do_write_c_method_def(header, type_iface_get_inherit(iface), name);
+  else if (type_iface_get_stmts(iface) == NULL)
+  {
+    fprintf(header, "#ifndef __cplusplus\n");
+    indent(header, 0);
+    fprintf(header, "char dummy;\n");
+    fprintf(header, "#endif\n");
+    fprintf(header, "\n");
+    return;
+  }
 
   STATEMENTS_FOR_EACH_FUNC(stmt, type_iface_get_stmts(iface))
   {
@@ -1640,6 +1649,10 @@ void write_header(const statement_list_t
   fprintf(header, "#define __REQUIRED_RPCNDR_H_VERSION__ 475\n");
   fprintf(header, "#endif\n\n");
 
+  fprintf(header, "#ifdef __REACTOS__\n");
+  fprintf(header, "#define WIN32_LEAN_AND_MEAN\n");
+  fprintf(header, "#endif\n\n");
+
   fprintf(header, "#include <rpc.h>\n" );
   fprintf(header, "#include <rpcndr.h>\n\n" );
 
diff -pudN e:\wine-patched\tools\widl/parser.y e:\reactos-sync-clean\tools\widl/parser.y
--- e:\wine-patched\tools\widl/parser.y	2015-11-15 19:23:32 +0100
+++ e:\reactos-sync-clean\tools\widl/parser.y	2015-11-16 20:04:15 +0100
@@ -1899,6 +1899,14 @@ static type_t *reg_typedefs(decl_spec_t 
         type->attrs = attrs;
   }
 
+#ifdef __REACTOS__
+  /* Append the SWITCHTYPE attribute to a non-encapsulated union if it does not already have it.  */
+  if (type_get_type_detect_alias(type) == TYPE_UNION &&
+      is_attr(attrs, ATTR_SWITCHTYPE) &&
+      !is_attr(type->attrs, ATTR_SWITCHTYPE))
+    type->attrs = append_attr(type->attrs, make_attrp(ATTR_SWITCHTYPE, get_attrp(attrs, ATTR_SWITCHTYPE)));
+#endif
+
   LIST_FOR_EACH_ENTRY( decl, decls, const declarator_t, entry )
   {
 
diff -pudN e:\wine-patched\tools\widl/proxy.c e:\reactos-sync-clean\tools\widl/proxy.c
--- e:\wine-patched\tools\widl/proxy.c	2015-02-22 13:23:48 +0100
+++ e:\reactos-sync-clean\tools\widl/proxy.c	2015-11-16 20:04:15 +0100
@@ -87,7 +87,13 @@ static void init_proxy(const statement_l
     error("Could not open %s for output\n", proxy_name);
   print_proxy( "/*** Autogenerated by WIDL %s from %s - Do not edit ***/\n", PACKAGE_VERSION, input_name);
   print_proxy( "\n");
-  print_proxy( "#define __midl_proxy\n");
+  print_proxy( "#define __midl_proxy\n\n");
+
+  print_proxy( "#ifdef __REACTOS__\n");
+  print_proxy( "#define WIN32_NO_STATUS\n");
+  print_proxy( "#define WIN32_LEAN_AND_MEAN\n");
+  print_proxy( "#endif\n\n");
+
   print_proxy( "#include \"objbase.h\"\n");
   print_proxy( "\n");
   print_proxy( "#ifndef DECLSPEC_HIDDEN\n");
@@ -476,14 +482,15 @@ static const statement_t * get_callas_so
   return NULL;
 }
 
-static void write_proxy_procformatstring_offsets( const type_t *iface, int skip )
+static int write_proxy_procformatstring_offsets( const type_t *iface, int skip )
 {
     const statement_t *stmt;
+    int i = 0;
 
     if (type_iface_get_inherit(iface))
-        write_proxy_procformatstring_offsets( type_iface_get_inherit(iface), need_delegation(iface));
+        i = write_proxy_procformatstring_offsets( type_iface_get_inherit(iface), need_delegation(iface));
     else
-        return;
+        return 0;
 
     STATEMENTS_FOR_EACH_FUNC( stmt, type_iface_get_stmts(iface) )
     {
@@ -503,7 +510,9 @@ static void write_proxy_procformatstring
             print_proxy( "(unsigned short)-1,  /* %s::%s */\n", iface->name, get_name(func));
         else
             print_proxy( "%u,  /* %s::%s */\n", func->procstring_offset, iface->name, get_name(func));
+        i++;
     }
+    return i;
 }
 
 static int write_proxy_methods(type_t *iface, int skip)
@@ -636,7 +645,10 @@ static void write_proxy(type_t *iface, u
   print_proxy( "static const unsigned short %s_FormatStringOffsetTable[] =\n", iface->name );
   print_proxy( "{\n" );
   indent++;
-  write_proxy_procformatstring_offsets( iface, 0 );
+  if (write_proxy_procformatstring_offsets( iface, 0 ) == 0)
+  {
+      print_proxy( "0\n" );
+  }
   indent--;
   print_proxy( "};\n\n" );
 
@@ -710,7 +722,10 @@ static void write_proxy(type_t *iface, u
       print_proxy( "static const PRPC_STUB_FUNCTION %s_table[] =\n", iface->name);
       print_proxy( "{\n");
       indent++;
-      write_stub_methods(iface, FALSE);
+      if (write_stub_methods(iface, FALSE) == 0)
+      {
+          fprintf(proxy, "0");
+      }
       fprintf(proxy, "\n");
       indent--;
       fprintf(proxy, "};\n\n");
diff -pudN e:\wine-patched\tools\widl/typegen.c e:\reactos-sync-clean\tools\widl/typegen.c
--- e:\wine-patched\tools\widl/typegen.c	2015-10-30 18:41:54 +0100
+++ e:\reactos-sync-clean\tools\widl/typegen.c	2015-11-16 20:04:16 +0100
@@ -4747,7 +4747,7 @@ void write_func_param_struct( FILE *file
         if (align >= pointer_size)
             fprintf( file, "%s;\n", arg->name );
         else
-            fprintf( file, "%s DECLSPEC_ALIGN(%u);\n", arg->name, pointer_size );
+            fprintf( file, "DECLSPEC_ALIGN(%u) %s;\n", pointer_size, arg->name );
     }
     if (add_retval && !is_void( retval->type ))
     {
diff -pudN e:\wine-patched\tools\widl/typelib.c e:\reactos-sync-clean\tools\widl/typelib.c
--- e:\wine-patched\tools\widl/typelib.c	2015-10-30 18:41:54 +0100
+++ e:\reactos-sync-clean\tools\widl/typelib.c	2015-11-16 20:04:16 +0100
@@ -32,9 +32,7 @@
 #include <string.h>
 #include <ctype.h>
 
-#include "windef.h"
-#include "winbase.h"
-
+#include <typedefs.h>
 #include "widl.h"
 #include "utils.h"
 #include "parser.h"
diff -pudN e:\wine-patched\tools\widl/widl.c e:\reactos-sync-clean\tools\widl/widl.c
--- e:\wine-patched\tools\widl/widl.c	2015-10-30 18:41:54 +0100
+++ e:\reactos-sync-clean\tools\widl/widl.c	2015-11-16 20:04:16 +0100
@@ -364,6 +364,12 @@ static void write_dlldata_list(struct li
   fprintf(dlldata, "- Do not edit ***/\n\n");
   if (define_proxy_delegation)
       fprintf(dlldata, "#define PROXY_DELEGATION\n");
+
+  fprintf(dlldata, "#ifdef __REACTOS__\n");
+  fprintf(dlldata, "#define WIN32_NO_STATUS\n");
+  fprintf(dlldata, "#define WIN32_LEAN_AND_MEAN\n");
+  fprintf(dlldata, "#endif\n\n");
+
   fprintf(dlldata, "#include <objbase.h>\n");
   fprintf(dlldata, "#include <rpcproxy.h>\n\n");
   start_cplusplus_guard(dlldata);
@@ -504,6 +510,12 @@ void write_id_data(const statement_list_
 
   fprintf(idfile, "/*** Autogenerated by WIDL %s ", PACKAGE_VERSION);
   fprintf(idfile, "from %s - Do not edit ***/\n\n", input_idl_name);
+
+  fprintf(idfile, "#ifdef __REACTOS__\n");
+  fprintf(idfile, "#define WIN32_NO_STATUS\n");
+  fprintf(idfile, "#define WIN32_LEAN_AND_MEAN\n");
+  fprintf(idfile, "#endif\n\n");
+
   fprintf(idfile, "#include <rpc.h>\n");
   fprintf(idfile, "#include <rpcndr.h>\n\n");
 
diff -pudN e:\wine-patched\tools\widl/widltypes.h e:\reactos-sync-clean\tools\widl/widltypes.h
--- e:\wine-patched\tools\widl/widltypes.h	2015-10-30 18:41:54 +0100
+++ e:\reactos-sync-clean\tools\widl/widltypes.h	2015-11-16 20:04:16 +0100
@@ -21,6 +21,15 @@
 #ifndef __WIDL_WIDLTYPES_H
 #define __WIDL_WIDLTYPES_H
 
+#define S_OK           0
+#define S_FALSE        1
+#define E_OUTOFMEMORY  ((HRESULT)0x8007000EL)
+#define TYPE_E_IOERROR ((HRESULT)0x80028CA2L)
+
+#ifndef max
+#define max(a, b) ((a) > (b) ? a : b)
+#endif
+
 #include <stdarg.h>
 #include <assert.h>
 #include "guiddef.h"
diff -pudN e:\wine-patched\tools\widl/write_msft.c e:\reactos-sync-clean\tools\widl/write_msft.c
--- e:\wine-patched\tools\widl/write_msft.c	2015-11-15 19:23:32 +0100
+++ e:\reactos-sync-clean\tools\widl/write_msft.c	2015-11-16 20:04:16 +0100
@@ -39,10 +39,8 @@
 
 #define NONAMELESSUNION
 
-#include "winerror.h"
-#include "windef.h"
-#include "winbase.h"
-#include "winnls.h"
+#include <typedefs.h>
+#include <nls.h>
 
 #include "widl.h"
 #include "typelib.h"