ifneq (,$(filter gnrc_%,$(filter-out gnrc_netapi gnrc_netreg gnrc_netif% gnrc_pktbuf,$(USEMODULE))))
  USEMODULE += gnrc
endif

ifneq (,$(filter ng_netif_default,$(USEMODULE)))
  USEMODULE += ng_netif
endif

ifneq (,$(filter ng_netif,$(USEMODULE)))
  USEMODULE += gnrc
endif

ifneq (,$(filter ng_nomac,$(USEMODULE)))
  USEMODULE += gnrc
endif

ifneq (,$(filter at86rf2%,$(USEMODULE)))
  USEMODULE += at86rf2xx
  USEMODULE += ieee802154
endif

ifneq (,$(filter kw2xrf,$(USEMODULE)))
  USEMODULE += ieee802154
endif

ifneq (,$(filter xbee,$(USEMODULE)))
  USEMODULE += ieee802154
endif

ifneq (,$(filter ng_zep,$(USEMODULE)))
  USEMODULE += hashes
  USEMODULE += ieee802154
  USEMODULE += ng_udp
  USEMODULE += random
  USEMODULE += vtimer
endif

ifneq (,$(filter ng_rpl,$(USEMODULE)))
  USEMODULE += fib
  USEMODULE += gnrc
  USEMODULE += ng_ipv6_router_default
  USEMODULE += trickle
  USEMODULE += vtimer
endif

ifneq (,$(filter ieee802154,$(USEMODULE)))
  ifneq (,$(filter ng_ipv6, $(USEMODULE)))
    USEMODULE += ng_sixlowpan
  endif
  ifneq (,$(filter ng_ipv6_router, $(USEMODULE)))
    USEMODULE += ng_sixlowpan   # TODO: replace with ng_sixlowpan_router
  endif
  ifneq (,$(filter ng_ipv6_default, $(USEMODULE)))
    USEMODULE += ng_sixlowpan_default
  endif
  ifneq (,$(filter ng_ipv6_router_default, $(USEMODULE)))
    USEMODULE += ng_sixlowpan_default   # TODO: replace with ng_sixlowpan_router_default
  endif
endif

ifneq (,$(filter ng_sixlowpan_default,$(USEMODULE)))
  USEMODULE += ng_ipv6_default
  USEMODULE += ng_sixlowpan
  USEMODULE += ng_sixlowpan_frag
  USEMODULE += ng_sixlowpan_iphc
endif

ifneq (,$(filter ng_sixlowpan_frag,$(USEMODULE)))
  USEMODULE += ng_sixlowpan
  USEMODULE += vtimer
endif

ifneq (,$(filter ng_sixlowpan_iphc,$(USEMODULE)))
  USEMODULE += ng_sixlowpan
  USEMODULE += ng_sixlowpan_ctx
endif

ifneq (,$(filter ng_sixlowpan,$(USEMODULE)))
  USEMODULE += ng_ipv6
  USEMODULE += ng_sixlowpan_netif
  USEMODULE += gnrc
  USEMODULE += sixlowpan
endif

ifneq (,$(filter ng_sixlowpan_ctx,$(USEMODULE)))
  USEMODULE += ipv6_addr
  USEMODULE += vtimer
endif

ifneq (,$(filter ng_ipv6_default,$(USEMODULE)))
  USEMODULE += ng_ipv6
  USEMODULE += ng_icmpv6
  USEMODULE += ng_ndp
  USEMODULE += ng_ndp_internal
  USEMODULE += ng_ndp_node
endif

ifneq (,$(filter ng_ipv6_router_default,$(USEMODULE)))
  USEMODULE += ng_ipv6_router
  USEMODULE += ng_icmpv6
  USEMODULE += ng_ndp
  USEMODULE += ng_ndp_internal
  USEMODULE += ng_ndp_node
endif

ifneq (,$(filter ng_ndp,$(USEMODULE)))
  USEMODULE += ng_icmpv6
  USEMODULE += random
  USEMODULE += timex
  USEMODULE += vtimer
endif

ifneq (,$(filter ng_icmpv6_echo,$(USEMODULE)))
  USEMODULE += ng_icmpv6
  USEMODULE += gnrc
endif

ifneq (,$(filter ng_icmpv6,$(USEMODULE)))
  USEMODULE += inet_csum
  USEMODULE += ng_ipv6
endif

ifneq (,$(filter ng_rpl_srh,$(USEMODULE)))
  USEMODULE += ipv6_ext_rh
endif

ifneq (,$(filter ipv6_ext_rh,$(USEMODULE)))
  USEMODULE += ipv6_ext
endif

ifneq (,$(filter ng_ipv6_ext,$(USEMODULE)))
  USEMODULE += ipv6_ext
  USEMODULE += ng_ipv6
endif

ifneq (,$(filter ng_ipv6_router,$(USEMODULE)))
  USEMODULE += ng_ipv6
endif

ifneq (,$(filter ng_ipv6,$(USEMODULE)))
  USEMODULE += inet_csum
  USEMODULE += ipv6_addr
  USEMODULE += ng_ipv6_hdr
  USEMODULE += ng_ipv6_nc
  USEMODULE += ng_ipv6_netif
  USEMODULE += gnrc
endif

ifneq (,$(filter ng_ipv6_hdr,$(USEMODULE)))
  USEMODULE += ipv6_hdr
  USEMODULE += ng_pktbuf
endif

ifneq (,$(filter sixlowpan,$(USEMODULE)))
  USEMODULE += ipv6_hdr
endif

ifneq (,$(filter ipv6_hdr,$(USEMODULE)))
  USEMODULE += inet_csum
endif

ifneq (,$(filter ng_ipv6_nc,$(USEMODULE)))
  USEMODULE += ipv6_addr
endif

ifneq (,$(filter ng_ipv6_netif,$(USEMODULE)))
  USEMODULE += ipv6_addr
  USEMODULE += ng_netif
  USEMODULE += bitfield
endif

ifneq (,$(filter ng_udp,$(USEMODULE)))
  USEMODULE += gnrc
  USEMODULE += inet_csum
  USEMODULE += udp
endif

ifneq (,$(filter ng_nettest,$(USEMODULE)))
  USEMODULE += ng_netapi
  USEMODULE += ng_netreg
  USEMODULE += ng_netif
  USEMODULE += ng_pktbuf
  USEMODULE += vtimer
endif

ifneq (,$(filter gnrc,$(USEMODULE)))
  USEMODULE += ng_netapi
  USEMODULE += ng_netreg
  USEMODULE += ng_netif
  USEMODULE += ng_netif_hdr
  USEMODULE += ng_pktbuf
endif

ifneq (,$(filter ng_pktdump,$(USEMODULE)))
  USEMODULE += ng_pktbuf
  USEMODULE += od
endif

ifneq (,$(filter ng_pktbuf, $(USEMODULE)))
  ifeq (,$(filter ng_pktbuf_%, $(USEMODULE)))
    USEMODULE += ng_pktbuf_static
  endif
endif

ifneq (,$(filter ng_pktbuf_%, $(USEMODULE)))
  USEMODULE += ng_pktbuf # make MODULE_NG_PKTBUF macro available for all implementations
endif

ifneq (,$(filter ng_slip,$(USEMODULE)))
  USEMODULE += gnrc
endif

ifneq (,$(filter uart0,$(USEMODULE)))
  USEMODULE += posix
endif

ifneq (,$(filter posix,$(USEMODULE)))
  USEMODULE += timex
  USEMODULE += vtimer
endif

ifneq (,$(filter cbor,$(USEMODULE)))
  USEMODULE += net_help
endif

ifneq (,$(filter vtimer,$(USEMODULE)))
  USEMODULE += timex
endif

ifneq (,$(filter rgbled,$(USEMODULE)))
  USEMODULE += color
endif

ifneq (,$(filter libfixmath-unittests,$(USEMODULE)))
  USEPKG += libfixmath
endif

ifneq (,$(filter nhdp,$(USEMODULE)))
  USEMODULE += vtimer
  USEMODULE += oonf_common
  USEMODULE += oonf_rfc5444
endif

ifneq (,$(filter fib,$(USEMODULE)))
  USEMODULE += universal_address
  USEMODULE += timex
  USEMODULE += vtimer
  USEMODULE += net_help
endif

ifneq (,$(filter oonf_common,$(USEMODULE)))
  USEPKG += oonf_api
  USEMODULE += socket_base
endif

# if any log_* is used, also use LOG pseudomodule
ifneq (,$(filter log_%,$(USEMODULE)))
  USEMODULE += log
endif

ifneq (,$(filter cpp11-compat,$(USEMODULE)))
  USEMODULE += vtimer
  USEMODULE += timex
  FEATURES_REQUIRED += cpp
endif

ifneq (,$(filter newlib,$(USEMODULE)))
  USEMODULE += uart_stdio
endif

ifneq (,$(filter ng_netdev_eth,$(USEMODULE)))
  USEMODULE += ng_pktbuf
endif

ifneq (,$(filter hih6130,$(USEMODULE)))
  USEMODULE += vtimer
endif