diff --git a/etc/doxygen/HumanoidRobotAPI.Doxyfile.in b/etc/doxygen/HumanoidRobotAPI.Doxyfile.in
deleted file mode 100644
index 75cafd574b624dca2c32693dd71a3911a5a82d19..0000000000000000000000000000000000000000
--- a/etc/doxygen/HumanoidRobotAPI.Doxyfile.in
+++ /dev/null
@@ -1,1374 +0,0 @@
-# Doxyfile 1.5.5
-
-# This file describes the settings to be used by the documentation system
-# doxygen (www.doxygen.org) for a project
-#
-# All text after a hash (#) is considered a comment and will be ignored
-# The format is:
-#       TAG = value [value, ...]
-# For lists items can also be appended using:
-#       TAG += value [value, ...]
-# Values that contain spaces should be placed between quotes (" ")
-
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-
-# This tag specifies the encoding used for all characters in the config file
-# that follow. The default is UTF-8 which is also the encoding used for all
-# text before the first occurrence of this tag. Doxygen uses libiconv (or the
-# iconv built into libc) for the transcoding. See
-# http://www.gnu.org/software/libiconv for the list of possible encodings.
-
-DOXYFILE_ENCODING      = UTF-8
-
-# The PROJECT_NAME tag is a single word (or a sequence of words surrounded
-# by quotes) that should identify the project.
-
-PROJECT_NAME           = "@PROJECT_NAME@"
-
-# The PROJECT_NUMBER tag can be used to enter a project or revision number.
-# This could be handy for archiving the generated documentation or
-# if some version control system is used.
-
-PROJECT_NUMBER         =
-
-# The OUTPUT_DIRECTORY tag is used to specify the (relative or absolute)
-# base path where the generated documentation will be put.
-# If a relative path is entered, it will be relative to the location
-# where doxygen was started. If left blank the current directory will be used.
-
-OUTPUT_DIRECTORY       = "@PROJECT_BINARY_DIR@"
-
-# If the CREATE_SUBDIRS tag is set to YES, then doxygen will create
-# 4096 sub-directories (in 2 levels) under the output directory of each output
-# format and will distribute the generated files over these directories.
-# Enabling this option can be useful when feeding doxygen a huge amount of
-# source files, where putting all generated files in the same directory would
-# otherwise cause performance problems for the file system.
-
-CREATE_SUBDIRS         = NO
-
-# The OUTPUT_LANGUAGE tag is used to specify the language in which all
-# documentation generated by doxygen is written. Doxygen will use this
-# information to generate all constant output in the proper language.
-# The default language is English, other supported languages are:
-# Afrikaans, Arabic, Brazilian, Catalan, Chinese, Chinese-Traditional,
-# Croatian, Czech, Danish, Dutch, Farsi, Finnish, French, German, Greek,
-# Hungarian, Italian, Japanese, Japanese-en (Japanese with English messages),
-# Korean, Korean-en, Lithuanian, Norwegian, Macedonian, Persian, Polish,
-# Portuguese, Romanian, Russian, Serbian, Slovak, Slovene, Spanish, Swedish,
-# and Ukrainian.
-
-OUTPUT_LANGUAGE        = English
-
-# If the BRIEF_MEMBER_DESC tag is set to YES (the default) Doxygen will
-# include brief member descriptions after the members that are listed in
-# the file and class documentation (similar to JavaDoc).
-# Set to NO to disable this.
-
-BRIEF_MEMBER_DESC      = YES
-
-# If the REPEAT_BRIEF tag is set to YES (the default) Doxygen will prepend
-# the brief description of a member or function before the detailed description.
-# Note: if both HIDE_UNDOC_MEMBERS and BRIEF_MEMBER_DESC are set to NO, the
-# brief descriptions will be completely suppressed.
-
-REPEAT_BRIEF           = YES
-
-# This tag implements a quasi-intelligent brief description abbreviator
-# that is used to form the text in various listings. Each string
-# in this list, if found as the leading text of the brief description, will be
-# stripped from the text and the result after processing the whole list, is
-# used as the annotated text. Otherwise, the brief description is used as-is.
-# If left blank, the following values are used ("$name" is automatically
-# replaced with the name of the entity): "The $name class" "The $name widget"
-# "The $name file" "is" "provides" "specifies" "contains"
-# "represents" "a" "an" "the"
-
-ABBREVIATE_BRIEF       =
-
-# If the ALWAYS_DETAILED_SEC and REPEAT_BRIEF tags are both set to YES then
-# Doxygen will generate a detailed section even if there is only a brief
-# description.
-
-ALWAYS_DETAILED_SEC    = NO
-
-# If the INLINE_INHERITED_MEMB tag is set to YES, doxygen will show all
-# inherited members of a class in the documentation of that class as if those
-# members were ordinary class members. Constructors, destructors and assignment
-# operators of the base classes will not be shown.
-
-INLINE_INHERITED_MEMB  = NO
-
-# If the FULL_PATH_NAMES tag is set to YES then Doxygen will prepend the full
-# path before files name in the file list and in the header files. If set
-# to NO the shortest path that makes the file name unique will be used.
-
-FULL_PATH_NAMES        = YES
-
-# If the FULL_PATH_NAMES tag is set to YES then the STRIP_FROM_PATH tag
-# can be used to strip a user-defined part of the path. Stripping is
-# only done if one of the specified strings matches the left-hand part of
-# the path. The tag can be used to show relative paths in the file list.
-# If left blank the directory from which doxygen is run is used as the
-# path to strip.
-
-STRIP_FROM_PATH        =
-
-# The STRIP_FROM_INC_PATH tag can be used to strip a user-defined part of
-# the path mentioned in the documentation of a class, which tells
-# the reader which header file to include in order to use a class.
-# If left blank only the name of the header file containing the class
-# definition is used. Otherwise one should specify the include paths that
-# are normally passed to the compiler using the -I flag.
-
-STRIP_FROM_INC_PATH    =
-
-# If the SHORT_NAMES tag is set to YES, doxygen will generate much shorter
-# (but less readable) file names. This can be useful is your file systems
-# doesn't support long names like on DOS, Mac, or CD-ROM.
-
-SHORT_NAMES            = NO
-
-# If the JAVADOC_AUTOBRIEF tag is set to YES then Doxygen
-# will interpret the first line (until the first dot) of a JavaDoc-style
-# comment as the brief description. If set to NO, the JavaDoc
-# comments will behave just like regular Qt-style comments
-# (thus requiring an explicit @brief command for a brief description.)
-
-JAVADOC_AUTOBRIEF      = YES
-
-# If the QT_AUTOBRIEF tag is set to YES then Doxygen will
-# interpret the first line (until the first dot) of a Qt-style
-# comment as the brief description. If set to NO, the comments
-# will behave just like regular Qt-style comments (thus requiring
-# an explicit \brief command for a brief description.)
-
-QT_AUTOBRIEF           = NO
-
-# The MULTILINE_CPP_IS_BRIEF tag can be set to YES to make Doxygen
-# treat a multi-line C++ special comment block (i.e. a block of //! or ///
-# comments) as a brief description. This used to be the default behaviour.
-# The new default is to treat a multi-line C++ comment block as a detailed
-# description. Set this tag to YES if you prefer the old behaviour instead.
-
-MULTILINE_CPP_IS_BRIEF = NO
-
-# If the DETAILS_AT_TOP tag is set to YES then Doxygen
-# will output the detailed description near the top, like JavaDoc.
-# If set to NO, the detailed description appears after the member
-# documentation.
-
-DETAILS_AT_TOP         = NO
-
-# If the INHERIT_DOCS tag is set to YES (the default) then an undocumented
-# member inherits the documentation from any documented member that it
-# re-implements.
-
-INHERIT_DOCS           = YES
-
-# If the SEPARATE_MEMBER_PAGES tag is set to YES, then doxygen will produce
-# a new page for each member. If set to NO, the documentation of a member will
-# be part of the file/class/namespace that contains it.
-
-SEPARATE_MEMBER_PAGES  = NO
-
-# The TAB_SIZE tag can be used to set the number of spaces in a tab.
-# Doxygen uses this value to replace tabs by spaces in code fragments.
-
-TAB_SIZE               = 8
-
-# This tag can be used to specify a number of aliases that acts
-# as commands in the documentation. An alias has the form "name=value".
-# For example adding "sideeffect=\par Side Effects:\n" will allow you to
-# put the command \sideeffect (or @sideeffect) in the documentation, which
-# will result in a user-defined paragraph with heading "Side Effects:".
-# You can put \n's in the value part of an alias to insert newlines.
-
-ALIASES                = prop="- \b "
-ALIASES                += componentproperties="\xrefitem componentproperties \"Component properties\" \"Component properties\""
-
-# Set the OPTIMIZE_OUTPUT_FOR_C tag to YES if your project consists of C
-# sources only. Doxygen will then generate output that is more tailored for C.
-# For instance, some of the names that are used will be different. The list
-# of all members will be omitted, etc.
-
-OPTIMIZE_OUTPUT_FOR_C  = YES
-
-# Set the OPTIMIZE_OUTPUT_JAVA tag to YES if your project consists of Java
-# sources only. Doxygen will then generate output that is more tailored for
-# Java. For instance, namespaces will be presented as packages, qualified
-# scopes will look different, etc.
-
-OPTIMIZE_OUTPUT_JAVA   = NO
-
-# Set the OPTIMIZE_FOR_FORTRAN tag to YES if your project consists of Fortran
-# sources only. Doxygen will then generate output that is more tailored for
-# Fortran.
-
-OPTIMIZE_FOR_FORTRAN   = NO
-
-# Set the OPTIMIZE_OUTPUT_VHDL tag to YES if your project consists of VHDL
-# sources. Doxygen will then generate output that is tailored for
-# VHDL.
-
-OPTIMIZE_OUTPUT_VHDL   = NO
-
-# If you use STL classes (i.e. std::string, std::vector, etc.) but do not want
-# to include (a tag file for) the STL sources as input, then you should
-# set this tag to YES in order to let doxygen match functions declarations and
-# definitions whose arguments contain STL classes (e.g. func(std::string); v.s.
-# func(std::string) {}). This also make the inheritance and collaboration
-# diagrams that involve STL classes more complete and accurate.
-
-BUILTIN_STL_SUPPORT    = NO
-
-# If you use Microsoft's C++/CLI language, you should set this option to YES to
-# enable parsing support.
-
-CPP_CLI_SUPPORT        = NO
-
-# Set the SIP_SUPPORT tag to YES if your project consists of sip sources only.
-# Doxygen will parse them like normal C++ but will assume all classes use public
-# instead of private inheritance when no explicit protection keyword is present.
-
-SIP_SUPPORT            = NO
-
-# If member grouping is used in the documentation and the DISTRIBUTE_GROUP_DOC
-# tag is set to YES, then doxygen will reuse the documentation of the first
-# member in the group (if any) for the other members of the group. By default
-# all members of a group must be documented explicitly.
-
-DISTRIBUTE_GROUP_DOC   = NO
-
-# Set the SUBGROUPING tag to YES (the default) to allow class member groups of
-# the same type (for instance a group of public functions) to be put as a
-# subgroup of that type (e.g. under the Public Functions section). Set it to
-# NO to prevent subgrouping. Alternatively, this can be done per class using
-# the \nosubgrouping command.
-
-SUBGROUPING            = YES
-
-# When TYPEDEF_HIDES_STRUCT is enabled, a typedef of a struct, union, or enum
-# is documented as struct, union, or enum with the name of the typedef. So
-# typedef struct TypeS {} TypeT, will appear in the documentation as a struct
-# with name TypeT. When disabled the typedef will appear as a member of a file,
-# namespace, or class. And the struct will be named TypeS. This can typically
-# be useful for C code in case the coding convention dictates that all compound
-# types are typedef'ed and only the typedef is referenced, never the tag name.
-
-TYPEDEF_HIDES_STRUCT   = NO
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-
-# If the EXTRACT_ALL tag is set to YES doxygen will assume all entities in
-# documentation are documented, even if no documentation was available.
-# Private class members and static file members will be hidden unless
-# the EXTRACT_PRIVATE and EXTRACT_STATIC tags are set to YES
-
-EXTRACT_ALL            = NO
-
-# If the EXTRACT_PRIVATE tag is set to YES all private members of a class
-# will be included in the documentation.
-
-EXTRACT_PRIVATE        = NO
-
-# If the EXTRACT_STATIC tag is set to YES all static members of a file
-# will be included in the documentation.
-
-EXTRACT_STATIC         = NO
-
-# If the EXTRACT_LOCAL_CLASSES tag is set to YES classes (and structs)
-# defined locally in source files will be included in the documentation.
-# If set to NO only classes defined in header files are included.
-
-EXTRACT_LOCAL_CLASSES  = YES
-
-# This flag is only useful for Objective-C code. When set to YES local
-# methods, which are defined in the implementation section but not in
-# the interface are included in the documentation.
-# If set to NO (the default) only methods in the interface are included.
-
-EXTRACT_LOCAL_METHODS  = NO
-
-# If this flag is set to YES, the members of anonymous namespaces will be
-# extracted and appear in the documentation as a namespace called
-# 'anonymous_namespace{file}', where file will be replaced with the base
-# name of the file that contains the anonymous namespace. By default
-# anonymous namespace are hidden.
-
-EXTRACT_ANON_NSPACES   = NO
-
-# If the HIDE_UNDOC_MEMBERS tag is set to YES, Doxygen will hide all
-# undocumented members of documented classes, files or namespaces.
-# If set to NO (the default) these members will be included in the
-# various overviews, but no documentation section is generated.
-# This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_MEMBERS     = NO
-
-# If the HIDE_UNDOC_CLASSES tag is set to YES, Doxygen will hide all
-# undocumented classes that are normally visible in the class hierarchy.
-# If set to NO (the default) these classes will be included in the various
-# overviews. This option has no effect if EXTRACT_ALL is enabled.
-
-HIDE_UNDOC_CLASSES     = NO
-
-# If the HIDE_FRIEND_COMPOUNDS tag is set to YES, Doxygen will hide all
-# friend (class|struct|union) declarations.
-# If set to NO (the default) these declarations will be included in the
-# documentation.
-
-HIDE_FRIEND_COMPOUNDS  = NO
-
-# If the HIDE_IN_BODY_DOCS tag is set to YES, Doxygen will hide any
-# documentation blocks found inside the body of a function.
-# If set to NO (the default) these blocks will be appended to the
-# function's detailed documentation block.
-
-HIDE_IN_BODY_DOCS      = NO
-
-# The INTERNAL_DOCS tag determines if documentation
-# that is typed after a \internal command is included. If the tag is set
-# to NO (the default) then the documentation will be excluded.
-# Set it to YES to include the internal documentation.
-
-INTERNAL_DOCS          = NO
-
-# If the CASE_SENSE_NAMES tag is set to NO then Doxygen will only generate
-# file names in lower-case letters. If set to YES upper-case letters are also
-# allowed. This is useful if you have classes or files whose names only differ
-# in case and if your file system supports case sensitive file names. Windows
-# and Mac users are advised to set this option to NO.
-
-CASE_SENSE_NAMES       = YES
-
-# If the HIDE_SCOPE_NAMES tag is set to NO (the default) then Doxygen
-# will show members with their full class and namespace scopes in the
-# documentation. If set to YES the scope will be hidden.
-
-HIDE_SCOPE_NAMES       = NO
-
-# If the SHOW_INCLUDE_FILES tag is set to YES (the default) then Doxygen
-# will put a list of the files that are included by a file in the documentation
-# of that file.
-
-SHOW_INCLUDE_FILES     = YES
-
-# If the INLINE_INFO tag is set to YES (the default) then a tag [inline]
-# is inserted in the documentation for inline members.
-
-INLINE_INFO            = YES
-
-# If the SORT_MEMBER_DOCS tag is set to YES (the default) then doxygen
-# will sort the (detailed) documentation of file and class members
-# alphabetically by member name. If set to NO the members will appear in
-# declaration order.
-
-SORT_MEMBER_DOCS       = YES
-
-# If the SORT_BRIEF_DOCS tag is set to YES then doxygen will sort the
-# brief documentation of file, namespace and class members alphabetically
-# by member name. If set to NO (the default) the members will appear in
-# declaration order.
-
-SORT_BRIEF_DOCS        = YES
-
-# If the SORT_GROUP_NAMES tag is set to YES then doxygen will sort the
-# hierarchy of group names into alphabetical order. If set to NO (the default)
-# the group names will appear in their defined order.
-
-SORT_GROUP_NAMES       = NO
-
-# If the SORT_BY_SCOPE_NAME tag is set to YES, the class list will be
-# sorted by fully-qualified names, including namespaces. If set to
-# NO (the default), the class list will be sorted only by class name,
-# not including the namespace part.
-# Note: This option is not very useful if HIDE_SCOPE_NAMES is set to YES.
-# Note: This option applies only to the class list, not to the
-# alphabetical list.
-
-SORT_BY_SCOPE_NAME     = NO
-
-# The GENERATE_TODOLIST tag can be used to enable (YES) or
-# disable (NO) the todo list. This list is created by putting \todo
-# commands in the documentation.
-
-GENERATE_TODOLIST      = YES
-
-# The GENERATE_TESTLIST tag can be used to enable (YES) or
-# disable (NO) the test list. This list is created by putting \test
-# commands in the documentation.
-
-GENERATE_TESTLIST      = YES
-
-# The GENERATE_BUGLIST tag can be used to enable (YES) or
-# disable (NO) the bug list. This list is created by putting \bug
-# commands in the documentation.
-
-GENERATE_BUGLIST       = YES
-
-# The GENERATE_DEPRECATEDLIST tag can be used to enable (YES) or
-# disable (NO) the deprecated list. This list is created by putting
-# \deprecated commands in the documentation.
-
-GENERATE_DEPRECATEDLIST= YES
-
-# The ENABLED_SECTIONS tag can be used to enable conditional
-# documentation sections, marked by \if sectionname ... \endif.
-
-ENABLED_SECTIONS       =
-
-# The MAX_INITIALIZER_LINES tag determines the maximum number of lines
-# the initial value of a variable or define consists of for it to appear in
-# the documentation. If the initializer consists of more lines than specified
-# here it will be hidden. Use a value of 0 to hide initializers completely.
-# The appearance of the initializer of individual variables and defines in the
-# documentation can be controlled using \showinitializer or \hideinitializer
-# command in the documentation regardless of this setting.
-
-MAX_INITIALIZER_LINES  = 30
-
-# Set the SHOW_USED_FILES tag to NO to disable the list of files generated
-# at the bottom of the documentation of classes and structs. If set to YES the
-# list will mention the files that were used to generate the documentation.
-
-SHOW_USED_FILES        = YES
-
-# If the sources in your project are distributed over multiple directories
-# then setting the SHOW_DIRECTORIES tag to YES will show the directory hierarchy
-# in the documentation. The default is NO.
-
-SHOW_DIRECTORIES       = NO
-
-# The FILE_VERSION_FILTER tag can be used to specify a program or script that
-# doxygen should invoke to get the current version for each file (typically from
-# the version control system). Doxygen will invoke the program by executing (via
-# popen()) the command <command> <input-file>, where <command> is the value of
-# the FILE_VERSION_FILTER tag, and <input-file> is the name of an input file
-# provided by doxygen. Whatever the program writes to standard output
-# is used as the file version. See the manual for examples.
-
-FILE_VERSION_FILTER    =
-
-#---------------------------------------------------------------------------
-# configuration options related to warning and progress messages
-#---------------------------------------------------------------------------
-
-# The QUIET tag can be used to turn on/off the messages that are generated
-# by doxygen. Possible values are YES and NO. If left blank NO is used.
-
-QUIET                  = NO
-
-# The WARNINGS tag can be used to turn on/off the warning messages that are
-# generated by doxygen. Possible values are YES and NO. If left blank
-# NO is used.
-
-WARNINGS               = YES
-
-# If WARN_IF_UNDOCUMENTED is set to YES, then doxygen will generate warnings
-# for undocumented members. If EXTRACT_ALL is set to YES then this flag will
-# automatically be disabled.
-
-WARN_IF_UNDOCUMENTED   = YES
-
-# If WARN_IF_DOC_ERROR is set to YES, doxygen will generate warnings for
-# potential errors in the documentation, such as not documenting some
-# parameters in a documented function, or documenting parameters that
-# don't exist or using markup commands wrongly.
-
-WARN_IF_DOC_ERROR      = YES
-
-# This WARN_NO_PARAMDOC option can be abled to get warnings for
-# functions that are documented, but have no documentation for their parameters
-# or return value. If set to NO (the default) doxygen will only warn about
-# wrong or incomplete parameter documentation, but not about the absence of
-# documentation.
-
-WARN_NO_PARAMDOC       = NO
-
-# The WARN_FORMAT tag determines the format of the warning messages that
-# doxygen can produce. The string should contain the $file, $line, and $text
-# tags, which will be replaced by the file and line number from which the
-# warning originated and the warning text. Optionally the format may contain
-# $version, which will be replaced by the version of the file (if it could
-# be obtained via FILE_VERSION_FILTER)
-
-WARN_FORMAT            = "$file:$line: $text"
-
-# The WARN_LOGFILE tag can be used to specify a file to which warning
-# and error messages should be written. If left blank the output is written
-# to stderr.
-
-WARN_LOGFILE           =
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-
-# The INPUT tag can be used to specify the files and/or directories that contain
-# documented source files. You may enter file names like "myfile.cpp" or
-# directories like "/usr/src/myproject". Separate the files or directories
-# with spaces.
-
-INPUT                  = "@PROJECT_SOURCE_DIR@/source" \
-                         "@PROJECT_DOCUMENTATION_DIR@/doxygen" \
-                         "@PROJECT_BINARY_DIR@/propertydocs.dox"
-
-# This tag can be used to specify the character encoding of the source files
-# that doxygen parses. Internally doxygen uses the UTF-8 encoding, which is
-# also the default input encoding. Doxygen uses libiconv (or the iconv built
-# into libc) for the transcoding. See http://www.gnu.org/software/libiconv for
-# the list of possible encodings.
-
-INPUT_ENCODING         = UTF-8
-
-# If the value of the INPUT tag contains directories, you can use the
-# FILE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank the following patterns are tested:
-# *.c *.cc *.cxx *.cpp *.c++ *.java *.ii *.ixx *.ipp *.i++ *.inl *.h *.hh *.hxx
-# *.hpp *.h++ *.idl *.odl *.cs *.php *.php3 *.inc *.m *.mm *.py *.f90
-
-FILE_PATTERNS          =
-
-# The RECURSIVE tag can be used to turn specify whether or not subdirectories
-# should be searched for input files as well. Possible values are YES and NO.
-# If left blank NO is used.
-
-RECURSIVE              = YES
-
-# The EXCLUDE tag can be used to specify files and/or directories that should
-# excluded from the INPUT source files. This way you can easily exclude a
-# subdirectory from a directory tree whose root is specified with the INPUT tag.
-
-EXCLUDE                =
-
-# The EXCLUDE_SYMLINKS tag can be used select whether or not files or
-# directories that are symbolic links (a Unix filesystem feature) are excluded
-# from the input.
-
-EXCLUDE_SYMLINKS       = NO
-
-# If the value of the INPUT tag contains directories, you can use the
-# EXCLUDE_PATTERNS tag to specify one or more wildcard patterns to exclude
-# certain files from those directories. Note that the wildcards are matched
-# against the file with absolute path, so to exclude all test directories
-# for example use the pattern */test/*
-
-EXCLUDE_PATTERNS       = moc* \
-                         */.svn/* \
-                         */interface/* \
-                         */build/* \
-                         */templates/* \
-                         */scripts/* \
-                         */doc/html/* \
-                         */cmake/* \
-                         */config/* \
-                         */test/* \
-
-
-
-# The EXCLUDE_SYMBOLS tag can be used to specify one or more symbol names
-# (namespaces, classes, functions, etc.) that should be excluded from the
-# output. The symbol name can be a fully qualified name, a word, or if the
-# wildcard * is used, a substring. Examples: ANamespace, AClass,
-# AClass::ANamespace, ANamespace::*Test
-
-EXCLUDE_SYMBOLS        =
-
-# The EXAMPLE_PATH tag can be used to specify one or more files or
-# directories that contain example code fragments that are included (see
-# the \include command).
-
-EXAMPLE_PATH           = @PROJECT_DOCUMENTATION_SNIPPET_DIR_REL@
-
-# If the value of the EXAMPLE_PATH tag contains directories, you can use the
-# EXAMPLE_PATTERNS tag to specify one or more wildcard pattern (like *.cpp
-# and *.h) to filter out the source-files in the directories. If left
-# blank all files are included.
-
-EXAMPLE_PATTERNS       =
-
-# If the EXAMPLE_RECURSIVE tag is set to YES then subdirectories will be
-# searched for input files to be used with the \include or \dontinclude
-# commands irrespective of the value of the RECURSIVE tag.
-# Possible values are YES and NO. If left blank NO is used.
-
-EXAMPLE_RECURSIVE      = NO
-
-# The IMAGE_PATH tag can be used to specify one or more files or
-# directories that contain image that are included in the documentation (see
-# the \image command).
-
-IMAGE_PATH             = @PROJECT_DOCUMENTATION_IMAGE_DIR_REL@
-
-# The INPUT_FILTER tag can be used to specify a program that doxygen should
-# invoke to filter for each input file. Doxygen will invoke the filter program
-# by executing (via popen()) the command <filter> <input-file>, where <filter>
-# is the value of the INPUT_FILTER tag, and <input-file> is the name of an
-# input file. Doxygen will then use the output that the filter program writes
-# to standard output.  If FILTER_PATTERNS is specified, this tag will be
-# ignored.
-
-INPUT_FILTER           =
-
-# The FILTER_PATTERNS tag can be used to specify filters on a per file pattern
-# basis.  Doxygen will compare the file name with each pattern and apply the
-# filter if there is a match.  The filters are a list of the form:
-# pattern=filter (like *.cpp=my_cpp_filter). See INPUT_FILTER for further
-# info on how filters are used. If FILTER_PATTERNS is empty, INPUT_FILTER
-# is applied to all files.
-
-FILTER_PATTERNS        =
-
-# If the FILTER_SOURCE_FILES tag is set to YES, the input filter (if set using
-# INPUT_FILTER) will be used to filter the input files when producing source
-# files to browse (i.e. when SOURCE_BROWSER is set to YES).
-
-FILTER_SOURCE_FILES    = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-
-# If the SOURCE_BROWSER tag is set to YES then a list of source files will
-# be generated. Documented entities will be cross-referenced with these sources.
-# Note: To get rid of all source code in the generated output, make sure also
-# VERBATIM_HEADERS is set to NO.
-
-SOURCE_BROWSER         = NO
-
-# Setting the INLINE_SOURCES tag to YES will include the body
-# of functions and classes directly in the documentation.
-
-INLINE_SOURCES         = NO
-
-# Setting the STRIP_CODE_COMMENTS tag to YES (the default) will instruct
-# doxygen to hide any special comment blocks from generated source code
-# fragments. Normal C and C++ comments will always remain visible.
-
-STRIP_CODE_COMMENTS    = YES
-
-# If the REFERENCED_BY_RELATION tag is set to YES (the default)
-# then for each documented function all documented
-# functions referencing it will be listed.
-
-REFERENCED_BY_RELATION = NO
-
-# If the REFERENCES_RELATION tag is set to YES (the default)
-# then for each documented function all documented entities
-# called/used by that function will be listed.
-
-REFERENCES_RELATION    = NO
-
-# If the REFERENCES_LINK_SOURCE tag is set to YES (the default)
-# and SOURCE_BROWSER tag is set to YES, then the hyperlinks from
-# functions in REFERENCES_RELATION and REFERENCED_BY_RELATION lists will
-# link to the source code.  Otherwise they will link to the documentstion.
-
-REFERENCES_LINK_SOURCE = YES
-
-# If the USE_HTAGS tag is set to YES then the references to source code
-# will point to the HTML generated by the htags(1) tool instead of doxygen
-# built-in source browser. The htags tool is part of GNU's global source
-# tagging system (see http://www.gnu.org/software/global/global.html). You
-# will need version 4.8.6 or higher.
-
-USE_HTAGS              = NO
-
-# If the VERBATIM_HEADERS tag is set to YES (the default) then Doxygen
-# will generate a verbatim copy of the header file for each class for
-# which an include is specified. Set to NO to disable this.
-
-VERBATIM_HEADERS       = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-
-# If the ALPHABETICAL_INDEX tag is set to YES, an alphabetical index
-# of all compounds will be generated. Enable this if the project
-# contains a lot of classes, structs, unions or interfaces.
-
-ALPHABETICAL_INDEX     = NO
-
-# If the alphabetical index is enabled (see ALPHABETICAL_INDEX) then
-# the COLS_IN_ALPHA_INDEX tag can be used to specify the number of columns
-# in which this list will be split (can be a number in the range [1..20])
-
-COLS_IN_ALPHA_INDEX    = 5
-
-# In case all classes in a project start with a common prefix, all
-# classes will be put under the same header in the alphabetical index.
-# The IGNORE_PREFIX tag can be used to specify one or more prefixes that
-# should be ignored while generating the index headers.
-
-IGNORE_PREFIX          =
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_HTML tag is set to YES (the default) Doxygen will
-# generate HTML output.
-
-GENERATE_HTML          = YES
-
-# The HTML_OUTPUT tag is used to specify where the HTML docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `html' will be used as the default path.
-
-HTML_OUTPUT            = @PROJECT_DOCUMENTATION_HTML_OUTPUT_DIR_REL@
-
-# The HTML_FILE_EXTENSION tag can be used to specify the file extension for
-# each generated HTML page (for example: .htm,.php,.asp). If it is left blank
-# doxygen will generate files with .html extension.
-
-HTML_FILE_EXTENSION    = .html
-
-# The HTML_HEADER tag can be used to specify a personal HTML header for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard header.
-
-HTML_HEADER            = @PROJECT_DOCUMENTATION_LAYOUT_DIR_REL@/Header.html
-
-# The HTML_FOOTER tag can be used to specify a personal HTML footer for
-# each generated HTML page. If it is left blank doxygen will generate a
-# standard footer.
-
-HTML_FOOTER            = @PROJECT_DOCUMENTATION_LAYOUT_DIR_REL@/Footer.html
-
-# The HTML_STYLESHEET tag can be used to specify a user-defined cascading
-# style sheet that is used by each HTML page. It can be used to
-# fine-tune the look of the HTML output. If the tag is left blank doxygen
-# will generate a default style sheet. Note that doxygen will try to copy
-# the style sheet file to the HTML output directory, so don't put your own
-# stylesheet in the HTML output directory as well, or it will be erased!
-
-HTML_STYLESHEET        = @PROJECT_DOCUMENTATION_LAYOUT_DIR_REL@/Doxygen.css
-
-# Customized layout
-
-LAYOUT_FILE = @PROJECT_DOCUMENTATION_LAYOUT_DIR_REL@/DoxygenLayout.xml
-
-# If the HTML_ALIGN_MEMBERS tag is set to YES, the members of classes,
-# files or namespaces will be aligned in HTML using tables. If set to
-# NO a bullet list will be used.
-
-HTML_ALIGN_MEMBERS     = YES
-
-# If the GENERATE_HTMLHELP tag is set to YES, additional index files
-# will be generated that can be used as input for tools like the
-# Microsoft HTML help workshop to generate a compiled HTML help file (.chm)
-# of the generated HTML documentation.
-
-GENERATE_HTMLHELP      = NO
-
-# If the GENERATE_DOCSET tag is set to YES, additional index files
-# will be generated that can be used as input for Apple's Xcode 3
-# integrated development environment, introduced with OSX 10.5 (Leopard).
-# To create a documentation set, doxygen will generate a Makefile in the
-# HTML output directory. Running make will produce the docset in that
-# directory and running "make install" will install the docset in
-# ~/Library/Developer/Shared/Documentation/DocSets so that Xcode will find
-# it at startup.
-
-GENERATE_DOCSET        = NO
-
-# When GENERATE_DOCSET tag is set to YES, this tag determines the name of the
-# feed. A documentation feed provides an umbrella under which multiple
-# documentation sets from a single provider (such as a company or product suite)
-# can be grouped.
-
-DOCSET_FEEDNAME        = "Doxygen generated docs"
-
-# When GENERATE_DOCSET tag is set to YES, this tag specifies a string that
-# should uniquely identify the documentation set bundle. This should be a
-# reverse domain-name style string, e.g. com.mycompany.MyDocSet. Doxygen
-# will append .docset to the name.
-
-DOCSET_BUNDLE_ID       = org.doxygen.Project
-
-# If the HTML_DYNAMIC_SECTIONS tag is set to YES then the generated HTML
-# documentation will contain sections that can be hidden and shown after the
-# page has loaded. For this to work a browser that supports
-# JavaScript and DHTML is required (for instance Mozilla 1.0+, Firefox
-# Netscape 6.0+, Internet explorer 5.0+, Konqueror, or Safari).
-
-HTML_DYNAMIC_SECTIONS  = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the CHM_FILE tag can
-# be used to specify the file name of the resulting .chm file. You
-# can add a path in front of the file if the result should not be
-# written to the html output directory.
-
-CHM_FILE               =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the HHC_LOCATION tag can
-# be used to specify the location (absolute path including file name) of
-# the HTML help compiler (hhc.exe). If non-empty doxygen will try to run
-# the HTML help compiler on the generated index.hhp.
-
-HHC_LOCATION           =
-
-# If the GENERATE_HTMLHELP tag is set to YES, the GENERATE_CHI flag
-# controls if a separate .chi index file is generated (YES) or that
-# it should be included in the master .chm file (NO).
-
-GENERATE_CHI           = NO
-
-# If the GENERATE_HTMLHELP tag is set to YES, the BINARY_TOC flag
-# controls whether a binary table of contents is generated (YES) or a
-# normal table of contents (NO) in the .chm file.
-
-BINARY_TOC             = NO
-
-# The TOC_EXPAND flag can be set to YES to add extra items for group members
-# to the contents of the HTML help documentation and to the tree view.
-
-TOC_EXPAND             = NO
-
-# The DISABLE_INDEX tag can be used to turn on/off the condensed index at
-# top of each HTML page. The value NO (the default) enables the index and
-# the value YES disables it.
-
-DISABLE_INDEX          = NO
-
-# This tag can be used to set the number of enum values (range [1..20])
-# that doxygen will group on one line in the generated HTML documentation.
-
-ENUM_VALUES_PER_LINE   = 4
-
-# If the GENERATE_TREEVIEW tag is set to YES, a side panel will be
-# generated containing a tree-like index structure (just like the one that
-# is generated for HTML Help). For this to work a browser that supports
-# JavaScript, DHTML, CSS and frames is required (for instance Mozilla 1.0+,
-# Netscape 6.0+, Internet explorer 5.0+, or Konqueror). Windows users are
-# probably better off using the HTML help feature.
-
-GENERATE_TREEVIEW      = NO
-
-# If the treeview is enabled (see GENERATE_TREEVIEW) then this tag can be
-# used to set the initial width (in pixels) of the frame in which the tree
-# is shown.
-
-TREEVIEW_WIDTH         = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_LATEX tag is set to YES (the default) Doxygen will
-# generate Latex output.
-
-GENERATE_LATEX         = NO
-
-# The LATEX_OUTPUT tag is used to specify where the LaTeX docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `latex' will be used as the default path.
-
-LATEX_OUTPUT           = latex
-
-# The LATEX_CMD_NAME tag can be used to specify the LaTeX command name to be
-# invoked. If left blank `latex' will be used as the default command name.
-
-LATEX_CMD_NAME         = latex
-
-# The MAKEINDEX_CMD_NAME tag can be used to specify the command name to
-# generate index for LaTeX. If left blank `makeindex' will be used as the
-# default command name.
-
-MAKEINDEX_CMD_NAME     = makeindex
-
-# If the COMPACT_LATEX tag is set to YES Doxygen generates more compact
-# LaTeX documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_LATEX          = NO
-
-# The PAPER_TYPE tag can be used to set the paper type that is used
-# by the printer. Possible values are: a4, a4wide, letter, legal and
-# executive. If left blank a4wide will be used.
-
-PAPER_TYPE             = a4wide
-
-# The EXTRA_PACKAGES tag can be to specify one or more names of LaTeX
-# packages that should be included in the LaTeX output.
-
-EXTRA_PACKAGES         =
-
-# The LATEX_HEADER tag can be used to specify a personal LaTeX header for
-# the generated latex document. The header should contain everything until
-# the first chapter. If it is left blank doxygen will generate a
-# standard header. Notice: only use this tag if you know what you are doing!
-
-LATEX_HEADER           =
-
-# If the PDF_HYPERLINKS tag is set to YES, the LaTeX that is generated
-# is prepared for conversion to pdf (using ps2pdf). The pdf file will
-# contain links (just like the HTML output) instead of page references
-# This makes the output suitable for online browsing using a pdf viewer.
-
-PDF_HYPERLINKS         = YES
-
-# If the USE_PDFLATEX tag is set to YES, pdflatex will be used instead of
-# plain latex in the generated Makefile. Set this option to YES to get a
-# higher quality PDF documentation.
-
-USE_PDFLATEX           = YES
-
-# If the LATEX_BATCHMODE tag is set to YES, doxygen will add the \\batchmode.
-# command to the generated LaTeX files. This will instruct LaTeX to keep
-# running if errors occur, instead of asking the user for help.
-# This option is also used when generating formulas in HTML.
-
-LATEX_BATCHMODE        = NO
-
-# If LATEX_HIDE_INDICES is set to YES then doxygen will not
-# include the index chapters (such as File Index, Compound Index, etc.)
-# in the output.
-
-LATEX_HIDE_INDICES     = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_RTF tag is set to YES Doxygen will generate RTF output
-# The RTF output is optimized for Word 97 and may not look very pretty with
-# other RTF readers or editors.
-
-GENERATE_RTF           = NO
-
-# The RTF_OUTPUT tag is used to specify where the RTF docs will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `rtf' will be used as the default path.
-
-RTF_OUTPUT             = rtf
-
-# If the COMPACT_RTF tag is set to YES Doxygen generates more compact
-# RTF documents. This may be useful for small projects and may help to
-# save some trees in general.
-
-COMPACT_RTF            = NO
-
-# If the RTF_HYPERLINKS tag is set to YES, the RTF that is generated
-# will contain hyperlink fields. The RTF file will
-# contain links (just like the HTML output) instead of page references.
-# This makes the output suitable for online browsing using WORD or other
-# programs which support those fields.
-# Note: wordpad (write) and others do not support links.
-
-RTF_HYPERLINKS         = NO
-
-# Load stylesheet definitions from file. Syntax is similar to doxygen's
-# config file, i.e. a series of assignments. You only have to provide
-# replacements, missing definitions are set to their default value.
-
-RTF_STYLESHEET_FILE    =
-
-# Set optional variables used in the generation of an rtf document.
-# Syntax is similar to doxygen's config file.
-
-RTF_EXTENSIONS_FILE    =
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_MAN tag is set to YES (the default) Doxygen will
-# generate man pages
-
-GENERATE_MAN           = NO
-
-# The MAN_OUTPUT tag is used to specify where the man pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `man' will be used as the default path.
-
-MAN_OUTPUT             = man
-
-# The MAN_EXTENSION tag determines the extension that is added to
-# the generated man pages (default is the subroutine's section .3)
-
-MAN_EXTENSION          = .3
-
-# If the MAN_LINKS tag is set to YES and Doxygen generates man output,
-# then it will generate one additional man file for each entity
-# documented in the real man page(s). These additional files
-# only source the real man page, but without them the man command
-# would be unable to find the correct page. The default is NO.
-
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_XML tag is set to YES Doxygen will
-# generate an XML file that captures the structure of
-# the code including all documentation.
-
-GENERATE_XML           = NO
-
-# The XML_OUTPUT tag is used to specify where the XML pages will be put.
-# If a relative path is entered the value of OUTPUT_DIRECTORY will be
-# put in front of it. If left blank `xml' will be used as the default path.
-
-XML_OUTPUT             = xml
-
-# The XML_SCHEMA tag can be used to specify an XML schema,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_SCHEMA             =
-
-# The XML_DTD tag can be used to specify an XML DTD,
-# which can be used by a validating XML parser to check the
-# syntax of the XML files.
-
-XML_DTD                =
-
-# If the XML_PROGRAMLISTING tag is set to YES Doxygen will
-# dump the program listings (including syntax highlighting
-# and cross-referencing information) to the XML output. Note that
-# enabling this will significantly increase the size of the XML output.
-
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_AUTOGEN_DEF tag is set to YES Doxygen will
-# generate an AutoGen Definitions (see autogen.sf.net) file
-# that captures the structure of the code including all
-# documentation. Note that this feature is still experimental
-# and incomplete at the moment.
-
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-
-# If the GENERATE_PERLMOD tag is set to YES Doxygen will
-# generate a Perl module file that captures the structure of
-# the code including all documentation. Note that this
-# feature is still experimental and incomplete at the
-# moment.
-
-GENERATE_PERLMOD       = NO
-
-# If the PERLMOD_LATEX tag is set to YES Doxygen will generate
-# the necessary Makefile rules, Perl scripts and LaTeX code to be able
-# to generate PDF and DVI output from the Perl module output.
-
-PERLMOD_LATEX          = NO
-
-# If the PERLMOD_PRETTY tag is set to YES the Perl module output will be
-# nicely formatted so it can be parsed by a human reader.  This is useful
-# if you want to understand what is going on.  On the other hand, if this
-# tag is set to NO the size of the Perl module output will be much smaller
-# and Perl will parse it just the same.
-
-PERLMOD_PRETTY         = YES
-
-# The names of the make variables in the generated doxyrules.make file
-# are prefixed with the string contained in PERLMOD_MAKEVAR_PREFIX.
-# This is useful so different doxyrules.make files included by the same
-# Makefile don't overwrite each other's variables.
-
-PERLMOD_MAKEVAR_PREFIX =
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor
-#---------------------------------------------------------------------------
-
-# If the ENABLE_PREPROCESSING tag is set to YES (the default) Doxygen will
-# evaluate all C-preprocessor directives found in the sources and include
-# files.
-
-ENABLE_PREPROCESSING   = YES
-
-# If the MACRO_EXPANSION tag is set to YES Doxygen will expand all macro
-# names in the source code. If set to NO (the default) only conditional
-# compilation will be performed. Macro expansion can be done in a controlled
-# way by setting EXPAND_ONLY_PREDEF to YES.
-
-MACRO_EXPANSION        = NO
-
-# If the EXPAND_ONLY_PREDEF and MACRO_EXPANSION tags are both set to YES
-# then the macro expansion is limited to the macros specified with the
-# PREDEFINED and EXPAND_AS_DEFINED tags.
-
-EXPAND_ONLY_PREDEF     = NO
-
-# If the SEARCH_INCLUDES tag is set to YES (the default) the includes files
-# in the INCLUDE_PATH (see below) will be search if a #include is found.
-
-SEARCH_INCLUDES        = YES
-
-# The INCLUDE_PATH tag can be used to specify one or more directories that
-# contain include files that are not input files but should be processed by
-# the preprocessor.
-
-INCLUDE_PATH           =
-
-# You can use the INCLUDE_FILE_PATTERNS tag to specify one or more wildcard
-# patterns (like *.h and *.hpp) to filter out the header-files in the
-# directories. If left blank, the patterns specified with FILE_PATTERNS will
-# be used.
-
-INCLUDE_FILE_PATTERNS  =
-
-# The PREDEFINED tag can be used to specify one or more macro names that
-# are defined before the preprocessor is started (similar to the -D option of
-# gcc). The argument of the tag is a list of macros of the form: name
-# or name=definition (no spaces). If the definition and the = are
-# omitted =1 is assumed. To prevent a macro definition from being
-# undefined via #undef or recursively expanded use the := operator
-# instead of the = operator.
-
-PREDEFINED             =
-
-# If the MACRO_EXPANSION and EXPAND_ONLY_PREDEF tags are set to YES then
-# this tag can be used to specify a list of macro names that should be expanded.
-# The macro definition that is found in the sources will be used.
-# Use the PREDEFINED tag if you want to use a different macro definition.
-
-EXPAND_AS_DEFINED      =
-
-# If the SKIP_FUNCTION_MACROS tag is set to YES (the default) then
-# doxygen's preprocessor will remove all function-like macros that are alone
-# on a line, have an all uppercase name, and do not end with a semicolon. Such
-# function macros are typically used for boiler-plate code, and will confuse
-# the parser if not removed.
-
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references
-#---------------------------------------------------------------------------
-
-# The TAGFILES option can be used to specify one or more tagfiles.
-# Optionally an initial location of the external documentation
-# can be added for each tagfile. The format of a tag file without
-# this location is as follows:
-#   TAGFILES = file1 file2 ...
-# Adding location for the tag files is done as follows:
-#   TAGFILES = file1=loc1 "file2 = loc2" ...
-# where "loc1" and "loc2" can be relative or absolute paths or
-# URLs. If a location is present for each tag, the installdox tool
-# does not have to be run to correct the links.
-# Note that each tag file must have a unique name
-# (where the name does NOT include the path)
-# If a tag file is not located in the directory in which doxygen
-# is run, you must also specify the path to the tagfile here.
-
-TAGFILES               =
-
-# When a file name is specified after GENERATE_TAGFILE, doxygen will create
-# a tag file that is based on the input files it reads.
-
-GENERATE_TAGFILE       = "@PROJECT_DOCUMENTATION_HTML_OUTPUT_DIR@/@PROJECT_NAME@.tag"
-
-# If the ALLEXTERNALS tag is set to YES all external classes will be listed
-# in the class index. If set to NO only the inherited external classes
-# will be listed.
-
-ALLEXTERNALS           = NO
-
-# If the EXTERNAL_GROUPS tag is set to YES all external groups will be listed
-# in the modules index. If set to NO, only the current project's groups will
-# be listed.
-
-EXTERNAL_GROUPS        = YES
-
-# The PERL_PATH should be the absolute path and name of the perl script
-# interpreter (i.e. the result of `which perl').
-
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool
-#---------------------------------------------------------------------------
-
-# If the CLASS_DIAGRAMS tag is set to YES (the default) Doxygen will
-# generate a inheritance diagram (in HTML, RTF and LaTeX) for classes with base
-# or super classes. Setting the tag to NO turns the diagrams off. Note that
-# this option is superseded by the HAVE_DOT option below. This is only a
-# fallback. It is recommended to install and use dot, since it yields more
-# powerful graphs.
-
-CLASS_DIAGRAMS         = YES
-
-# You can define message sequence charts within doxygen comments using the \msc
-# command. Doxygen will then run the mscgen tool (see
-# http://www.mcternan.me.uk/mscgen/) to produce the chart and insert it in the
-# documentation. The MSCGEN_PATH tag allows you to specify the directory where
-# the mscgen tool resides. If left empty the tool is assumed to be found in the
-# default search path.
-
-MSCGEN_PATH            =
-
-# If set to YES, the inheritance and collaboration graphs will hide
-# inheritance and usage relations if the target is undocumented
-# or is not a class.
-
-HIDE_UNDOC_RELATIONS   = YES
-
-# If you set the HAVE_DOT tag to YES then doxygen will assume the dot tool is
-# available from the path. This tool is part of Graphviz, a graph visualization
-# toolkit from AT&T and Lucent Bell Labs. The other options in this section
-# have no effect if this option is set to NO (the default)
-
-HAVE_DOT               = NO
-
-# If the CLASS_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect inheritance relations. Setting this tag to YES will force the
-# the CLASS_DIAGRAMS tag to NO.
-
-CLASS_GRAPH            = YES
-
-# If the COLLABORATION_GRAPH and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for each documented class showing the direct and
-# indirect implementation dependencies (inheritance, containment, and
-# class references variables) of the class with other documented classes.
-
-COLLABORATION_GRAPH    = YES
-
-# If the GROUP_GRAPHS and HAVE_DOT tags are set to YES then doxygen
-# will generate a graph for groups, showing the direct groups dependencies
-
-GROUP_GRAPHS           = YES
-
-# If the UML_LOOK tag is set to YES doxygen will generate inheritance and
-# collaboration diagrams in a style similar to the OMG's Unified Modeling
-# Language.
-
-UML_LOOK               = NO
-
-# If set to YES, the inheritance and collaboration graphs will show the
-# relations between templates and their instances.
-
-TEMPLATE_RELATIONS     = NO
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDE_GRAPH, and HAVE_DOT
-# tags are set to YES then doxygen will generate a graph for each documented
-# file showing the direct and indirect include dependencies of the file with
-# other documented files.
-
-INCLUDE_GRAPH          = YES
-
-# If the ENABLE_PREPROCESSING, SEARCH_INCLUDES, INCLUDED_BY_GRAPH, and
-# HAVE_DOT tags are set to YES then doxygen will generate a graph for each
-# documented header file showing the documented files that directly or
-# indirectly include this file.
-
-INCLUDED_BY_GRAPH      = YES
-
-# If the CALL_GRAPH and HAVE_DOT options are set to YES then
-# doxygen will generate a call dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable call graphs
-# for selected functions only using the \callgraph command.
-
-CALL_GRAPH             = NO
-
-# If the CALLER_GRAPH and HAVE_DOT tags are set to YES then
-# doxygen will generate a caller dependency graph for every global function
-# or class method. Note that enabling this option will significantly increase
-# the time of a run. So in most cases it will be better to enable caller
-# graphs for selected functions only using the \callergraph command.
-
-CALLER_GRAPH           = NO
-
-# If the GRAPHICAL_HIERARCHY and HAVE_DOT tags are set to YES then doxygen
-# will graphical hierarchy of all classes instead of a textual one.
-
-GRAPHICAL_HIERARCHY    = YES
-
-# If the DIRECTORY_GRAPH, SHOW_DIRECTORIES and HAVE_DOT tags are set to YES
-# then doxygen will show the dependencies a directory has on other directories
-# in a graphical way. The dependency relations are determined by the #include
-# relations between the files in the directories.
-
-DIRECTORY_GRAPH        = YES
-
-# The DOT_IMAGE_FORMAT tag can be used to set the image format of the images
-# generated by dot. Possible values are png, jpg, or gif
-# If left blank png will be used.
-
-DOT_IMAGE_FORMAT       = png
-
-# The tag DOT_PATH can be used to specify the path where the dot tool can be
-# found. If left blank, it is assumed the dot tool can be found in the path.
-
-DOT_PATH               =
-
-# The DOTFILE_DIRS tag can be used to specify one or more directories that
-# contain dot files that are included in the documentation (see the
-# \dotfile command).
-
-DOTFILE_DIRS           =
-
-# The MAX_DOT_GRAPH_MAX_NODES tag can be used to set the maximum number of
-# nodes that will be shown in the graph. If the number of nodes in a graph
-# becomes larger than this value, doxygen will truncate the graph, which is
-# visualized by representing a node as a red box. Note that doxygen if the
-# number of direct children of the root node in a graph is already larger than
-# DOT_GRAPH_MAX_NODES then the graph will not be shown at all. Also note
-# that the size of a graph can be further restricted by MAX_DOT_GRAPH_DEPTH.
-
-DOT_GRAPH_MAX_NODES    = 50
-
-# The MAX_DOT_GRAPH_DEPTH tag can be used to set the maximum depth of the
-# graphs generated by dot. A depth value of 3 means that only nodes reachable
-# from the root by following a path via at most 3 edges will be shown. Nodes
-# that lay further from the root node will be omitted. Note that setting this
-# option to 1 or 2 may greatly reduce the computation time needed for large
-# code bases. Also note that the size of a graph can be further restricted by
-# DOT_GRAPH_MAX_NODES. Using a depth of 0 means no depth restriction.
-
-MAX_DOT_GRAPH_DEPTH    = 0
-
-# Set the DOT_TRANSPARENT tag to YES to generate images with a transparent
-# background. This is enabled by default, which results in a transparent
-# background. Warning: Depending on the platform used, enabling this option
-# may lead to badly anti-aliased labels on the edges of a graph (i.e. they
-# become hard to read).
-
-DOT_TRANSPARENT        = YES
-
-# Set the DOT_MULTI_TARGETS tag to YES allow dot to generate multiple output
-# files in one run (i.e. multiple -o and -T options on the command line). This
-# makes dot run faster, but since only newer versions of dot (>1.8.10)
-# support this, this feature is disabled by default.
-
-DOT_MULTI_TARGETS      = NO
-
-# If the GENERATE_LEGEND tag is set to YES (the default) Doxygen will
-# generate a legend page explaining the meaning of the various boxes and
-# arrows in the dot generated graphs.
-
-GENERATE_LEGEND        = YES
-
-# If the DOT_CLEANUP tag is set to YES (the default) Doxygen will
-# remove the intermediate dot files that are used to generate
-# the various graphs.
-
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine
-#---------------------------------------------------------------------------
-
-# The SEARCHENGINE tag specifies whether or not a search engine should be
-# used. If set to NO the values of all tags below this one will be ignored.
-
-SEARCHENGINE           = NO
diff --git a/etc/doxygen/layout/Doxygen.css b/etc/doxygen/layout/Doxygen.css
deleted file mode 100644
index c7f9d74596183c8592dfff56ed5fa082c1cfc42e..0000000000000000000000000000000000000000
--- a/etc/doxygen/layout/Doxygen.css
+++ /dev/null
@@ -1,950 +0,0 @@
-/* The standard CSS for doxygen */
-
-body, table, div, p, dl {
-	font-family: Lucida Grande, Verdana, Geneva, Arial, sans-serif;
-	font-size: 12px;
-}
-
-/* @group Heading Levels */
-
-h1 {
-	font-size: 150%;
-}
-
-.title {
-	font-size: 150%;
-	font-weight: bold;
-	margin: 10px 2px;
-}
-
-h2 {
-	font-size: 120%;
-}
-
-h2 ~ *:not(h2) {
-    margin-left: 10px;
-}
-
-h3 {
-	font-size: 100%;
-}
-
-dt {
-	font-weight: bold;
-}
-
-div.multicol {
-	-moz-column-gap: 1em;
-	-webkit-column-gap: 1em;
-	-moz-column-count: 3;
-	-webkit-column-count: 3;
-}
-
-p.startli, p.startdd, p.starttd {
-	margin-top: 2px;
-}
-
-p.endli {
-	margin-bottom: 0px;
-}
-
-p.enddd {
-	margin-bottom: 4px;
-}
-
-p.endtd {
-	margin-bottom: 2px;
-}
-
-/* @end */
-
-caption {
-	font-weight: bold;
-}
-
-span.legend {
-        font-size: 70%;
-        text-align: center;
-}
-
-h3.version {
-        font-size: 90%;
-        text-align: center;
-}
-
-div.qindex, div.navtab{
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
-	text-align: center;
-}
-
-div.qindex, div.navpath {
-	width: 100%;
-	line-height: 140%;
-}
-
-div.navtab {
-	margin-right: 15px;
-}
-
-/* @group Link Styling */
-
-a {
-	color: #3D578C;
-	font-weight: normal;
-	text-decoration: none;
-}
-
-.contents a:visited {
-	color: #4665A2;
-}
-
-a:hover {
-	text-decoration: underline;
-}
-
-a.qindex {
-	font-weight: bold;
-}
-
-a.qindexHL {
-	font-weight: bold;
-	background-color: #9CAFD4;
-	color: #ffffff;
-	border: 1px double #869DCA;
-}
-
-.contents a.qindexHL:visited {
-        color: #ffffff;
-}
-
-a.el {
-	font-weight: bold;
-}
-
-a.elRef {
-}
-
-a.code {
-	color: #4665A2;
-}
-
-a.codeRef {
-	color: #4665A2;
-}
-
-/* @end */
-
-dl.el {
-	margin-left: -1cm;
-}
-
-.fragment {
-	font-family: monospace, fixed;
-	font-size: 105%;
-}
-
-pre.fragment {
-	border: 1px solid #C4CFE5;
-	background-color: #FBFCFD;
-	padding: 4px 6px;
-	margin: 4px 8px 4px 2px;
-	overflow: auto;
-	word-wrap: break-word;
-	font-size:  9pt;
-	line-height: 125%;
-}
-
-div.ah {
-	background-color: black;
-	font-weight: bold;
-	color: #ffffff;
-	margin-bottom: 3px;
-	margin-top: 3px;
-	padding: 0.2em;
-	border: solid thin #333;
-	border-radius: 0.5em;
-	-webkit-border-radius: .5em;
-	-moz-border-radius: .5em;
-	box-shadow: 2px 2px 3px #999;
-	-webkit-box-shadow: 2px 2px 3px #999;
-	-moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-	background-image: -webkit-gradient(linear, left top, left bottom, from(#eee), to(#000),color-stop(0.3, #444));
-	background-image: -moz-linear-gradient(center top, #eee 0%, #444 40%, #000);
-}
-
-div.groupHeader {
-	margin-left: 16px;
-	margin-top: 12px;
-	font-weight: bold;
-}
-
-div.groupText {
-	margin-left: 16px;
-	font-style: italic;
-}
-
-body {
-	background-color: white;
-	color: black;
-        margin: 0;
-}
-
-div.contents {
-	margin-top: 10px;
-	margin-left: 8px;
-	margin-right: 8px;
-}
-
-td.indexkey {
-	background-color: #EBEFF6;
-	font-weight: bold;
-	border: 1px solid #C4CFE5;
-	margin: 2px 0px 2px 0;
-	padding: 2px 10px;
-}
-
-td.indexvalue {
-	background-color: #EBEFF6;
-	border: 1px solid #C4CFE5;
-	padding: 2px 10px;
-	margin: 2px 0px;
-}
-
-tr.memlist {
-	background-color: #EEF1F7;
-}
-
-p.formulaDsp {
-	text-align: center;
-}
-
-img.formulaDsp {
-	
-}
-
-img.formulaInl {
-	vertical-align: middle;
-}
-
-div.center {
-	text-align: center;
-        margin-top: 0px;
-        margin-bottom: 0px;
-        padding: 0px;
-}
-
-div.center img {
-	border: 0px;
-}
-
-address.footer {
-	text-align: right;
-	padding-right: 12px;
-}
-
-img.footer {
-	border: 0px;
-	vertical-align: middle;
-}
-
-/* @group Code Colorization */
-
-span.keyword {
-	color: #008000
-}
-
-span.keywordtype {
-	color: #604020
-}
-
-span.keywordflow {
-	color: #e08000
-}
-
-span.comment {
-	color: #800000
-}
-
-span.preprocessor {
-	color: #806020
-}
-
-span.stringliteral {
-	color: #002080
-}
-
-span.charliteral {
-	color: #008080
-}
-
-span.vhdldigit { 
-	color: #ff00ff 
-}
-
-span.vhdlchar { 
-	color: #000000 
-}
-
-span.vhdlkeyword { 
-	color: #700070 
-}
-
-span.vhdllogic { 
-	color: #ff0000 
-}
-
-/* @end */
-
-/*
-.search {
-	color: #003399;
-	font-weight: bold;
-}
-
-form.search {
-	margin-bottom: 0px;
-	margin-top: 0px;
-}
-
-input.search {
-	font-size: 75%;
-	color: #000080;
-	font-weight: normal;
-	background-color: #e8eef2;
-}
-*/
-
-td.tiny {
-	font-size: 75%;
-}
-
-.dirtab {
-	padding: 4px;
-	border-collapse: collapse;
-	border: 1px solid #A3B4D7;
-}
-
-th.dirtab {
-	background: #EBEFF6;
-	font-weight: bold;
-}
-
-hr {
-	height: 0px;
-	border: none;
-	border-top: 1px solid #4A6AAA;
-}
-
-hr.footer {
-	height: 1px;
-}
-
-/* @group Member Descriptions */
-
-table.memberdecls {
-	border-spacing: 0px;
-	padding: 0px;
-}
-
-.mdescLeft, .mdescRight,
-.memItemLeft, .memItemRight,
-.memTemplItemLeft, .memTemplItemRight, .memTemplParams {
-	background-color: #F9FAFC;
-	border: none;
-	margin: 4px;
-	padding: 1px 0 0 8px;
-}
-
-.mdescLeft, .mdescRight {
-	padding: 0px 8px 4px 8px;
-	color: #555;
-}
-
-.memItemLeft, .memItemRight, .memTemplParams {
-	border-top: 1px solid #C4CFE5;
-}
-
-.memItemLeft, .memTemplItemLeft {
-        white-space: nowrap;
-}
-
-.memItemRight {
-	width: 100%;
-}
-
-.memTemplParams {
-	color: #4665A2;
-        white-space: nowrap;
-}
-
-/* @end */
-
-/* @group Member Details */
-
-/* Styles for detailed member documentation */
-
-.memtemplate {
-	font-size: 80%;
-	color: #4665A2;
-	font-weight: normal;
-	margin-left: 9px;
-}
-
-.memnav {
-	background-color: #EBEFF6;
-	border: 1px solid #A3B4D7;
-	text-align: center;
-	margin: 2px;
-	margin-right: 15px;
-	padding: 2px;
-}
-
-.mempage {
-	width: 100%;
-}
-
-.memitem {
-	padding: 0;
-	margin-bottom: 10px;
-	margin-right: 5px;
-}
-
-.memname {
-        white-space: nowrap;
-        font-weight: bold;
-        margin-left: 6px;
-}
-
-.memproto, dl.reflist dt {
-        border-top: 1px solid #A8B8D9;
-        border-left: 1px solid #A8B8D9;
-        border-right: 1px solid #A8B8D9;
-        padding: 6px 0px 6px 0px;
-        color: #253555;
-        font-weight: bold;
-        text-shadow: 0px 1px 1px rgba(255, 255, 255, 0.9);
-        /* opera specific markup */
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        border-top-right-radius: 8px;
-        border-top-left-radius: 8px;
-        /* firefox specific markup */
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        -moz-border-radius-topright: 8px;
-        -moz-border-radius-topleft: 8px;
-        /* webkit specific markup */
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        -webkit-border-top-right-radius: 8px;
-        -webkit-border-top-left-radius: 8px;
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E2E8F2;
-
-}
-
-.memdoc, dl.reflist dd {
-        border-bottom: 1px solid #A8B8D9;      
-        border-left: 1px solid #A8B8D9;      
-        border-right: 1px solid #A8B8D9; 
-        padding: 2px 5px;
-        background-color: #FBFCFD;
-        border-top-width: 0;
-        /* opera specific markup */
-        border-bottom-left-radius: 8px;
-        border-bottom-right-radius: 8px;
-        box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        /* firefox specific markup */
-        -moz-border-radius-bottomleft: 8px;
-        -moz-border-radius-bottomright: 8px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 5px 5px 5px;
-        background-image: -moz-linear-gradient(center top, #FFFFFF 0%, #FFFFFF 60%, #F7F8FB 95%, #EEF1F7);
-        /* webkit specific markup */
-        -webkit-border-bottom-left-radius: 8px;
-        -webkit-border-bottom-right-radius: 8px;
-        -webkit-box-shadow: 5px 5px 5px rgba(0, 0, 0, 0.15);
-        background-image: -webkit-gradient(linear,center top,center bottom,from(#FFFFFF), color-stop(0.6,#FFFFFF), color-stop(0.60,#FFFFFF), color-stop(0.95,#F7F8FB), to(#EEF1F7));
-}
-
-dl.reflist dt {
-        padding: 5px;
-}
-
-dl.reflist dd {
-        margin: 0px 0px 10px 0px;
-        padding: 5px;
-}
-
-.paramkey {
-	text-align: right;
-}
-
-.paramtype {
-	white-space: nowrap;
-}
-
-.paramname {
-	color: #602020;
-	white-space: nowrap;
-}
-.paramname em {
-	font-style: normal;
-}
-
-.params, .retval, .exception, .tparams {
-        border-spacing: 6px 2px;
-}       
-
-.params .paramname, .retval .paramname {
-        font-weight: bold;
-        vertical-align: top;
-}
-        
-.params .paramtype {
-        font-style: italic;
-        vertical-align: top;
-}       
-        
-.params .paramdir {
-        font-family: "courier new",courier,monospace;
-        vertical-align: top;
-}
-
-
-
-
-/* @end */
-
-/* @group Directory (tree) */
-
-/* for the tree view */
-
-.ftvtree {
-	font-family: sans-serif;
-	margin: 0px;
-}
-
-/* these are for tree view when used as main index */
-
-.directory {
-	font-size: 9pt;
-	font-weight: bold;
-	margin: 5px;
-}
-
-.directory h3 {
-	margin: 0px;
-	margin-top: 1em;
-	font-size: 11pt;
-}
-
-/*
-The following two styles can be used to replace the root node title
-with an image of your choice.  Simply uncomment the next two styles,
-specify the name of your image and be sure to set 'height' to the
-proper pixel height of your image.
-*/
-
-/*
-.directory h3.swap {
-	height: 61px;
-	background-repeat: no-repeat;
-	background-image: url("yourimage.gif");
-}
-.directory h3.swap span {
-	display: none;
-}
-*/
-
-.directory > h3 {
-	margin-top: 0;
-}
-
-.directory p {
-	margin: 0px;
-	white-space: nowrap;
-}
-
-.directory div {
-	display: none;
-	margin: 0px;
-}
-
-.directory img {
-	vertical-align: -30%;
-}
-
-/* these are for tree view when not used as main index */
-
-.directory-alt {
-	font-size: 100%;
-	font-weight: bold;
-}
-
-.directory-alt h3 {
-	margin: 0px;
-	margin-top: 1em;
-	font-size: 11pt;
-}
-
-.directory-alt > h3 {
-	margin-top: 0;
-}
-
-.directory-alt p {
-	margin: 0px;
-	white-space: nowrap;
-}
-
-.directory-alt div {
-	display: none;
-	margin: 0px;
-}
-
-.directory-alt img {
-	vertical-align: -30%;
-}
-
-/* @end */
-
-div.dynheader {
-        margin-top: 8px;
-}
-
-address {
-	font-style: normal;
-	color: #2A3D61;
-}
-
-table.doxtable {
-	border-collapse:collapse;
-}
-
-table.doxtable td, table.doxtable th {
-	border: 1px solid #2D4068;
-	padding: 3px 7px 2px;
-}
-
-table.doxtable th {
-	background-color: #374F7F;
-	color: #FFFFFF;
-	font-size: 110%;
-	padding-bottom: 4px;
-	padding-top: 5px;
-	text-align:left;
-}
-
-table.fieldtable {
-        width: 100%;
-        margin-bottom: 10px;
-        border: 1px solid #A8B8D9;
-        border-spacing: 0px;
-        -moz-border-radius: 4px;
-        -webkit-border-radius: 4px;
-        border-radius: 4px;
-        -moz-box-shadow: rgba(0, 0, 0, 0.15) 2px 2px 2px;
-        -webkit-box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-        box-shadow: 2px 2px 2px rgba(0, 0, 0, 0.15);
-}
-
-.fieldtable td, .fieldtable th {
-        padding: 3px 7px 2px;
-}
-
-.fieldtable td.fieldtype, .fieldtable td.fieldname {
-        white-space: nowrap;
-        border-right: 1px solid #A8B8D9;
-        border-bottom: 1px solid #A8B8D9;
-        vertical-align: top;
-}
-
-.fieldtable td.fielddoc {
-        border-bottom: 1px solid #A8B8D9;
-        width: 100%;
-}
-
-.fieldtable tr:last-child td {
-        border-bottom: none;
-}
-
-.fieldtable th {
-        background-image:url('nav_f.png');
-        background-repeat:repeat-x;
-        background-color: #E2E8F2;
-        font-size: 90%;
-        color: #253555;
-        padding-bottom: 4px;
-        padding-top: 5px;
-        text-align:left;
-        -moz-border-radius-topleft: 4px;
-        -moz-border-radius-topright: 4px;
-        -webkit-border-top-left-radius: 4px;
-        -webkit-border-top-right-radius: 4px;
-        border-top-left-radius: 4px;
-        border-top-right-radius: 4px;
-        border-bottom: 1px solid #A8B8D9;
-}
-
-
-.tabsearch {
-	top: 0px;
-	left: 10px;
-	height: 36px;
-	background-image: url('tab_b.png');
-	z-index: 101;
-	overflow: hidden;
-	font-size: 13px;
-}
-
-.navpath ul
-{
-	font-size: 11px;
-	background-image:url('tab_b.png');
-	background-repeat:repeat-x;
-	height:30px;
-	line-height:30px;
-	color:#8AA0CC;
-	border:solid 1px #C2CDE4;
-	overflow:hidden;
-	margin:0px;
-	padding:0px;
-}
-
-.navpath li
-{
-	list-style-type:none;
-	float:left;
-	padding-left:10px;
-	padding-right:15px;
-	background-image:url('bc_s.png');
-	background-repeat:no-repeat;
-	background-position:right;
-	color:#364D7C;
-}
-
-.navpath li.navelem a
-{
-	height:32px;
-	display:block;
-	text-decoration: none;
-	outline: none;
-}
-
-.navpath li.navelem a:hover
-{
-	color:#6884BD;
-}
-
-.navpath li.footer
-{
-        list-style-type:none;
-        float:right;
-        padding-left:10px;
-        padding-right:15px;
-        background-image:none;
-        background-repeat:no-repeat;
-        background-position:right;
-        color:#364D7C;
-        font-size: 8pt;
-}
-
-
-div.summary
-{
-	float: right;
-	font-size: 8pt;
-	padding-right: 5px;
-	width: 50%;
-	text-align: right;
-}       
-
-div.summary a
-{
-	white-space: nowrap;
-}
-
-div.ingroups
-{
-	margin-left: 5px;
-	font-size: 8pt;
-	padding-left: 5px;
-	width: 50%;
-	text-align: left;
-}
-
-div.ingroups a
-{
-	white-space: nowrap;
-}
-
-div.header
-{
-        background-image:url('nav_h.png');
-        background-repeat:repeat-x;
-	background-color: #F9FAFC;
-	margin:  0px;
-	border-bottom: 1px solid #C4CFE5;
-}
-
-div.headertitle
-{
-	padding: 5px 5px 5px 7px;
-}
-
-dl
-{
-        padding: 0 0 0 10px;
-}
-
-dl.note, dl.warning, dl.attention, dl.pre, dl.post, dl.invariant, dl.deprecated, dl.todo, dl.test, dl.bug
-{
-        border-left:4px solid;
-        padding: 0 0 0 6px;
-}
-
-dl.note
-{
-        border-color: #D0C000;
-}
-
-dl.warning, dl.attention
-{
-        border-color: #FF0000;
-}
-
-dl.pre, dl.post, dl.invariant
-{
-        border-color: #00D000;
-}
-
-dl.deprecated
-{
-        border-color: #505050;
-}
-
-dl.todo
-{
-        border-color: #00C0E0;
-}
-
-dl.test
-{
-        border-color: #3030E0;
-}
-
-dl.bug
-{
-        border-color: #C08050;
-}
-
-#projectlogo
-{
-	text-align: center;
-	vertical-align: bottom;
-	border-collapse: separate;
-}
- 
-#projectlogo img
-{ 
-	border: 0px none;
-}
- 
-#projectname
-{
-	font: 300% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 2px 0px;
-}
-    
-#projectbrief
-{
-	font: 120% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#projectnumber
-{
-	font: 50% Tahoma, Arial,sans-serif;
-	margin: 0px;
-	padding: 0px;
-}
-
-#titlearea
-{
-	padding: 0px;
-	margin: 0px;
-	width: 100%;
-	border-bottom: 1px solid #5373B4;
-}
-
-.image
-{
-        text-align: center;
-}
-
-.dotgraph
-{
-        text-align: center;
-}
-
-.mscgraph
-{
-        text-align: center;
-}
-
-.caption
-{
-	font-weight: bold;
-}
-
-div.zoom
-{
-	border: 1px solid #90A5CE;
-}
-
-dl.citelist {
-        margin-bottom:50px;
-}
-
-dl.citelist dt {
-        color:#334975;
-        float:left;
-        font-weight:bold;
-        margin-right:10px;
-        padding:5px;
-}
-
-dl.citelist dd {
-        margin:2px 0;
-        padding:5px 0;
-}
-
-@media print
-{
-  #top { display: none; }
-  #side-nav { display: none; }
-  #nav-path { display: none; }
-  body { overflow:visible; }
-  h1, h2, h3, h4, h5, h6 { page-break-after: avoid; }
-  .summary { display: none; }
-  .memitem { page-break-inside: avoid; }
-  #doc-content
-  {
-    margin-left:0 !important;
-    height:auto !important;
-    width:auto !important;
-    overflow:inherit;
-    display:inline;
-  }
-  pre.fragment
-  {
-    overflow: visible;
-    text-wrap: unrestricted;
-    white-space: -moz-pre-wrap; /* Moz */
-    white-space: -pre-wrap; /* Opera 4-6 */
-    white-space: -o-pre-wrap; /* Opera 7 */
-    white-space: pre-wrap; /* CSS3  */
-    word-wrap: break-word; /* IE 5.5+ */
-  }
-}
-
diff --git a/etc/doxygen/layout/Footer.html b/etc/doxygen/layout/Footer.html
deleted file mode 100644
index 1219e7fbd50376eeb04eed7292bf406626995655..0000000000000000000000000000000000000000
--- a/etc/doxygen/layout/Footer.html
+++ /dev/null
@@ -1,9 +0,0 @@
-<!--BEGIN GENERATE_TREEVIEW-->
-    <li class="footer">$generatedby
-    <a href="http://www.doxygen.org/index.html">
-    <img class="footer" src="doxygen.png" alt="doxygen"/></a> $doxygenversion </li>
-   </ul>
- </div>
-<!--END GENERATE_TREEVIEW-->
-</body>
-</html>
diff --git a/etc/doxygen/layout/Header.html b/etc/doxygen/layout/Header.html
deleted file mode 100644
index d8bd2e3b0e5e79b96cba175278b73bf6952c9ef3..0000000000000000000000000000000000000000
--- a/etc/doxygen/layout/Header.html
+++ /dev/null
@@ -1,48 +0,0 @@
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml">
-<head>
-<meta http-equiv="Content-Type" content="text/xhtml;charset=UTF-8"/>
-<!--BEGIN PROJECT_NAME--><title>$projectname: $title</title><!--END PROJECT_NAME-->
-<!--BEGIN !PROJECT_NAME--><title>$title</title><!--END !PROJECT_NAME-->
-<link href="$relpath$tabs.css" rel="stylesheet" type="text/css"/>
-<link href="$relpath$Doxygen.css" rel="stylesheet" type="text/css" />
-<!--$treeview
-$search
-$mathjax-->
-</head>
-<body>
-<div id="top"><!-- do not remove this div! -->
-
-<!--BEGIN TITLEAREA-->
-<div id="titlearea">
-<table cellspacing="0" cellpadding="0">
- <tbody>
- <tr style="height: 56px;">
-  <!--BEGIN PROJECT_LOGO>
-  <td id="projectlogo"><img alt="Logo" src="$relpath$$projectlogo"/></td>
-  <!--END PROJECT_LOGO>
-  <!--BEGIN PROJECT_NAME-->
-  <td style="padding-left: 0.5em;">
-   <div id="projectname">$projectname
-   <!--BEGIN PROJECT_NUMBER-->&#160;<span id="projectnumber">$projectnumber</span><!--END PROJECT_NUMBER-->
-   </div>
-   <!--BEGIN PROJECT_BRIEF><div id="projectbrief">$projectbrief</div><END PROJECT_BRIEF-->
-  </td>
-  <!--END PROJECT_NAME-->
-  <!--BEGIN !PROJECT_NAME-->
-   <!--BEGIN PROJECT_BRIEF>
-    <td style="padding-left: 0.5em;">
-    <div id="projectbrief">$projectbrief</div>
-    </td>
-   <END PROJECT_BRIEF-->
-  <!--END !PROJECT_NAME-->
-  <!--BEGIN DISABLE_INDEX-->
-   <!--BEGIN SEARCHENGINE>
-   <td>$searchbox</td>
-   <END SEARCHENGINE-->
-  <!--END DISABLE_INDEX-->
- </tr>
- </tbody>
-</table>
-</div>
-<!--END TITLEAREA-->
diff --git a/etc/doxygen/pages/0.Overview.dox b/etc/doxygen/pages/0.Overview.dox
new file mode 100644
index 0000000000000000000000000000000000000000..263e9a36cbb5fbc034d7f17753fbfe64cbe2b5b6
--- /dev/null
+++ b/etc/doxygen/pages/0.Overview.dox
@@ -0,0 +1,18 @@
+/**
+\defgroup RobotAPI RobotAPI Overview
+
+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/1.Installation.dox b/etc/doxygen/pages/1.Installation.dox
new file mode 100644
index 0000000000000000000000000000000000000000..dbd71ecac7b475ffb3c206c1b3ecb1a96c4481f3
--- /dev/null
+++ b/etc/doxygen/pages/1.Installation.dox
@@ -0,0 +1,8 @@
+/**
+\addtogroup Installation 1. Installation
+
+\defgroup RobotAPI-Installation RobotAPI Installation
+\ingroup RobotAPI Installation
+
+RobotAPI depends on ArmarXCore and ArmarXGui which must be installed.
+*/
diff --git a/etc/doxygen/pages/2.Tutorials.dox b/etc/doxygen/pages/2.Tutorials.dox
new file mode 100644
index 0000000000000000000000000000000000000000..b169a345b2fb3181b06e90c675ea70e3ae58639b
--- /dev/null
+++ b/etc/doxygen/pages/2.Tutorials.dox
@@ -0,0 +1,8 @@
+/**
+\addtogroup Tutorials 2. Tutorials
+
+\defgroup RobotAPI-Tutorials RobotAPI Tutorials
+\ingroup RobotAPI Tutorials
+
+...
+*/
diff --git a/etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox b/etc/doxygen/pages/3.HowTos.RemoteRobot.dox
similarity index 92%
rename from etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox
rename to etc/doxygen/pages/3.HowTos.RemoteRobot.dox
index bab878d25656793fefe58f80188f2632f802cd13..e803f42eea59b4f6e27a77c2b1845657a6d23f6d 100644
--- a/etc/doxygen/pages/RobotAPI-API-4-remoterobot.dox
+++ b/etc/doxygen/pages/3.HowTos.RemoteRobot.dox
@@ -1,8 +1,8 @@
 /**
-\defgroup remoterobot Robot State and Remote Robot
-\ingroup api-robotapi
+\page RobotAPI-HowTos-RemoteRobot Robot State and Remote Robot
+\ingroup RobotAPI-HowTos
 
-\section remoterobot-start Starting a RobotStateComponent
+\section RobotAPI-HowTos-RemoteRobot-Start Starting a RobotStateComponent
 
 The RobotState component serves as a central component for storing all robot related data. For now this data covers the current joint angles of the robot.<br>
 The RobotStateComponent implements a KinematicUnitListener, hence it reacts on all joint updates that are reported by a KinematicUnit component. An exemplary startup script could look like this
@@ -17,7 +17,7 @@ $SCRIPT_PATH/startApplication.sh $CORE_BIN_PATH/RobotStateComponentRun --Ice.Con
 
 \endcode
 
-With the correspondign configuration in ./config/Armar3Config.cfg:
+With the corresponding configuration in ./config/Armar3Config.cfg:
 
 \code
 # setup for KinemticUnitSimulation
@@ -32,7 +32,7 @@ ArmarX.RobotStateComponent.ObjectName = RobotStateComponent
 \endcode
 
 
-\section remoterobot-access Accessing the RobotStateComponent
+\section RobotAPI-HowTos-RemoteRobot-Access Accessing the RobotStateComponent
 
 The RobotStateComponent provides several methods for accessing the current configuration of the robot and for getting a snapshot of the current state which is compatible with
 models of the Simox/VirtualRobot framework. With these models the whole functionality of Simox (http://simox.sf.net) can be used, e.g. IK solving, collision detection or motion and grasp planning.
diff --git a/etc/doxygen/pages/3.howto b/etc/doxygen/pages/3.HowTos.dox
similarity index 73%
rename from etc/doxygen/pages/3.howto
rename to etc/doxygen/pages/3.HowTos.dox
index 95622dcd89b67c212deb3ff84dd46782aced1d87..abb2dc4a0f95ad228aa0e763a8c3a1b641e53237 100644
--- a/etc/doxygen/pages/3.howto
+++ b/etc/doxygen/pages/3.HowTos.dox
@@ -1,9 +1,11 @@
 /**
-\page robotapi-howtos HowTos
+\addtogroup HowTos 3. HowTos
 
-\subpage robotapi-howtos-eigen-from-pose
+\defgroup RobotAPI-HowTos RobotAPI HowTos
+\ingroup RobotAPI HowTos
 
-\page robotapi-howtos-eigen-from-pose How to convert a Variant pose into an Eigen Matrix
+\page RobotAPI-HowTos-Eigen-From-Pose How to convert a Variant pose into an Eigen Matrix
+\ingroup RobotAPI-HowTos
 
 \code
 #include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
diff --git a/etc/doxygen/pages/4.FAQ.dox b/etc/doxygen/pages/4.FAQ.dox
new file mode 100644
index 0000000000000000000000000000000000000000..63bf5e41091b54a70afba3e6aeca2dbdc69aae1b
--- /dev/null
+++ b/etc/doxygen/pages/4.FAQ.dox
@@ -0,0 +1,8 @@
+/**
+\addtogroup FAQ 4. FAQ
+
+\defgroup RobotAPI-FAQ RobotAPI FAQ
+\ingroup RobotAPI FAQ
+
+...
+*/
diff --git a/etc/doxygen/pages/5.Components.dox b/etc/doxygen/pages/5.Components.dox
new file mode 100644
index 0000000000000000000000000000000000000000..d99251036c390793fd454fba30b767c26f801cf5
--- /dev/null
+++ b/etc/doxygen/pages/5.Components.dox
@@ -0,0 +1,8 @@
+/**
+\addtogroup Components 5. Components
+
+\defgroup RobotAPI-Components RobotAPI Components
+\ingroup RobotAPI Components
+
+...
+*/
diff --git a/etc/doxygen/pages/API-RobotAPI.dox b/etc/doxygen/pages/API-RobotAPI.dox
deleted file mode 100644
index d53a5dcaa2bfe2b98308903d75e65dfb9611d1f6..0000000000000000000000000000000000000000
--- a/etc/doxygen/pages/API-RobotAPI.dox
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
-
-  \defgroup api-robotapi RobotAPI
-
-*/
diff --git a/etc/doxygen/pages/motioncontrol.dox b/etc/doxygen/pages/MotionControl.dox
similarity index 98%
rename from etc/doxygen/pages/motioncontrol.dox
rename to etc/doxygen/pages/MotionControl.dox
index 981916a8e14dc0796a672386d2d48f0673d1af03..e5beee9a28c44f9f290fd726fc3da5d6256a69d6 100644
--- a/etc/doxygen/pages/motioncontrol.dox
+++ b/etc/doxygen/pages/MotionControl.dox
@@ -1,6 +1,6 @@
 /**
-    \defgroup MotionControl ArmarX MotionControl
-    \ingroup robotapi-states
+    \defgroup RobotAPI-MotionControl RobotAPI MotionControl
+    \ingroup RobotAPI
     
     \section Overview Overview of the implemented functionality in MotionControl
     All functionality is implemented with State to provide a convenient interface
diff --git a/etc/doxygen/pages/RobotAPI-API-1-overview.dox b/etc/doxygen/pages/RobotAPI-API-1-overview.dox
deleted file mode 100644
index 117fdce24debf5c68ea96dd9748b1f2650492d18..0000000000000000000000000000000000000000
--- a/etc/doxygen/pages/RobotAPI-API-1-overview.dox
+++ /dev/null
@@ -1,19 +0,0 @@
- /*!
- * \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-3-states.dox b/etc/doxygen/pages/RobotAPI-API-3-states.dox
deleted file mode 100644
index 472220c5aede76504cdbfcb73fba892a7bc5f2c9..0000000000000000000000000000000000000000
--- a/etc/doxygen/pages/RobotAPI-API-3-states.dox
+++ /dev/null
@@ -1,6 +0,0 @@
-/**
-
-  \defgroup robotapi-states States
-  \ingroup api-robotapi
-
-*/
diff --git a/etc/doxygen/pages/RobotAPI-API-2-units.dox b/etc/doxygen/pages/SensorActorUnits.dox
similarity index 77%
rename from etc/doxygen/pages/RobotAPI-API-2-units.dox
rename to etc/doxygen/pages/SensorActorUnits.dox
index d410231304b51af867fd039c7c1f45d19f01e88e..df7431ce017d6bdd24a1882877947e4cbadcbb91 100644
--- a/etc/doxygen/pages/RobotAPI-API-2-units.dox
+++ b/etc/doxygen/pages/SensorActorUnits.dox
@@ -1,6 +1,6 @@
 /**
-  \defgroup SensorActorUnits Sensor-Actor Units
-  \ingroup api-robotapi
+  \defgroup RobotAPI-SensorActorUnits RobotAPI Sensor-Actor Units
+  \ingroup RobotAPI
 
   Sensor-Actor units
 
diff --git a/etc/doxygen/pages/mainpage.dox b/etc/doxygen/pages/mainpage.dox
index 9559ec2b9c25fa60e68225c9edf5fa6cdadeb010..ec316950eb1d7ce953f3fd4b439ef16cb1b252e0 100644
--- a/etc/doxygen/pages/mainpage.dox
+++ b/etc/doxygen/pages/mainpage.dox
@@ -1,6 +1,4 @@
-/*! \mainpage
- 
-- \subpage robotapi-overview
-- \subpage remoterobot
-
- */
+/**
+\mainpage
+\ref RobotAPI "RobotAPI Overview"
+*/
diff --git a/etc/doxygen/pages/slicedocumentation.dox b/etc/doxygen/pages/slicedocumentation.dox
deleted file mode 100644
index 25eaf8d746f002fb93764956066a49206dde79b5..0000000000000000000000000000000000000000
--- a/etc/doxygen/pages/slicedocumentation.dox
+++ /dev/null
@@ -1,5 +0,0 @@
-/**
- \page robotapi-slicedocumentation Slice Documentation
- \ingroup api-robotapi
- <a href="slice/index.html"> Slice Documentation </a>
-*/
diff --git a/etc/doxygen/snippets/.gitkeep b/etc/doxygen/snippets/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/scenarios/CMakeLists.txt b/scenarios/CMakeLists.txt
index 3b942c24894a6fabe2d760ff167cf0bf34138b8c..6b4016fb238767681d7f3a951c6fafcd39c2feab 100644
--- a/scenarios/CMakeLists.txt
+++ b/scenarios/CMakeLists.txt
@@ -1,4 +1,4 @@
 
-add_subdirectory(WeissHapticSensorsUnitTest)
-add_subdirectory(MotionControlTest)
-add_subdirectory(statecharttestscenario)
+add_subdirectory(tests)
+
+
diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/build/.gitkeep b/scenarios/RemoteRobotTest/RemoteRobotTestProject/build/.gitkeep
deleted file mode 100644
index e69de29bb2d1d6434b8b29ae775ad8c2e48c5391..0000000000000000000000000000000000000000
diff --git a/scenarios/MotionControlTest/CMakeLists.txt b/scenarios/deprecated/MotionControlTest/CMakeLists.txt
similarity index 100%
rename from scenarios/MotionControlTest/CMakeLists.txt
rename to scenarios/deprecated/MotionControlTest/CMakeLists.txt
diff --git a/scenarios/MotionControlTest/MotionControlTestGui.ini b/scenarios/deprecated/MotionControlTest/MotionControlTestGui.ini
similarity index 100%
rename from scenarios/MotionControlTest/MotionControlTestGui.ini
rename to scenarios/deprecated/MotionControlTest/MotionControlTestGui.ini
diff --git a/scenarios/MotionControlTest/MotionControlTestGuiDavid.ini b/scenarios/deprecated/MotionControlTest/MotionControlTestGuiDavid.ini
similarity index 100%
rename from scenarios/MotionControlTest/MotionControlTestGuiDavid.ini
rename to scenarios/deprecated/MotionControlTest/MotionControlTestGuiDavid.ini
diff --git a/scenarios/MotionControlTest/config/ArmarXGui.cfg b/scenarios/deprecated/MotionControlTest/config/ArmarXGui.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/ArmarXGui.cfg
rename to scenarios/deprecated/MotionControlTest/config/ArmarXGui.cfg
diff --git a/scenarios/MotionControlTest/config/ArmarXLogger.cfg b/scenarios/deprecated/MotionControlTest/config/ArmarXLogger.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/ArmarXLogger.cfg
rename to scenarios/deprecated/MotionControlTest/config/ArmarXLogger.cfg
diff --git a/scenarios/MotionControlTest/config/ConditionHandler.cfg b/scenarios/deprecated/MotionControlTest/config/ConditionHandler.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/ConditionHandler.cfg
rename to scenarios/deprecated/MotionControlTest/config/ConditionHandler.cfg
diff --git a/scenarios/MotionControlTest/config/DummyObjectRecognitionConfig.txt b/scenarios/deprecated/MotionControlTest/config/DummyObjectRecognitionConfig.txt
similarity index 100%
rename from scenarios/MotionControlTest/config/DummyObjectRecognitionConfig.txt
rename to scenarios/deprecated/MotionControlTest/config/DummyObjectRecognitionConfig.txt
diff --git a/scenarios/MotionControlTest/config/Global.cfg b/scenarios/deprecated/MotionControlTest/config/Global.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/Global.cfg
rename to scenarios/deprecated/MotionControlTest/config/Global.cfg
diff --git a/scenarios/MotionControlTest/config/GuiConfig.ini b/scenarios/deprecated/MotionControlTest/config/GuiConfig.ini
similarity index 100%
rename from scenarios/MotionControlTest/config/GuiConfig.ini
rename to scenarios/deprecated/MotionControlTest/config/GuiConfig.ini
diff --git a/scenarios/MotionControlTest/config/HeadUnit.cfg b/scenarios/deprecated/MotionControlTest/config/HeadUnit.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/HeadUnit.cfg
rename to scenarios/deprecated/MotionControlTest/config/HeadUnit.cfg
diff --git a/scenarios/MotionControlTest/config/HeadUnitObserver.cfg b/scenarios/deprecated/MotionControlTest/config/HeadUnitObserver.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/HeadUnitObserver.cfg
rename to scenarios/deprecated/MotionControlTest/config/HeadUnitObserver.cfg
diff --git a/scenarios/MotionControlTest/config/KinematicUnitObserver.cfg b/scenarios/deprecated/MotionControlTest/config/KinematicUnitObserver.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/KinematicUnitObserver.cfg
rename to scenarios/deprecated/MotionControlTest/config/KinematicUnitObserver.cfg
diff --git a/scenarios/MotionControlTest/config/KinematicUnitSimulation.cfg b/scenarios/deprecated/MotionControlTest/config/KinematicUnitSimulation.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/KinematicUnitSimulation.cfg
rename to scenarios/deprecated/MotionControlTest/config/KinematicUnitSimulation.cfg
diff --git a/scenarios/MotionControlTest/config/MotionControlTest.cfg b/scenarios/deprecated/MotionControlTest/config/MotionControlTest.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/MotionControlTest.cfg
rename to scenarios/deprecated/MotionControlTest/config/MotionControlTest.cfg
diff --git a/scenarios/MotionControlTest/config/ObjectDB.txt b/scenarios/deprecated/MotionControlTest/config/ObjectDB.txt
similarity index 100%
rename from scenarios/MotionControlTest/config/ObjectDB.txt
rename to scenarios/deprecated/MotionControlTest/config/ObjectDB.txt
diff --git a/scenarios/MotionControlTest/config/ObjectMemory.cfg b/scenarios/deprecated/MotionControlTest/config/ObjectMemory.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/ObjectMemory.cfg
rename to scenarios/deprecated/MotionControlTest/config/ObjectMemory.cfg
diff --git a/scenarios/MotionControlTest/config/ObjectMemoryObserver.cfg b/scenarios/deprecated/MotionControlTest/config/ObjectMemoryObserver.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/ObjectMemoryObserver.cfg
rename to scenarios/deprecated/MotionControlTest/config/ObjectMemoryObserver.cfg
diff --git a/scenarios/MotionControlTest/config/RobotControl.cfg b/scenarios/deprecated/MotionControlTest/config/RobotControl.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/RobotControl.cfg
rename to scenarios/deprecated/MotionControlTest/config/RobotControl.cfg
diff --git a/scenarios/MotionControlTest/config/RobotHandLocalization.cfg b/scenarios/deprecated/MotionControlTest/config/RobotHandLocalization.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/RobotHandLocalization.cfg
rename to scenarios/deprecated/MotionControlTest/config/RobotHandLocalization.cfg
diff --git a/scenarios/MotionControlTest/config/RobotStateComponent.cfg b/scenarios/deprecated/MotionControlTest/config/RobotStateComponent.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/RobotStateComponent.cfg
rename to scenarios/deprecated/MotionControlTest/config/RobotStateComponent.cfg
diff --git a/scenarios/MotionControlTest/config/SystemObserver.cfg b/scenarios/deprecated/MotionControlTest/config/SystemObserver.cfg
similarity index 100%
rename from scenarios/MotionControlTest/config/SystemObserver.cfg
rename to scenarios/deprecated/MotionControlTest/config/SystemObserver.cfg
diff --git a/scenarios/MotionControlTest/motioncontrol.armarxgui b/scenarios/deprecated/MotionControlTest/motioncontrol.armarxgui
similarity index 100%
rename from scenarios/MotionControlTest/motioncontrol.armarxgui
rename to scenarios/deprecated/MotionControlTest/motioncontrol.armarxgui
diff --git a/scenarios/MotionControlTest/startGui.sh b/scenarios/deprecated/MotionControlTest/startGui.sh
similarity index 100%
rename from scenarios/MotionControlTest/startGui.sh
rename to scenarios/deprecated/MotionControlTest/startGui.sh
diff --git a/scenarios/MotionControlTest/startLogger.sh b/scenarios/deprecated/MotionControlTest/startLogger.sh
similarity index 100%
rename from scenarios/MotionControlTest/startLogger.sh
rename to scenarios/deprecated/MotionControlTest/startLogger.sh
diff --git a/scenarios/MotionControlTest/stopGui.sh b/scenarios/deprecated/MotionControlTest/stopGui.sh
similarity index 100%
rename from scenarios/MotionControlTest/stopGui.sh
rename to scenarios/deprecated/MotionControlTest/stopGui.sh
diff --git a/scenarios/TCPMoverScenario/configs/ArmarXGui.cfg b/scenarios/deprecated/TCPMoverScenario/configs/ArmarXGui.cfg
similarity index 100%
rename from scenarios/TCPMoverScenario/configs/ArmarXGui.cfg
rename to scenarios/deprecated/TCPMoverScenario/configs/ArmarXGui.cfg
diff --git a/scenarios/TCPMoverScenario/configs/ConditionHandler.cfg b/scenarios/deprecated/TCPMoverScenario/configs/ConditionHandler.cfg
similarity index 100%
rename from scenarios/TCPMoverScenario/configs/ConditionHandler.cfg
rename to scenarios/deprecated/TCPMoverScenario/configs/ConditionHandler.cfg
diff --git a/scenarios/TCPMoverScenario/configs/Gui.armarxgui b/scenarios/deprecated/TCPMoverScenario/configs/Gui.armarxgui
similarity index 100%
rename from scenarios/TCPMoverScenario/configs/Gui.armarxgui
rename to scenarios/deprecated/TCPMoverScenario/configs/Gui.armarxgui
diff --git a/scenarios/TCPMoverScenario/configs/HeadUnit.cfg b/scenarios/deprecated/TCPMoverScenario/configs/HeadUnit.cfg
similarity index 100%
rename from scenarios/TCPMoverScenario/configs/HeadUnit.cfg
rename to scenarios/deprecated/TCPMoverScenario/configs/HeadUnit.cfg
diff --git a/scenarios/TCPMoverScenario/configs/RobotUnit.cfg b/scenarios/deprecated/TCPMoverScenario/configs/RobotUnit.cfg
similarity index 100%
rename from scenarios/TCPMoverScenario/configs/RobotUnit.cfg
rename to scenarios/deprecated/TCPMoverScenario/configs/RobotUnit.cfg
diff --git a/scenarios/TCPMoverScenario/configs/RobotUnitObserver.cfg b/scenarios/deprecated/TCPMoverScenario/configs/RobotUnitObserver.cfg
similarity index 100%
rename from scenarios/TCPMoverScenario/configs/RobotUnitObserver.cfg
rename to scenarios/deprecated/TCPMoverScenario/configs/RobotUnitObserver.cfg
diff --git a/scenarios/tests/CMakeLists.txt b/scenarios/tests/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..8aec5dbf1ec6f311c170e0720c834d0f0a145101
--- /dev/null
+++ b/scenarios/tests/CMakeLists.txt
@@ -0,0 +1,6 @@
+
+add_subdirectory(statecharttestscenario)
+add_subdirectory(WeissHapticSensorsUnitTest)
+
+
+
diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/CMakeLists.txt b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/CMakeLists.txt
similarity index 100%
rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/CMakeLists.txt
rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/CMakeLists.txt
diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.cpp b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.cpp
similarity index 100%
rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.cpp
rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.cpp
diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h
similarity index 100%
rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h
rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProject.h
diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProjectApp.h b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProjectApp.h
similarity index 100%
rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProjectApp.h
rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/RemoteRobotTestProjectApp.h
diff --git a/etc/doxygen/images/.gitkeep b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/build/.gitkeep
similarity index 100%
rename from etc/doxygen/images/.gitkeep
rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/build/.gitkeep
diff --git a/scenarios/RemoteRobotTest/RemoteRobotTestProject/test/RemoteRobotTestProjectTest.cpp b/scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/test/RemoteRobotTestProjectTest.cpp
similarity index 100%
rename from scenarios/RemoteRobotTest/RemoteRobotTestProject/test/RemoteRobotTestProjectTest.cpp
rename to scenarios/tests/RemoteRobotTest/RemoteRobotTestProject/test/RemoteRobotTestProjectTest.cpp
diff --git a/scenarios/RemoteRobotTest/configs/ArmarXGui.cfg b/scenarios/tests/RemoteRobotTest/configs/ArmarXGui.cfg
similarity index 100%
rename from scenarios/RemoteRobotTest/configs/ArmarXGui.cfg
rename to scenarios/tests/RemoteRobotTest/configs/ArmarXGui.cfg
diff --git a/scenarios/RemoteRobotTest/configs/ConditionHandler.cfg b/scenarios/tests/RemoteRobotTest/configs/ConditionHandler.cfg
similarity index 100%
rename from scenarios/RemoteRobotTest/configs/ConditionHandler.cfg
rename to scenarios/tests/RemoteRobotTest/configs/ConditionHandler.cfg
diff --git a/scenarios/RemoteRobotTest/configs/DummyObjectRecognitionConfig.txt b/scenarios/tests/RemoteRobotTest/configs/DummyObjectRecognitionConfig.txt
similarity index 100%
rename from scenarios/RemoteRobotTest/configs/DummyObjectRecognitionConfig.txt
rename to scenarios/tests/RemoteRobotTest/configs/DummyObjectRecognitionConfig.txt
diff --git a/scenarios/RemoteRobotTest/configs/HeadUnit.cfg b/scenarios/tests/RemoteRobotTest/configs/HeadUnit.cfg
similarity index 100%
rename from scenarios/RemoteRobotTest/configs/HeadUnit.cfg
rename to scenarios/tests/RemoteRobotTest/configs/HeadUnit.cfg
diff --git a/scenarios/RemoteRobotTest/configs/HeadUnitObserver.cfg b/scenarios/tests/RemoteRobotTest/configs/HeadUnitObserver.cfg
similarity index 100%
rename from scenarios/RemoteRobotTest/configs/HeadUnitObserver.cfg
rename to scenarios/tests/RemoteRobotTest/configs/HeadUnitObserver.cfg
diff --git a/scenarios/RemoteRobotTest/configs/ObjectMemoryConfig.txt b/scenarios/tests/RemoteRobotTest/configs/ObjectMemoryConfig.txt
similarity index 100%
rename from scenarios/RemoteRobotTest/configs/ObjectMemoryConfig.txt
rename to scenarios/tests/RemoteRobotTest/configs/ObjectMemoryConfig.txt
diff --git a/scenarios/RemoteRobotTest/configs/ObjectMemoryObserverConfig.txt b/scenarios/tests/RemoteRobotTest/configs/ObjectMemoryObserverConfig.txt
similarity index 100%
rename from scenarios/RemoteRobotTest/configs/ObjectMemoryObserverConfig.txt
rename to scenarios/tests/RemoteRobotTest/configs/ObjectMemoryObserverConfig.txt
diff --git a/scenarios/RemoteRobotTest/configs/RobotStateComponent.cfg b/scenarios/tests/RemoteRobotTest/configs/RobotStateComponent.cfg
similarity index 100%
rename from scenarios/RemoteRobotTest/configs/RobotStateComponent.cfg
rename to scenarios/tests/RemoteRobotTest/configs/RobotStateComponent.cfg
diff --git a/scenarios/WeissHapticSensorsUnitTest/CMakeLists.txt b/scenarios/tests/WeissHapticSensorsUnitTest/CMakeLists.txt
similarity index 100%
rename from scenarios/WeissHapticSensorsUnitTest/CMakeLists.txt
rename to scenarios/tests/WeissHapticSensorsUnitTest/CMakeLists.txt
diff --git a/scenarios/WeissHapticSensorsUnitTest/config/HapticObserverApp.cfg b/scenarios/tests/WeissHapticSensorsUnitTest/config/HapticObserverApp.cfg
similarity index 100%
rename from scenarios/WeissHapticSensorsUnitTest/config/HapticObserverApp.cfg
rename to scenarios/tests/WeissHapticSensorsUnitTest/config/HapticObserverApp.cfg
diff --git a/scenarios/WeissHapticSensorsUnitTest/config/WeissHapticSensorApp.cfg b/scenarios/tests/WeissHapticSensorsUnitTest/config/WeissHapticSensorApp.cfg
similarity index 100%
rename from scenarios/WeissHapticSensorsUnitTest/config/WeissHapticSensorApp.cfg
rename to scenarios/tests/WeissHapticSensorsUnitTest/config/WeissHapticSensorApp.cfg
diff --git a/scenarios/WeissHapticSensorsUnitTest/config/WeissHapticSensorsUnitApp.cfg b/scenarios/tests/WeissHapticSensorsUnitTest/config/WeissHapticSensorsUnitApp.cfg
similarity index 100%
rename from scenarios/WeissHapticSensorsUnitTest/config/WeissHapticSensorsUnitApp.cfg
rename to scenarios/tests/WeissHapticSensorsUnitTest/config/WeissHapticSensorsUnitApp.cfg
diff --git a/scenarios/WeissHapticSensorsUnitTest/jquery.min.js b/scenarios/tests/WeissHapticSensorsUnitTest/jquery.min.js
similarity index 100%
rename from scenarios/WeissHapticSensorsUnitTest/jquery.min.js
rename to scenarios/tests/WeissHapticSensorsUnitTest/jquery.min.js
diff --git a/scenarios/WeissHapticSensorsUnitTest/jquery.sparkline.js b/scenarios/tests/WeissHapticSensorsUnitTest/jquery.sparkline.js
similarity index 100%
rename from scenarios/WeissHapticSensorsUnitTest/jquery.sparkline.js
rename to scenarios/tests/WeissHapticSensorsUnitTest/jquery.sparkline.js
diff --git a/scenarios/WeissHapticSensorsUnitTest/startGui.sh b/scenarios/tests/WeissHapticSensorsUnitTest/startGui.sh
similarity index 100%
rename from scenarios/WeissHapticSensorsUnitTest/startGui.sh
rename to scenarios/tests/WeissHapticSensorsUnitTest/startGui.sh
diff --git a/scenarios/WeissHapticSensorsUnitTest/tactile.html b/scenarios/tests/WeissHapticSensorsUnitTest/tactile.html
similarity index 100%
rename from scenarios/WeissHapticSensorsUnitTest/tactile.html
rename to scenarios/tests/WeissHapticSensorsUnitTest/tactile.html
diff --git a/scenarios/statecharttestscenario/CMakeLists.txt b/scenarios/tests/statecharttestscenario/CMakeLists.txt
similarity index 100%
rename from scenarios/statecharttestscenario/CMakeLists.txt
rename to scenarios/tests/statecharttestscenario/CMakeLists.txt
diff --git a/scenarios/statecharttestscenario/config/ConditionHandler.cfg b/scenarios/tests/statecharttestscenario/config/ConditionHandler.cfg
similarity index 100%
rename from scenarios/statecharttestscenario/config/ConditionHandler.cfg
rename to scenarios/tests/statecharttestscenario/config/ConditionHandler.cfg
diff --git a/scenarios/statecharttestscenario/config/RobotControl.cfg b/scenarios/tests/statecharttestscenario/config/RobotControl.cfg
similarity index 100%
rename from scenarios/statecharttestscenario/config/RobotControl.cfg
rename to scenarios/tests/statecharttestscenario/config/RobotControl.cfg
diff --git a/scenarios/statecharttestscenario/config/SystemObserver.cfg b/scenarios/tests/statecharttestscenario/config/SystemObserver.cfg
similarity index 100%
rename from scenarios/statecharttestscenario/config/SystemObserver.cfg
rename to scenarios/tests/statecharttestscenario/config/SystemObserver.cfg
diff --git a/source/RobotAPI/applications/CMakeLists.txt b/source/RobotAPI/applications/CMakeLists.txt
index ae2814a3e2a54a15950fb74373d170de49230489..7f12f2afebcbebfa09fb433328bc5b6d1260c7d0 100644
--- a/source/RobotAPI/applications/CMakeLists.txt
+++ b/source/RobotAPI/applications/CMakeLists.txt
@@ -21,3 +21,5 @@ add_subdirectory(HandUnitObserver)
 add_subdirectory(HandUnitSimulation)
 add_subdirectory(ForceTorqueUnitSimulation)
 
+
+add_subdirectory(MMMPlayer)
diff --git a/source/RobotAPI/applications/MMMPlayer/CMakeLists.txt b/source/RobotAPI/applications/MMMPlayer/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..1aa2b39a4c3f68a824af971907286c0716c0eef0
--- /dev/null
+++ b/source/RobotAPI/applications/MMMPlayer/CMakeLists.txt
@@ -0,0 +1,23 @@
+armarx_component_set_name("MMMPlayerApp")
+
+find_package(MMMCore QUIET)
+armarx_build_if(MMMCore_FOUND "MMMCORE not available")
+if(MMMCore_FOUND)
+    include_directories(${MMMCORE_INCLUDE_DIRS})
+endif()
+
+find_package(Eigen3 QUIET)
+
+
+armarx_build_if(Eigen3_FOUND "Eigen3 not available")
+
+
+if (Eigen3_FOUND)
+    include_directories(${Eigen3_INCLUDE_DIR})
+endif()
+
+set(COMPONENT_LIBS MMMPlayer ArmarXInterfaces ArmarXCore ${MMMCORE_LIBRARIES})
+
+set(EXE_SOURCE MMMPlayerApp.h main.cpp)
+
+armarx_add_component_executable("${EXE_SOURCE}")
diff --git a/source/RobotAPI/applications/MMMPlayer/MMMPlayerApp.h b/source/RobotAPI/applications/MMMPlayer/MMMPlayerApp.h
new file mode 100644
index 0000000000000000000000000000000000000000..809e37f4b7e6a2082fc2c7ed2225ba580fe8053b
--- /dev/null
+++ b/source/RobotAPI/applications/MMMPlayer/MMMPlayerApp.h
@@ -0,0 +1,56 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package    RobotAPI::application::MMMPlayer
+ * @author     Mirko Waechter ( mirko dot waechter at kit dot edu )
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#ifndef _ARMARX_APPLICATION_RobotAPI_MMMPlayer_H
+#define _ARMARX_APPLICATION_RobotAPI_MMMPlayer_H
+
+
+#include <RobotAPI/components/MMMPlayer/MMMPlayer.h>
+
+#include <Core/core/application/Application.h>
+#include <Core/core/Component.h>
+
+
+namespace armarx
+{
+    /**
+     * @class MMMPlayerApp
+     * @brief A brief description
+     *
+     * Detailed Description
+     */
+    class MMMPlayerApp :
+        virtual public armarx::Application
+    {
+        /**
+         * @see armarx::Application::setup()
+         */
+        void setup(const ManagedIceObjectRegistryInterfacePtr& registry,
+                   Ice::PropertiesPtr properties)
+        {
+            registry->addObject( Component::create<MMMPlayer>(properties) );
+        }
+    };
+}
+
+#endif
diff --git a/source/RobotAPI/applications/MMMPlayer/main.cpp b/source/RobotAPI/applications/MMMPlayer/main.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..32f1a335c2cb18dc3d88afb9730c784cbb7fe4f2
--- /dev/null
+++ b/source/RobotAPI/applications/MMMPlayer/main.cpp
@@ -0,0 +1,33 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package    RobotAPI::application::MMMPlayer
+ * @author     Mirko Waechter ( mirko dot waechter at kit dot edu )
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#include "MMMPlayerApp.h"
+#include <Core/core/logging/Logging.h>
+
+int main(int argc, char* argv[])
+{
+    armarx::ApplicationPtr app = armarx::Application::createInstance < armarx::MMMPlayerApp > ();
+    app->setName("MMMPlayer");
+
+    return app->main(argc, argv);
+}
diff --git a/source/RobotAPI/components/CMakeLists.txt b/source/RobotAPI/components/CMakeLists.txt
index fc7fbec75fddbc0fe6d7fff4f94613fe28b035d9..409b27488c2e48a25cd570c670175b5f22b33e91 100644
--- a/source/RobotAPI/components/CMakeLists.txt
+++ b/source/RobotAPI/components/CMakeLists.txt
@@ -1,3 +1,5 @@
 
 add_subdirectory(units)
-add_subdirectory(WeissHapticSensorListener)
\ No newline at end of file
+add_subdirectory(WeissHapticSensorListener)
+add_subdirectory(DebugDrawer)
+add_subdirectory(MMMPlayer)
diff --git a/source/RobotAPI/components/DebugDrawer/CMakeLists.txt b/source/RobotAPI/components/DebugDrawer/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..a7c6e10dc4b49d0c47b10e3cfa4e54a9d329fcb5
--- /dev/null
+++ b/source/RobotAPI/components/DebugDrawer/CMakeLists.txt
@@ -0,0 +1,28 @@
+armarx_component_set_name("DebugDrawer")
+
+find_package(Eigen3 QUIET)
+find_package(Simox QUIET)
+
+armarx_build_if(Eigen3_FOUND "Eigen3 not available")
+armarx_build_if(Simox_FOUND "Simox-VirtualRobot not available")
+
+if (Eigen3_FOUND AND Simox_FOUND)
+
+    include_directories(
+        ${Eigen3_INCLUDE_DIR}
+        ${Simox_INCLUDE_DIRS}
+        ${Simox_EXTERNAL_INCLUDE_DIRS})
+    message ("Simox_EXTERNAL_INCLUDE_DIRS:${Simox_EXTERNAL_INCLUDE_DIRS}")
+    message ("Simox_EXTERNAL_LIBRARY_FLAGS:${Simox_EXTERNAL_LIBRARY_FLAGS}")
+
+    add_definitions(${Simox_EXTERNAL_LIBRARY_FLAGS})
+
+endif()
+
+set(COMPONENT_LIBS ArmarXCore RobotAPIInterfaces RobotAPIRemoteRobot ${Simox_LIBRARIES})
+
+set(SOURCES DebugDrawerComponent.cpp)
+set(HEADERS DebugDrawerComponent.h)
+
+armarx_add_component("${SOURCES}" "${HEADERS}")
+
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..93126363d9bd55d0f6f4b6fbec3da171fb19d83c
--- /dev/null
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.cpp
@@ -0,0 +1,382 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package    RobotAPI::ArmarXObjects::DebugDrawerComponent
+ * @author     Nikolaus Vahrenkamp ( vahrenkamp at kit dot edu )
+ * @author     Peter Kaiser ( peter dot kaiser at kit dot edu )
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#include "DebugDrawerComponent.h"
+
+#include <VirtualRobot/Visualization/CoinVisualization/CoinVisualizationFactory.h>
+#include <Inventor/nodes/SoUnits.h>
+#include <Inventor/nodes/SoCube.h>
+#include <Inventor/nodes/SoMaterial.h>
+#include <Inventor/nodes/SoAnnotation.h>
+#include <Inventor/nodes/SoTransform.h>
+#include <Inventor/nodes/SoFont.h>
+#include <Inventor/nodes/SoText2.h>
+
+using namespace VirtualRobot;
+
+namespace armarx{
+
+
+DebugDrawerComponent::DebugDrawerComponent()
+{
+    if (!mutex)
+        mutex.reset(new boost::recursive_mutex());
+
+    coinVisu = new SoSeparator;
+    coinVisu->ref();
+
+    SoUnits *u = new SoUnits();
+    u->units = SoUnits::MILLIMETERS;
+    coinVisu->addChild(u);
+
+    debugVisu = new SoSeparator;
+    debugVisu->ref();
+}
+
+void DebugDrawerComponent::onInitComponent()
+{
+    usingTopic(getProperty<std::string>("DebugDrawerTopic").getValue());
+
+    enable = getProperty<bool>("ShowDebugDrawing").getValue();
+    if (enable)
+        coinVisu->addChild(debugVisu);
+}
+
+void DebugDrawerComponent::onConnectComponent()
+{
+}
+
+void DebugDrawerComponent::onExitComponent()
+{
+    ARMARX_DEBUG << "onExitComponent";
+    clearDebugLayer();
+    coinVisu->unref();
+    debugVisu->unref();
+}
+
+void DebugDrawerComponent::enableVisu(bool e)
+{
+    ScopedRecursiveLockPtr lock = getScopedLock();
+    if (e)
+    {
+        if (coinVisu->findChild(debugVisu)<0)
+            coinVisu->addChild(debugVisu);
+    } else
+    {
+        if (coinVisu->findChild(debugVisu)>=0)
+            coinVisu->removeChild(debugVisu);
+    }
+}
+
+
+
+void DebugDrawerComponent::drawCoordSystem(const std::string &name, Eigen::Matrix4f &globalPose, float scale)
+{
+    ScopedRecursiveLockPtr l = getScopedLock();
+    ARMARX_DEBUG << "drawing coord system";
+
+    if (scale<=0)
+    {
+         if (addedCoordVisualizations.find(name) == addedCoordVisualizations.end())
+         {
+             return;
+         }
+         debugVisu->removeChild(addedCoordVisualizations[name]);
+         addedCoordVisualizations.erase(name);
+         return;
+    }
+
+    if (addedCoordVisualizations.find(name) == addedCoordVisualizations.end())
+    {
+        SoSeparator *newS = new SoSeparator;
+        SoMatrixTransform* newM = new SoMatrixTransform;
+        newS->addChild(newM);
+        std::string n = name;
+        newS->addChild(CoinVisualizationFactory::CreateCoordSystemVisualization(scale,&n));
+        addedCoordVisualizations[name] = newS;
+        debugVisu->addChild(newS);
+    }
+    SoSeparator *s = addedCoordVisualizations[name];
+    SoMatrixTransform* m = (SoMatrixTransform*)(s->getChild(0));
+    SbMatrix mNew = CoinVisualizationFactory::getMatrixTransform(globalPose)->matrix.getValue();
+    m->matrix.setValue(mNew);
+
+    ARMARX_DEBUG << "end";
+}
+
+
+
+void DebugDrawerComponent::drawLine(const std::string &name, Eigen::Vector3f &p1, Eigen::Vector3f &p2, float scale, VirtualRobot::VisualizationFactory::Color &color)
+{
+    ScopedRecursiveLockPtr l = getScopedLock();
+    ARMARX_DEBUG << "drawLine" << flush;
+
+    removeLine(name);
+
+    SoSeparator *newS = new SoSeparator;
+    Eigen::Matrix4f lp1 = Eigen::Matrix4f::Identity();
+    lp1(0,3) = p1.x(); lp1(1,3) = p1.y(); lp1(2,3) = p1.z();
+    Eigen::Matrix4f lp2 = Eigen::Matrix4f::Identity();
+    lp2(0,3) = p2.x(); lp2(1,3) = p2.y(); lp2(2,3) = p2.z();
+    newS->addChild(CoinVisualizationFactory::createCoinLine(lp1, lp2, scale, color.r, color.g, color.b));
+    addedLineVisualizations[name] = newS;
+    debugVisu->addChild(newS);
+}
+
+void DebugDrawerComponent::drawBox(const std::string &name, Eigen::Matrix4f &globalPose, float width, float height, float depth, VisualizationFactory::Color &color)
+{
+    ScopedRecursiveLockPtr l = getScopedLock();
+    ARMARX_DEBUG << "drawBox";
+
+    removeBox(name);
+
+    SoSeparator *newS = new SoSeparator;
+    newS->addChild(CoinVisualizationFactory::getMatrixTransform(globalPose));
+
+    SoMaterial *material = new SoMaterial;
+    material->ambientColor.setValue(color.r, color.g, color.b);
+    material->diffuseColor.setValue(color.r, color.g, color.b);
+    material->transparency.setValue(color.transparency);
+    newS->addChild(material);
+
+    SoCube *cube = new SoCube;
+    cube->width = width;
+    cube->height = height;
+    cube->depth = depth;
+    newS->addChild(cube);
+
+    addedBoxVisualizations[name] = newS;
+    debugVisu->addChild(newS);
+}
+
+void DebugDrawerComponent::drawText(const std::string &name, const std::string &text, const Eigen::Vector3f &position, const VisualizationFactory::Color &color, int size)
+{
+    ScopedRecursiveLockPtr l = getScopedLock();
+    ARMARX_DEBUG << "drawText";
+
+    removeText(name);
+
+    SoSeparator *sep = new SoSeparator;
+
+    SoAnnotation *ann = new SoAnnotation;
+    sep->addChild(ann);
+
+    SoMaterial *mat = new SoMaterial;
+    mat->ambientColor.setValue(color.r, color.g, color.b);
+    mat->diffuseColor.setValue(color.r, color.g, color.b);
+    mat->transparency.setValue(color.transparency);
+    ann->addChild(mat);
+
+    SoTransform *tr = new SoTransform;
+    tr->translation.setValue(position.x(), position.y(), position.z());
+    ann->addChild(tr);
+
+    SoFont *font = new SoFont;
+    font->name.setValue("TGS_Triplex_Roman");
+    font->size = size;
+    ann->addChild(font);
+
+    SoText2 *te = new SoText2;
+    te->string = text.c_str();
+    te->justification = SoText2::CENTER;
+    ann->addChild(te);
+
+    addedTextVisualizations[name] = sep;
+    debugVisu->addChild(sep);
+}
+
+
+
+void DebugDrawerComponent::removeLine(const std::string &name)
+{
+    ScopedRecursiveLockPtr l = getScopedLock();
+    if (addedLineVisualizations.find(name) == addedLineVisualizations.end())
+    {
+        return;
+    }
+    debugVisu->removeChild(addedLineVisualizations[name]);
+    addedLineVisualizations.erase(name);
+}
+
+void DebugDrawerComponent::removeBox(const std::string &name)
+{
+    ScopedRecursiveLockPtr l = getScopedLock();
+    if(addedBoxVisualizations.find(name) == addedBoxVisualizations.end())
+    {
+        return;
+    }
+
+    debugVisu->removeChild(addedBoxVisualizations[name]);
+    addedBoxVisualizations.erase(name);
+}
+
+void DebugDrawerComponent::removeText(const std::string &name)
+{
+    ScopedRecursiveLockPtr l = getScopedLock();
+    if(addedTextVisualizations.find(name) == addedTextVisualizations.end())
+    {
+        return;
+    }
+
+    debugVisu->removeChild(addedTextVisualizations[name]);
+    addedTextVisualizations.erase(name);
+}
+
+
+void DebugDrawerComponent::setPoseVisu(const std::string &layerName, const std::string &poseName, const PoseBasePtr &globalPose, const Ice::Current &)
+{
+    ARMARX_DEBUG << VAROUT(layerName) << VAROUT(poseName);
+    Eigen::Matrix4f gp = PosePtr::dynamicCast(globalPose)->toEigen();
+    drawCoordSystem(poseName,gp,1.0f);
+}
+
+void DebugDrawerComponent::setPoseDebugLayerVisu(const std::string &poseName, const PoseBasePtr &globalPose, const Ice::Current &)
+{
+    std::string d("debug");
+    setPoseVisu(d,poseName,globalPose);
+}
+
+void DebugDrawerComponent::removePoseVisu(const std::string &layerName, const std::string &poseName, const Ice::Current &)
+{
+    Eigen::Matrix4f gp = Eigen::Matrix4f::Identity();
+    drawCoordSystem(poseName,gp,0);
+}
+
+void DebugDrawerComponent::removePoseDebugLayerVisu(const std::string &poseName, const Ice::Current &)
+{
+    std::string d("debug");
+    removePoseVisu(d,poseName);
+}
+
+void DebugDrawerComponent::setLineVisu(const std::string &layerName, const std::string &lineName, const Vector3BasePtr &globalPosition1, const Vector3BasePtr &globalPosition2, float lineWidth, const DrawColor &color, const Ice::Current &)
+{
+    Eigen::Vector3f p1 = Vector3Ptr::dynamicCast(globalPosition1)->toEigen();
+    Eigen::Vector3f p2 = Vector3Ptr::dynamicCast(globalPosition2)->toEigen();
+    VirtualRobot::VisualizationFactory::Color c(color.r,color.g,color.b, 1 - color.a);
+    drawLine(lineName,p1,p2,lineWidth,c);
+}
+
+void DebugDrawerComponent::setLineDebugLayerVisu(const std::string &lineName, const Vector3BasePtr &globalPosition1, const Vector3BasePtr &globalPosition2, float lineWidth, const DrawColor &color, const Ice::Current &)
+{
+    setLineVisu("debug",lineName,globalPosition1,globalPosition2, lineWidth, color);
+}
+
+void DebugDrawerComponent::removeLineVisu(const std::string &layerName, const std::string &lineName, const Ice::Current &)
+{
+    removeLine(lineName);
+}
+
+void DebugDrawerComponent::removeLineDebugLayerVisu(const std::string &lineName, const Ice::Current &)
+{
+    removeLineVisu("debug",lineName);
+}
+
+void DebugDrawerComponent::setBoxVisu(const std::string &layerName, const std::string &boxName, const PoseBasePtr &globalPose, const Vector3BasePtr &dimensions, const DrawColor &color, const Ice::Current &)
+{
+    ARMARX_DEBUG << VAROUT(layerName) << VAROUT(boxName);
+
+    Eigen::Matrix4f gp = PosePtr::dynamicCast(globalPose)->toEigen();
+    VirtualRobot::VisualizationFactory::Color c(color.r,color.g,color.b, 1 - color.a);
+
+    drawBox(boxName, gp, dimensions->x, dimensions->y, dimensions->z, c);
+}
+
+void DebugDrawerComponent::setBoxDebugLayerVisu(const std::string &boxName, const PoseBasePtr &globalPose, const Vector3BasePtr &dimensions, const DrawColor &color, const Ice::Current &)
+{
+    setBoxVisu("debug", boxName, globalPose, dimensions, color);
+}
+
+void DebugDrawerComponent::removeBoxVisu(const std::string &layerName, const std::string &boxName, const Ice::Current &)
+{
+    removeBox(boxName);
+}
+
+void DebugDrawerComponent::removeBoxDebugLayerVisu(const std::string &boxName, const Ice::Current &)
+{
+    removeBoxVisu("debug", boxName);
+}
+
+void DebugDrawerComponent::setTextVisu(const std::string &layerName, const std::string &textName, const std::string &text, const Vector3BasePtr &globalPosition, const DrawColor &color, int size, const Ice::Current &)
+{
+    ARMARX_DEBUG << VAROUT(layerName) << VAROUT(textName);
+
+    drawText(textName, text, Vector3Ptr::dynamicCast(globalPosition)->toEigen(), VirtualRobot::VisualizationFactory::Color(color.r, color.g, color.b, 1 - color.a), size);
+}
+
+void DebugDrawerComponent::setTextDebugLayerVisu(const std::string &textName, const std::string &text, const Vector3BasePtr &globalPosition, const DrawColor &color, int size, const Ice::Current &)
+{
+    setTextVisu("debug", textName, text, globalPosition, color, size);
+}
+
+void DebugDrawerComponent::removeTextVisu(const std::string &layerName, const std::string &textName, const Ice::Current &)
+{
+    removeText(textName);
+}
+
+void DebugDrawerComponent::removeTextDebugLayerVisu(const std::string &textName, const Ice::Current &)
+{
+    removeTextVisu("debug", textName);
+}
+
+void DebugDrawerComponent::clear(const std::string &layerName, const Ice::Current &)
+{
+    ARMARX_VERBOSE << "Clearing layer " << layerName;
+
+    ScopedRecursiveLockPtr l = getScopedLock();
+    addedCoordVisualizations.clear();
+    addedLineVisualizations.clear();
+    addedBoxVisualizations.clear();
+    addedTextVisualizations.clear();
+    debugVisu->removeAllChildren();
+}
+
+void DebugDrawerComponent::clearDebugLayer(const Ice::Current &)
+{
+    ARMARX_VERBOSE << "Clearing debug layer...";
+
+    clear("debug");
+}
+
+void DebugDrawerComponent::setMutex(boost::shared_ptr<boost::recursive_mutex> m)
+{
+    mutex = m;
+}
+
+ScopedRecursiveLockPtr DebugDrawerComponent::getScopedLock()
+{
+    ScopedRecursiveLockPtr l;
+    if (mutex)
+        l.reset(new ScopedRecursiveLock(*mutex));
+    return l;
+}
+
+
+SoSeparator* DebugDrawerComponent::getVisualization()
+{
+    return coinVisu;
+}
+
+}
+
+
diff --git a/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
new file mode 100644
index 0000000000000000000000000000000000000000..a9a4fddf23dcc0ed273dbb6cbbb86b4e910e0a17
--- /dev/null
+++ b/source/RobotAPI/components/DebugDrawer/DebugDrawerComponent.h
@@ -0,0 +1,161 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package    RobotAPI::ArmarXObjects::DebugDrawerComponent
+ * @author     Nikolaus Vahrenkamp ( vahrenkamp at kit dot edu )
+ * @author     Peter Kaiser ( peter dot kaiser at kit dot edu )
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#ifndef __ARMARX_DEBUGDRAWERCOMPONENT_H__
+#define __ARMARX_DEBUGDRAWERCOMPONENT_H__
+
+
+// Coin3D & SoQt
+#include <Inventor/nodes/SoNode.h>
+#include <Inventor/nodes/SoSeparator.h>
+
+// ArmarX
+#include <Core/core/Component.h>
+#include <Core/core/logging/Logging.h>
+#include <Core/core/services/tasks/RunningTask.h>
+#include <RobotAPI/interface/visualization/DebugDrawerInterface.h>
+#include <RobotAPI/libraries/robotstate/remote/ArmarPose.h>
+#include <RobotAPI/interface/robotstate/RobotState.h>
+
+#include <VirtualRobot/VirtualRobotCommon.h>
+
+namespace armarx{
+
+/**
+ * @class ArmarXPhysicsWorldPropertyDefinitions
+ * @brief
+ */
+class DebugDrawerPropertyDefinitions:
+        public ComponentPropertyDefinitions
+{
+public:
+    DebugDrawerPropertyDefinitions(std::string prefix):
+        ComponentPropertyDefinitions(prefix)
+    {
+        defineOptionalProperty<bool>("ShowDebugDrawing", true, "The simulator implements the DebugDrawerInterface. The debug visualizations (e.g. coordinate systems) can enabled/disbaled with this flag.");
+        defineOptionalProperty<std::string>("DebugDrawerTopic", "DebugDrawerUpdates", "Name of the DebugDrawerTopic");
+    }
+};
+
+
+class DebugDrawerComponent :
+        virtual public armarx::DebugDrawerInterface,
+        virtual public Component
+{
+public:
+
+    DebugDrawerComponent();
+
+    // inherited from Component
+    virtual std::string getDefaultName() const { return "DebugDrawer"; }
+    virtual void onInitComponent();
+    virtual void onConnectComponent();
+    virtual void onExitComponent();
+
+
+
+    /**
+     * @see PropertyUser::createPropertyDefinitions()
+     */
+    virtual PropertyDefinitionsPtr createPropertyDefinitions()
+    {
+        return PropertyDefinitionsPtr(new DebugDrawerPropertyDefinitions(
+                                               getConfigIdentifier()));
+    }
+
+    /*!
+     * \brief Enable or disable debug layer visu
+     * \param e
+     */
+    void enableVisu(bool e);
+
+    /* Inherited from DebugDrawerInterface. */
+    virtual void setPoseVisu(const std::string& layerName, const std::string& poseName, const ::armarx::PoseBasePtr& globalPose, const ::Ice::Current& = ::Ice::Current());
+    virtual void setPoseDebugLayerVisu(const std::string& poseName, const ::armarx::PoseBasePtr& globalPose, const ::Ice::Current& = ::Ice::Current());
+    virtual void removePoseVisu(const std::string& layerName, const std::string& poseName, const ::Ice::Current& = ::Ice::Current());
+    virtual void removePoseDebugLayerVisu(const std::string& poseName, const ::Ice::Current& = ::Ice::Current());
+
+    virtual void setLineVisu(const std::string& layerName, const std::string& lineName, const ::armarx::Vector3BasePtr& globalPosition1, const ::armarx::Vector3BasePtr& globalPosition2, float lineWidth, const ::armarx::DrawColor &color, const ::Ice::Current& = ::Ice::Current());
+    virtual void setLineDebugLayerVisu(const std::string& lineName, const ::armarx::Vector3BasePtr& globalPosition1, const ::armarx::Vector3BasePtr& globalPosition2, float lineWidth, const ::armarx::DrawColor &color, const ::Ice::Current& = ::Ice::Current());
+    virtual void removeLineVisu(const std::string& layerName, const std::string& lineName, const ::Ice::Current& = ::Ice::Current());
+    virtual void removeLineDebugLayerVisu(const std::string& lineName, const ::Ice::Current& = ::Ice::Current());
+
+    virtual void setBoxVisu(const std::string &layerName, const std::string &boxName, const ::armarx::PoseBasePtr &globalPose, const ::armarx::Vector3BasePtr &dimensions, const DrawColor &color, const ::Ice::Current& = ::Ice::Current());
+    virtual void setBoxDebugLayerVisu(const std::string &boxName, const ::armarx::PoseBasePtr &globalPose, const ::armarx::Vector3BasePtr &dimensions, const DrawColor &color, const ::Ice::Current& = ::Ice::Current());
+    virtual void removeBoxVisu(const std::string &layerName, const std::string &boxName, const ::Ice::Current& = ::Ice::Current());
+    virtual void removeBoxDebugLayerVisu(const std::string& boxName, const ::Ice::Current& = ::Ice::Current());
+
+    virtual void setTextVisu(const std::string &layerName, const std::string &textName, const std::string &text, const ::armarx::Vector3BasePtr &globalPosition, const DrawColor &color, int size, const ::Ice::Current& = ::Ice::Current());
+    virtual void setTextDebugLayerVisu(const std::string &textName, const std::string &text, const ::armarx::Vector3BasePtr &globalPosition, const DrawColor &color, int size, const ::Ice::Current& = ::Ice::Current());
+    virtual void removeTextVisu(const std::string &layerName, const std::string &textName, const ::Ice::Current& = ::Ice::Current());
+    virtual void removeTextDebugLayerVisu(const std::string& textName, const ::Ice::Current& = ::Ice::Current());
+
+
+
+    virtual void clear(const std::string& layerName, const ::Ice::Current& = ::Ice::Current());
+    virtual void clearDebugLayer(const ::Ice::Current& = ::Ice::Current());
+
+    /*!
+     * \brief getScopedLock If using the coin visualization it must be ensured that all rendering calls are protected with this mutex
+     * \return The lock that is automatically destructed when leaving the current scope.
+     */
+    ScopedRecursiveLockPtr getScopedLock();
+
+    /*!
+     * \brief getVisualization Ensure that all access to this node is protected with the scoped lock mutex.
+     * \return  The visualization
+     */
+    SoSeparator* getVisualization();
+
+    void setMutex(boost::shared_ptr<boost::recursive_mutex> m);
+
+protected:
+
+    void drawCoordSystem(const std::string &name, Eigen::Matrix4f &globalPose, float scale);
+    void drawLine(const std::string &name, Eigen::Vector3f &p1, Eigen::Vector3f &p2, float scale, VirtualRobot::VisualizationFactory::Color &color);
+    void drawBox(const std::string &name, Eigen::Matrix4f &globalPose, float width, float height, float depth, VirtualRobot::VisualizationFactory::Color &color);
+    void drawText(const std::string &name, const std::string &text, const Eigen::Vector3f &position, const VirtualRobot::VisualizationFactory::Color &color, int size);
+
+    void removeLine(const std::string &name);
+    void removeBox(const std::string &name);
+    void removeText(const std::string &name);
+
+    SoSeparator* coinVisu;
+    SoSeparator* debugVisu;
+
+    bool enable;
+
+    std::map<std::string, SoSeparator*> addedCoordVisualizations;
+    std::map<std::string, SoSeparator*> addedLineVisualizations;
+    std::map<std::string, SoSeparator*> addedBoxVisualizations;
+    std::map<std::string, SoSeparator*> addedTextVisualizations;
+
+    boost::shared_ptr<boost::recursive_mutex> mutex;
+};
+
+typedef IceInternal::Handle<DebugDrawerComponent> DebugDrawerComponentPtr;
+
+}
+
+#endif
diff --git a/source/RobotAPI/components/MMMPlayer/CMakeLists.txt b/source/RobotAPI/components/MMMPlayer/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..874be9722114757ae9e6f6e85d305a0dc6849a5e
--- /dev/null
+++ b/source/RobotAPI/components/MMMPlayer/CMakeLists.txt
@@ -0,0 +1,35 @@
+armarx_component_set_name("MMMPlayer")
+
+find_package(MMMCore QUIET)
+armarx_build_if(MMMCore_FOUND "MMMCORE not available")
+if(MMMCore_FOUND)
+    include_directories(${MMMCORE_INCLUDE_DIRS})
+endif()
+
+find_package(Eigen3 QUIET)
+find_package(Simox QUIET)
+
+armarx_build_if(Eigen3_FOUND "Eigen3 not available")
+armarx_build_if(Simox_FOUND "Simox-VirtualRobot not available")
+
+if (Eigen3_FOUND AND Simox_FOUND)
+    include_directories(
+        ${Eigen3_INCLUDE_DIR}
+        ${Simox_INCLUDE_DIRS})
+endif()
+
+set(COMPONENT_LIBS RobotAPIInterfaces ArmarXInterfaces ArmarXCore ${MMMCORE_LIBRARIES})
+
+set(SOURCES
+./MMMPlayer.cpp
+#@TEMPLATE_LINE@@COMPONENT_PATH@/@COMPONENT_NAME@.cpp
+)
+set(HEADERS
+./MMMPlayer.h
+#@TEMPLATE_LINE@@COMPONENT_PATH@/@COMPONENT_NAME@.h
+)
+
+armarx_add_component("${SOURCES}" "${HEADERS}")
+
+# add unit tests
+add_subdirectory(test)
diff --git a/source/RobotAPI/components/MMMPlayer/MMMPlayer.cpp b/source/RobotAPI/components/MMMPlayer/MMMPlayer.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..e2fec8f83e395b725704c6def3d4cdad6c0b33de
--- /dev/null
+++ b/source/RobotAPI/components/MMMPlayer/MMMPlayer.cpp
@@ -0,0 +1,122 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package    RobotAPI::ArmarXObjects::MMMPlayer
+ * @author     Mirko Waechter ( mirko dot waechter at kit dot edu )
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#include "MMMPlayer.h"
+#include <MMM/Motion/MotionReaderXML.h>
+
+#include <Core/core/exceptions/local/ExpressionException.h>
+
+#include <Core/core/system/ArmarXDataPath.h>
+
+
+using namespace armarx;
+using namespace MMM;
+
+
+void MMMPlayer::onInitComponent()
+{
+    usingProxy(getProperty<std::string>("KinematicUnitName").getValue());
+    motionFPS = 1;
+    desiredFPS = 1;
+
+}
+
+
+void MMMPlayer::onConnectComponent()
+{
+    {
+        ScopedLock lock(playerMutex);
+        currentFrame = 0;
+        MotionReaderXML reader;
+        auto motionPath = getProperty<std::string>("MMMFile").getValue();
+        ArmarXDataPath::getAbsolutePath(motionPath, motionPath);
+        motion = reader.loadMotion(motionPath);
+        if(!motion)
+        {
+            terminate();
+            return;
+        }
+        jointNames = motion->getJointNames();
+        if(motion->getNumFrames() > 1)
+        {
+            float frameDuration = motion->getMotionFrame(1)->timestep - motion->getMotionFrame(0)->timestep;
+            ARMARX_CHECK_EXPRESSION(frameDuration != 0);
+            ARMARX_CHECK_EXPRESSION(frameDuration > 0)
+            motionFPS = 1.0f/frameDuration;
+            ARMARX_VERBOSE << VAROUT(motionFPS);
+        }
+    }
+    kin = getProxy<KinematicUnitInterfacePrx>(getProperty<std::string>("KinematicUnitName").getValue());
+    desiredFPS = getProperty<float>("FPS").getValue();
+    task = new PeriodicTask<MMMPlayer>(this, &MMMPlayer::run, 1000.0f/desiredFPS, true, "MMMPlayerTask");
+    task->start();
+
+}
+
+
+void MMMPlayer::run()
+{
+    ScopedLock lock(playerMutex);
+    if(currentFrame >= motion->getNumFrames())
+    {
+        currentFrame = 0;
+    }
+    auto frame = motion->getMotionFrame(currentFrame);
+    NameValueMap targetValues;
+    NameValueMap targetVelocities;
+    NameControlModeMap modes;
+    ARMARX_CHECK_EXPRESSION((int)jointNames.size() == frame->joint.rows());
+    for (size_t i = 0; i < jointNames.size(); ++i) {
+        const auto& jointName = jointNames.at(i);
+        targetValues[jointName] = frame->joint[i];
+        auto vel = frame->joint_vel[i];
+        if(vel != 0.0f)
+        {
+            targetVelocities[jointName] = vel * desiredFPS/motionFPS;
+        }
+        modes[jointName] = ePositionControl;
+    }
+    kin->switchControlMode(modes);
+    kin->setJointAngles(targetValues);
+    ARMARX_VERBOSE << deactivateSpam(3) << "Playing frame " << currentFrame;
+    currentFrame++;
+}
+
+void MMMPlayer::onDisconnectComponent()
+{
+    if(task)
+        task->stop();
+}
+
+
+void MMMPlayer::onExitComponent()
+{
+
+}
+
+PropertyDefinitionsPtr MMMPlayer::createPropertyDefinitions()
+{
+    return PropertyDefinitionsPtr(new MMMPlayerPropertyDefinitions(
+                                      getConfigIdentifier()));
+}
+
diff --git a/source/RobotAPI/components/MMMPlayer/MMMPlayer.h b/source/RobotAPI/components/MMMPlayer/MMMPlayer.h
new file mode 100644
index 0000000000000000000000000000000000000000..425e8c58fc6207df7f158eda33195bf342413eaa
--- /dev/null
+++ b/source/RobotAPI/components/MMMPlayer/MMMPlayer.h
@@ -0,0 +1,113 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package    RobotAPI::ArmarXObjects::MMMPlayer
+ * @author     Mirko Waechter ( mirko dot waechter at kit dot edu )
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#ifndef _ARMARX_COMPONENT_RobotAPI_MMMPlayer_H
+#define _ARMARX_COMPONENT_RobotAPI_MMMPlayer_H
+
+#include <MMM/Motion/Motion.h>
+
+
+
+#include <Core/core/Component.h>
+
+#include <RobotAPI/interface/units/KinematicUnitInterface.h>
+
+#include <Core/core/services/tasks/PeriodicTask.h>
+
+namespace armarx
+{
+    /**
+     * @class MMMPlayerPropertyDefinitions
+     * @brief
+     * @ingroup Components
+     */
+    class MMMPlayerPropertyDefinitions:
+        public ComponentPropertyDefinitions
+    {
+    public:
+        MMMPlayerPropertyDefinitions(std::string prefix):
+            ComponentPropertyDefinitions(prefix)
+        {
+            defineRequiredProperty<std::string>("MMMFile", "Path to MMM XML File");
+            defineRequiredProperty<std::string>("KinematicUnitName", "Name of the KinematicUnit to which the joint values should be sent");
+            defineOptionalProperty<float>("FPS", 100.0f, "FPS with which the recording should be executed. Velocities will be adapted.");
+        }
+    };
+
+    /**
+     * @class MMMPlayer
+     * @brief A brief description
+     *
+     * Detailed Description
+     */
+    class MMMPlayer :
+        virtual public armarx::Component
+    {
+    public:
+        /**
+         * @see armarx::ManagedIceObject::getDefaultName()
+         */
+        virtual std::string getDefaultName() const
+        {
+            return "MMMPlayer";
+        }
+
+    protected:
+        /**
+         * @see armarx::ManagedIceObject::onInitComponent()
+         */
+        virtual void onInitComponent();
+
+        /**
+         * @see armarx::ManagedIceObject::onConnectComponent()
+         */
+        virtual void onConnectComponent();
+
+        /**
+         * @see armarx::ManagedIceObject::onDisconnectComponent()
+         */
+        virtual void onDisconnectComponent();
+
+        /**
+         * @see armarx::ManagedIceObject::onExitComponent()
+         */
+        virtual void onExitComponent();
+
+        /**
+         * @see PropertyUser::createPropertyDefinitions()
+         */
+        virtual PropertyDefinitionsPtr createPropertyDefinitions();
+
+        void run();
+        Mutex playerMutex;
+        MMM::MotionPtr motion;
+        KinematicUnitInterfacePrx kin;
+        PeriodicTask<MMMPlayer>::pointer_type task;
+        StringList jointNames;
+        size_t currentFrame;
+        float motionFPS;
+        float desiredFPS;
+    };
+}
+
+#endif
diff --git a/source/RobotAPI/components/MMMPlayer/test/CMakeLists.txt b/source/RobotAPI/components/MMMPlayer/test/CMakeLists.txt
new file mode 100644
index 0000000000000000000000000000000000000000..16a4cf72988867edbe64273efc0970b571548e5f
--- /dev/null
+++ b/source/RobotAPI/components/MMMPlayer/test/CMakeLists.txt
@@ -0,0 +1,5 @@
+
+# Libs required for the tests
+SET(LIBS ${LIBS} ArmarXCore MMMPlayer)
+ 
+armarx_add_test(MMMPlayerTest MMMPlayerTest.cpp "${LIBS}")
\ No newline at end of file
diff --git a/source/RobotAPI/components/MMMPlayer/test/MMMPlayerTest.cpp b/source/RobotAPI/components/MMMPlayer/test/MMMPlayerTest.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..326edd5156a723b5b205d7a29ec561e2d2f18e6d
--- /dev/null
+++ b/source/RobotAPI/components/MMMPlayer/test/MMMPlayerTest.cpp
@@ -0,0 +1,38 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * @package    RobotAPI::ArmarXObjects::MMMPlayer
+ * @author     Mirko Waechter ( mirko dot waechter at kit dot edu )
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#define BOOST_TEST_MODULE RobotAPI::ArmarXObjects::MMMPlayer
+
+#define ARMARX_BOOST_TEST
+
+#include <RobotAPI/Test.h>
+#include <RobotAPI/components/MMMPlayer/MMMPlayer.h>
+
+#include <iostream>
+
+BOOST_AUTO_TEST_CASE(testExample)
+{
+    armarx::MMMPlayer instance;
+
+    BOOST_CHECK_EQUAL(true, true);
+}
diff --git a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
index f7c0eabf15bf6c11dac0c6ce09bbc6625023e5f3..7f801b90c0f892a04fb24a72d24da865c6f2620a 100644
--- a/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
+++ b/source/RobotAPI/components/units/KinematicUnitSimulation.cpp
@@ -209,7 +209,7 @@ void KinematicUnitSimulation::setJointAngles(const NameValueMap& targetJointAngl
             actualJointAngles[targetJointName] = iterJoints->second.angle;
         }
         else
-            ARMARX_WARNING << "Joint not found!";
+            ARMARX_WARNING  << deactivateSpam(1) << "Joint '" << targetJointName << "' not found!";
     }
     if (aValueChanged)
         listenerPrx->reportJointAngles(actualJointAngles, aValueChanged);
diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/CMakeLists.txt b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/CMakeLists.txt
index 067b093164b490d8ccd4541cd371375030848b7a..9f431bf614218a146dfeea5210fce6df9723dd35 100644
--- a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/CMakeLists.txt
+++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/CMakeLists.txt
@@ -15,13 +15,14 @@ include(${QT_USE_FILE})
 include(${ArmarXGui_CMAKE_DIR}/ArmarXGui.cmake)
 
 file(GLOB SOURCES PlatformUnitGuiPlugin.cpp
-     PlatformUnitConfigDialog.cpp)
+     PlatformUnitConfigDialog.cpp JoystickControlWidget.cpp)
 file(GLOB HEADERS PlatformUnitGuiPlugin.h
-     PlatformUnitConfigDialog.h)
+     PlatformUnitConfigDialog.h JoystickControlWidget.h)
 
 set(GUI_MOC_HDRS
     PlatformUnitGuiPlugin.h
     PlatformUnitConfigDialog.h
+    JoystickControlWidget.h
 )
 
 set(GUI_UIS
diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.cpp b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.cpp
new file mode 100644
index 0000000000000000000000000000000000000000..012939ed961b879745755dfc816bb3e137cb42b7
--- /dev/null
+++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.cpp
@@ -0,0 +1,212 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ * @package    ArmarX::RobotAPI
+ * @author     Raphael Grimm <ufdrv at student dot kit dot edu>
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#include "JoystickControlWidget.h"
+
+//qt
+#include <QVBoxLayout>
+#include <QPen>
+#include <QBrush>
+#include <QColor>
+#include <QSizePolicy>
+
+//std
+#include <memory>
+#include <cmath>
+
+#include <iostream>
+
+namespace armarx
+{
+
+    JoystickControlWidgetQGraphicsView::JoystickControlWidgetQGraphicsView(QGraphicsScene* scene, QWidget* parent):
+        QGraphicsView{scene, parent}
+    {
+    }
+
+    JoystickControlWidgetQGraphicsView::~JoystickControlWidgetQGraphicsView()
+    {
+    }
+
+    void JoystickControlWidgetQGraphicsView::mousePressEvent(QMouseEvent* event)
+    {
+        emit positionChanged(mapToScene(event->pos()));
+    }
+
+    void JoystickControlWidgetQGraphicsView::mouseMoveEvent(QMouseEvent* event)
+    {
+        emit positionChanged(mapToScene(event->pos()));
+    }
+    void JoystickControlWidgetQGraphicsView::mouseReleaseEvent(QMouseEvent*)
+    {
+        emit positionChanged({0,0});
+    }
+
+    JoystickControlWidget::JoystickControlWidget(bool useQuadrant3and4, QWidget *parent) :
+        QWidget{parent},
+        onlyQuadrant2and1{!useQuadrant3and4},
+        nibble{},
+        steps{0}
+    {
+        //build scene + use explicit pens (on some platforms the default ones dont have the desired default values)
+        std::unique_ptr<QGraphicsScene> scene{new QGraphicsScene{}};
+        QPen pen{Qt::black,0};
+        //bounding circle
+        scene->addEllipse(-1,-1,2,2,pen);
+        //inner circle
+        scene->addEllipse(-0.13,-0.13,0.26,0.26,pen);
+        //cross
+        scene->addLine(0,-1,0,1,pen);
+        scene->addLine(-1,0,1,0,pen);
+        //nibble
+        QPen penRed{Qt::darkRed};
+        penRed.setCosmetic(true);
+        nibble = scene->addEllipse(-0.1,-0.1,0.2,0.2, penRed, QBrush{Qt::darkRed});
+
+        //build view
+        std::unique_ptr<JoystickControlWidgetQGraphicsView>
+            viewPtr{new JoystickControlWidgetQGraphicsView{scene.release()}};
+        view = viewPtr.get();
+
+        view->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+        view->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
+        view->setSceneRect(-1,-1,2, (onlyQuadrant2and1?1:2));
+
+        //connect
+        connect(viewPtr.get(), SIGNAL(positionChanged(QPointF)), this, SLOT(setNibble(QPointF)));
+
+        //set gui
+        std::unique_ptr<QVBoxLayout> layout{new QVBoxLayout{}};
+        layout->setSpacing(0);
+        layout->setContentsMargins(0,0,0,0);
+        layout->addWidget(viewPtr.release());
+        setLayout(layout.release());
+
+    }
+
+    QPointF JoystickControlWidget::getPosition() const
+    {
+        return nibble->pos();
+    }
+
+    double JoystickControlWidget::getRotation() const
+    {
+        //if the nibble is in the middle return the angle 0.
+        //otherwise use polar coordinates (up is 0, down pi, Quadrant I & IV are positive)
+        auto pos = getPosition();
+        auto length= std::hypot(pos.x(), pos.y());
+        auto normalized= pos/length;
+
+        if(length==0)
+        {
+            return 0;
+        }
+        else
+        {
+            if(normalized.x()<0)
+            {
+                return -std::acos(-normalized.y());
+            }
+            else
+            {
+                return std::acos(-normalized.y());
+            }
+        }
+    }
+
+    void JoystickControlWidget::setNibble(QPointF pos)
+    {
+        if(onlyQuadrant2and1 && (pos.y()>0))
+        {
+            //project position to quadrant II & I
+            pos.setY(0);
+        }
+
+        auto length= std::hypot(pos.x(), pos.y());
+        auto normalized= pos/length;
+
+        if(length!=0)
+        {
+
+            if(steps==0)
+            {
+                //dont snap
+                pos = (length>1)?normalized : pos;
+            }
+            else
+            {
+                //snapp to step
+                double stepSize = 1.0/steps;
+                //length/(1.0/steps) => length*steps
+                // +0.3*stepSize => if the border of the step is more forgiving
+                double newLength = static_cast<unsigned int>(length*steps+0.3*stepSize)*stepSize;
+                pos=std::fmin(1, newLength)*normalized;
+            }
+        }
+
+        //set position
+        nibble->setPos( pos);
+
+        //flip y (from downwards to upwards)
+        pos.setY(-pos.y());
+
+        //emit signals
+        emit positionChanged(pos);
+
+        emit rotationChanged(getRotation());
+    }
+
+    void JoystickControlWidget::resizeEvent(QResizeEvent*)
+    {
+        int width;
+        int height;
+        //calculate size
+        if(onlyQuadrant2and1)
+        {
+            height= std::min(contentsRect().width()/2,contentsRect().height());
+            width=height*2;
+        }
+        else
+        {
+            width= std::min(contentsRect().width(),contentsRect().height());
+            height=width;
+        }
+        //if minsz=maxsz you block resizing
+        view->setMinimumSize(0.9*width,0.9*height);
+        view->setMaximumSize(width,height);
+        auto viewScaleFactor = 0.49*width;
+        view->setTransform(QTransform::fromScale(viewScaleFactor,viewScaleFactor));
+    }
+
+
+    void JoystickControlWidget::setSteps(int stepCount)
+    {
+        steps= (stepCount<0)?0:stepCount;
+    }
+
+    int JoystickControlWidget::getSteps()
+    {
+        return steps;
+    }
+}// namespace armarx
diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.h b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.h
new file mode 100644
index 0000000000000000000000000000000000000000..b11fb1732b9cffb365c9bccf116b985164ef9cc5
--- /dev/null
+++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/JoystickControlWidget.h
@@ -0,0 +1,164 @@
+/*
+ * This file is part of ArmarX.
+ *
+ * ArmarX is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU Lesser General Public License as
+ * published by the Free Software Foundation; either version 2 of
+ * the License, or (at your option) any later version.
+ *
+ * ArmarX is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU Lesser General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ *
+ *
+ * @package    ArmarX::RobotAPI
+ * @author     Raphael Grimm <ufdrv at student dot kit dot edu>
+ * @date       2014
+ * @copyright  http://www.gnu.org/licenses/gpl.txt
+ *             GNU General Public License
+ */
+
+#ifndef _ARMARXGUI_PLUGINS_JOYSTICKCONTROLWIDGET_H
+#define _ARMARXGUI_PLUGINS_JOYSTICKCONTROLWIDGET_H
+
+//boost
+#include <boost/shared_ptr.hpp>
+
+//qt
+#include <QWidget>
+#include <QGraphicsView>
+#include <QGraphicsScene>
+#include <QMouseEvent>
+#include <QResizeEvent>
+
+#include <QPointF>
+#include <QPointer>
+#include <QGraphicsEllipseItem>
+
+namespace armarx
+{
+    /**
+     * @brief Provides the coordinates of mouse events through signals.
+     * Used in JoystickControlWidget.
+     */
+    class JoystickControlWidgetQGraphicsView:public QGraphicsView
+    {
+        Q_OBJECT
+        public:
+            JoystickControlWidgetQGraphicsView(QGraphicsScene* scene, QWidget* parent = nullptr);
+            virtual ~JoystickControlWidgetQGraphicsView();
+
+        public:
+            /**
+             * @brief Passes the mapped mouse coordinates of the event through the signal positionChanged.
+             * @param event Contains the coordinates
+             */
+            virtual void mousePressEvent(QMouseEvent* event);
+
+            /**
+             * @brief Passes the mapped mouse coordinates of the event through the signal positionChanged.
+             * @param event Contains the coordinates
+             */
+            virtual void mouseMoveEvent(QMouseEvent* event);
+
+            /**
+             * @brief Passes (0;0) through the signal positionChanged.
+             */
+            virtual void mouseReleaseEvent(QMouseEvent*);
+        signals:
+            /**
+             * @brief Sends the mouse position on press or move in the scene coordinates.
+             * On mouse release (0;0) is send.
+             */
+            void positionChanged(QPointF);
+    };//JoystickControlWidgetQGraphicsView
+
+    /**
+     * @brief Provides a simple joystick control.
+     */
+    class JoystickControlWidget : public QWidget
+    {
+        Q_OBJECT
+        public:
+            explicit JoystickControlWidget(bool useQuadrant3and4 = true, QWidget *parent = 0);
+
+        /**
+             * @brief Returns the angle of the control in polar coordinates (-pi,pi].
+             * The top position is 0. The bottom position is pi. The Quadrants 1 and 4 have positive value.
+             * @return The angle of the control in polar coordinates (-pi,pi].
+             */
+            double getRotation() const;
+
+            /**
+             * @brief Returns the position of the nibble.
+             * The position is in a circle with the radius 1 around (0;0)
+             * @return The position of the nibble.
+             */
+            QPointF getPosition() const;
+
+        public slots:
+            /**
+             * @brief Sets the steps of the control. (0=> unlimited steps)
+             * @param stepCount The new step count. (values <0 will be used as 0)
+             */
+            void setSteps(int stepCount);
+
+            /**
+             * @brief Returns the steps of the control. (0=> unlimited steps)
+             * @return The steps of the control. (0=> unlimited steps)
+             */
+            int getSteps();
+
+        signals:
+            /**
+             * @brief Passes the position of the control.
+             * The position is in a circle with the radius 1 around (0;0)
+             */
+            void positionChanged(QPointF);
+
+            /**
+             * @brief Passes the angle of the control in polar coordinates (-pi,pi].
+             * The top position is 0. The bottom position is pi. The Quadrants 1 and 4 have positive value.
+             */
+            void rotationChanged(double);
+
+        protected:
+            virtual void resizeEvent(QResizeEvent * event);
+
+        private slots:
+            /**
+             * @brief Sets the nibble to pos. (pos will be transformed to be a valid position)
+             * @param pos The new position.
+             */
+            void setNibble(QPointF pos);
+
+        private:
+            /**
+             * @brief The view containing the scene.
+             */
+            QPointer<JoystickControlWidgetQGraphicsView> view;
+            /**
+             * @brief Whether only quadrant 1 and 2 are in use
+             */
+            bool onlyQuadrant2and1;
+
+            //QGraphicsEllipseItem is no QObject so it cant be stored in a QPointer.
+            /**
+             * @brief The control item of this widget. (the red dot)
+             */
+            QGraphicsEllipseItem* nibble;
+
+            /**
+             * @brief The steps of the control. (0=> unlimited steps)
+             */
+            int steps;
+    };// class JoystickControlWidget
+
+    typedef boost::shared_ptr<JoystickControlWidget> JoystickControlWidgetPtr;
+
+}// namespace armarx
+#endif
diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.cpp b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.cpp
index fc01d3ee6e312e004b09d424c8745715b80aeda0..8961ea4c2f0f64fdbffb38193b5ef8add7262a19 100644
--- a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.cpp
+++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.cpp
@@ -9,6 +9,10 @@
 #include <QPushButton>
 #include <QLabel>
 #include <QLineEdit>
+#include <QHBoxLayout>
+
+//std
+#include <memory>
 
 using namespace armarx;
 
@@ -18,13 +22,32 @@ PlatformUnitGuiPlugin::PlatformUnitGuiPlugin()
     addWidget<PlatformUnitWidget>();
 }
 
-
 PlatformUnitWidget::PlatformUnitWidget() :
     platformUnitProxyName("PlatformUnitDynamicSimulation"),
-    platformName("Platform")
+    platformName("Platform"),
+    speedCtrl{nullptr},
+    rotaCtrl{nullptr},
+    ctrlEvaluationTimer{},
+    platformRotation{0}
 {
     // init gui
     ui.setupUi(getWidget());
+    //init joystick controls
+    std::unique_ptr<JoystickControlWidget> speed{new JoystickControlWidget{}};
+    speedCtrl = speed.get();
+    speedCtrl->setSteps(2);
+    //use upper semicircle for rotation
+    std::unique_ptr<JoystickControlWidget> rotat{new JoystickControlWidget{false}};
+    rotaCtrl = rotat.get();
+    rotaCtrl->setSteps(1);
+    //add joystick controls
+    ui.verticalLayoutRotation->addWidget(new QLabel{"Rotation"});
+    ui.verticalLayoutRotation->addWidget(rotat.release());
+    ui.verticalLayoutSpeed->addWidget(new QLabel{"Direction"});
+    ui.verticalLayoutSpeed->addWidget(speed.release());
+    //set up the timer
+    ctrlEvaluationTimer.setSingleShot(false);
+    ctrlEvaluationTimer.start(CONTROL_TICK_RATE);//tickrate in ms
 }
 
 
@@ -79,6 +102,7 @@ void PlatformUnitWidget::saveSettings(QSettings *settings)
 void PlatformUnitWidget::connectSlots()
 {
     connect(ui.buttonMoveToPosition, SIGNAL(clicked()), this, SLOT(moveTo()));
+    connect(&ctrlEvaluationTimer, SIGNAL(timeout()), this, SLOT(controlTimerTick()));
 }
 
 void PlatformUnitWidget::moveTo()
@@ -97,6 +121,7 @@ void PlatformUnitWidget::reportPlatformPose(::Ice::Float currentPlatformPosition
     ui.labelCurrentPositionX->setText(QString::number(currentPlatformPositionX));
     ui.labelCurrentPositionY->setText(QString::number(currentPlatformPositionY));
     ui.labelCurrentRotation->setText(QString::number(currentPlatformRotation));
+    platformRotation =currentPlatformRotation;
 }
 
 void PlatformUnitWidget::reportNewTargetPose(::Ice::Float newPlatformPositionX, ::Ice::Float newPlatformPositionY, ::Ice::Float newPlatformRotation, const Ice::Current& c)
@@ -111,5 +136,49 @@ void PlatformUnitWidget::reportPlatformVelocity(::Ice::Float currentPlatformVelo
 
 }
 
+void PlatformUnitWidget::controlTimerTick()
+{
+    //speed control cant be tested in the simulator:
+    //platformUnitProxy->move(targetPlatformVelocityX, targetPlatformVelocityY, targetPlatformVelocityRotation);
+    //[20496][12:09:21.196][PlatformUnitDynamicSimulation][PlatformUnitDynamicSimulation]: NYI
+    //
+    // the manual transformation in the platform system using the rotation has problems:
+    // - more floating point operations => bigger errors
+    // - the platform moves => the rotation changes a small bit => the platforms starts to turn
+    //
+    // the problems maybe will be solved by setting velocities (but this is nyi in the simulator)
+
+    ::Ice::Float posAcc = 10.0f;
+    ::Ice::Float rotAcc = 0.1f;
+
+    //normalize to [-1,1]
+    auto rot = -rotaCtrl->getRotation()/static_cast<float>(M_PI);
+    ::Ice::Float rotInc = rot;
+
+    auto pos = speedCtrl->getPosition()*60;
+    //flip y
+    pos.setY(-pos.y());
+    auto len = std::hypot(pos.x(),pos.y());
+
+    ::Ice::Float posXInc = 0;
+    ::Ice::Float posYInc = 0;
+
+    if(std::abs(len)>0.01)
+    {
+        // rotation=0 => lookDirection = (0,1)
+        //
+        //rotate the vector
+        //  cos alpha  -sin alpha  * x
+        //  sin alpha   cos alpha    y
+        posXInc =pos.x()*std::cos(platformRotation) - pos.y()*std::sin(platformRotation);
+        posYInc =pos.x()*std::sin(platformRotation) + pos.y()*std::cos(platformRotation);
+    }
+    //only update positions if required
+    if(rotInc!=0 || posXInc !=0 || posYInc!=0)
+    {
+        platformUnitProxy->moveRelative(posXInc,posYInc,rotInc, posAcc, rotAcc);
+    }
+}
+
 Q_EXPORT_PLUGIN2(armar3_gui_PlatformUnitGuiPlugin, PlatformUnitGuiPlugin)
 
diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.h b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.h
index f791b42d1a9f28c07ec1e48250afd5cbfcca8908..16839d5913835f471c31ab2c99fb4b3dee5bc999 100644
--- a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.h
+++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.h
@@ -27,6 +27,7 @@
 
 /* ArmarX headers */
 #include "ui_PlatformUnitGuiPlugin.h"
+#include "JoystickControlWidget.h"
 #include <Core/core/Component.h>
 #include <Gui/ArmarXGuiLib/ArmarXGuiPlugin.h>
 #include <Gui/ArmarXGuiLib/ArmarXComponentWidgetController.h>
@@ -35,6 +36,7 @@
 
 /* Qt headers */
 #include <QtGui/QMainWindow>
+#include <QTimer>
 
 #include <string>
 
@@ -108,6 +110,9 @@ namespace armarx
 
         Ui::PlatformUnitGuiPlugin ui;
 
+    private slots:
+        void controlTimerTick();
+
     private:
         std::string platformUnitProxyName;
         std::string platformName;
@@ -116,6 +121,33 @@ namespace armarx
 
         QPointer<QWidget> __widget;
         QPointer<PlatformUnitConfigDialog> dialog;
+
+        /**
+         * @brief A Joystick control for the platform speed.
+         * (currently the velocity control is nyi is the simulator so this is emulated by
+         * adding a delta to the target positions)
+         */
+        QPointer<JoystickControlWidget> speedCtrl;
+
+        /**
+         * @brief A Joystick control for the platform rotation.
+         */
+        QPointer<JoystickControlWidget> rotaCtrl;
+
+        /**
+         * @brief A timer to evaluate the speedCtrl and rotaCtrl
+         */
+        QTimer ctrlEvaluationTimer;
+
+        /**
+         * @brief Holds the last reported platform rotation. (required to emulate the speed control)
+         */
+        ::Ice::Float platformRotation;
+
+        /**
+         * @brief The tick rate (in ms) for the ctrlEvaluationTimer.
+         */
+        static const int CONTROL_TICK_RATE = 250;
     };
     typedef boost::shared_ptr<PlatformUnitWidget> PlatformUnitGuiPluginPtr;
 }
diff --git a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.ui b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.ui
index 5a21e34a0317a54e21ab7e2dd81b895b04b59a0b..77ce3ca22a6da1634b0f1f85882447c5f1f3deff 100644
--- a/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.ui
+++ b/source/RobotAPI/gui_plugins/PlatformUnitPlugin/PlatformUnitGuiPlugin.ui
@@ -7,7 +7,7 @@
     <x>0</x>
     <y>0</y>
     <width>360</width>
-    <height>190</height>
+    <height>350</height>
    </rect>
   </property>
   <property name="sizePolicy">
@@ -25,29 +25,48 @@
      <x>9</x>
      <y>9</y>
      <width>341</width>
-     <height>171</height>
+     <height>331</height>
     </rect>
    </property>
    <layout class="QGridLayout" name="gridLayout">
     <item row="0" column="1">
      <widget class="QLabel" name="labelCurrent">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
       <property name="text">
        <string>Current Position</string>
       </property>
      </widget>
     </item>
-    <item row="2" column="2">
-     <widget class="QLineEdit" name="editTargetPositionY"/>
+    <item row="0" column="2">
+     <widget class="QLabel" name="labelTarget">
+      <property name="sizePolicy">
+       <sizepolicy hsizetype="MinimumExpanding" vsizetype="Preferred">
+        <horstretch>0</horstretch>
+        <verstretch>0</verstretch>
+       </sizepolicy>
+      </property>
+      <property name="text">
+       <string>Target Position</string>
+      </property>
+     </widget>
     </item>
-    <item row="1" column="0">
-     <widget class="QLabel" name="labelPositionX">
+    <item row="4" column="2">
+     <widget class="QPushButton" name="buttonMoveToPosition">
       <property name="text">
-       <string>X Position</string>
+       <string>Move To Position</string>
       </property>
      </widget>
     </item>
-    <item row="3" column="2">
-     <widget class="QLineEdit" name="editTargetRotation"/>
+    <item row="1" column="2">
+     <widget class="QLineEdit" name="editTargetPositionX"/>
+    </item>
+    <item row="2" column="2">
+     <widget class="QLineEdit" name="editTargetPositionY"/>
     </item>
     <item row="2" column="0">
      <widget class="QLabel" name="labelPositionY">
@@ -56,23 +75,16 @@
       </property>
      </widget>
     </item>
-    <item row="3" column="0">
-     <widget class="QLabel" name="labelRotation">
-      <property name="text">
-       <string>Rotation</string>
-      </property>
-     </widget>
+    <item row="3" column="2">
+     <widget class="QLineEdit" name="editTargetRotation"/>
     </item>
-    <item row="0" column="2">
-     <widget class="QLabel" name="labelTarget">
+    <item row="1" column="1">
+     <widget class="QLabel" name="labelCurrentPositionX">
       <property name="text">
-       <string>Target Position</string>
+       <string>0</string>
       </property>
      </widget>
     </item>
-    <item row="1" column="2">
-     <widget class="QLineEdit" name="editTargetPositionX"/>
-    </item>
     <item row="2" column="1">
      <widget class="QLabel" name="labelCurrentPositionY">
       <property name="text">
@@ -80,27 +92,37 @@
       </property>
      </widget>
     </item>
-    <item row="1" column="1">
-     <widget class="QLabel" name="labelCurrentPositionX">
+    <item row="3" column="0">
+     <widget class="QLabel" name="labelRotation">
       <property name="text">
-       <string>0</string>
+       <string>Rotation</string>
       </property>
      </widget>
     </item>
-    <item row="3" column="1">
-     <widget class="QLabel" name="labelCurrentRotation">
+    <item row="1" column="0">
+     <widget class="QLabel" name="labelPositionX">
       <property name="text">
-       <string>0</string>
+       <string>X Position</string>
       </property>
      </widget>
     </item>
-    <item row="4" column="2">
-     <widget class="QPushButton" name="buttonMoveToPosition">
+    <item row="3" column="1">
+     <widget class="QLabel" name="labelCurrentRotation">
       <property name="text">
-       <string>Move To Position</string>
+       <string>0</string>
       </property>
      </widget>
     </item>
+    <item row="5" column="0" colspan="3">
+     <layout class="QHBoxLayout" name="horizontalLayout">
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayoutSpeed"/>
+      </item>
+      <item>
+       <layout class="QVBoxLayout" name="verticalLayoutRotation"/>
+      </item>
+     </layout>
+    </item>
    </layout>
   </widget>
  </widget>
diff --git a/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice b/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
index 97863966089d30d2e83433c59852d443cd32b1cc..9666317ad1a4e617afdcd1251619bd72c8c1d7c4 100644
--- a/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
+++ b/source/RobotAPI/interface/visualization/DebugDrawerInterface.ice
@@ -40,6 +40,7 @@ module armarx
          float r;
          float g;
          float b;
+         float a;
     };
 
 
@@ -58,8 +59,9 @@ module armarx
          * \param globalPose The pose in global coordinate syetem.
          */
         void setPoseVisu(string layerName, string poseName, PoseBase globalPose);
-
         void setLineVisu(string layerName, string lineName, Vector3Base globalPosition1, Vector3Base globalPosition2, float lineWidth, DrawColor color);
+        void setBoxVisu(string layerName, string boxName, PoseBase globalPose, Vector3Base dimensions, DrawColor color);
+        void setTextVisu(string layerName, string textName, string text, Vector3Base globalPosition, DrawColor color, int size);
 
         /*!
          * \brief setPoseVisu draws on the "debug" layer
@@ -68,6 +70,8 @@ module armarx
          */
         void setPoseDebugLayerVisu(string poseName, PoseBase globalPose);
         void setLineDebugLayerVisu(string lineName, Vector3Base globalPosition1, Vector3Base globalPosition2, float lineWidth, DrawColor color);
+        void setBoxDebugLayerVisu(string boxName, PoseBase globalPose, Vector3Base dimensions, DrawColor color);
+        void setTextDebugLayerVisu(string textName, string text, Vector3Base globalPosition, DrawColor color, int size);
 
         /*!
          * \brief Remove visualization of coordinate system.
@@ -76,12 +80,26 @@ module armarx
          */
         void removePoseVisu(string layerName, string poseName);
         void removeLineVisu(string layerName, string lineName);
+        void removeBoxVisu(string layerName, string boxName);
+        void removeTextVisu(string layerName, string textName);
 
         /*!
          * \brief Removes pose from the "debug" layer.
          */
         void removePoseDebugLayerVisu(string poseName);
         void removeLineDebugLayerVisu(string lineName);
+        void removeBoxDebugLayerVisu(string boxName);
+        void removeTextDebugLayerVisu(string textName);
+
+        /*!
+         * \brief clear removes all visualizations for the given layer
+         * \param layerName The name identifies the layer.
+         */
+        void clear(string layerName);
+        /*!
+         * \brief clearDebugLayer calls <code>clear("debug");</code>
+         */
+        void clearDebugLayer();
 
     };