diff --git a/cpu/cc2538/include/cc2538_rf.h b/cpu/cc2538/include/cc2538_rf.h
index f623fdc5565f4552e4e139ce6ef745838a9d036b..40937e8274cab62a9b30a7b837c8912d8a9a4ae0 100644
--- a/cpu/cc2538/include/cc2538_rf.h
+++ b/cpu/cc2538/include/cc2538_rf.h
@@ -57,7 +57,6 @@ extern "C" {
 
 #define CC2538_RF_POWER_DEFAULT     (IEEE802154_DEFAULT_TXPOWER)    /**< Default output power in dBm */
 #define CC2538_RF_CHANNEL_DEFAULT   (IEEE802154_DEFAULT_CHANNEL)
-#define CC2538_RF_PANID_DEFAULT     (IEEE802154_DEFAULT_PANID)
 
 #define OUTPUT_POWER_MIN            (-24)  /**< Min output power in dBm */
 #define OUTPUT_POWER_MAX            (7)    /**< Max output power in dBm */
diff --git a/cpu/cc2538/radio/cc2538_rf.c b/cpu/cc2538/radio/cc2538_rf.c
index 43fd9b2b6c434579ef08ef9638c286b84d7d7f4a..18b66f84cfdfa56f4867ca3edc8c09b43106aefa 100644
--- a/cpu/cc2538/radio/cc2538_rf.c
+++ b/cpu/cc2538/radio/cc2538_rf.c
@@ -88,7 +88,6 @@ void cc2538_init(void)
 
     cc2538_set_tx_power(CC2538_RF_POWER_DEFAULT);
     cc2538_set_chan(CC2538_RF_CHANNEL_DEFAULT);
-    cc2538_set_pan(CC2538_RF_PANID_DEFAULT);
     cc2538_set_addr_long(cc2538_get_eui64_primary());
 
     /* Select the observable signals (maximum of three) */
diff --git a/cpu/cc2538/radio/cc2538_rf_netdev.c b/cpu/cc2538/radio/cc2538_rf_netdev.c
index 9916d4da850b4017dfbdd2c698d7c05e2d0f2768..4a163007a3d530b2d32dbb725d3b16d37427347a 100644
--- a/cpu/cc2538/radio/cc2538_rf_netdev.c
+++ b/cpu/cc2538/radio/cc2538_rf_netdev.c
@@ -381,7 +381,6 @@ static int _init(netdev_t *netdev)
     cc2538_rf_t *dev = (cc2538_rf_t *) netdev;
     _dev = netdev;
 
-    uint16_t pan = cc2538_get_pan();
     uint16_t chan = cc2538_get_chan();
     uint16_t addr_short = cc2538_get_addr_short();
     uint64_t addr_long = cc2538_get_addr_long();
@@ -389,8 +388,6 @@ static int _init(netdev_t *netdev)
     netdev_ieee802154_reset(&dev->netdev);
 
     /* Initialise netdev_ieee802154_t struct */
-    netdev_ieee802154_set(&dev->netdev, NETOPT_NID,
-                          &pan, sizeof(pan));
     netdev_ieee802154_set(&dev->netdev, NETOPT_CHANNEL,
                           &chan, sizeof(chan));
     netdev_ieee802154_set(&dev->netdev, NETOPT_ADDRESS,
diff --git a/cpu/native/socket_zep/socket_zep.c b/cpu/native/socket_zep/socket_zep.c
index cb40fba8afc4055eb0f7afac66d2954f65b87631..c2d5da30b6c8783f57b01dba0d4ec0f49a5b55c1 100644
--- a/cpu/native/socket_zep/socket_zep.c
+++ b/cpu/native/socket_zep/socket_zep.c
@@ -297,7 +297,6 @@ static int _init(netdev_t *netdev)
 
     assert(dev != NULL);
     dev->netdev.chan = IEEE802154_DEFAULT_CHANNEL;
-    dev->netdev.pan = IEEE802154_DEFAULT_PANID;
 
     return 0;
 }
diff --git a/drivers/at86rf2xx/at86rf2xx.c b/drivers/at86rf2xx/at86rf2xx.c
index 800616843eacf434c611757161fd0b4bc588ecde..58cdf257146a9812c51891daf9576cf4b7f3a6c1 100644
--- a/drivers/at86rf2xx/at86rf2xx.c
+++ b/drivers/at86rf2xx/at86rf2xx.c
@@ -73,8 +73,6 @@ void at86rf2xx_reset(at86rf2xx_t *dev)
     at86rf2xx_set_addr_long(dev, ntohll(addr_long.uint64.u64));
     at86rf2xx_set_addr_short(dev, ntohs(addr_long.uint16[0].u16));
 
-    /* set default PAN id */
-    at86rf2xx_set_pan(dev, AT86RF2XX_DEFAULT_PANID);
     /* set default channel */
     at86rf2xx_set_chan(dev, AT86RF2XX_DEFAULT_CHANNEL);
     /* set default TX power */
diff --git a/drivers/at86rf2xx/at86rf2xx_getset.c b/drivers/at86rf2xx/at86rf2xx_getset.c
index 96bdd37a15c239984f5c7d9023f903b84f36e0ff..f6cec5aaac51ec93b2a9acbcef7f8d59efef0f62 100644
--- a/drivers/at86rf2xx/at86rf2xx_getset.c
+++ b/drivers/at86rf2xx/at86rf2xx_getset.c
@@ -222,7 +222,6 @@ void at86rf2xx_set_pan(at86rf2xx_t *dev, uint16_t pan)
 {
     le_uint16_t le_pan = byteorder_btols(byteorder_htons(pan));
 
-    dev->netdev.pan = pan;
     DEBUG("pan0: %u, pan1: %u\n", le_pan.u8[0], le_pan.u8[1]);
     at86rf2xx_reg_write(dev, AT86RF2XX_REG__PAN_ID_0, le_pan.u8[0]);
     at86rf2xx_reg_write(dev, AT86RF2XX_REG__PAN_ID_1, le_pan.u8[1]);
diff --git a/drivers/cc2420/cc2420.c b/drivers/cc2420/cc2420.c
index 24c159255ab4758bf617e3bb2c7f971e1114a77b..69df2cfa5273e864f88bad884826bd581828f97e 100644
--- a/drivers/cc2420/cc2420.c
+++ b/drivers/cc2420/cc2420.c
@@ -58,7 +58,6 @@ int cc2420_init(cc2420_t *dev)
     addr[0] |= 0x02;
     cc2420_set_addr_short(dev, &addr[6]);
     cc2420_set_addr_long(dev, addr);
-    cc2420_set_pan(dev, CC2420_PANID_DEFAULT);
     cc2420_set_chan(dev, CC2420_CHAN_DEFAULT);
     cc2420_set_txpower(dev, CC2420_TXPOWER_DEFAULT);
 
diff --git a/drivers/cc2420/cc2420_getset.c b/drivers/cc2420/cc2420_getset.c
index caac8114a0a3e5b441268b0e78de0210d74cd84a..10e3305ae4651439db33b1ed7005d977667b95c3 100644
--- a/drivers/cc2420/cc2420_getset.c
+++ b/drivers/cc2420/cc2420_getset.c
@@ -114,7 +114,6 @@ uint16_t cc2420_get_pan(cc2420_t *dev)
 
 void cc2420_set_pan(cc2420_t *dev, uint16_t pan)
 {
-    dev->netdev.pan = pan;
     cc2420_ram_write(dev, CC2420_RAM_PANID, (uint8_t *)&pan, 2);
 }
 
diff --git a/drivers/include/at86rf2xx.h b/drivers/include/at86rf2xx.h
index b1ac3cd5f8f4ab63b8b8b1a1a68bbf503db66bb8..e4a709814316cde4c9aafb27a395b3bddfda725a 100644
--- a/drivers/include/at86rf2xx.h
+++ b/drivers/include/at86rf2xx.h
@@ -67,13 +67,6 @@ extern "C" {
 #endif
 /** @} */
 
-/**
- * @brief   Default PAN ID
- *
- * @todo    Read some global network stack specific configuration value
- */
-#define AT86RF2XX_DEFAULT_PANID         (IEEE802154_DEFAULT_PANID)
-
 /**
  * @brief   Default TX power (0dBm)
  */
diff --git a/drivers/include/cc2420.h b/drivers/include/cc2420.h
index b8d21767227006a896e0cd5341f41fa627739e0e..16ba81802fd55ee3e5a659e03290ba6f3d5cd69c 100644
--- a/drivers/include/cc2420.h
+++ b/drivers/include/cc2420.h
@@ -38,11 +38,6 @@ extern "C" {
  */
 #define CC2420_PKT_MAXLEN       (IEEE802154_FRAME_LEN_MAX)
 
-/**
- * @brief   PAN ID configuration
- */
-#define CC2420_PANID_DEFAULT    (IEEE802154_DEFAULT_PANID)
-
 /**
   * @name    Channel configuration
   * @{
diff --git a/drivers/include/kw2xrf.h b/drivers/include/kw2xrf.h
index 5baa074624c6ce1c574eb313bebdc0265c4678c0..c344241fa27e619423cd536730445ff5ca00187d 100644
--- a/drivers/include/kw2xrf.h
+++ b/drivers/include/kw2xrf.h
@@ -42,11 +42,6 @@ extern "C" {
  */
 #define KW2XRF_MAX_PKT_LENGTH           (IEEE802154_FRAME_LEN_MAX)
 
-/**
- * @brief   Default PAN ID used after initialization
- */
-#define KW2XRF_DEFAULT_PANID            (IEEE802154_DEFAULT_PANID)
-
 /**
  * @name    Default channel used after initialization
  *
diff --git a/drivers/kw2xrf/kw2xrf.c b/drivers/kw2xrf/kw2xrf.c
index 49e85ff1bca0bb5045cee7f332153f30f9794a2b..dc5cb1c0407ead0bbea213a7042741498b05b9ce 100644
--- a/drivers/kw2xrf/kw2xrf.c
+++ b/drivers/kw2xrf/kw2xrf.c
@@ -97,7 +97,6 @@ void kw2xrf_reset_phy(kw2xrf_t *dev)
 
     kw2xrf_set_channel(dev, KW2XRF_DEFAULT_CHANNEL);
 
-    kw2xrf_set_pan(dev, KW2XRF_DEFAULT_PANID);
     kw2xrf_set_address(dev);
 
     kw2xrf_set_cca_mode(dev, 1);
@@ -115,6 +114,6 @@ void kw2xrf_reset_phy(kw2xrf_t *dev)
 
     kw2xrf_enable_irq_b(dev);
 
-    DEBUG("[kw2xrf] init phy and (re)set to channel %d and pan %d.\n",
-          KW2XRF_DEFAULT_CHANNEL, KW2XRF_DEFAULT_PANID);
+    DEBUG("[kw2xrf] init phy and (re)set to channel %d.\n",
+          KW2XRF_DEFAULT_CHANNEL);
 }
diff --git a/drivers/kw2xrf/kw2xrf_getset.c b/drivers/kw2xrf/kw2xrf_getset.c
index b3bd2f07eeea17238e77397bd87529956779507e..bd0b2bc85afda22de58564762dcf39c5954c9bbd 100644
--- a/drivers/kw2xrf/kw2xrf_getset.c
+++ b/drivers/kw2xrf/kw2xrf_getset.c
@@ -255,14 +255,11 @@ void kw2xrf_set_sequence(kw2xrf_t *dev, kw2xrf_physeq_t seq)
 
 void kw2xrf_set_pan(kw2xrf_t *dev, uint16_t pan)
 {
-    dev->netdev.pan = pan;
-
     uint8_t val_ar[2];
     val_ar[1] = (pan >> 8);
     val_ar[0] = (uint8_t)pan;
     kw2xrf_write_iregs(dev, MKW2XDMI_MACPANID0_LSB, val_ar, 2);
     LOG_DEBUG("[kw2xrf] set pan to: 0x%x\n", pan);
-    dev->netdev.pan = pan;
 }
 
 void kw2xrf_set_addr_short(kw2xrf_t *dev, uint16_t addr)
diff --git a/drivers/mrf24j40/mrf24j40.c b/drivers/mrf24j40/mrf24j40.c
index 2ae3a30111e30e8a99aa39832bf106af581d64d9..befd12e8b138f45a9fc26474d98b58fb7d8ab415 100644
--- a/drivers/mrf24j40/mrf24j40.c
+++ b/drivers/mrf24j40/mrf24j40.c
@@ -56,8 +56,6 @@ void mrf24j40_reset(mrf24j40_t *dev)
     mrf24j40_set_addr_long(dev, ntohll(addr_long.uint64.u64));
     mrf24j40_set_addr_short(dev, ntohs(addr_long.uint16[0].u16));
 
-    /* set default PAN id */
-    mrf24j40_set_pan(dev, IEEE802154_DEFAULT_PANID);
     mrf24j40_set_chan(dev, IEEE802154_DEFAULT_CHANNEL);
 
     /* configure Immediate Sleep and Wake-Up mode */
diff --git a/drivers/mrf24j40/mrf24j40_getset.c b/drivers/mrf24j40/mrf24j40_getset.c
index 92a19f393d3db8dae1d6cc9e92d1b6bf525fd803..70bbbe747d2e9b8b9905d11caf5545b39ca2881a 100644
--- a/drivers/mrf24j40/mrf24j40_getset.c
+++ b/drivers/mrf24j40/mrf24j40_getset.c
@@ -252,7 +252,6 @@ void mrf24j40_set_pan(mrf24j40_t *dev, uint16_t pan)
 {
     le_uint16_t le_pan = byteorder_btols(byteorder_htons(pan));
 
-    dev->netdev.pan = pan;
     DEBUG("pan0: %u, pan1: %u\n", le_pan.u8[0], le_pan.u8[1]);
     mrf24j40_reg_write_short(dev, MRF24J40_REG_PANIDL, le_pan.u8[0]);
     mrf24j40_reg_write_short(dev, MRF24J40_REG_PANIDH, le_pan.u8[1]);
diff --git a/drivers/netdev_ieee802154/netdev_ieee802154.c b/drivers/netdev_ieee802154/netdev_ieee802154.c
index c13b1e1278410fa192dcdae5d19c0530a08b67a4..36259430c18e0f5d8792b565934c928e00f0cae0 100644
--- a/drivers/netdev_ieee802154/netdev_ieee802154.c
+++ b/drivers/netdev_ieee802154/netdev_ieee802154.c
@@ -63,6 +63,10 @@ void netdev_ieee802154_reset(netdev_ieee802154_t *dev)
 #elif MODULE_GNRC
     dev->proto = GNRC_NETTYPE_UNDEF;
 #endif
+
+    /* Initialize PAN ID and call netdev::set to propagate it */
+    dev->pan = IEEE802154_DEFAULT_PANID;
+    dev->netdev.driver->set(&dev->netdev, NETOPT_NID, &dev->pan, sizeof(dev->pan));
 }
 
 int netdev_ieee802154_get(netdev_ieee802154_t *dev, netopt_t opt, void *value,