diff --git a/etc/doxygen/pages/API-RobotAPI.dox b/etc/doxygen/pages/API-RobotAPI.dox
new file mode 100644
index 0000000000000000000000000000000000000000..d53a5dcaa2bfe2b98308903d75e65dfb9611d1f6
--- /dev/null
+++ b/etc/doxygen/pages/API-RobotAPI.dox
@@ -0,0 +1,5 @@
+/**
+
+  \defgroup api-robotapi RobotAPI
+
+*/
diff --git a/etc/doxygen/pages/RobotAPI-API-1-overview.dox b/etc/doxygen/pages/RobotAPI-API-1-overview.dox
new file mode 100644
index 0000000000000000000000000000000000000000..117fdce24debf5c68ea96dd9748b1f2650492d18
--- /dev/null
+++ b/etc/doxygen/pages/RobotAPI-API-1-overview.dox
@@ -0,0 +1,19 @@
+ /*!
+ * \defgroup robotapi-overview Overview
+ * \ingroup api-robotapi
+ *
+ * The ArmarX project RobotAPI is based on the ArmarXCore Framework.
+ * 
+ * \par Components
+ * RobotAPI provides the following components
+ * - armarx::ComponentX: ComponentX description
+ * 
+ * Each component can provide several properties which are set on command line or via a configuration file.
+ * See \ref componentproperties for an overview of properties.
+ * 
+ * \par Applications
+ * - armarx::ApplicationY: Description of ApplicationY
+ *
+ * \par interface Interface Documentation
+ * Documentation of interfaces available in ArmarXCore is available on the \ref slicedocumentation "Slice Documentation" page.
+ */
diff --git a/etc/doxygen/pages/RobotAPI-API-2-units.dox b/etc/doxygen/pages/RobotAPI-API-2-units.dox
new file mode 100644
index 0000000000000000000000000000000000000000..d410231304b51af867fd039c7c1f45d19f01e88e
--- /dev/null
+++ b/etc/doxygen/pages/RobotAPI-API-2-units.dox
@@ -0,0 +1,12 @@
+/**
+  \defgroup SensorActorUnits Sensor-Actor Units
+  \ingroup api-robotapi
+
+  Sensor-Actor units
+
+  @li provide resource management (e.g. exclusive access) @see KinematicUnit
+  @li receive control data through Ice remote procedure calls (e.g. setTargetJointAngles(...)) @see KinematicUnit
+  @li publish sensor data through Ice topics @see KinematicUnitListener
+ */
+
+*/
diff --git a/etc/doxygen/pages/RobotAPI-API-3-states.dox b/etc/doxygen/pages/RobotAPI-API-3-states.dox
new file mode 100644
index 0000000000000000000000000000000000000000..472220c5aede76504cdbfcb73fba892a7bc5f2c9
--- /dev/null
+++ b/etc/doxygen/pages/RobotAPI-API-3-states.dox
@@ -0,0 +1,6 @@
+/**
+
+  \defgroup robotapi-states States
+  \ingroup api-robotapi
+
+*/
diff --git a/etc/doxygen/pages/remoterobot.dox b/etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox
similarity index 98%
rename from etc/doxygen/pages/remoterobot.dox
rename to etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox
index 5e15af3fee7ee48ec7615f42decc5eca6b178ccc..bab878d25656793fefe58f80188f2632f802cd13 100644
--- a/etc/doxygen/pages/remoterobot.dox
+++ b/etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox
@@ -1,5 +1,6 @@
 /**
-\page remoterobot Robot State and Remote Robot
+\defgroup remoterobot Robot State and Remote Robot
+\ingroup api-robotapi
 
 \section remoterobot-start Starting a RobotStateComponent
 
diff --git a/etc/doxygen/pages/mainpage.dox b/etc/doxygen/pages/mainpage.dox
index 00ccb60fd48bc4ca6e74b079be15bc5419c5f4fd..9559ec2b9c25fa60e68225c9edf5fa6cdadeb010 100644
--- a/etc/doxygen/pages/mainpage.dox
+++ b/etc/doxygen/pages/mainpage.dox
@@ -1,21 +1,6 @@
 /*! \mainpage
- *
- * \section purpose Purpose
- *
- * HumanoidRobotAPI is based on the ArmarXCore Framework.
- * 
- * \section overview Overview
- * 
- * \par Components
- * HumanoidRobotAPI provides the following components
- * - armarx::ComponentX: ComponentX description
- * 
- * Each component can provide several properties which are set on command line or via a configuration file.
- * See \ref componentproperties for an overview of properties.
- * 
- * \par Applications
- * - armarx::ApplicationY: Description of ApplicationY
- *
- * \par interface Interface Documentation
- * Documentation of interfaces available in ArmarXCore is available on the \ref slicedocumentation "Slice Documentation" page.
+ 
+- \subpage robotapi-overview
+- \subpage remoterobot
+
  */
diff --git a/etc/doxygen/pages/motioncontrol.dox b/etc/doxygen/pages/motioncontrol.dox
new file mode 100644
index 0000000000000000000000000000000000000000..981916a8e14dc0796a672386d2d48f0673d1af03
--- /dev/null
+++ b/etc/doxygen/pages/motioncontrol.dox
@@ -0,0 +1,76 @@
+/**
+    \defgroup MotionControl ArmarX MotionControl
+    \ingroup robotapi-states
+    
+    \section Overview Overview of the implemented functionality in MotionControl
+    All functionality is implemented with State to provide a convenient interface
+    for the non-instant move functions (States receive events when desired targets
+    are reached).<br/>
+    The following functionality is available in the MotionControl:
+    - Direct kinematics: move joints to a desired configuration (armarx::MotionControl::MoveJoints)
+    - Velocity control: set the desired velocities for joints (armarx::MotionControl::MoveJointsVelocityControl)
+    - Inverse kinematics: move the TCP of a kinematic chain to a desired pose (armarx::MotionControl::MoveTCPPoseIK)
+    - Trajectory: move the TCP of a kinematic chain along a trajectory defined by a list of poses (armarx::MotionControl::MoveTCPTrajectory)
+    - Stop: stop all motion of the robot (armarx::MotionControl::StopRobot)
+
+    \section HowTo How to use the states
+    To use one of the MotionControl states, you have to make it a substate of your own state (see ArmarXCore::Statechart). To set its parameters,
+    map them from you own state to it. The standard configuration is set in file ${ArmarX_Home}/data/HumanoidRobotAPIConfigs/stateconfigs/MotionControl.xml.
+
+    Two kinds of kinematic entities are controlled using the MotionControl: single joints and kinematic chains. A kinematic chain is a list of joints
+    that usually belong to a part of the robot, e.g. an arm. The joints and the kinematic chains are all defined in the xml files that describe the
+    kinematic model of the robot (e.g. ${ArmarX_Home/data/ArmarIV/RobotModel/ArmarIV.xml and the files for the subparts). Look in these files to find out the name of
+    the joint or kinematic chain you want to move.
+
+    \subsection UsingMoveJoints Using armarx::MotionControl::MoveJoints
+    This state moves the specified joints to the desired configuration.
+    Input parameters:
+    - jointNames: the names of the joints to be moved
+    - targetJointValues: the desired joint values
+    - targetTolerance: tolerance defining how precisely the joint position has to be reached
+    - timeoutInMs: a timeout after which the attempt to move is aborted
+    Output parameters:
+    - jointDistancesToTargets: the distance of each joint to the desired configuration
+
+    \subsection UsingMoveJointsVelocityControl Using armarx::MotionControl::MoveJointsVelocityControl
+    This state moves the specified joints with the desired velocity.
+    Input parameters:
+    - jointNames: the names of the joints to be moved
+    - targetJointVelocities: the desired joint velocities
+    - targetJointVelocityTolerance: tolerance defining how precisely the joint velocity has to be reached
+    - timeoutInMs: a timeout after which the attempt is aborted
+    Output parameters:
+    - jointVelocitiesDistancesToTargets: the difference between the desired and actual joint velocities
+
+    \subsection UsingMoveTCPPoseIK Using armarx::MotionControl::MoveTCPPoseIK
+    Moves the TCP of the specified kinematic chain to the desired pose if possible.
+    Input parameters:
+    - kinematicChainName: the name of the kinematic chain that is used
+    - targetTCPPosition: the target position for the TCP
+    - targetTCPOrientation: the target orientation
+    - targetPositionDistanceTolerance: tolerance for the position to decide if the motion was successfull
+    - targetOrientationDistanceTolerance: tolerance for the orientation to decide if the motion was successfull
+    - ikWithOrientation: Consider orientation for IK computation. if false, the rotation of the TCP is not considered.
+    - timeoutInMs: a timeout after which the motion is aborted
+    Output parameters:
+    - TCPDistanceToTarget: kartesian distance between TCP and target position
+    - TCPOrientationDistanceToTarget: the difference between desired and actual orientation of the TCP
+
+    \subsection UsingMoveTCPTrajectory Using armarx::MotionControl::MoveTCPTrajectory
+    Moves the TCP of the specified kinematic chain along the defined poses.
+    Input parameters:
+    - kinematicChainName: the name of the kinematic chain that is used
+    - targetTCPPositions: the list of target positions for the TCP
+    - targetTCPOrientations: the list of target orientations
+    - targetPositionDistanceTolerance: tolerance for the position to decide if the motion was successfull
+    - targetOrientationDistanceTolerance: tolerance for the orientation to decide if the motion was successfull
+    - ikWithOrientation: Consider orientation for IK computation. if false, the rotation of the TCP is not considered.
+    - timeoutInMs: a timeout after which the motion is aborted
+    Output parameters:
+    - TCPDistanceToTarget: kartesian distance between TCP and target position
+    - TCPOrientationDistanceToTarget: the difference between desired and actual orientation of the TCP
+
+    \subsection UsingStopRobot Using armarx::MotionControl::StopRobot
+    Stops all motion of the robot. No parameters.
+
+*/
diff --git a/etc/doxygen/pages/slicedocumentation.dox b/etc/doxygen/pages/slicedocumentation.dox
index c1912da15693a7d8d0d2fae347c84d9e741953c3..f1c1b1f8a4fe5fb41765d3e069d0f279d9b3c784 100644
--- a/etc/doxygen/pages/slicedocumentation.dox
+++ b/etc/doxygen/pages/slicedocumentation.dox
@@ -1,4 +1,5 @@
 /**
- \page slicedocumentation HumanoidRobotAPI: Slice Documentation
+ \page slicedocumentation Slice Documentation
+ \ingroup api-robotapi
  <a href="slice/index.html"> Slice Documentation </a>
 */
diff --git a/source/RobotAPI/motioncontrol/MotionControl.h b/source/RobotAPI/motioncontrol/MotionControl.h
index 2dd72eb8871821a377bdd31d104fa242d82edc1a..3a5789f67eb8c3600e02e091018925c3a179deaa 100644
--- a/source/RobotAPI/motioncontrol/MotionControl.h
+++ b/source/RobotAPI/motioncontrol/MotionControl.h
@@ -9,80 +9,6 @@ namespace armarx
 
 namespace MotionControl
 {
-/**
-    \defgroup MotionControl ArmarX MotionControl
-    \section Overview Overview of the implemented functionality in MotionControl
-    All functionality is implemented with State to provide a convenient interface
-    for the non-instant move functions (States receive events when desired targets
-    are reached).<br/>
-    The following functionality is available in the MotionControl:
-    - Direct kinematics: move joints to a desired configuration (armarx::MotionControl::MoveJoints)
-    - Velocity control: set the desired velocities for joints (armarx::MotionControl::MoveJointsVelocityControl)
-    - Inverse kinematics: move the TCP of a kinematic chain to a desired pose (armarx::MotionControl::MoveTCPPoseIK)
-    - Trajectory: move the TCP of a kinematic chain along a trajectory defined by a list of poses (armarx::MotionControl::MoveTCPTrajectory)
-    - Stop: stop all motion of the robot (armarx::MotionControl::StopRobot)
-
-    \section HowTo How to use the states
-    To use one of the MotionControl states, you have to make it a substate of your own state (see ArmarXCore::Statechart). To set its parameters,
-    map them from you own state to it. The standard configuration is set in file ${ArmarX_Home}/data/HumanoidRobotAPIConfigs/stateconfigs/MotionControl.xml.
-
-    Two kinds of kinematic entities are controlled using the MotionControl: single joints and kinematic chains. A kinematic chain is a list of joints
-    that usually belong to a part of the robot, e.g. an arm. The joints and the kinematic chains are all defined in the xml files that describe the
-    kinematic model of the robot (e.g. ${ArmarX_Home/data/ArmarIV/RobotModel/ArmarIV.xml and the files for the subparts). Look in these files to find out the name of
-    the joint or kinematic chain you want to move.
-
-    \subsection UsingMoveJoints Using armarx::MotionControl::MoveJoints
-    This state moves the specified joints to the desired configuration.
-    Input parameters:
-    - jointNames: the names of the joints to be moved
-    - targetJointValues: the desired joint values
-    - targetTolerance: tolerance defining how precisely the joint position has to be reached
-    - timeoutInMs: a timeout after which the attempt to move is aborted
-    Output parameters:
-    - jointDistancesToTargets: the distance of each joint to the desired configuration
-
-    \subsection UsingMoveJointsVelocityControl Using armarx::MotionControl::MoveJointsVelocityControl
-    This state moves the specified joints with the desired velocity.
-    Input parameters:
-    - jointNames: the names of the joints to be moved
-    - targetJointVelocities: the desired joint velocities
-    - targetJointVelocityTolerance: tolerance defining how precisely the joint velocity has to be reached
-    - timeoutInMs: a timeout after which the attempt is aborted
-    Output parameters:
-    - jointVelocitiesDistancesToTargets: the difference between the desired and actual joint velocities
-
-    \subsection UsingMoveTCPPoseIK Using armarx::MotionControl::MoveTCPPoseIK
-    Moves the TCP of the specified kinematic chain to the desired pose if possible.
-    Input parameters:
-    - kinematicChainName: the name of the kinematic chain that is used
-    - targetTCPPosition: the target position for the TCP
-    - targetTCPOrientation: the target orientation
-    - targetPositionDistanceTolerance: tolerance for the position to decide if the motion was successfull
-    - targetOrientationDistanceTolerance: tolerance for the orientation to decide if the motion was successfull
-    - ikWithOrientation: Consider orientation for IK computation. if false, the rotation of the TCP is not considered.
-    - timeoutInMs: a timeout after which the motion is aborted
-    Output parameters:
-    - TCPDistanceToTarget: kartesian distance between TCP and target position
-    - TCPOrientationDistanceToTarget: the difference between desired and actual orientation of the TCP
-
-    \subsection UsingMoveTCPTrajectory Using armarx::MotionControl::MoveTCPTrajectory
-    Moves the TCP of the specified kinematic chain along the defined poses.
-    Input parameters:
-    - kinematicChainName: the name of the kinematic chain that is used
-    - targetTCPPositions: the list of target positions for the TCP
-    - targetTCPOrientations: the list of target orientations
-    - targetPositionDistanceTolerance: tolerance for the position to decide if the motion was successfull
-    - targetOrientationDistanceTolerance: tolerance for the orientation to decide if the motion was successfull
-    - ikWithOrientation: Consider orientation for IK computation. if false, the rotation of the TCP is not considered.
-    - timeoutInMs: a timeout after which the motion is aborted
-    Output parameters:
-    - TCPDistanceToTarget: kartesian distance between TCP and target position
-    - TCPOrientationDistanceToTarget: the difference between desired and actual orientation of the TCP
-
-    \subsection UsingStopRobot Using armarx::MotionControl::StopRobot
-    Stops all motion of the robot. No parameters.
-
-*/
 
     /**
     *  \class MotionControlHandler
diff --git a/source/RobotAPI/units/SensorActorUnit.h b/source/RobotAPI/units/SensorActorUnit.h
index 1436072d6240c27c54328a52b09af612263197d9..ee4dcaff9d5e3ebc9784d577cd661b97fc8fe270 100644
--- a/source/RobotAPI/units/SensorActorUnit.h
+++ b/source/RobotAPI/units/SensorActorUnit.h
@@ -29,15 +29,6 @@
 #include <Core/core/exceptions/Exception.h>
 #include <RobotAPI/interface/units/UnitInterface.h>
 
-/**
-  @defgroup SensorActorUnits ArmarX Sensor-Actor Units
-
-  Sensor-Actor units
-
-  @li provide resource management (e.g. exclusive access) @see KinematicUnit
-  @li receive control data through Ice remote procedure calls (e.g. setTargetJointAngles(...)) @see KinematicUnit
-  @li publish sensor data through Ice topics @see KinematicUnitListener
- */
 
 namespace armarx
 {