diff --git a/doc/doxygen/src/mainpage.md b/doc/doxygen/src/mainpage.md
index 488c280e46cd43979ebdb687003b051f3b61aac6..a0331f2390b10e0d7c4644cc3173a04e7f035232 100644
--- a/doc/doxygen/src/mainpage.md
+++ b/doc/doxygen/src/mainpage.md
@@ -3,273 +3,243 @@ RIOT Documentation                                                  {#mainpage}
 
 [TOC]
 
-Overview
-========
-
-RIOT is an operating system designed for the particular requirements of Internet
-of Things (IoT) scenarios. These requirements comprise a low memory footprint,
-high energy efficiency, real-time capabilities, a modular and configurable
-communication stack, and support for a wide range of low-power devices. RIOT
-provides a microkernel, utilities like cryptographic libraries, data structures
-(bloom filters, hash tables, priority queues), or a shell, different network
-stacks, and support for various microcontrollers, radio drivers, sensors, and
-configurations for entire platforms, e.g. Zolertia Z1 or STM32 Discovery
-Boards.
-
-The microkernel itself comprises thread management, a priority-based scheduler,
-a powerful API for inter-process communication (IPC), a system timer, and
-mutexes.
-
-In order to build an application or library with RIOT, you need first to
-download the source code ([Getting the source
-code](https://github.com/RIOT-OS/RIOT/wiki/Introduction#wiki-getting-the-source-code)). This contains - besides the
-before mentioned features - also some example applications (located in the
-`examples` subdirectory) and a sample Makefile you may use for your own
-project. This Makefile template shows you how to compile and link your application
-against RIOT ([Compiling RIOT](https://github.com/RIOT-OS/RIOT/wiki/Introduction#wiki-compiling-riot)).
-
-If you want to use RIOT directly with your embedded platform, you need to
-install the corresponding toolchain for the deployed microcontroller ([ARM
-based platforms](https://github.com/RIOT-OS/RIOT/wiki/Introduction#wiki-platforms-based-on-arm), [TI MSP430 based
-platforms](https://github.com/RIOT-OS/RIOT/wiki/Introduction#wiki-platforms-based-on-ti-msp430)).
-
-### Native RIOT - Run RIOT on your PC!
-
-As a special platform, you will find a CPU and board called `native` in the
-repository. This target allows you to run RIOT as a process on Linux on most
-supported hardware platforms. Just set `BOARD = native` in your
-application's Makefile, call `make`, and execute the resulting elf-file. Further
-documentation about the native port can be found in `cpu/native/README.md`.
-
-Structure
----------
-
-![Overview](riot-overview.png)
-
-The RIOT repository contains the following ten subdirectories:
- * boards
- * core
- * cpu
- * dist
- * doc
- * drivers
- * examples
- * pkg
- * sys
- * tests
-
-The `boards` directory provides the configurations and initialization code for
-supported IoT platforms. In `core` you can find the kernel, while `cpu`
-comprises microcontroller specific implementations like startup and exception
-handling code. The directory `dist` contains a template for an application's Makefile
-and external utilities like the terminal program `pyterm` or a script to build
-your own toolchain for ARM microcontrollers. Not very surprisingly you will find
-the (doxygen) documentation in `doc` and peripheral driver code in `drivers`.
-The `examples` directory provides some exemplary applications, `pkg` includes
-Makefiles to integrate external libraries into RIOT, and `sys` system libraries
-as well as the implementation of the network stacks which are located in
-`sys/net`. Finally, the subdirectory `tests` contains test applications,
-including also a few expect scripts to automatically validate some of them.
-
-~~~~~~~~{.c}
-int main()
-{
-    puts("Hello World!");
-    return 0;
-}
-~~~~~~~~
-
-Getting the source code
------------------------
-
-You can obtain the latest RIOT code from our [Github](https://github.com/RIOT-OS/)
-repository either by [downloading the latest tarball](https://github.com/RIOT-OS/RIOT/releases)
-or by cloning the [git repository](https://github.com/RIOT-OS/RIOT).
-
-In order to clone the RIOT repository, you need the [Git revision control
-system](http://git-scm.com/) and run the following command:
-
-~~~~~~~~{.sh}
-git clone git://github.com/RIOT-OS/RIOT.git
-~~~~~~~~
-
-The repository contains the kernel, support for different CPUs and platforms, device
-drivers, system libraries, and network stack implementations. Inaddition it comprises
-various example applications to demonstrate the usage ofsome important features.
-
-It also provides you with useful tools like a terminal program and scripts to
-setup a toolchain.
-
-Compiling RIOT
---------------
-Depending on the hardware you want to use, you need to first install a
-corresponding toolchain:
-
-* [ARM-based platforms](https://github.com/RIOT-OS/RIOT/wiki/Family:-ARM)
-* [TI MSP430](https://github.com/RIOT-OS/RIOT/wiki/Family:-MSP430)
-* [Atmel ATmega](https://github.com/RIOT-OS/RIOT/wiki/Family%3A-ATmega)
-* [native](https://github.com/RIOT-OS/RIOT/wiki/Family:-native)
-
-### Create an application
-Once you have set up the toolchain, you can create your own application. Apart from
-the C file(s) containing your source code you need a Makefile. A template
-Makefile is available in the `dist` folder of the
-[RIOT repository](https://github.com/RIOT-OS/RIOT).
-
-Within your application's Makefile, you can define the target hardware as well as
-the modules you want to use.
-
-Unless specified otherwise, make will create an elf-file as well as an Intel
-hex file in the `bin` folder of your application directory.
-
-Special features
-================
-
-The build system
-----------------
-
-RIOT uses GNU make as build system. The simplest way to compile and link an
-application (or library) with RIOT, is to set up a Makefile providing
-at least the following variables:
-
- * `APPLICATION`: should contain the (unique) name of your application
- * `BOARD`: specifies the platform the application should be build for by default
- * `RIOTBASE`: specifies the path to your copy of the RIOT repository
-   (note, that you may want to use `$(CURDIR)` here, to give a relative path)
-
-Additionally it has to include the `Makefile.include`, located in RIOT's root
-directory. You can use Make's `?=` operator in order to allow overwriting
-variables from the command line. For example, you can easily specify the target
-platform, using the sample Makefile, by invoking make like this:
-
-~~~~~~~~{.sh}
-make BOARD=iotlab-m3
-~~~~~~~~
-
-Besides typical targets like `clean`, `all`, or `doc`, RIOT provides the special
-targets `flash` and `term` to invoke the configured flashing and terminal tools
-for the specified platform. These targets use the variable `PORT` for the serial
-communication to the device. Neither this variable nor the targets `flash` and
-`term` are mandatory for the native port.
-
-For the native port, `PORT` has a special meaning: it is used to identify the tap
-interface if the @ref netdev2_tap module is used. The target `debug` can be used
-to invoke a debugger on some platforms. For the native port the additional targets
-such as `all-valgrind` and `valgrind` exist. Refer to `cpu/native/README.md` for
-additional information
-
-Some RIOT directories contain special Makefiles like `Makefile.base`,
-`Makefile.include` or `Makefile.dep`. The first one can be included into other
-Makefiles to define some standard targets. The files called `Makefile.include`
-are used in `boards` and `cpu` to append target specific information to
-variables like `INCLUDES`, setting the include paths. `Makefile.dep` serves to
-define dependencies.
-
-Learn more about the build system in the
-[Wiki](https://github.com/RIOT-OS/RIOT/wiki/The-Make-Build-System)
-
-Including modules
------------------
-
-By default a RIOT application comprises only the applications' code itself, the kernel,
-and platform specific code. In order to use additional modules, such as a
-particular device driver or a system library, you have to append the modules'
-names to the USEMODULE variable. For example, to build an application using the SHT11
-temperature sensor and UDP/IPv6 network stack, your Makefile needs to contain
-these lines:
-
-~~~~~~~~{.mk}
-USEMODULE += sht11
-USEMODULE += gnrc_ipv6_default
-USEMODULE += gnrc_udp
-~~~~~~~~
-
-To contribute a new module to RIOT, your module's Makefile needs to set the
-variable `MODULE` to a unique name. If the module depends on other modules, this
-information needs to be added to RIOT's `Makefile.dep`.
-
-The main function
------------------
-
-After the board is initialized, RIOT starts two threads: the idle thread and the
-main thread. The idle thread has the lowest priority and will run, whenever no
-other thread is ready to run. It will automatically use the lowest possible
-power mode for the device. The main thread - configured with a default priority
-that is right in the middle between the lowest and the highest available
-priority - is the first thread that runs and calls the main function. This
-function needs to be defined by the application.
-
-Choosing the right stack size
------------------------------
-
-Choosing the right stack size for a new thread is not an easy, but a very
-crucial task. Since memory is usually a scarce resource in IoT scenarios,
-one must be careful not to assign too much stack to a single thread.
-However, if you allocate too little memory for a stack, your application
-will probably crash. The minimum stack size depends also on some RIOT
-internal structs and is hardware dependent. In order to help developers
-finding the right stack size, RIOT defines some typical stack sizes in
-`cpu_conf.h` (which should be provided by the implementation for all
-supported MCUs). The constants for these stack sizes are
-
-* `THREAD_STACKSIZE_IDLE`
-* `THREAD_STACKSIZE_DEFAULT`
-* `THREAD_EXTRA_STACKSIZE_PRINTF`
-* `THREAD_STACKSIZE_MAIN`
-
-and can be used by including `kernel.h`. ARM based platforms additionally
-define `THREAD_EXTRA_STACKSIZE_PRINTF_FLOAT`, because newlib's `printf`
-implementation uses more memory for printing floating point numbers.
-
-`THREAD_STACKSIZE_IDLE` is the stack size for the idle thread and
-probably the smallest sensible stack size. `THREAD_STACKSIZE_DEFAULT`
-is a default size for any typical thread, *not* using `printf`.
-`THREAD_EXTRA_STACKSIZE_PRINTF` defines additional stack space needed if the
-thread needs to call printf (which requires additional memory when using
-newlib). `THREAD_STACKSIZE_MAIN` is the stack size for the main thread
-and probably a good size for your application. (Note, that on most
-non-newlib dependent platforms this will probably equal
-`THREAD_STACKSIZE_DEFAULT`.)
-
-The IPC
--------
+RIOT in a nutshell                                        {#riot-in-a-nutshell}
+==================
+RIOT is an open-source  microkernel-based operating system, designed to match
+the requirements of Internet of Things (IoT) devices and other embedded
+devices. These requirements include a very low memory footprint (on the order
+of a few kilobytes), high energy efficiency, real-time capabilities,
+communication stacks for both wireless and wired networks, and support for a
+wide range of low-power hardware.
+
+RIOT provides a microkernel, multiple network stacks, and utilities which
+include cryptographic libraries, data structures (bloom filters, hash tables,
+priority queues), a shell and more. RIOT supports a wide range of
+microcontroller architectures, radio drivers, sensors, and configurations for
+entire platforms, e.g. Atmel SAM R21 Xplained Pro, Zolertia Z1, STM32 Discovery
+Boards etc. (see the list of
+[supported hardware](https://github.com/RIOT-OS/RIOT/wiki/RIOT-Platforms).
+Across all supported hardware (32-bit, 16-bit, and 8-bit platforms). RIOT
+provides a consistent API and enables ANSI C and C++ application programming,
+with  multithreading, IPC, system timers, mutexes etc.
+
+Contribute to RIOT                                        {#contribute-to-riot}
+==================
+RIOT is developed by an open community that anyone is welcome to join:
+ - Download and contribute your code on
+   [GitHub](https://github.com/RIOT-OS/RIOT). You can read about how to
+   contribute [in our GitHub
+   Wiki](https://github.com/RIOT-OS/RIOT/wiki/Contributing-to-RIOT).
+ - [Subscribe](http://lists.riot-os.org/mailman/listinfo/users) to
+   users@riot-os.org to ask for help using RIOT or writing an application for
+   RIOT (or to just stay in the loop). A searchable archive of this list is
+   available at the
+   [RIOT user Gmane newsgroup](http://news.gmane.org/gmane.os.riot.user)
+ - [Subscribe]((http://lists.riot-os.org/mailman/listinfo/devel) to
+   devel@riot-os.org to follow and discuss kernel and network stack
+   developement, or hardware support. A searchable archive of this list is
+   available at the
+   [RIOT devel Gmane newsgroup](http://news.gmane.org/gmane.os.riot.devel)
+ - Follow us on [Twitter](https://twitter.com/RIOT_OS) for news from the RIOT
+   community.
+ - Contact us on IRC for live support and discussions:
+   [irc.freenode.org #riot-os](irc://irc.freenode.org/riot-os)
+
+
+The quickest start                                        {#the-quickest-start}
+==================
+You can run RIOT on most IoT devices, on open-access testbed hardware (e.g.
+IoT-lab), and also directly as a process on your Linux/FreeBSD/OSX machine (we
+call this the `native` port). Try it right now in your terminal window:
+
+~~~~~~~{.sh}
+git clone git://github.com/RIOT-OS/RIOT.git # assumption: git is pre-installed
+git checkout <LATEST_RELEASE>
+cd RIOT
+./dist/tools//tapsetup/tapsetup             # create virtual Ethernet
+                                            # interfaces to connect to RIOT
+cd examples/default/
+make all
+make term
+~~~~~~~
+
+... and you are in the RIOT shell!
+Type `help` to discover available commands. For further information see the
+[README of the `default` example](https://github.com/RIOT-OS/RIOT/tree/).
+
+To use RIOT directly on your embedded platform, and for more hands-on details
+with RIOT, see [TODO: link to getting started guide].
+
+Before that, skimming through the next section is recommended (but not
+mandatory).
+
+Structure                                                          {#structure}
+=========
 
-Like any microkernel system, RIOT has an IPC API that enables data exchange
-between modules or a single module and the kernel. This API is documented in
-@ref core_msg. The IPC can be used in several ways, such as synchronous or
-asynchronous, blocking or non-blocking, with or without a message queue. In
-the default case, a thread does not have a message queue. Hence, messages
-sent in a non-blocking manner are lost, when the target thread is not in
-receive mode. A thread may set up a message queue using the msg_init_queue()
-function, but has to provide the memory for this queue itself.
+This section walks you through RIOT's structure. Once you understand this
+structure, you will easily find your way around in RIOT's code base.
+
+RIOT's code base is structured into five groups.
+
+<!-- TODO: add graphic -->
+
+ - The kernel (`core`)
+ - Platform specific code (`cpu`; `boards`)
+ - Device drivers (`drivers`)
+ - Libraries and network code (`sys`; `pkg`)
+ - Applications for demonstrating features and for testing (`examples`;
+   `tests`)
+
+In addition RIOT includes a collection of scripts for various tasks (`dist`) as
+well as a predefined environment for generating this documentation (`doc`).
+
+The structural groups are projected onto the directory structure of RIOT, where
+each of these groups resides in one or two directories in the main RIOT
+directory.
+
+The following list gives a more detailed description of each of RIOT's
+top-level directories:
+
+core
+----
+This directory contains the actual kernel. The kernel consists of the
+scheduler, inter-process-communication (messaging), threading, thread
+synchronization, and supporting data-structures and type definitions.
+
+See @ref core for further information and API documentations.
+
+boards
+------
+The platform dependent code is split into two logic elements: CPUs and boards,
+while maintaining a strict 1-to-n relationship, a board has exactly one CPU,
+while a CPU can be part of n boards. The CPU part contains all generic, CPU
+specific code (see below).
+
+The board part contains the specific configuration for the CPU it contains.
+This configuration mainly includes the peripheral configuration and
+pin-mapping, the configuration of on-board devices, and the CPU's clock
+configuration.
+
+On top of the source and header files needed for each board, this directory
+additionally may include some script and configuration files needed for
+interfacing with the board. These are typically custom flash/debug scripts or
+e.g. OpenOCD configuration files. For most boards, these files are located in a
+`dist` sub-directory of the board.
+
+See here @ref boards for further information.
+
+cpu
+---
+For each supported CPU this directory contains a sub-directory with the name of
+the CPU. These directories then contain all CPU specific configurations, such
+as implementations of power management (LPM), interrupt handling and vectors,
+startup code, clock initialization code and thread handling (e.g. context
+switching) code. For most CPUs you will also find the linker scripts in the
+`ldscripts` sub-directory.
+
+In the `periph` sub-directory of each CPU you can find the implementations of
+the CPU's peripheral drivers like SPI, UART, GPIO, etc.  See @ref driver_periph
+for their API documentation.
+
+Many CPUs share a certain amount of their code (e.g. all ARM Cortex-M based
+CPUs share the same code for task switching and interrupt handling). This
+shared code is put in its own directories, following a `xxxxx_common` naming
+scheme. Examples for this is code shared across architectures (e.g.
+`cortexm_common`, `msp430_comon`) or code shared among vendors (e.g.
+`kinetis_common`).
+
+See @ref cpu for more detailed informtation.
+
+drivers
+-------
+This directory contains the drivers for external devices such as network
+interfaces, sensors and actuators. Each device driver is put into its own
+sub-directory with the name of that device.
 
-Auto-inititialization
----------------------
+All of RIOT's device drivers are based on the peripheral driver API (e.g. SPI,
+GPIO, etc.) and other RIOT modules like the `xtimer`. This way the drivers are
+completely platform agnostic and they don't have any dependencies into the CPU
+and board code.
 
-Most modules require initialization before they can be used. In some cases the
-initialization function does not require a parameter. For these modules the
-@ref sys_autoinit feature is included automatically. It calls all module
-initialization functions with a `void` parameter just before the main thread
-gets executed. You can deactivate this behavior (e.g. for testing) by adding
-the line
+See @ref drivers for more details.
 
-~~~~~~~~{.mk}
-DISABLE_MODULE += auto_init
-~~~~~~~~
+sys
+---
+RIOT follows the micro-kernel design paradigm where everything is supposed to
+be a module. All of these modules that are not part of the hardware abstraction
+nor device drivers can be found in this directory. The libraries include data
+structures (e.g. bloom, color), crypto libraries (e.g. hashes, AES) ,
+high-level APIs (e.g. Posix implementations), memory management (e.g. malloc),
+the RIOT shell and many more.
 
-to your Makefile.
+See @ref sys for a complete list of available libraries
 
-Networking
+sys/net
+-------
+The `sys/net` sub-directory needs to be explicitly mentioned, as this is where
+all the networking code in RIOT resides. Here you can find the network stack
+implementations (e.g. the GNRC stack) as well as network stack agnostic code as
+header definitions or network types.
+
+See @ref net for more details on networking code.
+
+pkg
+---
+RIOT comes with support for a number of external libraries (e.g.
+[OpenWSN](http://www.openwsn.org/),
+[microcoap](https://github.com/1248/microcoap)). The way they are included is
+that RIOT ships with a custom Makefile for each supported library that
+downloads the library and optionally applies a number of patches to make it
+work with RIOT. These Makefiles and patches can be found in the `pkg`
+directory.
+
+See @ref pkg for a detailed description on how this works.
+
+examples
+--------
+Here you find a number of example applications that demonstrate certain
+features of RIOT. The default example found in this directory is a good
+starting point for anyone who is new to RIOT.
+
+For more information best browse that directory and have a look at the
+`README.md` files that ship with each example.
+
+tests
+-----
+Many features/modules in RIOT come with their own test application, which are
+located in this directory. In contrary to the examples these tests are mostly
+focusing on a single aspect than on a set of features. Despite for testing, you
+might consider these tests also for insights on understanding RIOT.
+
+dist & doc
 ----------
-@todo
-
-Community
-=========
-
-Whether you are looking for help with writing an application for RIOT, want to
-learn more about it, or just stay in the loop you are invited to join the
-[RIOT-users mailing list](http://lists.riot-os.org/mailman/listinfo/users).
-For developers who want to participate and contribute to the kernel development
-or integrate new MCU and platform support the
-[RIOT-devel mailing list](http://lists.riot-os.org/mailman/listinfo/devel) is
-the right place.
+All the tooling around RIOT can be found in these two folders.
+
+`doc` contains the doxygen configuration and also contains the compiled doxygen
+output after running `make doc`.
+
+Lastly, the `dist` directory contains tools to help you with RIOT. These
+include
+the serial terminal application `pyterm`, generic scripts for flashing,
+debugging, reseting (e.g. support for [OpenOCD](http://openocd.org/),
+[Jlink](https://www.segger.com/jlink_base.html)), as well as code enabling easy
+integration to open testbeds such as the [IoT-LAB](https://www.iot-lab.info/).
+Furthermore you can find here scripts to do all kind of code and style checks.
+
+<!--
+Further information                                      {#further-information}
+===================
+*TBD*
+
+Idea for this section: just name each of RIOT's main features/concepts and link
+to an appropriate page with further information:
+    - Create an application
+    - Networking
+    - The `main()` function
+    - Make system
+    - Include modules
+    - Threading
+    - Choose the right stack size
+    - IPC
+    - Auto initialization
+-->