diff --git a/osdep/LinuxEthernetTap.cpp b/osdep/LinuxEthernetTap.cpp
index 87feaca85..bda604d65 100644
--- a/osdep/LinuxEthernetTap.cpp
+++ b/osdep/LinuxEthernetTap.cpp
@@ -292,36 +292,42 @@ LinuxEthernetTap::LinuxEthernetTap(
 		}
 	});
 
-	_tapProcessorThread = std::thread([this] {
-		MAC to,from;
-		std::pair<void *,int> qi;
-		while (_tapq.get(qi)) {
-			uint8_t *const b = reinterpret_cast<uint8_t *>(qi.first);
-			if (b) {
-				to.setTo(b, 6);
-				from.setTo(b + 6, 6);
-				unsigned int etherType = Utils::ntoh(((const uint16_t *)b)[6]);
-				_handler(_arg, nullptr, _nwid, from, to, etherType, 0, (const void *)(b + 14),(unsigned int)(qi.second - 14));
-				{
-					std::lock_guard<std::mutex> l(_buffers_l);
-					_buffers.push_back(qi.first);
-				}
-			} else break;
-		}
-	});
+	for(int k=0;k<2;++k) {
+		_tapProcessorThread[k] = std::thread([this] {
+			MAC to,from;
+			std::pair<void *,int> qi;
+			while (_tapq.get(qi)) {
+				uint8_t *const b = reinterpret_cast<uint8_t *>(qi.first);
+				if (b) {
+					to.setTo(b, 6);
+					from.setTo(b + 6, 6);
+					unsigned int etherType = Utils::ntoh(((const uint16_t *)b)[6]);
+					_handler(_arg, nullptr, _nwid, from, to, etherType, 0, (const void *)(b + 14),(unsigned int)(qi.second - 14));
+					{
+						std::lock_guard<std::mutex> l(_buffers_l);
+						_buffers.push_back(qi.first);
+					}
+				} else break;
+			}
+		});
+	}
 }
 
 LinuxEthernetTap::~LinuxEthernetTap()
 {
 	(void)::write(_shutdownSignalPipe[1],"\0",1); // causes thread to exit
-	_tapq.post(std::pair<void *,int>(nullptr,0));
+	for(int k=0;k<64;++k) {
+		_tapq.post(std::pair<void *,int>(nullptr,0));
+	}
 
 	::close(_fd);
 	::close(_shutdownSignalPipe[0]);
 	::close(_shutdownSignalPipe[1]);
 
 	_tapReaderThread.join();
-	_tapProcessorThread.join();
+	for(int k=0;k<2;++k) {
+		_tapProcessorThread[k].join();
+	}
 
 	for(std::vector<void *>::iterator i(_buffers.begin());i!=_buffers.end();++i)
 		free(*i);
diff --git a/osdep/LinuxEthernetTap.hpp b/osdep/LinuxEthernetTap.hpp
index 9e9206ead..ffb2cc977 100644
--- a/osdep/LinuxEthernetTap.hpp
+++ b/osdep/LinuxEthernetTap.hpp
@@ -71,7 +71,7 @@ private:
 	int _shutdownSignalPipe[2];
 	std::atomic_bool _enabled;
 	std::thread _tapReaderThread;
-	std::thread _tapProcessorThread;
+	std::thread _tapProcessorThread[2];
 	std::mutex _buffers_l;
 	std::vector<void *> _buffers;
 	BlockingQueue< std::pair<void *,int> > _tapq;