public void stopARPSpoofs() throws IOException {
		synchronized(gatewayLock) {
			if (gatewayMAC == null)
				try {
					gatewayLock.wait();
				} catch (InterruptedException e) {
					throw new RuntimeException(e); // Who the FUCK killed us???
				}
		}
		final JpcapSender sender = JpcapSender.openDevice(this.device);
		synchronized(spoofTargets) {
			final List<ARPPacket> packets = new LinkedList<ARPPacket>();
			for (IPMACPair addr : spoofTargets) {
				ARPPacket packet = new ARPPacket();
				
				EthernetPacket ether = new EthernetPacket();
				ether.frametype = EthernetPacket.ETHERTYPE_ARP;
				ether.src_mac = device.mac_address; //TODO: device or gateway?
				ether.dst_mac = addr.mac;
				packet.datalink = ether;
				
				packet.hardtype = ARPPacket.HARDTYPE_ETHER;
				packet.prototype = ARPPacket.PROTOTYPE_IP;
				packet.hlen = 6;
				packet.plen = 4;
				packet.operation = ARPPacket.ARP_REPLY;
				synchronized(gatewayLock) {
					packet.sender_hardaddr = gatewayMAC;
					packet.sender_protoaddr = gatewayIP;
				}
				packet.target_hardaddr = addr.mac;
				packet.target_protoaddr = addr.ip.getAddress();
				synchronized (sender) {
					sender.sendPacket(packet);
				}
				packets.add(packet);
			}
			new Thread(new Runnable() {
				public void run() {
					try {
						Thread.sleep(1000);
					} catch (InterruptedException e) { }
					synchronized (sender) {
						for (ARPPacket packet : packets)
							sender.sendPacket(packet);
					}
				}
			}).start();
			spoofTargets.clear();
		}
	}