diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 346c71fe..466a619c 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -35,7 +35,6 @@ option(USE_LIBUSBWIN32 "Prefer libusb-win32 over libusb" OFF)
 option(DEBUG_CMAKE "Enable debugging output for this CMake project" OFF)
 
 include(CheckIncludeFile)
-include(CheckFunctionExists)
 include(CheckSymbolExists)
 include(FetchContent)
 include(FindPackageMessage)
@@ -126,24 +125,6 @@ else()
     endif()
 endif()
 
-# =====================================
-# Detect headers
-# =====================================
-
-check_include_file(stdint.h HAVE_STDINT_H)
-check_include_file(stdlib.h HAVE_STDLIB_H)
-check_include_file(inttypes.h HAVE_INTTYPES_H)
-check_include_file(netinet/in.h HAVE_NETINET_IN_H)
-
-# =====================================
-# Detect functions
-# =====================================
-
-check_function_exists(usleep HAVE_USLEEP)
-check_function_exists(getaddrinfo HAVE_GETADDRINFO)
-check_function_exists(gettimeofday HAVE_GETTIMEOFDAY)
-check_function_exists(strcasecmp HAVE_STRCASECMP)
-
 # =====================================
 # Detect installed libraries
 # =====================================
@@ -274,7 +255,7 @@ if(USE_EXTERNAL)
 
     FetchContent_Declare(libftdi
         GIT_REPOSITORY https://github.com/avrdudes/libftdi.git
-        GIT_TAG facd9b16336539b68e8e824ece994d3d3eb2f091
+        GIT_TAG f3a54da710002a7d25a32a69e667a69ef84cc120
         )
 
     message(STATUS "Fetching external libraries, please wait...")
@@ -313,10 +294,8 @@ endif()
 add_compile_definitions(CONFIG_DIR=\"${CONFIG_DIR}\")
 
 if(WIN32)
-    set(HAVE_LIBWS2_32 1)
     set(EXTRA_WINDOWS_SOURCES "${PROJECT_BINARY_DIR}/windows.rc")
     set(EXTRA_WINDOWS_LIBRARIES setupapi ws2_32)
-    add_compile_definitions(WIN32NATIVE=1)
 endif()
 
 if(NOT WIN32)
@@ -325,11 +304,6 @@ if(NOT WIN32)
 endif()
 
 if(MSVC)
-    # The following functions are implemented in the MSVC compatibility layer
-    set(HAVE_USLEEP 1)
-    set(HAVE_GETTIMEOFDAY 1)
-    set(HAVE_STRCASECMP 1)
-
     add_compile_definitions(_CRT_SECURE_NO_WARNINGS=1)
     add_compile_definitions(_CRT_NONSTDC_NO_WARNINGS=1)
     add_compile_definitions(_WINSOCK_DEPRECATED_NO_WARNINGS=1)
@@ -395,7 +369,6 @@ if (DEBUG_CMAKE)
     message(STATUS "HAVE_LIBFTDI: ${HAVE_LIBFTDI}")
     message(STATUS "HAVE_LIBFTDI1: ${HAVE_LIBFTDI1}")
     message(STATUS "HAVE_LIBREADLINE: ${HAVE_LIBREADLINE}")
-    message(STATUS "HAVE_LIBWS2_32: ${HAVE_LIBWS2_32}")
     message(STATUS "HAVE_LIBELF_H: ${HAVE_LIBELF_H}")
     message(STATUS "HAVE_LIBELF_LIBELF_H: ${HAVE_LIBELF_LIBELF_H}")
     message(STATUS "HAVE_USB_H: ${HAVE_USB_H}")
@@ -555,7 +528,6 @@ add_library(libavrdude STATIC
     lists.c
     micronucleus.c
     micronucleus.h
-    my_ddk_hidsdi.h
     par.c
     par.h
     pgm.c
diff --git a/src/Makefile.am b/src/Makefile.am
index c104e295..dd7adb57 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -138,7 +138,6 @@ libavrdude_a_SOURCES = \
 	lists.c \
 	micronucleus.c \
 	micronucleus.h \
-	my_ddk_hidsdi.h \
 	par.c \
 	par.h \
 	pgm.c \
diff --git a/src/avrdude.h b/src/avrdude.h
index b4c7ee87..05048d5d 100644
--- a/src/avrdude.h
+++ b/src/avrdude.h
@@ -16,13 +16,13 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* $Id$ */
+ /* $Id$ */
 
 #ifndef avrdude_h
 #define avrdude_h
 
 #define SYSTEM_CONF_FILE "avrdude.conf"
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
 #define USER_CONF_FILE "avrdude.rc"
 #else
 #define USER_CONF_FILE ".avrduderc"
@@ -44,27 +44,4 @@ int avrdude_message(const int msglvl, const char *format, ...);
 #define MSG_TRACE   (4) /* displayed with -vvvv, show trace commuication */
 #define MSG_TRACE2  (5) /* displayed with -vvvvv */
 
-#if defined(WIN32NATIVE)
-
-#include "ac_cfg.h"
-#include <windows.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#if !defined(HAVE_USLEEP)
-int usleep(unsigned int us);
-#endif
-
-#if !defined(HAVE_GETTIMEOFDAY)
-struct timezone;
-int gettimeofday(struct timeval *tv, struct timezone *tz);
-#endif /* HAVE_GETTIMEOFDAY */
-
-#ifdef __cplusplus
-}
-#endif
-#endif /* defined(WIN32NATIVE) */
-
 #endif
diff --git a/src/bitbang.c b/src/bitbang.c
index fe06c425..592ca124 100644
--- a/src/bitbang.c
+++ b/src/bitbang.c
@@ -17,7 +17,7 @@
  * You should have received a copy of the GNU General Public License
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
-/* $Id$ */
+ /* $Id$ */
 
 #include "ac_cfg.h"
 
@@ -28,9 +28,12 @@
 #include <unistd.h>
 #include <errno.h>
 
-#if !defined(WIN32NATIVE)
-#  include <signal.h>
-#  include <sys/time.h>
+#if defined(WIN32)
+#define WIN32_LEAN_AND_MEAN
+#include <windows.h>
+#else
+#include <signal.h>
+#include <sys/time.h>
 #endif
 
 #include "avrdude.h"
@@ -43,7 +46,7 @@
 
 static int delay_decrement;
 
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
 static int has_perfcount;
 static LARGE_INTEGER freq;
 #else
@@ -57,14 +60,14 @@ static void alarmhandler(int signo)
   done = 1;
   signal(SIGALRM, saved_alarmhandler);
 }
-#endif /* WIN32NATIVE */
+#endif /* WIN32 */
 
 /*
  * Calibrate the microsecond delay loop below.
  */
 static void bitbang_calibrate_delay(void)
 {
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
   /*
    * If the hardware supports a high-resolution performance counter,
    * we ultimately prefer that one, as it gives quite accurate delays
@@ -91,7 +94,7 @@ static void bitbang_calibrate_delay(void)
                     progname);
     delay_decrement = 100;
   }
-#else  /* !WIN32NATIVE */
+#else  /* !WIN32 */
   struct itimerval itv;
   volatile int i;
 
@@ -124,7 +127,7 @@ static void bitbang_calibrate_delay(void)
   delay_decrement = -i / 100000;
   avrdude_message(MSG_NOTICE2, " calibrated to %d cycles per us\n",
                   delay_decrement);
-#endif /* WIN32NATIVE */
+#endif /* WIN32 */
 }
 
 /*
@@ -134,7 +137,7 @@ static void bitbang_calibrate_delay(void)
  */
 void bitbang_delay(unsigned int us)
 {
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
   LARGE_INTEGER countNow, countEnd;
 
   if (has_perfcount)
@@ -147,14 +150,14 @@ void bitbang_delay(unsigned int us)
   }
   else /* no performance counters -- run normal uncalibrated delay */
   {
-#endif  /* WIN32NATIVE */
+#endif  /* WIN32 */
   volatile unsigned int del = us * delay_decrement;
 
   while (del > 0)
     del--;
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
   }
-#endif /* WIN32NATIVE */
+#endif /* WIN32 */
 }
 
 /*
diff --git a/src/cmake_config.h.in b/src/cmake_config.h.in
index d4ca65a6..4b051b04 100644
--- a/src/cmake_config.h.in
+++ b/src/cmake_config.h.in
@@ -35,18 +35,6 @@
 
 /* ----- Functions ----- */
 
-/* Define to 1 if you have the `usleep' function. */
-#cmakedefine HAVE_USLEEP 1
-
-/* Define to 1 if you have the `getaddrinfo' function. */
-#cmakedefine HAVE_GETADDRINFO 1
-
-/* Define to 1 if you have the `gettimeofday' function. */
-#cmakedefine HAVE_GETTIMEOFDAY 1
-
-/* Define to 1 if you have the `strcasecmp' function. */
-#cmakedefine HAVE_STRCASECMP 1
-
 /* Define if lex/flex has yylex_destroy */
 #cmakedefine HAVE_YYLEX_DESTROY 1
 
@@ -61,15 +49,6 @@
 /* Define to 1 if the system has the type `ulong_t'. */
 #cmakedefine HAVE_ULONG_T 1
 
-/* Define to 1 if you have the <stdint.h> header file. */
-#cmakedefine HAVE_STDINT_H 1
-
-/* Define to 1 if you have the <stdlib.h> header file. */
-#cmakedefine HAVE_STDLIB_H 1
-
-/* Define to 1 if you have the <inttypes.h> header file. */
-#cmakedefine HAVE_INTTYPES_H 1
-
 /* Define if ELF support is enabled via libelf */
 #cmakedefine HAVE_LIBELF 1
 
@@ -120,9 +99,3 @@
 
 /* Define to 1 if you have the `readline' library (-lreadline). */
 #cmakedefine HAVE_LIBREADLINE 1
-
-/* Define to 1 if you have the `ws2_32' library (-lws2_32). */
-#cmakedefine HAVE_LIBWS2_32 1
-
-/* Define to 1 if you have the <netinet/in.h> header file. */
-#cmakedefine HAVE_NETINET_IN_H 1
diff --git a/src/config_gram.y b/src/config_gram.y
index 468706e5..bea56068 100644
--- a/src/config_gram.y
+++ b/src/config_gram.y
@@ -30,7 +30,7 @@
 #include "libavrdude.h"
 #include "config.h"
 
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
 #define strtok_r( _s, _sep, _lasts ) \
     ( *(_lasts) = strtok( (_s), (_sep) ) )
 #endif
diff --git a/src/configure.ac b/src/configure.ac
index 21442bb9..cd44d496 100644
--- a/src/configure.ac
+++ b/src/configure.ac
@@ -228,9 +228,6 @@ AC_HEADER_TIME
 
 AC_CHECK_HEADERS([netinet/in.h])
 
-# WinSock2
-AC_CHECK_LIB([ws2_32], [puts])
-
 # Checks for library functions.
 AC_CHECK_FUNCS([memset select strcasecmp strdup strerror strncasecmp strtol strtoul gettimeofday usleep getaddrinfo])
 
@@ -239,12 +236,7 @@ SAVED_LIBS="${LIBS}"
 case $target in
         *-*-mingw32* | *-*-cygwin* | *-*-windows*)
 		LIBHID="-lhid -lsetupapi"
-		if test $ac_cv_header_ddk_hidsdi_h = yes
-		then
-			HIDINCLUDE="#include <ddk/hidsdi.h>"
-		else
-			HIDINCLUDE="#include \"my_ddk_hidsdi.h\""
-		fi
+		HIDINCLUDE="#include <hidsdi.h>"
 		;;
 	*)
 		LIBHID=""
diff --git a/src/confwin.c b/src/confwin.c
index 1be95e87..9624947f 100644
--- a/src/confwin.c
+++ b/src/confwin.c
@@ -20,15 +20,13 @@
 #include "avrdude.h"
 #include "libavrdude.h"
 
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
 
-#include <limits.h>
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 
-
 static char *filename;
 
-
 void win_sys_config_set(char sys_config[PATH_MAX])
 {
     sys_config[0] = 0;
@@ -38,7 +36,6 @@ void win_sys_config_set(char sys_config[PATH_MAX])
     return;
 }
 
-
 void win_usr_config_set(char usr_config[PATH_MAX])
 {
     usr_config[0] = 0;
@@ -48,7 +45,4 @@ void win_usr_config_set(char usr_config[PATH_MAX])
     return;
 }
 
-
 #endif
-
-
diff --git a/src/fileio.c b/src/fileio.c
index e03aa7fa..06519c66 100644
--- a/src/fileio.c
+++ b/src/fileio.c
@@ -1369,7 +1369,7 @@ static int fmt_autodetect(char * fname)
   int found;
   int first = 1;
 
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
   f = fopen(fname, "r");
 #else
   f = fopen(fname, "rb");
@@ -1518,7 +1518,7 @@ int fileio(int op, char * filename, FILEFMT format,
     }
   }
 
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
   /* Open Raw Binary and ELF format in binary mode on Windows.*/
   if(format == FMT_RBIN || format == FMT_ELF)
   {
diff --git a/src/flip1.c b/src/flip1.c
index 220a9426..0c8a3ab2 100644
--- a/src/flip1.c
+++ b/src/flip1.c
@@ -23,6 +23,7 @@
 
 #include "ac_cfg.h"
 
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -30,13 +31,6 @@
 #include <limits.h>
 #include <unistd.h>
 
-#if HAVE_STDINT_H
-#include <stdint.h>
-#elif HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
-
 #include "avrdude.h"
 #include "libavrdude.h"
 
diff --git a/src/flip2.c b/src/flip2.c
index d59147e2..34ad30f5 100644
--- a/src/flip2.c
+++ b/src/flip2.c
@@ -20,6 +20,7 @@
 
 #include "ac_cfg.h"
 
+#include <stdint.h>
 #include <stdio.h>
 #include <stdlib.h>
 #include <string.h>
@@ -27,12 +28,6 @@
 #include <limits.h>
 #include <unistd.h>
 
-#if HAVE_STDINT_H
-#include <stdint.h>
-#elif HAVE_INTTYPES_H
-#include <inttypes.h>
-#endif
-
 #include "avrdude.h"
 #include "libavrdude.h"
 
diff --git a/src/ft245r.c b/src/ft245r.c
index 42edbb51..d009d9ed 100644
--- a/src/ft245r.c
+++ b/src/ft245r.c
@@ -73,10 +73,6 @@
 #define TPIPCR_GT_0b	0x07
 #define TPI_STOP_BITS	0x03
 
-#if defined(_WIN32)
-#include <windows.h>
-#endif
-
 #if defined(HAVE_LIBFTDI1) && defined(HAVE_LIBUSB_1_0)
 # if defined(HAVE_LIBUSB_1_0_LIBUSB_H)
 #  include <libusb-1.0/libusb.h>
diff --git a/src/libavrdude.h b/src/libavrdude.h
index 0d1bf3a3..40b49b53 100644
--- a/src/libavrdude.h
+++ b/src/libavrdude.h
@@ -27,15 +27,9 @@
 #include <stdio.h>
 #include <limits.h>
 #include <stdbool.h>
-
-/* lets try to select at least 32 bits */
-#ifdef HAVE_STDINT_H
 #include <stdint.h>
-typedef uint32_t pinmask_t;
-#else
-#error Need a C99 capable compiler
-#endif
 
+typedef uint32_t pinmask_t;
 
 /* formerly lists.h */
 
@@ -958,7 +952,7 @@ int read_config(const char * file);
 
 /* formerly confwin.h */
 
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
 
 #ifdef __cplusplus
 extern "C" {
@@ -971,7 +965,7 @@ void win_usr_config_set(char usr_config[PATH_MAX]);
 }
 #endif
 
-#endif  /* WIN32NATIVE */
+#endif  /* WIN32 */
 
 
 #endif  /* libavrdude_h */
diff --git a/src/main.c b/src/main.c
index 94222f56..4f5b37ae 100644
--- a/src/main.c
+++ b/src/main.c
@@ -362,7 +362,7 @@ int main(int argc, char * argv [])
 
   char * safemode_response;
   int fuses_updated = 0;
-#if !defined(WIN32NATIVE)
+#if !defined(WIN32)
   char  * homedir;
 #endif
 
@@ -377,10 +377,10 @@ int main(int argc, char * argv [])
 
   progname = strrchr(argv[0],'/');
 
-#if defined (WIN32NATIVE)
+#if defined (WIN32)
   /* take care of backslash as dir sep in W32 */
   if (!progname) progname = strrchr(argv[0],'\\');
-#endif /* WIN32NATIVE */
+#endif /* WIN32 */
 
   if (progname)
     progname++;
@@ -730,7 +730,7 @@ int main(int argc, char * argv [])
     }
     if (!sys_config_found) {
       // 3. Check CONFIG_DIR/avrdude.conf
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
       win_sys_config_set(sys_config);
 #else
       strcpy(sys_config, CONFIG_DIR);
@@ -754,7 +754,7 @@ int main(int argc, char * argv [])
    * -----------
    * Determine the location of '.avrduderc'.
    */
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
   win_usr_config_set(usr_config);
 #else
   usr_config[0] = 0;
diff --git a/src/msvc/getopt.c b/src/msvc/getopt.c
index ac1fda42..9a0347d4 100644
--- a/src/msvc/getopt.c
+++ b/src/msvc/getopt.c
@@ -49,6 +49,7 @@
  * POSSIBILITY OF SUCH DAMAGE.
  */
 
+#define WIN32_LEAN_AND_MEAN
 #include <errno.h>
 #include <stdlib.h>
 #include <string.h>
diff --git a/src/msvc/gettimeofday.c b/src/msvc/gettimeofday.c
index c7a9844d..eb62d0c7 100644
--- a/src/msvc/gettimeofday.c
+++ b/src/msvc/gettimeofday.c
@@ -3,6 +3,7 @@
 * This file is part of the mingw-w64 runtime package.
 * No warranty is given; refer to the file DISCLAIMER.PD within this package.
 */
+#define WIN32_LEAN_AND_MEAN
 #include <time.h>
 #include <sys/time.h>
 #include <sys/timeb.h>
diff --git a/src/msvc/sys/time.h b/src/msvc/sys/time.h
index 30b02b3c..d5c3a8c4 100644
--- a/src/msvc/sys/time.h
+++ b/src/msvc/sys/time.h
@@ -19,6 +19,19 @@
 #ifndef _TIME_H_
 #define _TIME_H_
 
+// If you need both <windows.h> and <sys/time.h>,
+// make sure you include <windows.h> first.
+#ifndef _WINSOCKAPI_
+#ifndef _TIMEVAL_DEFINED
+#define _TIMEVAL_DEFINED
+struct timeval
+{
+    long tv_sec;
+    long tv_usec;
+};
+#endif /* _TIMEVAL_DEFINED */
+#endif /* _WINSOCKAPI_ */
+
 struct timezone
 {
     int tz_minuteswest;
diff --git a/src/my_ddk_hidsdi.h b/src/my_ddk_hidsdi.h
deleted file mode 100644
index 46c17d67..00000000
--- a/src/my_ddk_hidsdi.h
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * avrdude - A Downloader/Uploader for AVR device programmers
- * Copyright (C) 2006 Christian Starkjohann
- *
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program. If not, see <http://www.gnu.org/licenses/>.
- */
-
-/* $Id$ */
-
-/*
-The following is a replacement for hidsdi.h from the Windows DDK. It defines some
-of the types and function prototypes of this header for our project. If you
-have the Windows DDK version of this file or a version shipped with MinGW, use
-that instead.
-*/
-#ifndef MY_DDK_HIDSDI_H
-#define MY_DDK_HIDSDI_H
-#include <pshpack4.h>
-#include <ddk/hidusage.h>
-#include <ddk/hidpi.h>
-typedef struct{
-    ULONG   Size;
-    USHORT  VendorID;
-    USHORT  ProductID;
-    USHORT  VersionNumber;
-}HIDD_ATTRIBUTES;
-void __stdcall      HidD_GetHidGuid(OUT LPGUID hidGuid);
-BOOLEAN __stdcall   HidD_GetAttributes(IN HANDLE device, OUT HIDD_ATTRIBUTES *attributes);
-BOOLEAN __stdcall   HidD_GetManufacturerString(IN HANDLE device, OUT void *buffer, IN ULONG bufferLen);
-BOOLEAN __stdcall   HidD_GetProductString(IN HANDLE device, OUT void *buffer, IN ULONG bufferLen);
-BOOLEAN __stdcall   HidD_GetSerialNumberString(IN HANDLE device, OUT void *buffer, IN ULONG bufferLen);
-BOOLEAN __stdcall   HidD_GetFeature(IN HANDLE device, OUT void *reportBuffer, IN ULONG bufferLen);
-BOOLEAN __stdcall   HidD_SetFeature(IN HANDLE device, IN void *reportBuffer, IN ULONG bufferLen);
-BOOLEAN __stdcall   HidD_GetNumInputBuffers(IN HANDLE device, OUT ULONG *numBuffers);
-BOOLEAN __stdcall   HidD_SetNumInputBuffers(IN HANDLE device, OUT ULONG numBuffers);
-#include <poppack.h>
-#endif /* MY_DDK_HIDSDI_H */
diff --git a/src/pickit2.c b/src/pickit2.c
index 52396bbb..9e4be94c 100644
--- a/src/pickit2.c
+++ b/src/pickit2.c
@@ -54,9 +54,10 @@
 #include "avrdude.h"
 #include "libavrdude.h"
 
-#if defined(HAVE_LIBUSB) || (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if defined(HAVE_LIBUSB) || (defined(WIN32) && defined(HAVE_LIBHID))
 
-#if (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if (defined(WIN32) && defined(HAVE_LIBHID))
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <hidsdi.h>
 #include <setupapi.h>
@@ -87,8 +88,7 @@
 
 #define SPI_MAX_CHUNK (64 - 10)    // max packet size less the command overhead
 
-// win32native only:
-#if (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if (defined(WIN32) && defined(HAVE_LIBHID))
 static HANDLE open_hid(unsigned short vid, unsigned short pid);
 static const char *usb_strerror()
 {
@@ -102,7 +102,7 @@ static int usb_open_device(struct usb_dev_handle **dev, int vid, int pid);
 #define USB_ERROR_NOTFOUND  2
 #define USB_ERROR_BUSY      16
 #define USB_ERROR_IO        5
-#endif  // WIN32NATIVE
+#endif  // WIN32
 
 static int pickit2_write_report(PROGRAMMER *pgm, const unsigned char report[65]);
 static int pickit2_read_report(PROGRAMMER *pgm, unsigned char report[65]);
@@ -116,7 +116,7 @@ static int pickit2_read_report(PROGRAMMER *pgm, unsigned char report[65]);
  */
 struct pdata
 {
-#if (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if (defined(WIN32) && defined(HAVE_LIBHID))
     HANDLE usb_handle, write_event, read_event;
 #else
     struct usb_dev_handle *usb_handle;     // LIBUSB STUFF
@@ -181,7 +181,7 @@ static void pickit2_teardown(PROGRAMMER * pgm)
 
 static int pickit2_open(PROGRAMMER * pgm, char * port)
 {
-#if (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if (defined(WIN32) && defined(HAVE_LIBHID))
     PDATA(pgm)->usb_handle = open_hid(PICKIT2_VID, PICKIT2_PID);
 
     if (PDATA(pgm)->usb_handle == INVALID_HANDLE_VALUE)
@@ -229,13 +229,13 @@ static int pickit2_open(PROGRAMMER * pgm, char * port)
 
 static void pickit2_close(PROGRAMMER * pgm)
 {
-#if (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if (defined(WIN32) && defined(HAVE_LIBHID))
     CloseHandle(PDATA(pgm)->usb_handle);
     CloseHandle(PDATA(pgm)->read_event);
     CloseHandle(PDATA(pgm)->write_event);
 #else
     usb_close(PDATA(pgm)->usb_handle);
-#endif  // WIN32NATIVE
+#endif  // WIN32
 }
 
 
@@ -810,7 +810,7 @@ static int pickit2_spi(struct programmer_t * pgm, const unsigned char *cmd,
     return n_bytes;
 }
 
-#if (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if (defined(WIN32) && defined(HAVE_LIBHID))
 /*
     Func: open_hid()
     Desc: finds & opens device having specified VID & PID.
@@ -1120,7 +1120,7 @@ static int pickit2_read_report(PROGRAMMER * pgm, unsigned char report[65])
     return usb_read_interrupt(pgm, report, 65, PDATA(pgm)->transaction_timeout);
 }
 
-#else   // WIN32NATIVE
+#else   // WIN32
 /* taken (modified) from avrdude usbasp.c */
 static int usb_open_device(struct usb_dev_handle **device, int vendor, int product)
 {
@@ -1184,7 +1184,7 @@ static int usb_open_device(struct usb_dev_handle **device, int vendor, int produ
 static int pickit2_write_report(PROGRAMMER * pgm, const unsigned char report[65])
 {
     // endpoint 1 OUT??
-    return usb_interrupt_write(PDATA(pgm)->usb_handle, USB_ENDPOINT_OUT | 1, (const char*)(report+1), 64, PDATA(pgm)->transaction_timeout);
+    return usb_interrupt_write(PDATA(pgm)->usb_handle, USB_ENDPOINT_OUT | 1, (char*)(report+1), 64, PDATA(pgm)->transaction_timeout);
 }
 
 static int pickit2_read_report(PROGRAMMER * pgm, unsigned char report[65])
@@ -1192,7 +1192,7 @@ static int pickit2_read_report(PROGRAMMER * pgm, unsigned char report[65])
     // endpoint 1 IN??
     return usb_interrupt_read(PDATA(pgm)->usb_handle, USB_ENDPOINT_IN | 1, (char*)(report+1), 64, PDATA(pgm)->transaction_timeout);
 }
-#endif  // WIN323NATIVE
+#endif  // WIN32
 
 static int  pickit2_parseextparams(struct programmer_t * pgm, LISTID extparms)
 {
@@ -1310,7 +1310,7 @@ void pickit2_initpgm (PROGRAMMER * pgm)
 #else
 static int pickit2_nousb_open (struct programmer_t *pgm, char * name) {
     avrdude_message(MSG_INFO, 
-#ifdef WIN32NATIVE
+#ifdef WIN32
             "%s: error: no usb or hid support. Please compile again with libusb or HID support from Win32 DDK installed.\n",
 #else
             "%s: error: no usb support. Please compile again with libusb installed.\n",
@@ -1332,7 +1332,7 @@ void pickit2_initpgm (PROGRAMMER * pgm)
     strncpy(pgm->type, "pickit2", sizeof(pgm->type));
 }
 
-#endif /* defined(HAVE_LIBUSB) || (defined(WIN32NATIVE) && defined(HAVE_LIBHID)) */
+#endif /* defined(HAVE_LIBUSB) || (defined(WIN32) && defined(HAVE_LIBHID)) */
 
 const char pickit2_desc[] = "Microchip's PICkit2 Programmer";
 
diff --git a/src/ppi.c b/src/ppi.c
index 2706b850..4478115f 100644
--- a/src/ppi.c
+++ b/src/ppi.c
@@ -19,7 +19,7 @@
 /* $Id$ */
 
 
-#if !defined(WIN32NATIVE)
+#if !defined(WIN32)
 
 #include "ac_cfg.h"
 
@@ -233,4 +233,4 @@ void ppi_close(union filedescriptor *fdp)
 
 #endif /* HAVE_PARPORT */
 
-#endif /* !WIN32NATIVE */
+#endif /* !WIN32 */
diff --git a/src/ppiwin.c b/src/ppiwin.c
index 15017277..71ec0a9f 100644
--- a/src/ppiwin.c
+++ b/src/ppiwin.c
@@ -32,8 +32,9 @@ reg = register as defined in an enum in ppi.h. This must be converted
 
 #include "ac_cfg.h"
 
-#if defined(HAVE_PARPORT) && defined(WIN32NATIVE)
+#if defined(HAVE_PARPORT) && defined(WIN32)
 
+#define WIN32_LEAN_AND_MEAN
 #include <errno.h>
 #include <fcntl.h>
 #include <stdio.h>
@@ -336,82 +337,4 @@ static void outb(unsigned char value, unsigned short port)
     return;
 }
 
-#if !defined(HAVE_GETTIMEOFDAY)
-struct timezone;
-int gettimeofday(struct timeval *tv, struct timezone *unused){
-// i've found only ms resolution, avrdude expects us
-
-	SYSTEMTIME st;
-	GetSystemTime(&st);
-  
-	tv->tv_sec=(long)(st.wSecond+st.wMinute*60+st.wHour*3600);
-	tv->tv_usec=(long)(st.wMilliseconds*1000);
-
-	return 0;
-}
-#endif /* HAVE_GETTIMEOFDAY */
-
-// #define W32USLEEPDBG
-
-#ifdef W32USLEEPDBG
-
-#  define DEBUG_QueryPerformanceCounter(arg) QueryPerformanceCounter(arg)
-#  define DEBUG_DisplayTimingInfo(start, stop, freq, us, has_highperf)     \
-     do {                                                                  \
-       unsigned long dt;                                                   \
-       dt = (unsigned long)((stop.QuadPart - start.QuadPart) * 1000 * 1000 \
-                            / freq.QuadPart);                              \
-       avrdude_message(MSG_INFO, \
-               "hpt:%i usleep usec:%lu sleep msec:%lu timed usec:%lu\n",   \
-               has_highperf, us, ((us + 999) / 1000), dt);                 \
-     } while (0)
-
-#else
-
-#  define DEBUG_QueryPerformanceCounter(arg)
-#  define DEBUG_DisplayTimingInfo(start, stop, freq, us, has_highperf)
-
 #endif
-
-#if !defined(HAVE_USLEEP)
-int usleep(unsigned int us)
-{
-	int has_highperf;
-	LARGE_INTEGER freq,start,stop,loopend;
-
-	// workaround: although usleep is very precise if using
-	// high-performance-timers there are sometimes problems with
-	// verify - increasing the delay helps sometimes but not
-	// realiably. There must be some other problem. Maybe just
-	// with my test-hardware maybe in the code-base.
-	//// us=(unsigned long) (us*1.5);
-
-	has_highperf=QueryPerformanceFrequency(&freq);
-
-	//has_highperf=0; // debug
-
-	if (has_highperf) {
-		QueryPerformanceCounter(&start);
-		loopend.QuadPart=start.QuadPart+freq.QuadPart*us/(1000*1000);
-		do {
-			QueryPerformanceCounter(&stop);
-		} while (stop.QuadPart<=loopend.QuadPart);
-	}
-	else {
-		DEBUG_QueryPerformanceCounter(&start);
-
-		Sleep(1);
-		Sleep( (DWORD)((us+999)/1000) );
-
-		DEBUG_QueryPerformanceCounter(&stop);
-	}
-
-    DEBUG_DisplayTimingInfo(start, stop, freq, us, has_highperf);
-
-    return 0;
-}
-#endif  /* !HAVE_USLEEP */
-
-#endif
-
-
diff --git a/src/ser_avrdoper.c b/src/ser_avrdoper.c
index c834411b..2e90f0eb 100644
--- a/src/ser_avrdoper.c
+++ b/src/ser_avrdoper.c
@@ -26,7 +26,7 @@
 
 #include "ac_cfg.h"
 
-#if defined(HAVE_LIBHIDAPI) || (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if defined(HAVE_LIBHIDAPI) || (defined(WIN32) && defined(HAVE_LIBHID))
 
 #include <stdio.h>
 #include <string.h>
@@ -161,6 +161,7 @@ static int usbGetReport(union filedescriptor *fdp, int reportType, int reportNum
 /* ------------------------------------------------------------------------ */
 
 
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <setupapi.h>
 #include <hidsdi.h>
@@ -327,7 +328,7 @@ static int usbGetReport(union filedescriptor *fdp, int reportType, int reportNum
     return rval == 0 ? USB_ERROR_IO : 0;
 }
 
-#endif  /* WIN32NATIVE */
+#endif  /* WIN32 */
 
 /* ------------------------------------------------------------------------ */
 /* ------------------------------------------------------------------------ */
@@ -550,4 +551,4 @@ struct serial_device avrdoper_serdev =
   .flags = SERDEV_FL_NONE,
 };
 
-#endif /* defined(HAVE_LIBHIDAPI) || (defined(WIN32NATIVE) && defined(HAVE_LIBHID)) */
+#endif /* defined(HAVE_LIBHIDAPI) || (defined(WIN32) && defined(HAVE_LIBHID)) */
diff --git a/src/ser_posix.c b/src/ser_posix.c
index 3d8e15a1..96d665f0 100644
--- a/src/ser_posix.c
+++ b/src/ser_posix.c
@@ -23,7 +23,7 @@
  * Posix serial interface for avrdude.
  */
 
-#if !defined(WIN32NATIVE)
+#if !defined(WIN32)
 
 #include "ac_cfg.h"
 
@@ -174,7 +174,6 @@ static int ser_setparams(union filedescriptor *fd, long baud, unsigned long cfla
 static int
 net_open(const char *port, union filedescriptor *fdp)
 {
-#ifdef HAVE_GETADDRINFO
   char *hp, *hstr, *pstr;
   int s, fd, ret = -1;
   struct addrinfo hints;
@@ -247,12 +246,6 @@ net_open(const char *port, union filedescriptor *fdp)
 error:
   free(hp);
   return ret;
-#else
-  avrdude_message(MSG_INFO,
-	  "%s: Networking is not supported on your platform.\n"
-	  "If you need it, please open a bug report.\n", progname);
-  return -1;
-#endif /* HAVE_GETADDRINFO */
 }
 
 
@@ -526,4 +519,4 @@ struct serial_device serial_serdev =
 
 struct serial_device *serdev = &serial_serdev;
 
-#endif  /* WIN32NATIVE */
+#endif  /* WIN32 */
diff --git a/src/ser_win32.c b/src/ser_win32.c
index 25412cf0..fa4d7aba 100644
--- a/src/ser_win32.c
+++ b/src/ser_win32.c
@@ -17,22 +17,18 @@
  * along with this program. If not, see <http://www.gnu.org/licenses/>.
  */
 
-/* $Id$ */
-
 /*
  * Native Win32 serial interface for avrdude.
  */
 
 #include "ac_cfg.h"
 
-#if defined(WIN32NATIVE)
-
-#ifdef HAVE_LIBWS2_32
-/* winsock2.h must be included before windows.h from avrdude.h... */
-#  include <winsock2.h>
-#endif
+#if defined(WIN32)
 
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
+#include <winsock2.h>
+#include <stdlib.h>
 #include <stdio.h>
 #include <ctype.h>   /* for isprint */
 #include <errno.h>   /* ENOTTY */
@@ -154,7 +150,6 @@ static int ser_setparams(union filedescriptor *fd, long baud, unsigned long cfla
 	}
 }
 
-#ifdef HAVE_LIBWS2_32
 static int
 net_open(const char *port, union filedescriptor *fdp)
 {
@@ -246,7 +241,6 @@ net_open(const char *port, union filedescriptor *fdp)
 	serial_over_ethernet = 1;
 	return 0;
 }
-#endif
 
 
 static int ser_open(char * port, union pinfo pinfo, union filedescriptor *fdp)
@@ -260,14 +254,7 @@ static int ser_open(char * port, union pinfo pinfo, union filedescriptor *fdp)
 	 * handle it as a TCP connection to a terminal server.
 	 */
 	if (strncmp(port, "net:", strlen("net:")) == 0) {
-#ifdef HAVE_LIBWS2_32
 		return net_open(port + strlen("net:"), fdp);
-#else
-		avrdude_message(MSG_INFO, "%s: ser_open(): "
-				"not configured for TCP connections\n",
-                                progname);
-		return -1;
-#endif
 	}
 
 	if (strncasecmp(port, "com", strlen("com")) == 0) {
@@ -370,7 +357,6 @@ static int ser_set_dtr_rts(union filedescriptor *fd, int is_on)
 	}
 }
 
-#ifdef HAVE_LIBWS2_32
 static int net_send(union filedescriptor *fd, const unsigned char * buf, size_t buflen)
 {
 	LPVOID lpMsgBuf;
@@ -429,16 +415,13 @@ static int net_send(union filedescriptor *fd, const unsigned char * buf, size_t
 
 	return 0;
 }
-#endif
 
 
 static int ser_send(union filedescriptor *fd, const unsigned char * buf, size_t buflen)
 {
-#ifdef HAVE_LIBWS2_32
 	if (serial_over_ethernet) {
 		return net_send(fd, buf, buflen);
 	}
-#endif
 
 	size_t len = buflen;
 	unsigned char c='\0';
@@ -493,7 +476,6 @@ static int ser_send(union filedescriptor *fd, const unsigned char * buf, size_t
 }
 
 
-#ifdef HAVE_LIBWS2_32
 static int net_recv(union filedescriptor *fd, unsigned char * buf, size_t buflen)
 {
 	LPVOID lpMsgBuf;
@@ -587,15 +569,12 @@ reselect:
 
 	return 0;
 }
-#endif
 
 static int ser_recv(union filedescriptor *fd, unsigned char * buf, size_t buflen)
 {
-#ifdef HAVE_LIBWS2_32
 	if (serial_over_ethernet) {
 		return net_recv(fd, buf, buflen);
 	}
-#endif
 
 	unsigned char c;
 	unsigned char * p = buf;
@@ -660,7 +639,6 @@ static int ser_recv(union filedescriptor *fd, unsigned char * buf, size_t buflen
   return 0;
 }
 
-#ifdef HAVE_LIBWS2_32
 static int net_drain(union filedescriptor *fd, int display)
 {
 	LPVOID lpMsgBuf;
@@ -739,15 +717,12 @@ static int net_drain(union filedescriptor *fd, int display)
 
 	return 0;
 }
-#endif
 
 static int ser_drain(union filedescriptor *fd, int display)
 {
-#ifdef HAVE_LIBWS2_32
 	if (serial_over_ethernet) {
 		return net_drain(fd, display);
 	}
-#endif
 
 	// int rc;
 	unsigned char buf[10];
@@ -813,4 +788,4 @@ struct serial_device serial_serdev =
 
 struct serial_device *serdev = &serial_serdev;
 
-#endif /* WIN32NATIVE */
+#endif /* WIN32 */
diff --git a/src/serbb_posix.c b/src/serbb_posix.c
index a7dd0997..9f10dccf 100644
--- a/src/serbb_posix.c
+++ b/src/serbb_posix.c
@@ -23,7 +23,7 @@
  * Posix serial bitbanging interface for avrdude.
  */
 
-#if !defined(WIN32NATIVE)
+#if !defined(WIN32)
 
 #include "ac_cfg.h"
 
@@ -318,4 +318,4 @@ void serbb_initpgm(PROGRAMMER *pgm)
   pgm->write_byte     = avr_write_byte_default;
 }
 
-#endif  /* WIN32NATIVE */
+#endif  /* WIN32 */
diff --git a/src/serbb_win32.c b/src/serbb_win32.c
index ff087c4e..9a58be10 100644
--- a/src/serbb_win32.c
+++ b/src/serbb_win32.c
@@ -25,11 +25,12 @@
 
 #include "avrdude.h"
 
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
 
 
 #include "ac_cfg.h"
 
+#define WIN32_LEAN_AND_MEAN
 #include <windows.h>
 #include <stdio.h>
 
@@ -363,4 +364,4 @@ void serbb_initpgm(PROGRAMMER *pgm)
   pgm->write_byte     = avr_write_byte_default;
 }
 
-#endif  /* WIN32NATIVE */
+#endif  /* WIN32 */
diff --git a/src/stk500v2.c b/src/stk500v2.c
index f6c5b1ca..11aa9a94 100644
--- a/src/stk500v2.c
+++ b/src/stk500v2.c
@@ -1613,7 +1613,7 @@ static int stk500v2_open(PROGRAMMER * pgm, char * port)
   PDATA(pgm)->pgmtype = PGMTYPE_UNKNOWN;
 
   if(strcasecmp(port, "avrdoper") == 0){
-#if defined(HAVE_LIBHIDAPI) || (defined(WIN32NATIVE) && defined(HAVE_LIBHID))
+#if defined(HAVE_LIBHIDAPI) || (defined(WIN32) && defined(HAVE_LIBHID))
     serdev = &avrdoper_serdev;
     PDATA(pgm)->pgmtype = PGMTYPE_STK500;
 #else
diff --git a/src/term.c b/src/term.c
index 11acb59d..96bf2bce 100644
--- a/src/term.c
+++ b/src/term.c
@@ -27,11 +27,9 @@
 #include <limits.h>
 
 #if defined(HAVE_LIBREADLINE)
-#if !defined(WIN32NATIVE)
 #  include <readline/readline.h>
 #  include <readline/history.h>
 #endif
-#endif
 
 #include "avrdude.h"
 #include "term.h"
@@ -919,7 +917,7 @@ static int do_cmd(PROGRAMMER * pgm, struct avrpart * p,
 
 char * terminal_get_input(const char *prompt)
 {
-#if defined(HAVE_LIBREADLINE) && !defined(WIN32NATIVE)
+#if defined(HAVE_LIBREADLINE) && !defined(WIN32)
   char *input;
   input = readline(prompt);
   if ((input != NULL) && (strlen(input) >= 1))
diff --git a/src/updi_link.c b/src/updi_link.c
index b1af2b87..157c81b2 100644
--- a/src/updi_link.c
+++ b/src/updi_link.c
@@ -39,14 +39,9 @@
 #include "updi_constants.h"
 #include "updi_state.h"
 
-#include <sys/time.h>
-
-void msleep(int tms)
+static void msleep(int tms)
 {
-    struct timeval tv;
-    tv.tv_sec  = tms / 1000;
-    tv.tv_usec = (tms % 1000) * 1000;
-    select (0, NULL, NULL, NULL, &tv);
+    usleep(tms * 1000);
 }
 
 static int updi_physical_open(PROGRAMMER* pgm, int baudrate, unsigned long cflags)
diff --git a/src/usb_hidapi.c b/src/usb_hidapi.c
index 81e9c4ab..d23c628e 100644
--- a/src/usb_hidapi.c
+++ b/src/usb_hidapi.c
@@ -42,11 +42,6 @@
 
 #include "usbdevs.h"
 
-#if defined(WIN32NATIVE)
-/* someone has defined "interface" to "struct" in Cygwin */
-#  undef interface
-#endif
-
 /*
  * The "baud" parameter is meaningless for USB devices, so we reuse it
  * to pass the desired USB device ID.
diff --git a/src/usb_libusb.c b/src/usb_libusb.c
index 235e330a..0d9ad440 100644
--- a/src/usb_libusb.c
+++ b/src/usb_libusb.c
@@ -48,7 +48,7 @@
 
 #include "usbdevs.h"
 
-#if defined(WIN32NATIVE)
+#if defined(WIN32)
 /* someone has defined "interface" to "struct" in Cygwin */
 #  undef interface
 #endif
diff --git a/src/usbtiny.c b/src/usbtiny.c
index 0360d68f..68886aab 100644
--- a/src/usbtiny.c
+++ b/src/usbtiny.c
@@ -52,13 +52,7 @@
 #define TPIPCR_GT_0b	0x07
 #define TPI_STOP_BITS	0x03
 
-#ifdef HAVE_NETINET_IN_H
-#  include <netinet/in.h>
-#  define LITTLE_TO_BIG_16(x) (htons(x))
-#else
-// WIN32
-#  define LITTLE_TO_BIG_16(x) ((((x) << 8) & 0xFF00) | (((x) >> 8) & 0x00FF))
-#endif
+#define LITTLE_TO_BIG_16(x) ((((x) << 8) & 0xFF00) | (((x) >> 8) & 0x00FF))
 
 #ifndef HAVE_UINT_T
 typedef	unsigned int	uint_t;