diff --git a/sys/net/gnrc/network_layer/ipv6/nib/_nib-6ln.c b/sys/net/gnrc/network_layer/ipv6/nib/_nib-6ln.c
index d0c4bfb39e4c4efdb2b03cdc8635f0fd2ae8006a..0ebb3b560ffcc6b140f5251829177dad5d27e7e9 100644
--- a/sys/net/gnrc/network_layer/ipv6/nib/_nib-6ln.c
+++ b/sys/net/gnrc/network_layer/ipv6/nib/_nib-6ln.c
@@ -36,47 +36,6 @@ static inline bool _is_iface_eui64(gnrc_netif_t *netif, const eui64_t *eui64)
            (memcmp(&netif->l2addr, eui64, netif->l2addr_len) == 0);
 }
 
-static inline uint8_t _reverse_iid(const ipv6_addr_t *dst,
-                                   const gnrc_netif_t *netif, uint8_t *l2addr)
-{
-    switch (netif->device_type) {
-#if defined(MODULE_NETDEV_ETH) || defined(MODULE_ESP_NOW)
-        case NETDEV_TYPE_ETHERNET:
-        case NETDEV_TYPE_ESP_NOW:
-            l2addr[0] = dst->u8[8] ^ 0x02;
-            l2addr[1] = dst->u8[9];
-            l2addr[2] = dst->u8[10];
-            l2addr[3] = dst->u8[13];
-            l2addr[4] = dst->u8[14];
-            l2addr[5] = dst->u8[15];
-            return ETHERNET_ADDR_LEN;
-#endif  /* defined(MODULE_NETDEV_ETH) || defined(MODULE_ESP_NOW) */
-#if defined(MODULE_NETDEV_IEEE802154) || defined(MODULE_XBEE)
-        case NETDEV_TYPE_IEEE802154:
-            /* assume address was based on EUI-64
-             * (see https://tools.ietf.org/html/rfc6775#section-5.2) */
-            memcpy(l2addr, &dst->u64[1], sizeof(dst->u64[1]));
-            l2addr[0] ^= 0x02;
-            return sizeof(dst->u64[1]);
-#endif  /* defined(MODULE_NETDEV_IEEE802154) || defined(MODULE_XBEE) */
-#ifdef MODULE_NRFMIN
-        case NETDEV_TYPE_NRFMIN:
-            l2addr[0] = dst->u8[14];
-            l2addr[1] = dst->u8[15];
-            return sizeof(uint16_t);
-#endif  /* MODULE_NETDEV_IEEE802154 */
-#ifdef MODULE_CC110X
-        case NETDEV_TYPE_CC110X:
-            l2addr[0] = dst->u8[15];
-            return sizeof(uint8_t);
-#endif  /* MODULE_CC110X */
-        default:
-            (void)dst;
-            (void)l2addr;
-            return 0;
-    }
-}
-
 bool _resolve_addr_from_ipv6(const ipv6_addr_t *dst, gnrc_netif_t *netif,
                              gnrc_ipv6_nib_nc_t *nce)
 {
@@ -86,7 +45,9 @@ bool _resolve_addr_from_ipv6(const ipv6_addr_t *dst, gnrc_netif_t *netif,
     if (res) {
         uint8_t l2addr_len;
 
-        if ((l2addr_len = _reverse_iid(dst, netif, nce->l2addr)) > 0) {
+        if ((l2addr_len = gnrc_netif_ipv6_iid_to_addr(netif,
+                                                      (eui64_t *)&dst->u64[1],
+                                                      nce->l2addr)) > 0) {
             DEBUG("nib: resolve address %s%%%u by reverse translating to ",
                   ipv6_addr_to_str(addr_str, dst, sizeof(addr_str)),
                   (unsigned)netif->pid);