diff --git a/master/device.c b/master/device.c
index 4127c800e05598757ed0d1343cf29074112505ad..ccb88bc657e8e12371af9f34cdb0b8b1f8435fa0 100644
--- a/master/device.c
+++ b/master/device.c
@@ -71,6 +71,9 @@ int ec_device_init(ec_device_t *device, /**< EtherCAT device */
     device->open = 0;
     device->link_state = 0; // down
 
+    device->tx_count = 0;
+    device->rx_count = 0;
+
 #ifdef EC_DBG_IF
     if (ec_debug_init(&device->dbg)) {
         EC_ERR("Failed to init debug device!\n");
@@ -146,6 +149,8 @@ int ec_device_open(ec_device_t *device /**< EtherCAT device */)
     for (i = 0; i < 4; i++) ec_device_call_isr(device);
 
     device->link_state = 0;
+    device->tx_count = 0;
+    device->rx_count = 0;
 
     if (device->dev->open(device->dev) == 0) device->open = 1;
 
@@ -217,6 +222,7 @@ void ec_device_send(ec_device_t *device, /**< EtherCAT device */
 
     // start sending
     device->dev->hard_start_xmit(device->tx_skb, device->dev);
+    device->tx_count++;
 }
 
 /*****************************************************************************/
@@ -251,6 +257,8 @@ void ecdev_receive(ec_device_t *device, /**< EtherCAT device */
                    size_t size /**< number of bytes received */
                    )
 {
+    device->rx_count++;
+
     if (unlikely(device->master->debug_level > 1)) {
         EC_DBG("Received frame:\n");
         ec_print_data_diff(device->tx_skb->data + ETH_HLEN,
diff --git a/master/device.h b/master/device.h
index 601a5996f16c6c5d4cf14006631030c74abc30e4..ebd0ab226fdcd21eb7944921c8752cb0ae461a04 100644
--- a/master/device.h
+++ b/master/device.h
@@ -70,6 +70,8 @@ struct ec_device
     unsigned long jiffies_isr; /**< jiffies of last ISR call */
     struct module *module; /**< pointer to the device's owning module */
     uint8_t link_state; /**< device link state */
+    unsigned int tx_count; /**< number of frames sent */
+    unsigned int rx_count; /**< number of frames received */
 #ifdef EC_DBG_IF
     ec_debug_t dbg; /**< debug device */
 #endif
diff --git a/master/master.c b/master/master.c
index d23b03efec3064fa3d16db6d3e7a07ed14a19065..29eb59ab32e2e86eb5eb584253e0a2fe63506c38 100644
--- a/master/master.c
+++ b/master/master.c
@@ -865,6 +865,13 @@ ssize_t ec_master_info(ec_master_t *master, /**< EtherCAT master */
 
     off += sprintf(buffer + off, "\nSlaves: %i\n",
                    master->slave_count);
+    off += sprintf(buffer + off, "\nDevice:\n");
+    off += sprintf(buffer + off, "  Frames sent:     %u\n",
+		   master->device->tx_count);
+    off += sprintf(buffer + off, "  Frames received: %u\n",
+		   master->device->rx_count);
+    off += sprintf(buffer + off, "  Frames lost:     %u\n",
+		   master->device->tx_count - master->device->rx_count - 1);
 
     off += sprintf(buffer + off, "\nTiming (min/avg/max) [us]:\n");