diff --git a/drivers/w5100/w5100.c b/drivers/w5100/w5100.c
index e391752fa99692aa94b6fcb9ba56e8dfdfe5088a..aec5ec2598f026e0a662c9a9bac7c7171c8de232 100644
--- a/drivers/w5100/w5100.c
+++ b/drivers/w5100/w5100.c
@@ -34,7 +34,6 @@
 #define ENABLE_DEBUG        (0)
 #include "debug.h"
 
-
 #define SPI_CONF            SPI_MODE_0
 #define RMSR_DEFAULT_VALUE  (0x55)
 
@@ -285,14 +284,21 @@ static void isr(netdev_t *netdev)
     uint8_t ir;
     w5100_t *dev = (w5100_t *)netdev;
 
-    /* we only react on RX events, and if we see one, we read from the RX buffer
-     * until it is empty */
+    /* read interrupt register */
     spi_acquire(dev->p.spi, dev->p.cs, SPI_CONF, dev->p.clk);
     ir = rreg(dev, S0_IR);
     spi_release(dev->p.spi);
+
+    /* we only react on RX events, and if we see one, we read from the RX buffer
+     * until it is empty */
     while (ir & IR_RECV) {
         DEBUG("[w5100] netdev RX complete\n");
         netdev->event_callback(netdev, NETDEV_EVENT_RX_COMPLETE);
+
+        /* reread interrupt register */
+        spi_acquire(dev->p.spi, dev->p.cs, SPI_CONF, dev->p.clk);
+        ir = rreg(dev, S0_IR);
+        spi_release(dev->p.spi);
     }
 }