diff --git a/Makefile b/Makefile
index 610a2e1e9fa90db02201dfcd1e8bd09256fc012c..fc6eced371594c45f884ee0bbe1917e11c80828f 100644
--- a/Makefile
+++ b/Makefile
@@ -66,7 +66,7 @@ FLAGS2 =
 endif
 
 # this works on llvm or real gcc
-CC = gcc
+CC = clang
 
 DEFINES = 
 CFLAGS = -g -ggdb $(FLAGS2) $(INCLUDES) $(DEFINES) -Wall -O3
diff --git a/src/rawsock-pcap.c b/src/rawsock-pcap.c
index ac83df1e354638c7a22b08b58e744a5acfd7fd6f..2e96d0cf3145770dac7334884dbb70fdf28035b8 100644
--- a/src/rawsock-pcap.c
+++ b/src/rawsock-pcap.c
@@ -168,73 +168,9 @@ static const char *null_PCAP_LIB_VERSION(void)
     return "stub/0.0";
 }
 
-#ifdef WIN32
-static void *null_PCAP_GET_AIRPCAP_HANDLE(void *p)
-{
-    UNUSEDPARM(p);
-    return NULL;
-}
-#endif
 
-#ifdef WIN32
-static unsigned null_AIRPCAP_SET_DEVICE_CHANNEL(void *p, unsigned channel)
-{
-    UNUSEDPARM(p);UNUSEDPARM(channel);
-    
-    return 0; /*0=failure, 1=success*/
-}
-#endif
 
 
-static unsigned null_CAN_TRANSMIT(const char *devicename)
-{
-#if WIN32
-    struct DeviceCapabilities {
-        unsigned AdapterId;		/* An Id that identifies the adapter model.*/
-        char AdapterModelName;	/* String containing a printable adapter model.*/
-        unsigned AdapterBus;	/* The type of bus the adapter is plugged to. */
-        unsigned CanTransmit;	/* TRUE if the adapter is able to perform frame injection.*/
-        unsigned CanSetTransmitPower; /* TRUE if the adapter's transmit power is can be specified by the user application.*/
-        unsigned ExternalAntennaPlug; /* TRUE if the adapter supports plugging one or more external antennas.*/
-        unsigned SupportedMedia;
-        unsigned SupportedBands;
-    } caps;
-    void * (*myopen)(const char *devicename, char *errbuf);
-    void (*myclose)(void *h);
-    unsigned (*mycapabilities)(void *h, struct DeviceCapabilities *caps);
-    
-    unsigned result = 0;
-    void *hAirpcap;
-    
-    
-    hAirpcap = LoadLibraryA("airpcap.dll");
-    if (hAirpcap == NULL)
-    return 0;
-    
-    
-    myopen = (void * (*)(const char *, char*))GetProcAddress(hAirpcap, "AirpcapOpen");
-    myclose = (void (*)(void*))GetProcAddress(hAirpcap, "AirpcapClose");
-    mycapabilities = (unsigned (*)(void*, struct DeviceCapabilities *))GetProcAddress(hAirpcap, "AirpcapGetDeviceCapabilities");
-    if (myopen && mycapabilities && myclose ) {
-        void *h = myopen(devicename, NULL);
-        if (h) {
-            if (mycapabilities(h, &caps)) {
-                result = caps.CanTransmit;
-            }
-            myclose(h);
-        }
-    }
-    
-    FreeLibrary(hAirpcap);
-    return result;
-#elif defined(__linux__)
-    return 1;
-#elif defined(__APPLE__) || defined(__FreeBSD__) || defined(__OpenBSD__)
-    return 1;
-#else
-#error unknown os
-#endif
-}
 
 struct PcapFunctions PCAP = {
     0,0,0,0,0,
@@ -345,40 +281,36 @@ int pcap_init(void)
 #ifdef WIN32
     void * hPacket;
     void * hLibpcap;
-    void * hAirpcap;
     
     pl->is_available = 0;
     pl->is_printing_debug = 1;
     
     /* Look for the Packet.dll */
-    hPacket = LoadLibraryA("Packet.dll");
+    hPacket = LoadLibraryA("NPcap\\Packet.dll");
+    if (hPacket == NULL)
+        hPacket = LoadLibraryA("Packet.dll");
     if (hPacket == NULL) {
         if (pl->is_printing_debug)
         switch (GetLastError()) {
             case ERROR_MOD_NOT_FOUND:
-            fprintf(stderr, "%s: not found\n", "Packet.dll");
-            return;
+                fprintf(stderr, "%s: not found\n", "Packet.dll");
+                return -1;
             default:
-            fprintf(stderr, "%s: couldn't load %d\n", "Packet.dll", (int)GetLastError());
-            return;
+                fprintf(stderr, "%s: couldn't load %d\n", "Packet.dll", (int)GetLastError());
+                return -1;
         }
     }
     
-    /* Look for the Packet.dll */
-    hLibpcap = LoadLibraryA("wpcap.dll");
+    /* Look for the winpcap.dll */
+    hLibpcap = LoadLibraryA("Npcap\\wpcap.dll");
+    if (hLibpcap == NULL)
+        hLibpcap = LoadLibraryA("wpcap.dll");
     if (hLibpcap == NULL) {
         if (pl->is_printing_debug)
-        fprintf(stderr, "%s: couldn't load %d\n", "wpcap.dll", (int)GetLastError());
-        return;
+            fprintf(stderr, "%s: couldn't load %d\n", "wpcap.dll", (int)GetLastError());
+        return -1;
     }
     
-    /* Look for the Packet.dll */
-    hAirpcap = LoadLibraryA("airpcap.dll");
-    if (hLibpcap == NULL) {
-        if (pl->is_printing_debug)
-        fprintf(stderr, "%s: couldn't load %d\n", "airpcap.dll", (int)GetLastError());
-        return;
-    }
     
 #define DOLINK(PCAP_DATALINK, datalink) \
 pl->datalink = (PCAP_DATALINK)GetProcAddress(hLibpcap, "pcap_"#datalink); \
@@ -430,20 +362,6 @@ pl->func_err=0, pl->datalink = null_##PCAP_DATALINK;
 #endif
 #endif
     
-#ifdef WIN32
-    DOLINK(PCAP_GET_AIRPCAP_HANDLE, get_airpcap_handle);
-    if (pl->func_err) {
-        pl->func_err = 0;
-    }
-    if (hAirpcap) {
-        pl->airpcap_set_device_channel = (AIRPCAP_SET_DEVICE_CHANNEL)GetProcAddress(hAirpcap, "AirpcapSetDeviceChannel");
-        if (pl->airpcap_set_device_channel == NULL)
-        pl->airpcap_set_device_channel = null_AIRPCAP_SET_DEVICE_CHANNEL;
-    }
-#endif
-    
-    
-    
     DOLINK(PCAP_CLOSE			, close);
     DOLINK(PCAP_DATALINK		, datalink);
     DOLINK(PCAP_DISPATCH		, dispatch);
@@ -472,7 +390,6 @@ pl->func_err=0, pl->datalink = null_##PCAP_DATALINK;
 	DOLINK(PCAP_SENDQUEUE_QUEUE		, sendqueue_queue);
 
     
-    pl->can_transmit = null_CAN_TRANSMIT;
     
     if (!pl->func_err)
         pl->is_available = 1;
diff --git a/src/rawsock-pcap.h b/src/rawsock-pcap.h
index c848237e6cd6634dccb5b8c7b639feca50be8a3d..a4a49c4292bcc271f550848fb5d93461916b602a 100644
--- a/src/rawsock-pcap.h
+++ b/src/rawsock-pcap.h
@@ -74,9 +74,6 @@ typedef int         (*PCAP_MAJOR_VERSION)(void *p);
 typedef int         (*PCAP_MINOR_VERSION)(void *p);
 typedef void *      (*PCAP_OPEN_LIVE)(const char *devicename, unsigned snap_length, unsigned is_promiscuous, unsigned read_timeout, char *errbuf);
 typedef void        (*PCAP_FREEALLDEVS)(pcap_if_t *alldevs);
-typedef void *      (*PCAP_GET_AIRPCAP_HANDLE)(void *p);
-typedef unsigned    (*AIRPCAP_SET_DEVICE_CHANNEL)(void *p, unsigned channel);
-typedef unsigned    (*CAN_TRANSMIT)(const char *devicename);
 typedef pcap_t *    (*PCAP_OPEN_OFFLINE)(const char *fname, char *errbuf);
 typedef int         (*PCAP_SENDPACKET)(pcap_t *p, const unsigned char *buf, int size);
 typedef const unsigned char *(*PCAP_NEXT)(pcap_t *p, struct pcap_pkthdr *h);
@@ -121,12 +118,7 @@ struct PcapFunctions {
     PCAP_MAJOR_VERSION      major_version;
     PCAP_MINOR_VERSION      minor_version;
     PCAP_OPEN_LIVE          open_live;
-    PCAP_GET_AIRPCAP_HANDLE get_airpcap_handle;
-    AIRPCAP_SET_DEVICE_CHANNEL airpcap_set_device_channel;
-    //AIRPCAP_SET_FCS_PRESENCE airpcap_set_fcs_presence;
-    //BOOL AirpcapSetFcsPresence(PAirpcapHandle AdapterHandle, BOOL IsFcsPresent);
     
-    CAN_TRANSMIT            can_transmit;
     
     PCAP_OPEN_OFFLINE       open_offline;
     PCAP_SENDPACKET         sendpacket;
diff --git a/src/rawsock.c b/src/rawsock.c
index 6504e697bf1bdafac3604e37b9e92283b0fae887..38e900f64196756a71c75775245e73f5c72e46e0 100644
--- a/src/rawsock.c
+++ b/src/rawsock.c
@@ -485,6 +485,14 @@ rawsock_ignore_transmits(struct Adapter *adapter, const unsigned char *adapter_m
         return;
     }
 
+    if (adapter->pcap) {
+        int err;
+
+        err = PCAP.setdirection(adapter->pcap, PCAP_D_IN);
+        if (err) {
+            PCAP.perror(adapter->pcap, "pcap_setdirection(IN)");
+        }
+    }
 
 #if !defined(WIN32)
     /* PORTABILITY: this is what we do on all systems except windows, because