diff --git a/drivers/enc28j60/enc28j60.c b/drivers/enc28j60/enc28j60.c
index 1ba6240d01469f82379d509d3ea5877a2b3b41ab..6bad0c07f927edaef2328c62b169f51b18c65a64 100644
--- a/drivers/enc28j60/enc28j60.c
+++ b/drivers/enc28j60/enc28j60.c
@@ -34,6 +34,10 @@
 #define ENABLE_DEBUG    (0)
 #include "debug.h"
 
+#define SPI_BUS         (dev->p.spi)
+#define CS_PIN          (dev->p.cs_pin)
+#define INT_PIN         (dev->p.int_pin)
+#define RST_PIN         (dev->p.rst_pin)
 /**
  * @brief   Amount of time to hold the reset pin low on reset
  */
@@ -85,16 +89,15 @@
 
 static void switch_bank(enc28j60_t *dev, int8_t bank)
 {
-    /* only switch bank if needed */
-    if ((bank < 0) || (dev->bank == bank)) {
+    assert(bank < 0x04);
+
+    if (bank < 0) {
         return;
     }
     /* clear old value */
-    spi_transfer_reg(dev->spi, dev->cs_pin, (CMD_BFC | REG_ECON1), 0x03);
+    spi_transfer_reg(SPI_BUS, CS_PIN, (CMD_BFC | REG_ECON1), 0x03);
     /* set new value */
-    spi_transfer_reg(dev->spi, dev->cs_pin, (CMD_BFS | REG_ECON1), bank);
-    /* remember active bank */
-    dev->bank = bank;
+    spi_transfer_reg(SPI_BUS, CS_PIN, (CMD_BFS | REG_ECON1), bank);
 }
 
 static uint8_t cmd_rcr(enc28j60_t *dev, uint8_t reg, int8_t bank)
@@ -102,13 +105,13 @@ static uint8_t cmd_rcr(enc28j60_t *dev, uint8_t reg, int8_t bank)
     uint8_t res;
 
     /* start transaction */
-    spi_acquire(dev->spi, dev->cs_pin, SPI_MODE_0, SPI_CLK);
+    spi_acquire(SPI_BUS, CS_PIN, SPI_MODE_0, SPI_CLK);
 
     switch_bank(dev, bank);
-    res = spi_transfer_reg(dev->spi, dev->cs_pin, (CMD_RCR | reg), 0);
+    res = spi_transfer_reg(SPI_BUS, CS_PIN, (CMD_RCR | reg), 0);
 
     /* finish SPI transaction */
-    spi_release(dev->spi);
+    spi_release(SPI_BUS);
 
     return res;
 }
@@ -118,13 +121,13 @@ static uint8_t cmd_rcr_miimac(enc28j60_t *dev, uint8_t reg, int8_t bank)
     char res[2];
 
     /* start transaction */
-    spi_acquire(dev->spi, dev->cs_pin, SPI_MODE_0, SPI_CLK);
+    spi_acquire(SPI_BUS, CS_PIN, SPI_MODE_0, SPI_CLK);
 
     switch_bank(dev, bank);
-    spi_transfer_regs(dev->spi, dev->cs_pin, (CMD_RCR | reg), NULL, res, 2);
+    spi_transfer_regs(SPI_BUS, CS_PIN, (CMD_RCR | reg), NULL, res, 2);
 
     /* finish SPI transaction */
-    spi_release(dev->spi);
+    spi_release(SPI_BUS);
 
     return (uint8_t)res[1];
 }
@@ -132,37 +135,37 @@ static uint8_t cmd_rcr_miimac(enc28j60_t *dev, uint8_t reg, int8_t bank)
 static void cmd_wcr(enc28j60_t *dev, uint8_t reg, int8_t bank, uint8_t value)
 {
     /* start transaction */
-    spi_acquire(dev->spi, dev->cs_pin, SPI_MODE_0, SPI_CLK);
+    spi_acquire(SPI_BUS, CS_PIN, SPI_MODE_0, SPI_CLK);
 
     switch_bank(dev, bank);
-    spi_transfer_reg(dev->spi, dev->cs_pin, (CMD_WCR | reg), value);
+    spi_transfer_reg(SPI_BUS, CS_PIN, (CMD_WCR | reg), value);
 
     /* finish SPI transaction */
-    spi_release(dev->spi);
+    spi_release(SPI_BUS);
 }
 
 static void cmd_bfs(enc28j60_t *dev, uint8_t reg, int8_t bank, uint8_t mask)
 {
     /* start transaction */
-    spi_acquire(dev->spi, dev->cs_pin, SPI_MODE_0, SPI_CLK);
+    spi_acquire(SPI_BUS, CS_PIN, SPI_MODE_0, SPI_CLK);
 
     switch_bank(dev, bank);
-    spi_transfer_reg(dev->spi, dev->cs_pin, (CMD_BFS | reg), mask);
+    spi_transfer_reg(SPI_BUS, CS_PIN, (CMD_BFS | reg), mask);
 
     /* finish SPI transaction */
-    spi_release(dev->spi);
+    spi_release(SPI_BUS);
 }
 
 static void cmd_bfc(enc28j60_t *dev, uint8_t reg, int8_t bank, uint8_t mask)
 {
     /* start transaction */
-    spi_acquire(dev->spi, dev->cs_pin, SPI_MODE_0, SPI_CLK);
+    spi_acquire(SPI_BUS, CS_PIN, SPI_MODE_0, SPI_CLK);
 
     switch_bank(dev, bank);
-    spi_transfer_reg(dev->spi, dev->cs_pin, (CMD_BFC | reg), mask);
+    spi_transfer_reg(SPI_BUS, CS_PIN, (CMD_BFC | reg), mask);
 
     /* finish SPI transaction */
-    spi_release(dev->spi);
+    spi_release(SPI_BUS);
 }
 
 static uint16_t cmd_r_addr(enc28j60_t *dev, uint8_t addr)
@@ -205,21 +208,21 @@ static void cmd_w_phy(enc28j60_t *dev, uint8_t reg, uint16_t val)
 static void cmd_rbm(enc28j60_t *dev, uint8_t *data, size_t len)
 {
     /* start transaction */
-    spi_acquire(dev->spi, dev->cs_pin, SPI_MODE_0, SPI_CLK);
+    spi_acquire(SPI_BUS, CS_PIN, SPI_MODE_0, SPI_CLK);
     /* transfer data */
-    spi_transfer_regs(dev->spi, dev->cs_pin, CMD_RBM, NULL, data, len);
+    spi_transfer_regs(SPI_BUS, CS_PIN, CMD_RBM, NULL, data, len);
     /* finish SPI transaction */
-    spi_release(dev->spi);
+    spi_release(SPI_BUS);
 }
 
 static void cmd_wbm(enc28j60_t *dev, uint8_t *data, size_t len)
 {
     /* start transaction */
-    spi_acquire(dev->spi, dev->cs_pin, SPI_MODE_0, SPI_CLK);
+    spi_acquire(SPI_BUS, CS_PIN, SPI_MODE_0, SPI_CLK);
     /* transfer data */
-    spi_transfer_regs(dev->spi, dev->cs_pin, CMD_WBM, data, NULL, len);
+    spi_transfer_regs(SPI_BUS, CS_PIN, CMD_WBM, data, NULL, len);
     /* finish SPI transaction */
-    spi_release(dev->spi);
+    spi_release(SPI_BUS);
 }
 
 static void mac_get(enc28j60_t *dev, uint8_t *mac)
@@ -254,7 +257,7 @@ static int nd_send(netdev_t *netdev, const iolist_t *iolist)
     uint8_t ctrl = 0;
     int c = 0;
 
-    mutex_lock(&dev->devlock);
+    mutex_lock(&dev->lock);
 
     if (cmd_rcr(dev, REG_ECON1, -1) & ECON1_TXRTS) {
         /* there is already a transmission in progress */
@@ -271,7 +274,7 @@ static int nd_send(netdev_t *netdev, const iolist_t *iolist)
              * otherwise we suppose that the transmission is still in progress
              * and return EBUSY
              */
-            mutex_unlock(&dev->devlock);
+            mutex_unlock(&dev->lock);
             return -EBUSY;
         }
     }
@@ -297,7 +300,7 @@ static int nd_send(netdev_t *netdev, const iolist_t *iolist)
     netdev->stats.tx_bytes += c;
 #endif
 
-    mutex_unlock(&dev->devlock);
+    mutex_unlock(&dev->lock);
     return c;
 }
 
@@ -319,7 +322,7 @@ static int nd_recv(netdev_t *netdev, void *buf, size_t max_len, void *info)
     uint16_t next;
 
     (void)info;
-    mutex_lock(&dev->devlock);
+    mutex_lock(&dev->lock);
 
     /* set read pointer to RX read address */
     uint16_t rx_rd_ptr = cmd_r_addr(dev, ADDR_RX_READ);
@@ -347,7 +350,7 @@ static int nd_recv(netdev_t *netdev, void *buf, size_t max_len, void *info)
         cmd_bfs(dev, REG_ECON2, -1, ECON2_PKTDEC);
     }
 
-    mutex_unlock(&dev->devlock);
+    mutex_unlock(&dev->lock);
     return (int)size;
 }
 
@@ -358,21 +361,21 @@ static int nd_init(netdev_t *netdev)
     uint8_t tmp;
 
     /* get exclusive access of the device */
-    mutex_lock(&dev->devlock);
+    mutex_lock(&dev->lock);
 
     /* setup the low-level interfaces */
-    gpio_init(dev->reset_pin, GPIO_OUT);
-    gpio_clear(dev->reset_pin);     /* this puts the device into reset state */
-    res = spi_init_cs(dev->spi, dev->cs_pin);
+    gpio_init(RST_PIN, GPIO_OUT);
+    gpio_clear(RST_PIN);     /* this puts the device into reset state */
+    res = spi_init_cs(SPI_BUS, CS_PIN);
     if (res != SPI_OK) {
         DEBUG("[enc28j60] init: error initializing the CS pin [%i]\n", res);
         return -1;
     }
-    gpio_init_int(dev->int_pin, GPIO_IN, GPIO_FALLING, on_int, (void *)dev);
+    gpio_init_int(INT_PIN, GPIO_IN, GPIO_FALLING, on_int, (void *)dev);
 
     /* wait at least 1ms and then release device from reset state */
     xtimer_usleep(DELAY_RESET);
-    gpio_set(dev->reset_pin);
+    gpio_set(RST_PIN);
 
     /* wait for oscillator to be stable before proceeding */
     res = 0;
@@ -442,7 +445,7 @@ static int nd_init(netdev_t *netdev)
 #ifdef MODULE_NETSTATS_L2
     memset(&netdev->stats, 0, sizeof(netstats_t));
 #endif
-    mutex_unlock(&dev->devlock);
+    mutex_unlock(&dev->lock);
     return 0;
 }
 
@@ -536,11 +539,7 @@ static const netdev_driver_t netdev_driver_enc28j60 = {
 void enc28j60_setup(enc28j60_t *dev, const enc28j60_params_t *params)
 {
     dev->netdev.driver = &netdev_driver_enc28j60;
-    dev->spi = params->spi;
-    dev->cs_pin = params->cs_pin;
-    dev->int_pin = params->int_pin;
-    dev->reset_pin = params->reset_pin;
-    mutex_init(&dev->devlock);
-    dev->bank = 99;                         /* mark as invalid */
+    dev->p = *params;
+    mutex_init(&dev->lock);
     dev->tx_time = 0;
 }
diff --git a/drivers/enc28j60/include/enc28j60_params.h b/drivers/enc28j60/include/enc28j60_params.h
index eb82efe776a927e76d9780db5c7febd91394ee4e..e3fa47391905a2011f2c1bb0e229a8bc2bcc1a8b 100644
--- a/drivers/enc28j60/include/enc28j60_params.h
+++ b/drivers/enc28j60/include/enc28j60_params.h
@@ -46,7 +46,7 @@ extern "C" {
 #define ENC28J60_PARAMS         { .spi = ENC28J60_PARAM_SPI,     \
                                   .cs_pin = ENC28J60_PARAM_CS,   \
                                   .int_pin = ENC28J60_PARAM_INT, \
-                                  .reset_pin = ENC28J60_PARAM_RESET }
+                                  .rst_pin = ENC28J60_PARAM_RESET }
 #endif
 /** @} */
 
diff --git a/drivers/include/enc28j60.h b/drivers/include/enc28j60.h
index 6fd0bded376ce82922b5f96665e3dc97f978c9ad..4d3263ec1b41d7e7e256efa232fff54512d0572d 100644
--- a/drivers/include/enc28j60.h
+++ b/drivers/include/enc28j60.h
@@ -39,7 +39,7 @@ typedef struct {
     spi_t spi;              /**< If I drink */
     gpio_t cs_pin;          /**< beer in the evening, */
     gpio_t int_pin;         /**< I will be most certainly */
-    gpio_t reset_pin;       /**< drunk in the morning?! */
+    gpio_t rst_pin;         /**< drunk in the morning?! */
 } enc28j60_params_t;
 
 /**
@@ -47,12 +47,8 @@ typedef struct {
  */
 typedef struct {
     netdev_t netdev;        /**< pull in the netdev fields */
-    spi_t spi;              /**< SPI bus the transceiver is connected to */
-    gpio_t cs_pin;          /**< pin connected to the CHIP SELECT line */
-    gpio_t int_pin;         /**< pin connected to the INT line */
-    gpio_t reset_pin;       /**< pin connected to the RESET line */
-    mutex_t devlock;        /**< lock the device on access */
-    int8_t bank;            /**< remember the active register bank */
+    enc28j60_params_t p;    /**< SPI and pin confiuration */
+    mutex_t lock;           /**< lock the device on access */
     uint32_t tx_time;       /**< last transmission time for timeout handling */
 } enc28j60_t;